@farukada/aws-langgraph-dynamodb-ts 1.0.0-rc.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +390 -193
- package/dist/{backfill → cjs/backfill}/backfill.d.ts +15 -12
- package/dist/cjs/backfill/backfill.js +177 -0
- package/dist/{checkpointer → cjs/checkpointer}/actions/delete-thread.d.ts +1 -1
- package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
- package/dist/{checkpointer → cjs/checkpointer}/actions/get-tuple.d.ts +4 -3
- package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
- package/dist/{checkpointer → cjs/checkpointer}/actions/list.d.ts +7 -4
- package/dist/cjs/checkpointer/actions/list.js +70 -0
- package/dist/{checkpointer → cjs/checkpointer}/actions/put-writes.d.ts +8 -6
- package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
- package/dist/{checkpointer → cjs/checkpointer}/actions/put.d.ts +21 -15
- package/dist/cjs/checkpointer/actions/put.js +79 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/delta-history.d.ts +38 -26
- package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/listing.d.ts +4 -4
- package/dist/cjs/checkpointer/internal/listing.js +104 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/parse.d.ts +51 -15
- package/dist/cjs/checkpointer/internal/parse.js +184 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/pending-writes.d.ts +64 -25
- package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/read.d.ts +15 -10
- package/dist/cjs/checkpointer/internal/read.js +132 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/rows.d.ts +94 -21
- package/dist/cjs/checkpointer/internal/rows.js +356 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/setup.d.ts +13 -20
- package/dist/cjs/checkpointer/internal/setup.js +25 -0
- package/dist/{checkpointer → cjs/checkpointer}/saver.d.ts +72 -36
- package/dist/cjs/checkpointer/saver.js +56 -0
- package/dist/{checkpointer → cjs/checkpointer}/types.d.ts +1 -1
- package/dist/cjs/checkpointer/types.js +2 -0
- package/dist/{factory → cjs/factory}/factory.d.ts +25 -20
- package/dist/cjs/factory/factory.js +137 -0
- package/dist/{factory → cjs/factory}/types.d.ts +12 -12
- package/dist/cjs/factory/types.js +2 -0
- package/dist/{history → cjs/history}/actions/add-messages.d.ts +18 -10
- package/dist/cjs/history/actions/add-messages.js +17 -0
- package/dist/{history → cjs/history}/actions/clear.d.ts +1 -1
- package/dist/cjs/history/actions/clear.js +29 -0
- package/dist/{history → cjs/history}/actions/get-messages.d.ts +11 -9
- package/dist/cjs/history/actions/get-messages.js +58 -0
- package/dist/{history → cjs/history}/actions/list-sessions.d.ts +3 -3
- package/dist/cjs/history/actions/list-sessions.js +67 -0
- package/dist/{history → cjs/history}/actions/reconcile-count.d.ts +13 -9
- package/dist/cjs/history/actions/reconcile-count.js +8 -0
- package/dist/{history → cjs/history}/chat-message-history.d.ts +62 -30
- package/dist/cjs/history/chat-message-history.js +61 -0
- package/dist/{history → cjs/history}/internal/append.d.ts +64 -32
- package/dist/cjs/history/internal/append.js +267 -0
- package/dist/{history → cjs/history}/internal/message-read.d.ts +3 -3
- package/dist/cjs/history/internal/message-read.js +93 -0
- package/dist/{history → cjs/history}/internal/parse.d.ts +2 -2
- package/dist/cjs/history/internal/parse.js +113 -0
- package/dist/{history → cjs/history}/internal/rows.d.ts +11 -10
- package/dist/cjs/history/internal/rows.js +96 -0
- package/dist/{history → cjs/history}/internal/session.d.ts +41 -22
- package/dist/cjs/history/internal/session.js +296 -0
- package/dist/{history → cjs/history}/internal/setup.d.ts +2 -2
- package/dist/cjs/history/internal/setup.js +60 -0
- package/dist/{history → cjs/history}/session-adapter.d.ts +0 -6
- package/dist/cjs/history/session-adapter.js +38 -0
- package/dist/{history → cjs/history}/types.d.ts +18 -15
- package/dist/cjs/history/types.js +2 -0
- package/dist/{index.d.ts → cjs/index.d.ts} +27 -27
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/package.json +1 -0
- package/dist/{shared → cjs/shared}/adapter.d.ts +27 -16
- package/dist/cjs/shared/adapter.js +70 -0
- package/dist/cjs/shared/clock.js +14 -0
- package/dist/{shared → cjs/shared}/codec/codec.d.ts +37 -20
- package/dist/cjs/shared/codec/codec.js +162 -0
- package/dist/{shared → cjs/shared}/codec/compression.d.ts +9 -4
- package/dist/cjs/shared/codec/compression.js +45 -0
- package/dist/cjs/shared/codec/json-serde.js +58 -0
- package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +2 -1
- package/dist/cjs/shared/codec/s3/client-types.js +6 -0
- package/dist/{shared → cjs/shared}/codec/s3/client.d.ts +25 -7
- package/dist/cjs/shared/codec/s3/client.js +78 -0
- package/dist/{shared → cjs/shared}/codec/s3/config.d.ts +12 -7
- package/dist/cjs/shared/codec/s3/config.js +92 -0
- package/dist/{shared → cjs/shared}/codec/s3/lifecycle.d.ts +71 -17
- package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
- package/dist/{shared → cjs/shared}/codec/s3/offloader.d.ts +42 -29
- package/dist/cjs/shared/codec/s3/offloader.js +289 -0
- package/dist/cjs/shared/concurrency.js +31 -0
- package/dist/{shared → cjs/shared}/dynamodb/abort.d.ts +2 -2
- package/dist/cjs/shared/dynamodb/abort.js +16 -0
- package/dist/{shared → cjs/shared}/dynamodb/batch-write.d.ts +2 -2
- package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
- package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
- package/dist/{shared → cjs/shared}/dynamodb/client.d.ts +24 -22
- package/dist/cjs/shared/dynamodb/client.js +40 -0
- package/dist/{shared → cjs/shared}/dynamodb/idempotent-write.d.ts +64 -19
- package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
- package/dist/{shared → cjs/shared}/dynamodb/paginate.d.ts +2 -2
- package/dist/cjs/shared/dynamodb/paginate.js +90 -0
- package/dist/{shared → cjs/shared}/dynamodb/partition-delete.d.ts +6 -6
- package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
- package/dist/{shared → cjs/shared}/dynamodb/recency-index.d.ts +27 -15
- package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
- package/dist/{shared → cjs/shared}/dynamodb/retry.d.ts +37 -6
- package/dist/cjs/shared/dynamodb/retry.js +193 -0
- package/dist/cjs/shared/dynamodb/row-size.d.ts +33 -0
- package/dist/cjs/shared/dynamodb/row-size.js +30 -0
- package/dist/{shared → cjs/shared}/dynamodb/table-schema.d.ts +27 -18
- package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
- package/dist/{shared → cjs/shared}/errors/base-error.d.ts +42 -7
- package/dist/cjs/shared/errors/base-error.js +73 -0
- package/dist/{shared → cjs/shared}/errors/boundary.d.ts +29 -14
- package/dist/cjs/shared/errors/boundary.js +61 -0
- package/dist/cjs/shared/errors/classify.d.ts +206 -0
- package/dist/cjs/shared/errors/classify.js +232 -0
- package/dist/{shared → cjs/shared}/errors/error-code.d.ts +17 -10
- package/dist/cjs/shared/errors/error-code.js +27 -0
- package/dist/{shared → cjs/shared}/errors/errors.d.ts +75 -9
- package/dist/cjs/shared/errors/errors.js +123 -0
- package/dist/cjs/shared/logging/logger.js +30 -0
- package/dist/{shared → cjs/shared}/logging/redaction.d.ts +8 -4
- package/dist/cjs/shared/logging/redaction.js +145 -0
- package/dist/{shared → cjs/shared}/logging/secret-patterns.d.ts +30 -7
- package/dist/cjs/shared/logging/secret-patterns.js +93 -0
- package/dist/cjs/shared/logging/truncate.js +31 -0
- package/dist/{shared → cjs/shared}/options.d.ts +27 -11
- package/dist/cjs/shared/options.js +2 -0
- package/dist/cjs/shared/ulid.js +83 -0
- package/dist/{shared → cjs/shared}/validation/collaborators.d.ts +21 -2
- package/dist/cjs/shared/validation/collaborators.js +79 -0
- package/dist/{shared → cjs/shared}/validation/option-shape.d.ts +7 -5
- package/dist/cjs/shared/validation/option-shape.js +31 -0
- package/dist/{shared → cjs/shared}/validation/options.d.ts +4 -4
- package/dist/cjs/shared/validation/options.js +166 -0
- package/dist/cjs/shared/validation/primitives.js +114 -0
- package/dist/{shared → cjs/shared}/validation/ttl.d.ts +26 -9
- package/dist/cjs/shared/validation/ttl.js +52 -0
- package/dist/{store → cjs/store}/actions/list-namespaces.d.ts +5 -5
- package/dist/cjs/store/actions/list-namespaces.js +92 -0
- package/dist/{store → cjs/store}/actions/put.d.ts +11 -4
- package/dist/cjs/store/actions/put.js +49 -0
- package/dist/{store → cjs/store}/actions/reconcile-vector-index.d.ts +5 -5
- package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
- package/dist/{store → cjs/store}/actions/search.d.ts +2 -2
- package/dist/cjs/store/actions/search.js +26 -0
- package/dist/cjs/store/internal/batch-plan.d.ts +56 -0
- package/dist/cjs/store/internal/batch-plan.js +32 -0
- package/dist/{store → cjs/store}/internal/filter.d.ts +3 -3
- package/dist/cjs/store/internal/filter.js +64 -0
- package/dist/cjs/store/internal/get-item.d.ts +77 -0
- package/dist/cjs/store/internal/get-item.js +58 -0
- package/dist/{store → cjs/store}/internal/item-write.d.ts +72 -32
- package/dist/cjs/store/internal/item-write.js +181 -0
- package/dist/{store → cjs/store}/internal/parse.d.ts +15 -10
- package/dist/cjs/store/internal/parse.js +180 -0
- package/dist/{store → cjs/store}/internal/rows.d.ts +38 -34
- package/dist/cjs/store/internal/rows.js +166 -0
- package/dist/{store → cjs/store}/internal/semantic-search.d.ts +2 -2
- package/dist/cjs/store/internal/semantic-search.js +211 -0
- package/dist/{store → cjs/store}/internal/setup.d.ts +10 -15
- package/dist/cjs/store/internal/setup.js +103 -0
- package/dist/{store → cjs/store}/internal/table-search.d.ts +5 -5
- package/dist/cjs/store/internal/table-search.js +123 -0
- package/dist/{store → cjs/store}/internal/vector-index.d.ts +26 -15
- package/dist/cjs/store/internal/vector-index.js +269 -0
- package/dist/{store → cjs/store}/store.d.ts +82 -39
- package/dist/cjs/store/store.js +97 -0
- package/dist/{store → cjs/store}/types.d.ts +25 -10
- package/dist/cjs/store/types.js +2 -0
- package/dist/cjs/store/vector-backend.js +4 -0
- package/dist/esm/backfill/backfill.d.ts +171 -0
- package/dist/esm/backfill/backfill.js +170 -0
- package/dist/{checkpointer/actions/delete-thread.js → esm/checkpointer/actions/delete-thread.d.ts} +4 -26
- package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
- package/dist/{checkpointer/actions/get-tuple.js → esm/checkpointer/actions/get-tuple.d.ts} +7 -24
- package/dist/esm/checkpointer/actions/get-tuple.js +19 -0
- package/dist/esm/checkpointer/actions/list.d.ts +55 -0
- package/dist/esm/checkpointer/actions/list.js +67 -0
- package/dist/{checkpointer/actions/put-writes.js → esm/checkpointer/actions/put-writes.d.ts} +10 -37
- package/dist/esm/checkpointer/actions/put-writes.js +18 -0
- package/dist/esm/checkpointer/actions/put.d.ts +95 -0
- package/dist/esm/checkpointer/actions/put.js +75 -0
- package/dist/esm/checkpointer/internal/delta-history.d.ts +124 -0
- package/dist/esm/checkpointer/internal/delta-history.js +126 -0
- package/dist/{checkpointer/internal/listing.js → esm/checkpointer/internal/listing.d.ts} +22 -118
- package/dist/esm/checkpointer/internal/listing.js +95 -0
- package/dist/esm/checkpointer/internal/parse.d.ts +298 -0
- package/dist/esm/checkpointer/internal/parse.js +169 -0
- package/dist/esm/checkpointer/internal/pending-writes.d.ts +314 -0
- package/dist/esm/checkpointer/internal/pending-writes.js +229 -0
- package/dist/esm/checkpointer/internal/read.d.ts +135 -0
- package/dist/esm/checkpointer/internal/read.js +125 -0
- package/dist/esm/checkpointer/internal/rows.d.ts +644 -0
- package/dist/esm/checkpointer/internal/rows.js +323 -0
- package/dist/esm/checkpointer/internal/setup.d.ts +47 -0
- package/dist/esm/checkpointer/internal/setup.js +21 -0
- package/dist/{checkpointer/saver.js → esm/checkpointer/saver.d.ts} +84 -87
- package/dist/esm/checkpointer/saver.js +52 -0
- package/dist/esm/checkpointer/types.d.ts +51 -0
- package/dist/esm/checkpointer/types.js +1 -0
- package/dist/esm/factory/factory.d.ts +154 -0
- package/dist/esm/factory/factory.js +133 -0
- package/dist/esm/factory/types.d.ts +76 -0
- package/dist/esm/factory/types.js +1 -0
- package/dist/{history/actions/add-messages.js → esm/history/actions/add-messages.d.ts} +20 -26
- package/dist/esm/history/actions/add-messages.js +14 -0
- package/dist/{history/actions/clear.js → esm/history/actions/clear.d.ts} +4 -35
- package/dist/esm/history/actions/clear.js +26 -0
- package/dist/esm/history/actions/get-messages.d.ts +60 -0
- package/dist/esm/history/actions/get-messages.js +55 -0
- package/dist/esm/history/actions/list-sessions.d.ts +55 -0
- package/dist/esm/history/actions/list-sessions.js +64 -0
- package/dist/{history/actions/reconcile-count.js → esm/history/actions/reconcile-count.d.ts} +14 -16
- package/dist/esm/history/actions/reconcile-count.js +5 -0
- package/dist/{history/chat-message-history.js → esm/history/chat-message-history.d.ts} +76 -87
- package/dist/esm/history/chat-message-history.js +57 -0
- package/dist/esm/history/internal/append.d.ts +244 -0
- package/dist/esm/history/internal/append.js +259 -0
- package/dist/esm/history/internal/message-read.d.ts +84 -0
- package/dist/esm/history/internal/message-read.js +89 -0
- package/dist/esm/history/internal/parse.d.ts +153 -0
- package/dist/esm/history/internal/parse.js +105 -0
- package/dist/{history/internal/rows.js → esm/history/internal/rows.d.ts} +58 -112
- package/dist/esm/history/internal/rows.js +83 -0
- package/dist/esm/history/internal/session.d.ts +350 -0
- package/dist/esm/history/internal/session.js +285 -0
- package/dist/esm/history/internal/setup.d.ts +64 -0
- package/dist/esm/history/internal/setup.js +56 -0
- package/dist/{history/session-adapter.js → esm/history/session-adapter.d.ts} +25 -39
- package/dist/esm/history/session-adapter.js +34 -0
- package/dist/esm/history/types.d.ts +102 -0
- package/dist/esm/history/types.js +1 -0
- package/dist/esm/index.d.ts +53 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/shared/adapter.d.ts +146 -0
- package/dist/esm/shared/adapter.js +65 -0
- package/dist/{shared/clock.js → esm/shared/clock.d.ts} +3 -14
- package/dist/esm/shared/clock.js +9 -0
- package/dist/esm/shared/codec/codec.d.ts +336 -0
- package/dist/esm/shared/codec/codec.js +150 -0
- package/dist/esm/shared/codec/compression.d.ts +66 -0
- package/dist/esm/shared/codec/compression.js +40 -0
- package/dist/esm/shared/codec/json-serde.d.ts +80 -0
- package/dist/esm/shared/codec/json-serde.js +54 -0
- package/dist/esm/shared/codec/s3/client-types.d.ts +54 -0
- package/dist/esm/shared/codec/s3/client-types.js +3 -0
- package/dist/esm/shared/codec/s3/client.d.ts +63 -0
- package/dist/esm/shared/codec/s3/client.js +40 -0
- package/dist/{shared/codec/s3/config.js → esm/shared/codec/s3/config.d.ts} +45 -93
- package/dist/esm/shared/codec/s3/config.js +79 -0
- package/dist/esm/shared/codec/s3/lifecycle.d.ts +220 -0
- package/dist/esm/shared/codec/s3/lifecycle.js +214 -0
- package/dist/esm/shared/codec/s3/offloader.d.ts +428 -0
- package/dist/esm/shared/codec/s3/offloader.js +278 -0
- package/dist/{shared/concurrency.js → esm/shared/concurrency.d.ts} +2 -37
- package/dist/esm/shared/concurrency.js +27 -0
- package/dist/{shared/dynamodb/abort.js → esm/shared/dynamodb/abort.d.ts} +4 -16
- package/dist/esm/shared/dynamodb/abort.js +12 -0
- package/dist/esm/shared/dynamodb/batch-write.d.ts +86 -0
- package/dist/esm/shared/dynamodb/batch-write.js +74 -0
- package/dist/{shared/dynamodb/cancellation.js → esm/shared/dynamodb/cancellation.d.ts} +25 -53
- package/dist/esm/shared/dynamodb/cancellation.js +30 -0
- package/dist/{shared/dynamodb/client.js → esm/shared/dynamodb/client.d.ts} +74 -64
- package/dist/esm/shared/dynamodb/client.js +35 -0
- package/dist/{shared/dynamodb/idempotent-write.js → esm/shared/dynamodb/idempotent-write.d.ts} +172 -169
- package/dist/esm/shared/dynamodb/idempotent-write.js +153 -0
- package/dist/esm/shared/dynamodb/paginate.d.ts +111 -0
- package/dist/esm/shared/dynamodb/paginate.js +84 -0
- package/dist/esm/shared/dynamodb/partition-delete.d.ts +204 -0
- package/dist/esm/shared/dynamodb/partition-delete.js +171 -0
- package/dist/esm/shared/dynamodb/recency-index.d.ts +243 -0
- package/dist/esm/shared/dynamodb/recency-index.js +136 -0
- package/dist/esm/shared/dynamodb/retry.d.ts +317 -0
- package/dist/esm/shared/dynamodb/retry.js +180 -0
- package/dist/esm/shared/dynamodb/row-size.d.ts +33 -0
- package/dist/esm/shared/dynamodb/row-size.js +26 -0
- package/dist/{shared/dynamodb/table-schema.js → esm/shared/dynamodb/table-schema.d.ts} +57 -67
- package/dist/esm/shared/dynamodb/table-schema.js +43 -0
- package/dist/esm/shared/errors/base-error.d.ts +231 -0
- package/dist/esm/shared/errors/base-error.js +64 -0
- package/dist/esm/shared/errors/boundary.d.ts +86 -0
- package/dist/esm/shared/errors/boundary.js +54 -0
- package/dist/esm/shared/errors/classify.d.ts +206 -0
- package/dist/esm/shared/errors/classify.js +220 -0
- package/dist/{shared/errors/error-code.js → esm/shared/errors/error-code.d.ts} +39 -43
- package/dist/esm/shared/errors/error-code.js +24 -0
- package/dist/{shared/errors/errors.js → esm/shared/errors/errors.d.ts} +92 -98
- package/dist/esm/shared/errors/errors.js +110 -0
- package/dist/{shared/logging/logger.js → esm/shared/logging/logger.d.ts} +22 -52
- package/dist/esm/shared/logging/logger.js +25 -0
- package/dist/esm/shared/logging/redaction.d.ts +123 -0
- package/dist/esm/shared/logging/redaction.js +140 -0
- package/dist/{shared/logging/secret-patterns.js → esm/shared/logging/secret-patterns.d.ts} +46 -87
- package/dist/esm/shared/logging/secret-patterns.js +83 -0
- package/dist/{shared/logging/truncate.js → esm/shared/logging/truncate.d.ts} +6 -40
- package/dist/esm/shared/logging/truncate.js +25 -0
- package/dist/esm/shared/options.d.ts +100 -0
- package/dist/esm/shared/options.js +1 -0
- package/dist/{shared/ulid.js → esm/shared/ulid.d.ts} +4 -84
- package/dist/esm/shared/ulid.js +77 -0
- package/dist/{shared/validation/collaborators.js → esm/shared/validation/collaborators.d.ts} +37 -65
- package/dist/esm/shared/validation/collaborators.js +70 -0
- package/dist/{shared/validation/option-shape.js → esm/shared/validation/option-shape.d.ts} +14 -36
- package/dist/esm/shared/validation/option-shape.js +24 -0
- package/dist/esm/shared/validation/options.d.ts +145 -0
- package/dist/esm/shared/validation/options.js +156 -0
- package/dist/{shared/validation/primitives.js → esm/shared/validation/primitives.d.ts} +30 -125
- package/dist/esm/shared/validation/primitives.js +100 -0
- package/dist/esm/shared/validation/ttl.d.ts +94 -0
- package/dist/esm/shared/validation/ttl.js +46 -0
- package/dist/esm/store/actions/list-namespaces.d.ts +79 -0
- package/dist/esm/store/actions/list-namespaces.js +86 -0
- package/dist/esm/store/actions/put.d.ts +43 -0
- package/dist/esm/store/actions/put.js +46 -0
- package/dist/{store/actions/reconcile-vector-index.js → esm/store/actions/reconcile-vector-index.d.ts} +8 -16
- package/dist/esm/store/actions/reconcile-vector-index.js +10 -0
- package/dist/esm/store/actions/search.d.ts +38 -0
- package/dist/esm/store/actions/search.js +23 -0
- package/dist/esm/store/internal/batch-plan.d.ts +56 -0
- package/dist/esm/store/internal/batch-plan.js +28 -0
- package/dist/esm/store/internal/filter.d.ts +43 -0
- package/dist/esm/store/internal/filter.js +60 -0
- package/dist/esm/store/internal/get-item.d.ts +77 -0
- package/dist/esm/store/internal/get-item.js +54 -0
- package/dist/esm/store/internal/item-write.d.ts +270 -0
- package/dist/esm/store/internal/item-write.js +173 -0
- package/dist/esm/store/internal/parse.d.ts +230 -0
- package/dist/esm/store/internal/parse.js +169 -0
- package/dist/{store/internal/rows.js → esm/store/internal/rows.d.ts} +111 -199
- package/dist/esm/store/internal/rows.js +147 -0
- package/dist/esm/store/internal/semantic-search.d.ts +168 -0
- package/dist/esm/store/internal/semantic-search.js +200 -0
- package/dist/esm/store/internal/setup.d.ts +96 -0
- package/dist/esm/store/internal/setup.js +98 -0
- package/dist/esm/store/internal/table-search.d.ts +100 -0
- package/dist/esm/store/internal/table-search.js +119 -0
- package/dist/esm/store/internal/vector-index.d.ts +258 -0
- package/dist/esm/store/internal/vector-index.js +256 -0
- package/dist/{store/store.js → esm/store/store.d.ts} +99 -133
- package/dist/esm/store/store.js +93 -0
- package/dist/esm/store/types.d.ts +111 -0
- package/dist/esm/store/types.js +1 -0
- package/dist/esm/store/vector-backend.d.ts +104 -0
- package/dist/esm/store/vector-backend.js +1 -0
- package/package.json +50 -44
- package/dist/backfill/backfill.js +0 -393
- package/dist/checkpointer/actions/list.js +0 -142
- package/dist/checkpointer/actions/put.js +0 -195
- package/dist/checkpointer/internal/delta-history.js +0 -252
- package/dist/checkpointer/internal/parse.js +0 -372
- package/dist/checkpointer/internal/pending-writes.js +0 -588
- package/dist/checkpointer/internal/read.js +0 -264
- package/dist/checkpointer/internal/rows.js +0 -834
- package/dist/checkpointer/internal/setup.js +0 -72
- package/dist/checkpointer/types.js +0 -12
- package/dist/factory/factory.js +0 -266
- package/dist/factory/types.js +0 -10
- package/dist/history/actions/get-messages.js +0 -141
- package/dist/history/actions/list-sessions.js +0 -156
- package/dist/history/internal/append.js +0 -500
- package/dist/history/internal/message-read.js +0 -204
- package/dist/history/internal/parse.js +0 -252
- package/dist/history/internal/session.js +0 -628
- package/dist/history/internal/setup.js +0 -106
- package/dist/history/types.js +0 -12
- package/dist/index.js +0 -51
- package/dist/shared/adapter.js +0 -143
- package/dist/shared/codec/codec.js +0 -441
- package/dist/shared/codec/compression.js +0 -89
- package/dist/shared/codec/json-serde.js +0 -191
- package/dist/shared/codec/s3/client-types.js +0 -26
- package/dist/shared/codec/s3/client.js +0 -97
- package/dist/shared/codec/s3/lifecycle.js +0 -355
- package/dist/shared/codec/s3/offloader.js +0 -658
- package/dist/shared/dynamodb/batch-write.js +0 -173
- package/dist/shared/dynamodb/paginate.js +0 -188
- package/dist/shared/dynamodb/partition-delete.js +0 -340
- package/dist/shared/dynamodb/recency-index.js +0 -377
- package/dist/shared/dynamodb/retry.js +0 -463
- package/dist/shared/errors/base-error.js +0 -174
- package/dist/shared/errors/boundary.js +0 -143
- package/dist/shared/errors/classify.d.ts +0 -97
- package/dist/shared/errors/classify.js +0 -257
- package/dist/shared/logging/redaction.js +0 -316
- package/dist/shared/options.js +0 -11
- package/dist/shared/validation/options.js +0 -328
- package/dist/shared/validation/ttl.js +0 -132
- package/dist/store/actions/list-namespaces.js +0 -197
- package/dist/store/actions/put.js +0 -78
- package/dist/store/actions/search.js +0 -66
- package/dist/store/internal/batch-plan.d.ts +0 -26
- package/dist/store/internal/batch-plan.js +0 -109
- package/dist/store/internal/filter.js +0 -137
- package/dist/store/internal/get-item.d.ts +0 -45
- package/dist/store/internal/get-item.js +0 -115
- package/dist/store/internal/item-write.js +0 -463
- package/dist/store/internal/parse.js +0 -350
- package/dist/store/internal/semantic-search.js +0 -389
- package/dist/store/internal/setup.js +0 -223
- package/dist/store/internal/table-search.js +0 -213
- package/dist/store/internal/vector-index.js +0 -546
- package/dist/store/types.js +0 -15
- package/dist/store/vector-backend.js +0 -17
- /package/dist/{shared → cjs/shared}/clock.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/codec/json-serde.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/concurrency.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/dynamodb/cancellation.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/logging/logger.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/logging/truncate.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/ulid.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/validation/primitives.d.ts +0 -0
- /package/dist/{store → cjs/store}/vector-backend.d.ts +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SUPPORTED_ROW_FORMAT_VERSION = exports.ROW_FORMAT_VERSION = exports.ADAPTER_TAGS = exports.KEY_SEPARATOR = exports.MAX_SORT_KEY_BYTES = exports.MAX_CHECKPOINT_NS_BYTES = exports.MAX_WRITE_CHANNEL_BYTES = exports.MAX_KEY_SEGMENT_BYTES = exports.MAX_PARTITION_ID_BYTES = exports.SORT_KEY_ATTRIBUTE = exports.PARTITION_KEY_ATTRIBUTE = void 0;
|
|
4
|
+
exports.rowKeyOf = rowKeyOf;
|
|
5
|
+
exports.rowVersionOf = rowVersionOf;
|
|
6
|
+
exports.assertReadableRow = assertReadableRow;
|
|
7
|
+
exports.isExpiredRow = isExpiredRow;
|
|
8
|
+
exports.withoutExpired = withoutExpired;
|
|
9
|
+
exports.compareSortKeys = compareSortKeys;
|
|
10
|
+
const base_error_js_1 = require("../errors/base-error.js");
|
|
11
|
+
const error_code_js_1 = require("../errors/error-code.js");
|
|
12
|
+
exports.PARTITION_KEY_ATTRIBUTE = 'PK';
|
|
13
|
+
exports.SORT_KEY_ATTRIBUTE = 'SK';
|
|
14
|
+
exports.MAX_PARTITION_ID_BYTES = 1024;
|
|
15
|
+
exports.MAX_KEY_SEGMENT_BYTES = 256;
|
|
16
|
+
exports.MAX_WRITE_CHANNEL_BYTES = 1024;
|
|
17
|
+
exports.MAX_CHECKPOINT_NS_BYTES = 512;
|
|
18
|
+
exports.MAX_SORT_KEY_BYTES = 1024;
|
|
19
|
+
exports.KEY_SEPARATOR = '#';
|
|
20
|
+
exports.ADAPTER_TAGS = { checkpointer: 'CHKPT', store: 'STORE', history: 'HIST' };
|
|
21
|
+
function rowKeyOf(row) {
|
|
22
|
+
return { PK: row.PK, SK: row.SK };
|
|
23
|
+
}
|
|
24
|
+
exports.ROW_FORMAT_VERSION = 1;
|
|
25
|
+
exports.SUPPORTED_ROW_FORMAT_VERSION = 1;
|
|
26
|
+
function rowVersionOf(row) {
|
|
27
|
+
return typeof row.v === 'number' ? row.v : 0;
|
|
28
|
+
}
|
|
29
|
+
function assertReadableRow(row, what) {
|
|
30
|
+
const version = rowVersionOf(row);
|
|
31
|
+
if (version <= exports.SUPPORTED_ROW_FORMAT_VERSION)
|
|
32
|
+
return;
|
|
33
|
+
throw new base_error_js_1.DynamoDBLangGraphError(`this ${what} row was written in format version ${version}; this version of the library ` +
|
|
34
|
+
`reads up to ${exports.SUPPORTED_ROW_FORMAT_VERSION} — upgrade to read it`, error_code_js_1.ErrorCode.FORMAT_UNSUPPORTED, { field: 'v' });
|
|
35
|
+
}
|
|
36
|
+
function isExpiredRow(row, nowSeconds) {
|
|
37
|
+
return row.ttl !== undefined && row.ttl <= nowSeconds;
|
|
38
|
+
}
|
|
39
|
+
const TTL_FILTER = 'attribute_not_exists(#ttl) OR #ttl > :now';
|
|
40
|
+
function withoutExpired(params, nowSeconds) {
|
|
41
|
+
return {
|
|
42
|
+
...params,
|
|
43
|
+
FilterExpression: params.FilterExpression
|
|
44
|
+
? `(${params.FilterExpression}) AND (${TTL_FILTER})`
|
|
45
|
+
: TTL_FILTER,
|
|
46
|
+
ExpressionAttributeNames: { ...params.ExpressionAttributeNames, '#ttl': 'ttl' },
|
|
47
|
+
ExpressionAttributeValues: { ...params.ExpressionAttributeValues, ':now': nowSeconds },
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function compareSortKeys(left, right) {
|
|
51
|
+
return Buffer.compare(Buffer.from(left, 'utf8'), Buffer.from(right, 'utf8'));
|
|
52
|
+
}
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* throws — a string, `undefined`, an object — is turned into an `Error` before
|
|
8
8
|
* anything reads it.
|
|
9
9
|
*/
|
|
10
|
-
import type { WriteRequest } from '../dynamodb/client';
|
|
11
|
-
import { ErrorCode } from './error-code';
|
|
10
|
+
import type { WriteRequest } from '../dynamodb/client.js';
|
|
11
|
+
import { ErrorCode } from './error-code.js';
|
|
12
12
|
/**
|
|
13
13
|
* Structured, log-safe context attached to every library error. Identifiers
|
|
14
14
|
* and counts only — never a payload or a credential.
|
|
@@ -69,7 +69,12 @@ export interface BatchPassDetails {
|
|
|
69
69
|
export type BatchWriteIncompleteDetails = BatchDrainDetails | BatchPassDetails;
|
|
70
70
|
/** What a `COMPENSATION_FAILED` error reports besides its trigger, which is `cause`. */
|
|
71
71
|
export interface CompensationFailedDetails {
|
|
72
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* Why the append could not be undone or settled: the rollback's own
|
|
74
|
+
* failure (itself often a `BATCH_WRITE_INCOMPLETE`), the read-back's
|
|
75
|
+
* failure, or the write's own failure when some attempt of it may still
|
|
76
|
+
* be applied.
|
|
77
|
+
*/
|
|
73
78
|
readonly rollbackError: Error;
|
|
74
79
|
}
|
|
75
80
|
/** The codes that carry details, and the shape each one carries. */
|
|
@@ -125,9 +130,11 @@ export type AnyDynamoDBLangGraphError = {
|
|
|
125
130
|
/**
|
|
126
131
|
* Whether `value` is one of this library's errors.
|
|
127
132
|
*
|
|
128
|
-
* Accepts:
|
|
129
|
-
*
|
|
130
|
-
* `
|
|
133
|
+
* Accepts: whatever a `catch` clause binds, as it is — an error from any realm
|
|
134
|
+
* or any copy of this package, and any other value a `throw` can produce:
|
|
135
|
+
* `null`, `undefined`, a string, a number, a symbol. Declared `unknown`
|
|
136
|
+
* because that is what `strict` types a `catch` binding, and the documented
|
|
137
|
+
* place to call this is the first line inside one.
|
|
131
138
|
*
|
|
132
139
|
* Returns: whether it carries the brand, narrowed to the union discriminated by
|
|
133
140
|
* `code`. A symbol registered by name, not `instanceof`: two copies of this
|
|
@@ -143,7 +150,7 @@ export type AnyDynamoDBLangGraphError = {
|
|
|
143
150
|
* a guard that throws inside the `catch` it was called from would replace the
|
|
144
151
|
* failure the caller is reporting with one of its own.
|
|
145
152
|
*/
|
|
146
|
-
export declare function isDynamoDBLangGraphError(value:
|
|
153
|
+
export declare function isDynamoDBLangGraphError(value: unknown): value is AnyDynamoDBLangGraphError;
|
|
147
154
|
/**
|
|
148
155
|
* Whether `value` is one of this library's errors carrying `code`.
|
|
149
156
|
*
|
|
@@ -157,6 +164,34 @@ export declare function isDynamoDBLangGraphError(value: Error): value is AnyDyna
|
|
|
157
164
|
* Throws: nothing, for any value.
|
|
158
165
|
*/
|
|
159
166
|
export declare function hasErrorCode<C extends ErrorCode>(value: Error, code: C): value is DynamoDBLangGraphError<C>;
|
|
167
|
+
/**
|
|
168
|
+
* A caller's own copy of a branded error that several concurrent callers would
|
|
169
|
+
* otherwise share — a cached rejected import, a cached rejected client build.
|
|
170
|
+
* Sharing the one instance is safe while nothing on the path back to a public
|
|
171
|
+
* method writes to it, but the public boundary does: it stamps
|
|
172
|
+
* `context.operation` and `context.tableName`, each independently when the
|
|
173
|
+
* error does not already carry it, in place, and a second caller reaching the
|
|
174
|
+
* same shared instance through a *different* public method would then find
|
|
175
|
+
* the first caller's operation and table already sitting in its own context,
|
|
176
|
+
* unable to write its own. Giving each
|
|
177
|
+
* caller its own instance up front — same `message`, `code`, `context` and
|
|
178
|
+
* `cause` — keeps the two from ever writing to one object. Not a general
|
|
179
|
+
* clone: an *unbranded* failure needs none, since `wrapForeignError`
|
|
180
|
+
* (`shared/errors/boundary.ts`) already builds a fresh wrapper for it at
|
|
181
|
+
* every boundary crossing, unlike a branded error, which crosses unwrapped.
|
|
182
|
+
*
|
|
183
|
+
* Accepts: `error` — anything a `catch` can bind.
|
|
184
|
+
*
|
|
185
|
+
* Returns: a new `DynamoDBLangGraphError` carrying the same `message`, `code`,
|
|
186
|
+
* `context`, `cause` and `details` as `error`, when `error` already was one;
|
|
187
|
+
* `error` itself, unchanged, for anything else. The copy does not carry
|
|
188
|
+
* `RETRY_EXHAUSTED`'s non-enumerable record of whether a write's retry budget
|
|
189
|
+
* may still land, so it is not for a budget error: a caller judging one asks
|
|
190
|
+
* the original.
|
|
191
|
+
*
|
|
192
|
+
* Throws: nothing, for any value.
|
|
193
|
+
*/
|
|
194
|
+
export declare function copyForCaller(error: Error): Error;
|
|
160
195
|
/**
|
|
161
196
|
* What a log line calls a failure.
|
|
162
197
|
*
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DynamoDBLangGraphError = void 0;
|
|
4
|
+
exports.isDynamoDBLangGraphError = isDynamoDBLangGraphError;
|
|
5
|
+
exports.hasErrorCode = hasErrorCode;
|
|
6
|
+
exports.copyForCaller = copyForCaller;
|
|
7
|
+
exports.failureLabel = failureLabel;
|
|
8
|
+
exports.toError = toError;
|
|
9
|
+
const error_code_js_1 = require("./error-code.js");
|
|
10
|
+
const ERROR_BRAND = Symbol.for('@farukada/aws-langgraph-dynamodb-ts/error');
|
|
11
|
+
function isList(field) {
|
|
12
|
+
return Array.isArray(field);
|
|
13
|
+
}
|
|
14
|
+
function copyDetails(details) {
|
|
15
|
+
if (details === null || typeof details !== 'object')
|
|
16
|
+
return details;
|
|
17
|
+
const fields = Object.entries(details);
|
|
18
|
+
return Object.fromEntries(fields.map(([key, value]) => [key, isList(value) ? [...value] : value]));
|
|
19
|
+
}
|
|
20
|
+
class DynamoDBLangGraphError extends Error {
|
|
21
|
+
code;
|
|
22
|
+
context;
|
|
23
|
+
constructor(message, code, context = {}, cause, details) {
|
|
24
|
+
super(message, cause === undefined ? undefined : { cause });
|
|
25
|
+
this.name = 'DynamoDBLangGraphError';
|
|
26
|
+
this.code = code;
|
|
27
|
+
this.context = { ...context };
|
|
28
|
+
if (details !== undefined)
|
|
29
|
+
this.details = copyDetails(details);
|
|
30
|
+
Object.defineProperty(this, ERROR_BRAND, { value: true, enumerable: false });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.DynamoDBLangGraphError = DynamoDBLangGraphError;
|
|
34
|
+
function isDynamoDBLangGraphError(value) {
|
|
35
|
+
return typeof value === 'object' && value !== null && ERROR_BRAND in value;
|
|
36
|
+
}
|
|
37
|
+
function hasErrorCode(value, code) {
|
|
38
|
+
return isDynamoDBLangGraphError(value) && value.code === code;
|
|
39
|
+
}
|
|
40
|
+
function copyForCaller(error) {
|
|
41
|
+
if (!isDynamoDBLangGraphError(error))
|
|
42
|
+
return error;
|
|
43
|
+
return new DynamoDBLangGraphError(error.message, error.code, error.context, error.cause, error.details);
|
|
44
|
+
}
|
|
45
|
+
function failureLabel(error) {
|
|
46
|
+
return isDynamoDBLangGraphError(error) ? error.code : error.name;
|
|
47
|
+
}
|
|
48
|
+
function describeThrown(value) {
|
|
49
|
+
if (typeof value === 'string')
|
|
50
|
+
return value;
|
|
51
|
+
if (value === undefined || value === null)
|
|
52
|
+
return `${String(value)} was thrown`;
|
|
53
|
+
try {
|
|
54
|
+
return JSON.stringify(value) ?? `a ${typeof value} value was thrown`;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return `an unserializable ${typeof value} value was thrown`;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function toError(value) {
|
|
61
|
+
if (value !== null && typeof value === 'object' && messageOf(value) !== undefined)
|
|
62
|
+
return value;
|
|
63
|
+
return new Error(describeThrown(value));
|
|
64
|
+
}
|
|
65
|
+
function messageOf(value) {
|
|
66
|
+
try {
|
|
67
|
+
const { message } = value;
|
|
68
|
+
return typeof message === 'string' ? message : undefined;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -2,30 +2,33 @@
|
|
|
2
2
|
* Hides what crosses the public boundary.
|
|
3
3
|
*
|
|
4
4
|
* Only this package's own error leaves a public method (record 13): an error of
|
|
5
|
-
* its own passes through
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* its own passes through, given the public operation and the table it surfaced
|
|
6
|
+
* through for whichever of the two it does not already name, and anything
|
|
7
|
+
* else — an SDK failure, a caller's thrown value — is classified and wrapped
|
|
8
|
+
* with its cause attached and its text redacted.
|
|
8
9
|
*/
|
|
9
|
-
import { type AnyDynamoDBLangGraphError, DynamoDBLangGraphError } from './base-error';
|
|
10
|
+
import { type AnyDynamoDBLangGraphError, DynamoDBLangGraphError } from './base-error.js';
|
|
10
11
|
/**
|
|
11
12
|
* Normalise anything escaping a public method into the library's error model.
|
|
12
13
|
*
|
|
13
14
|
* Accepts: anything a `catch` produced — an `Error`, or a value that is not one
|
|
14
|
-
* (`toError` settles that first).
|
|
15
|
+
* (`toError` settles that first). `operation` — the public method's name.
|
|
16
|
+
* `tableName` — the adapter's table, when the method has one.
|
|
15
17
|
*
|
|
16
|
-
* Returns: a branded library error
|
|
17
|
-
*
|
|
18
|
-
*
|
|
18
|
+
* Returns: a branded library error — the same one, when it already was one,
|
|
19
|
+
* with whichever of `context.operation` and `context.tableName` it does not
|
|
20
|
+
* already carry filled in — or anything else wrapped by {@link wrapForeignError}
|
|
21
|
+
* with the code the classifier assigns, stamped the same way.
|
|
19
22
|
*
|
|
20
23
|
* Throws: nothing. It runs inside a `catch`, where throwing would discard the
|
|
21
24
|
* failure being reported and replace it with its own.
|
|
22
25
|
*/
|
|
23
|
-
export declare function toPublicError(error: Error, operation: string): AnyDynamoDBLangGraphError;
|
|
26
|
+
export declare function toPublicError(error: Error, operation: string, tableName?: string): AnyDynamoDBLangGraphError;
|
|
24
27
|
/**
|
|
25
28
|
* Run a public operation so that every rejection is a library error.
|
|
26
29
|
*
|
|
27
|
-
* Accepts: `operation` — the public method's name, which the
|
|
28
|
-
*
|
|
30
|
+
* Accepts: `operation` — the public method's name, which the error carries.
|
|
31
|
+
* `fn` — the work. `tableName` — the adapter's table, which the error carries.
|
|
29
32
|
*
|
|
30
33
|
* Returns: whatever `fn` resolves to, untouched.
|
|
31
34
|
*
|
|
@@ -33,12 +36,12 @@ export declare function toPublicError(error: Error, operation: string): AnyDynam
|
|
|
33
36
|
* so internal code can keep rethrowing SDK errors verbatim — the retry
|
|
34
37
|
* classifier depends on their shape, and wrapping them early would blind it.
|
|
35
38
|
*/
|
|
36
|
-
export declare function guardPublic<T>(operation: string, fn: () => Promise<T
|
|
39
|
+
export declare function guardPublic<T>(operation: string, fn: () => Promise<T>, tableName?: string): Promise<T>;
|
|
37
40
|
/**
|
|
38
41
|
* The same guard for a streaming result.
|
|
39
42
|
*
|
|
40
43
|
* Accepts: `operation` — the public method's name. `source` — the generator to
|
|
41
|
-
* relay.
|
|
44
|
+
* relay. `tableName` — the adapter's table.
|
|
42
45
|
*
|
|
43
46
|
* Returns: a generator yielding the source's items untouched. A consumer that
|
|
44
47
|
* stops early still closes the source, so an abandoned listing stops reading
|
|
@@ -47,7 +50,19 @@ export declare function guardPublic<T>(operation: string, fn: () => Promise<T>):
|
|
|
47
50
|
* Throws: a library error, always — including for a failure raised
|
|
48
51
|
* mid-iteration, which is the case a `try` around the loop body would miss.
|
|
49
52
|
*/
|
|
50
|
-
export declare function guardPublicIterable<T>(operation: string, source: AsyncGenerator<T
|
|
53
|
+
export declare function guardPublicIterable<T>(operation: string, source: AsyncGenerator<T>, tableName?: string): AsyncGenerator<T>;
|
|
54
|
+
/**
|
|
55
|
+
* The same guard for a synchronous public method.
|
|
56
|
+
*
|
|
57
|
+
* Accepts: `operation` — the public method's name. `fn` — the work.
|
|
58
|
+
* `tableName` — the adapter's table.
|
|
59
|
+
*
|
|
60
|
+
* Returns: whatever `fn` returns.
|
|
61
|
+
*
|
|
62
|
+
* Throws: a library error, always — what a client's own `destroy` threw
|
|
63
|
+
* included, classified like any other foreign failure and kept as `cause`.
|
|
64
|
+
*/
|
|
65
|
+
export declare function guardPublicSync<T>(operation: string, fn: () => T, tableName?: string): T;
|
|
51
66
|
/**
|
|
52
67
|
* A failure from below this library, as one of its errors.
|
|
53
68
|
*
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toPublicError = toPublicError;
|
|
4
|
+
exports.guardPublic = guardPublic;
|
|
5
|
+
exports.guardPublicIterable = guardPublicIterable;
|
|
6
|
+
exports.guardPublicSync = guardPublicSync;
|
|
7
|
+
exports.wrapForeignError = wrapForeignError;
|
|
8
|
+
const secret_patterns_js_1 = require("../logging/secret-patterns.js");
|
|
9
|
+
const truncate_js_1 = require("../logging/truncate.js");
|
|
10
|
+
const base_error_js_1 = require("./base-error.js");
|
|
11
|
+
const classify_js_1 = require("./classify.js");
|
|
12
|
+
function stampContext(error, operation, tableName) {
|
|
13
|
+
const context = error.context;
|
|
14
|
+
if (typeof context !== 'object' || context === null)
|
|
15
|
+
return;
|
|
16
|
+
try {
|
|
17
|
+
context.operation ??= operation;
|
|
18
|
+
if (tableName !== undefined)
|
|
19
|
+
context.tableName ??= tableName;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function toPublicError(error, operation, tableName) {
|
|
25
|
+
const normalized = (0, base_error_js_1.toError)(error);
|
|
26
|
+
const publicError = (0, base_error_js_1.isDynamoDBLangGraphError)(normalized)
|
|
27
|
+
? normalized
|
|
28
|
+
: wrapForeignError(normalized, operation);
|
|
29
|
+
stampContext(publicError, operation, tableName);
|
|
30
|
+
return publicError;
|
|
31
|
+
}
|
|
32
|
+
async function guardPublic(operation, fn, tableName) {
|
|
33
|
+
try {
|
|
34
|
+
return await fn();
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
throw toPublicError(error, operation, tableName);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async function* guardPublicIterable(operation, source, tableName) {
|
|
41
|
+
try {
|
|
42
|
+
for await (const item of source)
|
|
43
|
+
yield item;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
throw toPublicError(error, operation, tableName);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function guardPublicSync(operation, fn, tableName) {
|
|
50
|
+
try {
|
|
51
|
+
return fn();
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
throw toPublicError(error, operation, tableName);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function wrapForeignError(cause, operation) {
|
|
58
|
+
const below = (0, base_error_js_1.toError)(cause);
|
|
59
|
+
const classifiable = (0, classify_js_1.classifiableCause)(below);
|
|
60
|
+
return new base_error_js_1.DynamoDBLangGraphError(`${operation}: ${(0, truncate_js_1.truncateForLog)(below.name)}: ${(0, secret_patterns_js_1.redactedMessage)(below)}`, (0, classify_js_1.classifyAwsError)(classifiable), { operation, ...(0, classify_js_1.awsDiagnostics)(classifiable) }, below);
|
|
61
|
+
}
|
|
@@ -0,0 +1,206 @@
|
|
|
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.js';
|
|
12
|
+
import { ErrorCode } from './error-code.js';
|
|
13
|
+
/** The fields an AWS SDK v3 error, or a transport error under it, can carry. */
|
|
14
|
+
/** The fields of an SDK error this module reads; exported for the retry layer's own walk. */
|
|
15
|
+
export interface AwsErrorFields {
|
|
16
|
+
name?: string;
|
|
17
|
+
code?: string;
|
|
18
|
+
message?: string;
|
|
19
|
+
$metadata?: {
|
|
20
|
+
httpStatusCode?: number;
|
|
21
|
+
requestId?: string;
|
|
22
|
+
clockSkewCorrected?: boolean;
|
|
23
|
+
} | null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The Node.js system error codes the SDK's own retry strategy treats as
|
|
27
|
+
* transient regardless of name (`@smithy/core` retry `NODEJS_TIMEOUT_ERROR_CODES`
|
|
28
|
+
* and `NODEJS_NETWORK_ERROR_CODES`). Matched on the error's own `code`.
|
|
29
|
+
*/
|
|
30
|
+
export declare const TRANSIENT_NETWORK_ERROR_CODES: readonly string[];
|
|
31
|
+
/**
|
|
32
|
+
* HTTP statuses the SDK retries regardless of name: throttling (429) and the
|
|
33
|
+
* transient server statuses (`@smithy/core` retry `TRANSIENT_ERROR_STATUS_CODES`).
|
|
34
|
+
* They classify an error the SDK could not map to a modeled exception, which
|
|
35
|
+
* arrives as `name: 'Unknown'` with only its status.
|
|
36
|
+
*/
|
|
37
|
+
export declare const TRANSIENT_HTTP_STATUSES: readonly number[];
|
|
38
|
+
/**
|
|
39
|
+
* AWS error name to code. Each name is declared by the installed
|
|
40
|
+
* `@aws-sdk/client-dynamodb` or `@aws-sdk/client-s3`, or documented on a page
|
|
41
|
+
* `test/static/aws-error-names.test.ts` cites; that test fails on any other.
|
|
42
|
+
*/
|
|
43
|
+
export declare const AWS_ERROR_CODES: Readonly<Record<string, ErrorCode>>;
|
|
44
|
+
/**
|
|
45
|
+
* The retry layer's default tokens: every name {@link AWS_ERROR_CODES} maps to
|
|
46
|
+
* a retryable code, and the network codes. Derived rather than listed, so the
|
|
47
|
+
* retry layer and the code a caller sees share one list of transient names.
|
|
48
|
+
* They differ at two edges: the retry layer also retries on the SDK's
|
|
49
|
+
* `$retryable` trait, which {@link classifyAwsError} does not read, and it
|
|
50
|
+
* walks the cause chain matching `errno` and `syscall` too, where the
|
|
51
|
+
* classifier reads one error's `name`, `code` and status.
|
|
52
|
+
*/
|
|
53
|
+
export declare const DEFAULT_RETRYABLE_ERRORS: readonly string[];
|
|
54
|
+
/**
|
|
55
|
+
* Whether the SDK itself would retry this signing failure.
|
|
56
|
+
*
|
|
57
|
+
* Accepts: `fields` — an error's own fields, as the SDK sets them.
|
|
58
|
+
*
|
|
59
|
+
* Returns: true when the SDK corrected its clock offset on the response
|
|
60
|
+
* (`$metadata.clockSkewCorrected`, set once the skew passes four minutes), or
|
|
61
|
+
* the service reports the signature expired (`InvalidSignatureException`
|
|
62
|
+
* saying so) — the SDK's own `isTransientError`, kept here because this
|
|
63
|
+
* package switches the SDK's retries off and would otherwise fail a host
|
|
64
|
+
* whose clock drifts on its first request, where a stock client recovers on
|
|
65
|
+
* the next.
|
|
66
|
+
*
|
|
67
|
+
* Throws: nothing.
|
|
68
|
+
*/
|
|
69
|
+
export declare function isCorrectedClockSkew(fields: AwsErrorFields): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* The code a failure that is not one of this library's own belongs to.
|
|
72
|
+
*
|
|
73
|
+
* Accepts: anything a `catch` can bind — an SDK error, a transport error, a
|
|
74
|
+
* value from caller-supplied code, `null`, a string.
|
|
75
|
+
*
|
|
76
|
+
* Returns: a transaction cancellation's code from its reasons (a sole
|
|
77
|
+
* `ConditionalCheckFailed` cause is `CONDITION_CONFLICT`; all-transient causes
|
|
78
|
+
* are `THROTTLED` or `CONTENTION`); otherwise `SERVICE_UNAVAILABLE` for a
|
|
79
|
+
* signing failure the SDK corrected its clock for or reports expired
|
|
80
|
+
* ({@link isCorrectedClockSkew}); otherwise the table's code for the error's
|
|
81
|
+
* own `name`; otherwise `SERVICE_UNAVAILABLE` for a transient network `code`;
|
|
82
|
+
* otherwise by HTTP status — 412 `CONDITION_CONFLICT`, 429 `THROTTLED`,
|
|
83
|
+
* 500/502/503/504 `SERVICE_UNAVAILABLE`; otherwise `AWS_REQUEST_FAILED` for an
|
|
84
|
+
* AWS-shaped error and `UNEXPECTED_ERROR` for anything else. Only the error's
|
|
85
|
+
* own fields are read, never its `cause`.
|
|
86
|
+
*
|
|
87
|
+
* Throws: nothing, for any value. It runs inside `catch` blocks.
|
|
88
|
+
*/
|
|
89
|
+
export declare function classifyAwsError(error: Error): ErrorCode;
|
|
90
|
+
/**
|
|
91
|
+
* How far a walk down a cause chain goes before giving up: deep enough for
|
|
92
|
+
* any chain a real failure builds, and a bound in case a `cause` loops
|
|
93
|
+
* through objects a `Set` of seen nodes cannot pair. Shared by
|
|
94
|
+
* {@link classifiableCause} and the retry layer's own walk.
|
|
95
|
+
*/
|
|
96
|
+
export declare const MAX_CAUSE_DEPTH = 32;
|
|
97
|
+
/**
|
|
98
|
+
* The node in `error`'s own cause chain — `error` itself, then its `cause`,
|
|
99
|
+
* then that error's own `cause`, and so on — that {@link classifyAwsError}
|
|
100
|
+
* does not answer `UNEXPECTED_ERROR` for.
|
|
101
|
+
*
|
|
102
|
+
* Accepts: `error` — the outermost failure to classify, already normalised by
|
|
103
|
+
* `toError`.
|
|
104
|
+
*
|
|
105
|
+
* Returns: the first node the classifier places under an AWS or network code,
|
|
106
|
+
* so a caller's own error wrapping a modeled SDK exception, an SDK error whose
|
|
107
|
+
* own `cause` is a raw transport failure, or a `RETRY_EXHAUSTED` error wrapping
|
|
108
|
+
* either as its own `cause`, still classifies — and still yields diagnostics —
|
|
109
|
+
* on the AWS/network failure underneath rather than losing it one level up —
|
|
110
|
+
* the same failure the retry layer's cause-chain walk (`isRetryableError` in
|
|
111
|
+
* `shared/dynamodb/retry.ts`) already sees. `error` itself when nothing in its
|
|
112
|
+
* chain classifies either. The walk gives up after {@link MAX_CAUSE_DEPTH}
|
|
113
|
+
* nodes, and a cycle in the chain stops it rather than looping, exactly as
|
|
114
|
+
* that other walk does.
|
|
115
|
+
*
|
|
116
|
+
* Throws: nothing, for any value `toError` can produce.
|
|
117
|
+
*/
|
|
118
|
+
export declare function classifiableCause(error: Error): Error;
|
|
119
|
+
/**
|
|
120
|
+
* The fields an operator needs first, lifted off an AWS-shaped error.
|
|
121
|
+
*
|
|
122
|
+
* Accepts: anything a `catch` can bind.
|
|
123
|
+
*
|
|
124
|
+
* Returns: `awsErrorName`, `requestId` and `httpStatusCode`, each only when
|
|
125
|
+
* present and well-typed, for an error carrying `$metadata` or a name the table
|
|
126
|
+
* knows or that ends in `Exception`; `{}` for anything else — a bare network
|
|
127
|
+
* failure included, since it may be a caller's own connection rather than AWS's.
|
|
128
|
+
*
|
|
129
|
+
* Throws: nothing, for any value.
|
|
130
|
+
*/
|
|
131
|
+
export declare function awsDiagnostics(error: Error): Pick<ErrorContext, 'awsErrorName' | 'requestId' | 'httpStatusCode'>;
|
|
132
|
+
/**
|
|
133
|
+
* Whether a failed request ended on this side, before the service answered it.
|
|
134
|
+
*
|
|
135
|
+
* Accepts: anything a `catch` can bind, and `undefined`.
|
|
136
|
+
*
|
|
137
|
+
* Returns: true when the failure, or a cause beneath it, is a cut this side
|
|
138
|
+
* made — the SDK's own `TimeoutError` or `AbortError`, or a Node network error
|
|
139
|
+
* such as `ECONNRESET` or `ETIMEDOUT` — and no node on the way carries the HTTP
|
|
140
|
+
* status of a response. The service may still apply a request cut that way
|
|
141
|
+
* after the caller has stopped waiting for it. False for everything else: a
|
|
142
|
+
* failure the service answered, and one that says nothing about the transport,
|
|
143
|
+
* such as a value a caller's own code threw. A cycle in the chain ends the walk.
|
|
144
|
+
*
|
|
145
|
+
* Throws: nothing, for any value.
|
|
146
|
+
*/
|
|
147
|
+
export declare function endedWithoutAnswer(error: Error | undefined): boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Whether one attempt's own failure leaves DynamoDB free to apply it later,
|
|
150
|
+
* judged from that attempt alone.
|
|
151
|
+
*
|
|
152
|
+
* Accepts: anything a `catch` can bind, and `undefined`.
|
|
153
|
+
*
|
|
154
|
+
* Returns: true when the attempt {@link endedWithoutAnswer}; when the service
|
|
155
|
+
* answered that its own earlier attempt under the same `ClientRequestToken`
|
|
156
|
+
* was still being processed (`TransactionInProgressException`); or when it
|
|
157
|
+
* answered with a server error, an HTTP 5xx. AWS says of a 500
|
|
158
|
+
* (`InternalServerError`) that the request "may have succeeded or failed", with
|
|
159
|
+
* no later point documented as settling it (DynamoDB Developer Guide, *Error
|
|
160
|
+
* handling*:
|
|
161
|
+
* https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.Errors.html);
|
|
162
|
+
* this library treats every 5xx the same way. False for a refusal, a throttle,
|
|
163
|
+
* or any other definite answer.
|
|
164
|
+
*
|
|
165
|
+
* Throws: nothing, for any value.
|
|
166
|
+
*/
|
|
167
|
+
export declare function mayStillBeInFlight(error: Error | undefined): boolean;
|
|
168
|
+
/**
|
|
169
|
+
* Whether the service refused a request outright, so that none of it was applied.
|
|
170
|
+
*
|
|
171
|
+
* Accepts: anything a `catch` can bind.
|
|
172
|
+
*
|
|
173
|
+
* Returns: true for a cancelled transaction — DynamoDB applies none of a
|
|
174
|
+
* transaction it cancels — and for a failure the classifier places under a
|
|
175
|
+
* refusal: a malformed request, a denied permission, a missing table or index,
|
|
176
|
+
* a failed condition. False for everything else, a spent retry budget and a
|
|
177
|
+
* cancel included, since neither says what the service did.
|
|
178
|
+
*
|
|
179
|
+
* Throws: nothing, for any value.
|
|
180
|
+
*/
|
|
181
|
+
export declare function refusedByService(error: Error): boolean;
|
|
182
|
+
/**
|
|
183
|
+
* Whether an S3 read failed because the object is gone.
|
|
184
|
+
*
|
|
185
|
+
* Accepts: anything a `catch` can bind.
|
|
186
|
+
*
|
|
187
|
+
* Returns: true for `NoSuchKey` only. `NOT_FOUND` also covers a missing
|
|
188
|
+
* bucket, which is a configuration fault; reading it as a lost payload would
|
|
189
|
+
* write off data that is still there.
|
|
190
|
+
*
|
|
191
|
+
* Throws: nothing, for any value.
|
|
192
|
+
*/
|
|
193
|
+
export declare function isMissingObject(error: Error): boolean;
|
|
194
|
+
/**
|
|
195
|
+
* Whether reading a bucket's lifecycle configuration failed because the bucket
|
|
196
|
+
* has none.
|
|
197
|
+
*
|
|
198
|
+
* Accepts: anything a `catch` can bind.
|
|
199
|
+
*
|
|
200
|
+
* Returns: true for `NoSuchLifecycleConfiguration` only. `NOT_FOUND` also
|
|
201
|
+
* covers a missing bucket, table or object; reading one of those as "no rules
|
|
202
|
+
* yet" would start a rule set for a bucket that is not there.
|
|
203
|
+
*
|
|
204
|
+
* Throws: nothing, for any value.
|
|
205
|
+
*/
|
|
206
|
+
export declare function isMissingLifecycleConfiguration(error: Error): boolean;
|