@farukada/aws-langgraph-dynamodb-ts 1.0.0-rc.1 → 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 +1820 -290
- package/dist/cjs/backfill/backfill.d.ts +171 -0
- package/dist/cjs/backfill/backfill.js +177 -0
- package/dist/cjs/checkpointer/actions/delete-thread.d.ts +50 -0
- package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
- package/dist/cjs/checkpointer/actions/get-tuple.d.ts +36 -0
- package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
- package/dist/cjs/checkpointer/actions/list.d.ts +55 -0
- package/dist/cjs/checkpointer/actions/list.js +70 -0
- package/dist/cjs/checkpointer/actions/put-writes.d.ts +49 -0
- package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
- package/dist/cjs/checkpointer/actions/put.d.ts +95 -0
- package/dist/cjs/checkpointer/actions/put.js +79 -0
- package/dist/cjs/checkpointer/internal/delta-history.d.ts +124 -0
- package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
- package/dist/cjs/checkpointer/internal/listing.d.ts +149 -0
- package/dist/cjs/checkpointer/internal/listing.js +104 -0
- package/dist/cjs/checkpointer/internal/parse.d.ts +298 -0
- package/dist/cjs/checkpointer/internal/parse.js +184 -0
- package/dist/cjs/checkpointer/internal/pending-writes.d.ts +314 -0
- package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
- package/dist/cjs/checkpointer/internal/read.d.ts +135 -0
- package/dist/cjs/checkpointer/internal/read.js +132 -0
- package/dist/cjs/checkpointer/internal/rows.d.ts +644 -0
- package/dist/cjs/checkpointer/internal/rows.js +356 -0
- package/dist/cjs/checkpointer/internal/setup.d.ts +47 -0
- package/dist/cjs/checkpointer/internal/setup.js +25 -0
- package/dist/cjs/checkpointer/saver.d.ts +306 -0
- package/dist/cjs/checkpointer/saver.js +56 -0
- package/dist/cjs/checkpointer/types.d.ts +51 -0
- package/dist/cjs/factory/factory.d.ts +154 -0
- package/dist/cjs/factory/factory.js +137 -0
- package/dist/{factory → cjs/factory}/types.d.ts +33 -14
- package/dist/cjs/history/actions/add-messages.d.ts +51 -0
- package/dist/cjs/history/actions/add-messages.js +17 -0
- package/dist/cjs/history/actions/clear.d.ts +52 -0
- package/dist/cjs/history/actions/clear.js +29 -0
- package/dist/cjs/history/actions/get-messages.d.ts +60 -0
- package/dist/cjs/history/actions/get-messages.js +58 -0
- package/dist/cjs/history/actions/list-sessions.d.ts +55 -0
- package/dist/cjs/history/actions/list-sessions.js +67 -0
- package/dist/cjs/history/actions/reconcile-count.d.ts +49 -0
- package/dist/cjs/history/actions/reconcile-count.js +8 -0
- package/dist/cjs/history/chat-message-history.d.ts +267 -0
- package/dist/cjs/history/chat-message-history.js +61 -0
- package/dist/cjs/history/internal/append.d.ts +244 -0
- package/dist/cjs/history/internal/append.js +267 -0
- package/dist/cjs/history/internal/message-read.d.ts +84 -0
- package/dist/cjs/history/internal/message-read.js +93 -0
- package/dist/cjs/history/internal/parse.d.ts +153 -0
- package/dist/cjs/history/internal/parse.js +113 -0
- package/dist/cjs/history/internal/rows.d.ts +196 -0
- package/dist/cjs/history/internal/rows.js +96 -0
- package/dist/cjs/history/internal/session.d.ts +350 -0
- package/dist/cjs/history/internal/session.js +296 -0
- package/dist/cjs/history/internal/setup.d.ts +64 -0
- package/dist/cjs/history/internal/setup.js +60 -0
- package/dist/cjs/history/session-adapter.d.ts +112 -0
- package/dist/cjs/history/session-adapter.js +38 -0
- package/dist/cjs/history/types.d.ts +102 -0
- package/dist/cjs/index.d.ts +53 -0
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/shared/adapter.d.ts +146 -0
- package/dist/cjs/shared/adapter.js +70 -0
- package/dist/cjs/shared/clock.d.ts +52 -0
- package/dist/cjs/shared/clock.js +14 -0
- package/dist/cjs/shared/codec/codec.d.ts +336 -0
- package/dist/cjs/shared/codec/codec.js +162 -0
- package/dist/cjs/shared/codec/compression.d.ts +66 -0
- package/dist/cjs/shared/codec/compression.js +45 -0
- package/dist/cjs/shared/codec/json-serde.d.ts +80 -0
- package/dist/cjs/shared/codec/json-serde.js +58 -0
- package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +22 -2
- package/dist/{shared → cjs/shared}/codec/s3/client-types.js +0 -1
- package/dist/cjs/shared/codec/s3/client.d.ts +63 -0
- package/dist/cjs/shared/codec/s3/client.js +78 -0
- package/dist/cjs/shared/codec/s3/config.d.ts +260 -0
- package/dist/cjs/shared/codec/s3/config.js +92 -0
- package/dist/cjs/shared/codec/s3/lifecycle.d.ts +220 -0
- package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
- package/dist/cjs/shared/codec/s3/offloader.d.ts +428 -0
- package/dist/cjs/shared/codec/s3/offloader.js +289 -0
- package/dist/cjs/shared/concurrency.d.ts +43 -0
- package/dist/{shared → cjs/shared}/concurrency.js +10 -9
- package/dist/cjs/shared/dynamodb/abort.d.ts +47 -0
- package/dist/cjs/shared/dynamodb/abort.js +16 -0
- package/dist/cjs/shared/dynamodb/batch-write.d.ts +86 -0
- package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
- package/dist/cjs/shared/dynamodb/cancellation.d.ts +124 -0
- package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
- package/dist/cjs/shared/dynamodb/client.d.ts +177 -0
- package/dist/{shared → cjs/shared}/dynamodb/client.js +12 -14
- package/dist/cjs/shared/dynamodb/idempotent-write.d.ts +596 -0
- package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
- package/dist/cjs/shared/dynamodb/paginate.d.ts +111 -0
- package/dist/cjs/shared/dynamodb/paginate.js +90 -0
- package/dist/cjs/shared/dynamodb/partition-delete.d.ts +204 -0
- package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
- package/dist/cjs/shared/dynamodb/recency-index.d.ts +243 -0
- package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
- package/dist/cjs/shared/dynamodb/retry.d.ts +317 -0
- 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/cjs/shared/dynamodb/table-schema.d.ts +199 -0
- package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
- package/dist/cjs/shared/errors/base-error.d.ts +231 -0
- package/dist/cjs/shared/errors/base-error.js +73 -0
- package/dist/cjs/shared/errors/boundary.d.ts +86 -0
- 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/cjs/shared/errors/error-code.d.ts +95 -0
- package/dist/{shared → cjs/shared}/errors/error-code.js +12 -2
- package/dist/cjs/shared/errors/errors.d.ts +233 -0
- package/dist/cjs/shared/errors/errors.js +123 -0
- package/dist/cjs/shared/logging/logger.d.ts +80 -0
- package/dist/cjs/shared/logging/logger.js +30 -0
- package/dist/cjs/shared/logging/redaction.d.ts +123 -0
- package/dist/cjs/shared/logging/redaction.js +145 -0
- package/dist/cjs/shared/logging/secret-patterns.d.ts +227 -0
- package/dist/cjs/shared/logging/secret-patterns.js +93 -0
- package/dist/cjs/shared/logging/truncate.d.ts +197 -0
- package/dist/cjs/shared/logging/truncate.js +31 -0
- package/dist/cjs/shared/options.d.ts +100 -0
- package/dist/cjs/shared/ulid.d.ts +80 -0
- package/dist/{shared → cjs/shared}/ulid.js +7 -21
- package/dist/cjs/shared/validation/collaborators.d.ts +160 -0
- package/dist/cjs/shared/validation/collaborators.js +79 -0
- package/dist/cjs/shared/validation/option-shape.d.ts +91 -0
- package/dist/cjs/shared/validation/option-shape.js +31 -0
- package/dist/cjs/shared/validation/options.d.ts +145 -0
- package/dist/cjs/shared/validation/options.js +166 -0
- package/dist/cjs/shared/validation/primitives.d.ts +292 -0
- package/dist/cjs/shared/validation/primitives.js +114 -0
- package/dist/cjs/shared/validation/ttl.d.ts +94 -0
- package/dist/cjs/shared/validation/ttl.js +52 -0
- package/dist/cjs/store/actions/list-namespaces.d.ts +79 -0
- package/dist/cjs/store/actions/list-namespaces.js +92 -0
- package/dist/cjs/store/actions/put.d.ts +43 -0
- package/dist/cjs/store/actions/put.js +49 -0
- package/dist/cjs/store/actions/reconcile-vector-index.d.ts +38 -0
- package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
- package/dist/cjs/store/actions/search.d.ts +38 -0
- 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/cjs/store/internal/filter.d.ts +43 -0
- 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/cjs/store/internal/item-write.d.ts +270 -0
- package/dist/cjs/store/internal/item-write.js +181 -0
- package/dist/cjs/store/internal/parse.d.ts +230 -0
- package/dist/cjs/store/internal/parse.js +180 -0
- package/dist/cjs/store/internal/rows.d.ts +359 -0
- package/dist/cjs/store/internal/rows.js +166 -0
- package/dist/cjs/store/internal/semantic-search.d.ts +168 -0
- package/dist/{store/internal/text-path.js → cjs/store/internal/semantic-search.js} +92 -28
- package/dist/cjs/store/internal/setup.d.ts +96 -0
- package/dist/cjs/store/internal/setup.js +103 -0
- package/dist/cjs/store/internal/table-search.d.ts +100 -0
- package/dist/cjs/store/internal/table-search.js +123 -0
- package/dist/cjs/store/internal/vector-index.d.ts +258 -0
- package/dist/cjs/store/internal/vector-index.js +269 -0
- package/dist/cjs/store/store.d.ts +329 -0
- package/dist/cjs/store/store.js +97 -0
- package/dist/cjs/store/types.d.ts +111 -0
- package/dist/cjs/store/vector-backend.d.ts +104 -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/esm/checkpointer/actions/delete-thread.d.ts +50 -0
- package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
- package/dist/esm/checkpointer/actions/get-tuple.d.ts +36 -0
- 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/esm/checkpointer/actions/put-writes.d.ts +49 -0
- 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/esm/checkpointer/internal/listing.d.ts +149 -0
- 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/esm/checkpointer/saver.d.ts +306 -0
- 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/esm/history/actions/add-messages.d.ts +51 -0
- package/dist/esm/history/actions/add-messages.js +14 -0
- package/dist/esm/history/actions/clear.d.ts +52 -0
- 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/esm/history/actions/reconcile-count.d.ts +49 -0
- package/dist/esm/history/actions/reconcile-count.js +5 -0
- package/dist/esm/history/chat-message-history.d.ts +267 -0
- 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/esm/history/internal/rows.d.ts +196 -0
- 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/esm/history/session-adapter.d.ts +112 -0
- 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/esm/shared/clock.d.ts +52 -0
- 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/esm/shared/codec/s3/config.d.ts +260 -0
- 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/esm/shared/concurrency.d.ts +43 -0
- package/dist/esm/shared/concurrency.js +27 -0
- package/dist/esm/shared/dynamodb/abort.d.ts +47 -0
- 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/esm/shared/dynamodb/cancellation.d.ts +124 -0
- package/dist/esm/shared/dynamodb/cancellation.js +30 -0
- package/dist/esm/shared/dynamodb/client.d.ts +177 -0
- package/dist/esm/shared/dynamodb/client.js +35 -0
- package/dist/esm/shared/dynamodb/idempotent-write.d.ts +596 -0
- 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/esm/shared/dynamodb/table-schema.d.ts +199 -0
- 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/esm/shared/errors/error-code.d.ts +95 -0
- package/dist/esm/shared/errors/error-code.js +24 -0
- package/dist/esm/shared/errors/errors.d.ts +233 -0
- package/dist/esm/shared/errors/errors.js +110 -0
- package/dist/esm/shared/logging/logger.d.ts +80 -0
- 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/esm/shared/logging/secret-patterns.d.ts +227 -0
- package/dist/esm/shared/logging/secret-patterns.js +83 -0
- package/dist/esm/shared/logging/truncate.d.ts +197 -0
- 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/esm/shared/ulid.d.ts +80 -0
- package/dist/esm/shared/ulid.js +77 -0
- package/dist/esm/shared/validation/collaborators.d.ts +160 -0
- package/dist/esm/shared/validation/collaborators.js +70 -0
- package/dist/esm/shared/validation/option-shape.d.ts +91 -0
- 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/esm/shared/validation/primitives.d.ts +292 -0
- 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/esm/store/actions/reconcile-vector-index.d.ts +38 -0
- 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/esm/store/internal/rows.d.ts +359 -0
- 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/esm/store/store.d.ts +329 -0
- 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 +68 -46
- package/dist/checkpointer/actions/delete-thread.d.ts +0 -10
- package/dist/checkpointer/actions/delete-thread.js +0 -38
- package/dist/checkpointer/actions/get-tuple.d.ts +0 -11
- package/dist/checkpointer/actions/get-tuple.js +0 -25
- package/dist/checkpointer/actions/list.d.ts +0 -20
- package/dist/checkpointer/actions/list.js +0 -113
- package/dist/checkpointer/actions/put-writes.d.ts +0 -15
- package/dist/checkpointer/actions/put-writes.js +0 -62
- package/dist/checkpointer/actions/put.d.ts +0 -17
- package/dist/checkpointer/actions/put.js +0 -73
- package/dist/checkpointer/internal/assemble.d.ts +0 -17
- package/dist/checkpointer/internal/assemble.js +0 -38
- package/dist/checkpointer/internal/checkpoint-write-verify.d.ts +0 -24
- package/dist/checkpointer/internal/checkpoint-write-verify.js +0 -67
- package/dist/checkpointer/internal/configurable.d.ts +0 -12
- package/dist/checkpointer/internal/configurable.js +0 -24
- package/dist/checkpointer/internal/fetch.d.ts +0 -19
- package/dist/checkpointer/internal/fetch.js +0 -88
- package/dist/checkpointer/internal/filter-match.d.ts +0 -13
- package/dist/checkpointer/internal/filter-match.js +0 -15
- package/dist/checkpointer/internal/item-reader.d.ts +0 -66
- package/dist/checkpointer/internal/item-reader.js +0 -113
- package/dist/checkpointer/internal/item-writer.d.ts +0 -35
- package/dist/checkpointer/internal/item-writer.js +0 -107
- package/dist/checkpointer/internal/keys.d.ts +0 -41
- package/dist/checkpointer/internal/keys.js +0 -117
- package/dist/checkpointer/internal/list-scope.d.ts +0 -61
- package/dist/checkpointer/internal/list-scope.js +0 -108
- package/dist/checkpointer/internal/pending-sends.d.ts +0 -13
- package/dist/checkpointer/internal/pending-sends.js +0 -29
- package/dist/checkpointer/internal/query.d.ts +0 -21
- package/dist/checkpointer/internal/query.js +0 -42
- package/dist/checkpointer/internal/regular-write.d.ts +0 -28
- package/dist/checkpointer/internal/regular-write.js +0 -66
- package/dist/checkpointer/internal/setup.d.ts +0 -33
- package/dist/checkpointer/internal/setup.js +0 -38
- package/dist/checkpointer/internal/special-write-cas.d.ts +0 -29
- package/dist/checkpointer/internal/special-write-cas.js +0 -104
- package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -23
- package/dist/checkpointer/internal/special-write-cleanup.js +0 -50
- package/dist/checkpointer/internal/special-write-verify.d.ts +0 -53
- package/dist/checkpointer/internal/special-write-verify.js +0 -80
- package/dist/checkpointer/internal/stored-channels.d.ts +0 -31
- package/dist/checkpointer/internal/stored-channels.js +0 -70
- package/dist/checkpointer/internal/validation.d.ts +0 -18
- package/dist/checkpointer/internal/validation.js +0 -40
- package/dist/checkpointer/internal/write-guard.d.ts +0 -20
- package/dist/checkpointer/internal/write-guard.js +0 -48
- package/dist/checkpointer/internal/write-index.d.ts +0 -36
- package/dist/checkpointer/internal/write-index.js +0 -41
- package/dist/checkpointer/saver.d.ts +0 -70
- package/dist/checkpointer/saver.js +0 -105
- package/dist/checkpointer/types.d.ts +0 -58
- package/dist/factory/factory.d.ts +0 -40
- package/dist/factory/factory.js +0 -87
- package/dist/history/actions/add-messages.d.ts +0 -15
- package/dist/history/actions/add-messages.js +0 -77
- package/dist/history/actions/clear.d.ts +0 -10
- package/dist/history/actions/clear.js +0 -34
- package/dist/history/actions/get-messages.d.ts +0 -17
- package/dist/history/actions/get-messages.js +0 -79
- package/dist/history/actions/list-sessions.d.ts +0 -13
- package/dist/history/actions/list-sessions.js +0 -53
- package/dist/history/actions/reconcile-count.d.ts +0 -12
- package/dist/history/actions/reconcile-count.js +0 -64
- package/dist/history/chat-message-history.d.ts +0 -73
- package/dist/history/chat-message-history.js +0 -111
- package/dist/history/internal/append-saga.d.ts +0 -25
- package/dist/history/internal/append-saga.js +0 -79
- package/dist/history/internal/compensation.d.ts +0 -25
- package/dist/history/internal/compensation.js +0 -92
- package/dist/history/internal/item-mapper.d.ts +0 -9
- package/dist/history/internal/item-mapper.js +0 -27
- package/dist/history/internal/keys.d.ts +0 -16
- package/dist/history/internal/keys.js +0 -48
- package/dist/history/internal/message-chunker.d.ts +0 -13
- package/dist/history/internal/message-chunker.js +0 -67
- package/dist/history/internal/message-transaction.d.ts +0 -25
- package/dist/history/internal/message-transaction.js +0 -61
- package/dist/history/internal/message-window.d.ts +0 -17
- package/dist/history/internal/message-window.js +0 -49
- package/dist/history/internal/query.d.ts +0 -23
- package/dist/history/internal/query.js +0 -39
- package/dist/history/internal/session-count.d.ts +0 -47
- package/dist/history/internal/session-count.js +0 -115
- package/dist/history/internal/session-title.d.ts +0 -19
- package/dist/history/internal/session-title.js +0 -43
- package/dist/history/internal/session-update.d.ts +0 -27
- package/dist/history/internal/session-update.js +0 -69
- package/dist/history/internal/setup.d.ts +0 -31
- package/dist/history/internal/setup.js +0 -43
- package/dist/history/internal/title-generator.d.ts +0 -12
- package/dist/history/internal/title-generator.js +0 -41
- package/dist/history/internal/ttl-anchor.d.ts +0 -24
- package/dist/history/internal/ttl-anchor.js +0 -38
- package/dist/history/internal/validation.d.ts +0 -25
- package/dist/history/internal/validation.js +0 -53
- package/dist/history/session-adapter.d.ts +0 -29
- package/dist/history/session-adapter.js +0 -35
- package/dist/history/types.d.ts +0 -69
- package/dist/index.d.ts +0 -29
- package/dist/index.js +0 -32
- package/dist/shared/clock.d.ts +0 -8
- package/dist/shared/clock.js +0 -16
- package/dist/shared/codec/codec.d.ts +0 -53
- package/dist/shared/codec/codec.js +0 -66
- package/dist/shared/codec/compression.d.ts +0 -24
- package/dist/shared/codec/compression.js +0 -48
- package/dist/shared/codec/descriptor-keys.d.ts +0 -12
- package/dist/shared/codec/descriptor-keys.js +0 -14
- package/dist/shared/codec/encode.d.ts +0 -13
- package/dist/shared/codec/encode.js +0 -43
- package/dist/shared/codec/json-serde.d.ts +0 -7
- package/dist/shared/codec/json-serde.js +0 -17
- package/dist/shared/codec/payload-loss.d.ts +0 -12
- package/dist/shared/codec/payload-loss.js +0 -38
- package/dist/shared/codec/s3/adapter-config.d.ts +0 -13
- package/dist/shared/codec/s3/adapter-config.js +0 -22
- package/dist/shared/codec/s3/bounded-body.d.ts +0 -14
- package/dist/shared/codec/s3/bounded-body.js +0 -47
- package/dist/shared/codec/s3/client.d.ts +0 -18
- package/dist/shared/codec/s3/client.js +0 -46
- package/dist/shared/codec/s3/config.d.ts +0 -51
- package/dist/shared/codec/s3/config.js +0 -58
- package/dist/shared/codec/s3/delete.d.ts +0 -7
- package/dist/shared/codec/s3/delete.js +0 -28
- package/dist/shared/codec/s3/key-scope.d.ts +0 -23
- package/dist/shared/codec/s3/key-scope.js +0 -44
- package/dist/shared/codec/s3/lifecycle.d.ts +0 -14
- package/dist/shared/codec/s3/lifecycle.js +0 -63
- package/dist/shared/codec/s3/offloader.d.ts +0 -44
- package/dist/shared/codec/s3/offloader.js +0 -118
- package/dist/shared/codec/s3/orphans.d.ts +0 -23
- package/dist/shared/codec/s3/orphans.js +0 -71
- package/dist/shared/codec/s3/read-write.d.ts +0 -18
- package/dist/shared/codec/s3/read-write.js +0 -51
- package/dist/shared/codec/s3/retry.d.ts +0 -5
- package/dist/shared/codec/s3/retry.js +0 -22
- package/dist/shared/concurrency.d.ts +0 -6
- package/dist/shared/constants.d.ts +0 -112
- package/dist/shared/constants.js +0 -115
- package/dist/shared/dynamodb/abort.d.ts +0 -9
- package/dist/shared/dynamodb/abort.js +0 -27
- package/dist/shared/dynamodb/backoff.d.ts +0 -15
- package/dist/shared/dynamodb/backoff.js +0 -48
- package/dist/shared/dynamodb/batch-write.d.ts +0 -22
- package/dist/shared/dynamodb/batch-write.js +0 -53
- package/dist/shared/dynamodb/cancellation.d.ts +0 -6
- package/dist/shared/dynamodb/cancellation.js +0 -7
- package/dist/shared/dynamodb/client.d.ts +0 -28
- package/dist/shared/dynamodb/conditional-put.d.ts +0 -67
- package/dist/shared/dynamodb/conditional-put.js +0 -76
- package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -21
- package/dist/shared/dynamodb/drain-unprocessed.js +0 -43
- package/dist/shared/dynamodb/expiry.d.ts +0 -16
- package/dist/shared/dynamodb/expiry.js +0 -29
- package/dist/shared/dynamodb/paginate-core.d.ts +0 -24
- package/dist/shared/dynamodb/paginate-core.js +0 -82
- package/dist/shared/dynamodb/paginate.d.ts +0 -14
- package/dist/shared/dynamodb/paginate.js +0 -19
- package/dist/shared/dynamodb/partition-delete.d.ts +0 -39
- package/dist/shared/dynamodb/partition-delete.js +0 -71
- package/dist/shared/dynamodb/retry-classifier.d.ts +0 -17
- package/dist/shared/dynamodb/retry-classifier.js +0 -118
- package/dist/shared/dynamodb/retry-policy.d.ts +0 -26
- package/dist/shared/dynamodb/retry-policy.js +0 -22
- package/dist/shared/dynamodb/retry.d.ts +0 -31
- package/dist/shared/dynamodb/retry.js +0 -57
- package/dist/shared/dynamodb/scan.d.ts +0 -14
- package/dist/shared/dynamodb/scan.js +0 -19
- package/dist/shared/dynamodb/types.d.ts +0 -23
- package/dist/shared/errors/base-error.d.ts +0 -30
- package/dist/shared/errors/base-error.js +0 -27
- package/dist/shared/errors/boundary.d.ts +0 -18
- package/dist/shared/errors/boundary.js +0 -46
- package/dist/shared/errors/error-code.d.ts +0 -13
- package/dist/shared/errors/errors.d.ts +0 -68
- package/dist/shared/errors/errors.js +0 -114
- package/dist/shared/errors/upstream-error.d.ts +0 -16
- package/dist/shared/errors/upstream-error.js +0 -27
- package/dist/shared/errors/wrap-error.d.ts +0 -7
- package/dist/shared/errors/wrap-error.js +0 -15
- package/dist/shared/logging/logger.d.ts +0 -18
- package/dist/shared/logging/logger.js +0 -15
- package/dist/shared/logging/redaction-walk.d.ts +0 -23
- package/dist/shared/logging/redaction-walk.js +0 -112
- package/dist/shared/logging/redaction.d.ts +0 -39
- package/dist/shared/logging/redaction.js +0 -75
- package/dist/shared/logging/secret-patterns.d.ts +0 -92
- package/dist/shared/logging/secret-patterns.js +0 -133
- package/dist/shared/options.d.ts +0 -37
- package/dist/shared/ulid.d.ts +0 -23
- package/dist/shared/validation/options.d.ts +0 -8
- package/dist/shared/validation/options.js +0 -90
- package/dist/shared/validation/primitives.d.ts +0 -29
- package/dist/shared/validation/primitives.js +0 -82
- package/dist/shared/validation/ttl.d.ts +0 -28
- package/dist/shared/validation/ttl.js +0 -52
- package/dist/store/actions/get.d.ts +0 -13
- package/dist/store/actions/get.js +0 -73
- package/dist/store/actions/list-namespaces.d.ts +0 -8
- package/dist/store/actions/list-namespaces.js +0 -59
- package/dist/store/actions/put.d.ts +0 -10
- package/dist/store/actions/put.js +0 -96
- package/dist/store/actions/reconcile-vector-index.d.ts +0 -18
- package/dist/store/actions/reconcile-vector-index.js +0 -26
- package/dist/store/actions/search.d.ts +0 -9
- package/dist/store/actions/search.js +0 -34
- package/dist/store/internal/backend-search.d.ts +0 -4
- package/dist/store/internal/backend-search.js +0 -74
- package/dist/store/internal/batch-plan.d.ts +0 -11
- package/dist/store/internal/batch-plan.js +0 -52
- package/dist/store/internal/candidates.d.ts +0 -23
- package/dist/store/internal/candidates.js +0 -94
- package/dist/store/internal/filter.d.ts +0 -9
- package/dist/store/internal/filter.js +0 -85
- package/dist/store/internal/index-reconcile.d.ts +0 -21
- package/dist/store/internal/index-reconcile.js +0 -118
- package/dist/store/internal/index-sync.d.ts +0 -10
- package/dist/store/internal/index-sync.js +0 -25
- package/dist/store/internal/item-mapper.d.ts +0 -27
- package/dist/store/internal/item-mapper.js +0 -61
- package/dist/store/internal/keys.d.ts +0 -17
- package/dist/store/internal/keys.js +0 -41
- package/dist/store/internal/namespace-match.d.ts +0 -11
- package/dist/store/internal/namespace-match.js +0 -40
- package/dist/store/internal/option-validation.d.ts +0 -13
- package/dist/store/internal/option-validation.js +0 -77
- package/dist/store/internal/overwrite-swap.d.ts +0 -32
- package/dist/store/internal/overwrite-swap.js +0 -68
- package/dist/store/internal/persist.d.ts +0 -28
- package/dist/store/internal/persist.js +0 -64
- package/dist/store/internal/query.d.ts +0 -11
- package/dist/store/internal/query.js +0 -48
- package/dist/store/internal/ranker.d.ts +0 -18
- package/dist/store/internal/ranker.js +0 -39
- package/dist/store/internal/read-existing.d.ts +0 -23
- package/dist/store/internal/read-existing.js +0 -41
- package/dist/store/internal/score-direction.d.ts +0 -31
- package/dist/store/internal/score-direction.js +0 -38
- package/dist/store/internal/search-filter.d.ts +0 -3
- package/dist/store/internal/search-filter.js +0 -10
- package/dist/store/internal/semantic-search.d.ts +0 -34
- package/dist/store/internal/semantic-search.js +0 -87
- package/dist/store/internal/setup.d.ts +0 -36
- package/dist/store/internal/setup.js +0 -40
- package/dist/store/internal/text-path.d.ts +0 -17
- package/dist/store/internal/validation.d.ts +0 -18
- package/dist/store/internal/validation.js +0 -51
- package/dist/store/internal/write-verify.d.ts +0 -42
- package/dist/store/internal/write-verify.js +0 -71
- package/dist/store/store.d.ts +0 -61
- package/dist/store/store.js +0 -107
- package/dist/store/types.d.ts +0 -50
- package/dist/store/types.js +0 -2
- package/dist/store/vector-backend.d.ts +0 -43
- package/dist/store/vector-backend.js +0 -2
- /package/dist/{checkpointer → cjs/checkpointer}/types.js +0 -0
- /package/dist/{factory → cjs/factory}/types.js +0 -0
- /package/dist/{history → cjs/history}/types.js +0 -0
- /package/dist/{shared → cjs/shared}/options.js +0 -0
- /package/dist/{shared/dynamodb → cjs/store}/types.js +0 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides how a cancelled transaction says why it failed.
|
|
3
|
+
*
|
|
4
|
+
* A `TransactionCanceledException` carries one raw reason per item, in the
|
|
5
|
+
* order the items were sent, under codes that are not the exception names the
|
|
6
|
+
* same failures carry outside a transaction. Which reason is a guard
|
|
7
|
+
* rejection, which are transient or throttling, and which item failed its
|
|
8
|
+
* condition are read here and nowhere else, so the retry layer, the error
|
|
9
|
+
* classifier and the writers that act on a rejection cannot read one apart.
|
|
10
|
+
*/
|
|
11
|
+
import type { AttributeValue } from '@aws-sdk/client-dynamodb';
|
|
12
|
+
/**
|
|
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.
|
|
17
|
+
*/
|
|
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
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The per-item reasons a `TransactWriteItems` cancellation carries.
|
|
35
|
+
*
|
|
36
|
+
* Accepts: `error` — any error; only a `TransactionCanceledException` carries
|
|
37
|
+
* the field.
|
|
38
|
+
*
|
|
39
|
+
* Its parameter is the weak {@link RejectionFields} rather than `Error`, which
|
|
40
|
+
* is a deliberate trade: `{}` and `{ name }` now compile where they did not,
|
|
41
|
+
* and in exchange this module stays the only place that dereferences
|
|
42
|
+
* `CancellationReasons`, so {@link conditionalCheckFailure}, the retry
|
|
43
|
+
* classifier and the two history readers cannot drift apart in how they read
|
|
44
|
+
* it. Every value that reaches it at runtime comes from a `catch`; the two
|
|
45
|
+
* call sites inside this package that pass it along rather than an `Error`
|
|
46
|
+
* ({@link conditionalCheckFailure} and `isConditionalCheckFailed`) received
|
|
47
|
+
* one from a `catch` themselves.
|
|
48
|
+
*
|
|
49
|
+
* Returns: one entry per transaction item, in the order the items were sent
|
|
50
|
+
* (https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactWriteItems.html),
|
|
51
|
+
* or `undefined` when the error carries none — which is what an older service
|
|
52
|
+
* response, a different failure, or a thrown value that is not an object at
|
|
53
|
+
* all looks like.
|
|
54
|
+
*
|
|
55
|
+
* Throws: **nothing**, for any value a `throw` can produce. Every value that
|
|
56
|
+
* reaches this came from a `catch`, and `null` is one a `catch` can bind: the
|
|
57
|
+
* property read raised a `TypeError` there, inside the classification the
|
|
58
|
+
* retry layer makes before it decides whether to try again.
|
|
59
|
+
*/
|
|
60
|
+
export declare function getCancellationReasons(error: RejectionFields): CancellationReason[] | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* The reason belonging to the one item a transaction's guard turned away.
|
|
63
|
+
*
|
|
64
|
+
* A cancellation names every item, so "was this write rejected by its
|
|
65
|
+
* condition?" is only answerable once the items that were merely along for the
|
|
66
|
+
* ride are set aside. What must remain is a single cause, and it must be the
|
|
67
|
+
* condition: a cancellation that also failed a second item for its own reason
|
|
68
|
+
* is not a guard rejection, and reporting one would hide the other failure.
|
|
69
|
+
*
|
|
70
|
+
* A reason carrying no `Code` counts as a cause here, while the retry
|
|
71
|
+
* classifier treats that same shape as transient. The disagreement is
|
|
72
|
+
* deliberate, because the two readers are conservative in opposite directions:
|
|
73
|
+
* for the classifier, an unreadable reason may be retried, which a request
|
|
74
|
+
* token makes harmless; here it must **not** be read as a clean rejection,
|
|
75
|
+
* since acting on one discards whatever else the transaction failed on. AWS
|
|
76
|
+
* populates `Code` for every item, so neither branch is reachable in practice.
|
|
77
|
+
*
|
|
78
|
+
* Accepts: `error` — any error; only a cancellation carries reasons.
|
|
79
|
+
*
|
|
80
|
+
* Returns: the sole `ConditionalCheckFailed` reason — with the rejected row
|
|
81
|
+
* attached when the item asked for it — or `undefined` for every other error,
|
|
82
|
+
* including a cancellation with no reasons, a different cause, or more than
|
|
83
|
+
* one.
|
|
84
|
+
*
|
|
85
|
+
* Throws: nothing.
|
|
86
|
+
*/
|
|
87
|
+
export declare function conditionalCheckFailure(error: RejectionFields): CancellationReason | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* Whether a cancelled transaction failed only for transient reasons.
|
|
90
|
+
*
|
|
91
|
+
* Accepts: `error` — any error; only a cancellation carries reasons.
|
|
92
|
+
*
|
|
93
|
+
* Returns: `undefined` when the error carries no reasons, so the caller's
|
|
94
|
+
* ordinary signal matching applies; otherwise whether every reason is
|
|
95
|
+
* transient. A cancellation carrying no reasons at all is not transient.
|
|
96
|
+
*
|
|
97
|
+
* Throws: nothing, for any value; see {@link getCancellationReasons}.
|
|
98
|
+
*/
|
|
99
|
+
export declare function transientCancellation(error: RejectionFields): boolean | undefined;
|
|
100
|
+
/**
|
|
101
|
+
* Whether a cancelled transaction was throttled.
|
|
102
|
+
*
|
|
103
|
+
* Accepts: `error` — any error; only a cancellation carries reasons.
|
|
104
|
+
*
|
|
105
|
+
* Returns: true when any reason is a throttling reason. Meaningful only for a
|
|
106
|
+
* cancellation {@link transientCancellation} already found transient, which is
|
|
107
|
+
* the one place it is asked.
|
|
108
|
+
*
|
|
109
|
+
* Throws: nothing, for any value.
|
|
110
|
+
*/
|
|
111
|
+
export declare function throttledCancellation(error: RejectionFields): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Whether the item at `index` of a cancelled transaction failed its condition.
|
|
114
|
+
*
|
|
115
|
+
* Accepts: `error` — any error. `index` — the item's position in the
|
|
116
|
+
* `TransactItems` the caller sent; reasons come back in that order.
|
|
117
|
+
*
|
|
118
|
+
* Returns: true when that item's reason is `ConditionalCheckFailed`, whatever
|
|
119
|
+
* the other items' reasons are; false for anything that is not such a
|
|
120
|
+
* cancellation.
|
|
121
|
+
*
|
|
122
|
+
* Throws: nothing, for any value.
|
|
123
|
+
*/
|
|
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
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides the DynamoDB client: the part of the DocumentClient this package calls,
|
|
3
|
+
* the row shapes that part speaks, and how a client this package builds bounds
|
|
4
|
+
* each request.
|
|
5
|
+
*
|
|
6
|
+
* The structural type is what lets a caller inject any DocumentClient-shaped
|
|
7
|
+
* object, and it is public; the row shapes travel through every module that
|
|
8
|
+
* reads or writes a row; the construction is the one place a request timeout
|
|
9
|
+
* and a socket timeout are set, and the one place that knows whether the
|
|
10
|
+
* adapter owns the client it holds.
|
|
11
|
+
*/
|
|
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';
|
|
15
|
+
/**
|
|
16
|
+
* How long one request attempt may take on a client this library builds
|
|
17
|
+
* (10 seconds) before the SDK's request handler destroys it and rejects with a
|
|
18
|
+
* retryable `TimeoutError`. `MAX_WRITE_LIFETIME_MS`
|
|
19
|
+
* (`src/shared/dynamodb/retry.ts`) bounds how many attempts *start*; it is
|
|
20
|
+
* checked between them, so it can refuse to begin another wait and can never
|
|
21
|
+
* shorten the attempt already in flight. Without a handler timeout — every one
|
|
22
|
+
* of them defaults to 0 — a hung socket holds that attempt open forever and
|
|
23
|
+
* the write lifetime bounds nothing.
|
|
24
|
+
*
|
|
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.
|
|
34
|
+
*/
|
|
35
|
+
export declare const DEFAULT_REQUEST_TIMEOUT_MS = 10000;
|
|
36
|
+
/**
|
|
37
|
+
* How long a socket may sit idle (5 seconds) on a client this library builds
|
|
38
|
+
* before the request handler destroys the request. Which error that surfaces
|
|
39
|
+
* as depends on when it fires: before response headers the handler's own
|
|
40
|
+
* rejection reaches the caller as a `TimeoutError`, while after them the call
|
|
41
|
+
* has already resolved and the destroy arrives through the response stream
|
|
42
|
+
* instead, as an `ECONNRESET` abort. Both are classified retryable, so either
|
|
43
|
+
* way a stalled transfer becomes a retry of this library's own. An idle timer
|
|
44
|
+
* rather than a deadline: activity in either direction resets it, so it bounds
|
|
45
|
+
* a transfer that has stalled and never one that is merely slow, and its clock
|
|
46
|
+
* starts at socket assignment rather than at request creation. What each
|
|
47
|
+
* client needs it *for* differs, so that belongs at each client's own call
|
|
48
|
+
* site rather than here.
|
|
49
|
+
*
|
|
50
|
+
* Not a tuning knob. The handler installs the socket listener immediately only
|
|
51
|
+
* below 6 000 ms; at or above that it defers registration by 3 000 ms and
|
|
52
|
+
* returns the deferral's timer id, which the handler's clear-on-resolve
|
|
53
|
+
* cancels when response headers arrive — so at 6 000 or more the field
|
|
54
|
+
* silently stops doing anything for every response that answers inside three
|
|
55
|
+
* seconds, which is the normal case. That is a fact about the request handler
|
|
56
|
+
* and about neither client. A unit assertion holds this value under that
|
|
57
|
+
* threshold so raising it fails loudly instead of disabling the only bound a
|
|
58
|
+
* stalled transfer has.
|
|
59
|
+
*/
|
|
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
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The DocumentClient an adapter will use, and whether it owns it.
|
|
74
|
+
*
|
|
75
|
+
* Accepts: `client` — an injected DocumentClient, used as-is; `clientConfig` —
|
|
76
|
+
* what one is built from when no client is injected; `createClient` — the test
|
|
77
|
+
* seam that builds it. `assertBaseAdapterOptions` rejects an injected client
|
|
78
|
+
* given alongside either of the other two, so only one branch is ever taken.
|
|
79
|
+
*
|
|
80
|
+
* Returns: the document client, the raw client behind it when this call built
|
|
81
|
+
* one, and `ownsClient` — true only then. An injected client is never
|
|
82
|
+
* destroyed by `destroy()`; it may be shared with the caller's own code and
|
|
83
|
+
* with the other adapters.
|
|
84
|
+
*
|
|
85
|
+
* Throws: whatever the SDK constructor throws for an unusable config.
|
|
86
|
+
*
|
|
87
|
+
* Guarantees: a client this call builds gets `maxAttempts: 1` unless the config
|
|
88
|
+
* overrides it, so the SDK performs no retries of its own and this library's
|
|
89
|
+
* retry layer is the only one. It also gets a default request handler that
|
|
90
|
+
* bounds how long one attempt may run, which `maxAttempts` alone does not. A
|
|
91
|
+
* `requestHandler` in `clientConfig` replaces that default whole rather than
|
|
92
|
+
* merging with it — the documented escape hatch, and equally the documented
|
|
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}.
|
|
96
|
+
*/
|
|
97
|
+
export declare function resolveDynamoDBClient(options: ResolveClientOptions): ResolvedDynamoDBClient;
|
|
98
|
+
/**
|
|
99
|
+
* Warn once when an injected client keeps the SDK's own retries.
|
|
100
|
+
*
|
|
101
|
+
* Accepts: `client` — the caller's. A client that cannot report its setting —
|
|
102
|
+
* a stub, a mock, a future SDK shape — is left alone.
|
|
103
|
+
*
|
|
104
|
+
* Returns: nothing. Deliberately not awaited by its callers: it is a warning
|
|
105
|
+
* about a caller-supplied client, not a precondition for using it, so
|
|
106
|
+
* constructing an adapter stays free of I/O.
|
|
107
|
+
*
|
|
108
|
+
* Throws: nothing, ever. The SDK's own config resolution can reject, and a
|
|
109
|
+
* rejection here would surface as an unhandled rejection from a constructor
|
|
110
|
+
* that did nothing wrong.
|
|
111
|
+
*
|
|
112
|
+
* Guarantees: the SDK's retries run inside every attempt of this library's
|
|
113
|
+
* retry layer, so the budget the constants and README describe multiplies (5 ×
|
|
114
|
+
* 3 requests per operation at the SDK default) and a throttling event turns
|
|
115
|
+
* into a retry storm. Saying so once, at construction, is the only place the
|
|
116
|
+
* caller can act on it.
|
|
117
|
+
*
|
|
118
|
+
* The one gap a deadline cannot cover. A tokened write's budget is bounded by
|
|
119
|
+
* `MAX_WRITE_LIFETIME_MS`, but that bound is checked between attempts: it can
|
|
120
|
+
* refuse to start another wait, and it cannot shorten an attempt already in
|
|
121
|
+
* flight. An injected client that retries internally turns one of this
|
|
122
|
+
* library's attempts into several of its own, so the time spent inside a
|
|
123
|
+
* single attempt stops being bounded by anything this library sets — which is
|
|
124
|
+
* why the warning says to construct it with `maxAttempts: 1`.
|
|
125
|
+
*
|
|
126
|
+
* `maxAttempts: 1` is necessary but not sufficient. The per-attempt bound
|
|
127
|
+
* holds for an injected client only if it also carries its own request
|
|
128
|
+
* timeout: a client this library builds is given one
|
|
129
|
+
* ({@link resolveDynamoDBClient}), and an injected client is used exactly as
|
|
130
|
+
* handed over, so one without a handler timeout leaves a single attempt
|
|
131
|
+
* unbounded even with the SDK's retries switched off.
|
|
132
|
+
*/
|
|
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
|
+
}
|