{"_id":"@absolutejs/secure-messaging-store-conformance","_rev":"3-c3e3b143fc3d80d74c5e1374a9e6bb3f","name":"@absolutejs/secure-messaging-store-conformance","dist-tags":{"latest":"0.2.0"},"versions":{"0.0.1":{"name":"@absolutejs/secure-messaging-store-conformance","version":"0.0.1","author":{"name":"Alex Kahn"},"license":"Apache-2.0","_id":"@absolutejs/secure-messaging-store-conformance@0.0.1","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/secure-messaging-adapters#readme","bugs":{"url":"https://github.com/absolutejs/secure-messaging-adapters/issues"},"dist":{"shasum":"86fb0196a86bffd58461c649fc521b82b86cd549","tarball":"https://registry.npmjs.org/@absolutejs/secure-messaging-store-conformance/-/secure-messaging-store-conformance-0.0.1.tgz","fileCount":7,"integrity":"sha512-5Hk2/fmAkV6jeawPjE8x89YsJ2hKBPxLFxkRz2yh99dMl9xWZLZz6kW5CEx9zjt4XZtIZCgej+ohASMW3+gQUQ==","signatures":[{"sig":"MEUCIDqjV0eLcusqXoPtkrj3uMVqOnJE0JBz7mXHlaWb1PUfAiEA4JTWO6IbgQp1jy8n6pGRGs17tM6Sb1vJBu+anZm98yU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34979},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"cac2a620a8539a395976e452b5eed74ab34b65bf","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts --outdir dist --root src --sourcemap --target=browser --external @absolutejs/secure-messaging && tsc --project tsconfig.build.json","release":"bun run check:package && npm publish --access public","typecheck":"tsc --noEmit","format:check":"prettier --check \"./**/*.{ts,json,md}\"","check:package":"bun run format:check && bun run typecheck && bun run test && bun run build"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"repository":{"url":"git+https://github.com/absolutejs/secure-messaging-adapters.git","type":"git","directory":"conformance"},"_npmVersion":"10.9.2","description":"Repeatable atomicity, replay, concurrency, and crash-boundary drills for SecureMessagingStore adapters.","directories":{},"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@absolutejs/secure-messaging":"0.5.1"},"peerDependencies":{"@absolutejs/secure-messaging":">=0.5.1 <0.6"},"_npmOperationalInternal":{"tmp":"tmp/secure-messaging-store-conformance_0.0.1_1787874280248_0.1290118196789023","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@absolutejs/secure-messaging-store-conformance","version":"0.1.0","author":{"name":"Alex Kahn"},"license":"Apache-2.0","_id":"@absolutejs/secure-messaging-store-conformance@0.1.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/secure-messaging-adapters#readme","bugs":{"url":"https://github.com/absolutejs/secure-messaging-adapters/issues"},"dist":{"shasum":"82e4bb6d201dbed18b11c8c6cfc3504d3e3aa304","tarball":"https://registry.npmjs.org/@absolutejs/secure-messaging-store-conformance/-/secure-messaging-store-conformance-0.1.0.tgz","fileCount":7,"integrity":"sha512-EK9yZy5ahJ5Z0YnVXRHQneczI2Jwe2x1Jz7pdBJWEdr2KJuCBMu85KQduEUubndv4g5IPZew3uSA/N7cqpnkjA==","signatures":[{"sig":"MEYCIQCPHTxYIpsQhPvHmLCaenEjCufdVgcrBI3wwaP/KMPwOQIhAJjNy4n1jmKzyAbYTlSoN5Os8MqbnEDE/0es06n44SKt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42658},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"a5e3ea32991615e717652e6ae73dd93086131466","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts --outdir dist --root src --sourcemap --target=browser --external @absolutejs/secure-messaging && tsc --project tsconfig.build.json","release":"bun run check:package && npm publish --access public","typecheck":"tsc --noEmit","format:check":"prettier --check \"./**/*.{ts,json,md}\"","check:package":"bun run format:check && bun run typecheck && bun run test && bun run build"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"repository":{"url":"git+https://github.com/absolutejs/secure-messaging-adapters.git","type":"git","directory":"conformance"},"_npmVersion":"10.9.2","description":"Repeatable atomicity, replay, concurrency, and crash-boundary drills for SecureMessagingStore adapters.","directories":{},"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@absolutejs/secure-messaging":"0.5.1"},"peerDependencies":{"@absolutejs/secure-messaging":">=0.5.1 <0.6"},"_npmOperationalInternal":{"tmp":"tmp/secure-messaging-store-conformance_0.1.0_1787875753983_0.8621452400534744","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@absolutejs/secure-messaging-store-conformance","version":"0.2.0","description":"Repeatable atomicity, replay, concurrency, and crash-boundary drills for SecureMessagingStore adapters.","type":"module","license":"Apache-2.0","author":{"name":"Alex Kahn"},"repository":{"type":"git","url":"git+https://github.com/absolutejs/secure-messaging-adapters.git","directory":"conformance"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"publishConfig":{"access":"public"},"scripts":{"build":"rm -rf dist && bun build src/index.ts --outdir dist --root src --sourcemap --target=browser --external @absolutejs/secure-messaging && tsc --project tsconfig.build.json","check:package":"bun run format:check && bun run typecheck && bun run test && bun run build","format:check":"prettier --check \"./**/*.{ts,json,md}\"","release":"bun run check:package && npm publish --access public","test":"bun test tests/","typecheck":"tsc --noEmit"},"peerDependencies":{"@absolutejs/secure-messaging":">=0.6.1 <0.7"},"devDependencies":{"@absolutejs/secure-messaging":"0.6.1"},"_id":"@absolutejs/secure-messaging-store-conformance@0.2.0","gitHead":"9c94ad2e5e2a7ed1d7ad259b82c6094265f423e5","bugs":{"url":"https://github.com/absolutejs/secure-messaging-adapters/issues"},"homepage":"https://github.com/absolutejs/secure-messaging-adapters#readme","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-rZ5xneTvBm0D2mWxqfiyeCr7rD6G0Nboe0os/RrM6H1o/077RBVP11+FdC1ISwYajAa+K10CD5iOIFsCnjPTjQ==","shasum":"2710b0bf7bd09f4b2293fa1ad8528fb4f9afbd7e","tarball":"https://registry.npmjs.org/@absolutejs/secure-messaging-store-conformance/-/secure-messaging-store-conformance-0.2.0.tgz","fileCount":7,"unpackedSize":48299,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCTl1xSuCEmBQPeLbpV9ozajIE3vf/F6j+f6VH1cm9iUgIhALkWmx0pIMvUyvaDyicGw3X9BW9avGPhzFu7Z+kyr1wU"}]},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"directories":{},"maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/secure-messaging-store-conformance_0.2.0_1787884356150_0.6267942915434226"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-27T23:44:40.104Z","modified":"2026-08-28T02:32:36.469Z","0.0.1":"2026-08-27T23:44:40.383Z","0.1.0":"2026-08-28T00:09:14.109Z","0.2.0":"2026-08-28T02:32:36.303Z"},"bugs":{"url":"https://github.com/absolutejs/secure-messaging-adapters/issues"},"author":{"name":"Alex Kahn"},"license":"Apache-2.0","homepage":"https://github.com/absolutejs/secure-messaging-adapters#readme","repository":{"type":"git","url":"git+https://github.com/absolutejs/secure-messaging-adapters.git","directory":"conformance"},"description":"Repeatable atomicity, replay, concurrency, and crash-boundary drills for SecureMessagingStore adapters.","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"readme":"# `@absolutejs/secure-messaging-store-conformance`\n\nFramework-neutral, repeatable drills for every `SecureMessagingStore` adapter.\nThe runner checks atomic state/replay/outbox commits, revision compare-and-swap,\nreplay conflicts, rollback, concurrent writers, idempotent outbox acknowledgement,\nrevision rollback rejection, revision-checked deletion, cloning, and ambiguous\ncommit retries.\n\n`runSecureMessagingDurabilityUncertaintyConformance()` injects the real\npost-mutation acknowledgement-loss boundary. It requires the adapter to throw\n`SecureMessagingDurabilityUncertainError`, resolves the authoritative store,\nhandles both the already-applied and safe-to-retry outcomes, and proves the\nfinal state and outbox effect exist exactly once.\n\n```ts\nawait runSecureMessagingStoreConformance({\n  createStore: (scenario) => createStoreForIsolatedTenant(scenario),\n});\n```\n\nUse an isolated tenant or freshly reset database for every scenario. Run this\nsuite in adapter CI, before PaaS releases, and during scheduled durability drills.\n\nBackup drills can call `seedSecureMessagingStoreRecovery`, capture an\noperator-controlled backup, call `mutateSecureMessagingStoreAfterRecoveryPoint`\nagainst the source, restore into an isolated target, and then call\n`verifySecureMessagingStoreRecovery` against that target. The fixture contains\nonly synthetic identifiers and encrypted bytes, so drill evidence never needs\ntenant data or key material.\n\nLicensed under Apache-2.0.\n","readmeFilename":"README.md"}