@farukada/aws-langgraph-dynamodb-ts 0.9.0 → 1.0.0-rc.2
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 +1720 -154
- package/dist/backfill/backfill.d.ts +168 -0
- package/dist/backfill/backfill.js +393 -0
- package/dist/checkpointer/actions/delete-thread.d.ts +47 -6
- package/dist/checkpointer/actions/delete-thread.js +58 -21
- package/dist/checkpointer/actions/get-tuple.d.ts +29 -4
- package/dist/checkpointer/actions/get-tuple.js +44 -10
- package/dist/checkpointer/actions/list.d.ts +46 -4
- package/dist/checkpointer/actions/list.js +121 -66
- package/dist/checkpointer/actions/put-writes.d.ts +41 -9
- package/dist/checkpointer/actions/put-writes.js +62 -77
- package/dist/checkpointer/actions/put.d.ts +83 -4
- package/dist/checkpointer/actions/put.js +177 -25
- package/dist/checkpointer/internal/delta-history.d.ts +112 -0
- package/dist/checkpointer/internal/delta-history.js +252 -0
- package/dist/checkpointer/internal/listing.d.ts +149 -0
- package/dist/checkpointer/internal/listing.js +245 -0
- package/dist/checkpointer/internal/parse.d.ts +262 -0
- package/dist/checkpointer/internal/parse.js +372 -0
- package/dist/checkpointer/internal/pending-writes.d.ts +275 -0
- package/dist/checkpointer/internal/pending-writes.js +588 -0
- package/dist/checkpointer/internal/read.d.ts +130 -0
- package/dist/checkpointer/internal/read.js +264 -0
- package/dist/checkpointer/internal/rows.d.ts +571 -0
- package/dist/checkpointer/internal/rows.js +834 -0
- package/dist/checkpointer/internal/setup.d.ts +42 -19
- package/dist/checkpointer/internal/setup.js +65 -29
- package/dist/checkpointer/saver.d.ts +256 -16
- package/dist/checkpointer/saver.js +275 -29
- package/dist/checkpointer/types.d.ts +39 -39
- package/dist/checkpointer/types.js +10 -1
- package/dist/factory/factory.d.ts +134 -28
- package/dist/factory/factory.js +240 -21
- package/dist/factory/types.d.ts +76 -0
- package/dist/factory/types.js +10 -0
- package/dist/history/actions/add-messages.d.ts +31 -4
- package/dist/history/actions/add-messages.js +38 -58
- package/dist/history/actions/clear.d.ts +49 -6
- package/dist/history/actions/clear.js +66 -14
- package/dist/history/actions/get-messages.d.ts +54 -6
- package/dist/history/actions/get-messages.js +126 -43
- package/dist/history/actions/list-sessions.d.ts +52 -10
- package/dist/history/actions/list-sessions.js +139 -40
- package/dist/history/actions/reconcile-count.d.ts +42 -10
- package/dist/history/actions/reconcile-count.js +45 -45
- package/dist/history/chat-message-history.d.ts +220 -33
- package/dist/history/chat-message-history.js +240 -43
- package/dist/history/internal/append.d.ts +212 -0
- package/dist/history/internal/append.js +500 -0
- package/dist/history/internal/message-read.d.ts +84 -0
- package/dist/history/internal/message-read.js +204 -0
- package/dist/history/internal/parse.d.ts +153 -0
- package/dist/history/internal/parse.js +252 -0
- package/dist/history/internal/rows.d.ts +195 -0
- package/dist/history/internal/rows.js +250 -0
- package/dist/history/internal/session.d.ts +331 -0
- package/dist/history/internal/session.js +628 -0
- package/dist/history/internal/setup.d.ts +52 -17
- package/dist/history/internal/setup.js +92 -21
- package/dist/history/session-adapter.d.ts +102 -7
- package/dist/history/session-adapter.js +103 -9
- package/dist/history/types.d.ts +80 -29
- package/dist/history/types.js +10 -1
- package/dist/index.d.ts +42 -11
- package/dist/index.js +33 -12
- package/dist/shared/adapter.d.ts +135 -0
- package/dist/shared/adapter.js +143 -0
- package/dist/shared/clock.d.ts +51 -2
- package/dist/shared/clock.js +57 -2
- package/dist/shared/codec/codec.d.ts +288 -13
- package/dist/shared/codec/codec.js +416 -19
- package/dist/shared/codec/compression.d.ts +43 -7
- package/dist/shared/codec/compression.js +53 -13
- package/dist/shared/codec/json-serde.d.ts +76 -4
- package/dist/shared/codec/json-serde.js +181 -8
- package/dist/shared/codec/s3/client-types.d.ts +53 -0
- package/dist/shared/codec/s3/client-types.js +26 -0
- package/dist/shared/codec/s3/client.d.ts +43 -10
- package/dist/shared/codec/s3/client.js +82 -9
- package/dist/shared/codec/s3/config.d.ts +242 -11
- package/dist/shared/codec/s3/config.js +293 -11
- package/dist/shared/codec/s3/lifecycle.d.ts +164 -6
- package/dist/shared/codec/s3/lifecycle.js +335 -27
- package/dist/shared/codec/s3/offloader.d.ts +393 -18
- package/dist/shared/codec/s3/offloader.js +595 -37
- package/dist/shared/concurrency.d.ts +43 -0
- package/dist/shared/concurrency.js +78 -0
- package/dist/shared/dynamodb/abort.d.ts +47 -0
- package/dist/shared/dynamodb/abort.js +59 -0
- package/dist/shared/dynamodb/batch-write.d.ts +77 -14
- package/dist/shared/dynamodb/batch-write.js +146 -27
- package/dist/shared/dynamodb/cancellation.d.ts +121 -4
- package/dist/shared/dynamodb/cancellation.js +147 -3
- package/dist/shared/dynamodb/client.d.ts +162 -8
- package/dist/shared/dynamodb/client.js +153 -5
- package/dist/shared/dynamodb/idempotent-write.d.ts +551 -0
- package/dist/shared/dynamodb/idempotent-write.js +593 -0
- package/dist/shared/dynamodb/paginate.d.ts +105 -9
- package/dist/shared/dynamodb/paginate.js +175 -7
- package/dist/shared/dynamodb/partition-delete.d.ts +185 -14
- package/dist/shared/dynamodb/partition-delete.js +314 -44
- package/dist/shared/dynamodb/recency-index.d.ts +231 -0
- package/dist/shared/dynamodb/recency-index.js +377 -0
- package/dist/shared/dynamodb/retry.d.ts +276 -8
- package/dist/shared/dynamodb/retry.js +433 -23
- package/dist/shared/dynamodb/table-schema.d.ts +190 -0
- package/dist/shared/dynamodb/table-schema.js +209 -0
- package/dist/shared/errors/base-error.d.ts +184 -10
- package/dist/shared/errors/base-error.js +160 -14
- package/dist/shared/errors/boundary.d.ts +71 -0
- package/dist/shared/errors/boundary.js +143 -0
- package/dist/shared/errors/classify.d.ts +97 -0
- package/dist/shared/errors/classify.js +257 -0
- package/dist/shared/errors/error-code.d.ts +77 -2
- package/dist/shared/errors/error-code.js +83 -1
- package/dist/shared/errors/errors.d.ts +158 -59
- package/dist/shared/errors/errors.js +219 -92
- package/dist/shared/logging/logger.d.ts +69 -3
- package/dist/shared/logging/logger.js +97 -3
- package/dist/shared/logging/redaction.d.ts +92 -8
- package/dist/shared/logging/redaction.js +273 -17
- package/dist/shared/logging/secret-patterns.d.ts +149 -19
- package/dist/shared/logging/secret-patterns.js +188 -27
- package/dist/shared/logging/truncate.d.ts +197 -0
- package/dist/shared/logging/truncate.js +231 -0
- package/dist/shared/options.d.ts +59 -7
- package/dist/shared/options.js +9 -1
- package/dist/shared/ulid.d.ts +77 -7
- package/dist/shared/ulid.js +103 -8
- package/dist/shared/validation/collaborators.d.ts +141 -0
- package/dist/shared/validation/collaborators.js +188 -0
- package/dist/shared/validation/option-shape.d.ts +89 -0
- package/dist/shared/validation/option-shape.js +113 -0
- package/dist/shared/validation/options.d.ts +145 -0
- package/dist/shared/validation/options.js +328 -0
- package/dist/shared/validation/primitives.d.ts +288 -21
- package/dist/shared/validation/primitives.js +353 -50
- package/dist/shared/validation/ttl.d.ts +66 -10
- package/dist/shared/validation/ttl.js +113 -15
- package/dist/store/actions/list-namespaces.d.ts +76 -6
- package/dist/store/actions/list-namespaces.js +166 -24
- package/dist/store/actions/put.d.ts +33 -8
- package/dist/store/actions/put.js +53 -60
- package/dist/store/actions/reconcile-vector-index.d.ts +31 -10
- package/dist/store/actions/reconcile-vector-index.js +34 -15
- package/dist/store/actions/search.d.ts +34 -6
- package/dist/store/actions/search.js +56 -51
- package/dist/store/internal/batch-plan.d.ts +26 -0
- package/dist/store/internal/batch-plan.js +109 -0
- package/dist/store/internal/filter.d.ts +36 -3
- package/dist/store/internal/filter.js +66 -15
- package/dist/store/internal/get-item.d.ts +45 -0
- package/dist/store/internal/get-item.js +115 -0
- package/dist/store/internal/item-write.d.ts +230 -0
- package/dist/store/internal/item-write.js +463 -0
- package/dist/store/internal/parse.d.ts +225 -0
- package/dist/store/internal/parse.js +350 -0
- package/dist/store/internal/rows.d.ts +355 -0
- package/dist/store/internal/rows.js +447 -0
- package/dist/store/internal/semantic-search.d.ts +161 -6
- package/dist/store/internal/semantic-search.js +360 -18
- package/dist/store/internal/setup.d.ts +77 -20
- package/dist/store/internal/setup.js +178 -47
- package/dist/store/internal/table-search.d.ts +100 -0
- package/dist/store/internal/table-search.js +213 -0
- package/dist/store/internal/vector-index.d.ts +247 -0
- package/dist/store/internal/vector-index.js +546 -0
- package/dist/store/store.d.ts +270 -17
- package/dist/store/store.js +329 -38
- package/dist/store/types.d.ts +76 -26
- package/dist/store/types.js +13 -1
- package/dist/store/vector-backend.d.ts +64 -4
- package/dist/store/vector-backend.js +15 -1
- package/package.json +58 -36
- package/dist/checkpointer/actions/delete-thread.d.ts.map +0 -1
- package/dist/checkpointer/actions/delete-thread.js.map +0 -1
- package/dist/checkpointer/actions/get-tuple.d.ts.map +0 -1
- package/dist/checkpointer/actions/get-tuple.js.map +0 -1
- package/dist/checkpointer/actions/list.d.ts.map +0 -1
- package/dist/checkpointer/actions/list.js.map +0 -1
- package/dist/checkpointer/actions/put-writes.d.ts.map +0 -1
- package/dist/checkpointer/actions/put-writes.js.map +0 -1
- package/dist/checkpointer/actions/put.d.ts.map +0 -1
- package/dist/checkpointer/actions/put.js.map +0 -1
- package/dist/checkpointer/internal/assemble.d.ts +0 -10
- package/dist/checkpointer/internal/assemble.d.ts.map +0 -1
- package/dist/checkpointer/internal/assemble.js +0 -37
- package/dist/checkpointer/internal/assemble.js.map +0 -1
- package/dist/checkpointer/internal/configurable.d.ts +0 -13
- package/dist/checkpointer/internal/configurable.d.ts.map +0 -1
- package/dist/checkpointer/internal/configurable.js +0 -23
- package/dist/checkpointer/internal/configurable.js.map +0 -1
- package/dist/checkpointer/internal/fetch.d.ts +0 -10
- package/dist/checkpointer/internal/fetch.d.ts.map +0 -1
- package/dist/checkpointer/internal/fetch.js +0 -46
- package/dist/checkpointer/internal/fetch.js.map +0 -1
- package/dist/checkpointer/internal/filter-match.d.ts +0 -12
- package/dist/checkpointer/internal/filter-match.d.ts.map +0 -1
- package/dist/checkpointer/internal/filter-match.js +0 -14
- package/dist/checkpointer/internal/filter-match.js.map +0 -1
- package/dist/checkpointer/internal/item-reader.d.ts +0 -55
- package/dist/checkpointer/internal/item-reader.d.ts.map +0 -1
- package/dist/checkpointer/internal/item-reader.js +0 -88
- package/dist/checkpointer/internal/item-reader.js.map +0 -1
- package/dist/checkpointer/internal/item-writer.d.ts +0 -26
- package/dist/checkpointer/internal/item-writer.d.ts.map +0 -1
- package/dist/checkpointer/internal/item-writer.js +0 -92
- package/dist/checkpointer/internal/item-writer.js.map +0 -1
- package/dist/checkpointer/internal/keys.d.ts +0 -31
- package/dist/checkpointer/internal/keys.d.ts.map +0 -1
- package/dist/checkpointer/internal/keys.js +0 -87
- package/dist/checkpointer/internal/keys.js.map +0 -1
- package/dist/checkpointer/internal/query.d.ts +0 -20
- package/dist/checkpointer/internal/query.d.ts.map +0 -1
- package/dist/checkpointer/internal/query.js +0 -36
- package/dist/checkpointer/internal/query.js.map +0 -1
- package/dist/checkpointer/internal/setup.d.ts.map +0 -1
- package/dist/checkpointer/internal/setup.js.map +0 -1
- package/dist/checkpointer/internal/special-write-cas.d.ts +0 -30
- package/dist/checkpointer/internal/special-write-cas.d.ts.map +0 -1
- package/dist/checkpointer/internal/special-write-cas.js +0 -104
- package/dist/checkpointer/internal/special-write-cas.js.map +0 -1
- package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -24
- package/dist/checkpointer/internal/special-write-cleanup.d.ts.map +0 -1
- package/dist/checkpointer/internal/special-write-cleanup.js +0 -47
- package/dist/checkpointer/internal/special-write-cleanup.js.map +0 -1
- package/dist/checkpointer/internal/special-write-verify.d.ts +0 -54
- package/dist/checkpointer/internal/special-write-verify.d.ts.map +0 -1
- package/dist/checkpointer/internal/special-write-verify.js +0 -65
- package/dist/checkpointer/internal/special-write-verify.js.map +0 -1
- package/dist/checkpointer/internal/validation.d.ts +0 -13
- package/dist/checkpointer/internal/validation.d.ts.map +0 -1
- package/dist/checkpointer/internal/validation.js +0 -30
- package/dist/checkpointer/internal/validation.js.map +0 -1
- package/dist/checkpointer/internal/write-guard.d.ts +0 -13
- package/dist/checkpointer/internal/write-guard.d.ts.map +0 -1
- package/dist/checkpointer/internal/write-guard.js +0 -39
- package/dist/checkpointer/internal/write-guard.js.map +0 -1
- package/dist/checkpointer/internal/write-index.d.ts +0 -37
- package/dist/checkpointer/internal/write-index.d.ts.map +0 -1
- package/dist/checkpointer/internal/write-index.js +0 -42
- package/dist/checkpointer/internal/write-index.js.map +0 -1
- package/dist/checkpointer/saver.d.ts.map +0 -1
- package/dist/checkpointer/saver.js.map +0 -1
- package/dist/checkpointer/types.d.ts.map +0 -1
- package/dist/checkpointer/types.js.map +0 -1
- package/dist/factory/factory.d.ts.map +0 -1
- package/dist/factory/factory.js.map +0 -1
- package/dist/history/actions/add-messages.d.ts.map +0 -1
- package/dist/history/actions/add-messages.js.map +0 -1
- package/dist/history/actions/clear.d.ts.map +0 -1
- package/dist/history/actions/clear.js.map +0 -1
- package/dist/history/actions/get-messages.d.ts.map +0 -1
- package/dist/history/actions/get-messages.js.map +0 -1
- package/dist/history/actions/list-sessions.d.ts.map +0 -1
- package/dist/history/actions/list-sessions.js.map +0 -1
- package/dist/history/actions/reconcile-count.d.ts.map +0 -1
- package/dist/history/actions/reconcile-count.js.map +0 -1
- package/dist/history/chat-message-history.d.ts.map +0 -1
- package/dist/history/chat-message-history.js.map +0 -1
- package/dist/history/internal/append-saga.d.ts +0 -20
- package/dist/history/internal/append-saga.d.ts.map +0 -1
- package/dist/history/internal/append-saga.js +0 -35
- package/dist/history/internal/append-saga.js.map +0 -1
- package/dist/history/internal/compensation.d.ts +0 -21
- package/dist/history/internal/compensation.d.ts.map +0 -1
- package/dist/history/internal/compensation.js +0 -84
- package/dist/history/internal/compensation.js.map +0 -1
- package/dist/history/internal/item-mapper.d.ts +0 -12
- package/dist/history/internal/item-mapper.d.ts.map +0 -1
- package/dist/history/internal/item-mapper.js +0 -33
- package/dist/history/internal/item-mapper.js.map +0 -1
- package/dist/history/internal/keys.d.ts +0 -17
- package/dist/history/internal/keys.d.ts.map +0 -1
- package/dist/history/internal/keys.js +0 -49
- package/dist/history/internal/keys.js.map +0 -1
- package/dist/history/internal/message-chunker.d.ts +0 -14
- package/dist/history/internal/message-chunker.d.ts.map +0 -1
- package/dist/history/internal/message-chunker.js +0 -68
- package/dist/history/internal/message-chunker.js.map +0 -1
- package/dist/history/internal/message-transaction.d.ts +0 -26
- package/dist/history/internal/message-transaction.d.ts.map +0 -1
- package/dist/history/internal/message-transaction.js +0 -60
- package/dist/history/internal/message-transaction.js.map +0 -1
- package/dist/history/internal/query.d.ts +0 -10
- package/dist/history/internal/query.d.ts.map +0 -1
- package/dist/history/internal/query.js +0 -31
- package/dist/history/internal/query.js.map +0 -1
- package/dist/history/internal/session-count.d.ts +0 -41
- package/dist/history/internal/session-count.d.ts.map +0 -1
- package/dist/history/internal/session-count.js +0 -109
- package/dist/history/internal/session-count.js.map +0 -1
- package/dist/history/internal/session-title.d.ts +0 -20
- package/dist/history/internal/session-title.d.ts.map +0 -1
- package/dist/history/internal/session-title.js +0 -44
- package/dist/history/internal/session-title.js.map +0 -1
- package/dist/history/internal/session-update.d.ts +0 -28
- package/dist/history/internal/session-update.d.ts.map +0 -1
- package/dist/history/internal/session-update.js +0 -70
- package/dist/history/internal/session-update.js.map +0 -1
- package/dist/history/internal/setup.d.ts.map +0 -1
- package/dist/history/internal/setup.js.map +0 -1
- package/dist/history/internal/title-generator.d.ts +0 -13
- package/dist/history/internal/title-generator.d.ts.map +0 -1
- package/dist/history/internal/title-generator.js +0 -25
- package/dist/history/internal/title-generator.js.map +0 -1
- package/dist/history/internal/ttl-anchor.d.ts +0 -25
- package/dist/history/internal/ttl-anchor.d.ts.map +0 -1
- package/dist/history/internal/ttl-anchor.js +0 -38
- package/dist/history/internal/ttl-anchor.js.map +0 -1
- package/dist/history/internal/validation.d.ts +0 -9
- package/dist/history/internal/validation.d.ts.map +0 -1
- package/dist/history/internal/validation.js +0 -16
- package/dist/history/internal/validation.js.map +0 -1
- package/dist/history/session-adapter.d.ts.map +0 -1
- package/dist/history/session-adapter.js.map +0 -1
- package/dist/history/types.d.ts.map +0 -1
- package/dist/history/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/shared/clock.d.ts.map +0 -1
- package/dist/shared/clock.js.map +0 -1
- package/dist/shared/codec/codec.d.ts.map +0 -1
- package/dist/shared/codec/codec.js.map +0 -1
- package/dist/shared/codec/compression.d.ts.map +0 -1
- package/dist/shared/codec/compression.js.map +0 -1
- package/dist/shared/codec/descriptor-keys.d.ts +0 -4
- package/dist/shared/codec/descriptor-keys.d.ts.map +0 -1
- package/dist/shared/codec/descriptor-keys.js +0 -14
- package/dist/shared/codec/descriptor-keys.js.map +0 -1
- package/dist/shared/codec/json-serde.d.ts.map +0 -1
- package/dist/shared/codec/json-serde.js.map +0 -1
- package/dist/shared/codec/s3/client.d.ts.map +0 -1
- package/dist/shared/codec/s3/client.js.map +0 -1
- package/dist/shared/codec/s3/config.d.ts.map +0 -1
- package/dist/shared/codec/s3/config.js.map +0 -1
- package/dist/shared/codec/s3/delete.d.ts +0 -8
- package/dist/shared/codec/s3/delete.d.ts.map +0 -1
- package/dist/shared/codec/s3/delete.js +0 -29
- package/dist/shared/codec/s3/delete.js.map +0 -1
- package/dist/shared/codec/s3/lifecycle.d.ts.map +0 -1
- package/dist/shared/codec/s3/lifecycle.js.map +0 -1
- package/dist/shared/codec/s3/offloader.d.ts.map +0 -1
- package/dist/shared/codec/s3/offloader.js.map +0 -1
- package/dist/shared/codec/s3/orphans.d.ts +0 -18
- package/dist/shared/codec/s3/orphans.d.ts.map +0 -1
- package/dist/shared/codec/s3/orphans.js +0 -58
- package/dist/shared/codec/s3/orphans.js.map +0 -1
- package/dist/shared/codec/s3/read-write.d.ts +0 -14
- package/dist/shared/codec/s3/read-write.d.ts.map +0 -1
- package/dist/shared/codec/s3/read-write.js +0 -43
- package/dist/shared/codec/s3/read-write.js.map +0 -1
- package/dist/shared/codec/s3/retry.d.ts +0 -5
- package/dist/shared/codec/s3/retry.d.ts.map +0 -1
- package/dist/shared/codec/s3/retry.js +0 -25
- package/dist/shared/codec/s3/retry.js.map +0 -1
- package/dist/shared/constants.d.ts +0 -64
- package/dist/shared/constants.d.ts.map +0 -1
- package/dist/shared/constants.js +0 -67
- package/dist/shared/constants.js.map +0 -1
- package/dist/shared/dynamodb/backoff.d.ts +0 -15
- package/dist/shared/dynamodb/backoff.d.ts.map +0 -1
- package/dist/shared/dynamodb/backoff.js +0 -48
- package/dist/shared/dynamodb/backoff.js.map +0 -1
- package/dist/shared/dynamodb/batch-write.d.ts.map +0 -1
- package/dist/shared/dynamodb/batch-write.js.map +0 -1
- package/dist/shared/dynamodb/cancellation.d.ts.map +0 -1
- package/dist/shared/dynamodb/cancellation.js.map +0 -1
- package/dist/shared/dynamodb/client.d.ts.map +0 -1
- package/dist/shared/dynamodb/client.js.map +0 -1
- package/dist/shared/dynamodb/conditional-put.d.ts +0 -51
- package/dist/shared/dynamodb/conditional-put.d.ts.map +0 -1
- package/dist/shared/dynamodb/conditional-put.js +0 -59
- package/dist/shared/dynamodb/conditional-put.js.map +0 -1
- package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -19
- package/dist/shared/dynamodb/drain-unprocessed.d.ts.map +0 -1
- package/dist/shared/dynamodb/drain-unprocessed.js +0 -44
- package/dist/shared/dynamodb/drain-unprocessed.js.map +0 -1
- package/dist/shared/dynamodb/paginate-core.d.ts +0 -22
- package/dist/shared/dynamodb/paginate-core.d.ts.map +0 -1
- package/dist/shared/dynamodb/paginate-core.js +0 -52
- package/dist/shared/dynamodb/paginate-core.js.map +0 -1
- package/dist/shared/dynamodb/paginate.d.ts.map +0 -1
- package/dist/shared/dynamodb/paginate.js.map +0 -1
- package/dist/shared/dynamodb/partition-delete.d.ts.map +0 -1
- package/dist/shared/dynamodb/partition-delete.js.map +0 -1
- package/dist/shared/dynamodb/retry-classifier.d.ts +0 -9
- package/dist/shared/dynamodb/retry-classifier.d.ts.map +0 -1
- package/dist/shared/dynamodb/retry-classifier.js +0 -87
- package/dist/shared/dynamodb/retry-classifier.js.map +0 -1
- package/dist/shared/dynamodb/retry.d.ts.map +0 -1
- package/dist/shared/dynamodb/retry.js.map +0 -1
- package/dist/shared/dynamodb/scan.d.ts +0 -15
- package/dist/shared/dynamodb/scan.d.ts.map +0 -1
- package/dist/shared/dynamodb/scan.js +0 -20
- package/dist/shared/dynamodb/scan.js.map +0 -1
- package/dist/shared/dynamodb/types.d.ts +0 -24
- package/dist/shared/dynamodb/types.d.ts.map +0 -1
- package/dist/shared/dynamodb/types.js +0 -3
- package/dist/shared/dynamodb/types.js.map +0 -1
- package/dist/shared/errors/base-error.d.ts.map +0 -1
- package/dist/shared/errors/base-error.js.map +0 -1
- package/dist/shared/errors/error-code.d.ts.map +0 -1
- package/dist/shared/errors/error-code.js.map +0 -1
- package/dist/shared/errors/errors.d.ts.map +0 -1
- package/dist/shared/errors/errors.js.map +0 -1
- package/dist/shared/errors/wrap-error.d.ts +0 -16
- package/dist/shared/errors/wrap-error.d.ts.map +0 -1
- package/dist/shared/errors/wrap-error.js +0 -30
- package/dist/shared/errors/wrap-error.js.map +0 -1
- package/dist/shared/logging/logger.d.ts.map +0 -1
- package/dist/shared/logging/logger.js.map +0 -1
- package/dist/shared/logging/redaction-walk.d.ts +0 -23
- package/dist/shared/logging/redaction-walk.d.ts.map +0 -1
- package/dist/shared/logging/redaction-walk.js +0 -92
- package/dist/shared/logging/redaction-walk.js.map +0 -1
- package/dist/shared/logging/redaction.d.ts.map +0 -1
- package/dist/shared/logging/redaction.js.map +0 -1
- package/dist/shared/logging/secret-patterns.d.ts.map +0 -1
- package/dist/shared/logging/secret-patterns.js.map +0 -1
- package/dist/shared/options.d.ts.map +0 -1
- package/dist/shared/options.js.map +0 -1
- package/dist/shared/ulid.d.ts.map +0 -1
- package/dist/shared/ulid.js.map +0 -1
- package/dist/shared/validation/primitives.d.ts.map +0 -1
- package/dist/shared/validation/primitives.js.map +0 -1
- package/dist/shared/validation/ttl.d.ts.map +0 -1
- package/dist/shared/validation/ttl.js.map +0 -1
- package/dist/store/actions/get.d.ts +0 -5
- package/dist/store/actions/get.d.ts.map +0 -1
- package/dist/store/actions/get.js +0 -35
- package/dist/store/actions/get.js.map +0 -1
- package/dist/store/actions/list-namespaces.d.ts.map +0 -1
- package/dist/store/actions/list-namespaces.js.map +0 -1
- package/dist/store/actions/put.d.ts.map +0 -1
- package/dist/store/actions/put.js.map +0 -1
- package/dist/store/actions/reconcile-vector-index.d.ts.map +0 -1
- package/dist/store/actions/reconcile-vector-index.js.map +0 -1
- package/dist/store/actions/search.d.ts.map +0 -1
- package/dist/store/actions/search.js.map +0 -1
- package/dist/store/internal/backend-search.d.ts +0 -5
- package/dist/store/internal/backend-search.d.ts.map +0 -1
- package/dist/store/internal/backend-search.js +0 -68
- package/dist/store/internal/backend-search.js.map +0 -1
- package/dist/store/internal/filter.d.ts.map +0 -1
- package/dist/store/internal/filter.js.map +0 -1
- package/dist/store/internal/index-reconcile.d.ts +0 -22
- package/dist/store/internal/index-reconcile.d.ts.map +0 -1
- package/dist/store/internal/index-reconcile.js +0 -105
- package/dist/store/internal/index-reconcile.js.map +0 -1
- package/dist/store/internal/index-sync.d.ts +0 -11
- package/dist/store/internal/index-sync.d.ts.map +0 -1
- package/dist/store/internal/index-sync.js +0 -26
- package/dist/store/internal/index-sync.js.map +0 -1
- package/dist/store/internal/item-mapper.d.ts +0 -25
- package/dist/store/internal/item-mapper.d.ts.map +0 -1
- package/dist/store/internal/item-mapper.js +0 -53
- package/dist/store/internal/item-mapper.js.map +0 -1
- package/dist/store/internal/keys.d.ts +0 -18
- package/dist/store/internal/keys.d.ts.map +0 -1
- package/dist/store/internal/keys.js +0 -42
- package/dist/store/internal/keys.js.map +0 -1
- package/dist/store/internal/namespace-match.d.ts +0 -12
- package/dist/store/internal/namespace-match.d.ts.map +0 -1
- package/dist/store/internal/namespace-match.js +0 -41
- package/dist/store/internal/namespace-match.js.map +0 -1
- package/dist/store/internal/overwrite-swap.d.ts +0 -33
- package/dist/store/internal/overwrite-swap.d.ts.map +0 -1
- package/dist/store/internal/overwrite-swap.js +0 -62
- package/dist/store/internal/overwrite-swap.js.map +0 -1
- package/dist/store/internal/persist.d.ts +0 -27
- package/dist/store/internal/persist.d.ts.map +0 -1
- package/dist/store/internal/persist.js +0 -59
- package/dist/store/internal/persist.js.map +0 -1
- package/dist/store/internal/query.d.ts +0 -6
- package/dist/store/internal/query.d.ts.map +0 -1
- package/dist/store/internal/query.js +0 -32
- package/dist/store/internal/query.js.map +0 -1
- package/dist/store/internal/ranker.d.ts +0 -13
- package/dist/store/internal/ranker.d.ts.map +0 -1
- package/dist/store/internal/ranker.js +0 -31
- package/dist/store/internal/ranker.js.map +0 -1
- package/dist/store/internal/read-existing.d.ts +0 -19
- package/dist/store/internal/read-existing.d.ts.map +0 -1
- package/dist/store/internal/read-existing.js +0 -29
- package/dist/store/internal/read-existing.js.map +0 -1
- package/dist/store/internal/score-direction.d.ts +0 -32
- package/dist/store/internal/score-direction.d.ts.map +0 -1
- package/dist/store/internal/score-direction.js +0 -39
- package/dist/store/internal/score-direction.js.map +0 -1
- package/dist/store/internal/search-filter.d.ts +0 -4
- package/dist/store/internal/search-filter.d.ts.map +0 -1
- package/dist/store/internal/search-filter.js +0 -11
- package/dist/store/internal/search-filter.js.map +0 -1
- package/dist/store/internal/semantic-search.d.ts.map +0 -1
- package/dist/store/internal/semantic-search.js.map +0 -1
- package/dist/store/internal/setup.d.ts.map +0 -1
- package/dist/store/internal/setup.js.map +0 -1
- package/dist/store/internal/validation.d.ts +0 -13
- package/dist/store/internal/validation.d.ts.map +0 -1
- package/dist/store/internal/validation.js +0 -35
- package/dist/store/internal/validation.js.map +0 -1
- package/dist/store/internal/write-verify.d.ts +0 -37
- package/dist/store/internal/write-verify.d.ts.map +0 -1
- package/dist/store/internal/write-verify.js +0 -68
- package/dist/store/internal/write-verify.js.map +0 -1
- package/dist/store/store.d.ts.map +0 -1
- package/dist/store/store.js.map +0 -1
- package/dist/store/types.d.ts.map +0 -1
- package/dist/store/types.js.map +0 -1
- package/dist/store/vector-backend.d.ts.map +0 -1
- package/dist/store/vector-backend.js.map +0 -1
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hides what crosses the public boundary.
|
|
4
|
+
*
|
|
5
|
+
* Only this package's own error leaves a public method (record 13): an error of
|
|
6
|
+
* its own passes through with the operation named, and anything else — an SDK
|
|
7
|
+
* failure, a caller's thrown value — is classified and wrapped with its cause
|
|
8
|
+
* attached and its text redacted.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.toPublicError = toPublicError;
|
|
12
|
+
exports.guardPublic = guardPublic;
|
|
13
|
+
exports.guardPublicIterable = guardPublicIterable;
|
|
14
|
+
exports.wrapForeignError = wrapForeignError;
|
|
15
|
+
const secret_patterns_1 = require("../logging/secret-patterns");
|
|
16
|
+
const truncate_1 = require("../logging/truncate");
|
|
17
|
+
const base_error_1 = require("./base-error");
|
|
18
|
+
const classify_1 = require("./classify");
|
|
19
|
+
const error_code_1 = require("./error-code");
|
|
20
|
+
/**
|
|
21
|
+
* Normalise anything escaping a public method into the library's error model.
|
|
22
|
+
*
|
|
23
|
+
* Accepts: anything a `catch` produced — an `Error`, or a value that is not one
|
|
24
|
+
* (`toError` settles that first).
|
|
25
|
+
*
|
|
26
|
+
* Returns: a branded library error unchanged, since its code was assigned
|
|
27
|
+
* closer to the failure and wins; anything else wrapped by
|
|
28
|
+
* {@link wrapForeignError}, with the code the classifier assigns.
|
|
29
|
+
*
|
|
30
|
+
* Throws: nothing. It runs inside a `catch`, where throwing would discard the
|
|
31
|
+
* failure being reported and replace it with its own.
|
|
32
|
+
*/
|
|
33
|
+
function toPublicError(error, operation) {
|
|
34
|
+
const normalized = (0, base_error_1.toError)(error);
|
|
35
|
+
return (0, base_error_1.isDynamoDBLangGraphError)(normalized)
|
|
36
|
+
? normalized
|
|
37
|
+
: wrapForeignError(normalized, operation);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Run a public operation so that every rejection is a library error.
|
|
41
|
+
*
|
|
42
|
+
* Accepts: `operation` — the public method's name, which the wrapped error
|
|
43
|
+
* carries. `fn` — the work.
|
|
44
|
+
*
|
|
45
|
+
* Returns: whatever `fn` resolves to, untouched.
|
|
46
|
+
*
|
|
47
|
+
* Throws: a library error, always. Applied once, at each adapter class method,
|
|
48
|
+
* so internal code can keep rethrowing SDK errors verbatim — the retry
|
|
49
|
+
* classifier depends on their shape, and wrapping them early would blind it.
|
|
50
|
+
*/
|
|
51
|
+
async function guardPublic(operation, fn) {
|
|
52
|
+
try {
|
|
53
|
+
return await fn();
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
throw toPublicError(error, operation);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The same guard for a streaming result.
|
|
61
|
+
*
|
|
62
|
+
* Accepts: `operation` — the public method's name. `source` — the generator to
|
|
63
|
+
* relay.
|
|
64
|
+
*
|
|
65
|
+
* Returns: a generator yielding the source's items untouched. A consumer that
|
|
66
|
+
* stops early still closes the source, so an abandoned listing stops reading
|
|
67
|
+
* rather than paging on in the background.
|
|
68
|
+
*
|
|
69
|
+
* Throws: a library error, always — including for a failure raised
|
|
70
|
+
* mid-iteration, which is the case a `try` around the loop body would miss.
|
|
71
|
+
*/
|
|
72
|
+
async function* guardPublicIterable(operation, source) {
|
|
73
|
+
try {
|
|
74
|
+
for await (const item of source)
|
|
75
|
+
yield item;
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
throw toPublicError(error, operation);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** How far {@link classifiableCause} walks a cause chain before giving up. */
|
|
82
|
+
const MAX_CAUSE_DEPTH = 32;
|
|
83
|
+
/**
|
|
84
|
+
* The node in `error`'s own cause chain — `error` itself, then its `cause`,
|
|
85
|
+
* then that error's own `cause`, and so on — that {@link classifyAwsError}
|
|
86
|
+
* does not answer `UNEXPECTED_ERROR` for.
|
|
87
|
+
*
|
|
88
|
+
* Accepts: `error` — the outermost foreign failure, already normalised by
|
|
89
|
+
* {@link toError}.
|
|
90
|
+
*
|
|
91
|
+
* Returns: the first node the classifier places under an AWS or network code,
|
|
92
|
+
* so a caller's own error wrapping a modeled SDK exception, or an SDK error
|
|
93
|
+
* whose own `cause` is a raw transport failure, still classifies on the
|
|
94
|
+
* AWS/network failure underneath rather than losing it one level up — the
|
|
95
|
+
* same failure the retry layer's cause-chain walk (`isRetryableError` in
|
|
96
|
+
* `shared/dynamodb/retry.ts`) already sees. `error` itself when
|
|
97
|
+
* nothing in its chain classifies either. The walk gives up after
|
|
98
|
+
* {@link MAX_CAUSE_DEPTH} nodes, and a cycle in the chain stops it rather than
|
|
99
|
+
* looping, exactly as that other walk does.
|
|
100
|
+
*
|
|
101
|
+
* Throws: nothing, for any value {@link toError} can produce.
|
|
102
|
+
*/
|
|
103
|
+
function classifiableCause(error) {
|
|
104
|
+
const seen = new WeakSet();
|
|
105
|
+
let node = error;
|
|
106
|
+
for (let depth = 0; depth <= MAX_CAUSE_DEPTH; depth += 1) {
|
|
107
|
+
if ((0, classify_1.classifyAwsError)(node) !== error_code_1.ErrorCode.UNEXPECTED_ERROR)
|
|
108
|
+
return node;
|
|
109
|
+
if (typeof node !== 'object' || node === null || seen.has(node))
|
|
110
|
+
break;
|
|
111
|
+
seen.add(node);
|
|
112
|
+
const next = node.cause;
|
|
113
|
+
if (next === undefined)
|
|
114
|
+
break;
|
|
115
|
+
node = next;
|
|
116
|
+
}
|
|
117
|
+
return error;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* A failure from below this library, as one of its errors.
|
|
121
|
+
*
|
|
122
|
+
* Accepts: `cause` — whatever a `catch` bound: an AWS SDK error, a transport
|
|
123
|
+
* error, or what a `VectorBackend`, `Embeddings`, `serde` or `MultiSessionHistory`
|
|
124
|
+
* threw. `operation` — the public method it surfaced through.
|
|
125
|
+
*
|
|
126
|
+
* Returns: an error whose code is {@link classifyAwsError}'s answer for
|
|
127
|
+
* {@link classifiableCause} of the normalised `cause` — so an AWS or network
|
|
128
|
+
* failure found down the cause chain still earns its own code rather than
|
|
129
|
+
* `UNEXPECTED_ERROR`. Its context names `operation` and — for whichever node
|
|
130
|
+
* was classified — `awsErrorName`, `requestId` and `httpStatusCode`. Its
|
|
131
|
+
* `cause` is the original, normalised through {@link toError}, kept whole
|
|
132
|
+
* regardless of which node down the chain supplied the code. The message
|
|
133
|
+
* quotes the cause's own name cut at the log cap and its own text redacted
|
|
134
|
+
* and cut at the relay cap, because `err.message` reaches applications that
|
|
135
|
+
* print it without a redacting logger.
|
|
136
|
+
*
|
|
137
|
+
* Throws: nothing, for any value.
|
|
138
|
+
*/
|
|
139
|
+
function wrapForeignError(cause, operation) {
|
|
140
|
+
const below = (0, base_error_1.toError)(cause);
|
|
141
|
+
const classifiable = classifiableCause(below);
|
|
142
|
+
return new base_error_1.DynamoDBLangGraphError(`${operation}: ${(0, truncate_1.truncateForLog)(below.name)}: ${(0, secret_patterns_1.redactedMessage)(below)}`, (0, classify_1.classifyAwsError)(classifiable), { operation, ...(0, classify_1.awsDiagnostics)(classifiable) }, below);
|
|
143
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides which AWS failures are the same failure.
|
|
3
|
+
*
|
|
4
|
+
* An SDK error arrives as a name, an HTTP status, a Node network `code` or —
|
|
5
|
+
* for a cancelled transaction — a list of per-item reasons, and several of
|
|
6
|
+
* those arrivals mean one thing to a caller deciding what to do. Their mapping
|
|
7
|
+
* to one `ErrorCode`, and the retry layer's default list of transient names,
|
|
8
|
+
* come from one table here (record 19), so no call site compares an AWS
|
|
9
|
+
* exception name of its own.
|
|
10
|
+
*/
|
|
11
|
+
import type { ErrorContext } from './base-error';
|
|
12
|
+
import { ErrorCode } from './error-code';
|
|
13
|
+
/**
|
|
14
|
+
* The Node.js system error codes the SDK's own retry strategy treats as
|
|
15
|
+
* transient regardless of name (`@smithy/core` retry `NODEJS_TIMEOUT_ERROR_CODES`
|
|
16
|
+
* and `NODEJS_NETWORK_ERROR_CODES`). Matched on the error's own `code`.
|
|
17
|
+
*/
|
|
18
|
+
export declare const TRANSIENT_NETWORK_ERROR_CODES: readonly string[];
|
|
19
|
+
/**
|
|
20
|
+
* HTTP statuses the SDK retries regardless of name: throttling (429) and the
|
|
21
|
+
* transient server statuses (`@smithy/core` retry `TRANSIENT_ERROR_STATUS_CODES`).
|
|
22
|
+
* They classify an error the SDK could not map to a modeled exception, which
|
|
23
|
+
* arrives as `name: 'Unknown'` with only its status.
|
|
24
|
+
*/
|
|
25
|
+
export declare const TRANSIENT_HTTP_STATUSES: readonly number[];
|
|
26
|
+
/**
|
|
27
|
+
* AWS error name to code. Each name is declared by the installed
|
|
28
|
+
* `@aws-sdk/client-dynamodb` or `@aws-sdk/client-s3`, or documented on a page
|
|
29
|
+
* `test/static/aws-error-names.test.ts` cites; that test fails on any other.
|
|
30
|
+
*/
|
|
31
|
+
export declare const AWS_ERROR_CODES: Readonly<Record<string, ErrorCode>>;
|
|
32
|
+
/**
|
|
33
|
+
* The retry layer's default tokens: every name {@link AWS_ERROR_CODES} maps to
|
|
34
|
+
* a retryable code, and the network codes. Derived rather than listed, so the
|
|
35
|
+
* retry layer and the code a caller sees share one list of transient names.
|
|
36
|
+
* They differ at two edges: the retry layer also retries on the SDK's
|
|
37
|
+
* `$retryable` trait, which {@link classifyAwsError} does not read, and it
|
|
38
|
+
* walks the cause chain matching `errno` and `syscall` too, where the
|
|
39
|
+
* classifier reads one error's `name`, `code` and status.
|
|
40
|
+
*/
|
|
41
|
+
export declare const DEFAULT_RETRYABLE_ERRORS: readonly string[];
|
|
42
|
+
/**
|
|
43
|
+
* The code a failure that is not one of this library's own belongs to.
|
|
44
|
+
*
|
|
45
|
+
* Accepts: anything a `catch` can bind — an SDK error, a transport error, a
|
|
46
|
+
* value from caller-supplied code, `null`, a string.
|
|
47
|
+
*
|
|
48
|
+
* Returns: a transaction cancellation's code from its reasons (a sole
|
|
49
|
+
* `ConditionalCheckFailed` cause is `CONDITION_CONFLICT`; all-transient causes
|
|
50
|
+
* are `THROTTLED` or `CONTENTION`); otherwise the table's code for the error's
|
|
51
|
+
* own `name`; otherwise `SERVICE_UNAVAILABLE` for a transient network `code`;
|
|
52
|
+
* otherwise by HTTP status — 412 `CONDITION_CONFLICT`, 429 `THROTTLED`,
|
|
53
|
+
* 500/502/503/504 `SERVICE_UNAVAILABLE`; otherwise `AWS_REQUEST_FAILED` for an
|
|
54
|
+
* AWS-shaped error and `UNEXPECTED_ERROR` for anything else. Only the error's
|
|
55
|
+
* own fields are read, never its `cause`.
|
|
56
|
+
*
|
|
57
|
+
* Throws: nothing, for any value. It runs inside `catch` blocks.
|
|
58
|
+
*/
|
|
59
|
+
export declare function classifyAwsError(error: Error): ErrorCode;
|
|
60
|
+
/**
|
|
61
|
+
* The fields an operator needs first, lifted off an AWS-shaped error.
|
|
62
|
+
*
|
|
63
|
+
* Accepts: anything a `catch` can bind.
|
|
64
|
+
*
|
|
65
|
+
* Returns: `awsErrorName`, `requestId` and `httpStatusCode`, each only when
|
|
66
|
+
* present and well-typed, for an error carrying `$metadata` or a name the table
|
|
67
|
+
* knows or that ends in `Exception`; `{}` for anything else — a bare network
|
|
68
|
+
* failure included, since it may be a caller's own connection rather than AWS's.
|
|
69
|
+
*
|
|
70
|
+
* Throws: nothing, for any value.
|
|
71
|
+
*/
|
|
72
|
+
export declare function awsDiagnostics(error: Error): Pick<ErrorContext, 'awsErrorName' | 'requestId' | 'httpStatusCode'>;
|
|
73
|
+
/**
|
|
74
|
+
* Whether an S3 read failed because the object is gone.
|
|
75
|
+
*
|
|
76
|
+
* Accepts: anything a `catch` can bind.
|
|
77
|
+
*
|
|
78
|
+
* Returns: true for `NoSuchKey` only. `NOT_FOUND` also covers a missing
|
|
79
|
+
* bucket, which is a configuration fault; reading it as a lost payload would
|
|
80
|
+
* write off data that is still there.
|
|
81
|
+
*
|
|
82
|
+
* Throws: nothing, for any value.
|
|
83
|
+
*/
|
|
84
|
+
export declare function isMissingObject(error: Error): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Whether reading a bucket's lifecycle configuration failed because the bucket
|
|
87
|
+
* has none.
|
|
88
|
+
*
|
|
89
|
+
* Accepts: anything a `catch` can bind.
|
|
90
|
+
*
|
|
91
|
+
* Returns: true for `NoSuchLifecycleConfiguration` only. `NOT_FOUND` also
|
|
92
|
+
* covers a missing bucket, table or object; reading one of those as "no rules
|
|
93
|
+
* yet" would start a rule set for a bucket that is not there.
|
|
94
|
+
*
|
|
95
|
+
* Throws: nothing, for any value.
|
|
96
|
+
*/
|
|
97
|
+
export declare function isMissingLifecycleConfiguration(error: Error): boolean;
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hides which AWS failures are the same failure.
|
|
4
|
+
*
|
|
5
|
+
* An SDK error arrives as a name, an HTTP status, a Node network `code` or —
|
|
6
|
+
* for a cancelled transaction — a list of per-item reasons, and several of
|
|
7
|
+
* those arrivals mean one thing to a caller deciding what to do. Their mapping
|
|
8
|
+
* to one `ErrorCode`, and the retry layer's default list of transient names,
|
|
9
|
+
* come from one table here (record 19), so no call site compares an AWS
|
|
10
|
+
* exception name of its own.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.DEFAULT_RETRYABLE_ERRORS = exports.AWS_ERROR_CODES = exports.TRANSIENT_HTTP_STATUSES = exports.TRANSIENT_NETWORK_ERROR_CODES = void 0;
|
|
14
|
+
exports.classifyAwsError = classifyAwsError;
|
|
15
|
+
exports.awsDiagnostics = awsDiagnostics;
|
|
16
|
+
exports.isMissingObject = isMissingObject;
|
|
17
|
+
exports.isMissingLifecycleConfiguration = isMissingLifecycleConfiguration;
|
|
18
|
+
const cancellation_1 = require("../dynamodb/cancellation");
|
|
19
|
+
const error_code_1 = require("./error-code");
|
|
20
|
+
/**
|
|
21
|
+
* The Node.js system error codes the SDK's own retry strategy treats as
|
|
22
|
+
* transient regardless of name (`@smithy/core` retry `NODEJS_TIMEOUT_ERROR_CODES`
|
|
23
|
+
* and `NODEJS_NETWORK_ERROR_CODES`). Matched on the error's own `code`.
|
|
24
|
+
*/
|
|
25
|
+
exports.TRANSIENT_NETWORK_ERROR_CODES = [
|
|
26
|
+
'ECONNRESET',
|
|
27
|
+
'ECONNREFUSED',
|
|
28
|
+
'EPIPE',
|
|
29
|
+
'ETIMEDOUT',
|
|
30
|
+
'EHOSTUNREACH',
|
|
31
|
+
'ENETUNREACH',
|
|
32
|
+
'ENOTFOUND',
|
|
33
|
+
'EAI_AGAIN',
|
|
34
|
+
];
|
|
35
|
+
/**
|
|
36
|
+
* HTTP statuses the SDK retries regardless of name: throttling (429) and the
|
|
37
|
+
* transient server statuses (`@smithy/core` retry `TRANSIENT_ERROR_STATUS_CODES`).
|
|
38
|
+
* They classify an error the SDK could not map to a modeled exception, which
|
|
39
|
+
* arrives as `name: 'Unknown'` with only its status.
|
|
40
|
+
*/
|
|
41
|
+
exports.TRANSIENT_HTTP_STATUSES = [429, 500, 502, 503, 504];
|
|
42
|
+
/** The status S3 answers a failed `If-None-Match: *` precondition with. */
|
|
43
|
+
const PRECONDITION_FAILED_STATUS = 412;
|
|
44
|
+
const TRANSACTION_CANCELLED = 'TransactionCanceledException';
|
|
45
|
+
/**
|
|
46
|
+
* AWS error name to code. Each name is declared by the installed
|
|
47
|
+
* `@aws-sdk/client-dynamodb` or `@aws-sdk/client-s3`, or documented on a page
|
|
48
|
+
* `test/static/aws-error-names.test.ts` cites; that test fails on any other.
|
|
49
|
+
*/
|
|
50
|
+
exports.AWS_ERROR_CODES = {
|
|
51
|
+
ProvisionedThroughputExceededException: error_code_1.ErrorCode.THROTTLED,
|
|
52
|
+
ThrottlingException: error_code_1.ErrorCode.THROTTLED,
|
|
53
|
+
RequestLimitExceeded: error_code_1.ErrorCode.THROTTLED,
|
|
54
|
+
SlowDown: error_code_1.ErrorCode.THROTTLED,
|
|
55
|
+
InternalServerError: error_code_1.ErrorCode.SERVICE_UNAVAILABLE,
|
|
56
|
+
InternalFailure: error_code_1.ErrorCode.SERVICE_UNAVAILABLE,
|
|
57
|
+
ServiceUnavailable: error_code_1.ErrorCode.SERVICE_UNAVAILABLE,
|
|
58
|
+
InternalError: error_code_1.ErrorCode.SERVICE_UNAVAILABLE,
|
|
59
|
+
RequestTimeout: error_code_1.ErrorCode.SERVICE_UNAVAILABLE,
|
|
60
|
+
RequestTimeoutException: error_code_1.ErrorCode.SERVICE_UNAVAILABLE,
|
|
61
|
+
TimeoutError: error_code_1.ErrorCode.SERVICE_UNAVAILABLE,
|
|
62
|
+
TransactionConflictException: error_code_1.ErrorCode.CONTENTION,
|
|
63
|
+
TransactionInProgressException: error_code_1.ErrorCode.CONTENTION,
|
|
64
|
+
ReplicatedWriteConflictException: error_code_1.ErrorCode.CONTENTION,
|
|
65
|
+
/**
|
|
66
|
+
* S3's `409` on a conditional write whose key was deleted between the check
|
|
67
|
+
* and the write; the S3 User Guide's remedy on `PutObject` is to retry the
|
|
68
|
+
* upload (*How to prevent object overwrites with conditional writes*,
|
|
69
|
+
* "Conditional write behavior").
|
|
70
|
+
*/
|
|
71
|
+
ConditionalRequestConflict: error_code_1.ErrorCode.CONTENTION,
|
|
72
|
+
AccessDeniedException: error_code_1.ErrorCode.ACCESS_DENIED,
|
|
73
|
+
AccessDenied: error_code_1.ErrorCode.ACCESS_DENIED,
|
|
74
|
+
ExpiredTokenException: error_code_1.ErrorCode.ACCESS_DENIED,
|
|
75
|
+
ExpiredToken: error_code_1.ErrorCode.ACCESS_DENIED,
|
|
76
|
+
IncompleteSignature: error_code_1.ErrorCode.ACCESS_DENIED,
|
|
77
|
+
IncompleteSignatureException: error_code_1.ErrorCode.ACCESS_DENIED,
|
|
78
|
+
InvalidAccessKeyId: error_code_1.ErrorCode.ACCESS_DENIED,
|
|
79
|
+
MissingAuthenticationTokenException: error_code_1.ErrorCode.ACCESS_DENIED,
|
|
80
|
+
NotAuthorized: error_code_1.ErrorCode.ACCESS_DENIED,
|
|
81
|
+
SignatureDoesNotMatch: error_code_1.ErrorCode.ACCESS_DENIED,
|
|
82
|
+
UnrecognizedClientException: error_code_1.ErrorCode.ACCESS_DENIED,
|
|
83
|
+
ResourceNotFoundException: error_code_1.ErrorCode.NOT_FOUND,
|
|
84
|
+
NoSuchBucket: error_code_1.ErrorCode.NOT_FOUND,
|
|
85
|
+
NoSuchKey: error_code_1.ErrorCode.NOT_FOUND,
|
|
86
|
+
NoSuchLifecycleConfiguration: error_code_1.ErrorCode.NOT_FOUND,
|
|
87
|
+
ValidationException: error_code_1.ErrorCode.AWS_REJECTED,
|
|
88
|
+
ValidationError: error_code_1.ErrorCode.AWS_REJECTED,
|
|
89
|
+
IdempotentParameterMismatchException: error_code_1.ErrorCode.AWS_REJECTED,
|
|
90
|
+
MalformedHttpRequestException: error_code_1.ErrorCode.AWS_REJECTED,
|
|
91
|
+
RequestEntityTooLargeException: error_code_1.ErrorCode.AWS_REJECTED,
|
|
92
|
+
ConditionalCheckFailedException: error_code_1.ErrorCode.CONDITION_CONFLICT,
|
|
93
|
+
PreconditionFailed: error_code_1.ErrorCode.CONDITION_CONFLICT,
|
|
94
|
+
/** An item collection past 10 GB: neither a retry nor a changed request helps; an operator must act. */
|
|
95
|
+
ItemCollectionSizeLimitExceededException: error_code_1.ErrorCode.AWS_REQUEST_FAILED,
|
|
96
|
+
/** Endpoint discovery is not used by this package, so this is reported rather than acted on. */
|
|
97
|
+
InvalidEndpointException: error_code_1.ErrorCode.AWS_REQUEST_FAILED,
|
|
98
|
+
/** Its reasons are read first; this is the answer when they settle nothing. */
|
|
99
|
+
TransactionCanceledException: error_code_1.ErrorCode.AWS_REQUEST_FAILED,
|
|
100
|
+
/**
|
|
101
|
+
* Read by name, not from the caller's signal: a collaborator — a
|
|
102
|
+
* `vectorBackend`, `index.embeddings` — rejecting with an `AbortError` from
|
|
103
|
+
* its own timeout is `ABORTED` too, even when the caller's signal never fired.
|
|
104
|
+
*/
|
|
105
|
+
AbortError: error_code_1.ErrorCode.ABORTED,
|
|
106
|
+
};
|
|
107
|
+
/** The codes a caller retries after a backoff. */
|
|
108
|
+
const RETRYABLE_CODES = [
|
|
109
|
+
error_code_1.ErrorCode.THROTTLED,
|
|
110
|
+
error_code_1.ErrorCode.SERVICE_UNAVAILABLE,
|
|
111
|
+
error_code_1.ErrorCode.CONTENTION,
|
|
112
|
+
];
|
|
113
|
+
/**
|
|
114
|
+
* The retry layer's default tokens: every name {@link AWS_ERROR_CODES} maps to
|
|
115
|
+
* a retryable code, and the network codes. Derived rather than listed, so the
|
|
116
|
+
* retry layer and the code a caller sees share one list of transient names.
|
|
117
|
+
* They differ at two edges: the retry layer also retries on the SDK's
|
|
118
|
+
* `$retryable` trait, which {@link classifyAwsError} does not read, and it
|
|
119
|
+
* walks the cause chain matching `errno` and `syscall` too, where the
|
|
120
|
+
* classifier reads one error's `name`, `code` and status.
|
|
121
|
+
*/
|
|
122
|
+
exports.DEFAULT_RETRYABLE_ERRORS = [
|
|
123
|
+
...Object.entries(exports.AWS_ERROR_CODES)
|
|
124
|
+
.filter(([, code]) => RETRYABLE_CODES.includes(code))
|
|
125
|
+
.map(([name]) => name),
|
|
126
|
+
...exports.TRANSIENT_NETWORK_ERROR_CODES,
|
|
127
|
+
];
|
|
128
|
+
/** The table's code for `name`; `undefined` for any other value, never read through the prototype. */
|
|
129
|
+
function declaredCodeOf(name) {
|
|
130
|
+
return typeof name === 'string' && Object.hasOwn(exports.AWS_ERROR_CODES, name)
|
|
131
|
+
? exports.AWS_ERROR_CODES[name]
|
|
132
|
+
: undefined;
|
|
133
|
+
}
|
|
134
|
+
/** The response's HTTP status, when the error carries well-typed `$metadata`. */
|
|
135
|
+
function statusOf(fields) {
|
|
136
|
+
const metadata = fields.$metadata;
|
|
137
|
+
return typeof metadata === 'object' &&
|
|
138
|
+
metadata !== null &&
|
|
139
|
+
typeof metadata.httpStatusCode === 'number'
|
|
140
|
+
? metadata.httpStatusCode
|
|
141
|
+
: undefined;
|
|
142
|
+
}
|
|
143
|
+
/** Whether the error carries the SDK's `$metadata`, or a name the table knows or that ends in `Exception`. */
|
|
144
|
+
function isAwsShaped(fields) {
|
|
145
|
+
if (typeof fields.$metadata === 'object' && fields.$metadata !== null)
|
|
146
|
+
return true;
|
|
147
|
+
const { name } = fields;
|
|
148
|
+
return (typeof name === 'string' && (declaredCodeOf(name) !== undefined || name.endsWith('Exception')));
|
|
149
|
+
}
|
|
150
|
+
/** The code of a cancelled transaction, read from its reasons. */
|
|
151
|
+
function cancellationCode(error) {
|
|
152
|
+
if ((0, cancellation_1.conditionalCheckFailure)(error) !== undefined)
|
|
153
|
+
return error_code_1.ErrorCode.CONDITION_CONFLICT;
|
|
154
|
+
if ((0, cancellation_1.transientCancellation)(error) === true) {
|
|
155
|
+
return (0, cancellation_1.throttledCancellation)(error) ? error_code_1.ErrorCode.THROTTLED : error_code_1.ErrorCode.CONTENTION;
|
|
156
|
+
}
|
|
157
|
+
return exports.AWS_ERROR_CODES[TRANSACTION_CANCELLED];
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* The code a failure that is not one of this library's own belongs to.
|
|
161
|
+
*
|
|
162
|
+
* Accepts: anything a `catch` can bind — an SDK error, a transport error, a
|
|
163
|
+
* value from caller-supplied code, `null`, a string.
|
|
164
|
+
*
|
|
165
|
+
* Returns: a transaction cancellation's code from its reasons (a sole
|
|
166
|
+
* `ConditionalCheckFailed` cause is `CONDITION_CONFLICT`; all-transient causes
|
|
167
|
+
* are `THROTTLED` or `CONTENTION`); otherwise the table's code for the error's
|
|
168
|
+
* own `name`; otherwise `SERVICE_UNAVAILABLE` for a transient network `code`;
|
|
169
|
+
* otherwise by HTTP status — 412 `CONDITION_CONFLICT`, 429 `THROTTLED`,
|
|
170
|
+
* 500/502/503/504 `SERVICE_UNAVAILABLE`; otherwise `AWS_REQUEST_FAILED` for an
|
|
171
|
+
* AWS-shaped error and `UNEXPECTED_ERROR` for anything else. Only the error's
|
|
172
|
+
* own fields are read, never its `cause`.
|
|
173
|
+
*
|
|
174
|
+
* Throws: nothing, for any value. It runs inside `catch` blocks.
|
|
175
|
+
*/
|
|
176
|
+
function classifyAwsError(error) {
|
|
177
|
+
if (typeof error !== 'object' || error === null)
|
|
178
|
+
return error_code_1.ErrorCode.UNEXPECTED_ERROR;
|
|
179
|
+
const fields = error;
|
|
180
|
+
if (fields.name === TRANSACTION_CANCELLED)
|
|
181
|
+
return cancellationCode(error);
|
|
182
|
+
const declared = declaredCodeOf(fields.name);
|
|
183
|
+
if (declared !== undefined)
|
|
184
|
+
return declared;
|
|
185
|
+
if (typeof fields.code === 'string' && exports.TRANSIENT_NETWORK_ERROR_CODES.includes(fields.code)) {
|
|
186
|
+
return error_code_1.ErrorCode.SERVICE_UNAVAILABLE;
|
|
187
|
+
}
|
|
188
|
+
const status = statusOf(fields);
|
|
189
|
+
if (status === PRECONDITION_FAILED_STATUS)
|
|
190
|
+
return error_code_1.ErrorCode.CONDITION_CONFLICT;
|
|
191
|
+
if (status === 429)
|
|
192
|
+
return error_code_1.ErrorCode.THROTTLED;
|
|
193
|
+
if (status !== undefined && exports.TRANSIENT_HTTP_STATUSES.includes(status)) {
|
|
194
|
+
return error_code_1.ErrorCode.SERVICE_UNAVAILABLE;
|
|
195
|
+
}
|
|
196
|
+
return isAwsShaped(fields) ? error_code_1.ErrorCode.AWS_REQUEST_FAILED : error_code_1.ErrorCode.UNEXPECTED_ERROR;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* The fields an operator needs first, lifted off an AWS-shaped error.
|
|
200
|
+
*
|
|
201
|
+
* Accepts: anything a `catch` can bind.
|
|
202
|
+
*
|
|
203
|
+
* Returns: `awsErrorName`, `requestId` and `httpStatusCode`, each only when
|
|
204
|
+
* present and well-typed, for an error carrying `$metadata` or a name the table
|
|
205
|
+
* knows or that ends in `Exception`; `{}` for anything else — a bare network
|
|
206
|
+
* failure included, since it may be a caller's own connection rather than AWS's.
|
|
207
|
+
*
|
|
208
|
+
* Throws: nothing, for any value.
|
|
209
|
+
*/
|
|
210
|
+
function awsDiagnostics(error) {
|
|
211
|
+
if (typeof error !== 'object' || error === null)
|
|
212
|
+
return {};
|
|
213
|
+
const fields = error;
|
|
214
|
+
if (!isAwsShaped(fields))
|
|
215
|
+
return {};
|
|
216
|
+
const out = {};
|
|
217
|
+
if (typeof fields.name === 'string')
|
|
218
|
+
out.awsErrorName = fields.name;
|
|
219
|
+
const status = statusOf(fields);
|
|
220
|
+
if (status !== undefined)
|
|
221
|
+
out.httpStatusCode = status;
|
|
222
|
+
const requestId = fields.$metadata?.requestId;
|
|
223
|
+
if (typeof requestId === 'string')
|
|
224
|
+
out.requestId = requestId;
|
|
225
|
+
return out;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Whether an S3 read failed because the object is gone.
|
|
229
|
+
*
|
|
230
|
+
* Accepts: anything a `catch` can bind.
|
|
231
|
+
*
|
|
232
|
+
* Returns: true for `NoSuchKey` only. `NOT_FOUND` also covers a missing
|
|
233
|
+
* bucket, which is a configuration fault; reading it as a lost payload would
|
|
234
|
+
* write off data that is still there.
|
|
235
|
+
*
|
|
236
|
+
* Throws: nothing, for any value.
|
|
237
|
+
*/
|
|
238
|
+
function isMissingObject(error) {
|
|
239
|
+
return (typeof error === 'object' && error !== null && error.name === 'NoSuchKey');
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Whether reading a bucket's lifecycle configuration failed because the bucket
|
|
243
|
+
* has none.
|
|
244
|
+
*
|
|
245
|
+
* Accepts: anything a `catch` can bind.
|
|
246
|
+
*
|
|
247
|
+
* Returns: true for `NoSuchLifecycleConfiguration` only. `NOT_FOUND` also
|
|
248
|
+
* covers a missing bucket, table or object; reading one of those as "no rules
|
|
249
|
+
* yet" would start a rule set for a bucket that is not there.
|
|
250
|
+
*
|
|
251
|
+
* Throws: nothing, for any value.
|
|
252
|
+
*/
|
|
253
|
+
function isMissingLifecycleConfiguration(error) {
|
|
254
|
+
return (typeof error === 'object' &&
|
|
255
|
+
error !== null &&
|
|
256
|
+
error.name === 'NoSuchLifecycleConfiguration');
|
|
257
|
+
}
|
|
@@ -1,13 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides which outcomes a caller can tell apart.
|
|
3
|
+
*
|
|
4
|
+
* Every error this library raises carries one of these codes, and a caller
|
|
5
|
+
* branches on the code rather than on a class, a message or an AWS name. What
|
|
6
|
+
* produces each code is decided elsewhere, so a newly seen AWS failure maps
|
|
7
|
+
* onto an existing code without touching this list, and the list is frozen so
|
|
8
|
+
* no consumer sharing it in a process can change what a comparison means.
|
|
9
|
+
*/
|
|
1
10
|
/** Stable, branchable classification for every error this library throws. */
|
|
2
11
|
export declare enum ErrorCode {
|
|
3
12
|
VALIDATION = "VALIDATION",
|
|
13
|
+
/** A row or payload written in a format version newer than this package reads. */
|
|
14
|
+
FORMAT_UNSUPPORTED = "FORMAT_UNSUPPORTED",
|
|
15
|
+
/**
|
|
16
|
+
* A checkpoint a delta channel still needs has expired, so the channel cannot
|
|
17
|
+
* be reconstructed and the read refuses rather than returning a shorter value.
|
|
18
|
+
*/
|
|
19
|
+
ANCESTOR_EXPIRED = "ANCESTOR_EXPIRED",
|
|
4
20
|
CONDITION_CONFLICT = "CONDITION_CONFLICT",
|
|
5
21
|
RETRY_EXHAUSTED = "RETRY_EXHAUSTED",
|
|
6
22
|
BATCH_WRITE_INCOMPLETE = "BATCH_WRITE_INCOMPLETE",
|
|
7
23
|
COMPRESSION_LIMIT = "COMPRESSION_LIMIT",
|
|
24
|
+
/**
|
|
25
|
+
* A stored payload's bytes do not match the form its row declares: the row
|
|
26
|
+
* says gzip and they are not, or they are not the serializer's output. The
|
|
27
|
+
* payload can never be read, so it is reported rather than retried.
|
|
28
|
+
*/
|
|
29
|
+
PAYLOAD_CORRUPT = "PAYLOAD_CORRUPT",
|
|
8
30
|
S3_OFFLOAD_FAILED = "S3_OFFLOAD_FAILED",
|
|
9
31
|
RESULT_TRUNCATED = "RESULT_TRUNCATED",
|
|
10
32
|
ABORTED = "ABORTED",
|
|
11
|
-
COMPENSATION_FAILED = "COMPENSATION_FAILED"
|
|
33
|
+
COMPENSATION_FAILED = "COMPENSATION_FAILED",
|
|
34
|
+
/**
|
|
35
|
+
* AWS throttled the request: `ProvisionedThroughputExceededException`,
|
|
36
|
+
* `ThrottlingException`, `RequestLimitExceeded`, S3's `SlowDown`, an HTTP
|
|
37
|
+
* 429, or a cancelled transaction whose causes are all transient and include
|
|
38
|
+
* a throttling reason. Back off, or raise the table's capacity or the account
|
|
39
|
+
* quota.
|
|
40
|
+
*/
|
|
41
|
+
THROTTLED = "THROTTLED",
|
|
42
|
+
/**
|
|
43
|
+
* AWS or the network failed transiently: `InternalServerError`,
|
|
44
|
+
* `InternalFailure`, `ServiceUnavailable`, S3's `InternalError`, a request
|
|
45
|
+
* timeout (`RequestTimeout`, `RequestTimeoutException`, the SDK's
|
|
46
|
+
* `TimeoutError`), an HTTP 500/502/503/504, or a reset, refused or
|
|
47
|
+
* unreachable connection. Retry after a backoff. A write that failed this way
|
|
48
|
+
* may still have been applied.
|
|
49
|
+
*/
|
|
50
|
+
SERVICE_UNAVAILABLE = "SERVICE_UNAVAILABLE",
|
|
51
|
+
/**
|
|
52
|
+
* Another request was writing the same item or object at the same moment:
|
|
53
|
+
* `TransactionConflictException`, `TransactionInProgressException`,
|
|
54
|
+
* `ReplicatedWriteConflictException`, S3's `ConditionalRequestConflict`, or a
|
|
55
|
+
* cancelled transaction whose only transient cause is a conflict. Retry; more
|
|
56
|
+
* capacity would not help.
|
|
57
|
+
*/
|
|
58
|
+
CONTENTION = "CONTENTION",
|
|
59
|
+
/**
|
|
60
|
+
* AWS refused the caller's identity or permissions: `AccessDeniedException`,
|
|
61
|
+
* S3's `AccessDenied`, an expired, unrecognised or malformed credential or
|
|
62
|
+
* signature. Fix the credentials or the IAM policy; do not retry.
|
|
63
|
+
* `context.awsErrorName` says which.
|
|
64
|
+
*/
|
|
65
|
+
ACCESS_DENIED = "ACCESS_DENIED",
|
|
66
|
+
/**
|
|
67
|
+
* The table, index, bucket or object is not there: `ResourceNotFoundException`,
|
|
68
|
+
* S3's `NoSuchBucket` or `NoSuchKey`. Not an absent item — a read of a key that
|
|
69
|
+
* holds nothing returns nothing.
|
|
70
|
+
*/
|
|
71
|
+
NOT_FOUND = "NOT_FOUND",
|
|
72
|
+
/**
|
|
73
|
+
* AWS rejected the request as malformed: `ValidationException`,
|
|
74
|
+
* AWS's `ValidationError` common error, `IdempotentParameterMismatchException`,
|
|
75
|
+
* or a request body it could not read or accept. Retrying the same request
|
|
76
|
+
* fails the same way.
|
|
77
|
+
*/
|
|
78
|
+
AWS_REJECTED = "AWS_REJECTED",
|
|
79
|
+
/** An AWS request failed and no narrower code applies; `context.awsErrorName` names it. */
|
|
80
|
+
AWS_REQUEST_FAILED = "AWS_REQUEST_FAILED",
|
|
81
|
+
/**
|
|
82
|
+
* A failure that came neither from this package's own checks nor from AWS:
|
|
83
|
+
* a `VectorBackend`, an `Embeddings` model, a `serde` or a `MultiSessionHistory`
|
|
84
|
+
* threw something of its own, or this package has a bug. The original is
|
|
85
|
+
* `cause`.
|
|
86
|
+
*/
|
|
87
|
+
UNEXPECTED_ERROR = "UNEXPECTED_ERROR"
|
|
12
88
|
}
|
|
13
|
-
//# sourceMappingURL=error-code.d.ts.map
|