@farukada/aws-langgraph-dynamodb-ts 1.0.0-rc.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +390 -193
- package/dist/{backfill → cjs/backfill}/backfill.d.ts +15 -12
- package/dist/cjs/backfill/backfill.js +177 -0
- package/dist/{checkpointer → cjs/checkpointer}/actions/delete-thread.d.ts +1 -1
- package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
- package/dist/{checkpointer → cjs/checkpointer}/actions/get-tuple.d.ts +4 -3
- package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
- package/dist/{checkpointer → cjs/checkpointer}/actions/list.d.ts +7 -4
- package/dist/cjs/checkpointer/actions/list.js +70 -0
- package/dist/{checkpointer → cjs/checkpointer}/actions/put-writes.d.ts +8 -6
- package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
- package/dist/{checkpointer → cjs/checkpointer}/actions/put.d.ts +21 -15
- package/dist/cjs/checkpointer/actions/put.js +79 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/delta-history.d.ts +38 -26
- package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/listing.d.ts +4 -4
- package/dist/cjs/checkpointer/internal/listing.js +104 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/parse.d.ts +51 -15
- package/dist/cjs/checkpointer/internal/parse.js +184 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/pending-writes.d.ts +64 -25
- package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/read.d.ts +15 -10
- package/dist/cjs/checkpointer/internal/read.js +132 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/rows.d.ts +94 -21
- package/dist/cjs/checkpointer/internal/rows.js +356 -0
- package/dist/{checkpointer → cjs/checkpointer}/internal/setup.d.ts +13 -20
- package/dist/cjs/checkpointer/internal/setup.js +25 -0
- package/dist/{checkpointer → cjs/checkpointer}/saver.d.ts +72 -36
- package/dist/cjs/checkpointer/saver.js +56 -0
- package/dist/{checkpointer → cjs/checkpointer}/types.d.ts +1 -1
- package/dist/cjs/checkpointer/types.js +2 -0
- package/dist/{factory → cjs/factory}/factory.d.ts +25 -20
- package/dist/cjs/factory/factory.js +137 -0
- package/dist/{factory → cjs/factory}/types.d.ts +12 -12
- package/dist/cjs/factory/types.js +2 -0
- package/dist/{history → cjs/history}/actions/add-messages.d.ts +18 -10
- package/dist/cjs/history/actions/add-messages.js +17 -0
- package/dist/{history → cjs/history}/actions/clear.d.ts +1 -1
- package/dist/cjs/history/actions/clear.js +29 -0
- package/dist/{history → cjs/history}/actions/get-messages.d.ts +11 -9
- package/dist/cjs/history/actions/get-messages.js +58 -0
- package/dist/{history → cjs/history}/actions/list-sessions.d.ts +3 -3
- package/dist/cjs/history/actions/list-sessions.js +67 -0
- package/dist/{history → cjs/history}/actions/reconcile-count.d.ts +13 -9
- package/dist/cjs/history/actions/reconcile-count.js +8 -0
- package/dist/{history → cjs/history}/chat-message-history.d.ts +62 -30
- package/dist/cjs/history/chat-message-history.js +61 -0
- package/dist/{history → cjs/history}/internal/append.d.ts +64 -32
- package/dist/cjs/history/internal/append.js +267 -0
- package/dist/{history → cjs/history}/internal/message-read.d.ts +3 -3
- package/dist/cjs/history/internal/message-read.js +93 -0
- package/dist/{history → cjs/history}/internal/parse.d.ts +2 -2
- package/dist/cjs/history/internal/parse.js +113 -0
- package/dist/{history → cjs/history}/internal/rows.d.ts +11 -10
- package/dist/cjs/history/internal/rows.js +96 -0
- package/dist/{history → cjs/history}/internal/session.d.ts +41 -22
- package/dist/cjs/history/internal/session.js +296 -0
- package/dist/{history → cjs/history}/internal/setup.d.ts +2 -2
- package/dist/cjs/history/internal/setup.js +60 -0
- package/dist/{history → cjs/history}/session-adapter.d.ts +0 -6
- package/dist/cjs/history/session-adapter.js +38 -0
- package/dist/{history → cjs/history}/types.d.ts +18 -15
- package/dist/cjs/history/types.js +2 -0
- package/dist/{index.d.ts → cjs/index.d.ts} +27 -27
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/package.json +1 -0
- package/dist/{shared → cjs/shared}/adapter.d.ts +27 -16
- package/dist/cjs/shared/adapter.js +70 -0
- package/dist/cjs/shared/clock.js +14 -0
- package/dist/{shared → cjs/shared}/codec/codec.d.ts +37 -20
- package/dist/cjs/shared/codec/codec.js +162 -0
- package/dist/{shared → cjs/shared}/codec/compression.d.ts +9 -4
- package/dist/cjs/shared/codec/compression.js +45 -0
- package/dist/cjs/shared/codec/json-serde.js +58 -0
- package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +2 -1
- package/dist/cjs/shared/codec/s3/client-types.js +6 -0
- package/dist/{shared → cjs/shared}/codec/s3/client.d.ts +25 -7
- package/dist/cjs/shared/codec/s3/client.js +78 -0
- package/dist/{shared → cjs/shared}/codec/s3/config.d.ts +12 -7
- package/dist/cjs/shared/codec/s3/config.js +92 -0
- package/dist/{shared → cjs/shared}/codec/s3/lifecycle.d.ts +71 -17
- package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
- package/dist/{shared → cjs/shared}/codec/s3/offloader.d.ts +42 -29
- package/dist/cjs/shared/codec/s3/offloader.js +289 -0
- package/dist/cjs/shared/concurrency.js +31 -0
- package/dist/{shared → cjs/shared}/dynamodb/abort.d.ts +2 -2
- package/dist/cjs/shared/dynamodb/abort.js +16 -0
- package/dist/{shared → cjs/shared}/dynamodb/batch-write.d.ts +2 -2
- package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
- package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
- package/dist/{shared → cjs/shared}/dynamodb/client.d.ts +24 -22
- package/dist/cjs/shared/dynamodb/client.js +40 -0
- package/dist/{shared → cjs/shared}/dynamodb/idempotent-write.d.ts +64 -19
- package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
- package/dist/{shared → cjs/shared}/dynamodb/paginate.d.ts +2 -2
- package/dist/cjs/shared/dynamodb/paginate.js +90 -0
- package/dist/{shared → cjs/shared}/dynamodb/partition-delete.d.ts +6 -6
- package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
- package/dist/{shared → cjs/shared}/dynamodb/recency-index.d.ts +27 -15
- package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
- package/dist/{shared → cjs/shared}/dynamodb/retry.d.ts +37 -6
- package/dist/cjs/shared/dynamodb/retry.js +193 -0
- package/dist/cjs/shared/dynamodb/row-size.d.ts +33 -0
- package/dist/cjs/shared/dynamodb/row-size.js +30 -0
- package/dist/{shared → cjs/shared}/dynamodb/table-schema.d.ts +27 -18
- package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
- package/dist/{shared → cjs/shared}/errors/base-error.d.ts +42 -7
- package/dist/cjs/shared/errors/base-error.js +73 -0
- package/dist/{shared → cjs/shared}/errors/boundary.d.ts +29 -14
- package/dist/cjs/shared/errors/boundary.js +61 -0
- package/dist/cjs/shared/errors/classify.d.ts +206 -0
- package/dist/cjs/shared/errors/classify.js +232 -0
- package/dist/{shared → cjs/shared}/errors/error-code.d.ts +17 -10
- package/dist/cjs/shared/errors/error-code.js +27 -0
- package/dist/{shared → cjs/shared}/errors/errors.d.ts +75 -9
- package/dist/cjs/shared/errors/errors.js +123 -0
- package/dist/cjs/shared/logging/logger.js +30 -0
- package/dist/{shared → cjs/shared}/logging/redaction.d.ts +8 -4
- package/dist/cjs/shared/logging/redaction.js +145 -0
- package/dist/{shared → cjs/shared}/logging/secret-patterns.d.ts +30 -7
- package/dist/cjs/shared/logging/secret-patterns.js +93 -0
- package/dist/cjs/shared/logging/truncate.js +31 -0
- package/dist/{shared → cjs/shared}/options.d.ts +27 -11
- package/dist/cjs/shared/options.js +2 -0
- package/dist/cjs/shared/ulid.js +83 -0
- package/dist/{shared → cjs/shared}/validation/collaborators.d.ts +21 -2
- package/dist/cjs/shared/validation/collaborators.js +79 -0
- package/dist/{shared → cjs/shared}/validation/option-shape.d.ts +7 -5
- package/dist/cjs/shared/validation/option-shape.js +31 -0
- package/dist/{shared → cjs/shared}/validation/options.d.ts +4 -4
- package/dist/cjs/shared/validation/options.js +166 -0
- package/dist/cjs/shared/validation/primitives.js +114 -0
- package/dist/{shared → cjs/shared}/validation/ttl.d.ts +26 -9
- package/dist/cjs/shared/validation/ttl.js +52 -0
- package/dist/{store → cjs/store}/actions/list-namespaces.d.ts +5 -5
- package/dist/cjs/store/actions/list-namespaces.js +92 -0
- package/dist/{store → cjs/store}/actions/put.d.ts +11 -4
- package/dist/cjs/store/actions/put.js +49 -0
- package/dist/{store → cjs/store}/actions/reconcile-vector-index.d.ts +5 -5
- package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
- package/dist/{store → cjs/store}/actions/search.d.ts +2 -2
- package/dist/cjs/store/actions/search.js +26 -0
- package/dist/cjs/store/internal/batch-plan.d.ts +56 -0
- package/dist/cjs/store/internal/batch-plan.js +32 -0
- package/dist/{store → cjs/store}/internal/filter.d.ts +3 -3
- package/dist/cjs/store/internal/filter.js +64 -0
- package/dist/cjs/store/internal/get-item.d.ts +77 -0
- package/dist/cjs/store/internal/get-item.js +58 -0
- package/dist/{store → cjs/store}/internal/item-write.d.ts +72 -32
- package/dist/cjs/store/internal/item-write.js +181 -0
- package/dist/{store → cjs/store}/internal/parse.d.ts +15 -10
- package/dist/cjs/store/internal/parse.js +180 -0
- package/dist/{store → cjs/store}/internal/rows.d.ts +38 -34
- package/dist/cjs/store/internal/rows.js +166 -0
- package/dist/{store → cjs/store}/internal/semantic-search.d.ts +2 -2
- package/dist/cjs/store/internal/semantic-search.js +211 -0
- package/dist/{store → cjs/store}/internal/setup.d.ts +10 -15
- package/dist/cjs/store/internal/setup.js +103 -0
- package/dist/{store → cjs/store}/internal/table-search.d.ts +5 -5
- package/dist/cjs/store/internal/table-search.js +123 -0
- package/dist/{store → cjs/store}/internal/vector-index.d.ts +26 -15
- package/dist/cjs/store/internal/vector-index.js +269 -0
- package/dist/{store → cjs/store}/store.d.ts +82 -39
- package/dist/cjs/store/store.js +97 -0
- package/dist/{store → cjs/store}/types.d.ts +25 -10
- package/dist/cjs/store/types.js +2 -0
- package/dist/cjs/store/vector-backend.js +4 -0
- package/dist/esm/backfill/backfill.d.ts +171 -0
- package/dist/esm/backfill/backfill.js +170 -0
- package/dist/{checkpointer/actions/delete-thread.js → esm/checkpointer/actions/delete-thread.d.ts} +4 -26
- package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
- package/dist/{checkpointer/actions/get-tuple.js → esm/checkpointer/actions/get-tuple.d.ts} +7 -24
- package/dist/esm/checkpointer/actions/get-tuple.js +19 -0
- package/dist/esm/checkpointer/actions/list.d.ts +55 -0
- package/dist/esm/checkpointer/actions/list.js +67 -0
- package/dist/{checkpointer/actions/put-writes.js → esm/checkpointer/actions/put-writes.d.ts} +10 -37
- package/dist/esm/checkpointer/actions/put-writes.js +18 -0
- package/dist/esm/checkpointer/actions/put.d.ts +95 -0
- package/dist/esm/checkpointer/actions/put.js +75 -0
- package/dist/esm/checkpointer/internal/delta-history.d.ts +124 -0
- package/dist/esm/checkpointer/internal/delta-history.js +126 -0
- package/dist/{checkpointer/internal/listing.js → esm/checkpointer/internal/listing.d.ts} +22 -118
- package/dist/esm/checkpointer/internal/listing.js +95 -0
- package/dist/esm/checkpointer/internal/parse.d.ts +298 -0
- package/dist/esm/checkpointer/internal/parse.js +169 -0
- package/dist/esm/checkpointer/internal/pending-writes.d.ts +314 -0
- package/dist/esm/checkpointer/internal/pending-writes.js +229 -0
- package/dist/esm/checkpointer/internal/read.d.ts +135 -0
- package/dist/esm/checkpointer/internal/read.js +125 -0
- package/dist/esm/checkpointer/internal/rows.d.ts +644 -0
- package/dist/esm/checkpointer/internal/rows.js +323 -0
- package/dist/esm/checkpointer/internal/setup.d.ts +47 -0
- package/dist/esm/checkpointer/internal/setup.js +21 -0
- package/dist/{checkpointer/saver.js → esm/checkpointer/saver.d.ts} +84 -87
- package/dist/esm/checkpointer/saver.js +52 -0
- package/dist/esm/checkpointer/types.d.ts +51 -0
- package/dist/esm/checkpointer/types.js +1 -0
- package/dist/esm/factory/factory.d.ts +154 -0
- package/dist/esm/factory/factory.js +133 -0
- package/dist/esm/factory/types.d.ts +76 -0
- package/dist/esm/factory/types.js +1 -0
- package/dist/{history/actions/add-messages.js → esm/history/actions/add-messages.d.ts} +20 -26
- package/dist/esm/history/actions/add-messages.js +14 -0
- package/dist/{history/actions/clear.js → esm/history/actions/clear.d.ts} +4 -35
- package/dist/esm/history/actions/clear.js +26 -0
- package/dist/esm/history/actions/get-messages.d.ts +60 -0
- package/dist/esm/history/actions/get-messages.js +55 -0
- package/dist/esm/history/actions/list-sessions.d.ts +55 -0
- package/dist/esm/history/actions/list-sessions.js +64 -0
- package/dist/{history/actions/reconcile-count.js → esm/history/actions/reconcile-count.d.ts} +14 -16
- package/dist/esm/history/actions/reconcile-count.js +5 -0
- package/dist/{history/chat-message-history.js → esm/history/chat-message-history.d.ts} +76 -87
- package/dist/esm/history/chat-message-history.js +57 -0
- package/dist/esm/history/internal/append.d.ts +244 -0
- package/dist/esm/history/internal/append.js +259 -0
- package/dist/esm/history/internal/message-read.d.ts +84 -0
- package/dist/esm/history/internal/message-read.js +89 -0
- package/dist/esm/history/internal/parse.d.ts +153 -0
- package/dist/esm/history/internal/parse.js +105 -0
- package/dist/{history/internal/rows.js → esm/history/internal/rows.d.ts} +58 -112
- package/dist/esm/history/internal/rows.js +83 -0
- package/dist/esm/history/internal/session.d.ts +350 -0
- package/dist/esm/history/internal/session.js +285 -0
- package/dist/esm/history/internal/setup.d.ts +64 -0
- package/dist/esm/history/internal/setup.js +56 -0
- package/dist/{history/session-adapter.js → esm/history/session-adapter.d.ts} +25 -39
- package/dist/esm/history/session-adapter.js +34 -0
- package/dist/esm/history/types.d.ts +102 -0
- package/dist/esm/history/types.js +1 -0
- package/dist/esm/index.d.ts +53 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/shared/adapter.d.ts +146 -0
- package/dist/esm/shared/adapter.js +65 -0
- package/dist/{shared/clock.js → esm/shared/clock.d.ts} +3 -14
- package/dist/esm/shared/clock.js +9 -0
- package/dist/esm/shared/codec/codec.d.ts +336 -0
- package/dist/esm/shared/codec/codec.js +150 -0
- package/dist/esm/shared/codec/compression.d.ts +66 -0
- package/dist/esm/shared/codec/compression.js +40 -0
- package/dist/esm/shared/codec/json-serde.d.ts +80 -0
- package/dist/esm/shared/codec/json-serde.js +54 -0
- package/dist/esm/shared/codec/s3/client-types.d.ts +54 -0
- package/dist/esm/shared/codec/s3/client-types.js +3 -0
- package/dist/esm/shared/codec/s3/client.d.ts +63 -0
- package/dist/esm/shared/codec/s3/client.js +40 -0
- package/dist/{shared/codec/s3/config.js → esm/shared/codec/s3/config.d.ts} +45 -93
- package/dist/esm/shared/codec/s3/config.js +79 -0
- package/dist/esm/shared/codec/s3/lifecycle.d.ts +220 -0
- package/dist/esm/shared/codec/s3/lifecycle.js +214 -0
- package/dist/esm/shared/codec/s3/offloader.d.ts +428 -0
- package/dist/esm/shared/codec/s3/offloader.js +278 -0
- package/dist/{shared/concurrency.js → esm/shared/concurrency.d.ts} +2 -37
- package/dist/esm/shared/concurrency.js +27 -0
- package/dist/{shared/dynamodb/abort.js → esm/shared/dynamodb/abort.d.ts} +4 -16
- package/dist/esm/shared/dynamodb/abort.js +12 -0
- package/dist/esm/shared/dynamodb/batch-write.d.ts +86 -0
- package/dist/esm/shared/dynamodb/batch-write.js +74 -0
- package/dist/{shared/dynamodb/cancellation.js → esm/shared/dynamodb/cancellation.d.ts} +25 -53
- package/dist/esm/shared/dynamodb/cancellation.js +30 -0
- package/dist/{shared/dynamodb/client.js → esm/shared/dynamodb/client.d.ts} +74 -64
- package/dist/esm/shared/dynamodb/client.js +35 -0
- package/dist/{shared/dynamodb/idempotent-write.js → esm/shared/dynamodb/idempotent-write.d.ts} +172 -169
- package/dist/esm/shared/dynamodb/idempotent-write.js +153 -0
- package/dist/esm/shared/dynamodb/paginate.d.ts +111 -0
- package/dist/esm/shared/dynamodb/paginate.js +84 -0
- package/dist/esm/shared/dynamodb/partition-delete.d.ts +204 -0
- package/dist/esm/shared/dynamodb/partition-delete.js +171 -0
- package/dist/esm/shared/dynamodb/recency-index.d.ts +243 -0
- package/dist/esm/shared/dynamodb/recency-index.js +136 -0
- package/dist/esm/shared/dynamodb/retry.d.ts +317 -0
- package/dist/esm/shared/dynamodb/retry.js +180 -0
- package/dist/esm/shared/dynamodb/row-size.d.ts +33 -0
- package/dist/esm/shared/dynamodb/row-size.js +26 -0
- package/dist/{shared/dynamodb/table-schema.js → esm/shared/dynamodb/table-schema.d.ts} +57 -67
- package/dist/esm/shared/dynamodb/table-schema.js +43 -0
- package/dist/esm/shared/errors/base-error.d.ts +231 -0
- package/dist/esm/shared/errors/base-error.js +64 -0
- package/dist/esm/shared/errors/boundary.d.ts +86 -0
- package/dist/esm/shared/errors/boundary.js +54 -0
- package/dist/esm/shared/errors/classify.d.ts +206 -0
- package/dist/esm/shared/errors/classify.js +220 -0
- package/dist/{shared/errors/error-code.js → esm/shared/errors/error-code.d.ts} +39 -43
- package/dist/esm/shared/errors/error-code.js +24 -0
- package/dist/{shared/errors/errors.js → esm/shared/errors/errors.d.ts} +92 -98
- package/dist/esm/shared/errors/errors.js +110 -0
- package/dist/{shared/logging/logger.js → esm/shared/logging/logger.d.ts} +22 -52
- package/dist/esm/shared/logging/logger.js +25 -0
- package/dist/esm/shared/logging/redaction.d.ts +123 -0
- package/dist/esm/shared/logging/redaction.js +140 -0
- package/dist/{shared/logging/secret-patterns.js → esm/shared/logging/secret-patterns.d.ts} +46 -87
- package/dist/esm/shared/logging/secret-patterns.js +83 -0
- package/dist/{shared/logging/truncate.js → esm/shared/logging/truncate.d.ts} +6 -40
- package/dist/esm/shared/logging/truncate.js +25 -0
- package/dist/esm/shared/options.d.ts +100 -0
- package/dist/esm/shared/options.js +1 -0
- package/dist/{shared/ulid.js → esm/shared/ulid.d.ts} +4 -84
- package/dist/esm/shared/ulid.js +77 -0
- package/dist/{shared/validation/collaborators.js → esm/shared/validation/collaborators.d.ts} +37 -65
- package/dist/esm/shared/validation/collaborators.js +70 -0
- package/dist/{shared/validation/option-shape.js → esm/shared/validation/option-shape.d.ts} +14 -36
- package/dist/esm/shared/validation/option-shape.js +24 -0
- package/dist/esm/shared/validation/options.d.ts +145 -0
- package/dist/esm/shared/validation/options.js +156 -0
- package/dist/{shared/validation/primitives.js → esm/shared/validation/primitives.d.ts} +30 -125
- package/dist/esm/shared/validation/primitives.js +100 -0
- package/dist/esm/shared/validation/ttl.d.ts +94 -0
- package/dist/esm/shared/validation/ttl.js +46 -0
- package/dist/esm/store/actions/list-namespaces.d.ts +79 -0
- package/dist/esm/store/actions/list-namespaces.js +86 -0
- package/dist/esm/store/actions/put.d.ts +43 -0
- package/dist/esm/store/actions/put.js +46 -0
- package/dist/{store/actions/reconcile-vector-index.js → esm/store/actions/reconcile-vector-index.d.ts} +8 -16
- package/dist/esm/store/actions/reconcile-vector-index.js +10 -0
- package/dist/esm/store/actions/search.d.ts +38 -0
- package/dist/esm/store/actions/search.js +23 -0
- package/dist/esm/store/internal/batch-plan.d.ts +56 -0
- package/dist/esm/store/internal/batch-plan.js +28 -0
- package/dist/esm/store/internal/filter.d.ts +43 -0
- package/dist/esm/store/internal/filter.js +60 -0
- package/dist/esm/store/internal/get-item.d.ts +77 -0
- package/dist/esm/store/internal/get-item.js +54 -0
- package/dist/esm/store/internal/item-write.d.ts +270 -0
- package/dist/esm/store/internal/item-write.js +173 -0
- package/dist/esm/store/internal/parse.d.ts +230 -0
- package/dist/esm/store/internal/parse.js +169 -0
- package/dist/{store/internal/rows.js → esm/store/internal/rows.d.ts} +111 -199
- package/dist/esm/store/internal/rows.js +147 -0
- package/dist/esm/store/internal/semantic-search.d.ts +168 -0
- package/dist/esm/store/internal/semantic-search.js +200 -0
- package/dist/esm/store/internal/setup.d.ts +96 -0
- package/dist/esm/store/internal/setup.js +98 -0
- package/dist/esm/store/internal/table-search.d.ts +100 -0
- package/dist/esm/store/internal/table-search.js +119 -0
- package/dist/esm/store/internal/vector-index.d.ts +258 -0
- package/dist/esm/store/internal/vector-index.js +256 -0
- package/dist/{store/store.js → esm/store/store.d.ts} +99 -133
- package/dist/esm/store/store.js +93 -0
- package/dist/esm/store/types.d.ts +111 -0
- package/dist/esm/store/types.js +1 -0
- package/dist/esm/store/vector-backend.d.ts +104 -0
- package/dist/esm/store/vector-backend.js +1 -0
- package/package.json +50 -44
- package/dist/backfill/backfill.js +0 -393
- package/dist/checkpointer/actions/list.js +0 -142
- package/dist/checkpointer/actions/put.js +0 -195
- package/dist/checkpointer/internal/delta-history.js +0 -252
- package/dist/checkpointer/internal/parse.js +0 -372
- package/dist/checkpointer/internal/pending-writes.js +0 -588
- package/dist/checkpointer/internal/read.js +0 -264
- package/dist/checkpointer/internal/rows.js +0 -834
- package/dist/checkpointer/internal/setup.js +0 -72
- package/dist/checkpointer/types.js +0 -12
- package/dist/factory/factory.js +0 -266
- package/dist/factory/types.js +0 -10
- package/dist/history/actions/get-messages.js +0 -141
- package/dist/history/actions/list-sessions.js +0 -156
- package/dist/history/internal/append.js +0 -500
- package/dist/history/internal/message-read.js +0 -204
- package/dist/history/internal/parse.js +0 -252
- package/dist/history/internal/session.js +0 -628
- package/dist/history/internal/setup.js +0 -106
- package/dist/history/types.js +0 -12
- package/dist/index.js +0 -51
- package/dist/shared/adapter.js +0 -143
- package/dist/shared/codec/codec.js +0 -441
- package/dist/shared/codec/compression.js +0 -89
- package/dist/shared/codec/json-serde.js +0 -191
- package/dist/shared/codec/s3/client-types.js +0 -26
- package/dist/shared/codec/s3/client.js +0 -97
- package/dist/shared/codec/s3/lifecycle.js +0 -355
- package/dist/shared/codec/s3/offloader.js +0 -658
- package/dist/shared/dynamodb/batch-write.js +0 -173
- package/dist/shared/dynamodb/paginate.js +0 -188
- package/dist/shared/dynamodb/partition-delete.js +0 -340
- package/dist/shared/dynamodb/recency-index.js +0 -377
- package/dist/shared/dynamodb/retry.js +0 -463
- package/dist/shared/errors/base-error.js +0 -174
- package/dist/shared/errors/boundary.js +0 -143
- package/dist/shared/errors/classify.d.ts +0 -97
- package/dist/shared/errors/classify.js +0 -257
- package/dist/shared/logging/redaction.js +0 -316
- package/dist/shared/options.js +0 -11
- package/dist/shared/validation/options.js +0 -328
- package/dist/shared/validation/ttl.js +0 -132
- package/dist/store/actions/list-namespaces.js +0 -197
- package/dist/store/actions/put.js +0 -78
- package/dist/store/actions/search.js +0 -66
- package/dist/store/internal/batch-plan.d.ts +0 -26
- package/dist/store/internal/batch-plan.js +0 -109
- package/dist/store/internal/filter.js +0 -137
- package/dist/store/internal/get-item.d.ts +0 -45
- package/dist/store/internal/get-item.js +0 -115
- package/dist/store/internal/item-write.js +0 -463
- package/dist/store/internal/parse.js +0 -350
- package/dist/store/internal/semantic-search.js +0 -389
- package/dist/store/internal/setup.js +0 -223
- package/dist/store/internal/table-search.js +0 -213
- package/dist/store/internal/vector-index.js +0 -546
- package/dist/store/types.js +0 -15
- package/dist/store/vector-backend.js +0 -17
- /package/dist/{shared → cjs/shared}/clock.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/codec/json-serde.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/concurrency.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/dynamodb/cancellation.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/logging/logger.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/logging/truncate.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/ulid.d.ts +0 -0
- /package/dist/{shared → cjs/shared}/validation/primitives.d.ts +0 -0
- /package/dist/{store → cjs/store}/vector-backend.d.ts +0 -0
|
@@ -1,38 +1,28 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Hides the checkpointer's collaborators behind LangGraph's saver contract.
|
|
4
3
|
*
|
|
5
4
|
* `DynamoDBSaver` is the `BaseCheckpointSaver` a graph is handed: it resolves
|
|
6
5
|
* its client, offloader, logger and retry policy once and delegates each
|
|
7
6
|
* read and write to one action, save `getDeltaChannelHistory`, whose walk
|
|
8
|
-
* lives in `internal/delta-history` instead.
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* the
|
|
12
|
-
*
|
|
7
|
+
* lives in `internal/delta-history` instead. Every method is also the error
|
|
8
|
+
* boundary, so a raw AWS SDK error never reaches a caller unclassified
|
|
9
|
+
* (record 13) — an asynchronous one through `guardPublic`/`guardPublicIterable`,
|
|
10
|
+
* and the synchronous `destroy`, which releases what the saver owns, through
|
|
11
|
+
* `guardPublicSync`. Actions can be split, merged or reordered without the
|
|
12
|
+
* public surface moving.
|
|
13
13
|
*/
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const collaborators_1 = require("../shared/validation/collaborators");
|
|
19
|
-
const option_shape_1 = require("../shared/validation/option-shape");
|
|
20
|
-
const delete_thread_1 = require("./actions/delete-thread");
|
|
21
|
-
const get_tuple_1 = require("./actions/get-tuple");
|
|
22
|
-
const list_1 = require("./actions/list");
|
|
23
|
-
const put_1 = require("./actions/put");
|
|
24
|
-
const put_writes_1 = require("./actions/put-writes");
|
|
25
|
-
const delta_history_1 = require("./internal/delta-history");
|
|
26
|
-
const parse_1 = require("./internal/parse");
|
|
27
|
-
const setup_1 = require("./internal/setup");
|
|
14
|
+
import type { RunnableConfig } from '@langchain/core/runnables';
|
|
15
|
+
import { BaseCheckpointSaver, type ChannelVersions, type Checkpoint, type CheckpointListOptions, type CheckpointMetadata, type CheckpointTuple, type DeltaChannelHistory, type PendingWrite } from '@langchain/langgraph-checkpoint';
|
|
16
|
+
import type { CancelOptions } from '../shared/options.js';
|
|
17
|
+
import type { DeltaChannelHistoryOptions, DynamoDBSaverOptions } from './types.js';
|
|
28
18
|
/**
|
|
29
19
|
* DynamoDB-backed LangGraph checkpoint saver. Every public method rejects only
|
|
30
20
|
* with this library's error, whose `code` says what failed — an AWS failure
|
|
31
21
|
* included.
|
|
32
22
|
*/
|
|
33
|
-
class DynamoDBSaver extends
|
|
34
|
-
context;
|
|
35
|
-
shell;
|
|
23
|
+
export declare class DynamoDBSaver extends BaseCheckpointSaver {
|
|
24
|
+
private readonly context;
|
|
25
|
+
private readonly shell;
|
|
36
26
|
/**
|
|
37
27
|
* Accepts: `options` — validated here, so a misconfiguration surfaces at
|
|
38
28
|
* construction rather than on the first request. `options.serde` reaches the
|
|
@@ -47,12 +37,7 @@ class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
47
37
|
* Guarantees: no I/O. Constructing a saver issues no request, so it is safe
|
|
48
38
|
* at module scope and in a Lambda's init phase.
|
|
49
39
|
*/
|
|
50
|
-
constructor(options)
|
|
51
|
-
super((0, option_shape_1.parseShape)(options, setup_1.SAVER_KEYS, 'options').serde);
|
|
52
|
-
const setup = (0, setup_1.setUpCheckpointer)(options, this.serde);
|
|
53
|
-
this.context = setup.context;
|
|
54
|
-
this.shell = setup.shell;
|
|
55
|
-
}
|
|
40
|
+
constructor(options: DynamoDBSaverOptions);
|
|
56
41
|
/**
|
|
57
42
|
* Read one checkpoint with its metadata and pending writes.
|
|
58
43
|
*
|
|
@@ -65,7 +50,7 @@ class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
65
50
|
*
|
|
66
51
|
* Returns: the tuple, or `undefined` for an unknown thread, an unknown
|
|
67
52
|
* checkpoint, a config naming no thread, or a checkpoint whose payload row is
|
|
68
|
-
*
|
|
53
|
+
* gone — a thread being deleted, or an expiry sweep that reached it first.
|
|
69
54
|
*
|
|
70
55
|
* Throws: `VALIDATION`, before any read, naming `config` for a config that
|
|
71
56
|
* is not an object, `configurable` for a `configurable` that is present and
|
|
@@ -85,11 +70,12 @@ class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
85
70
|
* Guarantees: strongly consistent, so a checkpoint just written is always
|
|
86
71
|
* seen.
|
|
87
72
|
*/
|
|
88
|
-
|
|
89
|
-
return (0, boundary_1.guardPublic)('saver.getTuple', () => (0, get_tuple_1.getCheckpointTuple)(this.context, config));
|
|
90
|
-
}
|
|
73
|
+
getTuple(config: RunnableConfig): Promise<CheckpointTuple | undefined>;
|
|
91
74
|
/**
|
|
92
|
-
* Stream checkpoints newest first
|
|
75
|
+
* Stream checkpoints newest first — within a thread, and across threads
|
|
76
|
+
* through the recency index; the table scan a thread-less call falls back to
|
|
77
|
+
* without `indexName` yields in the table's own order, oldest first within a
|
|
78
|
+
* thread and threads in no particular order.
|
|
93
79
|
*
|
|
94
80
|
* Accepts: `config` — one namespace, every namespace of a thread when
|
|
95
81
|
* `checkpoint_ns` is omitted, or every thread in the table when `thread_id`
|
|
@@ -107,15 +93,17 @@ class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
107
93
|
* `config`, `configurable` or `signal` for a config of the wrong shape, as
|
|
108
94
|
* {@link getTuple} does, or `thread_id`, `checkpoint_ns`, `checkpoint_id` or
|
|
109
95
|
* `thread_ts` for a malformed identifier — all checked before `options`;
|
|
110
|
-
* then `options` for options that are not an object, `
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
* `MAX_PAGE_LIMIT` (10,000), and `before` for a `before` that is not an
|
|
96
|
+
* then `options` for options that are not an object, `filter` for a filter
|
|
97
|
+
* that is not an object, `limit` for a limit that is not an integer from 0 to
|
|
98
|
+
* 10,000, and `before` for a `before` that is not an
|
|
114
99
|
* object or whose `configurable.checkpoint_id` is
|
|
115
100
|
* neither absent (`undefined`, `null` or `''`) nor a well-formed checkpoint
|
|
116
101
|
* id. `FORMAT_UNSUPPORTED`; `RESULT_TRUNCATED`, without a `thread_id` and
|
|
117
102
|
* with `indexName`, for an index shard whose pages do not end; a classified AWS failure;
|
|
118
|
-
* `RETRY_EXHAUSTED`; `ABORTED`.
|
|
103
|
+
* `RETRY_EXHAUSTED`; `ABORTED`. An option key this version does not read is
|
|
104
|
+
* ignored rather than refused: LangGraph defines these options and passes
|
|
105
|
+
* its own through (`getStateHistory`), so a key it adds must not turn a
|
|
106
|
+
* listing into a refusal (decision record 28).
|
|
119
107
|
*
|
|
120
108
|
* Guarantees: eventually consistent — a listing tolerates the replica lag
|
|
121
109
|
* `getTuple` does not.
|
|
@@ -123,9 +111,7 @@ class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
123
111
|
* at least one query per index shard per page of 100 rows — plus two per
|
|
124
112
|
* yielded tuple (see the README cost table).
|
|
125
113
|
*/
|
|
126
|
-
list(config, options)
|
|
127
|
-
return (0, boundary_1.guardPublicIterable)('saver.list', (0, list_1.listCheckpoints)(this.context, config, options));
|
|
128
|
-
}
|
|
114
|
+
list(config: RunnableConfig, options?: CheckpointListOptions): AsyncGenerator<CheckpointTuple>;
|
|
129
115
|
/**
|
|
130
116
|
* Store a checkpoint and its metadata in one transaction.
|
|
131
117
|
*
|
|
@@ -145,9 +131,10 @@ class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
145
131
|
* id, `checkpoint_ns`, `checkpoint_id` or `thread_ts` for a malformed
|
|
146
132
|
* identifier, `checkpoint` for a `null` or `undefined` checkpoint,
|
|
147
133
|
* `checkpoint_id` for a malformed `checkpoint.id`, `payload` for a payload
|
|
148
|
-
* too large to store inline without `s3`, or
|
|
149
|
-
* object's key over S3's
|
|
150
|
-
*
|
|
134
|
+
* too large to store inline without `s3`, or, once offloaded, larger than
|
|
135
|
+
* `s3.maxDownloadBytes`; `s3Key` for an offloaded object's key over S3's
|
|
136
|
+
* cap; `S3_OFFLOAD_FAILED` when an offloaded payload cannot be uploaded;
|
|
137
|
+
* a classified AWS failure; `RETRY_EXHAUSTED`; `ABORTED`.
|
|
151
138
|
*
|
|
152
139
|
* Guarantees: both rows land or neither does. Writing the same
|
|
153
140
|
* `checkpoint.id` again replaces both, so a retry is safe. Each put uploads
|
|
@@ -155,30 +142,38 @@ class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
155
142
|
* rows named are not deleted with them: they are left to the lifecycle rule
|
|
156
143
|
* `ensureS3LifecycleRule()` provisions.
|
|
157
144
|
*/
|
|
158
|
-
|
|
159
|
-
return (0, boundary_1.guardPublic)('saver.put', () => (0, put_1.putCheckpoint)(this.context, config, checkpoint, metadata, newVersions));
|
|
160
|
-
}
|
|
145
|
+
put(config: RunnableConfig, checkpoint: Checkpoint, metadata: CheckpointMetadata, _newVersions?: ChannelVersions): Promise<RunnableConfig>;
|
|
161
146
|
/**
|
|
162
147
|
* Store a task's pending writes for the checkpoint `config` names.
|
|
163
148
|
*
|
|
164
149
|
* Accepts: `config` — shaped as {@link getTuple} requires, naming a
|
|
165
150
|
* `thread_id` and a `checkpoint_id`, since writes attach to a checkpoint.
|
|
166
151
|
* `config.signal` — aborts the writes. `writes` — an array of
|
|
167
|
-
* `[channel, value]` arrays, one row each
|
|
168
|
-
*
|
|
152
|
+
* `[channel, value]` arrays, one row each: a special channel's row is
|
|
153
|
+
* written alongside the rest, a regular row at most 32 at a time; an empty
|
|
154
|
+
* list writes nothing. `taskId` — validated as the key segment it becomes.
|
|
155
|
+
* `taskPath` — the task's serialized path, which LangGraph 1.5 passes
|
|
156
|
+
* (`@langchain/langgraph-checkpoint@1.2.0`) and earlier LangGraphs do not;
|
|
157
|
+
* stored beside every row of the call, and the first key of the order
|
|
158
|
+
* `getTuple`, `list` and `getDeltaChannelHistory` read a checkpoint's
|
|
159
|
+
* writes back in (the reference's `writesSortKey`: path, then task id, then
|
|
160
|
+
* index, strings compared by code point). A row written without one sorts
|
|
161
|
+
* as the empty path, first.
|
|
169
162
|
*
|
|
170
163
|
* Returns: nothing. Losing a first-write-wins race is a normal outcome, not
|
|
171
164
|
* a failure.
|
|
172
165
|
*
|
|
173
|
-
* Throws: `VALIDATION` naming `taskId` for a malformed task id
|
|
166
|
+
* Throws: `VALIDATION` naming `taskId` for a malformed task id, or
|
|
167
|
+
* `taskPath` for a path that is not a string; `config`,
|
|
174
168
|
* `configurable` or `signal` for a config of the wrong shape; `thread_id`,
|
|
175
169
|
* `checkpoint_ns`, `checkpoint_id` or `thread_ts` for a malformed
|
|
176
170
|
* identifier, and `checkpoint_id` when the config names none; `writes` for
|
|
177
171
|
* writes that is not an array, or holds an entry that is not one; `channel`
|
|
178
172
|
* for a malformed channel; `sortKey` for identifiers composing a sort key
|
|
179
173
|
* over DynamoDB's cap; `payload` for a value too large to store inline
|
|
180
|
-
* without `s3
|
|
181
|
-
* `
|
|
174
|
+
* without `s3`, or, once offloaded, larger than `s3.maxDownloadBytes`; or
|
|
175
|
+
* `s3Key` for an offloaded object's key over S3's cap. `S3_OFFLOAD_FAILED`;
|
|
176
|
+
* a classified AWS failure; `RETRY_EXHAUSTED`; `ABORTED`.
|
|
182
177
|
*
|
|
183
178
|
* Guarantees: regular writes are first-write-wins; special channels
|
|
184
179
|
* (`__interrupt__`, `__resume__`, `__error__`, `__scheduled__`) overwrite,
|
|
@@ -190,13 +185,13 @@ class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
190
185
|
* before the write, when a failed write cannot be verified, or in one
|
|
191
186
|
* double-fault interleaving (see the README's S3 offloading notes).
|
|
192
187
|
*/
|
|
193
|
-
|
|
194
|
-
return (0, boundary_1.guardPublic)('saver.putWrites', () => (0, put_writes_1.putWrites)(this.context, config, writes, taskId));
|
|
195
|
-
}
|
|
188
|
+
putWrites(config: RunnableConfig, writes: PendingWrite[], taskId: string, taskPath?: string): Promise<void>;
|
|
196
189
|
/**
|
|
197
190
|
* Delete every checkpoint, payload and pending write of a thread.
|
|
198
191
|
*
|
|
199
|
-
* Accepts: `threadId` — validated. `options.signal` —
|
|
192
|
+
* Accepts: `threadId` — validated. `options.signal` — ends the read or
|
|
193
|
+
* delete in flight and any wait between them; the deletes already
|
|
194
|
+
* acknowledged stay deleted.
|
|
200
195
|
*
|
|
201
196
|
* Returns: nothing. Deleting a thread that does not exist is not an error.
|
|
202
197
|
*
|
|
@@ -221,12 +216,7 @@ class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
221
216
|
* request token on purpose. What comes back there is an ordinary row, naming
|
|
222
217
|
* no object this call could have released.
|
|
223
218
|
*/
|
|
224
|
-
|
|
225
|
-
return (0, boundary_1.guardPublic)('saver.deleteThread', () => {
|
|
226
|
-
(0, collaborators_1.assertCancelOptions)(options);
|
|
227
|
-
return (0, delete_thread_1.deleteThread)(this.context, threadId, options);
|
|
228
|
-
});
|
|
229
|
-
}
|
|
219
|
+
deleteThread(threadId: string, options?: CancelOptions): Promise<void>;
|
|
230
220
|
/**
|
|
231
221
|
* Walk a checkpoint's ancestors for the delta channels named, returning each
|
|
232
222
|
* channel's on-path writes oldest-first and its nearest stored value.
|
|
@@ -236,9 +226,10 @@ class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
236
226
|
* per put puts that within reach here, so an ancestor a channel still needs
|
|
237
227
|
* that has expired is reported instead of dropped.
|
|
238
228
|
*
|
|
239
|
-
* Accepts: `options` —
|
|
240
|
-
*
|
|
241
|
-
*
|
|
229
|
+
* Accepts: `options` — an object carrying `config` and `channels`, the
|
|
230
|
+
* shape `BaseCheckpointSaver`'s own signature declares; LangGraph calls this
|
|
231
|
+
* itself, so a key a later LangGraph adds is ignored rather than refused
|
|
232
|
+
* (decision record 28). `options.channels` — the delta channels to rebuild, required; an empty
|
|
242
233
|
* array reads nothing rather than being refused, since it is a legitimate
|
|
243
234
|
* "nothing to rebuild" request. `options.config` — the checkpoint to walk
|
|
244
235
|
* back from, shaped as {@link getTuple} requires and checked for that shape
|
|
@@ -250,12 +241,13 @@ class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
250
241
|
* stored value found.
|
|
251
242
|
*
|
|
252
243
|
* Throws: `VALIDATION` naming `options` for options that are not an
|
|
253
|
-
* object, `
|
|
244
|
+
* object, `config`, `configurable` or
|
|
254
245
|
* `signal` for a config of the wrong shape, or `channels` for a value that
|
|
255
246
|
* is not an array of strings, and, once a channel is named, `thread_id`,
|
|
256
247
|
* `checkpoint_ns`, `checkpoint_id` or `thread_ts` for a malformed
|
|
257
248
|
* identifier; `ANCESTOR_EXPIRED` when a checkpoint a channel still needs has
|
|
258
|
-
* expired
|
|
249
|
+
* expired or is gone, or the chain of parents loops; a classified AWS
|
|
250
|
+
* failure; `RETRY_EXHAUSTED`; `ABORTED`, which a walk
|
|
259
251
|
* cancelled as it reached an expired ancestor reports in place of
|
|
260
252
|
* `ANCESTOR_EXPIRED`.
|
|
261
253
|
*
|
|
@@ -263,12 +255,7 @@ class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
263
255
|
* channel, so a deep thread costs reads only as far back as the nearest
|
|
264
256
|
* snapshot.
|
|
265
257
|
*/
|
|
266
|
-
getDeltaChannelHistory(options)
|
|
267
|
-
return (0, boundary_1.guardPublic)('saver.getDeltaChannelHistory', () => {
|
|
268
|
-
const request = (0, parse_1.parseDeltaHistoryRequest)(options);
|
|
269
|
-
return (0, delta_history_1.deltaChannelHistory)(this.context, (c) => this.getTuple(c), request.config, request.channels);
|
|
270
|
-
});
|
|
271
|
-
}
|
|
258
|
+
getDeltaChannelHistory(options: DeltaChannelHistoryOptions): Promise<Record<string, DeltaChannelHistory>>;
|
|
272
259
|
/**
|
|
273
260
|
* Release owned resources.
|
|
274
261
|
*
|
|
@@ -277,13 +264,12 @@ class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
277
264
|
* Returns: nothing. Idempotent, and a no-op for a client the caller injected
|
|
278
265
|
* — that one is theirs to close.
|
|
279
266
|
*
|
|
280
|
-
* Throws:
|
|
281
|
-
*
|
|
282
|
-
*
|
|
267
|
+
* Throws: the first failure a resource's own `destroy` raised, as a
|
|
268
|
+
* `DynamoDBLangGraphError` (`UNEXPECTED_ERROR` unless the failure was AWS's)
|
|
269
|
+
* with it as `cause` — raised only after every other resource has been
|
|
270
|
+
* released, and only by the first call: `destroy()` is idempotent.
|
|
283
271
|
*/
|
|
284
|
-
destroy()
|
|
285
|
-
this.shell.release();
|
|
286
|
-
}
|
|
272
|
+
destroy(): void;
|
|
287
273
|
/**
|
|
288
274
|
* Provision an S3 lifecycle expiration rule matching the configured TTL, so
|
|
289
275
|
* offloaded payloads don't outlive the items that point at them.
|
|
@@ -293,17 +279,28 @@ class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
293
279
|
* match.
|
|
294
280
|
*
|
|
295
281
|
* Returns: nothing. Installing a rule that is already there is a no-op too,
|
|
296
|
-
* so calling it on every deploy is safe.
|
|
282
|
+
* so calling it on every deploy is safe. When it writes the rules but
|
|
283
|
+
* cannot confirm within its polling window that a re-read shows them — S3
|
|
284
|
+
* documents that a lifecycle configuration can take minutes to propagate —
|
|
285
|
+
* it logs a `warn` and returns rather than throwing: the rules were
|
|
286
|
+
* written, and a later call can confirm them.
|
|
297
287
|
*
|
|
298
288
|
* Throws: `VALIDATION` naming `s3.keyPrefix` on a rule-id collision;
|
|
299
|
-
* a classified AWS failure when the bucket's lifecycle cannot be read or
|
|
289
|
+
* a classified AWS failure when the bucket's lifecycle cannot be read or
|
|
290
|
+
* written; `CONTENTION` when every one of the five rounds this call polls
|
|
291
|
+
* needs a write — a competing writer replacing the configuration on every
|
|
292
|
+
* single re-read.
|
|
300
293
|
* @remarks Needs the bucket-level `s3:GetLifecycleConfiguration` and
|
|
301
294
|
* `s3:PutLifecycleConfiguration` permissions, which are broader than the
|
|
302
295
|
* object-level CRUD the rest of S3 offload needs. Call it once at deployment,
|
|
303
|
-
* not per request
|
|
296
|
+
* not per request — and when several adapters or processes provision the
|
|
297
|
+
* same bucket, call them one at a time and run each again after a few
|
|
298
|
+
* minutes once every one of them has run.
|
|
299
|
+
*
|
|
300
|
+
* Lowering the `ttl` is safe for new rows at once; the rule is not. Lower
|
|
301
|
+
* `ttl` now, and call this again only once the old `ttl` has elapsed since,
|
|
302
|
+
* because until then rows written under the old value still name objects
|
|
303
|
+
* the shorter rule would expire. Raising the `ttl` is safe at once.
|
|
304
304
|
*/
|
|
305
|
-
|
|
306
|
-
return (0, boundary_1.guardPublic)('saver.ensureS3LifecycleRule', () => this.shell.ensureLifecycleRule());
|
|
307
|
-
}
|
|
305
|
+
ensureS3LifecycleRule(): Promise<void>;
|
|
308
306
|
}
|
|
309
|
-
exports.DynamoDBSaver = DynamoDBSaver;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { BaseCheckpointSaver, } from '@langchain/langgraph-checkpoint';
|
|
2
|
+
import { guardPublic, guardPublicIterable, guardPublicSync } from '../shared/errors/boundary.js';
|
|
3
|
+
import { assertCancelOptions } from '../shared/validation/collaborators.js';
|
|
4
|
+
import { parseShape } from '../shared/validation/option-shape.js';
|
|
5
|
+
import { deleteThread as deleteThreadAction } from './actions/delete-thread.js';
|
|
6
|
+
import { getCheckpointTuple } from './actions/get-tuple.js';
|
|
7
|
+
import { listCheckpoints } from './actions/list.js';
|
|
8
|
+
import { putWrites as putWritesAction } from './actions/put-writes.js';
|
|
9
|
+
import { putCheckpoint } from './actions/put.js';
|
|
10
|
+
import { deltaChannelHistory } from './internal/delta-history.js';
|
|
11
|
+
import { parseDeltaHistoryRequest } from './internal/parse.js';
|
|
12
|
+
import { SAVER_KEYS, setUpCheckpointer } from './internal/setup.js';
|
|
13
|
+
export class DynamoDBSaver extends BaseCheckpointSaver {
|
|
14
|
+
context;
|
|
15
|
+
shell;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
super(parseShape(options, SAVER_KEYS, 'options').serde);
|
|
18
|
+
const setup = setUpCheckpointer(options, this.serde);
|
|
19
|
+
this.context = setup.context;
|
|
20
|
+
this.shell = setup.shell;
|
|
21
|
+
}
|
|
22
|
+
async getTuple(config) {
|
|
23
|
+
return guardPublic('saver.getTuple', () => getCheckpointTuple(this.context, config), this.context.tableName);
|
|
24
|
+
}
|
|
25
|
+
list(config, options) {
|
|
26
|
+
return guardPublicIterable('saver.list', listCheckpoints(this.context, config, options), this.context.tableName);
|
|
27
|
+
}
|
|
28
|
+
async put(config, checkpoint, metadata, _newVersions) {
|
|
29
|
+
return guardPublic('saver.put', () => putCheckpoint(this.context, config, checkpoint, metadata), this.context.tableName);
|
|
30
|
+
}
|
|
31
|
+
async putWrites(config, writes, taskId, taskPath) {
|
|
32
|
+
return guardPublic('saver.putWrites', () => putWritesAction(this.context, config, writes, taskId, taskPath), this.context.tableName);
|
|
33
|
+
}
|
|
34
|
+
async deleteThread(threadId, options) {
|
|
35
|
+
return guardPublic('saver.deleteThread', () => {
|
|
36
|
+
assertCancelOptions(options);
|
|
37
|
+
return deleteThreadAction(this.context, threadId, options);
|
|
38
|
+
}, this.context.tableName);
|
|
39
|
+
}
|
|
40
|
+
getDeltaChannelHistory(options) {
|
|
41
|
+
return guardPublic('saver.getDeltaChannelHistory', () => {
|
|
42
|
+
const request = parseDeltaHistoryRequest(options);
|
|
43
|
+
return deltaChannelHistory(this.context, (c) => this.getTuple(c), request.config, request.channels);
|
|
44
|
+
}, this.context.tableName);
|
|
45
|
+
}
|
|
46
|
+
destroy() {
|
|
47
|
+
guardPublicSync('saver.destroy', () => this.shell.release(), this.context.tableName);
|
|
48
|
+
}
|
|
49
|
+
async ensureS3LifecycleRule() {
|
|
50
|
+
return guardPublic('saver.ensureS3LifecycleRule', () => this.shell.ensureLifecycleRule(), this.context.tableName);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides the saver's own modules from the shapes a caller types against.
|
|
3
|
+
*
|
|
4
|
+
* The saver's options and the options its delta-channel walk accepts are
|
|
5
|
+
* declared here, apart from the saver and its actions, so a caller can type
|
|
6
|
+
* what it builds without importing either. The narrowed `configurable` is
|
|
7
|
+
* declared beside them for the parser that reads it, not for a caller. The
|
|
8
|
+
* delta-channel options are pinned equal to upstream's inline parameter
|
|
9
|
+
* type, so they change only when LangGraph's do.
|
|
10
|
+
*/
|
|
11
|
+
import type { RunnableConfig } from '@langchain/core/runnables';
|
|
12
|
+
import type { SerializerProtocol } from '@langchain/langgraph-checkpoint';
|
|
13
|
+
import type { BaseAdapterOptions, CodecOptions } from '../shared/options.js';
|
|
14
|
+
/** Options for {@link DynamoDBSaver}. */
|
|
15
|
+
export type DynamoDBSaverOptions = BaseAdapterOptions & CodecOptions & {
|
|
16
|
+
/**
|
|
17
|
+
* Optional serializer override. The default is the base class's, which is
|
|
18
|
+
* LangGraph's `JsonPlusSerializer` — **not** the plain JSON serializer the
|
|
19
|
+
* store and chat-history adapters default to. The two differ on read as
|
|
20
|
+
* well as on write: `JsonPlusSerializer` reconstructs a `Map`, a `Set`, a
|
|
21
|
+
* `Uint8Array` or an allow-listed `langchain_core` class from the `lc`
|
|
22
|
+
* record a stored row carries, so the row selects which constructor runs,
|
|
23
|
+
* while plain JSON parses and reconstructs nothing. Pass the exported
|
|
24
|
+
* `JSON_SERDE` for the narrower read path, at the cost of the JSON
|
|
25
|
+
* projection the README's *Table schema* section tabulates.
|
|
26
|
+
*/
|
|
27
|
+
serde?: SerializerProtocol;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Options {@link DynamoDBSaver.getDeltaChannelHistory} accepts: the object
|
|
31
|
+
* `BaseCheckpointSaver.getDeltaChannelHistory` declares inline, named so a
|
|
32
|
+
* caller can type the options it builds. A test pins it equal to upstream's
|
|
33
|
+
* parameter type.
|
|
34
|
+
*/
|
|
35
|
+
export interface DeltaChannelHistoryOptions {
|
|
36
|
+
/** The checkpoint to walk back from; must be an object. */
|
|
37
|
+
config: RunnableConfig;
|
|
38
|
+
/**
|
|
39
|
+
* The delta channels to rebuild, as an array of strings; `[]` reads nothing
|
|
40
|
+
* and returns `{}`.
|
|
41
|
+
*/
|
|
42
|
+
channels: string[];
|
|
43
|
+
}
|
|
44
|
+
/** Narrowed shape of `RunnableConfig.configurable` the saver relies on. */
|
|
45
|
+
export interface CheckpointConfigurable {
|
|
46
|
+
thread_id: string;
|
|
47
|
+
checkpoint_ns?: string;
|
|
48
|
+
checkpoint_id?: string;
|
|
49
|
+
/** Legacy alias of `checkpoint_id` that older callers and API-shaped configs still emit. */
|
|
50
|
+
thread_ts?: string;
|
|
51
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides how several adapters share one client and one set of defaults.
|
|
3
|
+
*
|
|
4
|
+
* A caller states its defaults once; which adapter gets the base client
|
|
5
|
+
* choice and which its own, how the DynamoDB region reaches a shared `s3`
|
|
6
|
+
* config, and who destroys a client the factory built rather than was handed
|
|
7
|
+
* are decided here. Teardown is total — one adapter failing to release cannot
|
|
8
|
+
* strand the others — and a `createAll` that fails partway releases what it
|
|
9
|
+
* had built before its own error propagates.
|
|
10
|
+
*/
|
|
11
|
+
import { DynamoDBSaver } from '../checkpointer/saver.js';
|
|
12
|
+
import type { DynamoDBSaverOptions } from '../checkpointer/types.js';
|
|
13
|
+
import { DynamoDBChatMessageHistory } from '../history/chat-message-history.js';
|
|
14
|
+
import type { DynamoDBChatMessageHistoryOptions } from '../history/types.js';
|
|
15
|
+
import { DynamoDBStore } from '../store/store.js';
|
|
16
|
+
import type { DynamoDBStoreOptions } from '../store/types.js';
|
|
17
|
+
import type { CreateAllOptions, CreatedAdapters, FactoryBaseOptions } from './types.js';
|
|
18
|
+
/**
|
|
19
|
+
* Convenience constructors for the adapters.
|
|
20
|
+
*
|
|
21
|
+
* Individual `create*` methods each build one adapter, on the factory's `client`
|
|
22
|
+
* when it was given one and otherwise on a client of their own; {@link createAll}
|
|
23
|
+
* builds one shared client used by all three and returns a combined `destroy`
|
|
24
|
+
* that tears everything down once. Each adapter validates the options it ends
|
|
25
|
+
* up with, so the same mistake is caught the same way however the adapter was
|
|
26
|
+
* built. The factory checks only what it reads itself before an adapter can:
|
|
27
|
+
* its own base options, client choice and logger, the keys of `createAll`'s
|
|
28
|
+
* argument, and that each adapter's options are an object at all.
|
|
29
|
+
*
|
|
30
|
+
* Every `create*` argument and every `createAll` section is one adapter's
|
|
31
|
+
* options, and a mistake in one is named the way that adapter's constructor
|
|
32
|
+
* names it: `options` for a value that is not an object, and the adapter's own
|
|
33
|
+
* field names (`options.<key>`, `tableName`, …) for anything inside one.
|
|
34
|
+
*/
|
|
35
|
+
export declare class DynamoDBFactory {
|
|
36
|
+
private readonly base;
|
|
37
|
+
/**
|
|
38
|
+
* Accepts: `base` — the defaults every adapter inherits. Checked here, where
|
|
39
|
+
* the caller wrote them: an unknown key would otherwise be ignored, and a
|
|
40
|
+
* `client` next to a `clientConfig` was refused by the first `create*` call
|
|
41
|
+
* and accepted by `createAll`, for the same base. So is the shape of
|
|
42
|
+
* `clientConfig`: `createAll` hands its adapters the client built from it,
|
|
43
|
+
* never the config, so no adapter would see a malformed one. And so is
|
|
44
|
+
* `logger`, which `createAll` logs its own teardown failures through: a
|
|
45
|
+
* malformed one threw from inside that teardown, replacing a failed build's
|
|
46
|
+
* own error with a bare `TypeError`.
|
|
47
|
+
*
|
|
48
|
+
* Returns: a factory holding those defaults. It opens nothing: every client
|
|
49
|
+
* is built by the `create*` call that needs one.
|
|
50
|
+
*
|
|
51
|
+
* Throws: `VALIDATION` naming `options.<key>`, `client`, `clientConfig`,
|
|
52
|
+
* `logger` or `logger.<method>`. Everything else each adapter validates for
|
|
53
|
+
* itself, since a per-adapter value may still replace it.
|
|
54
|
+
*/
|
|
55
|
+
constructor(base?: FactoryBaseOptions);
|
|
56
|
+
/** The base options every adapter inherits regardless of which client it uses. */
|
|
57
|
+
private sharedDefaults;
|
|
58
|
+
/**
|
|
59
|
+
* An `s3` config with the region the DynamoDB side was configured with
|
|
60
|
+
* filled in, when it names none of its own.
|
|
61
|
+
*
|
|
62
|
+
* An adapter normally reads that region off its own `clientConfig`
|
|
63
|
+
* (`offloaderConfigFor`), but the adapters {@link createAll} builds are given
|
|
64
|
+
* the one shared `client` instead — and a `clientConfig` beside a `client` is
|
|
65
|
+
* refused, because for the DynamoDB client it would be silently ignored. So
|
|
66
|
+
* the region has to be carried here, on the config that still needs it:
|
|
67
|
+
* without it, a bucket reachable only through that region fails with an
|
|
68
|
+
* opaque `PermanentRedirect` on the first offload, unlike the identical
|
|
69
|
+
* configuration through `createStore`, which resolves its own region
|
|
70
|
+
* directly. It is asked of the `s3` an adapter ends up with — the base one,
|
|
71
|
+
* or a section's own, which replaces the base one whole — so neither is left
|
|
72
|
+
* without the region the other would have had.
|
|
73
|
+
*
|
|
74
|
+
* An `s3`, or its `clientConfig`, that is not an object is handed on
|
|
75
|
+
* unchanged, for each adapter to refuse by its own name: reading `.region`
|
|
76
|
+
* off a `null` one would throw here instead, and writing a region into a
|
|
77
|
+
* malformed `clientConfig` would turn it into an object shape an adapter
|
|
78
|
+
* then accepts instead of refusing.
|
|
79
|
+
*/
|
|
80
|
+
private withTableRegion;
|
|
81
|
+
/**
|
|
82
|
+
* Per-adapter options replace the factory's client choice as a unit: a
|
|
83
|
+
* `client` handed to `createSaver` also displaces the base `clientConfig`
|
|
84
|
+
* and `createClient`, because carrying those along is exactly the ambiguous
|
|
85
|
+
* combination the adapters' option validation rejects. The shared
|
|
86
|
+
* `ttl`/`compression`/`s3`/`retry` defaults stay either way.
|
|
87
|
+
*/
|
|
88
|
+
private defaultsFor;
|
|
89
|
+
/**
|
|
90
|
+
* A saver, on the factory's `client` when it has one and otherwise on its own.
|
|
91
|
+
*
|
|
92
|
+
* Accepts: `options` — the saver's own, laid over the factory's defaults. A
|
|
93
|
+
* per-adapter value wins, and a key given as `undefined` is not a value;
|
|
94
|
+
* a client choice (`client`, `clientConfig` or neither) replaces the
|
|
95
|
+
* factory's as a unit.
|
|
96
|
+
*
|
|
97
|
+
* Returns: the saver. It owns, and releases on `destroy()`, only a client it
|
|
98
|
+
* built itself; a `client` from the factory is never closed by it.
|
|
99
|
+
*
|
|
100
|
+
* Throws: `VALIDATION` for any invalid option, naming it as the saver's
|
|
101
|
+
* constructor does — `options` for a value that is not an object, checked
|
|
102
|
+
* before the defaults are laid under it: reading `.client` off a `null`
|
|
103
|
+
* value would throw here, and spreading a string would iterate its
|
|
104
|
+
* characters instead of refusing it.
|
|
105
|
+
*/
|
|
106
|
+
createSaver(options: DynamoDBSaverOptions): DynamoDBSaver;
|
|
107
|
+
/**
|
|
108
|
+
* A store, on the factory's `client` when it has one and otherwise on its own.
|
|
109
|
+
*
|
|
110
|
+
* Accepts: as {@link createSaver}, for the store's options.
|
|
111
|
+
*
|
|
112
|
+
* Returns: the store.
|
|
113
|
+
*
|
|
114
|
+
* Throws: as {@link createSaver}.
|
|
115
|
+
*/
|
|
116
|
+
createStore(options: DynamoDBStoreOptions): DynamoDBStore;
|
|
117
|
+
/**
|
|
118
|
+
* A chat history, on the factory's `client` when it has one and otherwise on
|
|
119
|
+
* its own.
|
|
120
|
+
*
|
|
121
|
+
* Accepts: as {@link createSaver}, for the history's options.
|
|
122
|
+
*
|
|
123
|
+
* Returns: the chat history.
|
|
124
|
+
*
|
|
125
|
+
* Throws: as {@link createSaver}.
|
|
126
|
+
*/
|
|
127
|
+
createChatMessageHistory(options: DynamoDBChatMessageHistoryOptions): DynamoDBChatMessageHistory;
|
|
128
|
+
/**
|
|
129
|
+
* Build the adapters whose sections are given, all on one shared client.
|
|
130
|
+
*
|
|
131
|
+
* Accepts: `options` — a section per adapter, laid over the factory's shared
|
|
132
|
+
* defaults; omitting one, or giving it as `undefined`, skips that adapter,
|
|
133
|
+
* and `{}` builds none. A key that is not a section name is refused rather
|
|
134
|
+
* than ignored, so a misspelt one cannot silently build nothing. Each section
|
|
135
|
+
* is that adapter's options, so one that is not an object, `null` included,
|
|
136
|
+
* is refused before any client is built.
|
|
137
|
+
*
|
|
138
|
+
* Returns: the adapters, typed by the sections asked for, and one `destroy`
|
|
139
|
+
* that releases all of them and the shared client. A client the factory was
|
|
140
|
+
* given rather than built is never destroyed.
|
|
141
|
+
*
|
|
142
|
+
* Throws: `VALIDATION` naming `options` for an argument or a section that
|
|
143
|
+
* is not an object, or `options.<key>` for a key that is not a section name.
|
|
144
|
+
* Whatever an adapter's constructor throws — after the adapters already
|
|
145
|
+
* built and the freshly created client have been released, so a failed call
|
|
146
|
+
* leaks nothing and the constructor's own error is the one that propagates.
|
|
147
|
+
*
|
|
148
|
+
* Guarantees: one DynamoDB client for all three adapters, and one S3 client
|
|
149
|
+
* per adapter, each under its own key prefix in the shared bucket. Teardown
|
|
150
|
+
* is total: one adapter failing to release its resources cannot strand the
|
|
151
|
+
* others.
|
|
152
|
+
*/
|
|
153
|
+
createAll<O extends CreateAllOptions>(options: O): CreatedAdapters<O>;
|
|
154
|
+
}
|