@fireproof/core 0.21.0-dev-preview-7 → 0.22.0-keybag
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 +12 -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 -316
- 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 -17
- package/blockstore/index.d.ts.map +0 -1
- package/blockstore/index.js +0 -17
- 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 -62
- package/blockstore/loader.d.ts.map +0 -1
- package/blockstore/loader.js +0 -523
- 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 -508
- 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 -26645
- 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 -33
- package/database.d.ts.map +0 -1
- package/database.js +0 -132
- 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 -56
- package/ledger.d.ts.map +0 -1
- package/ledger.js +0 -237
- package/ledger.js.map +0 -1
- package/protocols/cloud/http-connection.d.ts +0 -26
- package/protocols/cloud/http-connection.d.ts.map +0 -1
- package/protocols/cloud/http-connection.js +0 -154
- 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 -310
- package/protocols/cloud/msg-types.d.ts.map +0 -1
- package/protocols/cloud/msg-types.js +0 -299
- package/protocols/cloud/msg-types.js.map +0 -1
- package/protocols/cloud/msger.d.ts +0 -94
- package/protocols/cloud/msger.d.ts.map +0 -1
- package/protocols/cloud/msger.js +0 -319
- package/protocols/cloud/msger.js.map +0 -1
- package/protocols/cloud/ws-connection.d.ts +0 -40
- package/protocols/cloud/ws-connection.d.ts.map +0 -1
- package/protocols/cloud/ws-connection.js +0 -205
- package/protocols/cloud/ws-connection.js.map +0 -1
- package/protocols/dashboard/index.d.ts +0 -4
- package/protocols/dashboard/index.d.ts.map +0 -1
- package/protocols/dashboard/index.js +0 -4
- package/protocols/dashboard/index.js.map +0 -1
- package/protocols/dashboard/msg-api.d.ts +0 -11
- package/protocols/dashboard/msg-api.d.ts.map +0 -1
- package/protocols/dashboard/msg-api.js +0 -55
- package/protocols/dashboard/msg-api.js.map +0 -1
- package/protocols/dashboard/msg-is.d.ts +0 -45
- package/protocols/dashboard/msg-is.d.ts.map +0 -1
- package/protocols/dashboard/msg-is.js +0 -63
- package/protocols/dashboard/msg-is.js.map +0 -1
- package/protocols/dashboard/msg-types.d.ts +0 -397
- package/protocols/dashboard/msg-types.d.ts.map +0 -1
- package/protocols/dashboard/msg-types.js +0 -4
- package/protocols/dashboard/msg-types.js.map +0 -1
- package/protocols/index.d.ts +0 -3
- package/protocols/index.d.ts.map +0 -1
- package/protocols/index.js +0 -3
- 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 -91
- 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 -11
- package/react/use-attach.d.ts.map +0 -1
- package/react/use-attach.js +0 -169
- 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 -514
- 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 -59
- package/runtime/gateways/cloud/to-cloud.d.ts.map +0 -1
- package/runtime/gateways/cloud/to-cloud.js +0 -175
- 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 -20
- package/runtime/gateways/file/key-bag-file.d.ts.map +0 -1
- package/runtime/gateways/file/key-bag-file.js +0 -52
- 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 -16
- package/runtime/gateways/indexeddb/key-bag-indexeddb.d.ts.map +0 -1
- package/runtime/gateways/indexeddb/key-bag-indexeddb.js +0 -48
- 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 -13
- package/runtime/key-bag-memory.d.ts.map +0 -1
- package/runtime/key-bag-memory.js +0 -30
- package/runtime/key-bag-memory.js.map +0 -1
- package/runtime/key-bag.d.ts +0 -88
- package/runtime/key-bag.d.ts.map +0 -1
- package/runtime/key-bag.js +0 -417
- 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 -376
- package/tests/blockstore/loader.test.ts +0 -298
- 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 -172
- package/tests/protocols/cloud/msger.test.ts +0 -548
- package/tests/react/img-file.test.tsx +0 -190
- package/tests/react/use-all-docs.test.tsx +0 -172
- 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/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 -461
- 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 -14
- package/use-fireproof/iframe-strategy.d.ts.map +0 -1
- package/use-fireproof/iframe-strategy.js +0 -79
- package/use-fireproof/iframe-strategy.js.map +0 -1
- package/use-fireproof/index.d.ts +0 -14
- package/use-fireproof/index.d.ts.map +0 -1
- package/use-fireproof/index.js +0 -36
- package/use-fireproof/index.js.map +0 -1
- package/use-fireproof/redirect-strategy.d.ts +0 -15
- package/use-fireproof/redirect-strategy.d.ts.map +0 -1
- package/use-fireproof/redirect-strategy.js +0 -153
- package/use-fireproof/redirect-strategy.js.map +0 -1
- package/utils.d.ts +0 -48
- package/utils.d.ts.map +0 -1
- package/utils.js +0 -406
- 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,376 +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 { sha256 as hasher } from "multiformats/hashes/sha2";
|
5
|
-
// import * as dagCodec from "@ipld/dag-cbor";
|
6
|
-
import * as cborg from "cborg";
|
7
|
-
import type { KeyBagProviderIndexedDB } from "@fireproof/core/indexeddb";
|
8
|
-
import { mockLoader, MockSuperThis, mockSuperThis } from "../helpers.js";
|
9
|
-
|
10
|
-
describe("KeyBag", () => {
|
11
|
-
let url: URI;
|
12
|
-
let sthis: MockSuperThis;
|
13
|
-
|
14
|
-
beforeEach(async () => {
|
15
|
-
sthis = mockSuperThis();
|
16
|
-
await sthis.start();
|
17
|
-
if (runtimeFn().isBrowser) {
|
18
|
-
url = URI.from("indexeddb://fp-keybag");
|
19
|
-
} else {
|
20
|
-
url = URI.merge(`file://./dist/tests/key.bag`, sthis.env.get("FP_KEYBAG_URL"));
|
21
|
-
}
|
22
|
-
});
|
23
|
-
it("default-path", async () => {
|
24
|
-
const old = sthis.env.get("FP_KEYBAG_URL");
|
25
|
-
sthis.env.delete("FP_KEYBAG_URL");
|
26
|
-
const kb = await rt.kb.getKeyBag(sthis);
|
27
|
-
if (runtimeFn().isBrowser) {
|
28
|
-
expect(kb.rt.url.toString()).toBe(`indexeddb://fp-keybag`);
|
29
|
-
} else {
|
30
|
-
expect(kb.rt.url.toString()).toBe(`file://${sthis.env.get("HOME")}/.fireproof/keybag`);
|
31
|
-
}
|
32
|
-
sthis.env.set("FP_KEYBAG_URL", old);
|
33
|
-
});
|
34
|
-
it("from env", async () => {
|
35
|
-
const old = sthis.env.get("FP_KEYBAG_URL");
|
36
|
-
sthis.env.set("FP_KEYBAG_URL", url.toString());
|
37
|
-
const kb = await rt.kb.getKeyBag(sthis);
|
38
|
-
expect(kb.rt.url.toString()).toBe(url.toString());
|
39
|
-
sthis.env.set("FP_KEYBAG_URL", old);
|
40
|
-
});
|
41
|
-
|
42
|
-
it("extract keyMaterial", async () => {
|
43
|
-
const dkb = await rt.kb.getKeyBag(sthis);
|
44
|
-
const old = sthis.env.get("FP_KEYBAG_URL");
|
45
|
-
sthis.env.set("FP_KEYBAG_URL", BuildURI.from(dkb.rt.url).setParam("extractKey", "_deprecated_internal_api").toString());
|
46
|
-
const kb = await rt.kb.getKeyBag(sthis);
|
47
|
-
const key = kb.rt.crypto.randomBytes(kb.rt.keyLength);
|
48
|
-
const keyStr = base58btc.encode(key);
|
49
|
-
const keyName = "extract.test" + Math.random();
|
50
|
-
const res = await kb.getNamedKey(keyName, false, keyStr);
|
51
|
-
expect(res.isOk()).toBeTruthy();
|
52
|
-
const gkb = await kb.getNamedKey(keyName, true);
|
53
|
-
expect(gkb.isOk()).toBeTruthy();
|
54
|
-
|
55
|
-
expect(
|
56
|
-
await gkb
|
57
|
-
.Ok()
|
58
|
-
.get()
|
59
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
60
|
-
.then((i) => i!.extract()),
|
61
|
-
).toEqual({
|
62
|
-
key,
|
63
|
-
keyStr,
|
64
|
-
});
|
65
|
-
sthis.env.set("FP_KEYBAG_URL", old);
|
66
|
-
await sthis.logger.Flush();
|
67
|
-
expect(sthis.ctx.get<LogCollector>("logCollector")?.Logs()).toEqual([
|
68
|
-
{
|
69
|
-
level: "warn",
|
70
|
-
module: "KeyBag",
|
71
|
-
msg: "extractKey is enabled via _deprecated_internal_api --- handle keys safely!!!",
|
72
|
-
},
|
73
|
-
]);
|
74
|
-
});
|
75
|
-
|
76
|
-
it("simple add", async () => {
|
77
|
-
const kb = await rt.kb.getKeyBag(sthis, {
|
78
|
-
url: url.toString(),
|
79
|
-
});
|
80
|
-
const name = "setkey" + Math.random();
|
81
|
-
expect((await kb.getNamedKey(name, true)).isErr()).toBeTruthy();
|
82
|
-
|
83
|
-
const key = base58btc.encode(kb.rt.crypto.randomBytes(kb.rt.keyLength));
|
84
|
-
const res = await kb.getNamedKey(name, false, key);
|
85
|
-
expect(res.isOk()).toBeTruthy();
|
86
|
-
expect((await kb.getNamedKey(name, true)).Ok()).toEqual(res.Ok());
|
87
|
-
|
88
|
-
const name2 = "implicit" + Math.random();
|
89
|
-
const created = await kb.getNamedKey(name2);
|
90
|
-
expect(created.isOk()).toBeTruthy();
|
91
|
-
|
92
|
-
expect((await kb.getNamedKey(name2)).Ok()).toEqual(created.Ok());
|
93
|
-
|
94
|
-
let diskBag: rt.kb.KeysItem;
|
95
|
-
let diskBag2: rt.kb.KeysItem;
|
96
|
-
const provider = await kb.rt.getBagProvider();
|
97
|
-
if (runtimeFn().isBrowser) {
|
98
|
-
const p = provider as KeyBagProviderIndexedDB;
|
99
|
-
diskBag = await p._prepare().then((db) => db.get("bag", name));
|
100
|
-
diskBag2 = await p._prepare().then((db) => db.get("bag", name2));
|
101
|
-
} else {
|
102
|
-
const p = provider as rt.gw.file.KeyBagProviderFile;
|
103
|
-
if (typeof p._prepare !== "function") {
|
104
|
-
return;
|
105
|
-
}
|
106
|
-
const { sysFS } = await p._prepare(name);
|
107
|
-
|
108
|
-
diskBag = await sysFS.readfile((await p._prepare(name)).fName).then((data) => {
|
109
|
-
return JSON.parse(sthis.txt.decode(data)) as rt.kb.KeysItem;
|
110
|
-
});
|
111
|
-
diskBag2 = await sysFS.readfile((await p._prepare(name2)).fName).then((data) => {
|
112
|
-
return JSON.parse(sthis.txt.decode(data)) as rt.kb.KeysItem;
|
113
|
-
});
|
114
|
-
}
|
115
|
-
expect((await rt.toKeyWithFingerPrint(kb, Object.values(diskBag.keys)[0].key)).Ok().fingerPrint).toEqual(
|
116
|
-
(await res.Ok().get())?.fingerPrint,
|
117
|
-
);
|
118
|
-
expect((await rt.toKeyWithFingerPrint(kb, Object.values(diskBag2.keys)[0].key)).Ok().fingerPrint).toEqual(
|
119
|
-
(await created.Ok().get())?.fingerPrint,
|
120
|
-
);
|
121
|
-
const algo = {
|
122
|
-
name: "AES-GCM",
|
123
|
-
iv: kb.rt.crypto.randomBytes(12),
|
124
|
-
tagLength: 128,
|
125
|
-
};
|
126
|
-
const data = kb.rt.crypto.randomBytes(122);
|
127
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
128
|
-
expect(await kb.rt.crypto.encrypt(algo, (await res.Ok().get())!.key, data))
|
129
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
130
|
-
.toEqual(await kb.rt.crypto.encrypt(algo, (await created.Ok().get())!.key, data));
|
131
|
-
const kf = (await created.Ok().get()) as bs.KeyWithFingerPrint;
|
132
|
-
expect(await kb.rt.crypto.encrypt(algo, await kb.subtleKey(Object.values(diskBag.keys)[0].key), data)).toEqual(
|
133
|
-
await kb.rt.crypto.encrypt(algo, kf.key, data),
|
134
|
-
);
|
135
|
-
expect(await kb.rt.crypto.encrypt(algo, await kb.subtleKey(Object.values(diskBag2.keys)[0].key), data)).toEqual(
|
136
|
-
await kb.rt.crypto.encrypt(algo, kf.key, data),
|
137
|
-
);
|
138
|
-
});
|
139
|
-
|
140
|
-
it("default key", async () => {
|
141
|
-
const kb = await rt.kb.getKeyBag(sthis, {
|
142
|
-
url: url.build().setParam("extractKey", "_deprecated_internal_api"),
|
143
|
-
});
|
144
|
-
const name = "default-key" + Math.random();
|
145
|
-
const rMyKey = await kb.getNamedKey(name);
|
146
|
-
|
147
|
-
for (let i = 0; i < 10; ++i) {
|
148
|
-
expect(await kb.getNamedKey(name).then((i) => i.Ok().id)).toEqual(rMyKey.Ok().id);
|
149
|
-
}
|
150
|
-
expect(Object.keys((await kb.getNamedKey(name).then((i) => i.Ok().asKeysItem())).keys).length).toBe(1);
|
151
|
-
|
152
|
-
const myKey = (await rMyKey.Ok().get()) as bs.KeyWithFingerPrint;
|
153
|
-
expect(myKey.fingerPrint).toMatch(/^z/);
|
154
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
155
|
-
await rMyKey.Ok().upsert((await myKey.extract())!.key);
|
156
|
-
const myKey1 = (await rMyKey.Ok().get()) as bs.KeyWithFingerPrint;
|
157
|
-
expect(myKey.fingerPrint).toEqual(myKey1.fingerPrint);
|
158
|
-
|
159
|
-
expect(Object.keys((await kb.getNamedKey(name).then((i) => i.Ok().asKeysItem())).keys).length).toBe(1);
|
160
|
-
|
161
|
-
const rMyKey1 = await kb.getNamedKey(name);
|
162
|
-
expect(rMyKey1.Ok()).toEqual(rMyKey.Ok());
|
163
|
-
const res1 = await rMyKey1.Ok().upsert(kb.rt.crypto.randomBytes(kb.rt.keyLength));
|
164
|
-
expect(res1.isOk()).toBeTruthy();
|
165
|
-
|
166
|
-
const myKey2 = (await rMyKey1.Ok().get()) as bs.KeyWithFingerPrint;
|
167
|
-
expect(myKey.fingerPrint).toEqual(myKey2.fingerPrint);
|
168
|
-
expect(Object.keys((await kb.getNamedKey(name).then((i) => i.Ok().asKeysItem())).keys).length).toBe(2);
|
169
|
-
|
170
|
-
const res = await rMyKey1.Ok().upsert(kb.rt.crypto.randomBytes(kb.rt.keyLength), true);
|
171
|
-
expect(res.isOk()).toBeTruthy();
|
172
|
-
const myKey3 = (await rMyKey.Ok().get()) as bs.KeyWithFingerPrint;
|
173
|
-
expect(Object.keys((await kb.getNamedKey(name).then((i) => i.Ok().asKeysItem())).keys).length).toBe(3);
|
174
|
-
|
175
|
-
expect(myKey.fingerPrint).not.toEqual(myKey3.fingerPrint);
|
176
|
-
});
|
177
|
-
|
178
|
-
it("default and multiple fingerprints", async () => {
|
179
|
-
const kb = await rt.kb.getKeyBag(sthis, {
|
180
|
-
url: url.toString(),
|
181
|
-
crypto: toCryptoRuntime({
|
182
|
-
randomBytes: (size) => new Uint8Array(size).map((_, i) => i),
|
183
|
-
}),
|
184
|
-
});
|
185
|
-
const key = base58btc.encode(kb.rt.crypto.randomBytes(kb.rt.keyLength));
|
186
|
-
const name = "default-key" + Math.random();
|
187
|
-
const fpr = (await rt.toKeyWithFingerPrint(kb, key)).Ok().fingerPrint;
|
188
|
-
const rMyKey = await kb.getNamedKey(name, false, key);
|
189
|
-
expect(rMyKey.isOk()).toBeTruthy();
|
190
|
-
const myKey = rMyKey.Ok();
|
191
|
-
|
192
|
-
const rUpsert1 = await myKey.upsert(key, true);
|
193
|
-
expect(rUpsert1.Ok().modified).toBeFalsy();
|
194
|
-
|
195
|
-
expect((await myKey.get())?.fingerPrint).toEqual(fpr);
|
196
|
-
expect((await myKey.get(fpr))?.fingerPrint).toEqual(fpr);
|
197
|
-
|
198
|
-
const keys = [{ key, fpr }];
|
199
|
-
for (let i = 0; i < 10; ++i) {
|
200
|
-
const key = base58btc.encode(kb.rt.crypto.randomBytes(kb.rt.keyLength));
|
201
|
-
const fpr = (await rt.toKeyWithFingerPrint(kb, key)).Ok().fingerPrint;
|
202
|
-
keys.push({ key, fpr });
|
203
|
-
const rUpsert = await myKey.upsert(key, true);
|
204
|
-
expect(rUpsert.Ok().modified).toBeTruthy();
|
205
|
-
for (const { fpr } of keys) {
|
206
|
-
expect((await myKey.get(fpr))?.fingerPrint).toEqual(fpr);
|
207
|
-
}
|
208
|
-
expect((await myKey.get())?.fingerPrint).toEqual(fpr);
|
209
|
-
}
|
210
|
-
await kb.flush();
|
211
|
-
const provider = await kb.rt.getBagProvider();
|
212
|
-
let diskBag: rt.kb.KeysItem;
|
213
|
-
if (!("_prepare" in provider)) {
|
214
|
-
diskBag = (await provider.get(name)) as rt.kb.KeysItem;
|
215
|
-
} else {
|
216
|
-
if (runtimeFn().isBrowser) {
|
217
|
-
const p = provider as KeyBagProviderIndexedDB;
|
218
|
-
diskBag = await p._prepare().then((db) => db.get("bag", name));
|
219
|
-
} else {
|
220
|
-
const p = provider as rt.gw.file.KeyBagProviderFile;
|
221
|
-
const { sysFS } = await p._prepare(name);
|
222
|
-
diskBag = await sysFS.readfile((await p._prepare(name)).fName).then((data) => {
|
223
|
-
return JSON.parse(sthis.txt.decode(data)) as rt.kb.KeysItem;
|
224
|
-
});
|
225
|
-
}
|
226
|
-
}
|
227
|
-
expect(Object.values(diskBag.keys).length).toEqual(keys.length);
|
228
|
-
});
|
229
|
-
});
|
230
|
-
|
231
|
-
describe("KeyedCryptoStore", () => {
|
232
|
-
let kb: rt.kb.KeyBag;
|
233
|
-
// let logger: Logger;
|
234
|
-
let baseUrl: URI;
|
235
|
-
const sthis = ensureSuperThis();
|
236
|
-
let loader: bs.Loadable;
|
237
|
-
beforeEach(async () => {
|
238
|
-
await sthis.start();
|
239
|
-
// logger = MockLogger().logger;
|
240
|
-
// let kbUrl: URI;
|
241
|
-
// if (runtimeFn().isBrowser) {
|
242
|
-
// kbUrl = URI.from("indexeddb://fp-keybag");
|
243
|
-
// baseUrl = URI.from("indexeddb://fp-keyed-crypto-store");
|
244
|
-
// } else {
|
245
|
-
// kbUrl = URI.merge(`file://./dist/tests/key.bag`, sthis.env.get("FP_KEYBAG_URL"));
|
246
|
-
// baseUrl = URI.merge("file://./dist/tests/keyed-crypto-store", sthis.env.get("FP_STORAGE_URL"));
|
247
|
-
// }
|
248
|
-
// baseUrl = baseUrl.build().defParam(PARAM.NAME, "test").URI();
|
249
|
-
|
250
|
-
const envURL = sthis.env.get("FP_KEYBAG_URL");
|
251
|
-
if (envURL) {
|
252
|
-
baseUrl = bs.getDefaultURI(sthis, URI.from(envURL).protocol);
|
253
|
-
} else {
|
254
|
-
baseUrl = bs.getDefaultURI(sthis);
|
255
|
-
}
|
256
|
-
baseUrl = baseUrl.build().setParam(PARAM.NAME, "test").URI();
|
257
|
-
kb = await rt.kb.getKeyBag(sthis, {});
|
258
|
-
loader = mockLoader(sthis);
|
259
|
-
});
|
260
|
-
it("no crypto", async () => {
|
261
|
-
const url = baseUrl.build().setParam(PARAM.STORE_KEY, "insecure").URI();
|
262
|
-
|
263
|
-
for (const pstore of (await bs.createAttachedStores(url, loader, "insecure")).stores.baseStores) {
|
264
|
-
const store = await pstore;
|
265
|
-
// await store.start();
|
266
|
-
const kc = await store.keyedCrypto();
|
267
|
-
expect(kc.constructor.name).toBe("noCrypto");
|
268
|
-
// expect(kc.isEncrypting).toBe(false);
|
269
|
-
expect(kc.constructor.name).toBe("noCrypto");
|
270
|
-
// expect(kc.isEncrypting).toBe(false);
|
271
|
-
}
|
272
|
-
});
|
273
|
-
|
274
|
-
it("create key", async () => {
|
275
|
-
for (const pstore of (await bs.createAttachedStores(baseUrl, loader, "insecure")).stores.baseStores) {
|
276
|
-
const store = await pstore; // await bs.ensureStart(await pstore, logger);
|
277
|
-
const kc = await store.keyedCrypto();
|
278
|
-
expect(kc.constructor.name).toBe("cryptoAction");
|
279
|
-
// expect(kc.isEncrypting).toBe(true);
|
280
|
-
expect(store.url().getParam(PARAM.STORE_KEY)).toBe(
|
281
|
-
`@test-${storeType2DataMetaWal(store.url().getParam(PARAM.STORE) as StoreType)}@`,
|
282
|
-
);
|
283
|
-
}
|
284
|
-
});
|
285
|
-
|
286
|
-
it("key ref keybag", async () => {
|
287
|
-
const key = base58btc.encode(kb.rt.crypto.randomBytes(kb.rt.keyLength));
|
288
|
-
const genKey = await kb.getNamedKey("@heute@", false, key);
|
289
|
-
const url = baseUrl.build().setParam(PARAM.STORE_KEY, "@heute@").URI();
|
290
|
-
for (const pstore of (await bs.createAttachedStores(url, loader, "insecure")).stores.baseStores) {
|
291
|
-
const store = await pstore;
|
292
|
-
// await store.start();
|
293
|
-
expect(store.url().getParam(PARAM.STORE_KEY)).toBe(`@heute@`);
|
294
|
-
const kc = await store.keyedCrypto();
|
295
|
-
expect(kc.constructor.name).toBe("cryptoAction");
|
296
|
-
const testData = kb.rt.crypto.randomBytes(1024);
|
297
|
-
const iv = kb.rt.crypto.randomBytes(12);
|
298
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
299
|
-
const blk = await kc._encrypt({ bytes: testData, key: (await kc.key.get())!.key, iv });
|
300
|
-
expect(blk).not.toEqual(testData);
|
301
|
-
const fpkey = (await genKey.Ok().get()) as bs.KeyWithFingerPrint;
|
302
|
-
expect(fpkey.fingerPrint).toEqual(fpkey.fingerPrint);
|
303
|
-
const dec = new Uint8Array(await kc.crypto.decrypt(kc.algo(iv), fpkey.key, blk));
|
304
|
-
expect(dec).toEqual(testData);
|
305
|
-
}
|
306
|
-
});
|
307
|
-
|
308
|
-
it("key", async () => {
|
309
|
-
const key = base58btc.encode(kb.rt.crypto.randomBytes(kb.rt.keyLength));
|
310
|
-
const url = baseUrl.build().setParam(PARAM.STORE_KEY, key).URI();
|
311
|
-
for (const pstore of (await bs.createAttachedStores(url, loader, "insecure")).stores.baseStores) {
|
312
|
-
// for (const pstore of [strt.makeDataStore(loader), strt.makeMetaStore(loader), strt.makeWALStore(loader)]) {
|
313
|
-
const store = await pstore;
|
314
|
-
// await store.start();
|
315
|
-
expect(store.url().getParam(PARAM.STORE_KEY)).toBe(key);
|
316
|
-
const kc = await store.keyedCrypto();
|
317
|
-
expect(kc.constructor.name).toBe("cryptoAction");
|
318
|
-
const testData = kb.rt.crypto.randomBytes(1024);
|
319
|
-
const iv = kb.rt.crypto.randomBytes(12);
|
320
|
-
const ks = (await kc.key.get()) as bs.KeyWithFingerPrint;
|
321
|
-
const blk = await kc._encrypt({ bytes: testData, key: ks.key, iv });
|
322
|
-
expect(blk).not.toEqual(testData);
|
323
|
-
const dec = await kc._decrypt({ bytes: blk, key: ks.key, iv });
|
324
|
-
expect(dec).toEqual(testData);
|
325
|
-
}
|
326
|
-
});
|
327
|
-
});
|
328
|
-
|
329
|
-
describe("KeyedCrypto", () => {
|
330
|
-
let kb: rt.kb.KeyBag;
|
331
|
-
let kycr: bs.CryptoAction;
|
332
|
-
let keyStr: string;
|
333
|
-
const sthis = ensureSuperThis();
|
334
|
-
beforeEach(async () => {
|
335
|
-
// let url: URI;
|
336
|
-
// if (runtimeFn().isBrowser) {
|
337
|
-
// url = URI.from("indexeddb://fp-keybag");
|
338
|
-
// } else {
|
339
|
-
// url = URI.merge(`file://./dist/tests/key.bag`, sthis.env.get("FP_KEYBAG_URL"));
|
340
|
-
// }
|
341
|
-
kb = await rt.kb.getKeyBag(sthis, {
|
342
|
-
// url,
|
343
|
-
});
|
344
|
-
keyStr = base58btc.encode(kb.rt.crypto.randomBytes(kb.rt.keyLength));
|
345
|
-
kycr = await rt.kc.keyedCryptoFactory(URI.from(`test://bla?storekey=${keyStr}`), kb, sthis);
|
346
|
-
});
|
347
|
-
it("codec explict iv", async () => {
|
348
|
-
const testData = kb.rt.crypto.randomBytes(1024);
|
349
|
-
const iv = kb.rt.crypto.randomBytes(12);
|
350
|
-
const codec = kycr.codec(iv, { noIVVerify: true });
|
351
|
-
const blk = (await codec.encode(testData)) as Uint8Array;
|
352
|
-
const myDec = cborg.decode(blk) as bs.IvKeyIdData;
|
353
|
-
expect(myDec.iv).toEqual(iv);
|
354
|
-
const kc = (await kycr.key.get()) as bs.KeyWithFingerPrint;
|
355
|
-
expect(base58btc.encode(myDec.keyId)).toEqual(kc.fingerPrint);
|
356
|
-
const dec = await codec.decode(blk);
|
357
|
-
expect(dec.data).toEqual(testData);
|
358
|
-
});
|
359
|
-
|
360
|
-
it("codec implict iv", async () => {
|
361
|
-
const testData = kb.rt.crypto.randomBytes(1024);
|
362
|
-
const codec = kycr.codec();
|
363
|
-
const blk = await codec.encode(testData);
|
364
|
-
expect(blk.length).toBeGreaterThanOrEqual(12 + testData.length);
|
365
|
-
const dec = await codec.decode(blk);
|
366
|
-
expect(dec.data).toEqual(testData);
|
367
|
-
});
|
368
|
-
|
369
|
-
it("codec implict iv same for multiple clients", async () => {
|
370
|
-
const testData = kb.rt.crypto.randomBytes(1024);
|
371
|
-
const codec = kycr.codec();
|
372
|
-
const blk = await codec.encode(testData);
|
373
|
-
const blk2 = await codec.encode(testData);
|
374
|
-
expect(blk).toEqual(blk2);
|
375
|
-
});
|
376
|
-
});
|
@@ -1,298 +0,0 @@
|
|
1
|
-
import * as codec from "@ipld/dag-cbor";
|
2
|
-
import { sha256 as hasher } from "multiformats/hashes/sha2";
|
3
|
-
import { CID } from "multiformats/cid";
|
4
|
-
import { CRDTMeta, CarTransaction, IndexTransactionMeta, SuperThis, bs, ensureSuperThis, rt } from "@fireproof/core";
|
5
|
-
import { simpleBlockOpts } from "../helpers.js";
|
6
|
-
|
7
|
-
const { isCarBlockItemReady, isCarBlockItemStale, anyBlock2FPBlock } = bs;
|
8
|
-
type FPBlock = bs.FPBlock;
|
9
|
-
|
10
|
-
class MyMemoryBlockStore extends bs.EncryptedBlockstore {
|
11
|
-
readonly memblock = new Map<string, FPBlock>();
|
12
|
-
loader: bs.Loader;
|
13
|
-
constructor(sthis: SuperThis) {
|
14
|
-
const ebOpts = simpleBlockOpts(sthis, "MyMemoryBlockStore"); //, "MyMemoryBlockStore");
|
15
|
-
// const ebOpts = {
|
16
|
-
// name: "MyMemoryBlockStore",
|
17
|
-
// } as bs.BlockstoreOpts;
|
18
|
-
super(sthis, ebOpts);
|
19
|
-
this.loader = new bs.Loader(sthis, ebOpts);
|
20
|
-
}
|
21
|
-
ready(): Promise<void> {
|
22
|
-
return Promise.resolve();
|
23
|
-
}
|
24
|
-
close(): Promise<void> {
|
25
|
-
return this.loader.close();
|
26
|
-
}
|
27
|
-
readonly transactions = new Set<CarTransaction>();
|
28
|
-
// readonly lastTxMeta?: TransactionMeta;
|
29
|
-
readonly compacting: boolean = false;
|
30
|
-
|
31
|
-
override async put(fp: FPBlock): Promise<void> {
|
32
|
-
this.memblock.set(fp.cid.toString(), fp);
|
33
|
-
}
|
34
|
-
|
35
|
-
// transaction<M ext(fn: (t: CarTransaction) => Promise<MetaType>, opts?: { noLoader: boolean }): Promise<MetaType> {
|
36
|
-
// throw new Error("Method not implemented.");
|
37
|
-
// }
|
38
|
-
|
39
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
40
|
-
getFile(car: bs.AnyLink, cid: bs.AnyLink, isPublic?: boolean): Promise<Uint8Array> {
|
41
|
-
throw new Error("Method not implemented.");
|
42
|
-
}
|
43
|
-
compact(): Promise<void> {
|
44
|
-
throw new Error("Method not implemented.");
|
45
|
-
}
|
46
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
47
|
-
defaultCompact(blocks: bs.CompactionFetcher): Promise<bs.TransactionMeta> {
|
48
|
-
throw new Error("Method not implemented.");
|
49
|
-
}
|
50
|
-
}
|
51
|
-
|
52
|
-
describe("basic Loader simple", function () {
|
53
|
-
let loader: bs.Loader;
|
54
|
-
let block: FPBlock;
|
55
|
-
let t: CarTransaction;
|
56
|
-
const sthis = ensureSuperThis();
|
57
|
-
|
58
|
-
afterEach(async () => {
|
59
|
-
await loader.close();
|
60
|
-
await loader.destroy();
|
61
|
-
});
|
62
|
-
|
63
|
-
beforeEach(async () => {
|
64
|
-
const testDbName = "test-loader-commit";
|
65
|
-
await sthis.start();
|
66
|
-
const mockM = new MyMemoryBlockStore(sthis);
|
67
|
-
t = new bs.CarTransactionImpl(mockM as bs.EncryptedBlockstore);
|
68
|
-
loader = new bs.Loader(sthis, {
|
69
|
-
...simpleBlockOpts(sthis, testDbName),
|
70
|
-
public: true,
|
71
|
-
});
|
72
|
-
await loader.ready();
|
73
|
-
block = await anyBlock2FPBlock(
|
74
|
-
await rt.mf.block.encode({
|
75
|
-
value: { hello: "world" },
|
76
|
-
hasher,
|
77
|
-
codec,
|
78
|
-
}),
|
79
|
-
);
|
80
|
-
await t.put(block);
|
81
|
-
await mockM.put(block);
|
82
|
-
});
|
83
|
-
it("should have an empty car log", function () {
|
84
|
-
expect(loader.carLog.length).toBe(0);
|
85
|
-
});
|
86
|
-
it("should commit", async () => {
|
87
|
-
const carGroup = await loader.commit(t, { head: [block.cid] });
|
88
|
-
expect(loader.carLog.length).toBe(1);
|
89
|
-
const reader = await loader.loadCar(carGroup[0], loader.attachedStores.local());
|
90
|
-
assert(isCarBlockItemReady(reader));
|
91
|
-
expect(reader).toBeTruthy();
|
92
|
-
const parsed = await bs.parseCarFile<CRDTMeta>(reader, loader.logger);
|
93
|
-
expect(parsed.cars).toBeTruthy();
|
94
|
-
expect(parsed.cars.length).toBe(0);
|
95
|
-
expect(parsed.meta).toBeTruthy();
|
96
|
-
expect(parsed.meta.head).toBeTruthy();
|
97
|
-
});
|
98
|
-
});
|
99
|
-
|
100
|
-
describe("basic Loader with two commits", function () {
|
101
|
-
let loader: bs.Loader;
|
102
|
-
let block: FPBlock;
|
103
|
-
let block2: FPBlock;
|
104
|
-
let block3: FPBlock;
|
105
|
-
let block4: FPBlock;
|
106
|
-
let t: CarTransaction;
|
107
|
-
let carCid: bs.CarGroup;
|
108
|
-
let carCid0: bs.CarGroup;
|
109
|
-
|
110
|
-
const sthis = ensureSuperThis();
|
111
|
-
|
112
|
-
afterEach(async () => {
|
113
|
-
await loader.close();
|
114
|
-
await loader.destroy();
|
115
|
-
});
|
116
|
-
|
117
|
-
beforeEach(async () => {
|
118
|
-
await sthis.start();
|
119
|
-
const mockM = new MyMemoryBlockStore(sthis);
|
120
|
-
t = new bs.CarTransactionImpl(mockM);
|
121
|
-
loader = new bs.Loader(sthis, {
|
122
|
-
...simpleBlockOpts(sthis, "test-loader-two-commit"),
|
123
|
-
public: true,
|
124
|
-
});
|
125
|
-
await loader.ready();
|
126
|
-
|
127
|
-
block = await anyBlock2FPBlock(
|
128
|
-
await rt.mf.block.encode({
|
129
|
-
value: { hello: "world" },
|
130
|
-
hasher,
|
131
|
-
codec,
|
132
|
-
}),
|
133
|
-
);
|
134
|
-
await t.put(block);
|
135
|
-
carCid0 = await loader.commit(t, { head: [block.cid] });
|
136
|
-
|
137
|
-
block2 = await anyBlock2FPBlock(
|
138
|
-
await rt.mf.block.encode({
|
139
|
-
value: { hello: "universe" },
|
140
|
-
hasher,
|
141
|
-
codec,
|
142
|
-
}),
|
143
|
-
);
|
144
|
-
await t.put(block2);
|
145
|
-
carCid = await loader.commit(t, { head: [block2.cid] });
|
146
|
-
|
147
|
-
block3 = await anyBlock2FPBlock(
|
148
|
-
await rt.mf.block.encode({
|
149
|
-
value: { hello: "multiverse" },
|
150
|
-
hasher,
|
151
|
-
codec,
|
152
|
-
}),
|
153
|
-
);
|
154
|
-
await t.put(block3);
|
155
|
-
|
156
|
-
block4 = await anyBlock2FPBlock(
|
157
|
-
await rt.mf.block.encode({
|
158
|
-
value: { hello: "megaverse" },
|
159
|
-
hasher,
|
160
|
-
codec,
|
161
|
-
}),
|
162
|
-
);
|
163
|
-
|
164
|
-
await t.put(block4);
|
165
|
-
});
|
166
|
-
|
167
|
-
it("should have a car log", function () {
|
168
|
-
expect(loader.carLog.length).toBe(2);
|
169
|
-
expect(loader.carLog.asArray()[0].toString()).toBe(carCid.toString());
|
170
|
-
expect(loader.carLog.asArray()[1].toString()).toBe(carCid0.toString());
|
171
|
-
});
|
172
|
-
|
173
|
-
it("should commit", async () => {
|
174
|
-
const reader = await loader.loadCar(carCid[0], loader.attachedStores.local());
|
175
|
-
expect(reader).toBeTruthy();
|
176
|
-
assert(isCarBlockItemReady(reader));
|
177
|
-
const parsed = await bs.parseCarFile<CRDTMeta>(reader, loader.logger);
|
178
|
-
expect(parsed.cars).toBeTruthy();
|
179
|
-
expect(parsed.compact.length).toBe(0);
|
180
|
-
expect(parsed.cars.length).toBe(1);
|
181
|
-
expect(parsed.meta).toBeTruthy();
|
182
|
-
expect(parsed.meta.head).toBeTruthy();
|
183
|
-
});
|
184
|
-
|
185
|
-
it("should compact", async () => {
|
186
|
-
const compactCid = await loader.commit(t, { head: [block2.cid] }, { compact: true });
|
187
|
-
expect(loader.carLog.length).toBe(1);
|
188
|
-
|
189
|
-
const reader = await loader.loadCar(compactCid[0], loader.attachedStores.local());
|
190
|
-
expect(reader).toBeTruthy();
|
191
|
-
assert(isCarBlockItemReady(reader));
|
192
|
-
const parsed = await bs.parseCarFile<CRDTMeta>(reader, loader.logger);
|
193
|
-
expect(parsed.cars).toBeTruthy();
|
194
|
-
expect(parsed.compact.length).toBe(2);
|
195
|
-
expect(parsed.cars.length).toBe(0);
|
196
|
-
expect(parsed.meta).toBeTruthy();
|
197
|
-
expect(parsed.meta.head).toBeTruthy();
|
198
|
-
});
|
199
|
-
|
200
|
-
it("compact should erase old files", async () => {
|
201
|
-
const cs = await loader.attachedStores.local().active.car;
|
202
|
-
await loader.commit(t, { head: [block2.cid] }, { compact: true });
|
203
|
-
expect(loader.carLog.length).toBe(1);
|
204
|
-
await loader.commit(t, { head: [block3.cid] }, { compact: false });
|
205
|
-
expect(loader.carLog.length).toBe(2);
|
206
|
-
expect(await cs.load(carCid[0])).toBeTruthy();
|
207
|
-
await loader.commit(t, { head: [block3.cid] }, { compact: true });
|
208
|
-
expect(loader.carLog.length).toBe(1);
|
209
|
-
const e0 = await cs.load(carCid[0]).catch((e) => e);
|
210
|
-
expect(e0 instanceof Error).toBeTruthy();
|
211
|
-
await loader.commit(t, { head: [block4.cid] }, { compact: false });
|
212
|
-
expect(loader.carLog.length).toBe(2);
|
213
|
-
|
214
|
-
const e = await loader.loadCar(carCid[0], loader.attachedStores.local());
|
215
|
-
expect(e).toBeTruthy();
|
216
|
-
assert(isCarBlockItemStale(e));
|
217
|
-
expect(e.item.status).toBe("stale");
|
218
|
-
expect(e.item.statusCause.message).toMatch(/(missing car file)|(not found)/);
|
219
|
-
}, 10000);
|
220
|
-
});
|
221
|
-
|
222
|
-
describe("basic Loader with index commits", function () {
|
223
|
-
let block: FPBlock;
|
224
|
-
let ib: bs.EncryptedBlockstore;
|
225
|
-
let indexerResult: IndexTransactionMeta;
|
226
|
-
let cid: CID;
|
227
|
-
// let indexMap: Map<string, CID>;
|
228
|
-
const sthis = ensureSuperThis();
|
229
|
-
|
230
|
-
afterEach(async () => {
|
231
|
-
await ib.close();
|
232
|
-
await ib.destroy();
|
233
|
-
});
|
234
|
-
|
235
|
-
beforeEach(async () => {
|
236
|
-
const name = "test-loader-index" + Math.random();
|
237
|
-
await sthis.start();
|
238
|
-
// t = new CarTransaction()
|
239
|
-
ib = new bs.EncryptedBlockstore(sthis, simpleBlockOpts(sthis, name));
|
240
|
-
await ib.ready();
|
241
|
-
block = await anyBlock2FPBlock(
|
242
|
-
await rt.mf.block.encode({
|
243
|
-
value: { hello: "world" },
|
244
|
-
hasher,
|
245
|
-
codec,
|
246
|
-
}),
|
247
|
-
);
|
248
|
-
// console.log('block', block.cid)
|
249
|
-
|
250
|
-
cid = CID.parse("bafybeia4luuns6dgymy5kau5rm7r4qzrrzg6cglpzpogussprpy42cmcn4");
|
251
|
-
indexerResult = {
|
252
|
-
indexes: {
|
253
|
-
hello: {
|
254
|
-
byId: cid,
|
255
|
-
byKey: cid,
|
256
|
-
head: [cid as CID<unknown, number, number, 1>],
|
257
|
-
name: "hello",
|
258
|
-
map: "(doc) => doc.hello",
|
259
|
-
},
|
260
|
-
},
|
261
|
-
};
|
262
|
-
// indexMap = new Map();
|
263
|
-
});
|
264
|
-
|
265
|
-
it("should start with an empty car log", function () {
|
266
|
-
expect(ib.loader).toBeTruthy();
|
267
|
-
expect(ib.loader.carLog.length).toBe(0);
|
268
|
-
});
|
269
|
-
|
270
|
-
it("should commit the index metadata", async () => {
|
271
|
-
const { cars: carCid } = await ib.transaction<IndexTransactionMeta>(
|
272
|
-
async (t) => {
|
273
|
-
await t.put(block);
|
274
|
-
return indexerResult;
|
275
|
-
} /* , indexMap */,
|
276
|
-
);
|
277
|
-
|
278
|
-
expect(carCid).toBeTruthy();
|
279
|
-
expect(ib.loader).toBeTruthy();
|
280
|
-
const carLog = ib.loader.carLog;
|
281
|
-
|
282
|
-
expect(carLog.length).toBe(1);
|
283
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
284
|
-
const reader = await ib.loader.loadCar(carCid![0], ib.loader.attachedStores.local());
|
285
|
-
expect(reader).toBeTruthy();
|
286
|
-
assert(isCarBlockItemReady(reader));
|
287
|
-
const parsed = await bs.parseCarFile<IndexTransactionMeta>(reader, sthis.logger);
|
288
|
-
expect(parsed.cars).toBeTruthy();
|
289
|
-
expect(parsed.cars.length).toBe(0);
|
290
|
-
expect(parsed.meta).toBeTruthy();
|
291
|
-
expect(parsed.meta.indexes).toBeTruthy();
|
292
|
-
const indexes = parsed.meta.indexes;
|
293
|
-
expect(indexes).toBeTruthy();
|
294
|
-
expect(indexes.hello).toBeTruthy();
|
295
|
-
expect(indexes.hello.map).toBe("(doc) => doc.hello");
|
296
|
-
expect(indexes.hello.name).toBe("hello");
|
297
|
-
});
|
298
|
-
});
|