{"_id":"@aws-blocks/bb-kv-store","_rev":"10-ec5cf51eb9ee4b01bedf3ebf3a8ba31a","name":"@aws-blocks/bb-kv-store","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@aws-blocks/bb-kv-store","version":"0.1.0","author":{"name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-blocks/bb-kv-store@0.1.0","maintainers":[{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"}],"dist":{"shasum":"b707229cde580affeaed9e0211dea7f305e2b8bd","tarball":"https://registry.npmjs.org/@aws-blocks/bb-kv-store/-/bb-kv-store-0.1.0.tgz","fileCount":47,"integrity":"sha512-4GxmCAQYF0IWuY8E3m9CQ1xcUnB5HNGdaC6e97Rsb7gUBCYavIfMiJR+9zipPQm65AeFQiHDBv4Zuf03FbUO4w==","signatures":[{"sig":"MEQCIGcDCMMMrRKpSQRwbENyz1BN2L56jSV2eWTNNT2X0TQeAiAZHb8D9Tae7tzhXoczDjKN7NM9zdOgH4XZJSGfR6a19A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118474},"type":"module","exports":{".":{"cdk":{"types":"./dist/index.cdk.d.ts","default":"./dist/index.cdk.js"},"types":"./dist/index.mock.d.ts","browser":"./dist/index.browser.js","default":"./dist/index.mock.js","aws-runtime":"./dist/index.aws.js"}},"gitHead":"639f6fad510d473abd72286351b3294a646d9895","scripts":{"test":"node --test dist/index.test.js dist/parity.test.js dist/logger-injection.test.js dist/index.cdk.test.js","build":"tsc --build","prebuild":"node ../../scripts/generate-version.mjs KVStore"},"_npmUser":{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"},"_npmVersion":"10.9.8","description":"Simple key-value storage backed by DynamoDB.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"@aws-blocks/core":"^0.1.0","@aws-blocks/bb-logger":"^0.1.0","@aws-sdk/lib-dynamodb":"^3.0.0","@standard-schema/spec":"^1.1.0","@aws-sdk/client-dynamodb":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.0.0"},"peerDependencies":{"constructs":"^10.6.0","aws-cdk-lib":"^2.257.0"},"_npmOperationalInternal":{"tmp":"tmp/bb-kv-store_0.1.0_1781566758354_0.42019028243360523","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aws-blocks/bb-kv-store","version":"0.1.1","author":{"name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-blocks/bb-kv-store@0.1.1","maintainers":[{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"}],"dist":{"shasum":"f344c15dd227c6e4b540b05cba608566698f4631","tarball":"https://registry.npmjs.org/@aws-blocks/bb-kv-store/-/bb-kv-store-0.1.1.tgz","fileCount":47,"integrity":"sha512-eXcy1Wlgikqa0lW+xGXllQI9AQqwkQtvQ74TK41hX6M8t5VZSWHB5ZXh9Mr0YYUXg/YWW3PV4jAmKdSMJ8elaw==","signatures":[{"sig":"MEYCIQDWSCEOWl1FZy1CKqgy5CEPQXwmYWhiQSMaH5B7sgwy7QIhAIjnBYr+X70vXC6PR4lsv7N/ZAxHcMEFPfGMyYgu72iP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118765},"type":"module","exports":{".":{"cdk":{"types":"./dist/index.cdk.d.ts","default":"./dist/index.cdk.js"},"types":"./dist/index.mock.d.ts","browser":"./dist/index.browser.js","default":"./dist/index.mock.js","aws-runtime":"./dist/index.aws.js"}},"gitHead":"ed3e0ad5724d28c2a2fb0ea9207dfc9e941257f9","scripts":{"test":"node --test dist/index.test.js dist/parity.test.js dist/logger-injection.test.js dist/index.cdk.test.js","build":"tsc --build","prebuild":"node ../../scripts/generate-version.mjs KVStore"},"_npmUser":{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"},"_npmVersion":"10.9.8","description":"Simple key-value storage backed by DynamoDB.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"@aws-blocks/core":"^0.1.1","@aws-blocks/bb-logger":"^0.1.1","@aws-sdk/lib-dynamodb":"^3.0.0","@standard-schema/spec":"^1.1.0","@aws-sdk/client-dynamodb":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.0.0"},"peerDependencies":{"constructs":"^10.6.0","aws-cdk-lib":"^2.257.0"},"_npmOperationalInternal":{"tmp":"tmp/bb-kv-store_0.1.1_1781633763907_0.09267454388178598","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@aws-blocks/bb-kv-store","version":"0.1.2","author":{"name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-blocks/bb-kv-store@0.1.2","maintainers":[{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"}],"dist":{"shasum":"eea913281dde9461c488b77630b275e3ac778174","tarball":"https://registry.npmjs.org/@aws-blocks/bb-kv-store/-/bb-kv-store-0.1.2.tgz","fileCount":47,"integrity":"sha512-lZ2YzW20BMjgOuzXbu3dJ8gb8zflCPziHTtOE15MtQiDX7MkVQAaObbV1D2JsdfuoHUoTKqBdErjzOM/WbOxqw==","signatures":[{"sig":"MEUCIGko1iKYgntBNNYO2rxsNQ28Jj1ZhbHJiDYo2ycHKsb8AiEAwMf21NBGeucPN5JqkIj9QaxK/9A+MJeddrNPfT1qDVo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118786},"type":"module","exports":{".":{"cdk":{"types":"./dist/index.cdk.d.ts","default":"./dist/index.cdk.js"},"types":"./dist/index.mock.d.ts","browser":"./dist/index.browser.js","default":"./dist/index.mock.js","aws-runtime":"./dist/index.aws.js"}},"gitHead":"4c367f4fb4d80d7b98dfe0296573d48aaf4b1ddf","scripts":{"test":"node --test --test-concurrency=1 dist/index.test.js dist/parity.test.js dist/logger-injection.test.js dist/index.cdk.test.js","build":"tsc --build","prebuild":"node ../../scripts/generate-version.mjs KVStore"},"_npmUser":{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"},"_npmVersion":"10.9.8","description":"Simple key-value storage backed by DynamoDB.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"@aws-blocks/core":"^0.1.2","@aws-blocks/bb-logger":"^0.1.1","@aws-sdk/lib-dynamodb":"^3.0.0","@standard-schema/spec":"^1.1.0","@aws-sdk/client-dynamodb":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.0.0"},"peerDependencies":{"constructs":"^10.6.0","aws-cdk-lib":"^2.257.0"},"_npmOperationalInternal":{"tmp":"tmp/bb-kv-store_0.1.2_1781753360080_0.5016104067350027","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@aws-blocks/bb-kv-store","version":"0.1.3","author":{"name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-blocks/bb-kv-store@0.1.3","maintainers":[{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"}],"dist":{"shasum":"7fcd89e24ab267e3cbb293b3dc487d1057164c79","tarball":"https://registry.npmjs.org/@aws-blocks/bb-kv-store/-/bb-kv-store-0.1.3.tgz","fileCount":48,"integrity":"sha512-h1DHcveEzgD1Tq3pMGK3zGK6hGksSM7/KNX3VEeY/fVn6FgTwB2xh/07ycHS4KtEdhKMWZiHxZO6Y8iHiakslQ==","signatures":[{"sig":"MEUCICSSuz3CYylY6vIvg8RIaw7/dliU90ult6PWYXUKTy8jAiEAy078OG7rGZ4KqzRF/AoFGxr4p2sABkl9DHuCQ4MJHac=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121744},"type":"module","exports":{".":{"cdk":{"types":"./dist/index.cdk.d.ts","default":"./dist/index.cdk.js"},"types":"./dist/index.mock.d.ts","browser":"./dist/index.browser.js","default":"./dist/index.mock.js","aws-runtime":"./dist/index.aws.js"}},"gitHead":"3328f36992d39dc20b0c0d760e4a38c866ddfbbd","scripts":{"test":"node --test --test-concurrency=1 dist/index.test.js dist/parity.test.js dist/logger-injection.test.js dist/index.cdk.test.js","build":"tsc --build","prebuild":"node ../../scripts/generate-version.mjs KVStore"},"_npmUser":{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"},"_npmVersion":"10.9.8","description":"Simple key-value storage backed by DynamoDB.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"@aws-blocks/core":"^0.1.2","@aws-blocks/bb-logger":"^0.1.2","@aws-sdk/lib-dynamodb":"^3.0.0","@standard-schema/spec":"^1.1.0","@aws-sdk/client-dynamodb":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.0.0"},"peerDependencies":{"constructs":"^10.6.0","aws-cdk-lib":"^2.257.0"},"_npmOperationalInternal":{"tmp":"tmp/bb-kv-store_0.1.3_1782192246251_0.4606156319952788","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@aws-blocks/bb-kv-store","version":"0.1.4","author":{"name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-blocks/bb-kv-store@0.1.4","maintainers":[{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"}],"dist":{"shasum":"1026656009355d743d34d0e86cc44e087b67a223","tarball":"https://registry.npmjs.org/@aws-blocks/bb-kv-store/-/bb-kv-store-0.1.4.tgz","fileCount":48,"integrity":"sha512-bfYDnO6xXrx5WwA44rd5UEfA0kvaGPGrrA/0rZsXj2wwix7ritSlo3o1uBJE7ufqxpYNEf9RfWqWLvKLuX727Q==","signatures":[{"sig":"MEQCIB+jn809X9SsJihGAzFD8D3w1klCfDZCwBVwOPtfbPspAiA9Curocyn90BYvtVC4f0Np6wCGCFwcbj4wpmJ1Bo7v2w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123898},"type":"module","exports":{".":{"cdk":{"types":"./dist/index.cdk.d.ts","default":"./dist/index.cdk.js"},"types":"./dist/index.mock.d.ts","browser":"./dist/index.browser.js","default":"./dist/index.mock.js","aws-runtime":"./dist/index.aws.js"}},"gitHead":"5d2cd0ee74b6687337cef6516b490ff56900aa52","scripts":{"test":"node --test --test-concurrency=1 dist/*.test.js","build":"tsc --build","prebuild":"node ../../scripts/generate-version.mjs KVStore"},"_npmUser":{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"},"_npmVersion":"10.9.8","description":"Simple key-value storage backed by DynamoDB.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"@aws-blocks/core":"^0.1.6","@aws-blocks/bb-logger":"^0.1.2","@aws-sdk/lib-dynamodb":"^3.0.0","@standard-schema/spec":"^1.1.0","@aws-sdk/client-dynamodb":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.0.0"},"peerDependencies":{"constructs":"^10.6.0","aws-cdk-lib":"^2.257.0"},"_npmOperationalInternal":{"tmp":"tmp/bb-kv-store_0.1.4_1782791094110_0.36966308082108945","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@aws-blocks/bb-kv-store","version":"0.1.5","author":{"name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-blocks/bb-kv-store@0.1.5","maintainers":[{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"}],"homepage":"https://github.com/aws-devtools-labs/aws-blocks/tree/main/packages/bb-kv-store#readme","bugs":{"url":"https://github.com/aws-devtools-labs/aws-blocks/issues"},"dist":{"shasum":"55c4ccfd3c3564b8a44f99546a0274b27dcaf508","tarball":"https://registry.npmjs.org/@aws-blocks/bb-kv-store/-/bb-kv-store-0.1.5.tgz","fileCount":56,"integrity":"sha512-ofaLK0l1TTpz4K6VcI5QKw4O1fMoq+QCMIp8adj4pCROSnWkn3e+mwmhtGr3i1UtzW6pNiHEybE3tT+imVzD5A==","signatures":[{"sig":"MEYCIQCtYLvsGdMbhRWY6W6vDaztblYKiJUMiHPQ4a6J4wH87wIhAJam/YjXVn8owAta/sJAxj5ESUkOl0nngNqKo3bJHLoy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aws-blocks%2fbb-kv-store@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":202561},"type":"module","exports":{".":{"cdk":{"types":"./dist/index.cdk.d.ts","default":"./dist/index.cdk.js"},"types":"./dist/index.mock.d.ts","browser":"./dist/index.browser.js","default":"./dist/index.mock.js","aws-runtime":"./dist/index.aws.js"}},"gitHead":"f6b9cad7b543663cc9ea73a4476ca5511255d779","scripts":{"test":"node --test --test-concurrency=1 dist/*.test.js","build":"tsc --build","prebuild":"node ../../scripts/generate-version.mjs KVStore"},"_npmUser":{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"},"repository":{"url":"git+https://github.com/aws-devtools-labs/aws-blocks.git","type":"git","directory":"packages/bb-kv-store"},"_npmVersion":"10.9.8","description":"Simple key-value storage backed by DynamoDB.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@aws-blocks/core":"^0.1.17","@aws-blocks/bb-logger":"^0.1.3","@aws-sdk/lib-dynamodb":"^3.0.0","@standard-schema/spec":"^1.1.0","@aws-sdk/client-dynamodb":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.0.0"},"peerDependencies":{"constructs":"^10.6.0","aws-cdk-lib":"^2.257.0"},"_npmOperationalInternal":{"tmp":"tmp/bb-kv-store_0.1.5_1786135410461_0.6331173881029861","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@aws-blocks/bb-kv-store","version":"0.1.6","author":{"name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-blocks/bb-kv-store@0.1.6","maintainers":[{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"}],"homepage":"https://github.com/aws-devtools-labs/aws-blocks/tree/main/packages/bb-kv-store#readme","bugs":{"url":"https://github.com/aws-devtools-labs/aws-blocks/issues"},"dist":{"shasum":"f6fa655b73fce46369d50d17455c133b1f4783d1","tarball":"https://registry.npmjs.org/@aws-blocks/bb-kv-store/-/bb-kv-store-0.1.6.tgz","fileCount":56,"integrity":"sha512-o6ZrzdNGX1l/icWY3vfJzygo58BTCBnP314Id95/XneLAKZpqleGpa7Q7GkJt3ql4pEQB+qcBCQQ3lhWsECtEg==","signatures":[{"sig":"MEYCIQDdgm+SuDq5o/qvLsoT7z9YqWR58VR67PoPghE9QHbhnQIhAJ6++jWl7PSQ4w2MEcuL7DMxcmypSoWb58IR+mY1CA0K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aws-blocks%2fbb-kv-store@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":208412},"type":"module","exports":{".":{"cdk":{"types":"./dist/index.cdk.d.ts","default":"./dist/index.cdk.js"},"types":"./dist/index.mock.d.ts","browser":"./dist/index.browser.js","default":"./dist/index.mock.js","aws-runtime":"./dist/index.aws.js"}},"gitHead":"164b106810e2b4f7801426158feae82a4ccbe3d4","scripts":{"test":"node --test --test-concurrency=1 dist/*.test.js","build":"tsc --build","prebuild":"node ../../scripts/generate-version.mjs KVStore"},"_npmUser":{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"},"repository":{"url":"git+https://github.com/aws-devtools-labs/aws-blocks.git","type":"git","directory":"packages/bb-kv-store"},"_npmVersion":"10.9.8","description":"Simple key-value storage backed by DynamoDB.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@aws-blocks/core":"^0.2.0","@aws-blocks/bb-logger":"^0.1.4","@aws-sdk/lib-dynamodb":"^3.0.0","@standard-schema/spec":"^1.1.0","@aws-sdk/client-dynamodb":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.0.0"},"peerDependencies":{"constructs":"^10.6.0","aws-cdk-lib":"^2.257.0"},"_npmOperationalInternal":{"tmp":"tmp/bb-kv-store_0.1.6_1787230453674_0.789085878135138","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@aws-blocks/bb-kv-store","version":"0.1.7","author":{"name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-blocks/bb-kv-store@0.1.7","maintainers":[{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"}],"homepage":"https://github.com/aws-devtools-labs/aws-blocks/tree/main/packages/bb-kv-store#readme","bugs":{"url":"https://github.com/aws-devtools-labs/aws-blocks/issues"},"dist":{"shasum":"5cd5beb23c7dd2d9aa0a574e13be3aa1e590ca7e","tarball":"https://registry.npmjs.org/@aws-blocks/bb-kv-store/-/bb-kv-store-0.1.7.tgz","fileCount":56,"integrity":"sha512-mPD7gxEqZdefY/MbnxijqQm5IfQxpb/ucyFAS0yUrLlsO8499wkf9Otrn3xvE0WUyQenmGpMUV6aoExTGtyL3A==","signatures":[{"sig":"MEUCIAzfQZZQFEe+4LLZe1qz8wbEXEWxh4LLkB1eyoDosyCbAiEAydL0/1/UjWSisw49simGqCXWJwhgmvb/SiWiqeJl5/A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aws-blocks%2fbb-kv-store@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":208979},"type":"module","exports":{".":{"cdk":{"types":"./dist/index.cdk.d.ts","default":"./dist/index.cdk.js"},"types":"./dist/index.mock.d.ts","browser":"./dist/index.browser.js","default":"./dist/index.mock.js","aws-runtime":"./dist/index.aws.js"}},"gitHead":"04d4b21b1cae9600c44a2fc63c0020ca21894316","scripts":{"test":"node --test --test-concurrency=1 dist/*.test.js","build":"tsc --build","prebuild":"node ../../scripts/generate-version.mjs KVStore"},"_npmUser":{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"},"repository":{"url":"git+https://github.com/aws-devtools-labs/aws-blocks.git","type":"git","directory":"packages/bb-kv-store"},"_npmVersion":"10.9.8","description":"Simple key-value storage backed by DynamoDB.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@aws-blocks/core":"^0.3.0","@aws-blocks/bb-logger":"^0.1.5","@aws-sdk/lib-dynamodb":"^3.0.0","@standard-schema/spec":"^1.1.0","@aws-sdk/client-dynamodb":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.0.0"},"peerDependencies":{"constructs":"^10.6.0","aws-cdk-lib":"^2.257.0"},"_npmOperationalInternal":{"tmp":"tmp/bb-kv-store_0.1.7_1788264346818_0.9297013966082428","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@aws-blocks/bb-kv-store","version":"0.1.8","author":{"name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-blocks/bb-kv-store@0.1.8","maintainers":[{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"}],"homepage":"https://github.com/aws-devtools-labs/aws-blocks/tree/main/packages/bb-kv-store#readme","bugs":{"url":"https://github.com/aws-devtools-labs/aws-blocks/issues"},"dist":{"shasum":"0c956d647c0ca22b02d84e2bae0c2b4366670809","tarball":"https://registry.npmjs.org/@aws-blocks/bb-kv-store/-/bb-kv-store-0.1.8.tgz","fileCount":56,"integrity":"sha512-ZfIt4Yy5NDPIjwqKc7k5GvVppPDPJvYCaIGJb+Y3uwbzv+u6vNcqxGcNKFUBYwoHUCIsphNKYVIK+R7PbMsXRA==","signatures":[{"sig":"MEUCIB+tdKVoCHMZ75/YuEIFFiNHF/Y9BieKR1j3oTkB8vl0AiEAmN0SmXM3muKn4zWs27MaDVipyQwpfeXNslWRmKUSnoc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEgIPK8QtNhW4Lsdd2K0EYKcO8W4NMLDdx5GNJ0rkYuLAiEA90CM0Dc1YeQWc2emWd8zypE6xDDBTY9TyWWhMtyKRSU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aws-blocks%2fbb-kv-store@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":208979},"type":"module","exports":{".":{"cdk":{"types":"./dist/index.cdk.d.ts","default":"./dist/index.cdk.js"},"types":"./dist/index.mock.d.ts","browser":"./dist/index.browser.js","default":"./dist/index.mock.js","aws-runtime":"./dist/index.aws.js"}},"gitHead":"ce01923c591828486e07d3d3f2b6b9d585e39057","scripts":{"test":"node --test --test-concurrency=1 dist/*.test.js","build":"tsc --build","prebuild":"node ../../scripts/generate-version.mjs KVStore"},"_npmUser":{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"},"repository":{"url":"git+https://github.com/aws-devtools-labs/aws-blocks.git","type":"git","directory":"packages/bb-kv-store"},"_npmVersion":"10.9.8","description":"Simple key-value storage backed by DynamoDB.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@aws-blocks/core":"^0.4.0","@aws-blocks/bb-logger":"^0.1.6","@aws-sdk/lib-dynamodb":"^3.0.0","@standard-schema/spec":"^1.1.0","@aws-sdk/client-dynamodb":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.0.0"},"peerDependencies":{"constructs":"^10.6.0","aws-cdk-lib":"^2.257.0"},"_npmOperationalInternal":{"tmp":"tmp/bb-kv-store_0.1.8_1788867615289_0.8385432410358831","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"_id":"@aws-blocks/bb-kv-store@0.2.0","bugs":{"url":"https://github.com/aws-devtools-labs/aws-blocks/issues"},"dist":{"shasum":"3f23f0d9dcbb80cc9b62e3e1cb35e6eca553b20b","tarball":"https://registry.npmjs.org/@aws-blocks/bb-kv-store/-/bb-kv-store-0.2.0.tgz","fileCount":56,"integrity":"sha512-YOQRHpTAxnH6ZKWncZM8O4A4D6X4ZvR1QySo+f5/PMB84bVSlhn+Gb2C2a4naJm5z6fiq35tN5QFu8q0wCMJ7g==","signatures":[{"sig":"MEUCIGrdUuYtpO1WDuD3hV4Ak8ZU7joPrqUO3eixPJNLIJ7iAiEAwU4Ifgne9qZGY5FVyYF5nHau5MlYuqCe1l3DQ0cw0FY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCuq49o1DWkgWY4Dlqt48iin9ia5zS2ywVztd35tI74dAIgGbojNoNsypDLC4eVNydZNK1jACAfbR48n6K547TU7Hg="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aws-blocks%2fbb-kv-store@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":248346},"name":"@aws-blocks/bb-kv-store","type":"module","author":{"name":"Amazon Web Services"},"exports":{".":{"cdk":{"types":"./dist/index.cdk.d.ts","default":"./dist/index.cdk.js"},"types":"./dist/index.mock.d.ts","browser":"./dist/index.browser.js","default":"./dist/index.mock.js","aws-runtime":"./dist/index.aws.js"}},"gitHead":"51eeb265ab5efdbd853e989cf8bd6d30951c29c7","license":"Apache-2.0","scripts":{"test":"node --test --test-concurrency=1 dist/*.test.js","build":"tsc --build","prebuild":"node ../../scripts/generate-version.mjs KVStore"},"version":"0.2.0","_npmUser":{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"},"homepage":"https://github.com/aws-devtools-labs/aws-blocks/tree/main/packages/bb-kv-store#readme","keywords":["aws-blocks","key-value","dynamodb","storage"],"repository":{"url":"git+https://github.com/aws-devtools-labs/aws-blocks.git","type":"git","directory":"packages/bb-kv-store"},"_npmVersion":"10.9.8","description":"Simple key-value storage backed by DynamoDB.","directories":{},"maintainers":[{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"}],"_nodeVersion":"22.23.2","dependencies":{"@aws-blocks/core":"^0.5.0","@aws-blocks/bb-logger":"^0.2.0","@aws-sdk/lib-dynamodb":"^3.0.0","@standard-schema/spec":"^1.1.0","@aws-sdk/client-dynamodb":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.0.0"},"peerDependencies":{"constructs":"^10.6.0","aws-cdk-lib":"^2.257.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bb-kv-store_0.2.0_1789678816476_0.16127904745924382"}}},"time":{"created":"2026-06-15T23:39:18.180Z","modified":"2026-09-17T21:00:16.944Z","0.1.0":"2026-06-15T23:39:18.498Z","0.1.1":"2026-06-16T18:16:04.043Z","0.1.2":"2026-06-18T03:29:20.262Z","0.1.3":"2026-06-23T05:24:06.403Z","0.1.4":"2026-06-30T03:44:54.240Z","0.1.5":"2026-08-07T20:43:30.580Z","0.1.6":"2026-08-20T12:54:13.811Z","0.1.7":"2026-09-01T12:05:46.981Z","0.1.8":"2026-09-08T11:40:15.385Z","0.2.0":"2026-09-17T21:00:16.588Z"},"bugs":{"url":"https://github.com/aws-devtools-labs/aws-blocks/issues"},"author":{"name":"Amazon Web Services"},"license":"Apache-2.0","homepage":"https://github.com/aws-devtools-labs/aws-blocks/tree/main/packages/bb-kv-store#readme","repository":{"url":"git+https://github.com/aws-devtools-labs/aws-blocks.git","type":"git","directory":"packages/bb-kv-store"},"description":"Simple key-value storage backed by DynamoDB.","maintainers":[{"name":"aws-blocks-npm-ops","email":"aws-blocks@amazon.com"}],"readme":"# KVStore\n\nSimple key-value storage backed by DynamoDB.\n\n**When to use:** Fast, single-key lookups with get/put/delete semantics. Good for caches, session stores, feature flags, and config values.\n\n**When NOT to use:** If you need to query by multiple fields or secondary indexes, use `DistributedTable`. If you need full SQL, use `Database`.\n\n> Design & mock parity details: [DESIGN.md](./DESIGN.md)\n\n## API\n\n```typescript\nconst store = new KVStore(scope, id, options?)\n```\n\n| Method | Returns | Description |\n|--------|---------|-------------|\n| `get(key)` | `Promise<T \\| null>` | Retrieve a value. Returns `null` if absent or expired. |\n| `put(key, value, options?)` | `Promise<void>` | Store a value. Overwrites unless conditions are set; accepts an optional expiry. |\n| `delete(key, conditions?)` | `Promise<void>` | Remove a value. |\n| `scan(options?)` | `AsyncIterable<{ key, value }>` | Enumerate all entries. Skips expired items unless `{ includeExpired: true }`. Expensive on large datasets. |\n| `KVStore.fromExisting(tableName)` | `ExternalTableRef` | Wrap a pre-existing DynamoDB table. |\n\n**Runtime only.** Data methods (`get`, `put`, `delete`, `scan`) run at request time — call them inside an `ApiNamespace` method, `RawRoute` handler, job handler, or a runtime script, **not** at the top level of your `aws-blocks/index.ts`. Top-level code runs during CDK synth, where the block resolves to its infrastructure construct (no data methods), so a top-level call throws `store.<method> is not a function` (throws `TypeError` at runtime if called during CDK synth). To seed data, do it from inside a handler or a separate runtime script. Constructing the block at module scope is fine; only method calls must move into handlers.\n\n### Options\n\n| Option | Type | Description |\n|--------|------|-------------|\n| `schema` | `StandardSchemaV1` | Runtime validation schema (Zod, Valibot, ArkType, etc.). When provided, the value type `T` is inferred from the schema and every `put()` validates the value before writing. |\n| `table` | `ExternalTableRef` | Wrap an existing DynamoDB table instead of creating one. |\n| `logger` | `ChildLogger` | Optional logger for internal operations. When omitted, a default Logger at error level is created. |\n| `removalPolicy` | `'destroy' \\| 'retain'` | Removal behavior for the underlying DynamoDB table. When omitted, the stack-wide `defaults` (from `BlocksPresets.sandbox`/`production`, chosen at `BlocksStack.create`) apply — `production` retains data on `cdk destroy`, `sandbox` destroys it. Pass `'destroy'`/`'retain'` to override for this one store. The table's deletion protection also follows the stack `defaults`. Ignored by the mock and browser runtimes. |\n| `ttl` | `boolean` | Enable DynamoDB Time-to-Live so items written with an expiry are deleted automatically. Defaults to `false`. See [Expiring Items](#expiring-items-ttl). |\n\n### Expiring Items (TTL)\n\nTTL is opt-in in two steps — turn it on for the table, then set an expiry per write:\n\n```typescript\nconst cache = new KVStore(scope, 'cache', { ttl: true });\n\n// Relative expiry — delete 5 minutes from now\nawait cache.put('otp:alice', code, { ttlSeconds: 300 });\n\n// Absolute expiry — a Date, or Unix epoch time in SECONDS\nawait cache.put('session:1', record, { expiresAt: new Date('2027-01-01') });\n\n// No expiry — stored indefinitely (the default)\nawait cache.put('config:theme', 'dark');\n```\n\n- **`ttl` defaults to `false`.** Enabling it on a table that already exists is a CloudFormation update to the live table, so it never happens implicitly.\n- **The attribute is named `ttl`.** It is written only when `ttlSeconds` or `expiresAt` is supplied, and it holds Unix epoch **seconds**.\n- **`ttlSeconds` and `expiresAt` are mutually exclusive.** Passing both — or a value that looks like epoch milliseconds — throws `ValidationFailedException` rather than silently storing a year-5138 expiry.\n- **Reads never return expired items.** DynamoDB's reaper is asynchronous (typically within 48 hours), so `get` returns `null` and `scan` skips an item as soon as its expiry passes, in every runtime.\n- **Expiry is per write.** Re-putting a key without expiry options clears any previous expiry; re-putting with them slides it forward.\n- TTL composes with conditional writes: `put(key, value, { ifNotExists: true, ttlSeconds: 60 })`.\n\nTTL is a retention control, not an authorization one. Anything security-sensitive (session validity, token revocation) must still be checked on read.\n\n### Conditional Operations\n\nBoth `put` and `delete` accept an optional options object:\n\n```typescript\n// Only write if key doesn't exist (idempotent create)\nawait store.put('user:alice', data, { ifNotExists: true });\n\n// Only write if current value matches (optimistic locking / compare-and-swap)\nawait store.put('counter', newVal, { ifValueEquals: oldVal });\n\n// Compose both (OR): create it, or update it only if unchanged — write succeeds\n// if the key is absent OR its current value matches; fails only if it exists and differs.\nawait store.put('config', next, { ifNotExists: true, ifValueEquals: prev });\n\n// Only delete if key exists\nawait store.delete('temp', { ifExists: true });\n\n// Only delete if value matches\nawait store.delete('lock', { ifValueEquals: expectedVal });\n```\n\nAll condition failures throw with `error.name === KVStoreErrors.ConditionalCheckFailed`. They serialize to JSON-RPC **409 (Conflict)** over the wire (not 500), so `error.status === 409` on the client and `isBlocksError` still matches by name. A conflict is flagged **retriable** when a value check participated (a stale-value optimistic-lock conflict — re-read and retry may succeed). For `put`, `ifNotExists` and `ifValueEquals` compose with OR, so a failure whenever `ifValueEquals` was set — including the combined `ifNotExists`+`ifValueEquals` case — is the stale-value case and is retriable; a pure `ifNotExists` `put` conflict is **not** retriable. For `delete` (independent checks, not OR), a pure `ifExists` conflict — or a combined `ifExists`+`ifValueEquals` conflict — is **not** retriable; only a value-only `ifValueEquals` delete conflict is. A blind retry of a non-retriable conflict fails identically.\n\n### Error Handling\n\n| Constant | `error.name` | Thrown when |\n|----------|--------------|-------------|\n| `KVStoreErrors.ConditionalCheckFailed` | `ConditionalCheckFailedException` | An `ifNotExists` / `ifExists` / `ifValueEquals` condition failed. Serializes to HTTP **409 (Conflict)**; retriable when a value check participated (any `put` conflict where `ifValueEquals` was set, since `put` composes with OR; a value-only `ifValueEquals` `delete` conflict) — not retriable for a pure `ifNotExists` `put` or any `ifExists` `delete`. |\n| `KVStoreErrors.ValidationFailed` | `ValidationFailedException` | A value failed the configured `schema` validation. |\n| `KVStoreErrors.ItemTooLarge` | `ItemTooLargeException` | The serialized item exceeds the 400 KB DynamoDB per-item size limit. (In the AWS layer, DynamoDB raises a generic `ValidationException`; KVStore re-maps the size-specific case to this name.) |\n\n```typescript\nimport { isBlocksError } from '@aws-blocks/core';\nimport { KVStoreErrors } from '@aws-blocks/bb-kv-store';\n\ntry {\n  await store.put('key', value, { ifNotExists: true });\n} catch (e: unknown) {\n  if (isBlocksError(e, KVStoreErrors.ConditionalCheckFailed)) {\n    // key already exists\n  }\n  if (isBlocksError(e, KVStoreErrors.ItemTooLarge)) {\n    // value is too large — consider compressing or splitting\n  }\n  throw e;\n}\n```\n\n## Examples\n\n### Basic Usage (string values)\n\n```typescript\nconst store = new KVStore(scope, 'cache');\n\nexport const api = new ApiNamespace(scope, 'api', (context) => ({\n  async setGreeting(value: string) {\n    await store.put('greeting', value);\n  },\n  async getGreeting() {\n    return { value: await store.get('greeting') };\n  },\n}));\n```\n\nWithout a `schema`, the value type defaults to `string`. To store structured data without runtime validation, pass a type argument — `new KVStore<MyType>(scope, id)`; values are JSON-serialized on write and parsed on read automatically (no manual `JSON.stringify` needed).\n\n### Typed Values with Schema\n\nUse a schema to get type-safe values with runtime validation:\n\n> The examples use Zod, but `schema` accepts any StandardSchemaV1 implementation (Zod, Valibot, ArkType). Install your chosen library, e.g. `npm install zod`.\n\n```typescript\nimport { z } from 'zod';\n\nconst sessionSchema = z.object({\n  userId: z.string(),\n  expiresAt: z.number(),\n});\n\nconst sessions = new KVStore(scope, 'sessions', { schema: sessionSchema });\n\n// Type is inferred from the schema — no generic arg needed\nawait sessions.put(token, { userId: 'alice', expiresAt: Date.now() + 3600000 });\nconst session = await sessions.get(token); // { userId: string; expiresAt: number } | null\n\n// Invalid data is rejected at runtime\nawait sessions.put(token, { userId: 123 }); // throws ValidationFailedException\n```\n\n### Wrapping an Existing Table\n\n```typescript\nconst legacy = new KVStore(scope, 'legacy', {\n  table: KVStore.fromExisting('my-existing-table'),\n});\n```\n\n## Best Practices\n\n- Keep keys short and descriptive (e.g., `user:{id}`, `session:{token}`)\n- Store one logical entity per KVStore instance\n- Use a `schema` for structured values — it ensures runtime data matches your types\n- Use `{ ifNotExists: true }` for idempotent creates\n- Use `{ ifValueEquals }` for compare-and-swap when multiple writers are possible\n- `scan()` returns an `AsyncIterable` — collect with `await Array.fromAsync(store.scan())` or `for await`. Prefer `get(key)` over `scan()` (scans read every item).\n\n## Scaling & Cost (AWS)\n\n- **Billing:** PAY_PER_REQUEST — no provisioned capacity to manage\n- **Latency:** Single-digit ms reads and writes\n- **Throughput:** Scales automatically, no upper limit on table size\n- **Item size limit:** 400 KB per item\n- **Cost:** ~$1.25 per million writes, ~$0.25 per million reads\n- **Durability:** 99.999999999% (11 nines) across 3 AZs\n\n## Local Development\n\nMock data persists to disk at `.bb-data/{fullId}/` across dev server restarts. Wipe with `rm -rf .bb-data`. The mock validates the 400 KB item size limit, schema validation, and conditional check failures, matching AWS behavior.\n\n\n\n","readmeFilename":"README.md","keywords":["aws-blocks","key-value","dynamodb","storage"]}