@farukada/aws-langgraph-dynamodb-ts 1.0.0-rc.2 → 1.0.0
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/README.md +390 -193
- package/dist/{backfill → cjs/backfill}/backfill.d.ts +15 -12
- package/dist/cjs/backfill/backfill.js +177 -0
- package/dist/{checkpointer → cjs/checkpointer}/actions/delete-thread.d.ts +1 -1
- package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
- package/dist/{checkpointer → cjs/checkpointer}/actions/get-tuple.d.ts +4 -3
- package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
- package/dist/{checkpointer → cjs/checkpointer}/actions/list.d.ts +7 -4
- package/dist/cjs/checkpointer/actions/list.js +70 -0
- package/dist/{checkpointer → cjs/checkpointer}/actions/put-writes.d.ts +8 -6
- package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
- package/dist/{checkpointer → cjs/checkpointer}/actions/put.d.ts +21 -15
- package/dist/cjs/checkpointer/actions/put.js +79 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/delta-history.d.ts +38 -26
- package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/listing.d.ts +4 -4
- package/dist/cjs/checkpointer/internal/listing.js +104 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/parse.d.ts +51 -15
- package/dist/cjs/checkpointer/internal/parse.js +184 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/pending-writes.d.ts +64 -25
- package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/read.d.ts +15 -10
- package/dist/cjs/checkpointer/internal/read.js +132 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/rows.d.ts +94 -21
- package/dist/cjs/checkpointer/internal/rows.js +356 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/setup.d.ts +13 -20
- package/dist/cjs/checkpointer/internal/setup.js +25 -0
- package/dist/{checkpointer → cjs/checkpointer}/saver.d.ts +72 -36
- package/dist/cjs/checkpointer/saver.js +56 -0
- package/dist/{checkpointer → cjs/checkpointer}/types.d.ts +1 -1
- package/dist/cjs/checkpointer/types.js +2 -0
- package/dist/{factory → cjs/factory}/factory.d.ts +25 -20
- package/dist/cjs/factory/factory.js +137 -0
- package/dist/{factory → cjs/factory}/types.d.ts +12 -12
- package/dist/cjs/factory/types.js +2 -0
- package/dist/{history → cjs/history}/actions/add-messages.d.ts +18 -10
- package/dist/cjs/history/actions/add-messages.js +17 -0
- package/dist/{history → cjs/history}/actions/clear.d.ts +1 -1
- package/dist/cjs/history/actions/clear.js +29 -0
- package/dist/{history → cjs/history}/actions/get-messages.d.ts +11 -9
- package/dist/cjs/history/actions/get-messages.js +58 -0
- package/dist/{history → cjs/history}/actions/list-sessions.d.ts +3 -3
- package/dist/cjs/history/actions/list-sessions.js +67 -0
- package/dist/{history → cjs/history}/actions/reconcile-count.d.ts +13 -9
- package/dist/cjs/history/actions/reconcile-count.js +8 -0
- package/dist/{history → cjs/history}/chat-message-history.d.ts +62 -30
- package/dist/cjs/history/chat-message-history.js +61 -0
- package/dist/{history → cjs/history}/internal/append.d.ts +64 -32
- package/dist/cjs/history/internal/append.js +267 -0
- package/dist/{history → cjs/history}/internal/message-read.d.ts +3 -3
- package/dist/cjs/history/internal/message-read.js +93 -0
- package/dist/{history → cjs/history}/internal/parse.d.ts +2 -2
- package/dist/cjs/history/internal/parse.js +113 -0
- package/dist/{history → cjs/history}/internal/rows.d.ts +11 -10
- package/dist/cjs/history/internal/rows.js +96 -0
- package/dist/{history → cjs/history}/internal/session.d.ts +41 -22
- package/dist/cjs/history/internal/session.js +296 -0
- package/dist/{history → cjs/history}/internal/setup.d.ts +2 -2
- package/dist/cjs/history/internal/setup.js +60 -0
- package/dist/{history → cjs/history}/session-adapter.d.ts +0 -6
- package/dist/cjs/history/session-adapter.js +38 -0
- package/dist/{history → cjs/history}/types.d.ts +18 -15
- package/dist/cjs/history/types.js +2 -0
- package/dist/{index.d.ts → cjs/index.d.ts} +27 -27
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/package.json +1 -0
- package/dist/{shared → cjs/shared}/adapter.d.ts +27 -16
- package/dist/cjs/shared/adapter.js +70 -0
- package/dist/cjs/shared/clock.js +14 -0
- package/dist/{shared → cjs/shared}/codec/codec.d.ts +37 -20
- package/dist/cjs/shared/codec/codec.js +162 -0
- package/dist/{shared → cjs/shared}/codec/compression.d.ts +9 -4
- package/dist/cjs/shared/codec/compression.js +45 -0
- package/dist/cjs/shared/codec/json-serde.js +58 -0
- package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +2 -1
- package/dist/cjs/shared/codec/s3/client-types.js +6 -0
- package/dist/{shared → cjs/shared}/codec/s3/client.d.ts +25 -7
- package/dist/cjs/shared/codec/s3/client.js +78 -0
- package/dist/{shared → cjs/shared}/codec/s3/config.d.ts +12 -7
- package/dist/cjs/shared/codec/s3/config.js +92 -0
- package/dist/{shared → cjs/shared}/codec/s3/lifecycle.d.ts +71 -17
- package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
- package/dist/{shared → cjs/shared}/codec/s3/offloader.d.ts +42 -29
- package/dist/cjs/shared/codec/s3/offloader.js +289 -0
- package/dist/cjs/shared/concurrency.js +31 -0
- package/dist/{shared → cjs/shared}/dynamodb/abort.d.ts +2 -2
- package/dist/cjs/shared/dynamodb/abort.js +16 -0
- package/dist/{shared → cjs/shared}/dynamodb/batch-write.d.ts +2 -2
- package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
- package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
- package/dist/{shared → cjs/shared}/dynamodb/client.d.ts +24 -22
- package/dist/cjs/shared/dynamodb/client.js +40 -0
- package/dist/{shared → cjs/shared}/dynamodb/idempotent-write.d.ts +64 -19
- package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
- package/dist/{shared → cjs/shared}/dynamodb/paginate.d.ts +2 -2
- package/dist/cjs/shared/dynamodb/paginate.js +90 -0
- package/dist/{shared → cjs/shared}/dynamodb/partition-delete.d.ts +6 -6
- package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
- package/dist/{shared → cjs/shared}/dynamodb/recency-index.d.ts +27 -15
- package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
- package/dist/{shared → cjs/shared}/dynamodb/retry.d.ts +37 -6
- package/dist/cjs/shared/dynamodb/retry.js +193 -0
- package/dist/cjs/shared/dynamodb/row-size.d.ts +33 -0
- package/dist/cjs/shared/dynamodb/row-size.js +30 -0
- package/dist/{shared → cjs/shared}/dynamodb/table-schema.d.ts +27 -18
- package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
- package/dist/{shared → cjs/shared}/errors/base-error.d.ts +42 -7
- package/dist/cjs/shared/errors/base-error.js +73 -0
- package/dist/{shared → cjs/shared}/errors/boundary.d.ts +29 -14
- package/dist/cjs/shared/errors/boundary.js +61 -0
- package/dist/cjs/shared/errors/classify.d.ts +206 -0
- package/dist/cjs/shared/errors/classify.js +232 -0
- package/dist/{shared → cjs/shared}/errors/error-code.d.ts +17 -10
- package/dist/cjs/shared/errors/error-code.js +27 -0
- package/dist/{shared → cjs/shared}/errors/errors.d.ts +75 -9
- package/dist/cjs/shared/errors/errors.js +123 -0
- package/dist/cjs/shared/logging/logger.js +30 -0
- package/dist/{shared → cjs/shared}/logging/redaction.d.ts +8 -4
- package/dist/cjs/shared/logging/redaction.js +145 -0
- package/dist/{shared → cjs/shared}/logging/secret-patterns.d.ts +30 -7
- package/dist/cjs/shared/logging/secret-patterns.js +93 -0
- package/dist/cjs/shared/logging/truncate.js +31 -0
- package/dist/{shared → cjs/shared}/options.d.ts +27 -11
- package/dist/cjs/shared/options.js +2 -0
- package/dist/cjs/shared/ulid.js +83 -0
- package/dist/{shared → cjs/shared}/validation/collaborators.d.ts +21 -2
- package/dist/cjs/shared/validation/collaborators.js +79 -0
- package/dist/{shared → cjs/shared}/validation/option-shape.d.ts +7 -5
- package/dist/cjs/shared/validation/option-shape.js +31 -0
- package/dist/{shared → cjs/shared}/validation/options.d.ts +4 -4
- package/dist/cjs/shared/validation/options.js +166 -0
- package/dist/cjs/shared/validation/primitives.js +114 -0
- package/dist/{shared → cjs/shared}/validation/ttl.d.ts +26 -9
- package/dist/cjs/shared/validation/ttl.js +52 -0
- package/dist/{store → cjs/store}/actions/list-namespaces.d.ts +5 -5
- package/dist/cjs/store/actions/list-namespaces.js +92 -0
- package/dist/{store → cjs/store}/actions/put.d.ts +11 -4
- package/dist/cjs/store/actions/put.js +49 -0
- package/dist/{store → cjs/store}/actions/reconcile-vector-index.d.ts +5 -5
- package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
- package/dist/{store → cjs/store}/actions/search.d.ts +2 -2
- package/dist/cjs/store/actions/search.js +26 -0
- package/dist/cjs/store/internal/batch-plan.d.ts +56 -0
- package/dist/cjs/store/internal/batch-plan.js +32 -0
- package/dist/{store → cjs/store}/internal/filter.d.ts +3 -3
- package/dist/cjs/store/internal/filter.js +64 -0
- package/dist/cjs/store/internal/get-item.d.ts +77 -0
- package/dist/cjs/store/internal/get-item.js +58 -0
- package/dist/{store → cjs/store}/internal/item-write.d.ts +72 -32
- package/dist/cjs/store/internal/item-write.js +181 -0
- package/dist/{store → cjs/store}/internal/parse.d.ts +15 -10
- package/dist/cjs/store/internal/parse.js +180 -0
- package/dist/{store → cjs/store}/internal/rows.d.ts +38 -34
- package/dist/cjs/store/internal/rows.js +166 -0
- package/dist/{store → cjs/store}/internal/semantic-search.d.ts +2 -2
- package/dist/cjs/store/internal/semantic-search.js +211 -0
- package/dist/{store → cjs/store}/internal/setup.d.ts +10 -15
- package/dist/cjs/store/internal/setup.js +103 -0
- package/dist/{store → cjs/store}/internal/table-search.d.ts +5 -5
- package/dist/cjs/store/internal/table-search.js +123 -0
- package/dist/{store → cjs/store}/internal/vector-index.d.ts +26 -15
- package/dist/cjs/store/internal/vector-index.js +269 -0
- package/dist/{store → cjs/store}/store.d.ts +82 -39
- package/dist/cjs/store/store.js +97 -0
- package/dist/{store → cjs/store}/types.d.ts +25 -10
- package/dist/cjs/store/types.js +2 -0
- package/dist/cjs/store/vector-backend.js +4 -0
- package/dist/esm/backfill/backfill.d.ts +171 -0
- package/dist/esm/backfill/backfill.js +170 -0
- package/dist/{checkpointer/actions/delete-thread.js → esm/checkpointer/actions/delete-thread.d.ts} +4 -26
- package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
- package/dist/{checkpointer/actions/get-tuple.js → esm/checkpointer/actions/get-tuple.d.ts} +7 -24
- package/dist/esm/checkpointer/actions/get-tuple.js +19 -0
- package/dist/esm/checkpointer/actions/list.d.ts +55 -0
- package/dist/esm/checkpointer/actions/list.js +67 -0
- package/dist/{checkpointer/actions/put-writes.js → esm/checkpointer/actions/put-writes.d.ts} +10 -37
- package/dist/esm/checkpointer/actions/put-writes.js +18 -0
- package/dist/esm/checkpointer/actions/put.d.ts +95 -0
- package/dist/esm/checkpointer/actions/put.js +75 -0
- package/dist/esm/checkpointer/internal/delta-history.d.ts +124 -0
- package/dist/esm/checkpointer/internal/delta-history.js +126 -0
- package/dist/{checkpointer/internal/listing.js → esm/checkpointer/internal/listing.d.ts} +22 -118
- package/dist/esm/checkpointer/internal/listing.js +95 -0
- package/dist/esm/checkpointer/internal/parse.d.ts +298 -0
- package/dist/esm/checkpointer/internal/parse.js +169 -0
- package/dist/esm/checkpointer/internal/pending-writes.d.ts +314 -0
- package/dist/esm/checkpointer/internal/pending-writes.js +229 -0
- package/dist/esm/checkpointer/internal/read.d.ts +135 -0
- package/dist/esm/checkpointer/internal/read.js +125 -0
- package/dist/esm/checkpointer/internal/rows.d.ts +644 -0
- package/dist/esm/checkpointer/internal/rows.js +323 -0
- package/dist/esm/checkpointer/internal/setup.d.ts +47 -0
- package/dist/esm/checkpointer/internal/setup.js +21 -0
- package/dist/{checkpointer/saver.js → esm/checkpointer/saver.d.ts} +84 -87
- package/dist/esm/checkpointer/saver.js +52 -0
- package/dist/esm/checkpointer/types.d.ts +51 -0
- package/dist/esm/checkpointer/types.js +1 -0
- package/dist/esm/factory/factory.d.ts +154 -0
- package/dist/esm/factory/factory.js +133 -0
- package/dist/esm/factory/types.d.ts +76 -0
- package/dist/esm/factory/types.js +1 -0
- package/dist/{history/actions/add-messages.js → esm/history/actions/add-messages.d.ts} +20 -26
- package/dist/esm/history/actions/add-messages.js +14 -0
- package/dist/{history/actions/clear.js → esm/history/actions/clear.d.ts} +4 -35
- package/dist/esm/history/actions/clear.js +26 -0
- package/dist/esm/history/actions/get-messages.d.ts +60 -0
- package/dist/esm/history/actions/get-messages.js +55 -0
- package/dist/esm/history/actions/list-sessions.d.ts +55 -0
- package/dist/esm/history/actions/list-sessions.js +64 -0
- package/dist/{history/actions/reconcile-count.js → esm/history/actions/reconcile-count.d.ts} +14 -16
- package/dist/esm/history/actions/reconcile-count.js +5 -0
- package/dist/{history/chat-message-history.js → esm/history/chat-message-history.d.ts} +76 -87
- package/dist/esm/history/chat-message-history.js +57 -0
- package/dist/esm/history/internal/append.d.ts +244 -0
- package/dist/esm/history/internal/append.js +259 -0
- package/dist/esm/history/internal/message-read.d.ts +84 -0
- package/dist/esm/history/internal/message-read.js +89 -0
- package/dist/esm/history/internal/parse.d.ts +153 -0
- package/dist/esm/history/internal/parse.js +105 -0
- package/dist/{history/internal/rows.js → esm/history/internal/rows.d.ts} +58 -112
- package/dist/esm/history/internal/rows.js +83 -0
- package/dist/esm/history/internal/session.d.ts +350 -0
- package/dist/esm/history/internal/session.js +285 -0
- package/dist/esm/history/internal/setup.d.ts +64 -0
- package/dist/esm/history/internal/setup.js +56 -0
- package/dist/{history/session-adapter.js → esm/history/session-adapter.d.ts} +25 -39
- package/dist/esm/history/session-adapter.js +34 -0
- package/dist/esm/history/types.d.ts +102 -0
- package/dist/esm/history/types.js +1 -0
- package/dist/esm/index.d.ts +53 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/shared/adapter.d.ts +146 -0
- package/dist/esm/shared/adapter.js +65 -0
- package/dist/{shared/clock.js → esm/shared/clock.d.ts} +3 -14
- package/dist/esm/shared/clock.js +9 -0
- package/dist/esm/shared/codec/codec.d.ts +336 -0
- package/dist/esm/shared/codec/codec.js +150 -0
- package/dist/esm/shared/codec/compression.d.ts +66 -0
- package/dist/esm/shared/codec/compression.js +40 -0
- package/dist/esm/shared/codec/json-serde.d.ts +80 -0
- package/dist/esm/shared/codec/json-serde.js +54 -0
- package/dist/esm/shared/codec/s3/client-types.d.ts +54 -0
- package/dist/esm/shared/codec/s3/client-types.js +3 -0
- package/dist/esm/shared/codec/s3/client.d.ts +63 -0
- package/dist/esm/shared/codec/s3/client.js +40 -0
- package/dist/{shared/codec/s3/config.js → esm/shared/codec/s3/config.d.ts} +45 -93
- package/dist/esm/shared/codec/s3/config.js +79 -0
- package/dist/esm/shared/codec/s3/lifecycle.d.ts +220 -0
- package/dist/esm/shared/codec/s3/lifecycle.js +214 -0
- package/dist/esm/shared/codec/s3/offloader.d.ts +428 -0
- package/dist/esm/shared/codec/s3/offloader.js +278 -0
- package/dist/{shared/concurrency.js → esm/shared/concurrency.d.ts} +2 -37
- package/dist/esm/shared/concurrency.js +27 -0
- package/dist/{shared/dynamodb/abort.js → esm/shared/dynamodb/abort.d.ts} +4 -16
- package/dist/esm/shared/dynamodb/abort.js +12 -0
- package/dist/esm/shared/dynamodb/batch-write.d.ts +86 -0
- package/dist/esm/shared/dynamodb/batch-write.js +74 -0
- package/dist/{shared/dynamodb/cancellation.js → esm/shared/dynamodb/cancellation.d.ts} +25 -53
- package/dist/esm/shared/dynamodb/cancellation.js +30 -0
- package/dist/{shared/dynamodb/client.js → esm/shared/dynamodb/client.d.ts} +74 -64
- package/dist/esm/shared/dynamodb/client.js +35 -0
- package/dist/{shared/dynamodb/idempotent-write.js → esm/shared/dynamodb/idempotent-write.d.ts} +172 -169
- package/dist/esm/shared/dynamodb/idempotent-write.js +153 -0
- package/dist/esm/shared/dynamodb/paginate.d.ts +111 -0
- package/dist/esm/shared/dynamodb/paginate.js +84 -0
- package/dist/esm/shared/dynamodb/partition-delete.d.ts +204 -0
- package/dist/esm/shared/dynamodb/partition-delete.js +171 -0
- package/dist/esm/shared/dynamodb/recency-index.d.ts +243 -0
- package/dist/esm/shared/dynamodb/recency-index.js +136 -0
- package/dist/esm/shared/dynamodb/retry.d.ts +317 -0
- package/dist/esm/shared/dynamodb/retry.js +180 -0
- package/dist/esm/shared/dynamodb/row-size.d.ts +33 -0
- package/dist/esm/shared/dynamodb/row-size.js +26 -0
- package/dist/{shared/dynamodb/table-schema.js → esm/shared/dynamodb/table-schema.d.ts} +57 -67
- package/dist/esm/shared/dynamodb/table-schema.js +43 -0
- package/dist/esm/shared/errors/base-error.d.ts +231 -0
- package/dist/esm/shared/errors/base-error.js +64 -0
- package/dist/esm/shared/errors/boundary.d.ts +86 -0
- package/dist/esm/shared/errors/boundary.js +54 -0
- package/dist/esm/shared/errors/classify.d.ts +206 -0
- package/dist/esm/shared/errors/classify.js +220 -0
- package/dist/{shared/errors/error-code.js → esm/shared/errors/error-code.d.ts} +39 -43
- package/dist/esm/shared/errors/error-code.js +24 -0
- package/dist/{shared/errors/errors.js → esm/shared/errors/errors.d.ts} +92 -98
- package/dist/esm/shared/errors/errors.js +110 -0
- package/dist/{shared/logging/logger.js → esm/shared/logging/logger.d.ts} +22 -52
- package/dist/esm/shared/logging/logger.js +25 -0
- package/dist/esm/shared/logging/redaction.d.ts +123 -0
- package/dist/esm/shared/logging/redaction.js +140 -0
- package/dist/{shared/logging/secret-patterns.js → esm/shared/logging/secret-patterns.d.ts} +46 -87
- package/dist/esm/shared/logging/secret-patterns.js +83 -0
- package/dist/{shared/logging/truncate.js → esm/shared/logging/truncate.d.ts} +6 -40
- package/dist/esm/shared/logging/truncate.js +25 -0
- package/dist/esm/shared/options.d.ts +100 -0
- package/dist/esm/shared/options.js +1 -0
- package/dist/{shared/ulid.js → esm/shared/ulid.d.ts} +4 -84
- package/dist/esm/shared/ulid.js +77 -0
- package/dist/{shared/validation/collaborators.js → esm/shared/validation/collaborators.d.ts} +37 -65
- package/dist/esm/shared/validation/collaborators.js +70 -0
- package/dist/{shared/validation/option-shape.js → esm/shared/validation/option-shape.d.ts} +14 -36
- package/dist/esm/shared/validation/option-shape.js +24 -0
- package/dist/esm/shared/validation/options.d.ts +145 -0
- package/dist/esm/shared/validation/options.js +156 -0
- package/dist/{shared/validation/primitives.js → esm/shared/validation/primitives.d.ts} +30 -125
- package/dist/esm/shared/validation/primitives.js +100 -0
- package/dist/esm/shared/validation/ttl.d.ts +94 -0
- package/dist/esm/shared/validation/ttl.js +46 -0
- package/dist/esm/store/actions/list-namespaces.d.ts +79 -0
- package/dist/esm/store/actions/list-namespaces.js +86 -0
- package/dist/esm/store/actions/put.d.ts +43 -0
- package/dist/esm/store/actions/put.js +46 -0
- package/dist/{store/actions/reconcile-vector-index.js → esm/store/actions/reconcile-vector-index.d.ts} +8 -16
- package/dist/esm/store/actions/reconcile-vector-index.js +10 -0
- package/dist/esm/store/actions/search.d.ts +38 -0
- package/dist/esm/store/actions/search.js +23 -0
- package/dist/esm/store/internal/batch-plan.d.ts +56 -0
- package/dist/esm/store/internal/batch-plan.js +28 -0
- package/dist/esm/store/internal/filter.d.ts +43 -0
- package/dist/esm/store/internal/filter.js +60 -0
- package/dist/esm/store/internal/get-item.d.ts +77 -0
- package/dist/esm/store/internal/get-item.js +54 -0
- package/dist/esm/store/internal/item-write.d.ts +270 -0
- package/dist/esm/store/internal/item-write.js +173 -0
- package/dist/esm/store/internal/parse.d.ts +230 -0
- package/dist/esm/store/internal/parse.js +169 -0
- package/dist/{store/internal/rows.js → esm/store/internal/rows.d.ts} +111 -199
- package/dist/esm/store/internal/rows.js +147 -0
- package/dist/esm/store/internal/semantic-search.d.ts +168 -0
- package/dist/esm/store/internal/semantic-search.js +200 -0
- package/dist/esm/store/internal/setup.d.ts +96 -0
- package/dist/esm/store/internal/setup.js +98 -0
- package/dist/esm/store/internal/table-search.d.ts +100 -0
- package/dist/esm/store/internal/table-search.js +119 -0
- package/dist/esm/store/internal/vector-index.d.ts +258 -0
- package/dist/esm/store/internal/vector-index.js +256 -0
- package/dist/{store/store.js → esm/store/store.d.ts} +99 -133
- package/dist/esm/store/store.js +93 -0
- package/dist/esm/store/types.d.ts +111 -0
- package/dist/esm/store/types.js +1 -0
- package/dist/esm/store/vector-backend.d.ts +104 -0
- package/dist/esm/store/vector-backend.js +1 -0
- package/package.json +50 -44
- package/dist/backfill/backfill.js +0 -393
- package/dist/checkpointer/actions/list.js +0 -142
- package/dist/checkpointer/actions/put.js +0 -195
- package/dist/checkpointer/internal/delta-history.js +0 -252
- package/dist/checkpointer/internal/parse.js +0 -372
- package/dist/checkpointer/internal/pending-writes.js +0 -588
- package/dist/checkpointer/internal/read.js +0 -264
- package/dist/checkpointer/internal/rows.js +0 -834
- package/dist/checkpointer/internal/setup.js +0 -72
- package/dist/checkpointer/types.js +0 -12
- package/dist/factory/factory.js +0 -266
- package/dist/factory/types.js +0 -10
- package/dist/history/actions/get-messages.js +0 -141
- package/dist/history/actions/list-sessions.js +0 -156
- package/dist/history/internal/append.js +0 -500
- package/dist/history/internal/message-read.js +0 -204
- package/dist/history/internal/parse.js +0 -252
- package/dist/history/internal/session.js +0 -628
- package/dist/history/internal/setup.js +0 -106
- package/dist/history/types.js +0 -12
- package/dist/index.js +0 -51
- package/dist/shared/adapter.js +0 -143
- package/dist/shared/codec/codec.js +0 -441
- package/dist/shared/codec/compression.js +0 -89
- package/dist/shared/codec/json-serde.js +0 -191
- package/dist/shared/codec/s3/client-types.js +0 -26
- package/dist/shared/codec/s3/client.js +0 -97
- package/dist/shared/codec/s3/lifecycle.js +0 -355
- package/dist/shared/codec/s3/offloader.js +0 -658
- package/dist/shared/dynamodb/batch-write.js +0 -173
- package/dist/shared/dynamodb/paginate.js +0 -188
- package/dist/shared/dynamodb/partition-delete.js +0 -340
- package/dist/shared/dynamodb/recency-index.js +0 -377
- package/dist/shared/dynamodb/retry.js +0 -463
- package/dist/shared/errors/base-error.js +0 -174
- package/dist/shared/errors/boundary.js +0 -143
- package/dist/shared/errors/classify.d.ts +0 -97
- package/dist/shared/errors/classify.js +0 -257
- package/dist/shared/logging/redaction.js +0 -316
- package/dist/shared/options.js +0 -11
- package/dist/shared/validation/options.js +0 -328
- package/dist/shared/validation/ttl.js +0 -132
- package/dist/store/actions/list-namespaces.js +0 -197
- package/dist/store/actions/put.js +0 -78
- package/dist/store/actions/search.js +0 -66
- package/dist/store/internal/batch-plan.d.ts +0 -26
- package/dist/store/internal/batch-plan.js +0 -109
- package/dist/store/internal/filter.js +0 -137
- package/dist/store/internal/get-item.d.ts +0 -45
- package/dist/store/internal/get-item.js +0 -115
- package/dist/store/internal/item-write.js +0 -463
- package/dist/store/internal/parse.js +0 -350
- package/dist/store/internal/semantic-search.js +0 -389
- package/dist/store/internal/setup.js +0 -223
- package/dist/store/internal/table-search.js +0 -213
- package/dist/store/internal/vector-index.js +0 -546
- package/dist/store/types.js +0 -15
- package/dist/store/vector-backend.js +0 -17
- /package/dist/{shared → cjs/shared}/clock.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/codec/json-serde.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/concurrency.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/dynamodb/cancellation.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/logging/logger.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/logging/truncate.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/ulid.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/validation/primitives.d.ts +0 -0
- /package/dist/{store → cjs/store}/vector-backend.d.ts +0 -0
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Hides how a cancelled transaction says why it failed.
|
|
4
3
|
*
|
|
@@ -9,21 +8,28 @@
|
|
|
9
8
|
* condition are read here and nowhere else, so the retry layer, the error
|
|
10
9
|
* classifier and the writers that act on a rejection cannot read one apart.
|
|
11
10
|
*/
|
|
12
|
-
|
|
13
|
-
exports.getCancellationReasons = getCancellationReasons;
|
|
14
|
-
exports.conditionalCheckFailure = conditionalCheckFailure;
|
|
15
|
-
exports.transientCancellation = transientCancellation;
|
|
16
|
-
exports.throttledCancellation = throttledCancellation;
|
|
17
|
-
exports.conditionFailedAt = conditionFailedAt;
|
|
18
|
-
/** The reason code an item that was not the cause carries. */
|
|
19
|
-
const NOT_THE_CAUSE = 'None';
|
|
11
|
+
import type { AttributeValue } from '@aws-sdk/client-dynamodb';
|
|
20
12
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
13
|
+
* One entry of a TransactWriteItems/TransactionCanceledException's
|
|
14
|
+
* CancellationReasons. `Item` is the row the service attached to the item whose
|
|
15
|
+
* condition failed, in raw AttributeValue form — an error payload is not
|
|
16
|
+
* unmarshalled by the document client the way a response is.
|
|
25
17
|
*/
|
|
26
|
-
|
|
18
|
+
export interface CancellationReason {
|
|
19
|
+
Code?: string;
|
|
20
|
+
Item?: Record<string, AttributeValue>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The fields a write's rejection can arrive in: the exception's own name, and
|
|
24
|
+
* the per-item reasons a cancelled transaction carries instead. Both are
|
|
25
|
+
* optional because this is an arbitrary error seen through a reader's eyes — a
|
|
26
|
+
* rejection outside a transaction names itself and carries no reasons, one
|
|
27
|
+
* inside a transaction carries reasons under a name of its own.
|
|
28
|
+
*/
|
|
29
|
+
export interface RejectionFields {
|
|
30
|
+
name?: string;
|
|
31
|
+
CancellationReasons?: CancellationReason[];
|
|
32
|
+
}
|
|
27
33
|
/**
|
|
28
34
|
* The per-item reasons a `TransactWriteItems` cancellation carries.
|
|
29
35
|
*
|
|
@@ -51,9 +57,7 @@ const CONDITION_FAILED = 'ConditionalCheckFailed';
|
|
|
51
57
|
* property read raised a `TypeError` there, inside the classification the
|
|
52
58
|
* retry layer makes before it decides whether to try again.
|
|
53
59
|
*/
|
|
54
|
-
function getCancellationReasons(error)
|
|
55
|
-
return error?.CancellationReasons;
|
|
56
|
-
}
|
|
60
|
+
export declare function getCancellationReasons(error: RejectionFields): CancellationReason[] | undefined;
|
|
57
61
|
/**
|
|
58
62
|
* The reason belonging to the one item a transaction's guard turned away.
|
|
59
63
|
*
|
|
@@ -80,22 +84,7 @@ function getCancellationReasons(error) {
|
|
|
80
84
|
*
|
|
81
85
|
* Throws: nothing.
|
|
82
86
|
*/
|
|
83
|
-
function conditionalCheckFailure(error)
|
|
84
|
-
const reasons = getCancellationReasons(error) ?? [];
|
|
85
|
-
const causes = reasons.filter((reason) => reason.Code !== NOT_THE_CAUSE);
|
|
86
|
-
return causes.length === 1 && causes[0].Code === CONDITION_FAILED ? causes[0] : undefined;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Cancellation reason codes (from a `TransactionCanceledException`'s
|
|
90
|
-
* `CancellationReasons`) that are transient and safe to retry. `None` marks an
|
|
91
|
-
* item that was not the cause and is ignored.
|
|
92
|
-
*/
|
|
93
|
-
const TRANSIENT_CANCELLATION_REASONS = [
|
|
94
|
-
'None',
|
|
95
|
-
'TransactionConflict',
|
|
96
|
-
'ThrottlingError',
|
|
97
|
-
'ProvisionedThroughputExceeded',
|
|
98
|
-
];
|
|
87
|
+
export declare function conditionalCheckFailure(error: RejectionFields): CancellationReason | undefined;
|
|
99
88
|
/**
|
|
100
89
|
* Whether a cancelled transaction failed only for transient reasons.
|
|
101
90
|
*
|
|
@@ -107,20 +96,7 @@ const TRANSIENT_CANCELLATION_REASONS = [
|
|
|
107
96
|
*
|
|
108
97
|
* Throws: nothing, for any value; see {@link getCancellationReasons}.
|
|
109
98
|
*/
|
|
110
|
-
function transientCancellation(error)
|
|
111
|
-
const reasons = getCancellationReasons(error);
|
|
112
|
-
if (!reasons)
|
|
113
|
-
return undefined;
|
|
114
|
-
// `length > 0` is load-bearing: `.every()` is vacuously true on an empty
|
|
115
|
-
// array, which would make a reason-less cancellation retryable — the exact
|
|
116
|
-
// opposite of what this function documents. AWS populates one reason per
|
|
117
|
-
// `TransactItems` entry, so an empty array should not occur; if it ever
|
|
118
|
-
// does, the conservative answer is not to retry.
|
|
119
|
-
return (reasons.length > 0 &&
|
|
120
|
-
reasons.every((reason) => reason.Code === undefined || TRANSIENT_CANCELLATION_REASONS.includes(reason.Code)));
|
|
121
|
-
}
|
|
122
|
-
/** Cancellation reason codes that mean the request was throttled. */
|
|
123
|
-
const THROTTLING_REASONS = ['ThrottlingError', 'ProvisionedThroughputExceeded'];
|
|
99
|
+
export declare function transientCancellation(error: RejectionFields): boolean | undefined;
|
|
124
100
|
/**
|
|
125
101
|
* Whether a cancelled transaction was throttled.
|
|
126
102
|
*
|
|
@@ -132,9 +108,7 @@ const THROTTLING_REASONS = ['ThrottlingError', 'ProvisionedThroughputExceeded'];
|
|
|
132
108
|
*
|
|
133
109
|
* Throws: nothing, for any value.
|
|
134
110
|
*/
|
|
135
|
-
function throttledCancellation(error)
|
|
136
|
-
return (getCancellationReasons(error) ?? []).some((reason) => reason.Code !== undefined && THROTTLING_REASONS.includes(reason.Code));
|
|
137
|
-
}
|
|
111
|
+
export declare function throttledCancellation(error: RejectionFields): boolean;
|
|
138
112
|
/**
|
|
139
113
|
* Whether the item at `index` of a cancelled transaction failed its condition.
|
|
140
114
|
*
|
|
@@ -147,6 +121,4 @@ function throttledCancellation(error) {
|
|
|
147
121
|
*
|
|
148
122
|
* Throws: nothing, for any value.
|
|
149
123
|
*/
|
|
150
|
-
function conditionFailedAt(error, index)
|
|
151
|
-
return getCancellationReasons(error)?.[index]?.Code === CONDITION_FAILED;
|
|
152
|
-
}
|
|
124
|
+
export declare function conditionFailedAt(error: RejectionFields, index: number): boolean;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const NOT_THE_CAUSE = 'None';
|
|
2
|
+
const CONDITION_FAILED = 'ConditionalCheckFailed';
|
|
3
|
+
export function getCancellationReasons(error) {
|
|
4
|
+
return error?.CancellationReasons;
|
|
5
|
+
}
|
|
6
|
+
export function conditionalCheckFailure(error) {
|
|
7
|
+
const reasons = getCancellationReasons(error) ?? [];
|
|
8
|
+
const causes = reasons.filter((reason) => reason.Code !== NOT_THE_CAUSE);
|
|
9
|
+
return causes.length === 1 && causes[0].Code === CONDITION_FAILED ? causes[0] : undefined;
|
|
10
|
+
}
|
|
11
|
+
const TRANSIENT_CANCELLATION_REASONS = [
|
|
12
|
+
'None',
|
|
13
|
+
'TransactionConflict',
|
|
14
|
+
'ThrottlingError',
|
|
15
|
+
'ProvisionedThroughputExceeded',
|
|
16
|
+
];
|
|
17
|
+
export function transientCancellation(error) {
|
|
18
|
+
const reasons = getCancellationReasons(error);
|
|
19
|
+
if (!reasons)
|
|
20
|
+
return undefined;
|
|
21
|
+
return (reasons.length > 0 &&
|
|
22
|
+
reasons.every((reason) => reason.Code === undefined || TRANSIENT_CANCELLATION_REASONS.includes(reason.Code)));
|
|
23
|
+
}
|
|
24
|
+
const THROTTLING_REASONS = ['ThrottlingError', 'ProvisionedThroughputExceeded'];
|
|
25
|
+
export function throttledCancellation(error) {
|
|
26
|
+
return (getCancellationReasons(error) ?? []).some((reason) => reason.Code !== undefined && THROTTLING_REASONS.includes(reason.Code));
|
|
27
|
+
}
|
|
28
|
+
export function conditionFailedAt(error, index) {
|
|
29
|
+
return getCancellationReasons(error)?.[index]?.Code === CONDITION_FAILED;
|
|
30
|
+
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Hides the DynamoDB client: the part of the DocumentClient this package calls,
|
|
4
3
|
* the row shapes that part speaks, and how a client this package builds bounds
|
|
@@ -10,12 +9,9 @@
|
|
|
10
9
|
* and a socket timeout are set, and the one place that knows whether the
|
|
11
10
|
* adapter owns the client it holds.
|
|
12
11
|
*/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
exports.warnOnStackedRetries = warnOnStackedRetries;
|
|
17
|
-
const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
|
|
18
|
-
const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
|
|
12
|
+
import { DynamoDBClient, type DynamoDBClientConfig } from '@aws-sdk/client-dynamodb';
|
|
13
|
+
import { DynamoDBDocument, type NativeAttributeValue, type TransactWriteCommandInput } from '@aws-sdk/lib-dynamodb';
|
|
14
|
+
import type { Logger } from '../logging/logger.js';
|
|
19
15
|
/**
|
|
20
16
|
* How long one request attempt may take on a client this library builds
|
|
21
17
|
* (10 seconds) before the SDK's request handler destroys it and rejects with a
|
|
@@ -26,16 +22,17 @@ const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
|
|
|
26
22
|
* of them defaults to 0 — a hung socket holds that attempt open forever and
|
|
27
23
|
* the write lifetime bounds nothing.
|
|
28
24
|
*
|
|
29
|
-
* Measured, not picked.
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
25
|
+
* Measured, not picked. At a thousand concurrent writes of 20 KB values —
|
|
26
|
+
* wider than one call's own fan-out now runs, but within reach of several
|
|
27
|
+
* calls sharing one client — the worst interval the handler itself saw —
|
|
28
|
+
* socket acquisition including the wait behind the agent's fifty sockets,
|
|
29
|
+
* connect, request write and time-to-first-response-header — was 0.92 s, and
|
|
30
|
+
* ten seconds is roughly eleven times that. The asymmetry settles the close
|
|
31
|
+
* call: too large leaves one attempt hanging for at most ten seconds, which
|
|
32
|
+
* the write lifetime's own headroom absorbs, while too small turns a healthy
|
|
33
|
+
* wide fan-out into a retry storm.
|
|
37
34
|
*/
|
|
38
|
-
|
|
35
|
+
export declare const DEFAULT_REQUEST_TIMEOUT_MS = 10000;
|
|
39
36
|
/**
|
|
40
37
|
* How long a socket may sit idle (5 seconds) on a client this library builds
|
|
41
38
|
* before the request handler destroys the request. Which error that surfaces
|
|
@@ -60,7 +57,18 @@ exports.DEFAULT_REQUEST_TIMEOUT_MS = 10_000;
|
|
|
60
57
|
* threshold so raising it fails loudly instead of disabling the only bound a
|
|
61
58
|
* stalled transfer has.
|
|
62
59
|
*/
|
|
63
|
-
|
|
60
|
+
export declare const DEFAULT_SOCKET_TIMEOUT_MS = 5000;
|
|
61
|
+
/** A resolved DynamoDB client plus its ownership flag. */
|
|
62
|
+
export interface ResolvedDynamoDBClient {
|
|
63
|
+
ddbClient: DynamoDBClient | undefined;
|
|
64
|
+
client: DynamoDBDocumentLike;
|
|
65
|
+
ownsClient: boolean;
|
|
66
|
+
}
|
|
67
|
+
/** Options for {@link resolveDynamoDBClient}. */
|
|
68
|
+
export interface ResolveClientOptions {
|
|
69
|
+
client?: DynamoDBDocumentLike;
|
|
70
|
+
clientConfig?: DynamoDBClientConfig;
|
|
71
|
+
}
|
|
64
72
|
/**
|
|
65
73
|
* The DocumentClient an adapter will use, and whether it owns it.
|
|
66
74
|
*
|
|
@@ -82,38 +90,11 @@ exports.DEFAULT_SOCKET_TIMEOUT_MS = 5_000;
|
|
|
82
90
|
* bounds how long one attempt may run, which `maxAttempts` alone does not. A
|
|
83
91
|
* `requestHandler` in `clientConfig` replaces that default whole rather than
|
|
84
92
|
* merging with it — the documented escape hatch, and equally the documented
|
|
85
|
-
* way to give up the bound.
|
|
86
|
-
*
|
|
93
|
+
* way to give up the bound. Either key named with `undefined` overrides
|
|
94
|
+
* nothing and keeps its default. An injected client keeps whatever it was
|
|
95
|
+
* built with — see {@link warnOnStackedRetries}.
|
|
87
96
|
*/
|
|
88
|
-
function resolveDynamoDBClient(options)
|
|
89
|
-
if (options.client) {
|
|
90
|
-
return { ddbClient: undefined, client: options.client, ownsClient: false };
|
|
91
|
-
}
|
|
92
|
-
const createClient = options.createClient ?? ((config) => new client_dynamodb_1.DynamoDBClient(config));
|
|
93
|
-
// `throwOnRequestTimeout` is what makes the request timeout a bound: without
|
|
94
|
-
// it the handler only logs a warning when the timeout is breached.
|
|
95
|
-
// `socketTimeout` is here because `requestTimeout` stops applying the moment
|
|
96
|
-
// response *headers* arrive — the handler resolves there and clears its
|
|
97
|
-
// timers — so it says nothing about a response body that then stalls
|
|
98
|
-
// mid-stream, and an idle timer does. No `connectionTimeout` is passed,
|
|
99
|
-
// deliberately — its timer starts when the request is created and is
|
|
100
|
-
// cleared only when the agent *assigns* a socket, so the time a request
|
|
101
|
-
// spends queued behind `maxSockets` counts against it. At the thousand-wide
|
|
102
|
-
// fan-out this package documents, any value short enough to be useful
|
|
103
|
-
// destroys healthy writes that this library then retries, and any value
|
|
104
|
-
// long enough to be safe bounds nothing the request timeout does not
|
|
105
|
-
// already bound.
|
|
106
|
-
const ddbClient = createClient({
|
|
107
|
-
maxAttempts: 1,
|
|
108
|
-
requestHandler: {
|
|
109
|
-
requestTimeout: exports.DEFAULT_REQUEST_TIMEOUT_MS,
|
|
110
|
-
socketTimeout: exports.DEFAULT_SOCKET_TIMEOUT_MS,
|
|
111
|
-
throwOnRequestTimeout: true,
|
|
112
|
-
},
|
|
113
|
-
...options.clientConfig,
|
|
114
|
-
});
|
|
115
|
-
return { ddbClient, client: lib_dynamodb_1.DynamoDBDocument.from(ddbClient), ownsClient: true };
|
|
116
|
-
}
|
|
97
|
+
export declare function resolveDynamoDBClient(options: ResolveClientOptions): ResolvedDynamoDBClient;
|
|
117
98
|
/**
|
|
118
99
|
* Warn once when an injected client keeps the SDK's own retries.
|
|
119
100
|
*
|
|
@@ -149,19 +130,48 @@ function resolveDynamoDBClient(options) {
|
|
|
149
130
|
* handed over, so one without a handler timeout leaves a single attempt
|
|
150
131
|
* unbounded even with the SDK's retries switched off.
|
|
151
132
|
*/
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
133
|
+
export declare function warnOnStackedRetries(client: DynamoDBDocumentLike, logger: Logger): Promise<void>;
|
|
134
|
+
/**
|
|
135
|
+
* A row, or a key, as the DocumentClient returns and takes it: attribute names
|
|
136
|
+
* mapped to values that nothing has checked yet. Each feature's row parser
|
|
137
|
+
* turns one into that feature's row type.
|
|
138
|
+
*/
|
|
139
|
+
export type AttributeMap = Record<string, NativeAttributeValue>;
|
|
140
|
+
/**
|
|
141
|
+
* A single `BatchWriteItem` write request, as the document client takes it —
|
|
142
|
+
* a `PutRequest` carrying the item, or a `DeleteRequest` carrying the key:
|
|
143
|
+
* the shape of each entry a `BATCH_WRITE_INCOMPLETE` error's
|
|
144
|
+
* `details.unprocessed` carries, verbatim, so a caller can re-submit it.
|
|
145
|
+
*/
|
|
146
|
+
export type WriteRequest = {
|
|
147
|
+
PutRequest: {
|
|
148
|
+
Item: Record<string, NativeAttributeValue>;
|
|
149
|
+
};
|
|
150
|
+
} | {
|
|
151
|
+
DeleteRequest: {
|
|
152
|
+
Key: Record<string, NativeAttributeValue>;
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
/** One action of a `TransactWriteItems` request, as the document client takes it. */
|
|
156
|
+
export type TransactAction = NonNullable<TransactWriteCommandInput['TransactItems']>[number];
|
|
157
|
+
/**
|
|
158
|
+
* The DocumentClient surface this library uses, named by shape rather than by
|
|
159
|
+
* identity. A `DynamoDBDocument` satisfies it, and so does a client built from
|
|
160
|
+
* a different copy of `@aws-sdk/lib-dynamodb`.
|
|
161
|
+
*
|
|
162
|
+
* That second case is the reason it exists. A consumer pinned to an older SDK
|
|
163
|
+
* than this package depends on gets a second, newer copy nested under the
|
|
164
|
+
* package; naming `DynamoDBDocument` in an option type would name *that* copy,
|
|
165
|
+
* and the client the consumer built is then a different type with the same
|
|
166
|
+
* name — refused at compile time for a method this library never calls, on the
|
|
167
|
+
* injection path the documentation recommends. Injection always worked at
|
|
168
|
+
* runtime; only the compiler stood in the way.
|
|
169
|
+
*
|
|
170
|
+
* The members are the eight the runtime collaborator check already requires,
|
|
171
|
+
* pinned equal to that list by a test — a client this type accepts and the
|
|
172
|
+
* constructor then rejects, or the reverse, would be worse than either rule
|
|
173
|
+
* alone. Picking them off `DynamoDBDocument` keeps each signature the SDK's
|
|
174
|
+
* own, so the internals stay exactly as type-safe as they were and the
|
|
175
|
+
* signatures cannot drift from the SDK this package installs.
|
|
176
|
+
*/
|
|
177
|
+
export type DynamoDBDocumentLike = Pick<DynamoDBDocument, 'batchWrite' | 'delete' | 'get' | 'put' | 'query' | 'scan' | 'transactWrite' | 'update'>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
|
|
2
|
+
import { DynamoDBDocument, } from '@aws-sdk/lib-dynamodb';
|
|
3
|
+
export const DEFAULT_REQUEST_TIMEOUT_MS = 10_000;
|
|
4
|
+
export const DEFAULT_SOCKET_TIMEOUT_MS = 5_000;
|
|
5
|
+
export function resolveDynamoDBClient(options) {
|
|
6
|
+
if (options.client) {
|
|
7
|
+
return { ddbClient: undefined, client: options.client, ownsClient: false };
|
|
8
|
+
}
|
|
9
|
+
const createClient = options.createClient ?? ((config) => new DynamoDBClient(config));
|
|
10
|
+
const ddbClient = createClient({
|
|
11
|
+
...options.clientConfig,
|
|
12
|
+
maxAttempts: options.clientConfig?.maxAttempts ?? 1,
|
|
13
|
+
requestHandler: options.clientConfig?.requestHandler ?? {
|
|
14
|
+
requestTimeout: DEFAULT_REQUEST_TIMEOUT_MS,
|
|
15
|
+
socketTimeout: DEFAULT_SOCKET_TIMEOUT_MS,
|
|
16
|
+
throwOnRequestTimeout: true,
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
return { ddbClient, client: DynamoDBDocument.from(ddbClient), ownsClient: true };
|
|
20
|
+
}
|
|
21
|
+
export async function warnOnStackedRetries(client, logger) {
|
|
22
|
+
const report = client.config
|
|
23
|
+
?.maxAttempts;
|
|
24
|
+
if (typeof report !== 'function')
|
|
25
|
+
return;
|
|
26
|
+
try {
|
|
27
|
+
const maxAttempts = await report();
|
|
28
|
+
if (maxAttempts > 1) {
|
|
29
|
+
logger.warn("injected DynamoDB client keeps the SDK's own retries; they stack inside this library's " +
|
|
30
|
+
'retry budget — construct it with maxAttempts: 1 unless that is intended', { maxAttempts });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
}
|
|
35
|
+
}
|