{"_id":"@arcadiasystems/morse-sdk","_rev":"19-d23cee380ff68e44b872ca2fcda8a127","name":"@arcadiasystems/morse-sdk","dist-tags":{"latest":"0.8.2"},"versions":{"0.1.0":{"name":"@arcadiasystems/morse-sdk","version":"0.1.0","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.1.0","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/TheDivic/morse-dcms#readme","bugs":{"url":"https://github.com/TheDivic/morse-dcms/issues"},"dist":{"shasum":"9ee97450f09b3026416c7d6b1354f69e135430e2","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.1.0.tgz","fileCount":156,"integrity":"sha512-L8S+bmpO7wJM+MC09LUkYW0Qx5j5BucdP8cgpRyg5TJ7RrL1VMBjN3L4ub7gtqGbHPZkkcFqKvYE4hRtg2j5dA==","signatures":[{"sig":"MEQCIFKhDf9qugdLB++zkxb+uu2DZAKzJoth8JUDrRiP9jykAiAo/L9jya0WiSqoPJOeYpd769nMKJZsyYQsJ9QJBjR1Fw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":456142},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"36717c11d5260b313ca3f6113c36beeadd07b7d4","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/TheDivic/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"peerDependenciesMeta":{"@mysten/seal":{"optional":true},"@mysten/walrus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.1.0_1779035331030_0.06966121581713725","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@arcadiasystems/morse-sdk","version":"0.1.1","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.1.1","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"5d559cef2a88dffd49b9dbaed84f14f1b1e33dfd","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.1.1.tgz","fileCount":156,"integrity":"sha512-eAAe1v8LUyg6sRAZLsr97rnuyZi8lSHrhmfdSbQwWHSEd1gVEAkqXpPuaTv96R5451oxPT/CkMYzeiKOflpMNw==","signatures":[{"sig":"MEUCIF21T7QJv4RgKqyUL0R4IGqxjTAFWhM0ud2DeJkOY7mWAiEAymiHW6ldNDiZzSCFJGj5l7beT8RK+Kzmy9eDE0qoJxg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":456797},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"5fa36f19227b3064ea1113f40545d3a5354c6789","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"peerDependenciesMeta":{"@mysten/seal":{"optional":true},"@mysten/walrus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.1.1_1779035604894_0.5093022863709804","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@arcadiasystems/morse-sdk","version":"0.1.2","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.1.2","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"40f597a90a1d14397d44f924104f4e3389d256d5","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.1.2.tgz","fileCount":160,"integrity":"sha512-4YVLteyeyMxmWhb3FTP95Oyw3CGwxiFXOngX9lnysi001RkbUdNy5DEZBJs5gKqX42l2PPV6tYEDNxOpy0T8Cg==","signatures":[{"sig":"MEYCIQDZDJggUQlvcKrxyGL5IxB4yrVIMvJSMpNepNDoXEk3JQIhAKzr8Q6epnyvwm2842KHcLK5x0MOkPNxErTqA5XFL/kd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":485656},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"5fa36f19227b3064ea1113f40545d3a5354c6789","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"peerDependenciesMeta":{"@mysten/seal":{"optional":true},"@mysten/walrus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.1.2_1779352386497_0.1339322541115886","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@arcadiasystems/morse-sdk","version":"0.1.3","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.1.3","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"56227c443c6c4b5d27ed7e6355437650cbb3f94e","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.1.3.tgz","fileCount":160,"integrity":"sha512-qVW6YaqJf2oFvafR+fjdAqjwdwbMDQ2yFaKYBSulr6kJ35rAR+uOISJ6558S1GSDtndnIVdRnPEXPiO7fK3Z0g==","signatures":[{"sig":"MEQCIAyX9Z9gephGDffhdLimlCGebzpLp9+wVvs3jdQJAbwWAiB+yzFvdcIpu/oR4ZssARCgLBA/NdIdqurtrgJxWKE8kQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":503970},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d094df2a16d5155a2e69673af6ff7cade3c83516","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"peerDependenciesMeta":{"@mysten/seal":{"optional":true},"@mysten/walrus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.1.3_1779366785118_0.3798677412490301","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@arcadiasystems/morse-sdk","version":"0.1.4","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.1.4","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"83b91b2ee2da000ffeaed5cb712f70b5907c047c","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.1.4.tgz","fileCount":160,"integrity":"sha512-sY+s1titAIkIZxIDHr18+S6aVyXS4qZDiZYe4Qk2Fhmi24GS1r6iRr2Owa1S28/3/fGRADb72MF8Mq+I4eZshw==","signatures":[{"sig":"MEYCIQDu8w6t5CFp83/xsoh6zOZiUnLSUcP5OVqQyAMJvmunRgIhALKHLNOuR3vh9g407jIu067ej0H8ll2aXzZfA9RR+ZRY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":517288},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"42935ed4b85505fe9707be583d7f31271862fc7e","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"peerDependenciesMeta":{"@mysten/seal":{"optional":true},"@mysten/walrus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.1.4_1779369949760_0.8243023077721177","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@arcadiasystems/morse-sdk","version":"0.2.0","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.2.0","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"93e23d816eea370d73f21d999ca7352e88f2f7d9","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.2.0.tgz","fileCount":188,"integrity":"sha512-BXBe1yM7fMYohFh7RTAqL+Y3z55rlVNqYVSbkrDAGuTXdQ6SoDazrtw26FIj0lWCPPJ27m9wOeXjdMhC+jeUyg==","signatures":[{"sig":"MEUCIQCRwDt9MHcPw8tvgwWiKloj9wMV9GsaUlYXcAHjCb4zJgIgPPQCRBcloEX0QMBzgcmbceynnIxw02EzP6pOTvzZxPc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":638570},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"06c0a543d08cdeef6f44b22f7a2c8971619b6d1b","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"peerDependenciesMeta":{"@mysten/seal":{"optional":true},"@mysten/walrus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.2.0_1780563730351_0.9730803510203645","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@arcadiasystems/morse-sdk","version":"0.3.0","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.3.0","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"8b0913955f65bfbc0ab4c523a42af7962257149e","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.3.0.tgz","fileCount":192,"integrity":"sha512-w+SScasmAAEpeisHZUndl9RfcvMIrrDYv5Ymlfb1EcRf7l0FIOuO6KI6O1kUM7JzC0BgfrXgQm10HPiiJmwaIA==","signatures":[{"sig":"MEYCIQDMcHPX4nGNM8/bqgDug/pfe828chfO3b59QC6+v7qVjAIhAKDYA9e3pwkxzxmjpsICSvxr6QzyeS7c0E5W4+u9oPNL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":665775},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"e5a33f257b2249e0e6d0f851102d56f3784d8898","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"peerDependenciesMeta":{"@mysten/seal":{"optional":true},"@mysten/walrus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.3.0_1780592150302_0.18519997268046673","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@arcadiasystems/morse-sdk","version":"0.4.0","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.4.0","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"f66433925f74e9877ff4021bca9f1a174553b23a","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.4.0.tgz","fileCount":184,"integrity":"sha512-xSd1aX7I4M260edA/QVE5KeTgv7kt6VkDFyw6fSXUPFBjaQr8u6k0BZlAYuJ7klJFNsfT9CtxiL38Y/Uf06i3Q==","signatures":[{"sig":"MEUCIQCghiUB2X1fkTPvlOxwf8II/6poSXPq6nPmZ/v51rEeaQIgNSVJo9zVViQ4/KjhXM0rtInSuaYiaj95l/ZmZe6dBOQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":651197},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"aac760730dff983224ce5f9c8d2746a5f7c1e496","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"peerDependenciesMeta":{"@mysten/seal":{"optional":true},"@mysten/walrus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.4.0_1780601176257_0.6704289275664108","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@arcadiasystems/morse-sdk","version":"0.4.1","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.4.1","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"fc0706c0caac1c671db608561aba8277b8317e34","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.4.1.tgz","fileCount":184,"integrity":"sha512-idkquDXni79Z2cOfwj61h2yhrjmYj8zF5QI6v/6y5ZDQavesvubjFA1kK0SoSY0OfZPEVCgqP4ebkOlM6GaGbA==","signatures":[{"sig":"MEUCIQD0YVTwGycWEI+dqZcC9aiCm5/YGFw8vKaGsIIpYN0wJwIgFnAf1AxiJNJ8yp9E2qR5OeBwrteXyWct+41LpIH2kDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":653983},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"c8143700a3c63a8651e8e9df8b93d4d251b6f819","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"peerDependenciesMeta":{"@mysten/seal":{"optional":true},"@mysten/walrus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.4.1_1780645590558_0.5867576267608519","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@arcadiasystems/morse-sdk","version":"0.4.2","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.4.2","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"95d017f6dfb125a2f965c5a0e2a8033522359b1c","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.4.2.tgz","fileCount":184,"integrity":"sha512-O2gHllAKM/wsxdNmTQVusUDGdpYobHZPqG8MilWXZ87W0kcjYSGapqe1dkxVJK2Y/DXEPOxWrLjn0S5HnrdfGA==","signatures":[{"sig":"MEYCIQDfALoH0+d44DI54gDhakzxrMiJ3FsxK0EzbJfdDJCuIAIhAPCzGUP5hm0f4W81LLzz0B79mj/WF7DoIaeBwc3ND5Au","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":655316},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"1eeac573c06a2be6e1fe0b22998e4e77dc733b95","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"peerDependenciesMeta":{"@mysten/seal":{"optional":true},"@mysten/walrus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.4.2_1780648759790_0.15866693943925614","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@arcadiasystems/morse-sdk","version":"0.4.3","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.4.3","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"e9aaf91a5c07b4febde7a6ce1abb5fce37a589c6","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.4.3.tgz","fileCount":184,"integrity":"sha512-9EHY6piPLP35tm2yM23+tsTMC6EGOBCYGQyC76kL0OeUP6S46dBz7rbrD1mZWxxdUYwVfRHMaaqwzIFgca2Jrg==","signatures":[{"sig":"MEUCIFRj3ET7RH6N+6NJRxzQGqpx4IDJnxCysyPhXuRRH1IhAiEAx9AK7DQm/9ZJwGo5z5bO+b9AIrJ64Da3LOQol/JRghI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":658323},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"9eb5e4f234f1810305af85f0024b94b4aa536dbf","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage"},"_npmUser":{"name":"manda21","email":"mandicnikola1989@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"11.9.0","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"25.6.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.4.3_1783534875714_0.9189375061282679","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@arcadiasystems/morse-sdk","version":"0.5.0","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.5.0","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"b0130b4ef363d67cc23390544c98ea047ae232e6","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.5.0.tgz","fileCount":184,"integrity":"sha512-RI3TfGVXEBcDMppVPe0+Z5AgB1brG8IjoyZmBAxSjpaAQtPyL5wAI1t3YZxxWzCABG1oA+ElPuXUPcGuskaptw==","signatures":[{"sig":"MEUCIGyPcX1XFmhNj7FXFtgcm1Td4ClIfHBvoqjia2S5ewl0AiEA3zUFU33KihmmDPnMWNP2PsgsA8ADQ3qdN4suQMTKuPI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":672533},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d3da77549c7234b9be27487fefa16598d4b5d983","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage","prepublishOnly":"bun run lint && bun run typecheck && bun test && bun run build"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.5.0_1788965844866_0.017061278487619402","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@arcadiasystems/morse-sdk","version":"0.6.0","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.6.0","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"3eb6e7ea4c2b4d79d82ad61115a2a33f759e190d","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.6.0.tgz","fileCount":184,"integrity":"sha512-cPlA3q49pBL0xpLdAdBeDYyVOtU0laKKdDA3VU4Cs3lSF8chefIuqF5Wh+RoAy9sUC2kp3d9roq5gHMiU5bRXA==","signatures":[{"sig":"MEQCICKZqodvX/dP/4DPbdOhrRMTmaX2x95Ks4dTfwW3rOk/AiBPJtiMf0V/yYrcEJbYoLDnE0ndZg8X1FkxPXtCibY3Dg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":682349},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f2d9f347045207902ee49fa1323ef702e0c20a9b","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage","prepublishOnly":"bun run lint && bun run typecheck && bun test && bun run build"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.6.0_1788970977582_0.7125410952064408","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@arcadiasystems/morse-sdk","version":"0.7.0","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.7.0","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"da723ecf08ab3859ba8b51164426bf0a56150d55","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.7.0.tgz","fileCount":184,"integrity":"sha512-pmhCEPQGm6aTvgr0zK7xa/kQRQ68L13NqgAHLQGpVs2auqPP0u3rscPB+ln0Vf/wqwpmD6/dzTqIxXASrAZDIw==","signatures":[{"sig":"MEUCIEBW5lxlonwhvcx8a4XC9ZD8eroOGx2kKKqiLd0YnJ23AiEAoUUg6uvTNBXT/pbCk9anJ3nqTobIaBlOUZcSrgQk+PI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":688031},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"541afab83311127c776f206376a547e5ec92520a","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage","prepublishOnly":"bun run lint && bun run typecheck && bun test && bun run build"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.7.0_1788972849271_0.07840087311761246","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@arcadiasystems/morse-sdk","version":"0.7.1","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.7.1","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"2d6969ea2b0c81d2cdbfdce593cc91d9539897de","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.7.1.tgz","fileCount":184,"integrity":"sha512-HBbN8C2Ei4eV0/9Mz1+fciaCZ5yaFMZqcpiZXOdWYQe0lG5AJEhaOddRi0Zf9CCWhdtOJtadGVGQpVgmaCzMNQ==","signatures":[{"sig":"MEUCIQCnBuScIIFfDzu4VKh4d21eZoiBnz1u31VFHDv/71lwoQIgbI2/bByxO+OXTrQYnQCWt0WIwzd26ivu8gqGwTW68h4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":689815},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"79d5b1f1b4288a7518127a6dd0cfa4915490189c","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage","prepublishOnly":"bun run lint && bun run typecheck && bun test && bun run build"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.7.1_1789018567552_0.9468541775213934","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@arcadiasystems/morse-sdk","version":"0.7.2","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.7.2","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"381af15d80deeba0f6ea896671d9306e656bf28e","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.7.2.tgz","fileCount":184,"integrity":"sha512-Z3T1FdWamuPAPOFUFXz4a2cQl/EpMhC4JRjzYxUdS1x2uHslJcnqLpjisnyUKGOZ48wNhgwNOSs0HN6hIx7Q/w==","signatures":[{"sig":"MEYCIQD3wupE/MPa38SBQHshnSF65pisXHiadwFXBiGXvX736wIhALXeefHG6RzaBJPPKQP1ID41K+unlkFlVZBk/megQCBk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":692964},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"33d49b2a7197f8eee5c436b003cb86ba04d4b999","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage","prepublishOnly":"bun run lint && bun run typecheck && bun test && bun run build"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.7.2_1789020302947_0.1679999438857398","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@arcadiasystems/morse-sdk","version":"0.8.0","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.8.0","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"9a35b36d51548faf191956ccae5988109ec73d4d","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.8.0.tgz","fileCount":184,"integrity":"sha512-13cW+XiAYo/q/R6/B4pUdUytwD1gruCgUTEM0tv/AhVOqrb1q1GKAUoqQ01UF0RG4zoO7QPKSkFI0kLt5twkXQ==","signatures":[{"sig":"MEYCIQDXhlwr529fd0lOsYN4d5PjEr8UTo9Ao69y7dRU8j/NRwIhAMfwq8/B9ntyPkStPQip0+3y/K9munzQhfVCgZ4Tn/wm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":706947},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"2a77e085bf4f22bcdfaceea1e1f81e576ae664a7","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage","prepublishOnly":"bun run lint && bun run typecheck && bun test && bun run build"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.8.0_1789027552162_0.19737136919749276","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@arcadiasystems/morse-sdk","version":"0.8.1","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"license":"MIT","_id":"@arcadiasystems/morse-sdk@0.8.1","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"dist":{"shasum":"2c9e447cdfdc5af9fc61f27d6e92f85387b03eba","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.8.1.tgz","fileCount":184,"integrity":"sha512-rkLOEb1Ze1Su987VjaouhRWvX39r3F0BkIW9DOieeoqNrt9XacBdIQWXltrNg6ZNvBES4UjouZd4W7emtdK+sw==","signatures":[{"sig":"MEQCIEaftkNXr90Zun7AIpVZSFhRtNIfdaLnIH3UHRp0AwGuAiAbuSrSmzKQqGbgWDmbQcb53OWxnEL5elts5FYeaes2AQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":708157},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.2.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f2f548206ed7ea69a42a168130d07c7c37d225ca","scripts":{"lint":"biome check .","test":"bun test","build":"tsc -p tsconfig.build.json","lint:fix":"biome check --write .","prebuild":"rm -rf dist","docs-gate":"bun scripts/docs-gate.ts","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage","prepublishOnly":"bun run lint && bun run typecheck && bun run docs-gate && bun test && bun run build"},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"repository":{"url":"git+https://github.com/arcadiasystems/morse-dcms.git","type":"git","directory":"morse-sdk"},"_npmVersion":"10.9.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@mysten/bcs":"2.0.3","@mysten/sui":"2.16.2","@mysten/seal":"1.1.3","@biomejs/biome":"2.4.7","@mysten/walrus":"1.1.6"},"peerDependencies":{"@mysten/sui":">=2.16.2 <2.17.0","@mysten/seal":">=1.1.3 <1.2.0","@mysten/walrus":">=1.1.6 <1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/morse-sdk_0.8.1_1789033326055_0.027067316473137204","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@arcadiasystems/morse-sdk","version":"0.8.2","description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","license":"MIT","type":"module","publishConfig":{"access":"public"},"sideEffects":false,"keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"repository":{"type":"git","url":"git+https://github.com/arcadiasystems/morse-dcms.git","directory":"morse-sdk"},"homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"prebuild":"rm -rf dist","prepublishOnly":"bun run lint && bun run typecheck && bun run docs-gate && bun test && bun run build","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","docs-gate":"bun scripts/docs-gate.ts","lint":"biome check .","lint:fix":"biome check --write .","test":"bun test","test:coverage":"bun test --coverage"},"engines":{"bun":">=1.2.0","node":">=18.0.0"},"peerDependencies":{"@mysten/seal":">=1.1.3 <1.2.0","@mysten/sui":">=2.16.2 <2.17.0","@mysten/walrus":">=1.1.6 <1.2.0"},"devDependencies":{"@biomejs/biome":"2.4.7","@mysten/bcs":"2.0.3","@mysten/seal":"1.1.3","@mysten/sui":"2.16.2","@mysten/walrus":"1.1.6","@types/bun":"latest","typescript":"^5.6.0"},"_id":"@arcadiasystems/morse-sdk@0.8.2","gitHead":"c9e53020d4d207242119ba2e71d0c962ee52ee21","_nodeVersion":"22.16.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-/K5dgQ2i3vY8180u9hB3qZXbCJUy1jhDYB+8hcI3GQDUhL7F0LUb9TeghCo0+kwqnfXgaSILLueVEwKbjCi/oQ==","shasum":"77f71ee182913b36de533e8ed25d0b08a2e1612d","tarball":"https://registry.npmjs.org/@arcadiasystems/morse-sdk/-/morse-sdk-0.8.2.tgz","fileCount":184,"unpackedSize":709731,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCx/EGmM1CGqPKoK2c4XIknoT5WLV9DwFnVCXJ1QamHxAIgKUBfhRyzDmMghpMqoV4USiYt1fn5wFhvQU0SsLiiMGI="}]},"_npmUser":{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},"directories":{},"maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/morse-sdk_0.8.2_1789113158682_0.36755718160782314"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-17T16:28:50.921Z","modified":"2026-09-11T07:52:39.006Z","0.1.0":"2026-05-17T16:28:51.203Z","0.1.1":"2026-05-17T16:33:25.034Z","0.1.2":"2026-05-21T08:33:06.658Z","0.1.3":"2026-05-21T12:33:05.277Z","0.1.4":"2026-05-21T13:25:49.909Z","0.2.0":"2026-06-04T09:02:10.574Z","0.3.0":"2026-06-04T16:55:50.520Z","0.4.0":"2026-06-04T19:26:16.425Z","0.4.1":"2026-06-05T07:46:30.736Z","0.4.2":"2026-06-05T08:39:20.048Z","0.4.3":"2026-07-08T18:21:15.848Z","0.5.0":"2026-09-09T14:57:25.021Z","0.6.0":"2026-09-09T16:22:57.744Z","0.7.0":"2026-09-09T16:54:09.396Z","0.7.1":"2026-09-10T05:36:07.740Z","0.7.2":"2026-09-10T06:05:03.101Z","0.8.0":"2026-09-10T08:05:52.352Z","0.8.1":"2026-09-10T09:42:06.215Z","0.8.2":"2026-09-11T07:52:38.810Z"},"bugs":{"url":"https://github.com/arcadiasystems/morse-dcms/issues"},"license":"MIT","homepage":"https://github.com/arcadiasystems/morse-dcms/tree/main/morse-sdk#readme","keywords":["sui","walrus","seal","cms","decentralized","blockchain"],"repository":{"type":"git","url":"git+https://github.com/arcadiasystems/morse-dcms.git","directory":"morse-sdk"},"description":"TypeScript SDK for Morse dCMS on the Sui blockchain.","maintainers":[{"name":"thedivic","email":"divicnikola@gmail.com"},{"name":"0xandreja","email":"andreja.kojadinovic@gmail.com"},{"name":"manda21","email":"mandicnikola1989@gmail.com"}],"readme":"# morse-sdk\n\nTypeScript SDK for [Morse](https://github.com/arcadiasystems/morse-dcms/tree/main/morse-contracts), a decentralized content management system on the Sui blockchain. Wraps the Move contract surface, Walrus storage, and Seal threshold encryption behind a typed adapter pattern.\n\n## Status\n\nPre-release. Mainnet and testnet are both wired: the Move contract addresses are baked in, so `morseConfig({ network: \"mainnet\" })` and `morseConfig({ network: \"testnet\" })` both return a complete config with no addresses to supply.\n\n**Encrypted content needs your own Seal key servers on mainnet.** Public publications, collections, entries and files work out of the box on both networks. Encryption does not, on mainnet: every mainnet Seal operator is commercial, including Mysten's committee aggregator, which rejects unauthenticated requests. `DefaultSealAdapter.fromMorseConfig` therefore throws `ConfigurationError` on mainnet until you supply `serverConfigs`. See [Network configuration](#network-configuration).\n\n**The contracts are unaudited.** On mainnet, SUI and WAL cost real money, there is no faucet, and a mistake is not recoverable. The publication lifecycle and the Walrus paths are verified end to end on mainnet; Seal is not, because mainnet has no key servers this SDK can reach without commercial credentials (see [Compatibility](#compatibility)). Treat mainnet as usable but young, and size your first deployment accordingly.\n\n## Install\n\nAll three Mysten packages are required peer dependencies. Pin the minors the SDK is verified against (see [Compatibility](#compatibility)):\n\nBun:\n\n```sh\nbun add @arcadiasystems/morse-sdk @mysten/sui@2.16.2 @mysten/walrus@1.1.6 @mysten/seal@1.1.3\n```\n\nnpm:\n\n```sh\nnpm install @arcadiasystems/morse-sdk @mysten/sui@2.16.2 @mysten/walrus@1.1.6 @mysten/seal@1.1.3\n```\n\npnpm:\n\n```sh\npnpm add @arcadiasystems/morse-sdk @mysten/sui@2.16.2 @mysten/walrus@1.1.6 @mysten/seal@1.1.3\n```\n\n`@mysten/sui` provides the client, keypairs, and transaction types; `@mysten/walrus` backs the default storage adapters (any publish path needs it); `@mysten/seal` backs threshold encryption. All three are imported by the SDK's public surface, so they must be installed even if you only use a subset — npm 7+ installs required peers automatically when you omit them.\n\n## Compatibility\n\nmorse-sdk is built and tested against specific minor versions of its Mysten substrate. Newer or older versions are not validated and may produce runtime errors. The peer-dependency ranges in `package.json` enforce these bounds — `bun install` will warn if you try to use a different minor.\n\n| morse-sdk | `@mysten/sui` | `@mysten/walrus` | `@mysten/seal` | Sui network | Verified  |\n| --------- | ------------- | ---------------- | -------------- | ----------- | --------- |\n| 0.8.x     | 2.16.2-2.16.x | 1.1.6-1.1.x      | 1.1.3-1.1.x    | testnet     | 2026-09-09 |\n| 0.7.x     | 2.16.2-2.16.x | 1.1.6-1.1.x      | 1.1.3-1.1.x    | testnet     | 2026-09-09 |\n| 0.6.x     | 2.16.2-2.16.x | 1.1.6-1.1.x      | 1.1.3-1.1.x    | testnet     | 2026-09-09 |\n| 0.5.x     | 2.16.2-2.16.x | 1.1.6-1.1.x      | 1.1.3-1.1.x    | testnet     | 2026-06-05 |\n| 0.4.x     | 2.16.2-2.16.x | 1.1.6-1.1.x      | 1.1.3-1.1.x    | testnet     | 2026-06-05 |\n| 0.1.x     | 2.16.2-2.16.x | 1.1.6-1.1.x      | 1.1.3-1.1.x    | testnet     | 2026-05-10 |\n\nMysten ships breaking changes inside major version boundaries. Newer minors (e.g. `@mysten/walrus@1.2.x`, `@mysten/sui@2.17+`) are outside the verified ranges and may produce runtime errors; morse-sdk needs a coordinated bump and re-verification before a new Mysten minor is supported. Pin via `bun add @arcadiasystems/morse-sdk@~0.8.0` if you want patch updates without surprise minors.\n\nThe verification protocol is documented in [`CONTRIBUTING.md`](https://github.com/arcadiasystems/morse-dcms/blob/main/morse-sdk/CONTRIBUTING.md): every Mysten dep bump runs the full `scripts/phase-N-*.ts` smoke suite before the bump lands.\n\nThe `Sui network` column records where the suite passes **in full**, which is testnet. Most of it also passes on mainnet: publications, publisher caps, collections, Walrus blob and quilt uploads, and the entry lifecycle in both collection modes were all verified against live mainnet on 2026-09-09. A browser round trip was verified separately on 2026-09-11, through [@arcadiasystems/morse-uploader](https://www.npmjs.com/package/@arcadiasystems/morse-uploader): a wallet-signed upload via the Walrus upload relay, then the same blob read back byte for byte from the mainnet aggregator. The two Seal phases cannot run on mainnet, because it has no key servers this SDK can reach without commercial credentials, so mainnet has no fully green run to record. `TESTED_SUBSTRATE.suiNetwork` reports the same thing programmatically.\n\n### Runtime requirements\n\nmorse-sdk is ESM-only (`\"type\": \"module\"` in `package.json`); CommonJS `require` is not supported.\n\n| Runtime | Supported | Notes                                                                                                                                            |\n| ------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |\n| Bun     | >= 1.2.0  | Primary development runtime. Enforced via `engines.bun`. Smoke scripts (`bun run scripts/phase-N-*.ts`) require Bun.                              |\n| Node    | >= 18.0   | Enforced via `engines.node`. Library code uses ES2022 features (private class fields, `Error.cause`), `TextEncoder` / `crypto.getRandomValues` / `BigInt` (all stable on Node 18+). Consumers install with `npm install @arcadiasystems/morse-sdk` or `pnpm add`. |\n| Browser | Evergreen | Chrome / Edge / Firefox / Safari recent stable. Bundlers (Vite, Webpack, esbuild) handle the rest. No `require`-based polyfills needed.            |\n\nThe SDK does not pull in Node-specific APIs (`fs`, `path`, `process`, `crypto` from `node:crypto`); the public surface is portable across both runtimes. A handful of `@mysten/*` substrate libraries reach into Node-shaped APIs internally — consult their documentation for browser polyfill requirements (typically zero with modern bundlers).\n\n## Quick start\n\nSetup once at startup:\n\n```ts\nimport { SuiGrpcClient } from \"@mysten/sui/grpc\";\nimport { Ed25519Keypair } from \"@mysten/sui/keypairs/ed25519\";\nimport {\n  KeypairAdapter,\n  morseConfig,\n  RpcPublicationReader,\n} from \"@arcadiasystems/morse-sdk\";\n\n// The quick start uses testnet on purpose: every step below spends gas and\n// WAL, and on mainnet that is real money. Switch both literals to \"mainnet\"\n// once the flow works for you.\nconst config = morseConfig({ network: \"testnet\" });\nconst client = new SuiGrpcClient({ network: \"testnet\", baseUrl: config.rpcUrl });\nconst keypair = Ed25519Keypair.fromSecretKey(privateKey); // Bech32 \"suiprivkey1...\"\nconst adapter = new KeypairAdapter(keypair, client);\n// Browser apps swap KeypairAdapter for a WalletAdapter impl against the\n// connected wallet's signer - see \"Adapter pattern\" below.\nconst reader = RpcPublicationReader.fromMorseConfig(config, client);\n```\n\nThen create a publication, add an entry, read it back:\n\n```ts\nimport {\n  addEntryFromBytes,\n  createCollection,\n  createPublication,\n  DefaultWalrusWriteAdapter,\n  StorageMode,\n} from \"@arcadiasystems/morse-sdk\";\n\n// Slugs are globally unique on-chain (like usernames) - make yours\n// collision-proof rather than copying a fixed example value.\nconst created = await createPublication(adapter, config, {\n  name: \"My Publication\",\n  slug: `my-pub-${Date.now()}`,\n});\nawait createCollection(adapter, config, {\n  publicationId: created.publicationId,\n  publisherCapId: created.publisherCapId,\n  name: \"blog\",\n  storageMode: StorageMode.Blob,\n});\n\nconst walrus = DefaultWalrusWriteAdapter.fromConfig(\n  { network: \"testnet\", suiClient: client },\n  keypair,\n);\n\nconst entry = await addEntryFromBytes(adapter, config, {\n  walrus,\n  publicationId: created.publicationId,\n  publisherCapId: created.publisherCapId,\n  collectionName: \"blog\",\n  name: \"first-post\",\n  bytes: new TextEncoder().encode(\"hello world\"),\n  contentType: \"text/plain\",\n  upload: { epochs: 3, deletable: true },\n});\nconst fetched = await reader.getEntry(created.publicationId, \"blog\", entry.entryId);\n```\n\n`addEntryFromBytes` runs in **2 wallet popups** (one for `register_blob`, one for the combined `certify_blob + add_entry_to_collection` PTB) instead of the 3 popups a separate `uploadBlob` + `addEntry` would emit. See \"Choosing the right entry path\" below for when to prefer the lower-level split form.\n\nThe compile-checked end-to-end version is in [`examples/quickstart.ts`](https://github.com/arcadiasystems/morse-dcms/blob/main/morse-sdk/examples/quickstart.ts).\n\n## Walrus access patterns\n\nmorse-sdk ships two pairs of Walrus adapters. They implement the same interfaces (`WalrusReadAdapter`, `WalrusWriteAdapter`) and the rest of the SDK is unchanged whichever pair you pick.\n\n| Pair                                                              | Trust model      | Browser CORS    | Popup count for upload + addEntry | Storage cost paid by |\n| ----------------------------------------------------------------- | ---------------- | --------------- | --------------------------------- | -------------------- |\n| `DefaultWalrusReadAdapter` + `DefaultWalrusWriteAdapter`          | Trustless (direct fanout to every storage node) | Spotty; depends on your network | 2 (with `addEntryFromBytes`) or 3 (split) | Consumer wallet (WAL + gas) |\n| `HttpAggregatorReadAdapter` + `HttpPublisherWriteAdapter`         | Operator-trusted | Reliable        | 1 (`uploadBlob` is a publisher HTTP call, only `addEntry` signs) | Publisher operator (WAL); consumer (Sui gas only) |\n\n**When to pick which:**\n- **Default direct-protocol pair**: trustless reads, full control. Best for CLI smokes, server-side dapps, or browser dapps that don't hit CORS gaps. The flow-aware optimization (`addEntryFromBytes`) cuts popups from 3 to 2.\n- **HTTP pair**: reliable browser reads (one CORS-friendly endpoint instead of ~30), and a \"publisher pays storage\" UX where the user signs only the on-chain `addEntry`. Trade trustless reads for operator trust; use `verifyBlobIntegrity` on the read adapter for a trust-but-verify path.\n\n### When direct writes fail: the upload relay\n\nA direct write pushes slivers to every node in the committee at once (95 on mainnet, ~100 on testnet). Networks that cannot sustain that burst fail with `NotEnoughBlobConfirmationsError` or \"Unable to connect\", **even when the nodes are healthy and far above write quorum**. If uploads fail for you while reads work, this is almost certainly why, and it is not a fault in your config.\n\n`WalrusAdapterConfig` is `@mysten/walrus`'s `WalrusClientConfig`, so you can hand the client an upload relay and let it do the fanout server-side. One connection replaces ~95:\n\n```ts\nconst writer = DefaultWalrusWriteAdapter.fromConfig(\n  {\n    network: \"mainnet\",\n    suiClient,\n    uploadRelay: {\n      host: \"https://upload-relay.mainnet.walrus.space\",\n      sendTip: { max: 10_000_000 },\n    },\n  },\n  signer,\n);\n```\n\nThree things to know before reaching for it:\n\n- **It costs a tip per upload**, on top of WAL and gas. Mainnet is linear in encoded size (40 MIST/KiB at the time of writing), testnet is a small constant. Query the live figure at `GET /v1/tip-config`.\n- **`sendTip.max` must cover it.** Too low and `@mysten/walrus` throws `Tip amount (N) exceeds the maximum allowed tip (M)` before uploading anything.\n- **The relay sees your bytes.** Same trust trade as the HTTP aggregator, so encrypt first if that matters.\n\nThe smoke scripts take `WALRUS_UPLOAD_RELAY=1` to route through the canonical relay for the selected network, which is the quickest way to tell a network problem apart from a real one.\n\nThe HTTP adapters are NOT compatible with `addEntryFromBytes` / `addEncryptedEntryFromBytes`. Those functions require `WalrusFlowCapable` for the 2-popup combined PTB; the publisher-paid path is naturally 1-popup through standard `uploadBlob` + `addEntry`.\n\n```ts\n// Default (direct, trustless, 2-3 popups). network is \"mainnet\" or \"testnet\";\n// Walrus has no localnet.\nconst reader = DefaultWalrusReadAdapter.fromConfig({ network: \"mainnet\", suiClient });\nconst writer = DefaultWalrusWriteAdapter.fromConfig({ network: \"mainnet\", suiClient }, signer);\n\n// HTTP (operator-trusted, 1 popup for upload+addEntry)\nconst reader = HttpAggregatorReadAdapter.fromMorseConfig(config, suiClient);\nconst writer = HttpPublisherWriteAdapter.fromConfig({\n  publisherUrl: \"https://walrus-testnet-publisher.nami.cloud\",\n  ownerAddress: account.address,\n});\n```\n\nThe aggregator URL is baked into `morseConfig.walrusEndpoints.aggregator` for both mainnet and testnet (Mysten's canonical service for each). The publisher URL is intentionally not baked in - publishers are operator-specific and consumers pick one explicitly. Note that the publisher in the snippet above is a testnet operator; there is no mainnet equivalent the SDK will pick for you.\n\n`HttpPublisherWriteAdapter` parses Mysten's published publisher binary (camelCase JSON) and the documented OpenAPI schema (snake_case fallback). For non-standard publisher forks that serve a different shape, pass `parseResponse` to `HttpPublisherWriteAdapter.fromConfig({ ..., parseResponse })` — it receives the raw decoded JSON and returns an `UploadBlobResult`, replacing the built-in parser. Throws from the callback propagate verbatim.\n\n## Choosing the right entry path\n\nThe SDK ships two ways to publish content. The high-level `addEntryFromBytes` (and its encrypted twin `addEncryptedEntryFromBytes`) is the recommended default; the split form (`uploadBlob` + `addEntry`) is for cases the high-level shape doesn't cover.\n\n| Use                                                  | Function                                            | Wallet popups |\n| ---------------------------------------------------- | --------------------------------------------------- | ------------- |\n| Publish raw bytes as a new entry (typical case)      | `addEntryFromBytes`                                 | 2             |\n| Publish encrypted bytes as a new entry               | `addEncryptedEntryFromBytes`                        | 2             |\n| Reuse one blob across many entries (deduplication)   | `uploadBlob` once, then `addEntry` N times          | 2 + N         |\n| Decouple upload and add-entry (e.g. draft-then-attach UX) | `uploadBlob` (upload time), `addEntry` (publish time) | 2 + 1         |\n| Server pre-uploads, browser only adds entries        | `uploadBlob` (server), `addEntry` (browser)         | 0 server + 1 browser |\n\n**`addEntryFromBytes` requires a `WalrusWriteAdapter` that also implements `WalrusFlowCapable`** (the optimization uses its flow-aware `startBlobUpload` API). The default `DefaultWalrusWriteAdapter` implements both; custom adapters that don't implement the capability are rejected with `TransportError` before any IO and should use the split form.\n\nIf `addEntryFromBytes` succeeds in popup 1 (register + upload) but fails in popup 2 (the combined certify + add_entry tx — user rejected, contract aborted, network blip), it throws `UncertifiedBlobError` carrying the `blobObjectId` and `blobId` of the orphaned blob. The blob is on storage nodes and you've paid for it but it's uncertified; storage releases on registration expiry. Surface the error to your user or log the IDs for support.\n\n## Examples\n\nPer-concern, compile-checked illustrative code. Each file is short, focused, and intended to be read alongside the JSDoc on the public exports.\n\n| Concern                               | File                                                                | Covers                                                                                |\n| ------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |\n| Setup                                 | [`examples/setup.ts`](https://github.com/arcadiasystems/morse-dcms/blob/main/morse-sdk/examples/setup.ts)                          | morseConfig, gRPC client, KeypairAdapter, reader                                      |\n| Quick start                           | [`examples/quickstart.ts`](https://github.com/arcadiasystems/morse-dcms/blob/main/morse-sdk/examples/quickstart.ts)                | End-to-end happy path                                                                 |\n| Publication lifecycle                 | [`examples/publication-lifecycle.ts`](https://github.com/arcadiasystems/morse-dcms/blob/main/morse-sdk/examples/publication-lifecycle.ts) | createPublication, transferOwnership, deletePublication                          |\n| Publisher cap roles                   | [`examples/publisher-caps.ts`](https://github.com/arcadiasystems/morse-dcms/blob/main/morse-sdk/examples/publisher-caps.ts)        | issuePublisherCap, transferPublisherCap, revokePublisherCap, destroyPublisherCap      |\n| Collections                           | [`examples/collections.ts`](https://github.com/arcadiasystems/morse-dcms/blob/main/morse-sdk/examples/collections.ts)              | createCollection (Blob and Quilt modes), deleteCollection                             |\n| Entries (revisions, draft → publish)  | [`examples/entries.ts`](https://github.com/arcadiasystems/morse-dcms/blob/main/morse-sdk/examples/entries.ts)                      | addEntry, appendDraftRevision, publishFromDraft, publishDirect, deleteEntry           |\n| Encrypted entries                     | [`examples/encrypted-entries.ts`](https://github.com/arcadiasystems/morse-dcms/blob/main/morse-sdk/examples/encrypted-entries.ts)  | buildPublisherSealId, encrypt, addEncryptedEntry, appendEncryptedDraftRevision, decrypt |\n| Reading                               | [`examples/reading.ts`](https://github.com/arcadiasystems/morse-dcms/blob/main/morse-sdk/examples/reading.ts)                      | getPublication, getEntry, getRevision, listEntries, scanEntries                       |\n| Browser wallet integration            | [`examples/wallet-standard.ts`](https://github.com/arcadiasystems/morse-dcms/blob/main/morse-sdk/examples/wallet-standard.ts)      | WalletAdapter impl against `@mysten/dapp-kit` hooks (or any wallet-standard signer)   |\n| React + dapp-kit + Suiet              | [`examples/wallet-standard-react.md`](https://github.com/arcadiasystems/morse-dcms/blob/main/morse-sdk/examples/wallet-standard-react.md) | Worked walkthrough: providers, connect button, hook, adapter wiring, Seal SessionKey  |\n| Walrus HTTP adapters                  | [`examples/walrus-http-adapters.ts`](https://github.com/arcadiasystems/morse-dcms/blob/main/morse-sdk/examples/walrus-http-adapters.ts) | HttpAggregatorReadAdapter + HttpPublisherWriteAdapter (browser-friendly, operator-paid storage) |\n\n## API reference\n\nThe full public surface, grouped by concern. Every export carries a JSDoc on its definition; this table is the index, not the documentation.\n\n### Configuration\n\n| Export | Purpose |\n| --- | --- |\n| `morseConfig({ network })` | Build a `NetworkConfig` for mainnet or testnet (canonical addresses baked in), or supply override fields for forks / local nodes. |\n| `Network` | Const enum-like: `\"mainnet\" \\| \"testnet\" \\| \"localnet\"`. Mainnet and testnet resolve to canonical deployments; localnet throws `ConfigurationError` unless you pass `packageId` and `registryId`. |\n| `DEFAULT_RPC_URLS` | Public Sui fullnode URLs per network. Read-only. |\n| `TESTED_SUBSTRATE` | Mysten substrate versions verified end-to-end. Diagnostic constant. |\n\n### Domain ops (write paths)\n\n| Export | Purpose |\n| --- | --- |\n| `createPublication(adapter, config, args)` | Create + share publication; returns `{ publicationId, ownerCapId, publisherCapId }`. |\n| `transferOwnership(adapter, config, args)` | Transfer the OwnerCap to a new address. |\n| `deletePublication(reader, adapter, config, args)` | Delete an empty publication; pre-flight checks for collections. |\n| `issuePublisherCap` / `revokePublisherCap` / `destroyPublisherCap` / `transferPublisherCap` | PublisherCap lifecycle. Issue + transfer-to-holder is atomic. |\n| `createCollection` / `deleteCollection` | Collection lifecycle in blob or quilt mode. |\n| `addEntryFromBytes(adapter, config, args)` | **Recommended.** Upload + add entry in 2 wallet popups. |\n| `addEncryptedEntryFromBytes(adapter, config, args)` | Encrypt + upload + add encrypted entry in 2 wallet popups. |\n| `addEntry` / `addEncryptedEntry` | Lower-level: add entry against a pre-uploaded `blobObjectId`. |\n| `appendDraftRevision` / `appendEncryptedDraftRevision` / `publishFromDraft` / `publishDirect` | Revision lifecycle on existing entries. |\n| `deleteEntry` | Remove an entry and its revisions. |\n| `createRecipientFile(adapter, config, args)` | Register + share a `RecipientFile` for a blob already on Walrus (single PTB). |\n| `createEncryptedRecipientFile(adapter, config, args)` | Same, for a blob already Seal-encrypted under a caller-supplied `sealIdPrefix`. |\n| `uploadRecipientFileFromBytes(adapter, config, args)` | **Recommended.** Upload bytes + register + share a `RecipientFile` addressed to N recipients in 2 wallet popups. |\n| `uploadEncryptedRecipientFileFromBytes(adapter, config, args)` | **Recommended.** Encrypt via Seal + upload + register in 2 wallet popups; returns `{ sealIdPrefix, sealNonce, fileId, ... }` for later decrypt. |\n| `addRecipient` / `removeRecipient` | Mutate the file's embedded recipient set (owner-only). |\n| `updateRecipientFileMetadata` / `transferRecipientFileOwnership` / `deleteRecipientFile` | RecipientFile lifecycle (owner-only). |\n\n### Reader (RPC-backed)\n\n| Export | Purpose |\n| --- | --- |\n| `RpcPublicationReader.fromMorseConfig(config, client)` | Construct a publication reader bound to the canonical `originalPackageId` for type filters. |\n| `reader.getPublication` / `getEntry` / `getRevision` / `getPublisherCap` | Single-object reads. |\n| `reader.listPublicationsOwnedBy` / `listPublisherCapsOwnedBy` / `listEntries` | Paginated lists. |\n| `reader.scanEntries` | Async-iterator over every entry in a collection. |\n| `RpcRecipientFilesReader.fromMorseConfig(config, client)` | Construct a reader for the `recipient_file` module. |\n| `filesReader.getRecipientFile(id)` | Live single-object read (parses embedded `members`, blob refs). Throws `ValidationError` if the id resolves to an object of another Move type. |\n| `filesReader.getRecipientFileSealPrefix(id)` | The file's Seal id prefix, or `null`. The only reliable \"is this encrypted\" signal. Costs an extra round trip, so it is a separate call. |\n| `buildRecipientFileEventTypes(originPackageId)` | Fully-qualified event type strings for the `RecipientFile*` events; pass `config.recipientFileEventOriginPackageId`. |\n| `reconcileRecipientFilesOwnedBy(events, address, eventTypes)` / `reconcileRecipientFilesAccessibleBy(...)` | Pure event-reconciliation helpers — bring your own indexer, get current file sets back. |\n\n### Adapters\n\n| Export | Purpose |\n| --- | --- |\n| `KeypairAdapter` | Server / CLI `WalletAdapter` wrapping a raw `Ed25519Keypair`. |\n| `WalletStandardSigner.fromAccount(account, callbacks)` | Browser-side `Signer` for `@mysten/walrus` and `@mysten/seal`; wraps wallet-standard wallets without ever holding the user's key. Sync; throws `UnsupportedWalletSchemeError` on non-canonical `account.publicKey` (e.g. Phantom). |\n| `WalletStandardSigner.fromAccountAsync(account, callbacks, options?)` | Same as `fromAccount`, with signature-based pubkey recovery for wallets that return a non-canonical `account.publicKey` (Phantom). Pass `options.pubkeyCache` to skip the recovery probe across sessions. One extra wallet popup on first session per address; subsequent sessions are zero-popup when a cache is supplied. |\n| `BrowserStoragePubkeyCache({ storage?, prefix? })` | `PubkeyCache` backed by browser `localStorage`. Customizable storage backend (for tests, `sessionStorage`, or polyfills) and key prefix. |\n| `DefaultWalrusWriteAdapter.fromConfig(config, signer)` | Walrus uploads (blob + quilt). Implements `WalrusFlowCapable` (the 2-popup optimization). |\n| `DefaultWalrusReadAdapter.fromConfig(config)` | Walrus reads (`readBlob`, `readBlobByObjectId`, `readQuiltPatch`, `readBlobRef`). |\n| `HttpPublisherWriteAdapter.fromConfig({ publisherUrl, ownerAddress })` | Walrus uploads via a publisher HTTP service (operator pays storage; 1 popup for upload + addEntry). |\n| `HttpAggregatorReadAdapter.fromMorseConfig(config, suiClient)` / `.fromConfig({ aggregatorUrl, suiClient })` | Walrus reads via a single CORS-friendly aggregator endpoint instead of fanout to ~30 storage nodes. |\n| `DefaultSealAdapter.fromMorseConfig(config, options, suiClient)` | Threshold encryption / decryption. Defaults to the network's canonical key servers: two independent servers on testnet, none on mainnet (throws `ConfigurationError`; pass `serverConfigs`). |\n| `MAINNET_SEAL_COMMITTEE` | Mysten's mainnet Seal committee as a ready-made `sealKeyServers` value. Requires the `apiKeyName` / `apiKey` Mysten issues you; not a default. |\n| `WalletAdapter` / `WalrusWriteAdapter` / `WalrusReadAdapter` / `SealAdapter` | Interfaces for substituting custom implementations. |\n| `WalrusFlowCapable` / `isWalrusFlowCapable` | Optional capability for the 2-popup `addEntryFromBytes` path. |\n\n### Seal identity\n\n| Export | Purpose |\n| --- | --- |\n| `buildPublisherSealId(publicationId, nonce)` | Build a publisher-policy Seal identity (`pubId(32) \\|\\| tag(1) \\|\\| nonce`). |\n| `decodePublisherSealId(sealId)` | Inspect a publisher identity. Throws `ValidationError` on tampered tags. |\n| `buildRecipientFileSealId(prefix, nonce)` | Build a recipient-file Seal identity (`prefix \\|\\| tag(3) \\|\\| nonce`). |\n| `decodeRecipientFileSealId(sealId, prefixLength)` | Inspect a recipient-file identity (layout is not self-delimiting; caller supplies `prefixLength`). |\n| `randomSealPrefix()` / `randomSealNonce()` | Helpers for the common case: 32 random prefix bytes / 16 random nonce bytes. |\n| `RECOMMENDED_SEAL_PREFIX_BYTES` / `RECOMMENDED_SEAL_NONCE_BYTES` | The recommended sizes as constants (32 / 16). |\n\n### Codecs (branded ID constructors)\n\n| Export | Purpose |\n| --- | --- |\n| `toPackageId` / `toRegistryId` / `toPublicationId` / `toOwnerCapId` / `toPublisherCapId` / `toBlobObjectId` / `toSuiAddress` / `toSuiObjectId` | Validate and normalize Sui object IDs to canonical 64-char hex. |\n| `toWalrusBlobId` | Validate Walrus content-addressed blob ID (43-char URL-safe-base64). |\n| `toQuiltPatchId` | Validate 37-byte quilt patch ID. |\n| `accessPolicyToU8` / `accessPolicyFromU8` / `storageModeToU8` / `storageModeFromU8` | Move enum ↔ TypeScript enum conversion. |\n| `encodeQuiltPatchId` / `decodeQuiltPatchId` / `quiltPatchIdToString` / `quiltPatchIdFromString` | Quilt patch ID structural codec (`{quiltBlobId, version, startIndex, endIndex}`). |\n\n### Errors\n\n| Export | Purpose |\n| --- | --- |\n| `MorseError` | Abstract base. Every SDK throw extends it. |\n| `ValidationError` (`field`) | Client-side input rejection. |\n| `NotFoundError` (`resource`, `identifier`) | Object missing on-chain or on Walrus. |\n| `UnauthorizedError` | Client-side auth check failed. |\n| `ContractAbortError` (`module`, `abortCode`, `reason`) | Move VM aborted; `ABORT_CODES` table maps codes to names. |\n| `SealError` (`code`) | Seal authorization or decryption failure (`no-access` / `decrypt-failed` / `session-expired` / `rate-limited`). |\n| `TransportError` | RPC, network, or response-parsing failure. |\n| `ConfigurationError` | SDK config gap (e.g. unsupported network, raw-byte sign on `WalletStandardSigner`). |\n| `UncertifiedBlobError` (`blobObjectId`, `blobId`) | `addEntryFromBytes` upload succeeded but second popup failed. |\n\n### Types\n\n`Publication`, `Collection`, `Entry`, `Revision`, `PublisherCap`, `OwnerCap`, `BlobRef`, `AccessPolicy`, `StorageMode`, `SealPolicyTag`, `RecipientFile` / `RecipientFileSummary` / `RecipientFileFull`, branded ID types (`PublicationId`, `RecipientFileId`, `BlobObjectId`, `WalrusBlobId`, `QuiltPatchId`, etc.).\n\n## Conceptual model\n\n```\nPublicationRegistry              (one shared object, name-uniqueness index)\n  Publication                    (one shared object per publication)\n    Collection × N               (inline VecMap; storage mode fixed at create)\n      Entry × N                  (dynamic-field table; monotonic u64 ids)\n        Revision × N             (append-only vector; never mutated in place)\n```\n\n- **Publication**: top-level container with a globally-unique slug. Holds collections inline. Owned via `OwnerCap`; write access delegated via `PublisherCap`.\n- **Collection**: named bucket for entries. `storageMode` (`Blob` or `Quilt`) is immutable after creation.\n- **Entry**: identified by a stable monotonic `u64`. Carries a `name`, append-only `revisions`, and `draftHead` / `publicHead` pointers.\n- **Revision**: immutable. Carries a `BlobRef` (Walrus blob object or quilt patch id), `contentType`, `encrypted` flag, `accessPolicy`, `sealId`, and `author`.\n\n## Adapter pattern\n\nThree abstractions; the SDK ships default impls and accepts substitutions:\n\n- **`WalletAdapter`** signs and submits Sui transactions. Default: `KeypairAdapter`. Browser apps implement against a wallet-standard signer.\n- **`WalrusWriteAdapter`** uploads bytes to Walrus, returns the resulting blob's Sui object id. Default: `DefaultWalrusWriteAdapter` wrapping `@mysten/walrus`.\n- **`SealAdapter`** encrypts and decrypts under a publisher Seal identity. Default: `DefaultSealAdapter` wrapping `@mysten/seal`.\n\nReader pattern is parallel: `PublicationReader` is the interface, `RpcPublicationReader` is the gRPC-backed default. An indexer-backed reader could implement the same shape.\n\nAlways construct readers and seal adapters via `fromMorseConfig` (e.g. `RpcPublicationReader.fromMorseConfig(config, client)`); the raw constructors take `originalPackageId` directly and passing the wrong value silently empties type-filtered list results.\n\n## Wallet scheme support\n\n`WalletStandardSigner.fromAccount(account, callbacks)` takes a wallet-standard `WalletAccount` and produces a Sui `Signer` for `@mysten/walrus` and `@mysten/seal`. It tries every plausible interpretation of `account.publicKey` (raw bytes and Sui's canonical with-flag encoding) and picks the one whose derived address matches `account.address`.\n\n| Scheme    | Status                        | Verified against                                                            | Notes                                                                                                                                                                                                |\n| --------- | ----------------------------- | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| ED25519   | Supported (verified)          | Slush + imported keypair, `@mysten/seal@1.1.3`, `@mysten/walrus@1.1.6`, 2026-05-10 | Accepts raw 32-byte key (Suiet) and Sui canonical `0x00 \\|\\| 32 raw` (Slush). Most common configuration.                                                                                              |\n| Secp256k1 | Supported (decoder)           | -                                                                           | Accepts raw 33-byte key and `0x01 \\|\\| 33 raw`. End-to-end behavior on Walrus + Seal not yet verified against a wallet that exposes Secp256k1 accounts.                                              |\n| Secp256r1 | Supported (decoder)           | -                                                                           | Accepts raw 33-byte key and `0x02 \\|\\| 33 raw`. Disambiguated from Secp256k1 / Passkey by address derivation.                                                                                        |\n| Passkey   | Supported (decoder)           | -                                                                           | Accepts raw 33-byte key and `0x06 \\|\\| 33 raw`. WebAuthn signing inside the wallet; `Signer` surface unchanged.                                                                                      |\n| ZkLogin   | Decoder ships, E2E unverified | -                                                                           | Variable-length `[1 iss-len][iss][32 addressSeed]` identifier (auto-detects modern vs legacy address derivation). Walrus and Seal `SessionKey` flows have not been smoke-tested with zkLogin signatures; fall back to a keypair account if you see errors. |\n| MultiSig  | Refused                       | -                                                                           | Variable-length aggregation of multiple keys; signing semantics differ from `Signer` and have not been wired up. Implement a custom `Signer` subclass if you need it.                                |\n| Phantom (Sui) | Supported via `fromAccountAsync` | 2026-05-21                                                              | Phantom returns a 59-byte non-canonical blob in `account.publicKey`. `fromAccount` rejects it; `fromAccountAsync` recovers the real Ed25519 key from a probe signature. See subsection below.        |\n\nRefused schemes throw `UnsupportedWalletSchemeError` (a `ConfigurationError` subclass) at construction time. The error carries the raw `publicKeyBytes`, the reported `address`, and an optional `walletName`, so consumer dapps can render a wallet-specific CTA without parsing message strings.\n\n### Wallets with non-canonical `publicKey` (Phantom)\n\nPhantom's Sui adapter returns a 59-byte opaque blob in `account.publicKey` instead of the canonical 32 / 33-byte form mandated by wallet-standard. This is a documented Phantom quirk (see the Sui developer forum thread from August 2025), not an SDK gap.\n\nFor Phantom-class wallets, use `WalletStandardSigner.fromAccountAsync` instead of `fromAccount`, and pass a `PubkeyCache` to avoid re-prompting on every page reload:\n\n```ts\nimport {\n  WalletStandardSigner,\n  BrowserStoragePubkeyCache,\n  UnsupportedWalletSchemeError,\n} from \"@arcadiasystems/morse-sdk\";\n\ntry {\n  const signer = await WalletStandardSigner.fromAccountAsync(account, callbacks, {\n    pubkeyCache: new BrowserStoragePubkeyCache(),\n  });\n} catch (err) {\n  if (err instanceof UnsupportedWalletSchemeError) {\n    // Render: \"Your wallet uses an unsupported scheme. Try Slush or Suiet.\"\n    // err.code, err.publicKeyBytes, err.address, err.walletName available.\n  }\n}\n```\n\n`fromAccountAsync` tries the sync decoder first (no extra IO for compliant wallets), and on failure recovers the real Ed25519 public key by asking the wallet to sign a domain-separated probe message. Sui's canonical signature is `flag || sig || pk` (97 bytes for Ed25519); the last 32 bytes are the raw key. The recovered key is verified to derive to `account.address` before the signer is constructed.\n\nWithout a cache, the probe popup fires every session (every page reload, every component remount). With a `BrowserStoragePubkeyCache`, the popup fires once per address; subsequent sessions read from `localStorage` and skip the probe. The cached pubkey is still verified to derive to `account.address` on every load, so stale entries (wallet switch, planted bytes) heal automatically: the SDK calls `cache.clear?.(address)` and re-probes.\n\nFor non-browser contexts (SSR, Node, native), implement the `PubkeyCache` interface against IndexedDB, Redis, or any KV store. Methods may be sync or async.\n\nThe probe message is `\"morse-sdk:wallet-pubkey-recovery:\" + address`, wrapped by Sui's `signPersonalMessage` `\"Sui Message:\"` prefix, so it cannot collide with a real transaction. Compliant wallets pay no extra cost; they take the sync `fromAccount` path inside `fromAccountAsync` and skip both the probe and the cache.\n\n## Error taxonomy\n\nAll errors extend `MorseError`. Narrow by class:\n\n| Class                | Carries                          | Thrown when                                                          |\n| -------------------- | -------------------------------- | -------------------------------------------------------------------- |\n| `ValidationError`    | `field`                          | Client-side input failed a precondition.                             |\n| `NotFoundError`      | `resource`, `identifier`         | Object doesn't exist on-chain.                                       |\n| `UnauthorizedError`  | -                                | Client-side auth check failed before submit.                         |\n| `ContractAbortError` | `module`, `abortCode`, `reason`  | Move VM aborted (e.g. `ESlugAlreadyExists`).                         |\n| `SealError`          | `code` (`no-access` / `decrypt-failed` / `session-expired` / `rate-limited`) | Seal authorization or decryption failed. |\n| `TransportError`     | `operation?` (e.g. `sui.getObject`, `walrus.publisher.uploadBlob`, `seal.decrypt`) | RPC, network, or response-parsing failure. |\n| `ConfigurationError` | -                                | SDK config gap (e.g. unsupported network).                           |\n| `UnsupportedWalletSchemeError` | `code` (`non-canonical-pubkey` / `malformed-zklogin` / `recovery-sig-length` / `recovery-non-ed25519` / `recovery-address-mismatch`), `publicKeyBytes`, `address`, optional `walletName` | `WalletStandardSigner.fromAccount` rejected the account's `publicKey` shape, or the async recovery flow could not extract a key that derives to `account.address`. |\n| `UncertifiedBlobError` | `blobObjectId`, `blobId`       | `addEntryFromBytes` upload succeeded but the combined certify+add_entry tx failed; the blob is uploaded but uncertified. |\n\n```ts\ntry {\n  await addEntry(adapter, config, args);\n} catch (err) {\n  if (err instanceof ContractAbortError && err.reason === \"EPublisherCapRevoked\") {\n    // your cap was revoked - issue a new one\n  } else if (err instanceof SealError && err.code === \"no-access\") {\n    // identity rejected by key servers\n  } else if (err instanceof NotFoundError && err.resource === \"entry\") {\n    // entry was deleted between read and write\n  } else if (err instanceof TransportError) {\n    // network blip - retry; err.operation names the failing call (e.g. \"sui.getObject\")\n  } else {\n    throw err;\n  }\n}\n```\n\n### `formatUserMessage`: UI-ready translation\n\nFor consumer dapps that surface SDK errors in toasts, dialogs, or banners, `formatUserMessage(err)` translates any throw (`MorseError` or otherwise) into a `{ title, description, cause }` triple with domain-neutral copy. Use it as the default branch after your own domain-specific handlers:\n\n```ts\nimport { formatUserMessage } from \"@arcadiasystems/morse-sdk\";\n\ntry {\n  await addEntryFromBytes(adapter, config, args);\n} catch (err) {\n  if (err instanceof SealError && err.code === \"no-access\") {\n    toast.error(\"You don't have permission\", { description: \"Ask the author for access.\" });\n    return;\n  }\n  const { title, description } = formatUserMessage(err);\n  toast.error(title, { description });\n  // `cause` is preserved on the formatted object for logging.\n}\n```\n\nCopy uses the protocol's own terminology (\"publication\", \"entry\", \"PublisherCap\"). For consumer domains (blog → post, gallery → image, docs → article), narrow on the error class first and write your own message; `formatUserMessage` is the fallback for everything else.\n\n## Network configuration\n\n```ts\nconst config = morseConfig({ network: \"mainnet\" }); // or \"testnet\"\n// {\n//   network, rpcUrl, packageId, originalPackageId,\n//   recipientFileEventOriginPackageId, registryId,\n//   sealKeyServers: [...],        // canonical allowlist for the network\n//   walrusEndpoints: { aggregator }\n// }\n```\n\nThe two networks differ in their Seal allowlist, and the difference is not cosmetic:\n\n- **testnet** pins two independent Mysten key servers, so the default threshold is 2 of 2.\n- **mainnet** pins nothing, and `DefaultSealAdapter.fromMorseConfig` throws `ConfigurationError` until you supply servers. There is no free open operator on mainnet: the independent ones are commercial and issue per-consumer API keys, and Mysten's committee aggregator answers `401 No API key found in request` to unauthenticated callers.\n\n  This is a hard failure on purpose. Seal reads key-server public keys from chain but fetches key shares from the operator, so an unusable operator still lets `encrypt` succeed and fails only at `decrypt`. Defaulting to one would let you encrypt, pay to store the ciphertext on Walrus, and discover later that it cannot be read. Once you have credentials, `MAINNET_SEAL_COMMITTEE` is the committee in the right shape:\n\n  ```ts\n  const config = morseConfig({\n    network: \"mainnet\",\n    sealKeyServers: MAINNET_SEAL_COMMITTEE.map((s) => ({\n      ...s,\n      apiKeyName: \"x-api-key\",\n      apiKey: process.env.SEAL_API_KEY,\n    })),\n  });\n  ```\n\nOverride individual fields for forks or local nodes:\n\n```ts\nconst config = morseConfig({\n  network: \"localnet\",\n  packageId: \"0x...\",     // required: no canonical localnet deployment\n  registryId: \"0x...\",    // required\n  rpcUrl: \"http://127.0.0.1:9000\",\n});\n```\n\n`packageId` is the published-at address (used for Move calls). `originalPackageId` is the genesis publish address (used for Sui type filters and Seal package binding). Always thread both through `morseConfig` and let the SDK pick the right one per call site.\n\n## Known limitations\n\n- **Unaudited contracts**. The Move package has not been audited. This is the main reason to be conservative about what you put on mainnet.\n- **No encrypted publish path**. The Move contract hardcodes `encrypted=false` on `publish_from_draft` and `publish_direct`. Encrypted content stays as drafts.\n- **`Subscription` access policy is reserved**, not enforced.\n- **`listEntries` ordering is dynamic-field object-store order**, not chronological. Sort by `entry.id` for insertion order.\n- **Walrus flakiness**. `NotEnoughBlobConfirmationsError` from the underlying client is environmental; rerun. The SDK preserves the original error as the `cause` (use `instanceof` for narrowing - Walrus error classes don't set `.name`). Browser consumers may additionally see `NoBlobMetadataReceivedError` on reads from testnet due to CORS gaps on a subset of Walrus storage nodes; `HttpAggregatorReadAdapter` exists to route around that. Mainnet node CORS coverage has not been measured by this project, so browser *fanout* reads there are unproven rather than known-good; the aggregator read path is the one verified on mainnet.\n- **Walrus uploads need WAL, not just SUI**. Uploads error with `Insufficient balance of ::wal::WAL` if you skip this. On testnet, get SUI from the [Sui faucet](https://faucet.sui.io/) and swap some for WAL at [stake-wal.wal.app](https://stake-wal.wal.app/?network=testnet). On mainnet there is no faucet: both SUI and WAL have to be acquired, and every upload spends real value.\n- **Walrus storage is epoch-funded, not permanent**. Blobs persist for the epochs you pay for and expire afterwards unless renewed, on both networks. Epoch length differs (a testnet epoch is roughly a day; mainnet epochs are much longer), so the same `epochs` argument buys very different durations. Walrus testnet is additionally wiped periodically, so treat testnet payloads as disposable; mainnet blobs are not wiped but still lapse if you let storage expire. The on-chain revision history is immutable either way.\n- **gRPC client only**. The reader and adapter interfaces are typed against `Pick<SuiGrpcClient, ...>` from `@mysten/sui/grpc`. `SuiJsonRpcClient` from `@mysten/sui/jsonRpc` has differently-named methods (`getDynamicFields` vs `listDynamicFields`, etc.) and is not yet a drop-in alternative. JSON-RPC fallback is planned; for now, environments that block gRPC need to proxy or use a gRPC-compatible RPC endpoint.\n\n## Smoke scripts\n\nThe `scripts/` directory has end-to-end smokes that cost real WAL and SUI. They're the canonical \"this works against the live deployment\" checks. They default to testnet; set `MORSE_NETWORK=mainnet` to point them at mainnet, which additionally requires `MORSE_ALLOW_MAINNET=1` because every mainnet run spends real value.\n\n| Script                    | Exercises                                          |\n| ------------------------- | -------------------------------------------------- |\n| `phase-2-publication.ts`  | Publication CRUD                                   |\n| `phase-3-cap.ts`          | Cap issue / revoke / destroy                       |\n| `phase-4-collection.ts`   | Blob and quilt-mode collection lifecycle           |\n| `phase-5-walrus.ts`       | Walrus blob and quilt upload                       |\n| `phase-6-blob.ts`         | Entry lifecycle in a Blob collection               |\n| `phase-6-quilt.ts`        | Entry lifecycle in a Quilt collection              |\n| `phase-7-encrypted.ts`    | Seal encrypt + addEncryptedEntry + decrypt         |\n| `phase-6-blob-http.ts`    | HTTP publisher upload + aggregator read; skips when `WALRUS_PUBLISHER_URL` unset |\n| `phase-7-encrypted-http.ts` | HTTP variant of phase-7; skips when `WALRUS_PUBLISHER_URL` unset |\n\nEach requires `PRIVATE_KEY` (Bech32 `suiprivkey1...`) on a funded address; phase-5 onward also needs WAL on the same address. Phase-7 picks up Seal key servers from `morseConfig.sealKeyServers` by default - pass `SEAL_KEY_SERVERS` only if you want to override with a custom set.\n\n`WALRUS_UPLOAD_RELAY=1` routes the Walrus uploads through the canonical relay for the selected network instead of the direct fanout (see [When direct writes fail](#when-direct-writes-fail-the-upload-relay)). Set it to an explicit base URL to use a different relay. Phases 5 onward fail on networks that cannot open ~95 simultaneous connections; this is the switch that tells that apart from a real defect.\n\n`MORSE_NETWORK` selects the target network and defaults to `testnet`. Only `mainnet` and `testnet` are accepted, since Walrus has no localnet. Running against mainnet additionally requires `MORSE_ALLOW_MAINNET=1`:\n\n```sh\nMORSE_NETWORK=mainnet MORSE_ALLOW_MAINNET=1 bun run scripts/phase-2-publication.ts\n```\n\nThe second variable is not redundant. These scripts create and delete real publications, collections, entries and Walrus blobs, which on mainnet costs real SUI and WAL. Requiring two variables means an inherited `MORSE_NETWORK` from another shell cannot quietly spend money. Every script derives its Walrus and Sui clients from the same resolved network, so a mainnet Sui client can never pair with a testnet Walrus client.\n\n## Development\n\n```sh\n# from the repo root\nbun install\n\n# from morse-sdk/\nbun run lint\nbun run typecheck\nbun run test\nbun run test:coverage   # per-file coverage report\nbun run build\n```\n\n`bun test` is the unit test runner; `bun run test:coverage` adds a per-file coverage report. CI gates require all four (lint, typecheck, test, build) to pass; coverage is informational. End-to-end testnet smokes live in `scripts/` (above).\n\n## License\n\nMIT. See [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}