@fireproof/core 0.21.0-dev-preview-6 → 0.22.0-dev-preview
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +2 -16
- package/index.js +2 -15
- package/index.js.map +1 -1
- package/index.ts +2 -0
- package/package.json +11 -70
- package/tsconfig.json +18 -0
- package/README.md +0 -269
- package/apply-head-queue.d.ts +0 -18
- package/apply-head-queue.d.ts.map +0 -1
- package/apply-head-queue.js +0 -47
- package/apply-head-queue.js.map +0 -1
- package/blockstore/attachable-store.d.ts +0 -19
- package/blockstore/attachable-store.d.ts.map +0 -1
- package/blockstore/attachable-store.js +0 -317
- package/blockstore/attachable-store.js.map +0 -1
- package/blockstore/commit-queue.d.ts +0 -17
- package/blockstore/commit-queue.d.ts.map +0 -1
- package/blockstore/commit-queue.js +0 -60
- package/blockstore/commit-queue.js.map +0 -1
- package/blockstore/commitor.d.ts +0 -21
- package/blockstore/commitor.d.ts.map +0 -1
- package/blockstore/commitor.js +0 -95
- package/blockstore/commitor.js.map +0 -1
- package/blockstore/connect-raw.d.ts +0 -2
- package/blockstore/connect-raw.d.ts.map +0 -1
- package/blockstore/connect-raw.js +0 -2
- package/blockstore/connect-raw.js.map +0 -1
- package/blockstore/connection-base.d.ts +0 -2
- package/blockstore/connection-base.d.ts.map +0 -1
- package/blockstore/connection-base.js +0 -2
- package/blockstore/connection-base.js.map +0 -1
- package/blockstore/encrypt-helpers.d.ts +0 -2
- package/blockstore/encrypt-helpers.d.ts.map +0 -1
- package/blockstore/encrypt-helpers.js +0 -2
- package/blockstore/encrypt-helpers.js.map +0 -1
- package/blockstore/fp-envelope.d.ts +0 -32
- package/blockstore/fp-envelope.d.ts.map +0 -1
- package/blockstore/fp-envelope.js +0 -14
- package/blockstore/fp-envelope.js.map +0 -1
- package/blockstore/gateway.d.ts +0 -20
- package/blockstore/gateway.d.ts.map +0 -1
- package/blockstore/gateway.js +0 -2
- package/blockstore/gateway.js.map +0 -1
- package/blockstore/index.d.ts +0 -16
- package/blockstore/index.d.ts.map +0 -1
- package/blockstore/index.js +0 -16
- package/blockstore/index.js.map +0 -1
- package/blockstore/interceptor-gateway.d.ts +0 -29
- package/blockstore/interceptor-gateway.d.ts.map +0 -1
- package/blockstore/interceptor-gateway.js +0 -137
- package/blockstore/interceptor-gateway.js.map +0 -1
- package/blockstore/loader-helpers.d.ts +0 -10
- package/blockstore/loader-helpers.d.ts.map +0 -1
- package/blockstore/loader-helpers.js +0 -115
- package/blockstore/loader-helpers.js.map +0 -1
- package/blockstore/loader.d.ts +0 -61
- package/blockstore/loader.d.ts.map +0 -1
- package/blockstore/loader.js +0 -493
- package/blockstore/loader.js.map +0 -1
- package/blockstore/register-store-protocol.d.ts +0 -22
- package/blockstore/register-store-protocol.d.ts.map +0 -1
- package/blockstore/register-store-protocol.js +0 -125
- package/blockstore/register-store-protocol.js.map +0 -1
- package/blockstore/serde-gateway.d.ts +0 -78
- package/blockstore/serde-gateway.d.ts.map +0 -1
- package/blockstore/serde-gateway.js +0 -2
- package/blockstore/serde-gateway.js.map +0 -1
- package/blockstore/store-factory.d.ts +0 -11
- package/blockstore/store-factory.d.ts.map +0 -1
- package/blockstore/store-factory.js +0 -104
- package/blockstore/store-factory.js.map +0 -1
- package/blockstore/store-remote.d.ts +0 -2
- package/blockstore/store-remote.d.ts.map +0 -1
- package/blockstore/store-remote.js +0 -2
- package/blockstore/store-remote.js.map +0 -1
- package/blockstore/store.d.ts +0 -86
- package/blockstore/store.d.ts.map +0 -1
- package/blockstore/store.js +0 -437
- package/blockstore/store.js.map +0 -1
- package/blockstore/task-manager.d.ts +0 -19
- package/blockstore/task-manager.d.ts.map +0 -1
- package/blockstore/task-manager.js +0 -50
- package/blockstore/task-manager.js.map +0 -1
- package/blockstore/transaction.d.ts +0 -62
- package/blockstore/transaction.d.ts.map +0 -1
- package/blockstore/transaction.js +0 -256
- package/blockstore/transaction.js.map +0 -1
- package/blockstore/types.d.ts +0 -510
- package/blockstore/types.d.ts.map +0 -1
- package/blockstore/types.js +0 -83
- package/blockstore/types.js.map +0 -1
- package/blockstore/uri-interceptor.d.ts +0 -19
- package/blockstore/uri-interceptor.d.ts.map +0 -1
- package/blockstore/uri-interceptor.js +0 -61
- package/blockstore/uri-interceptor.js.map +0 -1
- package/bundle-not-impl.d.ts +0 -2
- package/bundle-not-impl.d.ts.map +0 -1
- package/bundle-not-impl.js +0 -4
- package/bundle-not-impl.js.map +0 -1
- package/cli/main.js +0 -26613
- package/crdt-clock.d.ts +0 -26
- package/crdt-clock.d.ts.map +0 -1
- package/crdt-clock.js +0 -133
- package/crdt-clock.js.map +0 -1
- package/crdt-helpers.d.ts +0 -19
- package/crdt-helpers.d.ts.map +0 -1
- package/crdt-helpers.js +0 -332
- package/crdt-helpers.js.map +0 -1
- package/crdt.d.ts +0 -41
- package/crdt.d.ts.map +0 -1
- package/crdt.js +0 -164
- package/crdt.js.map +0 -1
- package/database.d.ts +0 -34
- package/database.d.ts.map +0 -1
- package/database.js +0 -133
- package/database.js.map +0 -1
- package/deno.json +0 -20
- package/index.d.ts.map +0 -1
- package/indexer-helpers.d.ts +0 -68
- package/indexer-helpers.d.ts.map +0 -1
- package/indexer-helpers.js +0 -157
- package/indexer-helpers.js.map +0 -1
- package/indexer.d.ts +0 -24
- package/indexer.d.ts.map +0 -1
- package/indexer.js +0 -239
- package/indexer.js.map +0 -1
- package/ledger.d.ts +0 -55
- package/ledger.d.ts.map +0 -1
- package/ledger.js +0 -240
- package/ledger.js.map +0 -1
- package/protocols/cloud/http-connection.d.ts +0 -25
- package/protocols/cloud/http-connection.d.ts.map +0 -1
- package/protocols/cloud/http-connection.js +0 -153
- package/protocols/cloud/http-connection.js.map +0 -1
- package/protocols/cloud/index.d.ts +0 -10
- package/protocols/cloud/index.d.ts.map +0 -1
- package/protocols/cloud/index.js +0 -10
- package/protocols/cloud/index.js.map +0 -1
- package/protocols/cloud/msg-raw-connection-base.d.ts +0 -16
- package/protocols/cloud/msg-raw-connection-base.d.ts.map +0 -1
- package/protocols/cloud/msg-raw-connection-base.js +0 -22
- package/protocols/cloud/msg-raw-connection-base.js.map +0 -1
- package/protocols/cloud/msg-types-data.d.ts +0 -36
- package/protocols/cloud/msg-types-data.d.ts.map +0 -1
- package/protocols/cloud/msg-types-data.js +0 -38
- package/protocols/cloud/msg-types-data.js.map +0 -1
- package/protocols/cloud/msg-types-meta.d.ts +0 -41
- package/protocols/cloud/msg-types-meta.d.ts.map +0 -1
- package/protocols/cloud/msg-types-meta.js +0 -98
- package/protocols/cloud/msg-types-meta.js.map +0 -1
- package/protocols/cloud/msg-types-wal.d.ts +0 -33
- package/protocols/cloud/msg-types-wal.d.ts.map +0 -1
- package/protocols/cloud/msg-types-wal.js +0 -38
- package/protocols/cloud/msg-types-wal.js.map +0 -1
- package/protocols/cloud/msg-types.d.ts +0 -296
- package/protocols/cloud/msg-types.d.ts.map +0 -1
- package/protocols/cloud/msg-types.js +0 -296
- package/protocols/cloud/msg-types.js.map +0 -1
- package/protocols/cloud/msger.d.ts +0 -79
- package/protocols/cloud/msger.d.ts.map +0 -1
- package/protocols/cloud/msger.js +0 -198
- package/protocols/cloud/msger.js.map +0 -1
- package/protocols/cloud/ws-connection.d.ts +0 -29
- package/protocols/cloud/ws-connection.d.ts.map +0 -1
- package/protocols/cloud/ws-connection.js +0 -166
- package/protocols/cloud/ws-connection.js.map +0 -1
- package/protocols/index.d.ts +0 -2
- package/protocols/index.d.ts.map +0 -1
- package/protocols/index.js +0 -2
- package/protocols/index.js.map +0 -1
- package/react/img-file.d.ts +0 -303
- package/react/img-file.d.ts.map +0 -1
- package/react/img-file.js +0 -92
- package/react/img-file.js.map +0 -1
- package/react/index.d.ts +0 -5
- package/react/index.d.ts.map +0 -1
- package/react/index.js +0 -5
- package/react/index.js.map +0 -1
- package/react/types.d.ts +0 -71
- package/react/types.d.ts.map +0 -1
- package/react/types.js +0 -2
- package/react/types.js.map +0 -1
- package/react/use-all-docs.d.ts +0 -4
- package/react/use-all-docs.d.ts.map +0 -1
- package/react/use-all-docs.js +0 -25
- package/react/use-all-docs.js.map +0 -1
- package/react/use-attach.d.ts +0 -6
- package/react/use-attach.d.ts.map +0 -1
- package/react/use-attach.js +0 -75
- package/react/use-attach.js.map +0 -1
- package/react/use-changes.d.ts +0 -4
- package/react/use-changes.d.ts.map +0 -1
- package/react/use-changes.js +0 -19
- package/react/use-changes.js.map +0 -1
- package/react/use-document.d.ts +0 -4
- package/react/use-document.d.ts.map +0 -1
- package/react/use-document.js +0 -109
- package/react/use-document.js.map +0 -1
- package/react/use-fireproof.d.ts +0 -6
- package/react/use-fireproof.d.ts.map +0 -1
- package/react/use-fireproof.js +0 -20
- package/react/use-fireproof.js.map +0 -1
- package/react/use-live-query.d.ts +0 -4
- package/react/use-live-query.d.ts.map +0 -1
- package/react/use-live-query.js +0 -24
- package/react/use-live-query.js.map +0 -1
- package/runtime/files.d.ts +0 -12
- package/runtime/files.d.ts.map +0 -1
- package/runtime/files.js +0 -29
- package/runtime/files.js.map +0 -1
- package/runtime/gateways/cloud/gateway.d.ts +0 -41
- package/runtime/gateways/cloud/gateway.d.ts.map +0 -1
- package/runtime/gateways/cloud/gateway.js +0 -512
- package/runtime/gateways/cloud/gateway.js.map +0 -1
- package/runtime/gateways/cloud/index.d.ts +0 -3
- package/runtime/gateways/cloud/index.d.ts.map +0 -1
- package/runtime/gateways/cloud/index.js +0 -3
- package/runtime/gateways/cloud/index.js.map +0 -1
- package/runtime/gateways/cloud/to-cloud.d.ts +0 -46
- package/runtime/gateways/cloud/to-cloud.d.ts.map +0 -1
- package/runtime/gateways/cloud/to-cloud.js +0 -159
- package/runtime/gateways/cloud/to-cloud.js.map +0 -1
- package/runtime/gateways/def-serde-gateway.d.ts +0 -18
- package/runtime/gateways/def-serde-gateway.d.ts.map +0 -1
- package/runtime/gateways/def-serde-gateway.js +0 -92
- package/runtime/gateways/def-serde-gateway.js.map +0 -1
- package/runtime/gateways/file/deno/deno-filesystem.d.ts +0 -27
- package/runtime/gateways/file/deno/deno-filesystem.d.ts.map +0 -1
- package/runtime/gateways/file/deno/deno-filesystem.js +0 -52
- package/runtime/gateways/file/deno/deno-filesystem.js.map +0 -1
- package/runtime/gateways/file/deno/get-sys-file-system.d.ts +0 -4
- package/runtime/gateways/file/deno/get-sys-file-system.d.ts.map +0 -1
- package/runtime/gateways/file/deno/get-sys-file-system.js +0 -11
- package/runtime/gateways/file/deno/get-sys-file-system.js.map +0 -1
- package/runtime/gateways/file/deno/index.d.ts +0 -2
- package/runtime/gateways/file/deno/index.d.ts.map +0 -1
- package/runtime/gateways/file/deno/index.js +0 -2
- package/runtime/gateways/file/deno/index.js.map +0 -1
- package/runtime/gateways/file/gateway-impl.d.ts +0 -18
- package/runtime/gateways/file/gateway-impl.d.ts.map +0 -1
- package/runtime/gateways/file/gateway-impl.js +0 -121
- package/runtime/gateways/file/gateway-impl.js.map +0 -1
- package/runtime/gateways/file/index.d.ts +0 -3
- package/runtime/gateways/file/index.d.ts.map +0 -1
- package/runtime/gateways/file/index.js +0 -3
- package/runtime/gateways/file/index.js.map +0 -1
- package/runtime/gateways/file/key-bag-file.d.ts +0 -19
- package/runtime/gateways/file/key-bag-file.d.ts.map +0 -1
- package/runtime/gateways/file/key-bag-file.js +0 -40
- package/runtime/gateways/file/key-bag-file.js.map +0 -1
- package/runtime/gateways/file/node/get-sys-file-system.d.ts +0 -4
- package/runtime/gateways/file/node/get-sys-file-system.d.ts.map +0 -1
- package/runtime/gateways/file/node/get-sys-file-system.js +0 -11
- package/runtime/gateways/file/node/get-sys-file-system.js.map +0 -1
- package/runtime/gateways/file/node/index.d.ts +0 -2
- package/runtime/gateways/file/node/index.d.ts.map +0 -1
- package/runtime/gateways/file/node/index.js +0 -2
- package/runtime/gateways/file/node/index.js.map +0 -1
- package/runtime/gateways/file/node/node-filesystem.d.ts +0 -32
- package/runtime/gateways/file/node/node-filesystem.d.ts.map +0 -1
- package/runtime/gateways/file/node/node-filesystem.js +0 -33
- package/runtime/gateways/file/node/node-filesystem.js.map +0 -1
- package/runtime/gateways/file/node/to-array-buffer.d.ts +0 -2
- package/runtime/gateways/file/node/to-array-buffer.d.ts.map +0 -1
- package/runtime/gateways/file/node/to-array-buffer.js +0 -12
- package/runtime/gateways/file/node/to-array-buffer.js.map +0 -1
- package/runtime/gateways/file/sys-file-system-factory.d.ts +0 -4
- package/runtime/gateways/file/sys-file-system-factory.d.ts.map +0 -1
- package/runtime/gateways/file/sys-file-system-factory.js +0 -13
- package/runtime/gateways/file/sys-file-system-factory.js.map +0 -1
- package/runtime/gateways/file/utils.d.ts +0 -5
- package/runtime/gateways/file/utils.d.ts.map +0 -1
- package/runtime/gateways/file/utils.js +0 -27
- package/runtime/gateways/file/utils.js.map +0 -1
- package/runtime/gateways/file/version.d.ts +0 -2
- package/runtime/gateways/file/version.d.ts.map +0 -1
- package/runtime/gateways/file/version.js +0 -2
- package/runtime/gateways/file/version.js.map +0 -1
- package/runtime/gateways/fp-envelope-serialize.d.ts +0 -50
- package/runtime/gateways/fp-envelope-serialize.d.ts.map +0 -1
- package/runtime/gateways/fp-envelope-serialize.js +0 -141
- package/runtime/gateways/fp-envelope-serialize.js.map +0 -1
- package/runtime/gateways/index.d.ts +0 -6
- package/runtime/gateways/index.d.ts.map +0 -1
- package/runtime/gateways/index.js +0 -6
- package/runtime/gateways/index.js.map +0 -1
- package/runtime/gateways/indexeddb/gateway-impl.d.ts +0 -22
- package/runtime/gateways/indexeddb/gateway-impl.d.ts.map +0 -1
- package/runtime/gateways/indexeddb/gateway-impl.js +0 -147
- package/runtime/gateways/indexeddb/gateway-impl.js.map +0 -1
- package/runtime/gateways/indexeddb/index.d.ts +0 -6
- package/runtime/gateways/indexeddb/index.d.ts.map +0 -1
- package/runtime/gateways/indexeddb/index.js +0 -6
- package/runtime/gateways/indexeddb/index.js.map +0 -1
- package/runtime/gateways/indexeddb/key-bag-indexeddb.d.ts +0 -15
- package/runtime/gateways/indexeddb/key-bag-indexeddb.d.ts.map +0 -1
- package/runtime/gateways/indexeddb/key-bag-indexeddb.js +0 -42
- package/runtime/gateways/indexeddb/key-bag-indexeddb.js.map +0 -1
- package/runtime/gateways/indexeddb-version.d.ts +0 -2
- package/runtime/gateways/indexeddb-version.d.ts.map +0 -1
- package/runtime/gateways/indexeddb-version.js +0 -2
- package/runtime/gateways/indexeddb-version.js.map +0 -1
- package/runtime/gateways/memory/gateway.d.ts +0 -18
- package/runtime/gateways/memory/gateway.d.ts.map +0 -1
- package/runtime/gateways/memory/gateway.js +0 -73
- package/runtime/gateways/memory/gateway.js.map +0 -1
- package/runtime/gateways/memory/version.d.ts +0 -2
- package/runtime/gateways/memory/version.d.ts.map +0 -1
- package/runtime/gateways/memory/version.js +0 -2
- package/runtime/gateways/memory/version.js.map +0 -1
- package/runtime/index.d.ts +0 -13
- package/runtime/index.d.ts.map +0 -1
- package/runtime/index.js +0 -13
- package/runtime/index.js.map +0 -1
- package/runtime/key-bag-memory.d.ts +0 -12
- package/runtime/key-bag-memory.d.ts.map +0 -1
- package/runtime/key-bag-memory.js +0 -23
- package/runtime/key-bag-memory.js.map +0 -1
- package/runtime/key-bag.d.ts +0 -85
- package/runtime/key-bag.d.ts.map +0 -1
- package/runtime/key-bag.js +0 -411
- package/runtime/key-bag.js.map +0 -1
- package/runtime/keyed-crypto.d.ts +0 -19
- package/runtime/keyed-crypto.d.ts.map +0 -1
- package/runtime/keyed-crypto.js +0 -192
- package/runtime/keyed-crypto.js.map +0 -1
- package/runtime/memory-sys-container.d.ts +0 -2
- package/runtime/memory-sys-container.d.ts.map +0 -1
- package/runtime/memory-sys-container.js +0 -2
- package/runtime/memory-sys-container.js.map +0 -1
- package/runtime/meta-key-hack.d.ts +0 -42
- package/runtime/meta-key-hack.d.ts.map +0 -1
- package/runtime/meta-key-hack.js +0 -201
- package/runtime/meta-key-hack.js.map +0 -1
- package/runtime/sts-service/index.d.ts +0 -40
- package/runtime/sts-service/index.d.ts.map +0 -1
- package/runtime/sts-service/index.js +0 -108
- package/runtime/sts-service/index.js.map +0 -1
- package/runtime/sys-container.d.ts +0 -2
- package/runtime/sys-container.d.ts.map +0 -1
- package/runtime/sys-container.js +0 -2
- package/runtime/sys-container.js.map +0 -1
- package/runtime/wait-pr-multiformats/block.d.ts +0 -47
- package/runtime/wait-pr-multiformats/block.d.ts.map +0 -1
- package/runtime/wait-pr-multiformats/block.js +0 -64
- package/runtime/wait-pr-multiformats/block.js.map +0 -1
- package/runtime/wait-pr-multiformats/codec-interface.d.ts +0 -29
- package/runtime/wait-pr-multiformats/codec-interface.d.ts.map +0 -1
- package/runtime/wait-pr-multiformats/codec-interface.js +0 -2
- package/runtime/wait-pr-multiformats/codec-interface.js.map +0 -1
- package/runtime/wait-pr-multiformats/index.d.ts +0 -3
- package/runtime/wait-pr-multiformats/index.d.ts.map +0 -1
- package/runtime/wait-pr-multiformats/index.js +0 -3
- package/runtime/wait-pr-multiformats/index.js.map +0 -1
- package/tests/blockstore/fp-envelope.test.ts-off +0 -65
- package/tests/blockstore/fragment-gateway.test.ts-off +0 -106
- package/tests/blockstore/interceptor-gateway.test.ts +0 -254
- package/tests/blockstore/keyed-crypto-indexeddb-file.test.ts +0 -128
- package/tests/blockstore/keyed-crypto.test.ts +0 -526
- package/tests/blockstore/loader.test.ts +0 -297
- package/tests/blockstore/standalone.test.ts +0 -152
- package/tests/blockstore/store.test.ts +0 -192
- package/tests/blockstore/transaction.test.ts +0 -130
- package/tests/fireproof/all-gateway.test.ts +0 -461
- package/tests/fireproof/attachable.test.ts +0 -686
- package/tests/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.car +0 -0
- package/tests/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.ts +0 -324
- package/tests/fireproof/charwise-boolean.test.ts +0 -66
- package/tests/fireproof/crdt.test.ts +0 -570
- package/tests/fireproof/database.test.ts +0 -779
- package/tests/fireproof/deleted-docs-handling.test.ts +0 -111
- package/tests/fireproof/fireproof.test.fixture.ts +0 -133
- package/tests/fireproof/fireproof.test.ts +0 -777
- package/tests/fireproof/hello.test.ts +0 -74
- package/tests/fireproof/indexer.test.ts +0 -458
- package/tests/fireproof/multiple-ledger.test.ts +0 -65
- package/tests/fireproof/query-docs.test.ts +0 -116
- package/tests/fireproof/query-limit-issue.test.ts +0 -147
- package/tests/fireproof/query-property-inconsistency.test.ts +0 -89
- package/tests/fireproof/query-result-properties.test.ts +0 -42
- package/tests/fireproof/stable-cid.test.ts +0 -69
- package/tests/fireproof/utils.test.ts +0 -135
- package/tests/gateway/file/loader-config.test.ts +0 -307
- package/tests/gateway/indexeddb/loader-config.test.ts +0 -79
- package/tests/helpers.ts +0 -174
- package/tests/react/img-file.test.tsx +0 -190
- package/tests/react/use-all-docs.test.tsx +0 -173
- package/tests/react/use-document-with-nonexistent-id.test.tsx +0 -96
- package/tests/react/use-fireproof-db-switch.test.tsx +0 -91
- package/tests/react/use-fireproof-stability.test.tsx +0 -145
- package/tests/react/use-fireproof.test.tsx +0 -645
- package/tests/runtime/fp-envelope-serialize.test.ts +0 -254
- package/tests/runtime/meta-key-hack.test.ts +0 -95
- package/tests/setup.file.ts +0 -1
- package/tests/setup.indexeddb.ts +0 -0
- package/tests/setup.memory.ts +0 -2
- package/tests/utils.test.ts +0 -192
- package/tests/vitest.file.config.ts +0 -14
- package/tests/vitest.indexeddb.config.ts +0 -37
- package/tests/vitest.memory.config.ts +0 -25
- package/types.d.ts +0 -462
- package/types.d.ts.map +0 -1
- package/types.js +0 -60
- package/types.js.map +0 -1
- package/use-fireproof/iframe-strategy.d.ts +0 -13
- package/use-fireproof/iframe-strategy.d.ts.map +0 -1
- package/use-fireproof/iframe-strategy.js +0 -83
- package/use-fireproof/iframe-strategy.js.map +0 -1
- package/use-fireproof/index.d.ts +0 -10
- package/use-fireproof/index.d.ts.map +0 -1
- package/use-fireproof/index.js +0 -16
- package/use-fireproof/index.js.map +0 -1
- package/use-fireproof/redirect-strategy.d.ts +0 -8
- package/use-fireproof/redirect-strategy.d.ts.map +0 -1
- package/use-fireproof/redirect-strategy.js +0 -31
- package/use-fireproof/redirect-strategy.js.map +0 -1
- package/utils.d.ts +0 -49
- package/utils.d.ts.map +0 -1
- package/utils.js +0 -454
- package/utils.js.map +0 -1
- package/version.d.ts +0 -2
- package/version.d.ts.map +0 -1
- package/version.js +0 -4
- package/version.js.map +0 -1
- package/write-queue.d.ts +0 -9
- package/write-queue.d.ts.map +0 -1
- package/write-queue.js +0 -70
- package/write-queue.js.map +0 -1
@@ -1,526 +0,0 @@
|
|
1
|
-
import { bs, ensureSuperThis, PARAM, rt, StoreType, storeType2DataMetaWal } from "@fireproof/core";
|
2
|
-
import { BuildURI, LogCollector, runtimeFn, toCryptoRuntime, URI } from "@adviser/cement";
|
3
|
-
import { base58btc } from "multiformats/bases/base58";
|
4
|
-
import { CID } from "multiformats/cid";
|
5
|
-
// import { sha256 as hasher } from "multiformats/hashes/sha2";
|
6
|
-
// import * as dagCodec from "@ipld/dag-cbor";
|
7
|
-
import * as cborg from "cborg";
|
8
|
-
import type { KeyBagProviderIndexedDB } from "@fireproof/core/indexeddb";
|
9
|
-
import { mockLoader, MockSuperThis, mockSuperThis } from "../helpers.js";
|
10
|
-
|
11
|
-
describe("KeyBag", () => {
|
12
|
-
let url: URI;
|
13
|
-
let sthis: MockSuperThis;
|
14
|
-
|
15
|
-
beforeEach(async () => {
|
16
|
-
sthis = mockSuperThis();
|
17
|
-
await sthis.start();
|
18
|
-
if (runtimeFn().isBrowser) {
|
19
|
-
url = URI.from("indexeddb://fp-keybag");
|
20
|
-
} else {
|
21
|
-
url = URI.merge(`file://./dist/tests/key.bag`, sthis.env.get("FP_KEYBAG_URL"));
|
22
|
-
}
|
23
|
-
});
|
24
|
-
it("default-path", async () => {
|
25
|
-
const old = sthis.env.get("FP_KEYBAG_URL");
|
26
|
-
sthis.env.delete("FP_KEYBAG_URL");
|
27
|
-
const kb = await rt.kb.getKeyBag(sthis);
|
28
|
-
if (runtimeFn().isBrowser) {
|
29
|
-
expect(kb.rt.url.toString()).toBe(`indexeddb://fp-keybag`);
|
30
|
-
} else {
|
31
|
-
expect(kb.rt.url.toString()).toBe(`file://${sthis.env.get("HOME")}/.fireproof/keybag`);
|
32
|
-
}
|
33
|
-
sthis.env.set("FP_KEYBAG_URL", old);
|
34
|
-
});
|
35
|
-
it("from env", async () => {
|
36
|
-
const old = sthis.env.get("FP_KEYBAG_URL");
|
37
|
-
sthis.env.set("FP_KEYBAG_URL", url.toString());
|
38
|
-
const kb = await rt.kb.getKeyBag(sthis);
|
39
|
-
expect(kb.rt.url.toString()).toBe(url.toString());
|
40
|
-
sthis.env.set("FP_KEYBAG_URL", old);
|
41
|
-
});
|
42
|
-
|
43
|
-
it("extract keyMaterial", async () => {
|
44
|
-
const dkb = await rt.kb.getKeyBag(sthis);
|
45
|
-
const old = sthis.env.get("FP_KEYBAG_URL");
|
46
|
-
sthis.env.set("FP_KEYBAG_URL", BuildURI.from(dkb.rt.url).setParam("extractKey", "_deprecated_internal_api").toString());
|
47
|
-
const kb = await rt.kb.getKeyBag(sthis);
|
48
|
-
const key = kb.rt.crypto.randomBytes(kb.rt.keyLength);
|
49
|
-
const keyStr = base58btc.encode(key);
|
50
|
-
const keyName = "extract.test" + Math.random();
|
51
|
-
const res = await kb.getNamedKey(keyName, false, keyStr);
|
52
|
-
expect(res.isOk()).toBeTruthy();
|
53
|
-
const gkb = await kb.getNamedKey(keyName, true);
|
54
|
-
expect(gkb.isOk()).toBeTruthy();
|
55
|
-
|
56
|
-
expect(
|
57
|
-
await gkb
|
58
|
-
.Ok()
|
59
|
-
.get()
|
60
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
61
|
-
.then((i) => i!.extract()),
|
62
|
-
).toEqual({
|
63
|
-
key,
|
64
|
-
keyStr,
|
65
|
-
});
|
66
|
-
sthis.env.set("FP_KEYBAG_URL", old);
|
67
|
-
await sthis.logger.Flush();
|
68
|
-
expect(sthis.ctx.get<LogCollector>("logCollector")?.Logs()).toEqual([
|
69
|
-
{
|
70
|
-
level: "warn",
|
71
|
-
module: "KeyBag",
|
72
|
-
msg: "extractKey is enabled via _deprecated_internal_api --- handle keys safely!!!",
|
73
|
-
},
|
74
|
-
]);
|
75
|
-
});
|
76
|
-
|
77
|
-
it("simple add", async () => {
|
78
|
-
const kb = await rt.kb.getKeyBag(sthis, {
|
79
|
-
url: url.toString(),
|
80
|
-
});
|
81
|
-
const name = "setkey" + Math.random();
|
82
|
-
expect((await kb.getNamedKey(name, true)).isErr()).toBeTruthy();
|
83
|
-
|
84
|
-
const key = base58btc.encode(kb.rt.crypto.randomBytes(kb.rt.keyLength));
|
85
|
-
const res = await kb.getNamedKey(name, false, key);
|
86
|
-
expect(res.isOk()).toBeTruthy();
|
87
|
-
expect((await kb.getNamedKey(name, true)).Ok()).toEqual(res.Ok());
|
88
|
-
|
89
|
-
const name2 = "implicit" + Math.random();
|
90
|
-
const created = await kb.getNamedKey(name2);
|
91
|
-
expect(created.isOk()).toBeTruthy();
|
92
|
-
|
93
|
-
expect((await kb.getNamedKey(name2)).Ok()).toEqual(created.Ok());
|
94
|
-
|
95
|
-
let diskBag: rt.kb.KeysItem;
|
96
|
-
let diskBag2: rt.kb.KeysItem;
|
97
|
-
const provider = await kb.rt.getBagProvider();
|
98
|
-
if (runtimeFn().isBrowser) {
|
99
|
-
const p = provider as KeyBagProviderIndexedDB;
|
100
|
-
diskBag = await p._prepare().then((db) => db.get("bag", name));
|
101
|
-
diskBag2 = await p._prepare().then((db) => db.get("bag", name2));
|
102
|
-
} else {
|
103
|
-
const p = provider as rt.gw.file.KeyBagProviderFile;
|
104
|
-
if (typeof p._prepare !== "function") {
|
105
|
-
return;
|
106
|
-
}
|
107
|
-
const { sysFS } = await p._prepare(name);
|
108
|
-
|
109
|
-
diskBag = await sysFS.readfile((await p._prepare(name)).fName).then((data) => {
|
110
|
-
return JSON.parse(sthis.txt.decode(data)) as rt.kb.KeysItem;
|
111
|
-
});
|
112
|
-
diskBag2 = await sysFS.readfile((await p._prepare(name2)).fName).then((data) => {
|
113
|
-
return JSON.parse(sthis.txt.decode(data)) as rt.kb.KeysItem;
|
114
|
-
});
|
115
|
-
}
|
116
|
-
expect((await rt.toKeyWithFingerPrint(kb, Object.values(diskBag.keys)[0].key)).Ok().fingerPrint).toEqual(
|
117
|
-
(await res.Ok().get())?.fingerPrint,
|
118
|
-
);
|
119
|
-
expect((await rt.toKeyWithFingerPrint(kb, Object.values(diskBag2.keys)[0].key)).Ok().fingerPrint).toEqual(
|
120
|
-
(await created.Ok().get())?.fingerPrint,
|
121
|
-
);
|
122
|
-
const algo = {
|
123
|
-
name: "AES-GCM",
|
124
|
-
iv: kb.rt.crypto.randomBytes(12),
|
125
|
-
tagLength: 128,
|
126
|
-
};
|
127
|
-
const data = kb.rt.crypto.randomBytes(122);
|
128
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
129
|
-
expect(await kb.rt.crypto.encrypt(algo, (await res.Ok().get())!.key, data))
|
130
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
131
|
-
.toEqual(await kb.rt.crypto.encrypt(algo, (await created.Ok().get())!.key, data));
|
132
|
-
const kf = (await created.Ok().get()) as bs.KeyWithFingerPrint;
|
133
|
-
expect(await kb.rt.crypto.encrypt(algo, await kb.subtleKey(Object.values(diskBag.keys)[0].key), data)).toEqual(
|
134
|
-
await kb.rt.crypto.encrypt(algo, kf.key, data),
|
135
|
-
);
|
136
|
-
expect(await kb.rt.crypto.encrypt(algo, await kb.subtleKey(Object.values(diskBag2.keys)[0].key), data)).toEqual(
|
137
|
-
await kb.rt.crypto.encrypt(algo, kf.key, data),
|
138
|
-
);
|
139
|
-
});
|
140
|
-
|
141
|
-
it("default key", async () => {
|
142
|
-
const kb = await rt.kb.getKeyBag(sthis, {
|
143
|
-
url: url.build().setParam("extractKey", "_deprecated_internal_api"),
|
144
|
-
});
|
145
|
-
const name = "default-key" + Math.random();
|
146
|
-
const rMyKey = await kb.getNamedKey(name);
|
147
|
-
|
148
|
-
for (let i = 0; i < 10; ++i) {
|
149
|
-
expect(await kb.getNamedKey(name).then((i) => i.Ok().id)).toEqual(rMyKey.Ok().id);
|
150
|
-
}
|
151
|
-
expect(Object.keys((await kb.getNamedKey(name).then((i) => i.Ok().asKeysItem())).keys).length).toBe(1);
|
152
|
-
|
153
|
-
const myKey = (await rMyKey.Ok().get()) as bs.KeyWithFingerPrint;
|
154
|
-
expect(myKey.fingerPrint).toMatch(/^z/);
|
155
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
156
|
-
await rMyKey.Ok().upsert((await myKey.extract())!.key);
|
157
|
-
const myKey1 = (await rMyKey.Ok().get()) as bs.KeyWithFingerPrint;
|
158
|
-
expect(myKey.fingerPrint).toEqual(myKey1.fingerPrint);
|
159
|
-
|
160
|
-
expect(Object.keys((await kb.getNamedKey(name).then((i) => i.Ok().asKeysItem())).keys).length).toBe(1);
|
161
|
-
|
162
|
-
const rMyKey1 = await kb.getNamedKey(name);
|
163
|
-
expect(rMyKey1.Ok()).toEqual(rMyKey.Ok());
|
164
|
-
const res1 = await rMyKey1.Ok().upsert(kb.rt.crypto.randomBytes(kb.rt.keyLength));
|
165
|
-
expect(res1.isOk()).toBeTruthy();
|
166
|
-
|
167
|
-
const myKey2 = (await rMyKey1.Ok().get()) as bs.KeyWithFingerPrint;
|
168
|
-
expect(myKey.fingerPrint).toEqual(myKey2.fingerPrint);
|
169
|
-
expect(Object.keys((await kb.getNamedKey(name).then((i) => i.Ok().asKeysItem())).keys).length).toBe(2);
|
170
|
-
|
171
|
-
const res = await rMyKey1.Ok().upsert(kb.rt.crypto.randomBytes(kb.rt.keyLength), true);
|
172
|
-
expect(res.isOk()).toBeTruthy();
|
173
|
-
const myKey3 = (await rMyKey.Ok().get()) as bs.KeyWithFingerPrint;
|
174
|
-
expect(Object.keys((await kb.getNamedKey(name).then((i) => i.Ok().asKeysItem())).keys).length).toBe(3);
|
175
|
-
|
176
|
-
expect(myKey.fingerPrint).not.toEqual(myKey3.fingerPrint);
|
177
|
-
});
|
178
|
-
|
179
|
-
it("default and multiple fingerprints", async () => {
|
180
|
-
const kb = await rt.kb.getKeyBag(sthis, {
|
181
|
-
url: url.toString(),
|
182
|
-
crypto: toCryptoRuntime({
|
183
|
-
randomBytes: (size) => new Uint8Array(size).map((_, i) => i),
|
184
|
-
}),
|
185
|
-
});
|
186
|
-
const key = base58btc.encode(kb.rt.crypto.randomBytes(kb.rt.keyLength));
|
187
|
-
const name = "default-key" + Math.random();
|
188
|
-
const fpr = (await rt.toKeyWithFingerPrint(kb, key)).Ok().fingerPrint;
|
189
|
-
const rMyKey = await kb.getNamedKey(name, false, key);
|
190
|
-
expect(rMyKey.isOk()).toBeTruthy();
|
191
|
-
const myKey = rMyKey.Ok();
|
192
|
-
|
193
|
-
const rUpsert1 = await myKey.upsert(key, true);
|
194
|
-
expect(rUpsert1.Ok().modified).toBeFalsy();
|
195
|
-
|
196
|
-
expect((await myKey.get())?.fingerPrint).toEqual(fpr);
|
197
|
-
expect((await myKey.get(fpr))?.fingerPrint).toEqual(fpr);
|
198
|
-
|
199
|
-
const keys = [{ key, fpr }];
|
200
|
-
for (let i = 0; i < 10; ++i) {
|
201
|
-
const key = base58btc.encode(kb.rt.crypto.randomBytes(kb.rt.keyLength));
|
202
|
-
const fpr = (await rt.toKeyWithFingerPrint(kb, key)).Ok().fingerPrint;
|
203
|
-
keys.push({ key, fpr });
|
204
|
-
const rUpsert = await myKey.upsert(key, true);
|
205
|
-
expect(rUpsert.Ok().modified).toBeTruthy();
|
206
|
-
for (const { fpr } of keys) {
|
207
|
-
expect((await myKey.get(fpr))?.fingerPrint).toEqual(fpr);
|
208
|
-
}
|
209
|
-
expect((await myKey.get())?.fingerPrint).toEqual(fpr);
|
210
|
-
}
|
211
|
-
await kb.flush();
|
212
|
-
const provider = await kb.rt.getBagProvider();
|
213
|
-
let diskBag: rt.kb.KeysItem;
|
214
|
-
if (!("_prepare" in provider)) {
|
215
|
-
diskBag = (await provider.get(name)) as rt.kb.KeysItem;
|
216
|
-
} else {
|
217
|
-
if (runtimeFn().isBrowser) {
|
218
|
-
const p = provider as KeyBagProviderIndexedDB;
|
219
|
-
diskBag = await p._prepare().then((db) => db.get("bag", name));
|
220
|
-
} else {
|
221
|
-
const p = provider as rt.gw.file.KeyBagProviderFile;
|
222
|
-
const { sysFS } = await p._prepare(name);
|
223
|
-
diskBag = await sysFS.readfile((await p._prepare(name)).fName).then((data) => {
|
224
|
-
return JSON.parse(sthis.txt.decode(data)) as rt.kb.KeysItem;
|
225
|
-
});
|
226
|
-
}
|
227
|
-
}
|
228
|
-
expect(Object.values(diskBag.keys).length).toEqual(keys.length);
|
229
|
-
});
|
230
|
-
});
|
231
|
-
|
232
|
-
describe("KeyedCryptoStore", () => {
|
233
|
-
let kb: rt.kb.KeyBag;
|
234
|
-
// let logger: Logger;
|
235
|
-
let baseUrl: URI;
|
236
|
-
const sthis = ensureSuperThis();
|
237
|
-
let loader: bs.Loadable;
|
238
|
-
beforeEach(async () => {
|
239
|
-
await sthis.start();
|
240
|
-
// logger = MockLogger().logger;
|
241
|
-
// let kbUrl: URI;
|
242
|
-
// if (runtimeFn().isBrowser) {
|
243
|
-
// kbUrl = URI.from("indexeddb://fp-keybag");
|
244
|
-
// baseUrl = URI.from("indexeddb://fp-keyed-crypto-store");
|
245
|
-
// } else {
|
246
|
-
// kbUrl = URI.merge(`file://./dist/tests/key.bag`, sthis.env.get("FP_KEYBAG_URL"));
|
247
|
-
// baseUrl = URI.merge("file://./dist/tests/keyed-crypto-store", sthis.env.get("FP_STORAGE_URL"));
|
248
|
-
// }
|
249
|
-
// baseUrl = baseUrl.build().defParam(PARAM.NAME, "test").URI();
|
250
|
-
|
251
|
-
const envURL = sthis.env.get("FP_KEYBAG_URL");
|
252
|
-
if (envURL) {
|
253
|
-
baseUrl = bs.getDefaultURI(sthis, URI.from(envURL).protocol);
|
254
|
-
} else {
|
255
|
-
baseUrl = bs.getDefaultURI(sthis);
|
256
|
-
}
|
257
|
-
baseUrl = baseUrl.build().setParam(PARAM.NAME, "test").URI();
|
258
|
-
kb = await rt.kb.getKeyBag(sthis, {});
|
259
|
-
loader = mockLoader(sthis);
|
260
|
-
});
|
261
|
-
it("no crypto", async () => {
|
262
|
-
const url = baseUrl.build().setParam(PARAM.STORE_KEY, "insecure").URI();
|
263
|
-
|
264
|
-
for (const pstore of (await bs.createAttachedStores(url, loader, "insecure")).stores.baseStores) {
|
265
|
-
const store = await pstore;
|
266
|
-
// await store.start();
|
267
|
-
const kc = await store.keyedCrypto();
|
268
|
-
expect(kc.constructor.name).toBe("noCrypto");
|
269
|
-
// expect(kc.isEncrypting).toBe(false);
|
270
|
-
expect(kc.constructor.name).toBe("noCrypto");
|
271
|
-
// expect(kc.isEncrypting).toBe(false);
|
272
|
-
}
|
273
|
-
});
|
274
|
-
|
275
|
-
it("create key", async () => {
|
276
|
-
for (const pstore of (await bs.createAttachedStores(baseUrl, loader, "insecure")).stores.baseStores) {
|
277
|
-
const store = await pstore; // await bs.ensureStart(await pstore, logger);
|
278
|
-
const kc = await store.keyedCrypto();
|
279
|
-
expect(kc.constructor.name).toBe("cryptoAction");
|
280
|
-
// expect(kc.isEncrypting).toBe(true);
|
281
|
-
expect(store.url().getParam(PARAM.STORE_KEY)).toBe(
|
282
|
-
`@test-${storeType2DataMetaWal(store.url().getParam(PARAM.STORE) as StoreType)}@`,
|
283
|
-
);
|
284
|
-
}
|
285
|
-
});
|
286
|
-
|
287
|
-
it("key ref keybag", async () => {
|
288
|
-
const key = base58btc.encode(kb.rt.crypto.randomBytes(kb.rt.keyLength));
|
289
|
-
const genKey = await kb.getNamedKey("@heute@", false, key);
|
290
|
-
const url = baseUrl.build().setParam(PARAM.STORE_KEY, "@heute@").URI();
|
291
|
-
for (const pstore of (await bs.createAttachedStores(url, loader, "insecure")).stores.baseStores) {
|
292
|
-
const store = await pstore;
|
293
|
-
// await store.start();
|
294
|
-
expect(store.url().getParam(PARAM.STORE_KEY)).toBe(`@heute@`);
|
295
|
-
const kc = await store.keyedCrypto();
|
296
|
-
expect(kc.constructor.name).toBe("cryptoAction");
|
297
|
-
const testData = kb.rt.crypto.randomBytes(1024);
|
298
|
-
const iv = kb.rt.crypto.randomBytes(12);
|
299
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
300
|
-
const blk = await kc._encrypt({ bytes: testData, key: (await kc.key.get())!.key, iv });
|
301
|
-
expect(blk).not.toEqual(testData);
|
302
|
-
const fpkey = (await genKey.Ok().get()) as bs.KeyWithFingerPrint;
|
303
|
-
expect(fpkey.fingerPrint).toEqual(fpkey.fingerPrint);
|
304
|
-
const dec = new Uint8Array(await kc.crypto.decrypt(kc.algo(iv), fpkey.key, blk));
|
305
|
-
expect(dec).toEqual(testData);
|
306
|
-
}
|
307
|
-
});
|
308
|
-
|
309
|
-
it("key", async () => {
|
310
|
-
const key = base58btc.encode(kb.rt.crypto.randomBytes(kb.rt.keyLength));
|
311
|
-
const url = baseUrl.build().setParam(PARAM.STORE_KEY, key).URI();
|
312
|
-
for (const pstore of (await bs.createAttachedStores(url, loader, "insecure")).stores.baseStores) {
|
313
|
-
// for (const pstore of [strt.makeDataStore(loader), strt.makeMetaStore(loader), strt.makeWALStore(loader)]) {
|
314
|
-
const store = await pstore;
|
315
|
-
// await store.start();
|
316
|
-
expect(store.url().getParam(PARAM.STORE_KEY)).toBe(key);
|
317
|
-
const kc = await store.keyedCrypto();
|
318
|
-
expect(kc.constructor.name).toBe("cryptoAction");
|
319
|
-
const testData = kb.rt.crypto.randomBytes(1024);
|
320
|
-
const iv = kb.rt.crypto.randomBytes(12);
|
321
|
-
const ks = (await kc.key.get()) as bs.KeyWithFingerPrint;
|
322
|
-
const blk = await kc._encrypt({ bytes: testData, key: ks.key, iv });
|
323
|
-
expect(blk).not.toEqual(testData);
|
324
|
-
const dec = await kc._decrypt({ bytes: blk, key: ks.key, iv });
|
325
|
-
expect(dec).toEqual(testData);
|
326
|
-
}
|
327
|
-
});
|
328
|
-
|
329
|
-
it("public: true results in insecure STORE_KEY and noCrypto", async () => {
|
330
|
-
if (!baseUrl) {
|
331
|
-
throw new Error("baseUrl not initialized. Check test setup.");
|
332
|
-
}
|
333
|
-
if (!kb) {
|
334
|
-
throw new Error("kb not initialized. Check test setup.");
|
335
|
-
}
|
336
|
-
|
337
|
-
const testDbName = "testDbPublic";
|
338
|
-
const mockStethis = mockSuperThis();
|
339
|
-
await mockStethis.start();
|
340
|
-
|
341
|
-
// DbMeta only has 'cars' property. A CarGroup is Car[], so an empty array is a valid empty CarGroup.
|
342
|
-
const dbMeta: bs.DbMeta = { cars: [] };
|
343
|
-
|
344
|
-
// Constructing storeUrls with 'insecure' for public: true
|
345
|
-
const metaUri = baseUrl
|
346
|
-
.build()
|
347
|
-
.setParam(PARAM.NAME, `${testDbName}-meta`)
|
348
|
-
.setParam(PARAM.STORE, "meta" as StoreType)
|
349
|
-
.setParam(PARAM.STORE_KEY, "insecure")
|
350
|
-
.URI();
|
351
|
-
const carUri = baseUrl
|
352
|
-
.build()
|
353
|
-
.setParam(PARAM.NAME, `${testDbName}-car`)
|
354
|
-
.setParam(PARAM.STORE, "car" as StoreType)
|
355
|
-
.setParam(PARAM.STORE_KEY, "insecure")
|
356
|
-
.URI();
|
357
|
-
const fileUri = baseUrl
|
358
|
-
.build()
|
359
|
-
.setParam(PARAM.NAME, `${testDbName}-file`)
|
360
|
-
.setParam(PARAM.STORE, "file" as StoreType)
|
361
|
-
.setParam(PARAM.STORE_KEY, "insecure")
|
362
|
-
.URI();
|
363
|
-
const walUri = baseUrl
|
364
|
-
.build()
|
365
|
-
.setParam(PARAM.NAME, `${testDbName}-wal`)
|
366
|
-
.setParam(PARAM.STORE, "wal" as StoreType)
|
367
|
-
.setParam(PARAM.STORE_KEY, "insecure")
|
368
|
-
.URI();
|
369
|
-
|
370
|
-
const insecureStoreUrls: bs.StoreURIs = {
|
371
|
-
meta: metaUri,
|
372
|
-
car: carUri,
|
373
|
-
file: fileUri,
|
374
|
-
wal: walUri,
|
375
|
-
};
|
376
|
-
|
377
|
-
const bsOpts: bs.BlockstoreOpts = {
|
378
|
-
public: true,
|
379
|
-
storeUrls: insecureStoreUrls, // Use the correctly configured insecure URLs
|
380
|
-
keyBag: kb.rt,
|
381
|
-
meta: dbMeta,
|
382
|
-
compact: async () => ({
|
383
|
-
car: CID.parse("bafyreibv2h6gs6lgjpmwj2k2qflgsemg32ufoq2t3r24g7myr5gc5a2vta"),
|
384
|
-
blocks: [],
|
385
|
-
size: 0,
|
386
|
-
meta: CID.parse("bafyreibv2h6gs6lgjpmwj2k2qflgsemg32ufoq2t3r24g7myr5gc5a2vta"),
|
387
|
-
}),
|
388
|
-
autoCompact: 0,
|
389
|
-
crypto: toCryptoRuntime(),
|
390
|
-
threshold: 10,
|
391
|
-
taskManager: { removeAfter: 3, retryTimeout: 50 },
|
392
|
-
storeRuntime: bs.toStoreRuntime(mockStethis, {}),
|
393
|
-
tracer: () => {
|
394
|
-
/* noop */
|
395
|
-
},
|
396
|
-
logger: mockStethis.logger,
|
397
|
-
applyMeta: async () => Promise.resolve(),
|
398
|
-
};
|
399
|
-
|
400
|
-
const encBlockstore = new bs.EncryptedBlockstore(mockStethis, bsOpts);
|
401
|
-
|
402
|
-
expect(encBlockstore.loader.ebOpts.storeUrls.meta.getParam(PARAM.STORE_KEY), "Meta store URL's STORE_KEY in loader opts").toBe(
|
403
|
-
"insecure",
|
404
|
-
);
|
405
|
-
expect(encBlockstore.loader.ebOpts.storeUrls.car.getParam(PARAM.STORE_KEY), "Car store URL's STORE_KEY in loader opts").toBe(
|
406
|
-
"insecure",
|
407
|
-
);
|
408
|
-
expect(encBlockstore.loader.ebOpts.storeUrls.file.getParam(PARAM.STORE_KEY), "File store URL's STORE_KEY in loader opts").toBe(
|
409
|
-
"insecure",
|
410
|
-
);
|
411
|
-
expect(encBlockstore.loader.ebOpts.storeUrls.wal.getParam(PARAM.STORE_KEY), "Wal store URL's STORE_KEY in loader opts").toBe(
|
412
|
-
"insecure",
|
413
|
-
);
|
414
|
-
|
415
|
-
const storeFactoryItem: bs.StoreFactoryItem = {
|
416
|
-
loader: encBlockstore.loader,
|
417
|
-
byStore: {
|
418
|
-
meta: { url: encBlockstore.loader.ebOpts.storeUrls.meta },
|
419
|
-
car: { url: encBlockstore.loader.ebOpts.storeUrls.car },
|
420
|
-
file: { url: encBlockstore.loader.ebOpts.storeUrls.file },
|
421
|
-
wal: { url: encBlockstore.loader.ebOpts.storeUrls.wal },
|
422
|
-
},
|
423
|
-
};
|
424
|
-
const stores = await encBlockstore.loader.ebOpts.storeRuntime.makeStores(storeFactoryItem);
|
425
|
-
|
426
|
-
const resolvedMetaStore = stores.meta;
|
427
|
-
expect(resolvedMetaStore.url().getParam(PARAM.STORE_KEY), "Resolved meta store's STORE_KEY").toBe("insecure");
|
428
|
-
let kc = await resolvedMetaStore.keyedCrypto();
|
429
|
-
expect(kc.constructor.name).toBe("noCrypto");
|
430
|
-
|
431
|
-
const resolvedCarStore = stores.car;
|
432
|
-
expect(resolvedCarStore.url().getParam(PARAM.STORE_KEY), "Resolved car store's STORE_KEY").toBe("insecure");
|
433
|
-
kc = await resolvedCarStore.keyedCrypto();
|
434
|
-
expect(kc.constructor.name).toBe("noCrypto");
|
435
|
-
|
436
|
-
const resolvedFileStore = stores.file;
|
437
|
-
expect(resolvedFileStore).toBeDefined();
|
438
|
-
if (resolvedFileStore) {
|
439
|
-
expect(resolvedFileStore.url().getParam(PARAM.STORE_KEY), "Resolved file store's STORE_KEY").toBe("insecure");
|
440
|
-
kc = await resolvedFileStore.keyedCrypto();
|
441
|
-
expect(kc.constructor.name).toBe("noCrypto");
|
442
|
-
}
|
443
|
-
|
444
|
-
const resolvedWalStore = stores.wal;
|
445
|
-
expect(resolvedWalStore).toBeDefined();
|
446
|
-
if (resolvedWalStore) {
|
447
|
-
expect(resolvedWalStore.url().getParam(PARAM.STORE_KEY), "Resolved wal store's STORE_KEY").toBe("insecure");
|
448
|
-
kc = await resolvedWalStore.keyedCrypto(); // kc is now from WAL store if it exists
|
449
|
-
expect(kc.constructor.name).toBe("noCrypto");
|
450
|
-
}
|
451
|
-
|
452
|
-
// Test noCrypto's _encrypt and _decrypt behavior (currently throws)
|
453
|
-
// Use the latest 'kc' which would be from WAL store if present, or File, or Car, or Meta.
|
454
|
-
// All should be noCrypto instances in this test case.
|
455
|
-
const testData = kb.rt.crypto.randomBytes(1024);
|
456
|
-
const iv = kb.rt.crypto.randomBytes(12);
|
457
|
-
// Test noCrypto's key.get() behavior (currently throws)
|
458
|
-
await expect(kc.key.get()).resolves.toBeUndefined();
|
459
|
-
|
460
|
-
// Test noCrypto's _encrypt behavior (currently throws)
|
461
|
-
// Since key.get() throws, we can't get a real key. _encrypt in noCrypto also throws and doesn't use the key.
|
462
|
-
// The key parameter in _encrypt is optional, so we can pass undefined or a dummy.
|
463
|
-
const dummyCryptoKey: CryptoKey = {
|
464
|
-
algorithm: { name: "NONE" }, // Or simply {} if that's too specific
|
465
|
-
extractable: false,
|
466
|
-
type: "secret",
|
467
|
-
usages: [], // CryptoKeyUsage[]
|
468
|
-
};
|
469
|
-
// For public databases, noCrypto now returns the bytes unchanged instead of throwing
|
470
|
-
const encryptedData = await kc._encrypt({ bytes: testData, key: dummyCryptoKey, iv });
|
471
|
-
expect(encryptedData).toEqual(testData); // Expect the same bytes to be returned
|
472
|
-
|
473
|
-
// Test decrypt also returns the original bytes
|
474
|
-
const decryptedData = await kc._decrypt({ bytes: testData, key: dummyCryptoKey, iv });
|
475
|
-
expect(decryptedData).toEqual(testData);
|
476
|
-
});
|
477
|
-
});
|
478
|
-
|
479
|
-
describe("KeyedCrypto", () => {
|
480
|
-
let kb: rt.kb.KeyBag;
|
481
|
-
let kycr: bs.CryptoAction;
|
482
|
-
let keyStr: string;
|
483
|
-
const sthis = ensureSuperThis();
|
484
|
-
beforeEach(async () => {
|
485
|
-
// let url: URI;
|
486
|
-
// if (runtimeFn().isBrowser) {
|
487
|
-
// url = URI.from("indexeddb://fp-keybag");
|
488
|
-
// } else {
|
489
|
-
// url = URI.merge(`file://./dist/tests/key.bag`, sthis.env.get("FP_KEYBAG_URL"));
|
490
|
-
// }
|
491
|
-
kb = await rt.kb.getKeyBag(sthis, {
|
492
|
-
// url,
|
493
|
-
});
|
494
|
-
keyStr = base58btc.encode(kb.rt.crypto.randomBytes(kb.rt.keyLength));
|
495
|
-
kycr = await rt.kc.keyedCryptoFactory(URI.from(`test://bla?storekey=${keyStr}`), kb, sthis);
|
496
|
-
});
|
497
|
-
it("codec explict iv", async () => {
|
498
|
-
const testData = kb.rt.crypto.randomBytes(1024);
|
499
|
-
const iv = kb.rt.crypto.randomBytes(12);
|
500
|
-
const codec = kycr.codec(iv, { noIVVerify: true });
|
501
|
-
const blk = (await codec.encode(testData)) as Uint8Array;
|
502
|
-
const myDec = cborg.decode(blk) as bs.IvKeyIdData;
|
503
|
-
expect(myDec.iv).toEqual(iv);
|
504
|
-
const kc = (await kycr.key.get()) as bs.KeyWithFingerPrint;
|
505
|
-
expect(base58btc.encode(myDec.keyId)).toEqual(kc.fingerPrint);
|
506
|
-
const dec = await codec.decode(blk);
|
507
|
-
expect(dec.data).toEqual(testData);
|
508
|
-
});
|
509
|
-
|
510
|
-
it("codec implict iv", async () => {
|
511
|
-
const testData = kb.rt.crypto.randomBytes(1024);
|
512
|
-
const codec = kycr.codec();
|
513
|
-
const blk = await codec.encode(testData);
|
514
|
-
expect(blk.length).toBeGreaterThanOrEqual(12 + testData.length);
|
515
|
-
const dec = await codec.decode(blk);
|
516
|
-
expect(dec.data).toEqual(testData);
|
517
|
-
});
|
518
|
-
|
519
|
-
it("codec implict iv same for multiple clients", async () => {
|
520
|
-
const testData = kb.rt.crypto.randomBytes(1024);
|
521
|
-
const codec = kycr.codec();
|
522
|
-
const blk = await codec.encode(testData);
|
523
|
-
const blk2 = await codec.encode(testData);
|
524
|
-
expect(blk).toEqual(blk2);
|
525
|
-
});
|
526
|
-
});
|