@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,30 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Hides which options the saver
|
|
3
|
-
*
|
|
2
|
+
* Hides which options the saver accepts, and how the saver is assembled from
|
|
3
|
+
* them.
|
|
4
4
|
*
|
|
5
|
-
* The exhaustive key list of
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* The exhaustive key list of the constructor's options lives here,
|
|
6
|
+
* compiler-checked against its type, beside the code that resolves those
|
|
7
|
+
* options into the context every action receives. `list`'s and
|
|
8
|
+
* `getDeltaChannelHistory`'s options have no list: LangGraph defines them, so
|
|
9
|
+
* a key it adds is ignored rather than refused (decision record 28).
|
|
9
10
|
*/
|
|
10
11
|
import type { SerializerProtocol } from '@langchain/langgraph-checkpoint';
|
|
11
|
-
import { type AdapterCore, type AdapterShell } from '../../shared/adapter';
|
|
12
|
-
import type { DynamoDBSaverOptions } from '../types';
|
|
12
|
+
import { type AdapterCore, type AdapterShell } from '../../shared/adapter.js';
|
|
13
|
+
import type { DynamoDBSaverOptions } from '../types.js';
|
|
13
14
|
/**
|
|
14
|
-
* The keys of
|
|
15
|
-
* `allKeysOf<T>` makes omitting or inventing one a compile error, so
|
|
16
|
-
* cannot rot away from the type it guards.
|
|
17
|
-
* the
|
|
15
|
+
* The keys of the saver's constructor options, exhaustive in both directions:
|
|
16
|
+
* `allKeysOf<T>` makes omitting or inventing one a compile error, so the list
|
|
17
|
+
* cannot rot away from the type it guards. It lives with the feature because
|
|
18
|
+
* the type it is checked against does; `shared/` knows no feature.
|
|
18
19
|
*/
|
|
19
20
|
export declare const SAVER_KEYS: readonly string[];
|
|
20
|
-
/** See {@link SAVER_KEYS}. */
|
|
21
|
-
export declare const SAVER_LIST_KEYS: readonly string[];
|
|
22
|
-
/**
|
|
23
|
-
* See {@link SAVER_KEYS}. `DeltaChannelHistoryOptions` is pinned equal to
|
|
24
|
-
* `BaseCheckpointSaver.getDeltaChannelHistory`'s own parameter type, the
|
|
25
|
-
* contract that method implements, so this list is checked against it.
|
|
26
|
-
*/
|
|
27
|
-
export declare const DELTA_CHANNEL_HISTORY_KEYS: readonly string[];
|
|
28
21
|
/** Resolved collaborators shared by every checkpointer action. */
|
|
29
22
|
export interface CheckpointerContext extends AdapterCore {
|
|
30
23
|
serde: SerializerProtocol;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SAVER_KEYS = void 0;
|
|
4
|
+
exports.setUpCheckpointer = setUpCheckpointer;
|
|
5
|
+
const adapter_js_1 = require("../../shared/adapter.js");
|
|
6
|
+
const option_shape_js_1 = require("../../shared/validation/option-shape.js");
|
|
7
|
+
exports.SAVER_KEYS = (0, option_shape_js_1.allKeysOf)({
|
|
8
|
+
tableName: 'tableName',
|
|
9
|
+
client: 'client',
|
|
10
|
+
clientConfig: 'clientConfig',
|
|
11
|
+
createClient: 'createClient',
|
|
12
|
+
ttl: 'ttl',
|
|
13
|
+
logger: 'logger',
|
|
14
|
+
retry: 'retry',
|
|
15
|
+
indexShards: 'indexShards',
|
|
16
|
+
indexName: 'indexName',
|
|
17
|
+
readConcurrency: 'readConcurrency',
|
|
18
|
+
compression: 'compression',
|
|
19
|
+
s3: 's3',
|
|
20
|
+
serde: 'serde',
|
|
21
|
+
});
|
|
22
|
+
function setUpCheckpointer(options, serde) {
|
|
23
|
+
const shell = (0, adapter_js_1.openAdapter)(options, 'checkpointer');
|
|
24
|
+
return { shell, context: { ...shell.core, serde } };
|
|
25
|
+
}
|
|
@@ -4,16 +4,17 @@
|
|
|
4
4
|
* `DynamoDBSaver` is the `BaseCheckpointSaver` a graph is handed: it resolves
|
|
5
5
|
* its client, offloader, logger and retry policy once and delegates each
|
|
6
6
|
* read and write to one action, save `getDeltaChannelHistory`, whose walk
|
|
7
|
-
* lives in `internal/delta-history` instead.
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* the
|
|
11
|
-
*
|
|
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.
|
|
12
13
|
*/
|
|
13
14
|
import type { RunnableConfig } from '@langchain/core/runnables';
|
|
14
15
|
import { BaseCheckpointSaver, type ChannelVersions, type Checkpoint, type CheckpointListOptions, type CheckpointMetadata, type CheckpointTuple, type DeltaChannelHistory, type PendingWrite } from '@langchain/langgraph-checkpoint';
|
|
15
|
-
import type { CancelOptions } from '../shared/options';
|
|
16
|
-
import type { DeltaChannelHistoryOptions, DynamoDBSaverOptions } from './types';
|
|
16
|
+
import type { CancelOptions } from '../shared/options.js';
|
|
17
|
+
import type { DeltaChannelHistoryOptions, DynamoDBSaverOptions } from './types.js';
|
|
17
18
|
/**
|
|
18
19
|
* DynamoDB-backed LangGraph checkpoint saver. Every public method rejects only
|
|
19
20
|
* with this library's error, whose `code` says what failed — an AWS failure
|
|
@@ -49,7 +50,7 @@ export declare class DynamoDBSaver extends BaseCheckpointSaver {
|
|
|
49
50
|
*
|
|
50
51
|
* Returns: the tuple, or `undefined` for an unknown thread, an unknown
|
|
51
52
|
* checkpoint, a config naming no thread, or a checkpoint whose payload row is
|
|
52
|
-
*
|
|
53
|
+
* gone — a thread being deleted, or an expiry sweep that reached it first.
|
|
53
54
|
*
|
|
54
55
|
* Throws: `VALIDATION`, before any read, naming `config` for a config that
|
|
55
56
|
* is not an object, `configurable` for a `configurable` that is present and
|
|
@@ -71,7 +72,10 @@ export declare class DynamoDBSaver extends BaseCheckpointSaver {
|
|
|
71
72
|
*/
|
|
72
73
|
getTuple(config: RunnableConfig): Promise<CheckpointTuple | undefined>;
|
|
73
74
|
/**
|
|
74
|
-
* 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.
|
|
75
79
|
*
|
|
76
80
|
* Accepts: `config` — one namespace, every namespace of a thread when
|
|
77
81
|
* `checkpoint_ns` is omitted, or every thread in the table when `thread_id`
|
|
@@ -89,15 +93,17 @@ export declare class DynamoDBSaver extends BaseCheckpointSaver {
|
|
|
89
93
|
* `config`, `configurable` or `signal` for a config of the wrong shape, as
|
|
90
94
|
* {@link getTuple} does, or `thread_id`, `checkpoint_ns`, `checkpoint_id` or
|
|
91
95
|
* `thread_ts` for a malformed identifier — all checked before `options`;
|
|
92
|
-
* then `options` for options that are not an object, `
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* `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
|
|
96
99
|
* object or whose `configurable.checkpoint_id` is
|
|
97
100
|
* neither absent (`undefined`, `null` or `''`) nor a well-formed checkpoint
|
|
98
101
|
* id. `FORMAT_UNSUPPORTED`; `RESULT_TRUNCATED`, without a `thread_id` and
|
|
99
102
|
* with `indexName`, for an index shard whose pages do not end; a classified AWS failure;
|
|
100
|
-
* `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).
|
|
101
107
|
*
|
|
102
108
|
* Guarantees: eventually consistent — a listing tolerates the replica lag
|
|
103
109
|
* `getTuple` does not.
|
|
@@ -125,9 +131,10 @@ export declare class DynamoDBSaver extends BaseCheckpointSaver {
|
|
|
125
131
|
* id, `checkpoint_ns`, `checkpoint_id` or `thread_ts` for a malformed
|
|
126
132
|
* identifier, `checkpoint` for a `null` or `undefined` checkpoint,
|
|
127
133
|
* `checkpoint_id` for a malformed `checkpoint.id`, `payload` for a payload
|
|
128
|
-
* too large to store inline without `s3`, or
|
|
129
|
-
* object's key over S3's
|
|
130
|
-
*
|
|
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`.
|
|
131
138
|
*
|
|
132
139
|
* Guarantees: both rows land or neither does. Writing the same
|
|
133
140
|
* `checkpoint.id` again replaces both, so a retry is safe. Each put uploads
|
|
@@ -135,28 +142,38 @@ export declare class DynamoDBSaver extends BaseCheckpointSaver {
|
|
|
135
142
|
* rows named are not deleted with them: they are left to the lifecycle rule
|
|
136
143
|
* `ensureS3LifecycleRule()` provisions.
|
|
137
144
|
*/
|
|
138
|
-
put(config: RunnableConfig, checkpoint: Checkpoint, metadata: CheckpointMetadata,
|
|
145
|
+
put(config: RunnableConfig, checkpoint: Checkpoint, metadata: CheckpointMetadata, _newVersions?: ChannelVersions): Promise<RunnableConfig>;
|
|
139
146
|
/**
|
|
140
147
|
* Store a task's pending writes for the checkpoint `config` names.
|
|
141
148
|
*
|
|
142
149
|
* Accepts: `config` — shaped as {@link getTuple} requires, naming a
|
|
143
150
|
* `thread_id` and a `checkpoint_id`, since writes attach to a checkpoint.
|
|
144
151
|
* `config.signal` — aborts the writes. `writes` — an array of
|
|
145
|
-
* `[channel, value]` arrays, one row each
|
|
146
|
-
*
|
|
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.
|
|
147
162
|
*
|
|
148
163
|
* Returns: nothing. Losing a first-write-wins race is a normal outcome, not
|
|
149
164
|
* a failure.
|
|
150
165
|
*
|
|
151
|
-
* 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`,
|
|
152
168
|
* `configurable` or `signal` for a config of the wrong shape; `thread_id`,
|
|
153
169
|
* `checkpoint_ns`, `checkpoint_id` or `thread_ts` for a malformed
|
|
154
170
|
* identifier, and `checkpoint_id` when the config names none; `writes` for
|
|
155
171
|
* writes that is not an array, or holds an entry that is not one; `channel`
|
|
156
172
|
* for a malformed channel; `sortKey` for identifiers composing a sort key
|
|
157
173
|
* over DynamoDB's cap; `payload` for a value too large to store inline
|
|
158
|
-
* without `s3
|
|
159
|
-
* `
|
|
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`.
|
|
160
177
|
*
|
|
161
178
|
* Guarantees: regular writes are first-write-wins; special channels
|
|
162
179
|
* (`__interrupt__`, `__resume__`, `__error__`, `__scheduled__`) overwrite,
|
|
@@ -168,11 +185,13 @@ export declare class DynamoDBSaver extends BaseCheckpointSaver {
|
|
|
168
185
|
* before the write, when a failed write cannot be verified, or in one
|
|
169
186
|
* double-fault interleaving (see the README's S3 offloading notes).
|
|
170
187
|
*/
|
|
171
|
-
putWrites(config: RunnableConfig, writes: PendingWrite[], taskId: string): Promise<void>;
|
|
188
|
+
putWrites(config: RunnableConfig, writes: PendingWrite[], taskId: string, taskPath?: string): Promise<void>;
|
|
172
189
|
/**
|
|
173
190
|
* Delete every checkpoint, payload and pending write of a thread.
|
|
174
191
|
*
|
|
175
|
-
* 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.
|
|
176
195
|
*
|
|
177
196
|
* Returns: nothing. Deleting a thread that does not exist is not an error.
|
|
178
197
|
*
|
|
@@ -207,9 +226,10 @@ export declare class DynamoDBSaver extends BaseCheckpointSaver {
|
|
|
207
226
|
* per put puts that within reach here, so an ancestor a channel still needs
|
|
208
227
|
* that has expired is reported instead of dropped.
|
|
209
228
|
*
|
|
210
|
-
* Accepts: `options` —
|
|
211
|
-
*
|
|
212
|
-
*
|
|
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
|
|
213
233
|
* array reads nothing rather than being refused, since it is a legitimate
|
|
214
234
|
* "nothing to rebuild" request. `options.config` — the checkpoint to walk
|
|
215
235
|
* back from, shaped as {@link getTuple} requires and checked for that shape
|
|
@@ -221,12 +241,13 @@ export declare class DynamoDBSaver extends BaseCheckpointSaver {
|
|
|
221
241
|
* stored value found.
|
|
222
242
|
*
|
|
223
243
|
* Throws: `VALIDATION` naming `options` for options that are not an
|
|
224
|
-
* object, `
|
|
244
|
+
* object, `config`, `configurable` or
|
|
225
245
|
* `signal` for a config of the wrong shape, or `channels` for a value that
|
|
226
246
|
* is not an array of strings, and, once a channel is named, `thread_id`,
|
|
227
247
|
* `checkpoint_ns`, `checkpoint_id` or `thread_ts` for a malformed
|
|
228
248
|
* identifier; `ANCESTOR_EXPIRED` when a checkpoint a channel still needs has
|
|
229
|
-
* expired
|
|
249
|
+
* expired or is gone, or the chain of parents loops; a classified AWS
|
|
250
|
+
* failure; `RETRY_EXHAUSTED`; `ABORTED`, which a walk
|
|
230
251
|
* cancelled as it reached an expired ancestor reports in place of
|
|
231
252
|
* `ANCESTOR_EXPIRED`.
|
|
232
253
|
*
|
|
@@ -243,9 +264,10 @@ export declare class DynamoDBSaver extends BaseCheckpointSaver {
|
|
|
243
264
|
* Returns: nothing. Idempotent, and a no-op for a client the caller injected
|
|
244
265
|
* — that one is theirs to close.
|
|
245
266
|
*
|
|
246
|
-
* Throws:
|
|
247
|
-
*
|
|
248
|
-
*
|
|
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.
|
|
249
271
|
*/
|
|
250
272
|
destroy(): void;
|
|
251
273
|
/**
|
|
@@ -257,14 +279,28 @@ export declare class DynamoDBSaver extends BaseCheckpointSaver {
|
|
|
257
279
|
* match.
|
|
258
280
|
*
|
|
259
281
|
* Returns: nothing. Installing a rule that is already there is a no-op too,
|
|
260
|
-
* 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.
|
|
261
287
|
*
|
|
262
288
|
* Throws: `VALIDATION` naming `s3.keyPrefix` on a rule-id collision;
|
|
263
|
-
* 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.
|
|
264
293
|
* @remarks Needs the bucket-level `s3:GetLifecycleConfiguration` and
|
|
265
294
|
* `s3:PutLifecycleConfiguration` permissions, which are broader than the
|
|
266
295
|
* object-level CRUD the rest of S3 offload needs. Call it once at deployment,
|
|
267
|
-
* 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.
|
|
268
304
|
*/
|
|
269
305
|
ensureS3LifecycleRule(): Promise<void>;
|
|
270
306
|
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DynamoDBSaver = void 0;
|
|
4
|
+
const langgraph_checkpoint_1 = require("@langchain/langgraph-checkpoint");
|
|
5
|
+
const boundary_js_1 = require("../shared/errors/boundary.js");
|
|
6
|
+
const collaborators_js_1 = require("../shared/validation/collaborators.js");
|
|
7
|
+
const option_shape_js_1 = require("../shared/validation/option-shape.js");
|
|
8
|
+
const delete_thread_js_1 = require("./actions/delete-thread.js");
|
|
9
|
+
const get_tuple_js_1 = require("./actions/get-tuple.js");
|
|
10
|
+
const list_js_1 = require("./actions/list.js");
|
|
11
|
+
const put_writes_js_1 = require("./actions/put-writes.js");
|
|
12
|
+
const put_js_1 = require("./actions/put.js");
|
|
13
|
+
const delta_history_js_1 = require("./internal/delta-history.js");
|
|
14
|
+
const parse_js_1 = require("./internal/parse.js");
|
|
15
|
+
const setup_js_1 = require("./internal/setup.js");
|
|
16
|
+
class DynamoDBSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
17
|
+
context;
|
|
18
|
+
shell;
|
|
19
|
+
constructor(options) {
|
|
20
|
+
super((0, option_shape_js_1.parseShape)(options, setup_js_1.SAVER_KEYS, 'options').serde);
|
|
21
|
+
const setup = (0, setup_js_1.setUpCheckpointer)(options, this.serde);
|
|
22
|
+
this.context = setup.context;
|
|
23
|
+
this.shell = setup.shell;
|
|
24
|
+
}
|
|
25
|
+
async getTuple(config) {
|
|
26
|
+
return (0, boundary_js_1.guardPublic)('saver.getTuple', () => (0, get_tuple_js_1.getCheckpointTuple)(this.context, config), this.context.tableName);
|
|
27
|
+
}
|
|
28
|
+
list(config, options) {
|
|
29
|
+
return (0, boundary_js_1.guardPublicIterable)('saver.list', (0, list_js_1.listCheckpoints)(this.context, config, options), this.context.tableName);
|
|
30
|
+
}
|
|
31
|
+
async put(config, checkpoint, metadata, _newVersions) {
|
|
32
|
+
return (0, boundary_js_1.guardPublic)('saver.put', () => (0, put_js_1.putCheckpoint)(this.context, config, checkpoint, metadata), this.context.tableName);
|
|
33
|
+
}
|
|
34
|
+
async putWrites(config, writes, taskId, taskPath) {
|
|
35
|
+
return (0, boundary_js_1.guardPublic)('saver.putWrites', () => (0, put_writes_js_1.putWrites)(this.context, config, writes, taskId, taskPath), this.context.tableName);
|
|
36
|
+
}
|
|
37
|
+
async deleteThread(threadId, options) {
|
|
38
|
+
return (0, boundary_js_1.guardPublic)('saver.deleteThread', () => {
|
|
39
|
+
(0, collaborators_js_1.assertCancelOptions)(options);
|
|
40
|
+
return (0, delete_thread_js_1.deleteThread)(this.context, threadId, options);
|
|
41
|
+
}, this.context.tableName);
|
|
42
|
+
}
|
|
43
|
+
getDeltaChannelHistory(options) {
|
|
44
|
+
return (0, boundary_js_1.guardPublic)('saver.getDeltaChannelHistory', () => {
|
|
45
|
+
const request = (0, parse_js_1.parseDeltaHistoryRequest)(options);
|
|
46
|
+
return (0, delta_history_js_1.deltaChannelHistory)(this.context, (c) => this.getTuple(c), request.config, request.channels);
|
|
47
|
+
}, this.context.tableName);
|
|
48
|
+
}
|
|
49
|
+
destroy() {
|
|
50
|
+
(0, boundary_js_1.guardPublicSync)('saver.destroy', () => this.shell.release(), this.context.tableName);
|
|
51
|
+
}
|
|
52
|
+
async ensureS3LifecycleRule() {
|
|
53
|
+
return (0, boundary_js_1.guardPublic)('saver.ensureS3LifecycleRule', () => this.shell.ensureLifecycleRule(), this.context.tableName);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.DynamoDBSaver = DynamoDBSaver;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import type { RunnableConfig } from '@langchain/core/runnables';
|
|
12
12
|
import type { SerializerProtocol } from '@langchain/langgraph-checkpoint';
|
|
13
|
-
import type { BaseAdapterOptions, CodecOptions } from '../shared/options';
|
|
13
|
+
import type { BaseAdapterOptions, CodecOptions } from '../shared/options.js';
|
|
14
14
|
/** Options for {@link DynamoDBSaver}. */
|
|
15
15
|
export type DynamoDBSaverOptions = BaseAdapterOptions & CodecOptions & {
|
|
16
16
|
/**
|
|
@@ -8,17 +8,18 @@
|
|
|
8
8
|
* strand the others — and a `createAll` that fails partway releases what it
|
|
9
9
|
* had built before its own error propagates.
|
|
10
10
|
*/
|
|
11
|
-
import { DynamoDBSaver } from '../checkpointer/saver';
|
|
12
|
-
import type { DynamoDBSaverOptions } from '../checkpointer/types';
|
|
13
|
-
import { DynamoDBChatMessageHistory } from '../history/chat-message-history';
|
|
14
|
-
import type { DynamoDBChatMessageHistoryOptions } from '../history/types';
|
|
15
|
-
import { DynamoDBStore } from '../store/store';
|
|
16
|
-
import type { DynamoDBStoreOptions } from '../store/types';
|
|
17
|
-
import type { CreateAllOptions, CreatedAdapters, FactoryBaseOptions } from './types';
|
|
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
18
|
/**
|
|
19
19
|
* Convenience constructors for the adapters.
|
|
20
20
|
*
|
|
21
|
-
* Individual `create*` methods each build
|
|
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}
|
|
22
23
|
* builds one shared client used by all three and returns a combined `destroy`
|
|
23
24
|
* that tears everything down once. Each adapter validates the options it ends
|
|
24
25
|
* up with, so the same mistake is caught the same way however the adapter was
|
|
@@ -55,8 +56,8 @@ export declare class DynamoDBFactory {
|
|
|
55
56
|
/** The base options every adapter inherits regardless of which client it uses. */
|
|
56
57
|
private sharedDefaults;
|
|
57
58
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
59
|
+
* An `s3` config with the region the DynamoDB side was configured with
|
|
60
|
+
* filled in, when it names none of its own.
|
|
60
61
|
*
|
|
61
62
|
* An adapter normally reads that region off its own `clientConfig`
|
|
62
63
|
* (`offloaderConfigFor`), but the adapters {@link createAll} builds are given
|
|
@@ -66,15 +67,17 @@ export declare class DynamoDBFactory {
|
|
|
66
67
|
* without it, a bucket reachable only through that region fails with an
|
|
67
68
|
* opaque `PermanentRedirect` on the first offload, unlike the identical
|
|
68
69
|
* configuration through `createStore`, which resolves its own region
|
|
69
|
-
* directly.
|
|
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.
|
|
70
73
|
*
|
|
71
|
-
*
|
|
74
|
+
* An `s3`, or its `clientConfig`, that is not an object is handed on
|
|
72
75
|
* unchanged, for each adapter to refuse by its own name: reading `.region`
|
|
73
76
|
* off a `null` one would throw here instead, and writing a region into a
|
|
74
77
|
* malformed `clientConfig` would turn it into an object shape an adapter
|
|
75
78
|
* then accepts instead of refusing.
|
|
76
79
|
*/
|
|
77
|
-
private
|
|
80
|
+
private withTableRegion;
|
|
78
81
|
/**
|
|
79
82
|
* Per-adapter options replace the factory's client choice as a unit: a
|
|
80
83
|
* `client` handed to `createSaver` also displaces the base `clientConfig`
|
|
@@ -84,14 +87,15 @@ export declare class DynamoDBFactory {
|
|
|
84
87
|
*/
|
|
85
88
|
private defaultsFor;
|
|
86
89
|
/**
|
|
87
|
-
* A saver on its own
|
|
90
|
+
* A saver, on the factory's `client` when it has one and otherwise on its own.
|
|
88
91
|
*
|
|
89
92
|
* Accepts: `options` — the saver's own, laid over the factory's defaults. A
|
|
90
|
-
* per-adapter value wins
|
|
91
|
-
*
|
|
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.
|
|
92
96
|
*
|
|
93
|
-
* Returns: the saver
|
|
94
|
-
* `
|
|
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.
|
|
95
99
|
*
|
|
96
100
|
* Throws: `VALIDATION` for any invalid option, naming it as the saver's
|
|
97
101
|
* constructor does — `options` for a value that is not an object, checked
|
|
@@ -101,7 +105,7 @@ export declare class DynamoDBFactory {
|
|
|
101
105
|
*/
|
|
102
106
|
createSaver(options: DynamoDBSaverOptions): DynamoDBSaver;
|
|
103
107
|
/**
|
|
104
|
-
* A store on its own
|
|
108
|
+
* A store, on the factory's `client` when it has one and otherwise on its own.
|
|
105
109
|
*
|
|
106
110
|
* Accepts: as {@link createSaver}, for the store's options.
|
|
107
111
|
*
|
|
@@ -111,7 +115,8 @@ export declare class DynamoDBFactory {
|
|
|
111
115
|
*/
|
|
112
116
|
createStore(options: DynamoDBStoreOptions): DynamoDBStore;
|
|
113
117
|
/**
|
|
114
|
-
* A chat history on
|
|
118
|
+
* A chat history, on the factory's `client` when it has one and otherwise on
|
|
119
|
+
* its own.
|
|
115
120
|
*
|
|
116
121
|
* Accepts: as {@link createSaver}, for the history's options.
|
|
117
122
|
*
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DynamoDBFactory = void 0;
|
|
4
|
+
const saver_js_1 = require("../checkpointer/saver.js");
|
|
5
|
+
const chat_message_history_js_1 = require("../history/chat-message-history.js");
|
|
6
|
+
const client_types_js_1 = require("../shared/codec/s3/client-types.js");
|
|
7
|
+
const client_js_1 = require("../shared/dynamodb/client.js");
|
|
8
|
+
const base_error_js_1 = require("../shared/errors/base-error.js");
|
|
9
|
+
const logger_js_1 = require("../shared/logging/logger.js");
|
|
10
|
+
const truncate_js_1 = require("../shared/logging/truncate.js");
|
|
11
|
+
const collaborators_js_1 = require("../shared/validation/collaborators.js");
|
|
12
|
+
const option_shape_js_1 = require("../shared/validation/option-shape.js");
|
|
13
|
+
const options_js_1 = require("../shared/validation/options.js");
|
|
14
|
+
const store_js_1 = require("../store/store.js");
|
|
15
|
+
const FACTORY_BASE_KEYS = (0, option_shape_js_1.allKeysOf)({
|
|
16
|
+
client: 'client',
|
|
17
|
+
clientConfig: 'clientConfig',
|
|
18
|
+
createClient: 'createClient',
|
|
19
|
+
logger: 'logger',
|
|
20
|
+
ttl: 'ttl',
|
|
21
|
+
compression: 'compression',
|
|
22
|
+
s3: 's3',
|
|
23
|
+
retry: 'retry',
|
|
24
|
+
});
|
|
25
|
+
const CREATE_ALL_KEYS = (0, option_shape_js_1.allKeysOf)({
|
|
26
|
+
saver: 'saver',
|
|
27
|
+
store: 'store',
|
|
28
|
+
history: 'history',
|
|
29
|
+
});
|
|
30
|
+
function release(logger, close) {
|
|
31
|
+
try {
|
|
32
|
+
close();
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
logger.warn('factory.destroy: an adapter did not release its resources', {
|
|
36
|
+
reason: (0, truncate_js_1.truncateForLog)((0, base_error_js_1.failureLabel)(error)),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function overridesClient(options) {
|
|
41
|
+
return (options.client !== undefined ||
|
|
42
|
+
options.clientConfig !== undefined ||
|
|
43
|
+
options.createClient !== undefined);
|
|
44
|
+
}
|
|
45
|
+
function given(options) {
|
|
46
|
+
const kept = {};
|
|
47
|
+
for (const [key, value] of Object.entries(options)) {
|
|
48
|
+
if (value !== undefined)
|
|
49
|
+
kept[key] = value;
|
|
50
|
+
}
|
|
51
|
+
return kept;
|
|
52
|
+
}
|
|
53
|
+
class DynamoDBFactory {
|
|
54
|
+
base;
|
|
55
|
+
constructor(base = {}) {
|
|
56
|
+
this.base = base;
|
|
57
|
+
(0, option_shape_js_1.assertShape)(base, FACTORY_BASE_KEYS, 'options');
|
|
58
|
+
(0, options_js_1.assertClientChoice)(base);
|
|
59
|
+
if (base.logger !== undefined)
|
|
60
|
+
(0, collaborators_js_1.assertMembers)(base.logger, collaborators_js_1.LOGGER_MEMBERS, 'logger');
|
|
61
|
+
}
|
|
62
|
+
sharedDefaults() {
|
|
63
|
+
const { logger, ttl, compression, s3, retry } = this.base;
|
|
64
|
+
return { logger, ttl, compression, s3, retry };
|
|
65
|
+
}
|
|
66
|
+
withTableRegion(s3) {
|
|
67
|
+
if (!(0, option_shape_js_1.isObjectShape)(s3))
|
|
68
|
+
return s3;
|
|
69
|
+
if (s3.clientConfig !== undefined && !(0, option_shape_js_1.isObjectShape)(s3.clientConfig))
|
|
70
|
+
return s3;
|
|
71
|
+
const region = (0, client_types_js_1.s3ClientOptions)(s3.clientConfig).region ?? this.base.clientConfig?.region;
|
|
72
|
+
if (region === undefined)
|
|
73
|
+
return s3;
|
|
74
|
+
return { ...s3, clientConfig: { ...s3.clientConfig, region } };
|
|
75
|
+
}
|
|
76
|
+
defaultsFor(options) {
|
|
77
|
+
return overridesClient(options) ? this.sharedDefaults() : this.base;
|
|
78
|
+
}
|
|
79
|
+
createSaver(options) {
|
|
80
|
+
(0, option_shape_js_1.assertObjectShape)(options, 'options');
|
|
81
|
+
const own = given(options);
|
|
82
|
+
return new saver_js_1.DynamoDBSaver({ ...this.defaultsFor(own), ...own });
|
|
83
|
+
}
|
|
84
|
+
createStore(options) {
|
|
85
|
+
(0, option_shape_js_1.assertObjectShape)(options, 'options');
|
|
86
|
+
const own = given(options);
|
|
87
|
+
return new store_js_1.DynamoDBStore({ ...this.defaultsFor(own), ...own });
|
|
88
|
+
}
|
|
89
|
+
createChatMessageHistory(options) {
|
|
90
|
+
(0, option_shape_js_1.assertObjectShape)(options, 'options');
|
|
91
|
+
const own = given(options);
|
|
92
|
+
return new chat_message_history_js_1.DynamoDBChatMessageHistory({ ...this.defaultsFor(own), ...own });
|
|
93
|
+
}
|
|
94
|
+
createAll(options) {
|
|
95
|
+
(0, option_shape_js_1.assertShape)(options, CREATE_ALL_KEYS, 'options');
|
|
96
|
+
const { saver, store, history } = options;
|
|
97
|
+
for (const section of [saver, store, history]) {
|
|
98
|
+
if (section !== undefined)
|
|
99
|
+
(0, option_shape_js_1.assertObjectShape)(section, 'options');
|
|
100
|
+
}
|
|
101
|
+
const logger = (0, logger_js_1.resolveLogger)(this.base.logger);
|
|
102
|
+
const resolved = (0, client_js_1.resolveDynamoDBClient)(this.base);
|
|
103
|
+
const shared = { ...this.sharedDefaults(), client: resolved.client };
|
|
104
|
+
const onSharedClient = (section) => {
|
|
105
|
+
const options = { ...shared, ...given(section) };
|
|
106
|
+
return { ...options, s3: this.withTableRegion(options.s3) };
|
|
107
|
+
};
|
|
108
|
+
const built = [];
|
|
109
|
+
const track = (adapter) => {
|
|
110
|
+
built.push(adapter);
|
|
111
|
+
return adapter;
|
|
112
|
+
};
|
|
113
|
+
let destroyed = false;
|
|
114
|
+
const destroy = () => {
|
|
115
|
+
if (destroyed)
|
|
116
|
+
return;
|
|
117
|
+
destroyed = true;
|
|
118
|
+
for (const adapter of built)
|
|
119
|
+
release(logger, () => adapter.destroy());
|
|
120
|
+
release(logger, () => resolved.ddbClient?.destroy());
|
|
121
|
+
};
|
|
122
|
+
try {
|
|
123
|
+
const adapters = {
|
|
124
|
+
saver: saver && track(new saver_js_1.DynamoDBSaver(onSharedClient(saver))),
|
|
125
|
+
store: store && track(new store_js_1.DynamoDBStore(onSharedClient(store))),
|
|
126
|
+
history: history && track(new chat_message_history_js_1.DynamoDBChatMessageHistory(onSharedClient(history))),
|
|
127
|
+
destroy,
|
|
128
|
+
};
|
|
129
|
+
return adapters;
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
destroy();
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.DynamoDBFactory = DynamoDBFactory;
|
|
@@ -7,18 +7,18 @@
|
|
|
7
7
|
* compiler knows which adapters it got without a runtime check.
|
|
8
8
|
*/
|
|
9
9
|
import type { DynamoDBClientConfig } from '@aws-sdk/client-dynamodb';
|
|
10
|
-
import type { DynamoDBSaver } from '../checkpointer/saver';
|
|
11
|
-
import type { DynamoDBSaverOptions } from '../checkpointer/types';
|
|
12
|
-
import type { DynamoDBChatMessageHistory } from '../history/chat-message-history';
|
|
13
|
-
import type { DynamoDBChatMessageHistoryOptions } from '../history/types';
|
|
14
|
-
import type { CompressionConfig } from '../shared/codec/compression';
|
|
15
|
-
import type { S3OffloadConfig } from '../shared/codec/s3/config';
|
|
16
|
-
import type { DynamoDBDocumentLike } from '../shared/dynamodb/client';
|
|
17
|
-
import type { RetryPolicy } from '../shared/dynamodb/retry';
|
|
18
|
-
import type { Logger } from '../shared/logging/logger';
|
|
19
|
-
import type { TtlOption } from '../shared/validation/ttl';
|
|
20
|
-
import type { DynamoDBStore } from '../store/store';
|
|
21
|
-
import type { DynamoDBStoreOptions } from '../store/types';
|
|
10
|
+
import type { DynamoDBSaver } from '../checkpointer/saver.js';
|
|
11
|
+
import type { DynamoDBSaverOptions } from '../checkpointer/types.js';
|
|
12
|
+
import type { DynamoDBChatMessageHistory } from '../history/chat-message-history.js';
|
|
13
|
+
import type { DynamoDBChatMessageHistoryOptions } from '../history/types.js';
|
|
14
|
+
import type { CompressionConfig } from '../shared/codec/compression.js';
|
|
15
|
+
import type { S3OffloadConfig } from '../shared/codec/s3/config.js';
|
|
16
|
+
import type { DynamoDBDocumentLike } from '../shared/dynamodb/client.js';
|
|
17
|
+
import type { RetryPolicy } from '../shared/dynamodb/retry.js';
|
|
18
|
+
import type { Logger } from '../shared/logging/logger.js';
|
|
19
|
+
import type { TtlOption } from '../shared/validation/ttl.js';
|
|
20
|
+
import type { DynamoDBStore } from '../store/store.js';
|
|
21
|
+
import type { DynamoDBStoreOptions } from '../store/types.js';
|
|
22
22
|
/**
|
|
23
23
|
* Defaults applied to every adapter the factory builds: the client (or how to
|
|
24
24
|
* build one) and the cross-cutting options a team usually wants identical
|