@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,109 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Writer = void 0;
|
|
4
|
-
const utils_1 = require("../utils");
|
|
5
|
-
/**
|
|
6
|
-
* Writer class for managing pending writes in DynamoDB
|
|
7
|
-
* Handles serialization and composite key management
|
|
8
|
-
*/
|
|
9
|
-
class Writer {
|
|
10
|
-
/** Unique identifier for the conversation thread */
|
|
11
|
-
thread_id;
|
|
12
|
-
/** Namespace for checkpoint isolation (default: '') */
|
|
13
|
-
checkpoint_ns;
|
|
14
|
-
/** Unique identifier for the checkpoint */
|
|
15
|
-
checkpoint_id;
|
|
16
|
-
/** Unique identifier for the task that created this write */
|
|
17
|
-
task_id;
|
|
18
|
-
/** Index of the write within the task. Negative values correspond to
|
|
19
|
-
* `WRITES_IDX_MAP` special-channel slots (__error__=-1, __scheduled__=-2,
|
|
20
|
-
* __interrupt__=-3, __resume__=-4); non-negative values are positional. */
|
|
21
|
-
idx;
|
|
22
|
-
/** Channel name for the write */
|
|
23
|
-
channel;
|
|
24
|
-
/** Type identifier for deserialization */
|
|
25
|
-
type;
|
|
26
|
-
/** Serialized value as binary data */
|
|
27
|
-
value;
|
|
28
|
-
constructor({ thread_id, checkpoint_ns, checkpoint_id, task_id, idx, channel, type, value, }) {
|
|
29
|
-
// Validate all inputs
|
|
30
|
-
(0, utils_1.validateThreadId)(thread_id);
|
|
31
|
-
(0, utils_1.validateCheckpointNs)(checkpoint_ns);
|
|
32
|
-
(0, utils_1.validateCheckpointId)(checkpoint_id, true);
|
|
33
|
-
(0, utils_1.validateTaskId)(task_id);
|
|
34
|
-
(0, utils_1.validateChannel)(channel);
|
|
35
|
-
if (!Number.isInteger(idx)) {
|
|
36
|
-
throw new Error('idx must be an integer');
|
|
37
|
-
}
|
|
38
|
-
this.thread_id = thread_id;
|
|
39
|
-
this.checkpoint_ns = checkpoint_ns;
|
|
40
|
-
this.checkpoint_id = checkpoint_id;
|
|
41
|
-
this.task_id = task_id;
|
|
42
|
-
this.idx = idx;
|
|
43
|
-
this.channel = channel;
|
|
44
|
-
this.type = type;
|
|
45
|
-
this.value = value;
|
|
46
|
-
}
|
|
47
|
-
toDynamoDBItem() {
|
|
48
|
-
return {
|
|
49
|
-
thread_id_checkpoint_id_checkpoint_ns: Writer.getPartitionKey({
|
|
50
|
-
thread_id: this.thread_id,
|
|
51
|
-
checkpoint_id: this.checkpoint_id,
|
|
52
|
-
checkpoint_ns: this.checkpoint_ns,
|
|
53
|
-
}),
|
|
54
|
-
task_id_idx: [this.task_id, this.idx].join(Writer.SEPARATOR),
|
|
55
|
-
channel: this.channel,
|
|
56
|
-
type: this.type,
|
|
57
|
-
value: this.value,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Deserialize a Writer instance from a DynamoDB item
|
|
62
|
-
*
|
|
63
|
-
* @param item - DynamoDB write item
|
|
64
|
-
* @returns Writer instance
|
|
65
|
-
* @throws Error if parsing fails or data is invalid
|
|
66
|
-
*/
|
|
67
|
-
static fromDynamoDBItem({ thread_id_checkpoint_id_checkpoint_ns, task_id_idx, channel, type, value, }) {
|
|
68
|
-
const parts = thread_id_checkpoint_id_checkpoint_ns.split(this.SEPARATOR);
|
|
69
|
-
if (parts.length !== 3) {
|
|
70
|
-
throw new Error(`Invalid partition key format: expected 3 parts, got ${parts.length}`);
|
|
71
|
-
}
|
|
72
|
-
const [thread_id, checkpoint_id, checkpoint_ns] = parts;
|
|
73
|
-
const idxParts = task_id_idx.split(this.SEPARATOR);
|
|
74
|
-
if (idxParts.length !== 2) {
|
|
75
|
-
throw new Error(`Invalid sort key format: expected 2 parts, got ${idxParts.length}`);
|
|
76
|
-
}
|
|
77
|
-
const [task_id, idxStr] = idxParts;
|
|
78
|
-
const idx = parseInt(idxStr, 10);
|
|
79
|
-
if (isNaN(idx)) {
|
|
80
|
-
throw new Error(`Invalid idx value: ${idxStr}`);
|
|
81
|
-
}
|
|
82
|
-
return new Writer({
|
|
83
|
-
thread_id,
|
|
84
|
-
checkpoint_ns,
|
|
85
|
-
checkpoint_id,
|
|
86
|
-
task_id,
|
|
87
|
-
idx,
|
|
88
|
-
channel,
|
|
89
|
-
type,
|
|
90
|
-
value,
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Generate a partition key for DynamoDB from thread, checkpoint, and namespace
|
|
95
|
-
*
|
|
96
|
-
* @param params - Thread ID, checkpoint ID, and namespace
|
|
97
|
-
* @returns Composite partition key
|
|
98
|
-
*/
|
|
99
|
-
static getPartitionKey({ thread_id, checkpoint_id, checkpoint_ns, }) {
|
|
100
|
-
return [thread_id, checkpoint_id, checkpoint_ns].join(this.SEPARATOR);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Separator used for composite keys.
|
|
104
|
-
* Note: input validation ensures this separator cannot appear in any component.
|
|
105
|
-
*/
|
|
106
|
-
static SEPARATOR = ':::';
|
|
107
|
-
}
|
|
108
|
-
exports.Writer = Writer;
|
|
109
|
-
//# sourceMappingURL=writer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../../src/checkpointer/actions/writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DynamoDB-based checkpoint saver for LangGraph
|
|
3
|
-
* Provides persistent storage for checkpoints and pending writes
|
|
4
|
-
*/
|
|
5
|
-
import type { RunnableConfig } from '@langchain/core/runnables';
|
|
6
|
-
import { BaseCheckpointSaver, type Checkpoint, type CheckpointTuple, type CheckpointMetadata, type CheckpointListOptions, type PendingWrite, type ChannelVersions } from '@langchain/langgraph-checkpoint';
|
|
7
|
-
import type { DynamoDBSaverOptions } from './types';
|
|
8
|
-
/**
|
|
9
|
-
* DynamoDB-based checkpoint saver for LangGraph.
|
|
10
|
-
* Provides persistent storage for checkpoints and pending writes.
|
|
11
|
-
*
|
|
12
|
-
* @remarks
|
|
13
|
-
* Uses the base class default for `getNextVersion()` (monotonic integers).
|
|
14
|
-
* Channel versioning is internal to LangGraph's execution engine and does not
|
|
15
|
-
* affect DynamoDB key ordering, which relies on checkpoint IDs.
|
|
16
|
-
*/
|
|
17
|
-
export declare class DynamoDBSaver extends BaseCheckpointSaver {
|
|
18
|
-
private readonly ddbClient;
|
|
19
|
-
private readonly client;
|
|
20
|
-
private readonly checkpointsTableName;
|
|
21
|
-
private readonly writesTableName;
|
|
22
|
-
private readonly ttlDays?;
|
|
23
|
-
private readonly ttlSeconds?;
|
|
24
|
-
private readonly compressor?;
|
|
25
|
-
private readonly s3Offloader?;
|
|
26
|
-
private readonly ownsClient;
|
|
27
|
-
/**
|
|
28
|
-
* Create a new DynamoDB checkpoint saver
|
|
29
|
-
*
|
|
30
|
-
* @param options - Configuration options for the saver
|
|
31
|
-
* @param options.checkpointsTableName - Name of the DynamoDB table for checkpoints
|
|
32
|
-
* @param options.writesTableName - Name of the DynamoDB table for writes
|
|
33
|
-
* @param options.ttlDays - Optional TTL in days for stored items
|
|
34
|
-
* @param options.ttlSeconds - Optional TTL in seconds (overrides ttlDays if both set)
|
|
35
|
-
* @param options.serde - Optional serializer protocol
|
|
36
|
-
* @param options.clientConfig - Optional DynamoDB client configuration
|
|
37
|
-
* @param options.client - Optional pre-built DynamoDBDocument client (takes precedence over clientConfig)
|
|
38
|
-
* @param options.compression - Optional compression configuration
|
|
39
|
-
* @param options.s3OffloadConfig - Optional S3 offloading configuration
|
|
40
|
-
*/
|
|
41
|
-
constructor(options: DynamoDBSaverOptions);
|
|
42
|
-
/**
|
|
43
|
-
* Release underlying DynamoDB and S3 client resources.
|
|
44
|
-
* Call this when the saver is no longer needed to prevent resource leaks.
|
|
45
|
-
* Skips DynamoDB client cleanup if a shared client was injected via options.
|
|
46
|
-
*/
|
|
47
|
-
destroy(): void;
|
|
48
|
-
/**
|
|
49
|
-
* Delete a thread and all its checkpoints and writes
|
|
50
|
-
*
|
|
51
|
-
* @param threadId - The thread ID to delete
|
|
52
|
-
* @param options.signal - Optional AbortSignal for cancelling in-flight retries
|
|
53
|
-
* @throws Error if validation fails or operation fails
|
|
54
|
-
*/
|
|
55
|
-
deleteThread(threadId: string, options?: {
|
|
56
|
-
signal?: AbortSignal;
|
|
57
|
-
}): Promise<void>;
|
|
58
|
-
/**
|
|
59
|
-
* Get a checkpoint tuple from DynamoDB
|
|
60
|
-
*
|
|
61
|
-
* @param config - Runnable configuration containing thread_id and optional checkpoint_id.
|
|
62
|
-
* `config.signal` is honored as an AbortSignal: in-flight retries short-circuit
|
|
63
|
-
* and the returned promise rejects with the signal's abort reason.
|
|
64
|
-
* @returns CheckpointTuple if found, undefined otherwise
|
|
65
|
-
* @throws Error if validation fails or operation fails
|
|
66
|
-
*/
|
|
67
|
-
getTuple(config: RunnableConfig): Promise<CheckpointTuple | undefined>;
|
|
68
|
-
/**
|
|
69
|
-
* Save a checkpoint to DynamoDB
|
|
70
|
-
*
|
|
71
|
-
* @param config - Runnable configuration. `config.signal` is honored as an
|
|
72
|
-
* AbortSignal and short-circuits retry backoff.
|
|
73
|
-
* @param checkpoint - Checkpoint to save
|
|
74
|
-
* @param metadata - Checkpoint metadata
|
|
75
|
-
* @param newVersions - Channel versions (not used in DynamoDB implementation)
|
|
76
|
-
* @returns Updated RunnableConfig with checkpoint information
|
|
77
|
-
* @throws Error if validation fails or operation fails
|
|
78
|
-
*/
|
|
79
|
-
put(config: RunnableConfig, checkpoint: Checkpoint, metadata: CheckpointMetadata, newVersions: ChannelVersions): Promise<RunnableConfig>;
|
|
80
|
-
/**
|
|
81
|
-
* Save pending writes to DynamoDB
|
|
82
|
-
*
|
|
83
|
-
* @param config - Runnable configuration. `config.signal` is honored as an
|
|
84
|
-
* AbortSignal and short-circuits retry backoff.
|
|
85
|
-
* @param writes - Array of pending writes to save
|
|
86
|
-
* @param taskId - Task ID for the writes
|
|
87
|
-
* @throws Error if validation fails or operation fails
|
|
88
|
-
*/
|
|
89
|
-
putWrites(config: RunnableConfig, writes: PendingWrite[], taskId: string): Promise<void>;
|
|
90
|
-
/**
|
|
91
|
-
* List checkpoints for a thread
|
|
92
|
-
*
|
|
93
|
-
* @param config - Runnable configuration containing thread_id
|
|
94
|
-
* @param options - List options including limit, before checkpoint, and metadata filter
|
|
95
|
-
* @yields CheckpointTuple objects in descending order
|
|
96
|
-
* @throws Error if validation fails or operation fails
|
|
97
|
-
*/
|
|
98
|
-
list(config: RunnableConfig, options: CheckpointListOptions | undefined): AsyncGenerator<CheckpointTuple>;
|
|
99
|
-
/**
|
|
100
|
-
* Fetch checkpoint payloads for a batch of metadata items.
|
|
101
|
-
* Uses BatchGetItem to fetch all payloads in one round trip instead of N+1 queries.
|
|
102
|
-
* Items with S3 keys or legacy inline data are resolved without a remote call.
|
|
103
|
-
*
|
|
104
|
-
* @param items - Checkpoint metadata items from a query result
|
|
105
|
-
* @returns Map from checkpoint_id to raw checkpoint data
|
|
106
|
-
*/
|
|
107
|
-
private fetchCheckpointPayloadsBatch;
|
|
108
|
-
/**
|
|
109
|
-
* Check if checkpoint metadata matches all entries in the filter.
|
|
110
|
-
* Each filter key must exactly match the corresponding metadata value.
|
|
111
|
-
*
|
|
112
|
-
* @param metadata - Deserialized checkpoint metadata
|
|
113
|
-
* @param filter - Key-value pairs to match against metadata
|
|
114
|
-
* @returns true if all filter entries match
|
|
115
|
-
*/
|
|
116
|
-
private matchesFilter;
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/checkpointer/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EACL,mBAAmB,EACnB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,eAAe,EACrB,MAAM,iCAAiC,CAAC;AAgBzC,OAAO,KAAK,EAAyC,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAS3F;;;;;;;;GAQG;AACH,qBAAa,aAAc,SAAQ,mBAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IAErC;;;;;;;;;;;;;OAaG;gBACS,OAAO,EAAE,oBAAoB;IAgCzC;;;;OAIG;IACH,OAAO,IAAI,IAAI;IAOf;;;;;;OAMG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3F;;;;;;;;OAQG;IACG,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAa5E;;;;;;;;;;OAUG;IACG,GAAG,CACP,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,kBAAkB,EAE5B,WAAW,EAAE,eAAe,GAC3B,OAAO,CAAC,cAAc,CAAC;IAgB1B;;;;;;;;OAQG;IACG,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB9F;;;;;;;OAOG;IACI,IAAI,CACT,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,qBAAqB,GAAG,SAAS,GACzC,cAAc,CAAC,eAAe,CAAC;IAiIlC;;;;;;;OAOG;YACW,4BAA4B;IAqG1C;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;CAStB"}
|
|
@@ -1,393 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* DynamoDB-based checkpoint saver for LangGraph
|
|
4
|
-
* Provides persistent storage for checkpoints and pending writes
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.DynamoDBSaver = void 0;
|
|
8
|
-
const langgraph_checkpoint_1 = require("@langchain/langgraph-checkpoint");
|
|
9
|
-
const shared_1 = require("../shared");
|
|
10
|
-
const actions_1 = require("./actions");
|
|
11
|
-
const types_1 = require("./types");
|
|
12
|
-
const utils_1 = require("./utils");
|
|
13
|
-
/**
|
|
14
|
-
* DynamoDB-based checkpoint saver for LangGraph.
|
|
15
|
-
* Provides persistent storage for checkpoints and pending writes.
|
|
16
|
-
*
|
|
17
|
-
* @remarks
|
|
18
|
-
* Uses the base class default for `getNextVersion()` (monotonic integers).
|
|
19
|
-
* Channel versioning is internal to LangGraph's execution engine and does not
|
|
20
|
-
* affect DynamoDB key ordering, which relies on checkpoint IDs.
|
|
21
|
-
*/
|
|
22
|
-
class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
23
|
-
ddbClient;
|
|
24
|
-
client;
|
|
25
|
-
checkpointsTableName;
|
|
26
|
-
writesTableName;
|
|
27
|
-
ttlDays;
|
|
28
|
-
ttlSeconds;
|
|
29
|
-
compressor;
|
|
30
|
-
s3Offloader;
|
|
31
|
-
ownsClient;
|
|
32
|
-
/**
|
|
33
|
-
* Create a new DynamoDB checkpoint saver
|
|
34
|
-
*
|
|
35
|
-
* @param options - Configuration options for the saver
|
|
36
|
-
* @param options.checkpointsTableName - Name of the DynamoDB table for checkpoints
|
|
37
|
-
* @param options.writesTableName - Name of the DynamoDB table for writes
|
|
38
|
-
* @param options.ttlDays - Optional TTL in days for stored items
|
|
39
|
-
* @param options.ttlSeconds - Optional TTL in seconds (overrides ttlDays if both set)
|
|
40
|
-
* @param options.serde - Optional serializer protocol
|
|
41
|
-
* @param options.clientConfig - Optional DynamoDB client configuration
|
|
42
|
-
* @param options.client - Optional pre-built DynamoDBDocument client (takes precedence over clientConfig)
|
|
43
|
-
* @param options.compression - Optional compression configuration
|
|
44
|
-
* @param options.s3OffloadConfig - Optional S3 offloading configuration
|
|
45
|
-
*/
|
|
46
|
-
constructor(options) {
|
|
47
|
-
super(options.serde);
|
|
48
|
-
this.checkpointsTableName = options.checkpointsTableName;
|
|
49
|
-
this.writesTableName = options.writesTableName;
|
|
50
|
-
this.ttlDays = options.ttlDays;
|
|
51
|
-
this.ttlSeconds = options.ttlSeconds;
|
|
52
|
-
({
|
|
53
|
-
ddbClient: this.ddbClient,
|
|
54
|
-
client: this.client,
|
|
55
|
-
ownsClient: this.ownsClient,
|
|
56
|
-
} = (0, shared_1.resolveDynamoDBClient)(options));
|
|
57
|
-
if (options.compression?.enabled) {
|
|
58
|
-
this.compressor = new shared_1.Compressor(options.compression);
|
|
59
|
-
}
|
|
60
|
-
if (options.s3OffloadConfig) {
|
|
61
|
-
this.s3Offloader = new shared_1.S3Offloader(options.s3OffloadConfig);
|
|
62
|
-
}
|
|
63
|
-
// Auto-configure S3 lifecycle rule when both TTL and S3 offloading are active
|
|
64
|
-
if (this.s3Offloader && (this.ttlSeconds !== undefined || this.ttlDays !== undefined)) {
|
|
65
|
-
const lifecycleDays = this.ttlSeconds !== undefined ? Math.ceil(this.ttlSeconds / 86400) : this.ttlDays;
|
|
66
|
-
this.s3Offloader.ensureLifecycleRule(lifecycleDays).catch((err) => {
|
|
67
|
-
const message = err && typeof err === 'object' && 'message' in err
|
|
68
|
-
? err.message
|
|
69
|
-
: String(err);
|
|
70
|
-
(0, shared_1.getLogger)().warn(`Failed to configure S3 lifecycle rule: ${message}`);
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Release underlying DynamoDB and S3 client resources.
|
|
76
|
-
* Call this when the saver is no longer needed to prevent resource leaks.
|
|
77
|
-
* Skips DynamoDB client cleanup if a shared client was injected via options.
|
|
78
|
-
*/
|
|
79
|
-
destroy() {
|
|
80
|
-
if (this.ownsClient && this.ddbClient) {
|
|
81
|
-
this.ddbClient.destroy();
|
|
82
|
-
}
|
|
83
|
-
this.s3Offloader?.destroy();
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Delete a thread and all its checkpoints and writes
|
|
87
|
-
*
|
|
88
|
-
* @param threadId - The thread ID to delete
|
|
89
|
-
* @param options.signal - Optional AbortSignal for cancelling in-flight retries
|
|
90
|
-
* @throws Error if validation fails or operation fails
|
|
91
|
-
*/
|
|
92
|
-
async deleteThread(threadId, options = {}) {
|
|
93
|
-
return await (0, actions_1.deleteThreadAction)({
|
|
94
|
-
client: this.client,
|
|
95
|
-
checkpointsTableName: this.checkpointsTableName,
|
|
96
|
-
writesTableName: this.writesTableName,
|
|
97
|
-
threadId,
|
|
98
|
-
s3Offloader: this.s3Offloader,
|
|
99
|
-
signal: options.signal,
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Get a checkpoint tuple from DynamoDB
|
|
104
|
-
*
|
|
105
|
-
* @param config - Runnable configuration containing thread_id and optional checkpoint_id.
|
|
106
|
-
* `config.signal` is honored as an AbortSignal: in-flight retries short-circuit
|
|
107
|
-
* and the returned promise rejects with the signal's abort reason.
|
|
108
|
-
* @returns CheckpointTuple if found, undefined otherwise
|
|
109
|
-
* @throws Error if validation fails or operation fails
|
|
110
|
-
*/
|
|
111
|
-
async getTuple(config) {
|
|
112
|
-
return await (0, actions_1.getTupleAction)({
|
|
113
|
-
client: this.client,
|
|
114
|
-
checkpointsTableName: this.checkpointsTableName,
|
|
115
|
-
writesTableName: this.writesTableName,
|
|
116
|
-
serde: this.serde,
|
|
117
|
-
config,
|
|
118
|
-
compressor: this.compressor,
|
|
119
|
-
s3Offloader: this.s3Offloader,
|
|
120
|
-
signal: config.signal,
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Save a checkpoint to DynamoDB
|
|
125
|
-
*
|
|
126
|
-
* @param config - Runnable configuration. `config.signal` is honored as an
|
|
127
|
-
* AbortSignal and short-circuits retry backoff.
|
|
128
|
-
* @param checkpoint - Checkpoint to save
|
|
129
|
-
* @param metadata - Checkpoint metadata
|
|
130
|
-
* @param newVersions - Channel versions (not used in DynamoDB implementation)
|
|
131
|
-
* @returns Updated RunnableConfig with checkpoint information
|
|
132
|
-
* @throws Error if validation fails or operation fails
|
|
133
|
-
*/
|
|
134
|
-
async put(config, checkpoint, metadata,
|
|
135
|
-
// eslint-disable-next-line unused-imports/no-unused-vars
|
|
136
|
-
newVersions) {
|
|
137
|
-
return await (0, actions_1.putAction)({
|
|
138
|
-
client: this.client,
|
|
139
|
-
checkpointsTableName: this.checkpointsTableName,
|
|
140
|
-
serde: this.serde,
|
|
141
|
-
config,
|
|
142
|
-
checkpoint,
|
|
143
|
-
metadata,
|
|
144
|
-
ttlDays: this.ttlDays,
|
|
145
|
-
ttlSeconds: this.ttlSeconds,
|
|
146
|
-
compressor: this.compressor,
|
|
147
|
-
s3Offloader: this.s3Offloader,
|
|
148
|
-
signal: config.signal,
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Save pending writes to DynamoDB
|
|
153
|
-
*
|
|
154
|
-
* @param config - Runnable configuration. `config.signal` is honored as an
|
|
155
|
-
* AbortSignal and short-circuits retry backoff.
|
|
156
|
-
* @param writes - Array of pending writes to save
|
|
157
|
-
* @param taskId - Task ID for the writes
|
|
158
|
-
* @throws Error if validation fails or operation fails
|
|
159
|
-
*/
|
|
160
|
-
async putWrites(config, writes, taskId) {
|
|
161
|
-
return await (0, actions_1.putWritesAction)({
|
|
162
|
-
client: this.client,
|
|
163
|
-
writesTableName: this.writesTableName,
|
|
164
|
-
serde: this.serde,
|
|
165
|
-
config,
|
|
166
|
-
writes,
|
|
167
|
-
taskId,
|
|
168
|
-
ttlDays: this.ttlDays,
|
|
169
|
-
ttlSeconds: this.ttlSeconds,
|
|
170
|
-
compressor: this.compressor,
|
|
171
|
-
s3Offloader: this.s3Offloader,
|
|
172
|
-
signal: config.signal,
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* List checkpoints for a thread
|
|
177
|
-
*
|
|
178
|
-
* @param config - Runnable configuration containing thread_id
|
|
179
|
-
* @param options - List options including limit, before checkpoint, and metadata filter
|
|
180
|
-
* @yields CheckpointTuple objects in descending order
|
|
181
|
-
* @throws Error if validation fails or operation fails
|
|
182
|
-
*/
|
|
183
|
-
async *list(config, options) {
|
|
184
|
-
const { limit, before, filter } = options ?? {};
|
|
185
|
-
const thread_id = config.configurable?.thread_id;
|
|
186
|
-
const checkpoint_ns = config.configurable?.checkpoint_ns;
|
|
187
|
-
// `config.signal` is LangChain's idiomatic AbortSignal field. We propagate
|
|
188
|
-
// it into each retry cycle AND check it before yielding, so a consumer
|
|
189
|
-
// calling `controller.abort()` during iteration stops producing items.
|
|
190
|
-
const signal = config.signal;
|
|
191
|
-
// Validate thread_id
|
|
192
|
-
if (typeof thread_id !== 'string') {
|
|
193
|
-
throw new Error('thread_id must be a string');
|
|
194
|
-
}
|
|
195
|
-
(0, utils_1.validateThreadId)(thread_id);
|
|
196
|
-
// Validate limit if provided
|
|
197
|
-
(0, utils_1.validateListLimit)(limit);
|
|
198
|
-
// Validate `before` checkpoint_id — LangGraph passes this back verbatim from
|
|
199
|
-
// a previous CheckpointTuple.config, but user callers can construct it
|
|
200
|
-
// manually. Without validation a malformed before-id could slip past the
|
|
201
|
-
// KeyCondition bound (payload items would get returned under `list({before})`).
|
|
202
|
-
const beforeCheckpointId = before?.configurable?.checkpoint_id;
|
|
203
|
-
if (beforeCheckpointId !== undefined) {
|
|
204
|
-
if (typeof beforeCheckpointId !== 'string') {
|
|
205
|
-
throw new Error('before.configurable.checkpoint_id must be a string');
|
|
206
|
-
}
|
|
207
|
-
(0, utils_1.validateCheckpointId)(beforeCheckpointId, false);
|
|
208
|
-
}
|
|
209
|
-
const expressionAttributeValues = {
|
|
210
|
-
':thread_id': thread_id,
|
|
211
|
-
...(checkpoint_ns !== undefined && { ':checkpoint_ns': checkpoint_ns }),
|
|
212
|
-
};
|
|
213
|
-
// Filter to metadata items only via the non-key `type` attribute (payload
|
|
214
|
-
// items don't carry `type`). We intentionally avoid using checkpoint_id in
|
|
215
|
-
// the KeyCondition to exclude payload items — any lex-bound approach
|
|
216
|
-
// silently drops metadata whose IDs sort above `PAYLOAD#`, which includes
|
|
217
|
-
// the very common case of lowercase-letter-prefixed IDs.
|
|
218
|
-
const filterParts = ['attribute_exists(#type)'];
|
|
219
|
-
if (checkpoint_ns !== undefined)
|
|
220
|
-
filterParts.push('checkpoint_ns = :checkpoint_ns');
|
|
221
|
-
const filterExpression = filterParts.join(' AND ');
|
|
222
|
-
// KeyCondition gates only by thread (and optional `before` sort-key bound).
|
|
223
|
-
let keyConditionExpression = 'thread_id = :thread_id';
|
|
224
|
-
if (before?.configurable?.checkpoint_id) {
|
|
225
|
-
keyConditionExpression = 'thread_id = :thread_id AND checkpoint_id < :before_checkpoint_id';
|
|
226
|
-
expressionAttributeValues[':before_checkpoint_id'] = before.configurable.checkpoint_id;
|
|
227
|
-
}
|
|
228
|
-
// When any server-side OR client-side filter reduces the returned set, we
|
|
229
|
-
// drop the DynamoDB Limit: Limit is applied BEFORE FilterExpression, so a
|
|
230
|
-
// small limit with heavy filtering truncates the result prematurely. The
|
|
231
|
-
// metadata filter (from CheckpointListOptions.filter) and the checkpoint_ns
|
|
232
|
-
// filter both qualify.
|
|
233
|
-
const hasMetadataFilter = filter && Object.keys(filter).length > 0;
|
|
234
|
-
const hasNsFilter = checkpoint_ns !== undefined;
|
|
235
|
-
const hasAnyFilter = hasMetadataFilter || hasNsFilter;
|
|
236
|
-
let yieldedCount = 0;
|
|
237
|
-
let iterationCount = 0;
|
|
238
|
-
let lastEvaluatedKey;
|
|
239
|
-
do {
|
|
240
|
-
// Safety net against pathological filter queries: if a thread has millions
|
|
241
|
-
// of checkpoints and the filter matches almost none, the scan could loop
|
|
242
|
-
// for minutes burning RCU. Abort with a clear error rather than hanging.
|
|
243
|
-
iterationCount++;
|
|
244
|
-
if (iterationCount > shared_1.MAX_LOOP_ITERATIONS) {
|
|
245
|
-
throw new Error(`list() exceeded ${shared_1.MAX_LOOP_ITERATIONS} DynamoDB pages without reaching the requested limit. ` +
|
|
246
|
-
`This usually indicates a filter that matches very few items in a large thread — ` +
|
|
247
|
-
`narrow the filter, add a more selective namespace, or redesign with a GSI.`);
|
|
248
|
-
}
|
|
249
|
-
const pageLimit = hasAnyFilter
|
|
250
|
-
? undefined
|
|
251
|
-
: limit
|
|
252
|
-
? Math.max(1, limit - yieldedCount)
|
|
253
|
-
: undefined;
|
|
254
|
-
signal?.throwIfAborted();
|
|
255
|
-
const result = await (0, shared_1.withDynamoDBRetry)(async () => {
|
|
256
|
-
return await this.client.query({
|
|
257
|
-
TableName: this.checkpointsTableName,
|
|
258
|
-
KeyConditionExpression: keyConditionExpression,
|
|
259
|
-
ExpressionAttributeValues: expressionAttributeValues,
|
|
260
|
-
ExpressionAttributeNames: { '#type': 'type' },
|
|
261
|
-
FilterExpression: filterExpression,
|
|
262
|
-
Limit: pageLimit,
|
|
263
|
-
ScanIndexForward: false, // Descending order
|
|
264
|
-
ExclusiveStartKey: lastEvaluatedKey,
|
|
265
|
-
});
|
|
266
|
-
}, { signal });
|
|
267
|
-
if (result.Items) {
|
|
268
|
-
const items = result.Items;
|
|
269
|
-
const payloadMap = await this.fetchCheckpointPayloadsBatch(items, signal);
|
|
270
|
-
for (const item of items) {
|
|
271
|
-
signal?.throwIfAborted();
|
|
272
|
-
const checkpointData = payloadMap.get(item.checkpoint_id) ?? new Uint8Array(0);
|
|
273
|
-
const tuple = await (0, utils_1.deserializeCheckpointTuple)(item, checkpointData, this.serde, this.compressor, this.s3Offloader);
|
|
274
|
-
// Apply metadata filter: skip checkpoints that don't match all filter entries.
|
|
275
|
-
if (hasMetadataFilter && !this.matchesFilter(tuple.metadata, filter)) {
|
|
276
|
-
continue;
|
|
277
|
-
}
|
|
278
|
-
yield tuple;
|
|
279
|
-
yieldedCount++;
|
|
280
|
-
if (limit && yieldedCount >= limit)
|
|
281
|
-
return;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
lastEvaluatedKey = result.LastEvaluatedKey;
|
|
285
|
-
} while (lastEvaluatedKey);
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* Fetch checkpoint payloads for a batch of metadata items.
|
|
289
|
-
* Uses BatchGetItem to fetch all payloads in one round trip instead of N+1 queries.
|
|
290
|
-
* Items with S3 keys or legacy inline data are resolved without a remote call.
|
|
291
|
-
*
|
|
292
|
-
* @param items - Checkpoint metadata items from a query result
|
|
293
|
-
* @returns Map from checkpoint_id to raw checkpoint data
|
|
294
|
-
*/
|
|
295
|
-
async fetchCheckpointPayloadsBatch(items, signal) {
|
|
296
|
-
const payloadMap = new Map();
|
|
297
|
-
// Partition items into groups
|
|
298
|
-
const splitItems = []; // Need PAYLOAD# fetch
|
|
299
|
-
for (const item of items) {
|
|
300
|
-
if (item.s3_checkpoint_key) {
|
|
301
|
-
// S3 offloaded — deserializeCheckpointTuple will download from S3
|
|
302
|
-
payloadMap.set(item.checkpoint_id, new Uint8Array(0));
|
|
303
|
-
}
|
|
304
|
-
else if (item.checkpoint && item.checkpoint.length > 0) {
|
|
305
|
-
// Legacy inline — use item.checkpoint directly
|
|
306
|
-
payloadMap.set(item.checkpoint_id, item.checkpoint);
|
|
307
|
-
}
|
|
308
|
-
else {
|
|
309
|
-
// New split format — needs PAYLOAD# fetch
|
|
310
|
-
splitItems.push(item);
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
if (splitItems.length === 0) {
|
|
314
|
-
return payloadMap;
|
|
315
|
-
}
|
|
316
|
-
// BatchGetItem supports up to 100 keys per call
|
|
317
|
-
const BATCH_GET_MAX = 100;
|
|
318
|
-
for (let i = 0; i < splitItems.length; i += BATCH_GET_MAX) {
|
|
319
|
-
const batch = splitItems.slice(i, i + BATCH_GET_MAX);
|
|
320
|
-
let keys = batch.map((item) => ({
|
|
321
|
-
thread_id: item.thread_id,
|
|
322
|
-
checkpoint_id: `${types_1.PAYLOAD_SK_PREFIX}${item.checkpoint_id}`,
|
|
323
|
-
}));
|
|
324
|
-
// Retry loop for UnprocessedKeys with exponential backoff
|
|
325
|
-
let retryDelay = shared_1.INITIAL_BACKOFF_DELAY_MS;
|
|
326
|
-
let retryCount = 0;
|
|
327
|
-
while (keys.length > 0) {
|
|
328
|
-
const batchResult = await (0, shared_1.withDynamoDBRetry)(async () => {
|
|
329
|
-
return await this.client.batchGet({
|
|
330
|
-
RequestItems: {
|
|
331
|
-
[this.checkpointsTableName]: { Keys: keys },
|
|
332
|
-
},
|
|
333
|
-
});
|
|
334
|
-
}, { signal });
|
|
335
|
-
// Map results — BatchGetItem returns items in arbitrary order
|
|
336
|
-
const responses = batchResult.Responses?.[this.checkpointsTableName];
|
|
337
|
-
if (responses) {
|
|
338
|
-
for (const response of responses) {
|
|
339
|
-
// Sanity-check the sort key before trimming it. Without this, a corrupted
|
|
340
|
-
// or migrated row missing the PAYLOAD# prefix would silently produce a
|
|
341
|
-
// garbage `originalId` and ripple into the "payload not found" path below.
|
|
342
|
-
if (!response.checkpoint_id?.startsWith(types_1.PAYLOAD_SK_PREFIX)) {
|
|
343
|
-
throw new Error(`Unexpected payload item sort key in ${this.checkpointsTableName}: ` +
|
|
344
|
-
`expected to start with "${types_1.PAYLOAD_SK_PREFIX}" but got "${response.checkpoint_id}". ` +
|
|
345
|
-
`This indicates table corruption or a stale migration — investigate before retrying.`);
|
|
346
|
-
}
|
|
347
|
-
const originalId = response.checkpoint_id.substring(types_1.PAYLOAD_SK_PREFIX.length);
|
|
348
|
-
payloadMap.set(originalId, response.checkpoint);
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
// Handle UnprocessedKeys with exponential backoff
|
|
352
|
-
const unprocessed = batchResult.UnprocessedKeys?.[this.checkpointsTableName]?.Keys;
|
|
353
|
-
if (unprocessed && unprocessed.length > 0) {
|
|
354
|
-
retryCount++;
|
|
355
|
-
if (retryCount > shared_1.MAX_UNPROCESSED_RETRIES) {
|
|
356
|
-
throw new Error(`Failed to fetch all checkpoint payloads after ${shared_1.MAX_UNPROCESSED_RETRIES} retries. ` +
|
|
357
|
-
`${unprocessed.length} keys remain unprocessed.`);
|
|
358
|
-
}
|
|
359
|
-
// Full jitter so list() calls across concurrent workers don't synchronize
|
|
360
|
-
// and re-pressure the partition on every retry cycle.
|
|
361
|
-
await (0, shared_1.sleep)((0, shared_1.fullJitter)(retryDelay), signal);
|
|
362
|
-
retryDelay = (0, shared_1.nextBackoffDelay)(retryDelay);
|
|
363
|
-
keys = unprocessed;
|
|
364
|
-
}
|
|
365
|
-
else {
|
|
366
|
-
break;
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
// Verify all split items were fetched
|
|
371
|
-
for (const item of splitItems) {
|
|
372
|
-
if (!payloadMap.has(item.checkpoint_id)) {
|
|
373
|
-
throw new Error(`Checkpoint payload item not found for thread_id=${item.thread_id}, checkpoint_id=${item.checkpoint_id}`);
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
return payloadMap;
|
|
377
|
-
}
|
|
378
|
-
/**
|
|
379
|
-
* Check if checkpoint metadata matches all entries in the filter.
|
|
380
|
-
* Each filter key must exactly match the corresponding metadata value.
|
|
381
|
-
*
|
|
382
|
-
* @param metadata - Deserialized checkpoint metadata
|
|
383
|
-
* @param filter - Key-value pairs to match against metadata
|
|
384
|
-
* @returns true if all filter entries match
|
|
385
|
-
*/
|
|
386
|
-
matchesFilter(metadata, filter) {
|
|
387
|
-
if (!metadata)
|
|
388
|
-
return false;
|
|
389
|
-
return Object.entries(filter).every(([key, value]) => metadata[key] === value);
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
exports.DynamoDBSaver = DynamoDBSaver;
|
|
393
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/checkpointer/index.ts"],"names":[],"mappings":"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"}
|