@farukada/aws-langgraph-dynamodb-ts 0.2.2 → 0.3.1
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 +224 -512
- package/dist/checkpointer/actions/delete-thread.d.ts +7 -6
- package/dist/checkpointer/actions/delete-thread.d.ts.map +1 -1
- package/dist/checkpointer/actions/delete-thread.js +47 -152
- package/dist/checkpointer/actions/delete-thread.js.map +1 -1
- package/dist/checkpointer/actions/get-tuple.d.ts +6 -14
- package/dist/checkpointer/actions/get-tuple.d.ts.map +1 -1
- package/dist/checkpointer/actions/get-tuple.js +13 -166
- package/dist/checkpointer/actions/get-tuple.js.map +1 -1
- package/dist/checkpointer/actions/list.d.ts +10 -0
- package/dist/checkpointer/actions/list.d.ts.map +1 -0
- package/dist/checkpointer/actions/list.js +51 -0
- package/dist/checkpointer/actions/list.js.map +1 -0
- package/dist/checkpointer/actions/put-writes.d.ts +6 -6
- package/dist/checkpointer/actions/put-writes.d.ts.map +1 -1
- package/dist/checkpointer/actions/put-writes.js +26 -75
- package/dist/checkpointer/actions/put-writes.js.map +1 -1
- package/dist/checkpointer/actions/put.d.ts +6 -11
- package/dist/checkpointer/actions/put.d.ts.map +1 -1
- package/dist/checkpointer/actions/put.js +29 -161
- package/dist/checkpointer/actions/put.js.map +1 -1
- package/dist/checkpointer/internal/assemble.d.ts +10 -0
- package/dist/checkpointer/internal/assemble.d.ts.map +1 -0
- package/dist/checkpointer/internal/assemble.js +37 -0
- package/dist/checkpointer/internal/assemble.js.map +1 -0
- package/dist/checkpointer/internal/configurable.d.ts +13 -0
- package/dist/checkpointer/internal/configurable.d.ts.map +1 -0
- package/dist/checkpointer/internal/configurable.js +23 -0
- package/dist/checkpointer/internal/configurable.js.map +1 -0
- package/dist/checkpointer/internal/fetch.d.ts +10 -0
- package/dist/checkpointer/internal/fetch.d.ts.map +1 -0
- package/dist/checkpointer/internal/fetch.js +46 -0
- package/dist/checkpointer/internal/fetch.js.map +1 -0
- package/dist/checkpointer/internal/filter-match.d.ts +12 -0
- package/dist/checkpointer/internal/filter-match.d.ts.map +1 -0
- package/dist/checkpointer/internal/filter-match.js +14 -0
- package/dist/checkpointer/internal/filter-match.js.map +1 -0
- package/dist/checkpointer/internal/item-reader.d.ts +10 -0
- package/dist/checkpointer/internal/item-reader.d.ts.map +1 -0
- package/dist/checkpointer/internal/item-reader.js +26 -0
- package/dist/checkpointer/internal/item-reader.js.map +1 -0
- package/dist/checkpointer/internal/item-writer.d.ts +14 -0
- package/dist/checkpointer/internal/item-writer.d.ts.map +1 -0
- package/dist/checkpointer/internal/item-writer.js +68 -0
- package/dist/checkpointer/internal/item-writer.js.map +1 -0
- package/dist/checkpointer/internal/keys.d.ts +15 -0
- package/dist/checkpointer/internal/keys.d.ts.map +1 -0
- package/dist/checkpointer/internal/keys.js +52 -0
- package/dist/checkpointer/internal/keys.js.map +1 -0
- package/dist/checkpointer/internal/query.d.ts +16 -0
- package/dist/checkpointer/internal/query.d.ts.map +1 -0
- package/dist/checkpointer/internal/query.js +33 -0
- package/dist/checkpointer/internal/query.js.map +1 -0
- package/dist/checkpointer/internal/setup.d.ts +31 -0
- package/dist/checkpointer/internal/setup.d.ts.map +1 -0
- package/dist/checkpointer/internal/setup.js +29 -0
- package/dist/checkpointer/internal/setup.js.map +1 -0
- package/dist/checkpointer/internal/validation.d.ts +9 -0
- package/dist/checkpointer/internal/validation.d.ts.map +1 -0
- package/dist/checkpointer/internal/validation.js +28 -0
- package/dist/checkpointer/internal/validation.js.map +1 -0
- package/dist/checkpointer/saver.d.ts +21 -0
- package/dist/checkpointer/saver.d.ts.map +1 -0
- package/dist/checkpointer/saver.js +49 -0
- package/dist/checkpointer/saver.js.map +1 -0
- package/dist/checkpointer/types.d.ts +43 -0
- package/dist/checkpointer/types.d.ts.map +1 -0
- package/dist/{store/types/index.js → checkpointer/types.js} +1 -1
- package/dist/checkpointer/types.js.map +1 -0
- package/dist/factory/factory.d.ts +41 -0
- package/dist/factory/factory.d.ts.map +1 -0
- package/dist/factory/factory.js +49 -0
- package/dist/factory/factory.js.map +1 -0
- package/dist/history/actions/add-messages.d.ts +12 -7
- package/dist/history/actions/add-messages.d.ts.map +1 -1
- package/dist/history/actions/add-messages.js +50 -48
- package/dist/history/actions/add-messages.js.map +1 -1
- package/dist/history/actions/clear.d.ts +5 -11
- package/dist/history/actions/clear.d.ts.map +1 -1
- package/dist/history/actions/clear.js +28 -62
- package/dist/history/actions/clear.js.map +1 -1
- package/dist/history/actions/get-messages.d.ts +6 -13
- package/dist/history/actions/get-messages.d.ts.map +1 -1
- package/dist/history/actions/get-messages.js +23 -59
- package/dist/history/actions/get-messages.js.map +1 -1
- package/dist/history/actions/list-sessions.d.ts +6 -22
- package/dist/history/actions/list-sessions.d.ts.map +1 -1
- package/dist/history/actions/list-sessions.js +26 -69
- package/dist/history/actions/list-sessions.js.map +1 -1
- package/dist/history/actions/reconcile-count.d.ts +10 -0
- package/dist/history/actions/reconcile-count.d.ts.map +1 -0
- package/dist/history/actions/reconcile-count.js +39 -0
- package/dist/history/actions/reconcile-count.js.map +1 -0
- package/dist/history/chat-message-history.d.ts +36 -0
- package/dist/history/chat-message-history.d.ts.map +1 -0
- package/dist/history/chat-message-history.js +67 -0
- package/dist/history/chat-message-history.js.map +1 -0
- package/dist/history/internal/append-saga.d.ts +17 -0
- package/dist/history/internal/append-saga.d.ts.map +1 -0
- package/dist/history/internal/append-saga.js +94 -0
- package/dist/history/internal/append-saga.js.map +1 -0
- package/dist/history/internal/item-mapper.d.ts +12 -0
- package/dist/history/internal/item-mapper.d.ts.map +1 -0
- package/dist/history/internal/item-mapper.js +33 -0
- package/dist/history/internal/item-mapper.js.map +1 -0
- package/dist/history/internal/keys.d.ts +9 -0
- package/dist/history/internal/keys.d.ts.map +1 -0
- package/dist/history/internal/keys.js +22 -0
- package/dist/history/internal/keys.js.map +1 -0
- package/dist/history/internal/message-chunker.d.ts +14 -0
- package/dist/history/internal/message-chunker.d.ts.map +1 -0
- package/dist/history/internal/message-chunker.js +60 -0
- package/dist/history/internal/message-chunker.js.map +1 -0
- package/dist/history/internal/message-transaction.d.ts +17 -0
- package/dist/history/internal/message-transaction.d.ts.map +1 -0
- package/dist/history/internal/message-transaction.js +27 -0
- package/dist/history/internal/message-transaction.js.map +1 -0
- package/dist/history/internal/query.d.ts +6 -0
- package/dist/history/internal/query.d.ts.map +1 -0
- package/dist/history/internal/query.js +28 -0
- package/dist/history/internal/query.js.map +1 -0
- package/dist/history/internal/session-update.d.ts +20 -0
- package/dist/history/internal/session-update.d.ts.map +1 -0
- package/dist/history/internal/session-update.js +46 -0
- package/dist/history/internal/session-update.js.map +1 -0
- package/dist/history/internal/setup.d.ts +28 -0
- package/dist/history/internal/setup.d.ts.map +1 -0
- package/dist/history/internal/setup.js +27 -0
- package/dist/history/internal/setup.js.map +1 -0
- package/dist/history/internal/title-generator.d.ts +7 -0
- package/dist/history/internal/title-generator.d.ts.map +1 -0
- package/dist/history/internal/title-generator.js +16 -0
- package/dist/history/internal/title-generator.js.map +1 -0
- package/dist/history/internal/ttl-anchor.d.ts +12 -0
- package/dist/history/internal/ttl-anchor.d.ts.map +1 -0
- package/dist/history/internal/ttl-anchor.js +26 -0
- package/dist/history/internal/ttl-anchor.js.map +1 -0
- package/dist/history/session-adapter.d.ts +10 -26
- package/dist/history/session-adapter.d.ts.map +1 -1
- package/dist/history/session-adapter.js +15 -57
- package/dist/history/session-adapter.js.map +1 -1
- package/dist/history/types.d.ts +36 -0
- package/dist/history/types.d.ts.map +1 -0
- package/dist/history/types.js +3 -0
- package/dist/history/types.js.map +1 -0
- package/dist/index.d.ts +18 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -16
- package/dist/index.js.map +1 -1
- package/dist/shared/clock.d.ts +3 -0
- package/dist/shared/clock.d.ts.map +1 -0
- package/dist/shared/clock.js +8 -0
- package/dist/shared/clock.js.map +1 -0
- package/dist/shared/codec/codec.d.ts +44 -0
- package/dist/shared/codec/codec.d.ts.map +1 -0
- package/dist/shared/codec/codec.js +44 -0
- package/dist/shared/codec/codec.js.map +1 -0
- package/dist/shared/codec/compression.d.ts +25 -0
- package/dist/shared/codec/compression.d.ts.map +1 -0
- package/dist/shared/codec/compression.js +49 -0
- package/dist/shared/codec/compression.js.map +1 -0
- package/dist/shared/codec/descriptor-keys.d.ts +4 -0
- package/dist/shared/codec/descriptor-keys.d.ts.map +1 -0
- package/dist/shared/codec/descriptor-keys.js +14 -0
- package/dist/shared/codec/descriptor-keys.js.map +1 -0
- package/dist/shared/codec/json-serde.d.ts +8 -0
- package/dist/shared/codec/json-serde.d.ts.map +1 -0
- package/dist/shared/codec/json-serde.js +18 -0
- package/dist/shared/codec/json-serde.js.map +1 -0
- package/dist/shared/codec/s3/client.d.ts +6 -0
- package/dist/shared/codec/s3/client.d.ts.map +1 -0
- package/dist/shared/codec/s3/client.js +18 -0
- package/dist/shared/codec/s3/client.js.map +1 -0
- package/dist/shared/codec/s3/config.d.ts +16 -0
- package/dist/shared/codec/s3/config.d.ts.map +1 -0
- package/dist/shared/codec/s3/config.js +14 -0
- package/dist/shared/codec/s3/config.js.map +1 -0
- package/dist/shared/codec/s3/delete.d.ts +8 -0
- package/dist/shared/codec/s3/delete.d.ts.map +1 -0
- package/dist/shared/codec/s3/delete.js +29 -0
- package/dist/shared/codec/s3/delete.js.map +1 -0
- package/dist/shared/codec/s3/lifecycle.d.ts +8 -0
- package/dist/shared/codec/s3/lifecycle.d.ts.map +1 -0
- package/dist/shared/codec/s3/lifecycle.js +47 -0
- package/dist/shared/codec/s3/lifecycle.js.map +1 -0
- package/dist/shared/codec/s3/offloader.d.ts +33 -0
- package/dist/shared/codec/s3/offloader.d.ts.map +1 -0
- package/dist/shared/codec/s3/offloader.js +80 -0
- package/dist/shared/codec/s3/offloader.js.map +1 -0
- package/dist/shared/codec/s3/orphans.d.ts +16 -0
- package/dist/shared/codec/s3/orphans.d.ts.map +1 -0
- package/dist/shared/codec/s3/orphans.js +73 -0
- package/dist/shared/codec/s3/orphans.js.map +1 -0
- package/dist/shared/codec/s3/read-write.d.ts +14 -0
- package/dist/shared/codec/s3/read-write.d.ts.map +1 -0
- package/dist/shared/codec/s3/read-write.js +42 -0
- package/dist/shared/codec/s3/read-write.js.map +1 -0
- package/dist/shared/constants.d.ts +37 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +40 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/dynamodb/backoff.d.ts +15 -0
- package/dist/shared/dynamodb/backoff.d.ts.map +1 -0
- package/dist/shared/dynamodb/backoff.js +48 -0
- package/dist/shared/dynamodb/backoff.js.map +1 -0
- package/dist/shared/dynamodb/batch-write.d.ts +10 -0
- package/dist/shared/dynamodb/batch-write.d.ts.map +1 -0
- package/dist/shared/dynamodb/batch-write.js +17 -0
- package/dist/shared/dynamodb/batch-write.js.map +1 -0
- package/dist/shared/dynamodb/client.d.ts +21 -0
- package/dist/shared/dynamodb/client.d.ts.map +1 -0
- package/dist/shared/dynamodb/client.js +19 -0
- package/dist/shared/dynamodb/client.js.map +1 -0
- package/dist/shared/dynamodb/drain-unprocessed.d.ts +15 -0
- package/dist/shared/dynamodb/drain-unprocessed.d.ts.map +1 -0
- package/dist/shared/dynamodb/drain-unprocessed.js +35 -0
- package/dist/shared/dynamodb/drain-unprocessed.js.map +1 -0
- package/dist/shared/dynamodb/paginate-core.d.ts +22 -0
- package/dist/shared/dynamodb/paginate-core.d.ts.map +1 -0
- package/dist/shared/dynamodb/paginate-core.js +52 -0
- package/dist/shared/dynamodb/paginate-core.js.map +1 -0
- package/dist/shared/dynamodb/paginate.d.ts +15 -0
- package/dist/shared/dynamodb/paginate.d.ts.map +1 -0
- package/dist/shared/dynamodb/paginate.js +20 -0
- package/dist/shared/dynamodb/paginate.js.map +1 -0
- package/dist/shared/dynamodb/retry-classifier.d.ts +9 -0
- package/dist/shared/dynamodb/retry-classifier.d.ts.map +1 -0
- package/dist/shared/dynamodb/retry-classifier.js +75 -0
- package/dist/shared/dynamodb/retry-classifier.js.map +1 -0
- package/dist/shared/dynamodb/retry.d.ts +18 -0
- package/dist/shared/dynamodb/retry.d.ts.map +1 -0
- package/dist/shared/dynamodb/retry.js +53 -0
- package/dist/shared/dynamodb/retry.js.map +1 -0
- package/dist/shared/dynamodb/scan.d.ts +15 -0
- package/dist/shared/dynamodb/scan.d.ts.map +1 -0
- package/dist/shared/dynamodb/scan.js +20 -0
- package/dist/shared/dynamodb/scan.js.map +1 -0
- package/dist/shared/dynamodb/types.d.ts +24 -0
- package/dist/shared/dynamodb/types.d.ts.map +1 -0
- package/dist/shared/dynamodb/types.js +3 -0
- package/dist/shared/dynamodb/types.js.map +1 -0
- package/dist/shared/errors/base-error.d.ts +22 -0
- package/dist/shared/errors/base-error.d.ts.map +1 -0
- package/dist/shared/errors/base-error.js +28 -0
- package/dist/shared/errors/base-error.js.map +1 -0
- package/dist/shared/errors/error-code.d.ts +13 -0
- package/dist/shared/errors/error-code.d.ts.map +1 -0
- package/dist/shared/errors/error-code.js +17 -0
- package/dist/shared/errors/error-code.js.map +1 -0
- package/dist/shared/errors/errors.d.ts +47 -0
- package/dist/shared/errors/errors.d.ts.map +1 -0
- package/dist/shared/errors/errors.js +82 -0
- package/dist/shared/errors/errors.js.map +1 -0
- package/dist/shared/errors/wrap-error.d.ts +16 -0
- package/dist/shared/errors/wrap-error.d.ts.map +1 -0
- package/dist/shared/errors/wrap-error.js +30 -0
- package/dist/shared/errors/wrap-error.js.map +1 -0
- package/dist/shared/logging/logger.d.ts +14 -0
- package/dist/shared/logging/logger.d.ts.map +1 -0
- package/dist/shared/logging/logger.js +16 -0
- package/dist/shared/logging/logger.js.map +1 -0
- package/dist/shared/logging/redaction.d.ts +19 -0
- package/dist/shared/logging/redaction.d.ts.map +1 -0
- package/dist/shared/logging/redaction.js +67 -0
- package/dist/shared/logging/redaction.js.map +1 -0
- package/dist/shared/options.d.ts +32 -0
- package/dist/shared/options.d.ts.map +1 -0
- package/dist/shared/options.js +3 -0
- package/dist/shared/options.js.map +1 -0
- package/dist/shared/ulid.d.ts +10 -0
- package/dist/shared/ulid.d.ts.map +1 -0
- package/dist/shared/ulid.js +65 -0
- package/dist/shared/ulid.js.map +1 -0
- package/dist/shared/validation/primitives.d.ts +17 -0
- package/dist/shared/validation/primitives.d.ts.map +1 -0
- package/dist/shared/validation/primitives.js +71 -0
- package/dist/shared/validation/primitives.js.map +1 -0
- package/dist/shared/validation/ttl.d.ts +16 -0
- package/dist/shared/validation/ttl.d.ts.map +1 -0
- package/dist/shared/validation/ttl.js +26 -0
- package/dist/shared/validation/ttl.js.map +1 -0
- package/dist/store/actions/get.d.ts +5 -0
- package/dist/store/actions/get.d.ts.map +1 -0
- package/dist/store/actions/get.js +21 -0
- package/dist/store/actions/get.js.map +1 -0
- package/dist/store/actions/list-namespaces.d.ts +9 -0
- package/dist/store/actions/list-namespaces.d.ts.map +1 -0
- package/dist/store/actions/list-namespaces.js +46 -0
- package/dist/store/actions/list-namespaces.js.map +1 -0
- package/dist/store/actions/put.d.ts +11 -0
- package/dist/store/actions/put.d.ts.map +1 -0
- package/dist/store/actions/put.js +81 -0
- package/dist/store/actions/put.js.map +1 -0
- package/dist/store/actions/reconcile-vector-index.d.ts +17 -0
- package/dist/store/actions/reconcile-vector-index.d.ts.map +1 -0
- package/dist/store/actions/reconcile-vector-index.js +27 -0
- package/dist/store/actions/reconcile-vector-index.js.map +1 -0
- package/dist/store/actions/search.d.ts +10 -0
- package/dist/store/actions/search.d.ts.map +1 -0
- package/dist/store/actions/search.js +72 -0
- package/dist/store/actions/search.js.map +1 -0
- package/dist/store/internal/filter.d.ts +10 -0
- package/dist/store/internal/filter.d.ts.map +1 -0
- package/dist/store/internal/filter.js +37 -0
- package/dist/store/internal/filter.js.map +1 -0
- package/dist/store/internal/index-reconcile.d.ts +22 -0
- package/dist/store/internal/index-reconcile.d.ts.map +1 -0
- package/dist/store/internal/index-reconcile.js +68 -0
- package/dist/store/internal/index-reconcile.js.map +1 -0
- package/dist/store/internal/index-sync.d.ts +11 -0
- package/dist/store/internal/index-sync.d.ts.map +1 -0
- package/dist/store/internal/index-sync.js +26 -0
- package/dist/store/internal/index-sync.js.map +1 -0
- package/dist/store/internal/item-mapper.d.ts +23 -0
- package/dist/store/internal/item-mapper.d.ts.map +1 -0
- package/dist/store/internal/item-mapper.js +51 -0
- package/dist/store/internal/item-mapper.js.map +1 -0
- package/dist/store/internal/keys.d.ts +18 -0
- package/dist/store/internal/keys.d.ts.map +1 -0
- package/dist/store/internal/keys.js +36 -0
- package/dist/store/internal/keys.js.map +1 -0
- package/dist/store/internal/namespace-match.d.ts +12 -0
- package/dist/store/internal/namespace-match.d.ts.map +1 -0
- package/dist/store/internal/namespace-match.js +41 -0
- package/dist/store/internal/namespace-match.js.map +1 -0
- package/dist/store/internal/query.d.ts +6 -0
- package/dist/store/internal/query.d.ts.map +1 -0
- package/dist/store/internal/query.js +32 -0
- package/dist/store/internal/query.js.map +1 -0
- package/dist/store/internal/ranker.d.ts +13 -0
- package/dist/store/internal/ranker.d.ts.map +1 -0
- package/dist/store/internal/ranker.js +29 -0
- package/dist/store/internal/ranker.js.map +1 -0
- package/dist/store/internal/semantic-search.d.ts +13 -0
- package/dist/store/internal/semantic-search.d.ts.map +1 -0
- package/dist/store/internal/semantic-search.js +47 -0
- package/dist/store/internal/semantic-search.js.map +1 -0
- package/dist/store/internal/setup.d.ts +31 -0
- package/dist/store/internal/setup.d.ts.map +1 -0
- package/dist/store/internal/setup.js +29 -0
- package/dist/store/internal/setup.js.map +1 -0
- package/dist/store/internal/validation.d.ts +7 -0
- package/dist/store/internal/validation.d.ts.map +1 -0
- package/dist/store/internal/validation.js +26 -0
- package/dist/store/internal/validation.js.map +1 -0
- package/dist/store/store.d.ts +24 -0
- package/dist/store/store.d.ts.map +1 -0
- package/dist/store/store.js +58 -0
- package/dist/store/store.js.map +1 -0
- package/dist/store/types.d.ts +28 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +3 -0
- package/dist/store/types.js.map +1 -0
- package/dist/store/vector-backend.d.ts +27 -0
- package/dist/store/vector-backend.d.ts.map +1 -0
- package/dist/store/vector-backend.js +3 -0
- package/dist/store/vector-backend.js.map +1 -0
- package/package.json +21 -22
- package/dist/checkpointer/actions/index.d.ts +0 -5
- package/dist/checkpointer/actions/index.d.ts.map +0 -1
- package/dist/checkpointer/actions/index.js +0 -21
- package/dist/checkpointer/actions/index.js.map +0 -1
- package/dist/checkpointer/actions/validate-configurable.d.ts +0 -10
- package/dist/checkpointer/actions/validate-configurable.d.ts.map +0 -1
- package/dist/checkpointer/actions/validate-configurable.js +0 -39
- package/dist/checkpointer/actions/validate-configurable.js.map +0 -1
- package/dist/checkpointer/actions/writer.d.ts +0 -52
- package/dist/checkpointer/actions/writer.d.ts.map +0 -1
- package/dist/checkpointer/actions/writer.js +0 -109
- package/dist/checkpointer/actions/writer.js.map +0 -1
- package/dist/checkpointer/index.d.ts +0 -118
- package/dist/checkpointer/index.d.ts.map +0 -1
- package/dist/checkpointer/index.js +0 -393
- package/dist/checkpointer/index.js.map +0 -1
- package/dist/checkpointer/types/index.d.ts +0 -232
- package/dist/checkpointer/types/index.d.ts.map +0 -1
- package/dist/checkpointer/types/index.js +0 -13
- package/dist/checkpointer/types/index.js.map +0 -1
- package/dist/checkpointer/utils/deserialization.d.ts +0 -20
- package/dist/checkpointer/utils/deserialization.d.ts.map +0 -1
- package/dist/checkpointer/utils/deserialization.js +0 -81
- package/dist/checkpointer/utils/deserialization.js.map +0 -1
- package/dist/checkpointer/utils/index.d.ts +0 -7
- package/dist/checkpointer/utils/index.d.ts.map +0 -1
- package/dist/checkpointer/utils/index.js +0 -27
- package/dist/checkpointer/utils/index.js.map +0 -1
- package/dist/checkpointer/utils/validation.d.ts +0 -48
- package/dist/checkpointer/utils/validation.d.ts.map +0 -1
- package/dist/checkpointer/utils/validation.js +0 -235
- package/dist/checkpointer/utils/validation.js.map +0 -1
- package/dist/factory.d.ts +0 -153
- package/dist/factory.d.ts.map +0 -1
- package/dist/factory.js +0 -206
- package/dist/factory.js.map +0 -1
- package/dist/history/actions/add-message.d.ts +0 -10
- package/dist/history/actions/add-message.d.ts.map +0 -1
- package/dist/history/actions/add-message.js +0 -24
- package/dist/history/actions/add-message.js.map +0 -1
- package/dist/history/actions/index.d.ts +0 -9
- package/dist/history/actions/index.d.ts.map +0 -1
- package/dist/history/actions/index.js +0 -17
- package/dist/history/actions/index.js.map +0 -1
- package/dist/history/index.d.ts +0 -118
- package/dist/history/index.d.ts.map +0 -1
- package/dist/history/index.js +0 -179
- package/dist/history/index.js.map +0 -1
- package/dist/history/types/index.d.ts +0 -184
- package/dist/history/types/index.d.ts.map +0 -1
- package/dist/history/types/index.js +0 -7
- package/dist/history/types/index.js.map +0 -1
- package/dist/history/utils/index.d.ts +0 -9
- package/dist/history/utils/index.d.ts.map +0 -1
- package/dist/history/utils/index.js +0 -27
- package/dist/history/utils/index.js.map +0 -1
- package/dist/history/utils/optimistic-retry.d.ts +0 -31
- package/dist/history/utils/optimistic-retry.d.ts.map +0 -1
- package/dist/history/utils/optimistic-retry.js +0 -74
- package/dist/history/utils/optimistic-retry.js.map +0 -1
- package/dist/history/utils/title-generator.d.ts +0 -12
- package/dist/history/utils/title-generator.d.ts.map +0 -1
- package/dist/history/utils/title-generator.js +0 -57
- package/dist/history/utils/title-generator.js.map +0 -1
- package/dist/history/utils/update-expression-builder.d.ts +0 -55
- package/dist/history/utils/update-expression-builder.d.ts.map +0 -1
- package/dist/history/utils/update-expression-builder.js +0 -112
- package/dist/history/utils/update-expression-builder.js.map +0 -1
- package/dist/history/utils/validation.d.ts +0 -68
- package/dist/history/utils/validation.d.ts.map +0 -1
- package/dist/history/utils/validation.js +0 -213
- package/dist/history/utils/validation.js.map +0 -1
- package/dist/shared/index.d.ts +0 -5
- package/dist/shared/index.d.ts.map +0 -1
- package/dist/shared/index.js +0 -21
- package/dist/shared/index.js.map +0 -1
- package/dist/shared/utils/batch-write.d.ts +0 -74
- package/dist/shared/utils/batch-write.d.ts.map +0 -1
- package/dist/shared/utils/batch-write.js +0 -110
- package/dist/shared/utils/batch-write.js.map +0 -1
- package/dist/shared/utils/client-factory.d.ts +0 -25
- package/dist/shared/utils/client-factory.d.ts.map +0 -1
- package/dist/shared/utils/client-factory.js +0 -23
- package/dist/shared/utils/client-factory.js.map +0 -1
- package/dist/shared/utils/compressor.d.ts +0 -66
- package/dist/shared/utils/compressor.d.ts.map +0 -1
- package/dist/shared/utils/compressor.js +0 -133
- package/dist/shared/utils/compressor.js.map +0 -1
- package/dist/shared/utils/constants.d.ts +0 -13
- package/dist/shared/utils/constants.d.ts.map +0 -1
- package/dist/shared/utils/constants.js +0 -35
- package/dist/shared/utils/constants.js.map +0 -1
- package/dist/shared/utils/index.d.ts +0 -14
- package/dist/shared/utils/index.d.ts.map +0 -1
- package/dist/shared/utils/index.js +0 -30
- package/dist/shared/utils/index.js.map +0 -1
- package/dist/shared/utils/logger.d.ts +0 -75
- package/dist/shared/utils/logger.d.ts.map +0 -1
- package/dist/shared/utils/logger.js +0 -148
- package/dist/shared/utils/logger.js.map +0 -1
- package/dist/shared/utils/retry.d.ts +0 -26
- package/dist/shared/utils/retry.d.ts.map +0 -1
- package/dist/shared/utils/retry.js +0 -169
- package/dist/shared/utils/retry.js.map +0 -1
- package/dist/shared/utils/s3-offloader.d.ts +0 -153
- package/dist/shared/utils/s3-offloader.d.ts.map +0 -1
- package/dist/shared/utils/s3-offloader.js +0 -281
- package/dist/shared/utils/s3-offloader.js.map +0 -1
- package/dist/shared/utils/s3-orphans.d.ts +0 -16
- package/dist/shared/utils/s3-orphans.d.ts.map +0 -1
- package/dist/shared/utils/s3-orphans.js +0 -79
- package/dist/shared/utils/s3-orphans.js.map +0 -1
- package/dist/shared/utils/sleep.d.ts +0 -48
- package/dist/shared/utils/sleep.d.ts.map +0 -1
- package/dist/shared/utils/sleep.js +0 -82
- package/dist/shared/utils/sleep.js.map +0 -1
- package/dist/shared/utils/ttl.d.ts +0 -24
- package/dist/shared/utils/ttl.d.ts.map +0 -1
- package/dist/shared/utils/ttl.js +0 -43
- package/dist/shared/utils/ttl.js.map +0 -1
- package/dist/store/actions/get-operation.d.ts +0 -11
- package/dist/store/actions/get-operation.d.ts.map +0 -1
- package/dist/store/actions/get-operation.js +0 -42
- package/dist/store/actions/get-operation.js.map +0 -1
- package/dist/store/actions/index.d.ts +0 -5
- package/dist/store/actions/index.d.ts.map +0 -1
- package/dist/store/actions/index.js +0 -21
- package/dist/store/actions/index.js.map +0 -1
- package/dist/store/actions/list-namespaces-operation.d.ts +0 -10
- package/dist/store/actions/list-namespaces-operation.d.ts.map +0 -1
- package/dist/store/actions/list-namespaces-operation.js +0 -227
- package/dist/store/actions/list-namespaces-operation.js.map +0 -1
- package/dist/store/actions/put-operation.d.ts +0 -9
- package/dist/store/actions/put-operation.d.ts.map +0 -1
- package/dist/store/actions/put-operation.js +0 -107
- package/dist/store/actions/put-operation.js.map +0 -1
- package/dist/store/actions/search-operation.d.ts +0 -17
- package/dist/store/actions/search-operation.d.ts.map +0 -1
- package/dist/store/actions/search-operation.js +0 -203
- package/dist/store/actions/search-operation.js.map +0 -1
- package/dist/store/index.d.ts +0 -82
- package/dist/store/index.d.ts.map +0 -1
- package/dist/store/index.js +0 -172
- package/dist/store/index.js.map +0 -1
- package/dist/store/types/index.d.ts +0 -131
- package/dist/store/types/index.d.ts.map +0 -1
- package/dist/store/types/index.js.map +0 -1
- package/dist/store/utils/filter.d.ts +0 -16
- package/dist/store/utils/filter.d.ts.map +0 -1
- package/dist/store/utils/filter.js +0 -133
- package/dist/store/utils/filter.js.map +0 -1
- package/dist/store/utils/index.d.ts +0 -7
- package/dist/store/utils/index.d.ts.map +0 -1
- package/dist/store/utils/index.js +0 -27
- package/dist/store/utils/index.js.map +0 -1
- package/dist/store/utils/validation.d.ts +0 -61
- package/dist/store/utils/validation.d.ts.map +0 -1
- package/dist/store/utils/validation.js +0 -260
- package/dist/store/utils/validation.js.map +0 -1
|
@@ -1,281 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* S3 offloader for large checkpoint payloads
|
|
4
|
-
*
|
|
5
|
-
* DynamoDB has a hard 400KB item size limit. This utility transparently
|
|
6
|
-
* offloads payloads exceeding a configurable threshold (default: 350KB)
|
|
7
|
-
* to S3, storing only an S3 key reference in DynamoDB.
|
|
8
|
-
*
|
|
9
|
-
* Requires `@aws-sdk/client-s3` as an optional peer dependency.
|
|
10
|
-
*
|
|
11
|
-
* @remarks
|
|
12
|
-
* This module uses synchronous `require()` for lazy loading of the S3 SDK
|
|
13
|
-
* to avoid making the DynamoDBSaver constructor async. This means it
|
|
14
|
-
* requires a CommonJS-compatible environment (Node.js with CJS, or a
|
|
15
|
-
* bundler that polyfills require). Pure ESM environments are not supported.
|
|
16
|
-
*/
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.S3Offloader = void 0;
|
|
19
|
-
const logger_1 = require("./logger");
|
|
20
|
-
/** Default threshold: 350KB (leaves 50KB headroom below DynamoDB's 400KB limit) */
|
|
21
|
-
const DEFAULT_THRESHOLD_BYTES = 350 * 1024;
|
|
22
|
-
/** Default S3 key prefix for offloaded payloads */
|
|
23
|
-
const DEFAULT_KEY_PREFIX = 'langgraph-checkpoints/';
|
|
24
|
-
/**
|
|
25
|
-
* Default server-side encryption. Matches S3's own default (SSE-S3, AES256) since
|
|
26
|
-
* January 2023, but asserting it on the PutObject makes the intent explicit for
|
|
27
|
-
* compliance reviews and protects users running against older buckets or custom
|
|
28
|
-
* endpoints that don't inherit the modern default.
|
|
29
|
-
*/
|
|
30
|
-
const DEFAULT_SERVER_SIDE_ENCRYPTION = 'AES256';
|
|
31
|
-
/* eslint-disable @typescript-eslint/no-require-imports -- TODO: migrate to dynamic import() when Jest ESM support is stable */
|
|
32
|
-
// Lazy-loaded S3 SDK — uses require() for Jest CJS compatibility.
|
|
33
|
-
// Replace with import() when the test runner supports --experimental-vm-modules.
|
|
34
|
-
let s3Sdk;
|
|
35
|
-
function getS3Sdk() {
|
|
36
|
-
if (!s3Sdk) {
|
|
37
|
-
s3Sdk = require('@aws-sdk/client-s3');
|
|
38
|
-
}
|
|
39
|
-
return s3Sdk;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* S3 offloader for large checkpoint payloads
|
|
43
|
-
*
|
|
44
|
-
* Transparently uploads large payloads to S3 and returns S3 key references
|
|
45
|
-
* for storage in DynamoDB. On read, downloads from S3 when a reference is present.
|
|
46
|
-
*
|
|
47
|
-
* @example
|
|
48
|
-
* ```typescript
|
|
49
|
-
* const offloader = new S3Offloader({
|
|
50
|
-
* bucketName: 'my-checkpoints-bucket',
|
|
51
|
-
* keyPrefix: 'langgraph/',
|
|
52
|
-
* thresholdBytes: 350 * 1024,
|
|
53
|
-
* });
|
|
54
|
-
*
|
|
55
|
-
* if (offloader.shouldOffload(data)) {
|
|
56
|
-
* const key = await offloader.upload('thread/checkpoint/field.bin', data);
|
|
57
|
-
* // Store `key` in DynamoDB instead of `data`
|
|
58
|
-
* }
|
|
59
|
-
* ```
|
|
60
|
-
*/
|
|
61
|
-
class S3Offloader {
|
|
62
|
-
s3Client;
|
|
63
|
-
bucketName;
|
|
64
|
-
keyPrefix;
|
|
65
|
-
thresholdBytes;
|
|
66
|
-
serverSideEncryption;
|
|
67
|
-
sseKmsKeyId;
|
|
68
|
-
clientConfig;
|
|
69
|
-
constructor(config) {
|
|
70
|
-
this.bucketName = config.bucketName;
|
|
71
|
-
this.keyPrefix = config.keyPrefix ?? DEFAULT_KEY_PREFIX;
|
|
72
|
-
this.thresholdBytes = config.thresholdBytes ?? DEFAULT_THRESHOLD_BYTES;
|
|
73
|
-
this.serverSideEncryption = config.serverSideEncryption ?? DEFAULT_SERVER_SIDE_ENCRYPTION;
|
|
74
|
-
this.sseKmsKeyId = config.sseKmsKeyId;
|
|
75
|
-
this.clientConfig = config.clientConfig;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Get or lazily create the S3 client on first use.
|
|
79
|
-
* Defers S3Client construction so the constructor remains lightweight and sync.
|
|
80
|
-
*/
|
|
81
|
-
getClient() {
|
|
82
|
-
if (!this.s3Client) {
|
|
83
|
-
const { S3Client } = getS3Sdk();
|
|
84
|
-
this.s3Client = new S3Client((this.clientConfig ?? {}));
|
|
85
|
-
}
|
|
86
|
-
return this.s3Client;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Check whether a payload should be offloaded to S3
|
|
90
|
-
*
|
|
91
|
-
* @param data - Serialized payload
|
|
92
|
-
* @returns true if the payload exceeds the threshold
|
|
93
|
-
*/
|
|
94
|
-
shouldOffload(data) {
|
|
95
|
-
return data.length >= this.thresholdBytes;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Build a fully-qualified S3 key for a checkpoint field
|
|
99
|
-
*
|
|
100
|
-
* @param threadId - Thread identifier
|
|
101
|
-
* @param checkpointId - Checkpoint identifier
|
|
102
|
-
* @param field - Field name (e.g., 'checkpoint', 'metadata', 'write-0')
|
|
103
|
-
* @returns Fully-qualified S3 key
|
|
104
|
-
*/
|
|
105
|
-
buildKey(threadId, checkpointId, field) {
|
|
106
|
-
return `${this.keyPrefix}${threadId}/${checkpointId}/${field}.bin`;
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Upload data to S3
|
|
110
|
-
*
|
|
111
|
-
* @param key - S3 object key
|
|
112
|
-
* @param data - Data to upload
|
|
113
|
-
* @returns The S3 key that was used
|
|
114
|
-
*/
|
|
115
|
-
async upload(key, data) {
|
|
116
|
-
const { PutObjectCommand } = getS3Sdk();
|
|
117
|
-
const client = this.getClient();
|
|
118
|
-
await client.send(new PutObjectCommand({
|
|
119
|
-
Bucket: this.bucketName,
|
|
120
|
-
Key: key,
|
|
121
|
-
Body: data,
|
|
122
|
-
ContentType: 'application/octet-stream',
|
|
123
|
-
ServerSideEncryption: this
|
|
124
|
-
.serverSideEncryption,
|
|
125
|
-
...(this.sseKmsKeyId && { SSEKMSKeyId: this.sseKmsKeyId }),
|
|
126
|
-
}));
|
|
127
|
-
return key;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Download data from S3
|
|
131
|
-
*
|
|
132
|
-
* @param key - S3 object key to download
|
|
133
|
-
* @returns The downloaded data as Uint8Array
|
|
134
|
-
* @throws Error if the download fails or body is empty
|
|
135
|
-
*/
|
|
136
|
-
async download(key) {
|
|
137
|
-
const { GetObjectCommand } = getS3Sdk();
|
|
138
|
-
const client = this.getClient();
|
|
139
|
-
const response = await client.send(new GetObjectCommand({
|
|
140
|
-
Bucket: this.bucketName,
|
|
141
|
-
Key: key,
|
|
142
|
-
}));
|
|
143
|
-
if (!response.Body) {
|
|
144
|
-
throw new Error(`S3 object body is empty for key: ${key}`);
|
|
145
|
-
}
|
|
146
|
-
// Convert the readable stream to Uint8Array
|
|
147
|
-
const byteArray = await response.Body.transformToByteArray();
|
|
148
|
-
return new Uint8Array(byteArray);
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Delete a single object from S3
|
|
152
|
-
*
|
|
153
|
-
* @param key - S3 object key to delete
|
|
154
|
-
*/
|
|
155
|
-
async delete(key) {
|
|
156
|
-
const { DeleteObjectCommand } = getS3Sdk();
|
|
157
|
-
const client = this.getClient();
|
|
158
|
-
await client.send(new DeleteObjectCommand({
|
|
159
|
-
Bucket: this.bucketName,
|
|
160
|
-
Key: key,
|
|
161
|
-
}));
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Batch delete multiple objects from S3
|
|
165
|
-
*
|
|
166
|
-
* @param keys - Array of S3 object keys to delete
|
|
167
|
-
*/
|
|
168
|
-
async deleteBatch(keys) {
|
|
169
|
-
if (keys.length === 0)
|
|
170
|
-
return;
|
|
171
|
-
const { DeleteObjectsCommand } = getS3Sdk();
|
|
172
|
-
const client = this.getClient();
|
|
173
|
-
// S3 DeleteObjects supports up to 1000 keys per request
|
|
174
|
-
const batchSize = 1000;
|
|
175
|
-
for (let i = 0; i < keys.length; i += batchSize) {
|
|
176
|
-
const batch = keys.slice(i, i + batchSize);
|
|
177
|
-
const response = await client.send(new DeleteObjectsCommand({
|
|
178
|
-
Bucket: this.bucketName,
|
|
179
|
-
Delete: {
|
|
180
|
-
Objects: batch.map((key) => ({ Key: key })),
|
|
181
|
-
Quiet: true,
|
|
182
|
-
},
|
|
183
|
-
}));
|
|
184
|
-
// Log any failed deletions (Quiet mode still reports errors)
|
|
185
|
-
if (response.Errors && response.Errors.length > 0) {
|
|
186
|
-
const failedKeys = response.Errors.map((err) => `${err.Key} (${err.Code}: ${err.Message})`).join(', ');
|
|
187
|
-
(0, logger_1.getLogger)().warn(`S3 deleteBatch: ${response.Errors.length} objects failed to delete: ${failedKeys}`);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Get the configured key prefix (useful for logging)
|
|
193
|
-
*/
|
|
194
|
-
getKeyPrefix() {
|
|
195
|
-
return this.keyPrefix;
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Ensure an S3 lifecycle rule exists for automatic object expiration.
|
|
199
|
-
*
|
|
200
|
-
* This method is **idempotent**: it reads existing lifecycle rules and only
|
|
201
|
-
* adds or updates the langgraph-specific rule. User-defined rules on the
|
|
202
|
-
* bucket are preserved.
|
|
203
|
-
*
|
|
204
|
-
* @param ttlDays - Expiration in days (S3 lifecycle uses day-level precision)
|
|
205
|
-
* @throws Error if the S3 API calls fail (callers should catch gracefully)
|
|
206
|
-
*/
|
|
207
|
-
async ensureLifecycleRule(ttlDays) {
|
|
208
|
-
const { GetBucketLifecycleConfigurationCommand, PutBucketLifecycleConfigurationCommand } = getS3Sdk();
|
|
209
|
-
const client = this.getClient();
|
|
210
|
-
const ruleId = this.buildLifecycleRuleId();
|
|
211
|
-
// 1. Read existing lifecycle configuration
|
|
212
|
-
let existingRules = [];
|
|
213
|
-
try {
|
|
214
|
-
const existing = await client.send(new GetBucketLifecycleConfigurationCommand({ Bucket: this.bucketName }));
|
|
215
|
-
existingRules = existing.Rules ?? [];
|
|
216
|
-
}
|
|
217
|
-
catch (error) {
|
|
218
|
-
// NoSuchLifecycleConfiguration means bucket has no lifecycle config — treat as empty
|
|
219
|
-
if (error &&
|
|
220
|
-
typeof error === 'object' &&
|
|
221
|
-
'name' in error &&
|
|
222
|
-
error.name === 'NoSuchLifecycleConfiguration') {
|
|
223
|
-
existingRules = [];
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
throw error;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
// 2. Check if a matching rule already exists (by ID)
|
|
230
|
-
const existingRule = existingRules.find((r) => r.ID === ruleId);
|
|
231
|
-
if (existingRule &&
|
|
232
|
-
existingRule.Status === 'Enabled' &&
|
|
233
|
-
existingRule.Expiration &&
|
|
234
|
-
existingRule.Expiration.Days === ttlDays) {
|
|
235
|
-
// Rule already exists with correct settings — nothing to do
|
|
236
|
-
(0, logger_1.getLogger)().info(`S3 lifecycle rule '${ruleId}' already exists with ${ttlDays}-day expiration — skipping`);
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
// 3. Build the new rule
|
|
240
|
-
const newRule = {
|
|
241
|
-
ID: ruleId,
|
|
242
|
-
Filter: { Prefix: this.keyPrefix },
|
|
243
|
-
Status: 'Enabled',
|
|
244
|
-
Expiration: { Days: ttlDays },
|
|
245
|
-
};
|
|
246
|
-
// 4. Merge: replace existing rule with same ID or append
|
|
247
|
-
const mergedRules = existingRule
|
|
248
|
-
? existingRules.map((r) => (r.ID === ruleId ? newRule : r))
|
|
249
|
-
: [...existingRules, newRule];
|
|
250
|
-
// 5. Write back
|
|
251
|
-
await client.send(new PutBucketLifecycleConfigurationCommand({
|
|
252
|
-
Bucket: this.bucketName,
|
|
253
|
-
LifecycleConfiguration: {
|
|
254
|
-
Rules: mergedRules,
|
|
255
|
-
},
|
|
256
|
-
}));
|
|
257
|
-
(0, logger_1.getLogger)().info(`S3 lifecycle rule '${ruleId}' configured: ${ttlDays}-day expiration on prefix '${this.keyPrefix}'`);
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Generate a deterministic lifecycle rule ID for idempotency.
|
|
261
|
-
*
|
|
262
|
-
* The ID is scoped to the configured key prefix but intentionally TTL-independent:
|
|
263
|
-
* changing ttlDays updates the existing rule in place instead of leaving a stale
|
|
264
|
-
* rule behind that would still expire objects at the old cadence.
|
|
265
|
-
*
|
|
266
|
-
* @returns Rule ID string
|
|
267
|
-
*/
|
|
268
|
-
buildLifecycleRuleId() {
|
|
269
|
-
// Normalize the prefix into a lifecycle-rule-safe slug, trimming the trailing slash.
|
|
270
|
-
const slug = this.keyPrefix.replace(/\/+$/, '').replace(/[^a-zA-Z0-9-]/g, '-') || 'default';
|
|
271
|
-
return `langgraph-ttl-${slug}`;
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* Release underlying S3 client resources
|
|
275
|
-
*/
|
|
276
|
-
destroy() {
|
|
277
|
-
this.s3Client?.destroy();
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
exports.S3Offloader = S3Offloader;
|
|
281
|
-
//# sourceMappingURL=s3-offloader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"s3-offloader.js","sourceRoot":"","sources":["../../../src/shared/utils/s3-offloader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Best-effort S3 orphan cleanup shared by checkpointer writers.
|
|
3
|
-
*
|
|
4
|
-
* When a DynamoDB write fails *after* payloads have already been uploaded to S3,
|
|
5
|
-
* this helper deletes the uploaded objects so they don't linger until the
|
|
6
|
-
* lifecycle rule sweeps them.
|
|
7
|
-
*
|
|
8
|
-
* Transient S3 errors (503 SlowDown, 500 InternalError, throttling, socket
|
|
9
|
-
* blips) get bounded retries with full-jitter backoff so a single bad minute
|
|
10
|
-
* doesn't leak objects. Persistent failures are only logged — the lifecycle
|
|
11
|
-
* rule is the ultimate backstop and failing the caller's write *after* DDB has
|
|
12
|
-
* already rolled back would add confusion, not safety.
|
|
13
|
-
*/
|
|
14
|
-
import type { S3Offloader } from './s3-offloader';
|
|
15
|
-
export declare function cleanUpS3Orphans(offloader: S3Offloader, keys: ReadonlyArray<string | undefined>, context: string): Promise<void>;
|
|
16
|
-
//# sourceMappingURL=s3-orphans.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"s3-orphans.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/s3-orphans.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAqClD,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,WAAW,EACtB,IAAI,EAAE,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC,EACvC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Best-effort S3 orphan cleanup shared by checkpointer writers.
|
|
4
|
-
*
|
|
5
|
-
* When a DynamoDB write fails *after* payloads have already been uploaded to S3,
|
|
6
|
-
* this helper deletes the uploaded objects so they don't linger until the
|
|
7
|
-
* lifecycle rule sweeps them.
|
|
8
|
-
*
|
|
9
|
-
* Transient S3 errors (503 SlowDown, 500 InternalError, throttling, socket
|
|
10
|
-
* blips) get bounded retries with full-jitter backoff so a single bad minute
|
|
11
|
-
* doesn't leak objects. Persistent failures are only logged — the lifecycle
|
|
12
|
-
* rule is the ultimate backstop and failing the caller's write *after* DDB has
|
|
13
|
-
* already rolled back would add confusion, not safety.
|
|
14
|
-
*/
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.cleanUpS3Orphans = cleanUpS3Orphans;
|
|
17
|
-
const logger_1 = require("./logger");
|
|
18
|
-
const sleep_1 = require("./sleep");
|
|
19
|
-
const ORPHAN_CLEANUP_MAX_ATTEMPTS = 3;
|
|
20
|
-
const ORPHAN_CLEANUP_BASE_DELAY_MS = 100;
|
|
21
|
-
const ORPHAN_CLEANUP_MAX_DELAY_MS = 2_000;
|
|
22
|
-
/** Error codes/names that indicate an S3 request is worth re-issuing. */
|
|
23
|
-
const RETRYABLE_S3_SIGNALS = [
|
|
24
|
-
'SlowDown',
|
|
25
|
-
'InternalError',
|
|
26
|
-
'ServiceUnavailable',
|
|
27
|
-
'RequestTimeout',
|
|
28
|
-
'ThrottlingException',
|
|
29
|
-
'ProvisionedThroughputExceededException',
|
|
30
|
-
// Node-level network transients (also caught by @aws-sdk/client-s3 wrappers).
|
|
31
|
-
'ECONNRESET',
|
|
32
|
-
'ECONNREFUSED',
|
|
33
|
-
'ETIMEDOUT',
|
|
34
|
-
'EPIPE',
|
|
35
|
-
'NetworkingError',
|
|
36
|
-
'TimeoutError',
|
|
37
|
-
];
|
|
38
|
-
function isTransientS3Error(err) {
|
|
39
|
-
if (!err || typeof err !== 'object')
|
|
40
|
-
return false;
|
|
41
|
-
const signals = [];
|
|
42
|
-
const e = err;
|
|
43
|
-
if (typeof e.name === 'string')
|
|
44
|
-
signals.push(e.name);
|
|
45
|
-
if (typeof e.code === 'string')
|
|
46
|
-
signals.push(e.code);
|
|
47
|
-
const status = e.$metadata?.httpStatusCode;
|
|
48
|
-
if (typeof status === 'number' && (status === 429 || (status >= 500 && status < 600))) {
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
return RETRYABLE_S3_SIGNALS.some((s) => signals.some((sig) => sig.includes(s)));
|
|
52
|
-
}
|
|
53
|
-
async function cleanUpS3Orphans(offloader, keys, context) {
|
|
54
|
-
const orphans = keys.filter((k) => typeof k === 'string' && k.length > 0);
|
|
55
|
-
if (orphans.length === 0)
|
|
56
|
-
return;
|
|
57
|
-
let delay = ORPHAN_CLEANUP_BASE_DELAY_MS;
|
|
58
|
-
let lastErr;
|
|
59
|
-
for (let attempt = 1; attempt <= ORPHAN_CLEANUP_MAX_ATTEMPTS; attempt++) {
|
|
60
|
-
try {
|
|
61
|
-
await offloader.deleteBatch(orphans);
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
catch (err) {
|
|
65
|
-
lastErr = err;
|
|
66
|
-
if (attempt >= ORPHAN_CLEANUP_MAX_ATTEMPTS || !isTransientS3Error(err)) {
|
|
67
|
-
break;
|
|
68
|
-
}
|
|
69
|
-
await (0, sleep_1.sleep)((0, sleep_1.fullJitter)(delay));
|
|
70
|
-
delay = Math.min(delay * 2, ORPHAN_CLEANUP_MAX_DELAY_MS);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
const msg = lastErr && typeof lastErr === 'object' && 'message' in lastErr
|
|
74
|
-
? String(lastErr.message)
|
|
75
|
-
: String(lastErr);
|
|
76
|
-
(0, logger_1.getLogger)().warn(`Failed to clean up orphaned S3 objects after ${context} ` +
|
|
77
|
-
`(${ORPHAN_CLEANUP_MAX_ATTEMPTS} attempts, lifecycle rule will sweep): ${msg}`);
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=s3-orphans.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"s3-orphans.js","sourceRoot":"","sources":["../../../src/shared/utils/s3-orphans.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AAwCH,4CAgCC;AAtED,qCAAqC;AAErC,mCAA4C;AAE5C,MAAM,2BAA2B,GAAG,CAAC,CAAC;AACtC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AACzC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAE1C,yEAAyE;AACzE,MAAM,oBAAoB,GAAsB;IAC9C,UAAU;IACV,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,qBAAqB;IACrB,wCAAwC;IACxC,8EAA8E;IAC9E,YAAY;IACZ,cAAc;IACd,WAAW;IACX,OAAO;IACP,iBAAiB;IACjB,cAAc;CACf,CAAC;AAEF,SAAS,kBAAkB,CAAC,GAAY;IACtC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,CAAC,GAAG,GAAkF,CAAC;IAC7F,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC;IAC3C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;QACtF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,SAAsB,EACtB,IAAuC,EACvC,OAAe;IAEf,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEjC,IAAI,KAAK,GAAG,4BAA4B,CAAC;IACzC,IAAI,OAAgB,CAAC;IACrB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,2BAA2B,EAAE,OAAO,EAAE,EAAE,CAAC;QACxE,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,GAAG,CAAC;YACd,IAAI,OAAO,IAAI,2BAA2B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvE,MAAM;YACR,CAAC;YACD,MAAM,IAAA,aAAK,EAAC,IAAA,kBAAU,EAAC,KAAK,CAAC,CAAC,CAAC;YAC/B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,2BAA2B,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GACP,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO;QAC5D,CAAC,CAAC,MAAM,CAAE,OAAgC,CAAC,OAAO,CAAC;QACnD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtB,IAAA,kBAAS,GAAE,CAAC,IAAI,CACd,gDAAgD,OAAO,GAAG;QACxD,IAAI,2BAA2B,0CAA0C,GAAG,EAAE,CACjF,CAAC;AACJ,CAAC"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Backoff helper shared by the UnprocessedItems / UnprocessedKeys retry loops
|
|
3
|
-
* in batch-write and BatchGetItem paths. Centralized so both call sites use
|
|
4
|
-
* the same cap, growth, and sleep semantics.
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Sleep for `ms` milliseconds, optionally cancellable via an `AbortSignal`.
|
|
8
|
-
*
|
|
9
|
-
* If `signal` is already aborted the returned promise rejects synchronously with
|
|
10
|
-
* the signal's abort reason. Otherwise the timer resolves on the normal path and
|
|
11
|
-
* the abort listener is removed to avoid leaking handlers.
|
|
12
|
-
*
|
|
13
|
-
* The `settled` flag is a belt-and-braces guard: `{ once: true }` already
|
|
14
|
-
* prevents the listener from firing twice, but the guard also ensures we never
|
|
15
|
-
* resolve *and* reject (which would produce an unhandled rejection if the timer
|
|
16
|
-
* and abort event fire in the same microtask turn).
|
|
17
|
-
*/
|
|
18
|
-
export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
|
|
19
|
-
/**
|
|
20
|
-
* Exponential-backoff delay calculator. Given the *previous* delay, returns the
|
|
21
|
-
* next delay — double it, capped at `max`. Use with {@link sleep} and
|
|
22
|
-
* {@link fullJitter} so concurrent retriers don't synchronize.
|
|
23
|
-
*
|
|
24
|
-
* let delay = INITIAL_DELAY_MS;
|
|
25
|
-
* while (keep_going) {
|
|
26
|
-
* await sleep(fullJitter(delay));
|
|
27
|
-
* delay = nextBackoffDelay(delay);
|
|
28
|
-
* }
|
|
29
|
-
*/
|
|
30
|
-
export declare function nextBackoffDelay(currentMs: number, maxMs?: number): number;
|
|
31
|
-
/**
|
|
32
|
-
* Apply full jitter (AWS recommended) to a backoff delay.
|
|
33
|
-
*
|
|
34
|
-
* Returns a uniform random value in `[0, delayMs)`. Spreading retries across the
|
|
35
|
-
* backoff window prevents the thundering-herd pattern where every throttled
|
|
36
|
-
* client wakes up at the same instant and re-throttles the service.
|
|
37
|
-
* See https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/
|
|
38
|
-
*/
|
|
39
|
-
export declare function fullJitter(delayMs: number): number;
|
|
40
|
-
/**
|
|
41
|
-
* Starting delay for UnprocessedItems / UnprocessedKeys retry loops.
|
|
42
|
-
*/
|
|
43
|
-
export declare const INITIAL_BACKOFF_DELAY_MS = 100;
|
|
44
|
-
/**
|
|
45
|
-
* Maximum delay for UnprocessedItems / UnprocessedKeys retry loops.
|
|
46
|
-
*/
|
|
47
|
-
export declare const MAX_BACKOFF_DELAY_MS = 5000;
|
|
48
|
-
//# sourceMappingURL=sleep.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/sleep.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBrE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAA6B,GAAG,MAAM,CAEhG;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,MAA2B,CAAC;AAEjE;;GAEG;AACH,eAAO,MAAM,oBAAoB,OAAuB,CAAC"}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Backoff helper shared by the UnprocessedItems / UnprocessedKeys retry loops
|
|
4
|
-
* in batch-write and BatchGetItem paths. Centralized so both call sites use
|
|
5
|
-
* the same cap, growth, and sleep semantics.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.MAX_BACKOFF_DELAY_MS = exports.INITIAL_BACKOFF_DELAY_MS = void 0;
|
|
9
|
-
exports.sleep = sleep;
|
|
10
|
-
exports.nextBackoffDelay = nextBackoffDelay;
|
|
11
|
-
exports.fullJitter = fullJitter;
|
|
12
|
-
const DEFAULT_INITIAL_DELAY_MS = 100;
|
|
13
|
-
const DEFAULT_MAX_DELAY_MS = 5000;
|
|
14
|
-
/**
|
|
15
|
-
* Sleep for `ms` milliseconds, optionally cancellable via an `AbortSignal`.
|
|
16
|
-
*
|
|
17
|
-
* If `signal` is already aborted the returned promise rejects synchronously with
|
|
18
|
-
* the signal's abort reason. Otherwise the timer resolves on the normal path and
|
|
19
|
-
* the abort listener is removed to avoid leaking handlers.
|
|
20
|
-
*
|
|
21
|
-
* The `settled` flag is a belt-and-braces guard: `{ once: true }` already
|
|
22
|
-
* prevents the listener from firing twice, but the guard also ensures we never
|
|
23
|
-
* resolve *and* reject (which would produce an unhandled rejection if the timer
|
|
24
|
-
* and abort event fire in the same microtask turn).
|
|
25
|
-
*/
|
|
26
|
-
function sleep(ms, signal) {
|
|
27
|
-
if (signal?.aborted) {
|
|
28
|
-
return Promise.reject(signal.reason ?? new Error('Aborted'));
|
|
29
|
-
}
|
|
30
|
-
return new Promise((resolve, reject) => {
|
|
31
|
-
let settled = false;
|
|
32
|
-
const timer = setTimeout(() => {
|
|
33
|
-
if (settled)
|
|
34
|
-
return;
|
|
35
|
-
settled = true;
|
|
36
|
-
signal?.removeEventListener('abort', onAbort);
|
|
37
|
-
resolve();
|
|
38
|
-
}, ms);
|
|
39
|
-
const onAbort = () => {
|
|
40
|
-
if (settled)
|
|
41
|
-
return;
|
|
42
|
-
settled = true;
|
|
43
|
-
clearTimeout(timer);
|
|
44
|
-
reject(signal?.reason ?? new Error('Aborted'));
|
|
45
|
-
};
|
|
46
|
-
signal?.addEventListener('abort', onAbort, { once: true });
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Exponential-backoff delay calculator. Given the *previous* delay, returns the
|
|
51
|
-
* next delay — double it, capped at `max`. Use with {@link sleep} and
|
|
52
|
-
* {@link fullJitter} so concurrent retriers don't synchronize.
|
|
53
|
-
*
|
|
54
|
-
* let delay = INITIAL_DELAY_MS;
|
|
55
|
-
* while (keep_going) {
|
|
56
|
-
* await sleep(fullJitter(delay));
|
|
57
|
-
* delay = nextBackoffDelay(delay);
|
|
58
|
-
* }
|
|
59
|
-
*/
|
|
60
|
-
function nextBackoffDelay(currentMs, maxMs = DEFAULT_MAX_DELAY_MS) {
|
|
61
|
-
return Math.min(currentMs * 2, maxMs);
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Apply full jitter (AWS recommended) to a backoff delay.
|
|
65
|
-
*
|
|
66
|
-
* Returns a uniform random value in `[0, delayMs)`. Spreading retries across the
|
|
67
|
-
* backoff window prevents the thundering-herd pattern where every throttled
|
|
68
|
-
* client wakes up at the same instant and re-throttles the service.
|
|
69
|
-
* See https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/
|
|
70
|
-
*/
|
|
71
|
-
function fullJitter(delayMs) {
|
|
72
|
-
return Math.random() * delayMs;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Starting delay for UnprocessedItems / UnprocessedKeys retry loops.
|
|
76
|
-
*/
|
|
77
|
-
exports.INITIAL_BACKOFF_DELAY_MS = DEFAULT_INITIAL_DELAY_MS;
|
|
78
|
-
/**
|
|
79
|
-
* Maximum delay for UnprocessedItems / UnprocessedKeys retry loops.
|
|
80
|
-
*/
|
|
81
|
-
exports.MAX_BACKOFF_DELAY_MS = DEFAULT_MAX_DELAY_MS;
|
|
82
|
-
//# sourceMappingURL=sleep.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../../src/shared/utils/sleep.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAiBH,sBAoBC;AAaD,4CAEC;AAUD,gCAEC;AA9DD,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAElC;;;;;;;;;;;GAWG;AACH,SAAgB,KAAK,CAAC,EAAU,EAAE,MAAoB;IACpD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,gBAAgB,CAAC,SAAiB,EAAE,QAAgB,oBAAoB;IACtF,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,UAAU,CAAC,OAAe;IACxC,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC;AACjC,CAAC;AAED;;GAEG;AACU,QAAA,wBAAwB,GAAG,wBAAwB,CAAC;AAEjE;;GAEG;AACU,QAAA,oBAAoB,GAAG,oBAAoB,CAAC"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TTL (Time-To-Live) utility functions
|
|
3
|
-
* Provide centralized TTL calculation for DynamoDB items
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Calculate Unix timestamp for TTL expiration from seconds.
|
|
7
|
-
*
|
|
8
|
-
* Validates the input so callers can't silently produce absurd timestamps
|
|
9
|
-
* (e.g. `Number.MAX_SAFE_INTEGER`) that DynamoDB would reject at write time.
|
|
10
|
-
*
|
|
11
|
-
* @param ttlSeconds - Number of seconds until expiration (integer > 0, ≤ 100 years)
|
|
12
|
-
* @returns Unix timestamp in seconds for DynamoDB TTL attribute
|
|
13
|
-
* @throws Error if ttlSeconds is not a positive finite integer within the allowed range
|
|
14
|
-
*/
|
|
15
|
-
export declare function calculateTTLTimestampFromSeconds(ttlSeconds: number): number;
|
|
16
|
-
/**
|
|
17
|
-
* Calculate Unix timestamp for TTL expiration from days
|
|
18
|
-
*
|
|
19
|
-
* @param ttlDays - Number of days until expiration
|
|
20
|
-
* @returns Unix timestamp in seconds for DynamoDB TTL attribute
|
|
21
|
-
* @throws Error if ttlDays would cause overflow
|
|
22
|
-
*/
|
|
23
|
-
export declare function calculateTTLTimestamp(ttlDays: number): number;
|
|
24
|
-
//# sourceMappingURL=ttl.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ttl.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/ttl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAW3E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE7D"}
|
package/dist/shared/utils/ttl.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* TTL (Time-To-Live) utility functions
|
|
4
|
-
* Provide centralized TTL calculation for DynamoDB items
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.calculateTTLTimestampFromSeconds = calculateTTLTimestampFromSeconds;
|
|
8
|
-
exports.calculateTTLTimestamp = calculateTTLTimestamp;
|
|
9
|
-
/** 100 years in seconds — comfortable upper bound for any TTL use case. */
|
|
10
|
-
const MAX_TTL_SECONDS = 100 * 365 * 24 * 60 * 60;
|
|
11
|
-
/**
|
|
12
|
-
* Calculate Unix timestamp for TTL expiration from seconds.
|
|
13
|
-
*
|
|
14
|
-
* Validates the input so callers can't silently produce absurd timestamps
|
|
15
|
-
* (e.g. `Number.MAX_SAFE_INTEGER`) that DynamoDB would reject at write time.
|
|
16
|
-
*
|
|
17
|
-
* @param ttlSeconds - Number of seconds until expiration (integer > 0, ≤ 100 years)
|
|
18
|
-
* @returns Unix timestamp in seconds for DynamoDB TTL attribute
|
|
19
|
-
* @throws Error if ttlSeconds is not a positive finite integer within the allowed range
|
|
20
|
-
*/
|
|
21
|
-
function calculateTTLTimestampFromSeconds(ttlSeconds) {
|
|
22
|
-
if (typeof ttlSeconds !== 'number' || !Number.isInteger(ttlSeconds)) {
|
|
23
|
-
throw new Error('ttlSeconds must be an integer');
|
|
24
|
-
}
|
|
25
|
-
if (ttlSeconds <= 0) {
|
|
26
|
-
throw new Error('ttlSeconds must be positive');
|
|
27
|
-
}
|
|
28
|
-
if (ttlSeconds > MAX_TTL_SECONDS) {
|
|
29
|
-
throw new Error(`ttlSeconds cannot exceed ${MAX_TTL_SECONDS} (100 years)`);
|
|
30
|
-
}
|
|
31
|
-
return Math.floor(Date.now() / 1000) + ttlSeconds;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Calculate Unix timestamp for TTL expiration from days
|
|
35
|
-
*
|
|
36
|
-
* @param ttlDays - Number of days until expiration
|
|
37
|
-
* @returns Unix timestamp in seconds for DynamoDB TTL attribute
|
|
38
|
-
* @throws Error if ttlDays would cause overflow
|
|
39
|
-
*/
|
|
40
|
-
function calculateTTLTimestamp(ttlDays) {
|
|
41
|
-
return calculateTTLTimestampFromSeconds(ttlDays * 24 * 60 * 60);
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=ttl.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ttl.js","sourceRoot":"","sources":["../../../src/shared/utils/ttl.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAeH,4EAWC;AASD,sDAEC;AAnCD,2EAA2E;AAC3E,MAAM,eAAe,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAEjD;;;;;;;;;GASG;AACH,SAAgB,gCAAgC,CAAC,UAAkB;IACjE,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,UAAU,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,4BAA4B,eAAe,cAAc,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,UAAU,CAAC;AACpD,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,qBAAqB,CAAC,OAAe;IACnD,OAAO,gCAAgC,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Item } from '@langchain/langgraph';
|
|
2
|
-
import type { GetOperationActionParams } from '../types';
|
|
3
|
-
/**
|
|
4
|
-
* Get a memory item from DynamoDB
|
|
5
|
-
*
|
|
6
|
-
* @param params - Parameters for the get operation
|
|
7
|
-
* @returns The item if found, null if not found
|
|
8
|
-
* @throws Error if the operation fails or validation fails
|
|
9
|
-
*/
|
|
10
|
-
export declare const getOperationAction: (params: GetOperationActionParams) => Promise<Item | null>;
|
|
11
|
-
//# sourceMappingURL=get-operation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-operation.d.ts","sourceRoot":"","sources":["../../../src/store/actions/get-operation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAGzD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,wBAAwB,KAC/B,OAAO,CAAC,IAAI,GAAG,IAAI,CAoCrB,CAAC"}
|