@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,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides how many calls run at once, and which failure a fan-out reports.
|
|
3
|
+
*
|
|
4
|
+
* A caller maps over rows, shards or payloads and gets results in input order.
|
|
5
|
+
* The worker pool, the floor that turns a bad limit into sequential work
|
|
6
|
+
* rather than none, and the rule that the first rejection wins and stops new
|
|
7
|
+
* work are decided here, as is the default of eight in flight, so tuning it
|
|
8
|
+
* touches no reader.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Offloaded payloads decoded at once by one read (`getTuple` pending writes,
|
|
12
|
+
* `search` candidates, `getMessages`). Each offloaded row costs one S3 GET, so
|
|
13
|
+
* a serial loop scaled latency linearly with the row count; eight in flight
|
|
14
|
+
* keeps the win without bursting a bucket. Also the recency-index shards one
|
|
15
|
+
* listing queries at once when the adapter names no `readConcurrency`.
|
|
16
|
+
*/
|
|
17
|
+
export declare const DEFAULT_READ_CONCURRENCY = 8;
|
|
18
|
+
/**
|
|
19
|
+
* Map `items` through `fn` with at most `limit` calls in flight.
|
|
20
|
+
*
|
|
21
|
+
* Accepts: `items` — any length, including empty, which calls `fn` never.
|
|
22
|
+
* `limit` — calls in flight; anything that is not a whole number of at least 1
|
|
23
|
+
* degrades to sequential rather than stalling, and a value above `items.length`
|
|
24
|
+
* starts only as many workers as there are items. The floor is a *range* test
|
|
25
|
+
* rather than arithmetic on purpose: `Math.min(NaN, items.length)` is `NaN`,
|
|
26
|
+
* so a `NaN` limit asked for `Array.from({ length: NaN })` workers — none —
|
|
27
|
+
* and the call resolved to an empty array having invoked `fn` on nothing.
|
|
28
|
+
* `refillDryShards` loops while any shard is dry around exactly this call, so
|
|
29
|
+
* zero workers there was a busy-spin with no I/O and no way out; only the
|
|
30
|
+
* required `concurrency` field kept it off typed paths. `fn` — receives the
|
|
31
|
+
* item and its index.
|
|
32
|
+
*
|
|
33
|
+
* Returns: the results in **input** order, not completion order.
|
|
34
|
+
*
|
|
35
|
+
* Throws: the first rejection, whatever its value. No further item is started
|
|
36
|
+
* after it, the calls already in flight are allowed to settle, and that first
|
|
37
|
+
* error is the one thrown — a later failure never displaces it. Whether one
|
|
38
|
+
* has happened is tracked by a flag rather than by testing the value, because
|
|
39
|
+
* a rejection whose value is `undefined` is indistinguishable from no rejection
|
|
40
|
+
* at all: tested by value, it would be swallowed, and its slot in the results
|
|
41
|
+
* would stay a hole.
|
|
42
|
+
*/
|
|
43
|
+
export declare function mapWithConcurrency<T, R>(items: readonly T[], limit: number, fn: (item: T, index: number) => Promise<R>): Promise<R[]>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hides how many calls run at once, and which failure a fan-out reports.
|
|
4
|
+
*
|
|
5
|
+
* A caller maps over rows, shards or payloads and gets results in input order.
|
|
6
|
+
* The worker pool, the floor that turns a bad limit into sequential work
|
|
7
|
+
* rather than none, and the rule that the first rejection wins and stops new
|
|
8
|
+
* work are decided here, as is the default of eight in flight, so tuning it
|
|
9
|
+
* touches no reader.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DEFAULT_READ_CONCURRENCY = void 0;
|
|
13
|
+
exports.mapWithConcurrency = mapWithConcurrency;
|
|
14
|
+
/**
|
|
15
|
+
* Offloaded payloads decoded at once by one read (`getTuple` pending writes,
|
|
16
|
+
* `search` candidates, `getMessages`). Each offloaded row costs one S3 GET, so
|
|
17
|
+
* a serial loop scaled latency linearly with the row count; eight in flight
|
|
18
|
+
* keeps the win without bursting a bucket. Also the recency-index shards one
|
|
19
|
+
* listing queries at once when the adapter names no `readConcurrency`.
|
|
20
|
+
*/
|
|
21
|
+
exports.DEFAULT_READ_CONCURRENCY = 8;
|
|
22
|
+
/**
|
|
23
|
+
* Map `items` through `fn` with at most `limit` calls in flight.
|
|
24
|
+
*
|
|
25
|
+
* Accepts: `items` — any length, including empty, which calls `fn` never.
|
|
26
|
+
* `limit` — calls in flight; anything that is not a whole number of at least 1
|
|
27
|
+
* degrades to sequential rather than stalling, and a value above `items.length`
|
|
28
|
+
* starts only as many workers as there are items. The floor is a *range* test
|
|
29
|
+
* rather than arithmetic on purpose: `Math.min(NaN, items.length)` is `NaN`,
|
|
30
|
+
* so a `NaN` limit asked for `Array.from({ length: NaN })` workers — none —
|
|
31
|
+
* and the call resolved to an empty array having invoked `fn` on nothing.
|
|
32
|
+
* `refillDryShards` loops while any shard is dry around exactly this call, so
|
|
33
|
+
* zero workers there was a busy-spin with no I/O and no way out; only the
|
|
34
|
+
* required `concurrency` field kept it off typed paths. `fn` — receives the
|
|
35
|
+
* item and its index.
|
|
36
|
+
*
|
|
37
|
+
* Returns: the results in **input** order, not completion order.
|
|
38
|
+
*
|
|
39
|
+
* Throws: the first rejection, whatever its value. No further item is started
|
|
40
|
+
* after it, the calls already in flight are allowed to settle, and that first
|
|
41
|
+
* error is the one thrown — a later failure never displaces it. Whether one
|
|
42
|
+
* has happened is tracked by a flag rather than by testing the value, because
|
|
43
|
+
* a rejection whose value is `undefined` is indistinguishable from no rejection
|
|
44
|
+
* at all: tested by value, it would be swallowed, and its slot in the results
|
|
45
|
+
* would stay a hole.
|
|
46
|
+
*/
|
|
47
|
+
async function mapWithConcurrency(items, limit, fn) {
|
|
48
|
+
const results = [];
|
|
49
|
+
let next = 0;
|
|
50
|
+
let failed = false;
|
|
51
|
+
let failure;
|
|
52
|
+
const worker = async () => {
|
|
53
|
+
while (!failed && next < items.length) {
|
|
54
|
+
const index = next;
|
|
55
|
+
next += 1;
|
|
56
|
+
try {
|
|
57
|
+
results[index] = await fn(items[index], index);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
if (!failed) {
|
|
61
|
+
failed = true;
|
|
62
|
+
failure = error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const workers = Math.min(limit >= 1 ? Math.floor(limit) : 1, Math.max(items.length, 1));
|
|
68
|
+
await Promise.all(Array.from({ length: workers }, worker));
|
|
69
|
+
// `failure` is stored `Error | undefined` only because that is as far as a
|
|
70
|
+
// `catch` binding's value can be named without `unknown`, which is banned
|
|
71
|
+
// in src; the JSDoc above states the real contract — whatever `fn` rejected
|
|
72
|
+
// with, unchanged, and that can be `undefined` itself. The assertion below
|
|
73
|
+
// changes nothing at runtime; it only lets `only-throw-error` see the type
|
|
74
|
+
// this throw already had before that rule existed.
|
|
75
|
+
if (failed)
|
|
76
|
+
throw failure;
|
|
77
|
+
return results;
|
|
78
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides what an abort looks like.
|
|
3
|
+
*
|
|
4
|
+
* A signal may be aborted with this library's own `ABORTED` error, a
|
|
5
|
+
* `DOMException`, a string, any other error or nothing at all. Every one of
|
|
6
|
+
* them reaches a caller as a single `ABORTED` error that is never wrapped
|
|
7
|
+
* twice, and one test on the library's brand and that code is what tells a
|
|
8
|
+
* cancellation from a failure, so no call site inspects a reason's shape.
|
|
9
|
+
*/
|
|
10
|
+
import { DynamoDBLangGraphError } from '../errors/base-error';
|
|
11
|
+
import { ErrorCode } from '../errors/error-code';
|
|
12
|
+
/**
|
|
13
|
+
* Whether `error` is a cancellation rather than a failure.
|
|
14
|
+
*
|
|
15
|
+
* Accepts: `error` — any error, from any layer, and equally any other value a
|
|
16
|
+
* `throw` can produce, since a `catch` is where this is called; `undefined`
|
|
17
|
+
* too, the `reason` a signal aborted without one can carry.
|
|
18
|
+
*
|
|
19
|
+
* Returns: whether it carries this library's brand and `code: 'ABORTED'`,
|
|
20
|
+
* which is the contract every cancellable method documents and the only thing
|
|
21
|
+
* a caller branches on, narrowed so it can be handed on as the abort it is.
|
|
22
|
+
* An unbranded object that merely carries `code: 'ABORTED'` is not an abort,
|
|
23
|
+
* because an error a wrapper caught that only looks like an abort must still
|
|
24
|
+
* be rebranded rather than re-thrown as it is.
|
|
25
|
+
*
|
|
26
|
+
* Throws: **nothing**, for any value. A value that cannot carry a property is
|
|
27
|
+
* not a cancellation, which is the answer an uncoded `Error` gets too.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isAbortError(error: Error | undefined): error is DynamoDBLangGraphError<ErrorCode.ABORTED>;
|
|
30
|
+
/**
|
|
31
|
+
* This library's error for an aborted `signal`.
|
|
32
|
+
*
|
|
33
|
+
* Accepts: `signal` — aborted; its `reason` may be this library's own
|
|
34
|
+
* `ABORTED` error, the `DOMException` a bare `controller.abort()` produces, a
|
|
35
|
+
* string, any other error, or `undefined`.
|
|
36
|
+
*
|
|
37
|
+
* Returns: the reason unchanged when it already is this library's own
|
|
38
|
+
* `ABORTED` error, so an error does not accumulate wrappers across layers;
|
|
39
|
+
* otherwise a fresh `ABORTED` error carrying the reason as `cause` (`undefined` reason carries
|
|
40
|
+
* none).
|
|
41
|
+
*
|
|
42
|
+
* Throws: nothing.
|
|
43
|
+
*
|
|
44
|
+
* Guarantees: `code === 'ABORTED'` holds however the signal was aborted, so a
|
|
45
|
+
* caller branches on the code rather than on the reason's shape.
|
|
46
|
+
*/
|
|
47
|
+
export declare function abortErrorFrom(signal: AbortSignal): DynamoDBLangGraphError<ErrorCode.ABORTED>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hides what an abort looks like.
|
|
4
|
+
*
|
|
5
|
+
* A signal may be aborted with this library's own `ABORTED` error, a
|
|
6
|
+
* `DOMException`, a string, any other error or nothing at all. Every one of
|
|
7
|
+
* them reaches a caller as a single `ABORTED` error that is never wrapped
|
|
8
|
+
* twice, and one test on the library's brand and that code is what tells a
|
|
9
|
+
* cancellation from a failure, so no call site inspects a reason's shape.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.isAbortError = isAbortError;
|
|
13
|
+
exports.abortErrorFrom = abortErrorFrom;
|
|
14
|
+
const base_error_1 = require("../errors/base-error");
|
|
15
|
+
const error_code_1 = require("../errors/error-code");
|
|
16
|
+
const errors_1 = require("../errors/errors");
|
|
17
|
+
/**
|
|
18
|
+
* Whether `error` is a cancellation rather than a failure.
|
|
19
|
+
*
|
|
20
|
+
* Accepts: `error` — any error, from any layer, and equally any other value a
|
|
21
|
+
* `throw` can produce, since a `catch` is where this is called; `undefined`
|
|
22
|
+
* too, the `reason` a signal aborted without one can carry.
|
|
23
|
+
*
|
|
24
|
+
* Returns: whether it carries this library's brand and `code: 'ABORTED'`,
|
|
25
|
+
* which is the contract every cancellable method documents and the only thing
|
|
26
|
+
* a caller branches on, narrowed so it can be handed on as the abort it is.
|
|
27
|
+
* An unbranded object that merely carries `code: 'ABORTED'` is not an abort,
|
|
28
|
+
* because an error a wrapper caught that only looks like an abort must still
|
|
29
|
+
* be rebranded rather than re-thrown as it is.
|
|
30
|
+
*
|
|
31
|
+
* Throws: **nothing**, for any value. A value that cannot carry a property is
|
|
32
|
+
* not a cancellation, which is the answer an uncoded `Error` gets too.
|
|
33
|
+
*/
|
|
34
|
+
function isAbortError(error) {
|
|
35
|
+
return error !== undefined && (0, base_error_1.hasErrorCode)(error, error_code_1.ErrorCode.ABORTED);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* This library's error for an aborted `signal`.
|
|
39
|
+
*
|
|
40
|
+
* Accepts: `signal` — aborted; its `reason` may be this library's own
|
|
41
|
+
* `ABORTED` error, the `DOMException` a bare `controller.abort()` produces, a
|
|
42
|
+
* string, any other error, or `undefined`.
|
|
43
|
+
*
|
|
44
|
+
* Returns: the reason unchanged when it already is this library's own
|
|
45
|
+
* `ABORTED` error, so an error does not accumulate wrappers across layers;
|
|
46
|
+
* otherwise a fresh `ABORTED` error carrying the reason as `cause` (`undefined` reason carries
|
|
47
|
+
* none).
|
|
48
|
+
*
|
|
49
|
+
* Throws: nothing.
|
|
50
|
+
*
|
|
51
|
+
* Guarantees: `code === 'ABORTED'` holds however the signal was aborted, so a
|
|
52
|
+
* caller branches on the code rather than on the reason's shape.
|
|
53
|
+
*/
|
|
54
|
+
function abortErrorFrom(signal) {
|
|
55
|
+
const reason = signal.reason;
|
|
56
|
+
if (isAbortError(reason))
|
|
57
|
+
return reason;
|
|
58
|
+
return (0, errors_1.abortError)('Operation aborted', reason === undefined ? undefined : (0, base_error_1.toError)(reason));
|
|
59
|
+
}
|
|
@@ -1,23 +1,86 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Hides BatchWriteItem.
|
|
3
|
+
*
|
|
4
|
+
* A call carries at most twenty-five requests, and the service may hand some
|
|
5
|
+
* back unprocessed; they are re-sent with backoff until a bound, and a batch
|
|
6
|
+
* that still cannot finish is reported with how much of it did.
|
|
7
|
+
*/
|
|
8
|
+
import type { DynamoDBDocumentLike, WriteRequest } from './client';
|
|
9
|
+
import { type RetryOptions } from './retry';
|
|
10
|
+
/**
|
|
11
|
+
* DynamoDB BatchWriteItem maximum requests per call.
|
|
12
|
+
*
|
|
13
|
+
* @see https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html
|
|
14
|
+
*/
|
|
15
|
+
export declare const BATCH_WRITE_MAX = 25;
|
|
16
|
+
/** Maximum retries draining UnprocessedItems / UnprocessedKeys. */
|
|
17
|
+
export declare const MAX_UNPROCESSED_RETRIES = 10;
|
|
4
18
|
/**
|
|
5
19
|
* Write an arbitrary number of requests, chunked into batches of 25 (the
|
|
6
20
|
* BatchWriteItem limit). Every chunk is attempted regardless of an earlier
|
|
7
21
|
* chunk's failure — order-independent writes (deletes/puts) should never
|
|
8
22
|
* lose "later" chunks just because an earlier one failed. If any chunk fails,
|
|
9
|
-
* throws
|
|
23
|
+
* throws `BATCH_WRITE_INCOMPLETE` reporting exactly how many
|
|
10
24
|
* chunks succeeded vs. failed, and exactly how many individual writes
|
|
11
25
|
* persisted, once every chunk has been attempted.
|
|
12
26
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
27
|
+
* Accepts: `requests` — any number, in any order, of writes that do not depend
|
|
28
|
+
* on each other; none is a no-op. `options` — the drain's retry budget and
|
|
29
|
+
* signal.
|
|
30
|
+
*
|
|
31
|
+
* Returns: nothing, and only when every request persisted.
|
|
32
|
+
*
|
|
33
|
+
* Throws: `ABORTED` the moment a chunk reports one, unwrapped and with no
|
|
34
|
+
* further chunk attempted — a caller who cancelled did not encounter a fault,
|
|
35
|
+
* and spending the remaining requests on a cancelled call is the opposite of
|
|
36
|
+
* what the cancel asked for. Otherwise `BATCH_WRITE_INCOMPLETE`,
|
|
37
|
+
* once every chunk has been attempted, reporting how many chunks succeeded and
|
|
38
|
+
* how many individual writes persisted. Its one caller — the rollback in
|
|
39
|
+
* history/internal/append.ts — type-asserts a caught error straight to
|
|
40
|
+
* its code's details (not `instanceof`, banned repo-wide) instead of
|
|
41
|
+
* narrowing it, on the narrower guarantee that it passes no signal, so the
|
|
42
|
+
* abort path cannot arise there; a call site that does pass one must narrow
|
|
43
|
+
* instead.
|
|
44
|
+
*
|
|
45
|
+
* Guarantees: every chunk is attempted regardless of an earlier chunk's
|
|
46
|
+
* failure — these writes are order-independent, so losing the later ones to an
|
|
47
|
+
* earlier failure would delete less than the caller asked and report no more
|
|
48
|
+
* for it. A cancel is the one exception, because it is not a failure. The
|
|
49
|
+
* count the error carries is exact, which is what lets a compensating caller
|
|
50
|
+
* revert precisely what landed, and it never counts a chunk whose error
|
|
51
|
+
* carried no count of its own.
|
|
52
|
+
*/
|
|
53
|
+
export declare function batchWriteAll(client: DynamoDBDocumentLike, tableName: string, requests: WriteRequest[], options?: DrainOptions): Promise<void>;
|
|
54
|
+
/** Backoff/abort options shared by the drain helpers. */
|
|
55
|
+
export interface DrainOptions {
|
|
56
|
+
/** The adapter's retry options, applied to every BatchWriteItem round. */
|
|
57
|
+
retry?: RetryOptions;
|
|
58
|
+
signal?: AbortSignal;
|
|
59
|
+
rng?: () => number;
|
|
60
|
+
maxRetries?: number;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Write `requests` with `BatchWriteItem`, re-submitting what DynamoDB returns
|
|
64
|
+
* as `UnprocessedItems` until the batch drains.
|
|
65
|
+
*
|
|
66
|
+
* Accepts: `requests` — any length, including empty, which issues no request.
|
|
67
|
+
* `options.maxRetries` — re-submission rounds, default
|
|
68
|
+
* {@link MAX_UNPROCESSED_RETRIES}. `options.retry` — the adapter's policy, whose
|
|
69
|
+
* `baseDelayMs` and `maxDelayMs` set the backoff between rounds, so one policy
|
|
70
|
+
* governs every wait this package performs. `options.signal` — aborts a wait.
|
|
71
|
+
*
|
|
72
|
+
* Returns: nothing; success means every request persisted.
|
|
73
|
+
*
|
|
74
|
+
* Throws: `BATCH_WRITE_INCOMPLETE` when the batch does not drain
|
|
75
|
+
* within the rounds allowed, or when a round's write call fails outright — its
|
|
76
|
+
* `succeededCount` is every earlier round's confirmed persists and the
|
|
77
|
+
* triggering error is the `cause`. An `ABORTED` error passes through unchanged: a
|
|
78
|
+
* caller who cancelled did not get an incomplete batch write, and every
|
|
79
|
+
* cancellable method documents `ABORTED`.
|
|
80
|
+
*
|
|
81
|
+
* Guarantees: **every** error this function throws is one of those two — a
|
|
82
|
+
* `BATCH_WRITE_INCOMPLETE` error carrying an accurate `succeededCount`, or an
|
|
83
|
+
* `ABORTED` error. {@link batchWriteAll} adds up those counts across chunks and
|
|
84
|
+
* depends on it.
|
|
21
85
|
*/
|
|
22
|
-
export declare function
|
|
23
|
-
//# sourceMappingURL=batch-write.d.ts.map
|
|
86
|
+
export declare function drainUnprocessedWrites(client: DynamoDBDocumentLike, tableName: string, requests: WriteRequest[], options?: DrainOptions): Promise<void>;
|
|
@@ -1,54 +1,173 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hides BatchWriteItem.
|
|
4
|
+
*
|
|
5
|
+
* A call carries at most twenty-five requests, and the service may hand some
|
|
6
|
+
* back unprocessed; they are re-sent with backoff until a bound, and a batch
|
|
7
|
+
* that still cannot finish is reported with how much of it did.
|
|
8
|
+
*/
|
|
2
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.MAX_UNPROCESSED_RETRIES = exports.BATCH_WRITE_MAX = void 0;
|
|
3
11
|
exports.batchWriteAll = batchWriteAll;
|
|
4
|
-
|
|
12
|
+
exports.drainUnprocessedWrites = drainUnprocessedWrites;
|
|
13
|
+
const base_error_1 = require("../errors/base-error");
|
|
14
|
+
const error_code_1 = require("../errors/error-code");
|
|
5
15
|
const errors_1 = require("../errors/errors");
|
|
6
|
-
const
|
|
16
|
+
const abort_1 = require("./abort");
|
|
17
|
+
const retry_1 = require("./retry");
|
|
18
|
+
/**
|
|
19
|
+
* DynamoDB BatchWriteItem maximum requests per call.
|
|
20
|
+
*
|
|
21
|
+
* @see https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html
|
|
22
|
+
*/
|
|
23
|
+
exports.BATCH_WRITE_MAX = 25;
|
|
24
|
+
/** Maximum retries draining UnprocessedItems / UnprocessedKeys. */
|
|
25
|
+
exports.MAX_UNPROCESSED_RETRIES = 10;
|
|
7
26
|
/**
|
|
8
27
|
* Write an arbitrary number of requests, chunked into batches of 25 (the
|
|
9
28
|
* BatchWriteItem limit). Every chunk is attempted regardless of an earlier
|
|
10
29
|
* chunk's failure — order-independent writes (deletes/puts) should never
|
|
11
30
|
* lose "later" chunks just because an earlier one failed. If any chunk fails,
|
|
12
|
-
* throws
|
|
31
|
+
* throws `BATCH_WRITE_INCOMPLETE` reporting exactly how many
|
|
13
32
|
* chunks succeeded vs. failed, and exactly how many individual writes
|
|
14
33
|
* persisted, once every chunk has been attempted.
|
|
15
34
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
35
|
+
* Accepts: `requests` — any number, in any order, of writes that do not depend
|
|
36
|
+
* on each other; none is a no-op. `options` — the drain's retry budget and
|
|
37
|
+
* signal.
|
|
38
|
+
*
|
|
39
|
+
* Returns: nothing, and only when every request persisted.
|
|
40
|
+
*
|
|
41
|
+
* Throws: `ABORTED` the moment a chunk reports one, unwrapped and with no
|
|
42
|
+
* further chunk attempted — a caller who cancelled did not encounter a fault,
|
|
43
|
+
* and spending the remaining requests on a cancelled call is the opposite of
|
|
44
|
+
* what the cancel asked for. Otherwise `BATCH_WRITE_INCOMPLETE`,
|
|
45
|
+
* once every chunk has been attempted, reporting how many chunks succeeded and
|
|
46
|
+
* how many individual writes persisted. Its one caller — the rollback in
|
|
47
|
+
* history/internal/append.ts — type-asserts a caught error straight to
|
|
48
|
+
* its code's details (not `instanceof`, banned repo-wide) instead of
|
|
49
|
+
* narrowing it, on the narrower guarantee that it passes no signal, so the
|
|
50
|
+
* abort path cannot arise there; a call site that does pass one must narrow
|
|
51
|
+
* instead.
|
|
52
|
+
*
|
|
53
|
+
* Guarantees: every chunk is attempted regardless of an earlier chunk's
|
|
54
|
+
* failure — these writes are order-independent, so losing the later ones to an
|
|
55
|
+
* earlier failure would delete less than the caller asked and report no more
|
|
56
|
+
* for it. A cancel is the one exception, because it is not a failure. The
|
|
57
|
+
* count the error carries is exact, which is what lets a compensating caller
|
|
58
|
+
* revert precisely what landed, and it never counts a chunk whose error
|
|
59
|
+
* carried no count of its own.
|
|
24
60
|
*/
|
|
25
61
|
async function batchWriteAll(client, tableName, requests, options = {}) {
|
|
26
|
-
const totalChunks = Math.ceil(requests.length /
|
|
62
|
+
const totalChunks = Math.ceil(requests.length / exports.BATCH_WRITE_MAX);
|
|
27
63
|
let succeededChunks = 0;
|
|
28
64
|
let succeededCount = 0;
|
|
29
65
|
const failedChunks = [];
|
|
30
|
-
for (let offset = 0; offset < requests.length; offset +=
|
|
31
|
-
const chunk = requests.slice(offset, offset +
|
|
66
|
+
for (let offset = 0; offset < requests.length; offset += exports.BATCH_WRITE_MAX) {
|
|
67
|
+
const chunk = requests.slice(offset, offset + exports.BATCH_WRITE_MAX);
|
|
32
68
|
try {
|
|
33
|
-
await
|
|
69
|
+
await drainUnprocessedWrites(client, tableName, chunk, options);
|
|
34
70
|
succeededChunks += 1;
|
|
35
71
|
succeededCount += chunk.length;
|
|
36
72
|
}
|
|
37
73
|
catch (error) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
74
|
+
const failure = error;
|
|
75
|
+
// Anything but an incomplete batch is the drain's other documented
|
|
76
|
+
// throw, a cancel, and it leaves the loop at once. Reading the brand and
|
|
77
|
+
// code rather than the class is the same realm-safe test the rest of
|
|
78
|
+
// this package makes, and it is what keeps a count this function cannot
|
|
79
|
+
// know out of the total: adding an absent `succeededCount` made it
|
|
80
|
+
// `NaN`.
|
|
81
|
+
if (!(0, base_error_1.hasErrorCode)(failure, error_code_1.ErrorCode.BATCH_WRITE_INCOMPLETE))
|
|
82
|
+
throw failure;
|
|
83
|
+
failedChunks.push(failure);
|
|
84
|
+
succeededCount += failure.details.succeededCount;
|
|
48
85
|
}
|
|
49
86
|
}
|
|
50
87
|
if (failedChunks.length > 0) {
|
|
51
|
-
throw
|
|
88
|
+
throw (0, errors_1.batchWriteAllIncompleteError)({
|
|
89
|
+
succeeded: succeededChunks,
|
|
90
|
+
total: totalChunks,
|
|
91
|
+
failures: failedChunks,
|
|
92
|
+
succeededCount,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The backoff window between rounds: the adapter's configured policy, never
|
|
98
|
+
* module constants — reading the constants here instead would leave a caller
|
|
99
|
+
* who raises `baseDelayMs` still waiting the module's default 100 ms on this
|
|
100
|
+
* one path, breaking the documented "one policy governs every wait".
|
|
101
|
+
*/
|
|
102
|
+
function drainBackoff(retry) {
|
|
103
|
+
return {
|
|
104
|
+
base: retry?.baseDelayMs ?? retry_1.INITIAL_BACKOFF_DELAY_MS,
|
|
105
|
+
max: retry?.maxDelayMs ?? retry_1.MAX_BACKOFF_DELAY_MS,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* The error a failed round raises.
|
|
110
|
+
*
|
|
111
|
+
* An `ABORTED` error passes through unchanged: a caller who cancelled did not get
|
|
112
|
+
* an incomplete batch write, and wrapping it reported
|
|
113
|
+
* `BATCH_WRITE_INCOMPLETE` for an aborted `deleteThread`, contradicting the
|
|
114
|
+
* `ABORTED` every cancellable method documents. Anything else becomes a
|
|
115
|
+
* `BATCH_WRITE_INCOMPLETE` error carrying what did persist.
|
|
116
|
+
*/
|
|
117
|
+
function drainFailure(error, succeededCount, pending, retries) {
|
|
118
|
+
if ((0, abort_1.isAbortError)(error))
|
|
119
|
+
return error;
|
|
120
|
+
return (0, errors_1.batchWriteIncompleteError)(succeededCount, pending, retries, error);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Write `requests` with `BatchWriteItem`, re-submitting what DynamoDB returns
|
|
124
|
+
* as `UnprocessedItems` until the batch drains.
|
|
125
|
+
*
|
|
126
|
+
* Accepts: `requests` — any length, including empty, which issues no request.
|
|
127
|
+
* `options.maxRetries` — re-submission rounds, default
|
|
128
|
+
* {@link MAX_UNPROCESSED_RETRIES}. `options.retry` — the adapter's policy, whose
|
|
129
|
+
* `baseDelayMs` and `maxDelayMs` set the backoff between rounds, so one policy
|
|
130
|
+
* governs every wait this package performs. `options.signal` — aborts a wait.
|
|
131
|
+
*
|
|
132
|
+
* Returns: nothing; success means every request persisted.
|
|
133
|
+
*
|
|
134
|
+
* Throws: `BATCH_WRITE_INCOMPLETE` when the batch does not drain
|
|
135
|
+
* within the rounds allowed, or when a round's write call fails outright — its
|
|
136
|
+
* `succeededCount` is every earlier round's confirmed persists and the
|
|
137
|
+
* triggering error is the `cause`. An `ABORTED` error passes through unchanged: a
|
|
138
|
+
* caller who cancelled did not get an incomplete batch write, and every
|
|
139
|
+
* cancellable method documents `ABORTED`.
|
|
140
|
+
*
|
|
141
|
+
* Guarantees: **every** error this function throws is one of those two — a
|
|
142
|
+
* `BATCH_WRITE_INCOMPLETE` error carrying an accurate `succeededCount`, or an
|
|
143
|
+
* `ABORTED` error. {@link batchWriteAll} adds up those counts across chunks and
|
|
144
|
+
* depends on it.
|
|
145
|
+
*/
|
|
146
|
+
async function drainUnprocessedWrites(client, tableName, requests, options = {}) {
|
|
147
|
+
if (requests.length === 0)
|
|
148
|
+
return;
|
|
149
|
+
const maxRetries = options.maxRetries ?? exports.MAX_UNPROCESSED_RETRIES;
|
|
150
|
+
const initialCount = requests.length;
|
|
151
|
+
const { base: baseDelay, max: maxDelay } = drainBackoff(options.retry);
|
|
152
|
+
let pending = requests;
|
|
153
|
+
let delay = baseDelay;
|
|
154
|
+
let retries = 0;
|
|
155
|
+
while (pending.length > 0) {
|
|
156
|
+
try {
|
|
157
|
+
const result = await (0, retry_1.withDynamoDBRetry)((request) => client.batchWrite({ RequestItems: { [tableName]: pending } }, request), { ...options.retry, signal: options.signal });
|
|
158
|
+
const leftover = result.UnprocessedItems?.[tableName] ?? [];
|
|
159
|
+
if (leftover.length === 0)
|
|
160
|
+
return;
|
|
161
|
+
pending = leftover;
|
|
162
|
+
retries += 1;
|
|
163
|
+
if (retries > maxRetries)
|
|
164
|
+
break;
|
|
165
|
+
await (0, retry_1.sleep)((0, retry_1.fullJitter)(delay, options.rng), options.signal);
|
|
166
|
+
delay = (0, retry_1.nextBackoffDelay)(delay, maxDelay);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
throw drainFailure(error, initialCount - pending.length, pending, retries);
|
|
170
|
+
}
|
|
52
171
|
}
|
|
172
|
+
throw (0, errors_1.batchWriteIncompleteError)(initialCount - pending.length, pending, maxRetries);
|
|
53
173
|
}
|
|
54
|
-
//# sourceMappingURL=batch-write.js.map
|
|
@@ -1,7 +1,124 @@
|
|
|
1
|
-
/**
|
|
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
|
+
*/
|
|
2
18
|
export interface CancellationReason {
|
|
3
19
|
Code?: string;
|
|
20
|
+
Item?: Record<string, AttributeValue>;
|
|
4
21
|
}
|
|
5
|
-
/**
|
|
6
|
-
|
|
7
|
-
|
|
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;
|