@farukada/aws-langgraph-dynamodb-ts 0.9.0 → 1.0.0-rc.2
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 +1720 -154
- package/dist/backfill/backfill.d.ts +168 -0
- package/dist/backfill/backfill.js +393 -0
- package/dist/checkpointer/actions/delete-thread.d.ts +47 -6
- package/dist/checkpointer/actions/delete-thread.js +58 -21
- package/dist/checkpointer/actions/get-tuple.d.ts +29 -4
- package/dist/checkpointer/actions/get-tuple.js +44 -10
- package/dist/checkpointer/actions/list.d.ts +46 -4
- package/dist/checkpointer/actions/list.js +121 -66
- package/dist/checkpointer/actions/put-writes.d.ts +41 -9
- package/dist/checkpointer/actions/put-writes.js +62 -77
- package/dist/checkpointer/actions/put.d.ts +83 -4
- package/dist/checkpointer/actions/put.js +177 -25
- package/dist/checkpointer/internal/delta-history.d.ts +112 -0
- package/dist/checkpointer/internal/delta-history.js +252 -0
- package/dist/checkpointer/internal/listing.d.ts +149 -0
- package/dist/checkpointer/internal/listing.js +245 -0
- package/dist/checkpointer/internal/parse.d.ts +262 -0
- package/dist/checkpointer/internal/parse.js +372 -0
- package/dist/checkpointer/internal/pending-writes.d.ts +275 -0
- package/dist/checkpointer/internal/pending-writes.js +588 -0
- package/dist/checkpointer/internal/read.d.ts +130 -0
- package/dist/checkpointer/internal/read.js +264 -0
- package/dist/checkpointer/internal/rows.d.ts +571 -0
- package/dist/checkpointer/internal/rows.js +834 -0
- package/dist/checkpointer/internal/setup.d.ts +42 -19
- package/dist/checkpointer/internal/setup.js +65 -29
- package/dist/checkpointer/saver.d.ts +256 -16
- package/dist/checkpointer/saver.js +275 -29
- package/dist/checkpointer/types.d.ts +39 -39
- package/dist/checkpointer/types.js +10 -1
- package/dist/factory/factory.d.ts +134 -28
- package/dist/factory/factory.js +240 -21
- package/dist/factory/types.d.ts +76 -0
- package/dist/factory/types.js +10 -0
- package/dist/history/actions/add-messages.d.ts +31 -4
- package/dist/history/actions/add-messages.js +38 -58
- package/dist/history/actions/clear.d.ts +49 -6
- package/dist/history/actions/clear.js +66 -14
- package/dist/history/actions/get-messages.d.ts +54 -6
- package/dist/history/actions/get-messages.js +126 -43
- package/dist/history/actions/list-sessions.d.ts +52 -10
- package/dist/history/actions/list-sessions.js +139 -40
- package/dist/history/actions/reconcile-count.d.ts +42 -10
- package/dist/history/actions/reconcile-count.js +45 -45
- package/dist/history/chat-message-history.d.ts +220 -33
- package/dist/history/chat-message-history.js +240 -43
- package/dist/history/internal/append.d.ts +212 -0
- package/dist/history/internal/append.js +500 -0
- package/dist/history/internal/message-read.d.ts +84 -0
- package/dist/history/internal/message-read.js +204 -0
- package/dist/history/internal/parse.d.ts +153 -0
- package/dist/history/internal/parse.js +252 -0
- package/dist/history/internal/rows.d.ts +195 -0
- package/dist/history/internal/rows.js +250 -0
- package/dist/history/internal/session.d.ts +331 -0
- package/dist/history/internal/session.js +628 -0
- package/dist/history/internal/setup.d.ts +52 -17
- package/dist/history/internal/setup.js +92 -21
- package/dist/history/session-adapter.d.ts +102 -7
- package/dist/history/session-adapter.js +103 -9
- package/dist/history/types.d.ts +80 -29
- package/dist/history/types.js +10 -1
- package/dist/index.d.ts +42 -11
- package/dist/index.js +33 -12
- package/dist/shared/adapter.d.ts +135 -0
- package/dist/shared/adapter.js +143 -0
- package/dist/shared/clock.d.ts +51 -2
- package/dist/shared/clock.js +57 -2
- package/dist/shared/codec/codec.d.ts +288 -13
- package/dist/shared/codec/codec.js +416 -19
- package/dist/shared/codec/compression.d.ts +43 -7
- package/dist/shared/codec/compression.js +53 -13
- package/dist/shared/codec/json-serde.d.ts +76 -4
- package/dist/shared/codec/json-serde.js +181 -8
- package/dist/shared/codec/s3/client-types.d.ts +53 -0
- package/dist/shared/codec/s3/client-types.js +26 -0
- package/dist/shared/codec/s3/client.d.ts +43 -10
- package/dist/shared/codec/s3/client.js +82 -9
- package/dist/shared/codec/s3/config.d.ts +242 -11
- package/dist/shared/codec/s3/config.js +293 -11
- package/dist/shared/codec/s3/lifecycle.d.ts +164 -6
- package/dist/shared/codec/s3/lifecycle.js +335 -27
- package/dist/shared/codec/s3/offloader.d.ts +393 -18
- package/dist/shared/codec/s3/offloader.js +595 -37
- package/dist/shared/concurrency.d.ts +43 -0
- package/dist/shared/concurrency.js +78 -0
- package/dist/shared/dynamodb/abort.d.ts +47 -0
- package/dist/shared/dynamodb/abort.js +59 -0
- package/dist/shared/dynamodb/batch-write.d.ts +77 -14
- package/dist/shared/dynamodb/batch-write.js +146 -27
- package/dist/shared/dynamodb/cancellation.d.ts +121 -4
- package/dist/shared/dynamodb/cancellation.js +147 -3
- package/dist/shared/dynamodb/client.d.ts +162 -8
- package/dist/shared/dynamodb/client.js +153 -5
- package/dist/shared/dynamodb/idempotent-write.d.ts +551 -0
- package/dist/shared/dynamodb/idempotent-write.js +593 -0
- package/dist/shared/dynamodb/paginate.d.ts +105 -9
- package/dist/shared/dynamodb/paginate.js +175 -7
- package/dist/shared/dynamodb/partition-delete.d.ts +185 -14
- package/dist/shared/dynamodb/partition-delete.js +314 -44
- package/dist/shared/dynamodb/recency-index.d.ts +231 -0
- package/dist/shared/dynamodb/recency-index.js +377 -0
- package/dist/shared/dynamodb/retry.d.ts +276 -8
- package/dist/shared/dynamodb/retry.js +433 -23
- package/dist/shared/dynamodb/table-schema.d.ts +190 -0
- package/dist/shared/dynamodb/table-schema.js +209 -0
- package/dist/shared/errors/base-error.d.ts +184 -10
- package/dist/shared/errors/base-error.js +160 -14
- package/dist/shared/errors/boundary.d.ts +71 -0
- package/dist/shared/errors/boundary.js +143 -0
- package/dist/shared/errors/classify.d.ts +97 -0
- package/dist/shared/errors/classify.js +257 -0
- package/dist/shared/errors/error-code.d.ts +77 -2
- package/dist/shared/errors/error-code.js +83 -1
- package/dist/shared/errors/errors.d.ts +158 -59
- package/dist/shared/errors/errors.js +219 -92
- package/dist/shared/logging/logger.d.ts +69 -3
- package/dist/shared/logging/logger.js +97 -3
- package/dist/shared/logging/redaction.d.ts +92 -8
- package/dist/shared/logging/redaction.js +273 -17
- package/dist/shared/logging/secret-patterns.d.ts +149 -19
- package/dist/shared/logging/secret-patterns.js +188 -27
- package/dist/shared/logging/truncate.d.ts +197 -0
- package/dist/shared/logging/truncate.js +231 -0
- package/dist/shared/options.d.ts +59 -7
- package/dist/shared/options.js +9 -1
- package/dist/shared/ulid.d.ts +77 -7
- package/dist/shared/ulid.js +103 -8
- package/dist/shared/validation/collaborators.d.ts +141 -0
- package/dist/shared/validation/collaborators.js +188 -0
- package/dist/shared/validation/option-shape.d.ts +89 -0
- package/dist/shared/validation/option-shape.js +113 -0
- package/dist/shared/validation/options.d.ts +145 -0
- package/dist/shared/validation/options.js +328 -0
- package/dist/shared/validation/primitives.d.ts +288 -21
- package/dist/shared/validation/primitives.js +353 -50
- package/dist/shared/validation/ttl.d.ts +66 -10
- package/dist/shared/validation/ttl.js +113 -15
- package/dist/store/actions/list-namespaces.d.ts +76 -6
- package/dist/store/actions/list-namespaces.js +166 -24
- package/dist/store/actions/put.d.ts +33 -8
- package/dist/store/actions/put.js +53 -60
- package/dist/store/actions/reconcile-vector-index.d.ts +31 -10
- package/dist/store/actions/reconcile-vector-index.js +34 -15
- package/dist/store/actions/search.d.ts +34 -6
- package/dist/store/actions/search.js +56 -51
- package/dist/store/internal/batch-plan.d.ts +26 -0
- package/dist/store/internal/batch-plan.js +109 -0
- package/dist/store/internal/filter.d.ts +36 -3
- package/dist/store/internal/filter.js +66 -15
- package/dist/store/internal/get-item.d.ts +45 -0
- package/dist/store/internal/get-item.js +115 -0
- package/dist/store/internal/item-write.d.ts +230 -0
- package/dist/store/internal/item-write.js +463 -0
- package/dist/store/internal/parse.d.ts +225 -0
- package/dist/store/internal/parse.js +350 -0
- package/dist/store/internal/rows.d.ts +355 -0
- package/dist/store/internal/rows.js +447 -0
- package/dist/store/internal/semantic-search.d.ts +161 -6
- package/dist/store/internal/semantic-search.js +360 -18
- package/dist/store/internal/setup.d.ts +77 -20
- package/dist/store/internal/setup.js +178 -47
- package/dist/store/internal/table-search.d.ts +100 -0
- package/dist/store/internal/table-search.js +213 -0
- package/dist/store/internal/vector-index.d.ts +247 -0
- package/dist/store/internal/vector-index.js +546 -0
- package/dist/store/store.d.ts +270 -17
- package/dist/store/store.js +329 -38
- package/dist/store/types.d.ts +76 -26
- package/dist/store/types.js +13 -1
- package/dist/store/vector-backend.d.ts +64 -4
- package/dist/store/vector-backend.js +15 -1
- package/package.json +58 -36
- package/dist/checkpointer/actions/delete-thread.d.ts.map +0 -1
- package/dist/checkpointer/actions/delete-thread.js.map +0 -1
- package/dist/checkpointer/actions/get-tuple.d.ts.map +0 -1
- package/dist/checkpointer/actions/get-tuple.js.map +0 -1
- package/dist/checkpointer/actions/list.d.ts.map +0 -1
- package/dist/checkpointer/actions/list.js.map +0 -1
- package/dist/checkpointer/actions/put-writes.d.ts.map +0 -1
- package/dist/checkpointer/actions/put-writes.js.map +0 -1
- package/dist/checkpointer/actions/put.d.ts.map +0 -1
- package/dist/checkpointer/actions/put.js.map +0 -1
- package/dist/checkpointer/internal/assemble.d.ts +0 -10
- package/dist/checkpointer/internal/assemble.d.ts.map +0 -1
- package/dist/checkpointer/internal/assemble.js +0 -37
- package/dist/checkpointer/internal/assemble.js.map +0 -1
- package/dist/checkpointer/internal/configurable.d.ts +0 -13
- package/dist/checkpointer/internal/configurable.d.ts.map +0 -1
- package/dist/checkpointer/internal/configurable.js +0 -23
- package/dist/checkpointer/internal/configurable.js.map +0 -1
- package/dist/checkpointer/internal/fetch.d.ts +0 -10
- package/dist/checkpointer/internal/fetch.d.ts.map +0 -1
- package/dist/checkpointer/internal/fetch.js +0 -46
- package/dist/checkpointer/internal/fetch.js.map +0 -1
- package/dist/checkpointer/internal/filter-match.d.ts +0 -12
- package/dist/checkpointer/internal/filter-match.d.ts.map +0 -1
- package/dist/checkpointer/internal/filter-match.js +0 -14
- package/dist/checkpointer/internal/filter-match.js.map +0 -1
- package/dist/checkpointer/internal/item-reader.d.ts +0 -55
- package/dist/checkpointer/internal/item-reader.d.ts.map +0 -1
- package/dist/checkpointer/internal/item-reader.js +0 -88
- package/dist/checkpointer/internal/item-reader.js.map +0 -1
- package/dist/checkpointer/internal/item-writer.d.ts +0 -26
- package/dist/checkpointer/internal/item-writer.d.ts.map +0 -1
- package/dist/checkpointer/internal/item-writer.js +0 -92
- package/dist/checkpointer/internal/item-writer.js.map +0 -1
- package/dist/checkpointer/internal/keys.d.ts +0 -31
- package/dist/checkpointer/internal/keys.d.ts.map +0 -1
- package/dist/checkpointer/internal/keys.js +0 -87
- package/dist/checkpointer/internal/keys.js.map +0 -1
- package/dist/checkpointer/internal/query.d.ts +0 -20
- package/dist/checkpointer/internal/query.d.ts.map +0 -1
- package/dist/checkpointer/internal/query.js +0 -36
- package/dist/checkpointer/internal/query.js.map +0 -1
- package/dist/checkpointer/internal/setup.d.ts.map +0 -1
- package/dist/checkpointer/internal/setup.js.map +0 -1
- package/dist/checkpointer/internal/special-write-cas.d.ts +0 -30
- package/dist/checkpointer/internal/special-write-cas.d.ts.map +0 -1
- package/dist/checkpointer/internal/special-write-cas.js +0 -104
- package/dist/checkpointer/internal/special-write-cas.js.map +0 -1
- package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -24
- package/dist/checkpointer/internal/special-write-cleanup.d.ts.map +0 -1
- package/dist/checkpointer/internal/special-write-cleanup.js +0 -47
- package/dist/checkpointer/internal/special-write-cleanup.js.map +0 -1
- package/dist/checkpointer/internal/special-write-verify.d.ts +0 -54
- package/dist/checkpointer/internal/special-write-verify.d.ts.map +0 -1
- package/dist/checkpointer/internal/special-write-verify.js +0 -65
- package/dist/checkpointer/internal/special-write-verify.js.map +0 -1
- package/dist/checkpointer/internal/validation.d.ts +0 -13
- package/dist/checkpointer/internal/validation.d.ts.map +0 -1
- package/dist/checkpointer/internal/validation.js +0 -30
- package/dist/checkpointer/internal/validation.js.map +0 -1
- package/dist/checkpointer/internal/write-guard.d.ts +0 -13
- package/dist/checkpointer/internal/write-guard.d.ts.map +0 -1
- package/dist/checkpointer/internal/write-guard.js +0 -39
- package/dist/checkpointer/internal/write-guard.js.map +0 -1
- package/dist/checkpointer/internal/write-index.d.ts +0 -37
- package/dist/checkpointer/internal/write-index.d.ts.map +0 -1
- package/dist/checkpointer/internal/write-index.js +0 -42
- package/dist/checkpointer/internal/write-index.js.map +0 -1
- package/dist/checkpointer/saver.d.ts.map +0 -1
- package/dist/checkpointer/saver.js.map +0 -1
- package/dist/checkpointer/types.d.ts.map +0 -1
- package/dist/checkpointer/types.js.map +0 -1
- package/dist/factory/factory.d.ts.map +0 -1
- package/dist/factory/factory.js.map +0 -1
- package/dist/history/actions/add-messages.d.ts.map +0 -1
- package/dist/history/actions/add-messages.js.map +0 -1
- package/dist/history/actions/clear.d.ts.map +0 -1
- package/dist/history/actions/clear.js.map +0 -1
- package/dist/history/actions/get-messages.d.ts.map +0 -1
- package/dist/history/actions/get-messages.js.map +0 -1
- package/dist/history/actions/list-sessions.d.ts.map +0 -1
- package/dist/history/actions/list-sessions.js.map +0 -1
- package/dist/history/actions/reconcile-count.d.ts.map +0 -1
- package/dist/history/actions/reconcile-count.js.map +0 -1
- package/dist/history/chat-message-history.d.ts.map +0 -1
- package/dist/history/chat-message-history.js.map +0 -1
- package/dist/history/internal/append-saga.d.ts +0 -20
- package/dist/history/internal/append-saga.d.ts.map +0 -1
- package/dist/history/internal/append-saga.js +0 -35
- package/dist/history/internal/append-saga.js.map +0 -1
- package/dist/history/internal/compensation.d.ts +0 -21
- package/dist/history/internal/compensation.d.ts.map +0 -1
- package/dist/history/internal/compensation.js +0 -84
- package/dist/history/internal/compensation.js.map +0 -1
- package/dist/history/internal/item-mapper.d.ts +0 -12
- package/dist/history/internal/item-mapper.d.ts.map +0 -1
- package/dist/history/internal/item-mapper.js +0 -33
- package/dist/history/internal/item-mapper.js.map +0 -1
- package/dist/history/internal/keys.d.ts +0 -17
- package/dist/history/internal/keys.d.ts.map +0 -1
- package/dist/history/internal/keys.js +0 -49
- package/dist/history/internal/keys.js.map +0 -1
- package/dist/history/internal/message-chunker.d.ts +0 -14
- package/dist/history/internal/message-chunker.d.ts.map +0 -1
- package/dist/history/internal/message-chunker.js +0 -68
- package/dist/history/internal/message-chunker.js.map +0 -1
- package/dist/history/internal/message-transaction.d.ts +0 -26
- package/dist/history/internal/message-transaction.d.ts.map +0 -1
- package/dist/history/internal/message-transaction.js +0 -60
- package/dist/history/internal/message-transaction.js.map +0 -1
- package/dist/history/internal/query.d.ts +0 -10
- package/dist/history/internal/query.d.ts.map +0 -1
- package/dist/history/internal/query.js +0 -31
- package/dist/history/internal/query.js.map +0 -1
- package/dist/history/internal/session-count.d.ts +0 -41
- package/dist/history/internal/session-count.d.ts.map +0 -1
- package/dist/history/internal/session-count.js +0 -109
- package/dist/history/internal/session-count.js.map +0 -1
- package/dist/history/internal/session-title.d.ts +0 -20
- package/dist/history/internal/session-title.d.ts.map +0 -1
- package/dist/history/internal/session-title.js +0 -44
- package/dist/history/internal/session-title.js.map +0 -1
- package/dist/history/internal/session-update.d.ts +0 -28
- package/dist/history/internal/session-update.d.ts.map +0 -1
- package/dist/history/internal/session-update.js +0 -70
- package/dist/history/internal/session-update.js.map +0 -1
- package/dist/history/internal/setup.d.ts.map +0 -1
- package/dist/history/internal/setup.js.map +0 -1
- package/dist/history/internal/title-generator.d.ts +0 -13
- package/dist/history/internal/title-generator.d.ts.map +0 -1
- package/dist/history/internal/title-generator.js +0 -25
- package/dist/history/internal/title-generator.js.map +0 -1
- package/dist/history/internal/ttl-anchor.d.ts +0 -25
- package/dist/history/internal/ttl-anchor.d.ts.map +0 -1
- package/dist/history/internal/ttl-anchor.js +0 -38
- package/dist/history/internal/ttl-anchor.js.map +0 -1
- package/dist/history/internal/validation.d.ts +0 -9
- package/dist/history/internal/validation.d.ts.map +0 -1
- package/dist/history/internal/validation.js +0 -16
- package/dist/history/internal/validation.js.map +0 -1
- package/dist/history/session-adapter.d.ts.map +0 -1
- package/dist/history/session-adapter.js.map +0 -1
- package/dist/history/types.d.ts.map +0 -1
- package/dist/history/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/shared/clock.d.ts.map +0 -1
- package/dist/shared/clock.js.map +0 -1
- package/dist/shared/codec/codec.d.ts.map +0 -1
- package/dist/shared/codec/codec.js.map +0 -1
- package/dist/shared/codec/compression.d.ts.map +0 -1
- package/dist/shared/codec/compression.js.map +0 -1
- package/dist/shared/codec/descriptor-keys.d.ts +0 -4
- package/dist/shared/codec/descriptor-keys.d.ts.map +0 -1
- package/dist/shared/codec/descriptor-keys.js +0 -14
- package/dist/shared/codec/descriptor-keys.js.map +0 -1
- package/dist/shared/codec/json-serde.d.ts.map +0 -1
- package/dist/shared/codec/json-serde.js.map +0 -1
- package/dist/shared/codec/s3/client.d.ts.map +0 -1
- package/dist/shared/codec/s3/client.js.map +0 -1
- package/dist/shared/codec/s3/config.d.ts.map +0 -1
- package/dist/shared/codec/s3/config.js.map +0 -1
- package/dist/shared/codec/s3/delete.d.ts +0 -8
- package/dist/shared/codec/s3/delete.d.ts.map +0 -1
- package/dist/shared/codec/s3/delete.js +0 -29
- package/dist/shared/codec/s3/delete.js.map +0 -1
- package/dist/shared/codec/s3/lifecycle.d.ts.map +0 -1
- package/dist/shared/codec/s3/lifecycle.js.map +0 -1
- package/dist/shared/codec/s3/offloader.d.ts.map +0 -1
- package/dist/shared/codec/s3/offloader.js.map +0 -1
- package/dist/shared/codec/s3/orphans.d.ts +0 -18
- package/dist/shared/codec/s3/orphans.d.ts.map +0 -1
- package/dist/shared/codec/s3/orphans.js +0 -58
- package/dist/shared/codec/s3/orphans.js.map +0 -1
- package/dist/shared/codec/s3/read-write.d.ts +0 -14
- package/dist/shared/codec/s3/read-write.d.ts.map +0 -1
- package/dist/shared/codec/s3/read-write.js +0 -43
- package/dist/shared/codec/s3/read-write.js.map +0 -1
- package/dist/shared/codec/s3/retry.d.ts +0 -5
- package/dist/shared/codec/s3/retry.d.ts.map +0 -1
- package/dist/shared/codec/s3/retry.js +0 -25
- package/dist/shared/codec/s3/retry.js.map +0 -1
- package/dist/shared/constants.d.ts +0 -64
- package/dist/shared/constants.d.ts.map +0 -1
- package/dist/shared/constants.js +0 -67
- package/dist/shared/constants.js.map +0 -1
- package/dist/shared/dynamodb/backoff.d.ts +0 -15
- package/dist/shared/dynamodb/backoff.d.ts.map +0 -1
- package/dist/shared/dynamodb/backoff.js +0 -48
- package/dist/shared/dynamodb/backoff.js.map +0 -1
- package/dist/shared/dynamodb/batch-write.d.ts.map +0 -1
- package/dist/shared/dynamodb/batch-write.js.map +0 -1
- package/dist/shared/dynamodb/cancellation.d.ts.map +0 -1
- package/dist/shared/dynamodb/cancellation.js.map +0 -1
- package/dist/shared/dynamodb/client.d.ts.map +0 -1
- package/dist/shared/dynamodb/client.js.map +0 -1
- package/dist/shared/dynamodb/conditional-put.d.ts +0 -51
- package/dist/shared/dynamodb/conditional-put.d.ts.map +0 -1
- package/dist/shared/dynamodb/conditional-put.js +0 -59
- package/dist/shared/dynamodb/conditional-put.js.map +0 -1
- package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -19
- package/dist/shared/dynamodb/drain-unprocessed.d.ts.map +0 -1
- package/dist/shared/dynamodb/drain-unprocessed.js +0 -44
- package/dist/shared/dynamodb/drain-unprocessed.js.map +0 -1
- package/dist/shared/dynamodb/paginate-core.d.ts +0 -22
- package/dist/shared/dynamodb/paginate-core.d.ts.map +0 -1
- package/dist/shared/dynamodb/paginate-core.js +0 -52
- package/dist/shared/dynamodb/paginate-core.js.map +0 -1
- package/dist/shared/dynamodb/paginate.d.ts.map +0 -1
- package/dist/shared/dynamodb/paginate.js.map +0 -1
- package/dist/shared/dynamodb/partition-delete.d.ts.map +0 -1
- package/dist/shared/dynamodb/partition-delete.js.map +0 -1
- package/dist/shared/dynamodb/retry-classifier.d.ts +0 -9
- package/dist/shared/dynamodb/retry-classifier.d.ts.map +0 -1
- package/dist/shared/dynamodb/retry-classifier.js +0 -87
- package/dist/shared/dynamodb/retry-classifier.js.map +0 -1
- package/dist/shared/dynamodb/retry.d.ts.map +0 -1
- package/dist/shared/dynamodb/retry.js.map +0 -1
- package/dist/shared/dynamodb/scan.d.ts +0 -15
- package/dist/shared/dynamodb/scan.d.ts.map +0 -1
- package/dist/shared/dynamodb/scan.js +0 -20
- package/dist/shared/dynamodb/scan.js.map +0 -1
- package/dist/shared/dynamodb/types.d.ts +0 -24
- package/dist/shared/dynamodb/types.d.ts.map +0 -1
- package/dist/shared/dynamodb/types.js +0 -3
- package/dist/shared/dynamodb/types.js.map +0 -1
- package/dist/shared/errors/base-error.d.ts.map +0 -1
- package/dist/shared/errors/base-error.js.map +0 -1
- package/dist/shared/errors/error-code.d.ts.map +0 -1
- package/dist/shared/errors/error-code.js.map +0 -1
- package/dist/shared/errors/errors.d.ts.map +0 -1
- package/dist/shared/errors/errors.js.map +0 -1
- package/dist/shared/errors/wrap-error.d.ts +0 -16
- package/dist/shared/errors/wrap-error.d.ts.map +0 -1
- package/dist/shared/errors/wrap-error.js +0 -30
- package/dist/shared/errors/wrap-error.js.map +0 -1
- package/dist/shared/logging/logger.d.ts.map +0 -1
- package/dist/shared/logging/logger.js.map +0 -1
- package/dist/shared/logging/redaction-walk.d.ts +0 -23
- package/dist/shared/logging/redaction-walk.d.ts.map +0 -1
- package/dist/shared/logging/redaction-walk.js +0 -92
- package/dist/shared/logging/redaction-walk.js.map +0 -1
- package/dist/shared/logging/redaction.d.ts.map +0 -1
- package/dist/shared/logging/redaction.js.map +0 -1
- package/dist/shared/logging/secret-patterns.d.ts.map +0 -1
- package/dist/shared/logging/secret-patterns.js.map +0 -1
- package/dist/shared/options.d.ts.map +0 -1
- package/dist/shared/options.js.map +0 -1
- package/dist/shared/ulid.d.ts.map +0 -1
- package/dist/shared/ulid.js.map +0 -1
- package/dist/shared/validation/primitives.d.ts.map +0 -1
- package/dist/shared/validation/primitives.js.map +0 -1
- package/dist/shared/validation/ttl.d.ts.map +0 -1
- package/dist/shared/validation/ttl.js.map +0 -1
- package/dist/store/actions/get.d.ts +0 -5
- package/dist/store/actions/get.d.ts.map +0 -1
- package/dist/store/actions/get.js +0 -35
- package/dist/store/actions/get.js.map +0 -1
- package/dist/store/actions/list-namespaces.d.ts.map +0 -1
- package/dist/store/actions/list-namespaces.js.map +0 -1
- package/dist/store/actions/put.d.ts.map +0 -1
- package/dist/store/actions/put.js.map +0 -1
- package/dist/store/actions/reconcile-vector-index.d.ts.map +0 -1
- package/dist/store/actions/reconcile-vector-index.js.map +0 -1
- package/dist/store/actions/search.d.ts.map +0 -1
- package/dist/store/actions/search.js.map +0 -1
- package/dist/store/internal/backend-search.d.ts +0 -5
- package/dist/store/internal/backend-search.d.ts.map +0 -1
- package/dist/store/internal/backend-search.js +0 -68
- package/dist/store/internal/backend-search.js.map +0 -1
- package/dist/store/internal/filter.d.ts.map +0 -1
- package/dist/store/internal/filter.js.map +0 -1
- package/dist/store/internal/index-reconcile.d.ts +0 -22
- package/dist/store/internal/index-reconcile.d.ts.map +0 -1
- package/dist/store/internal/index-reconcile.js +0 -105
- package/dist/store/internal/index-reconcile.js.map +0 -1
- package/dist/store/internal/index-sync.d.ts +0 -11
- package/dist/store/internal/index-sync.d.ts.map +0 -1
- package/dist/store/internal/index-sync.js +0 -26
- package/dist/store/internal/index-sync.js.map +0 -1
- package/dist/store/internal/item-mapper.d.ts +0 -25
- package/dist/store/internal/item-mapper.d.ts.map +0 -1
- package/dist/store/internal/item-mapper.js +0 -53
- package/dist/store/internal/item-mapper.js.map +0 -1
- package/dist/store/internal/keys.d.ts +0 -18
- package/dist/store/internal/keys.d.ts.map +0 -1
- package/dist/store/internal/keys.js +0 -42
- package/dist/store/internal/keys.js.map +0 -1
- package/dist/store/internal/namespace-match.d.ts +0 -12
- package/dist/store/internal/namespace-match.d.ts.map +0 -1
- package/dist/store/internal/namespace-match.js +0 -41
- package/dist/store/internal/namespace-match.js.map +0 -1
- package/dist/store/internal/overwrite-swap.d.ts +0 -33
- package/dist/store/internal/overwrite-swap.d.ts.map +0 -1
- package/dist/store/internal/overwrite-swap.js +0 -62
- package/dist/store/internal/overwrite-swap.js.map +0 -1
- package/dist/store/internal/persist.d.ts +0 -27
- package/dist/store/internal/persist.d.ts.map +0 -1
- package/dist/store/internal/persist.js +0 -59
- package/dist/store/internal/persist.js.map +0 -1
- package/dist/store/internal/query.d.ts +0 -6
- package/dist/store/internal/query.d.ts.map +0 -1
- package/dist/store/internal/query.js +0 -32
- package/dist/store/internal/query.js.map +0 -1
- package/dist/store/internal/ranker.d.ts +0 -13
- package/dist/store/internal/ranker.d.ts.map +0 -1
- package/dist/store/internal/ranker.js +0 -31
- package/dist/store/internal/ranker.js.map +0 -1
- package/dist/store/internal/read-existing.d.ts +0 -19
- package/dist/store/internal/read-existing.d.ts.map +0 -1
- package/dist/store/internal/read-existing.js +0 -29
- package/dist/store/internal/read-existing.js.map +0 -1
- package/dist/store/internal/score-direction.d.ts +0 -32
- package/dist/store/internal/score-direction.d.ts.map +0 -1
- package/dist/store/internal/score-direction.js +0 -39
- package/dist/store/internal/score-direction.js.map +0 -1
- package/dist/store/internal/search-filter.d.ts +0 -4
- package/dist/store/internal/search-filter.d.ts.map +0 -1
- package/dist/store/internal/search-filter.js +0 -11
- package/dist/store/internal/search-filter.js.map +0 -1
- package/dist/store/internal/semantic-search.d.ts.map +0 -1
- package/dist/store/internal/semantic-search.js.map +0 -1
- package/dist/store/internal/setup.d.ts.map +0 -1
- package/dist/store/internal/setup.js.map +0 -1
- package/dist/store/internal/validation.d.ts +0 -13
- package/dist/store/internal/validation.d.ts.map +0 -1
- package/dist/store/internal/validation.js +0 -35
- package/dist/store/internal/validation.js.map +0 -1
- package/dist/store/internal/write-verify.d.ts +0 -37
- package/dist/store/internal/write-verify.d.ts.map +0 -1
- package/dist/store/internal/write-verify.js +0 -68
- package/dist/store/internal/write-verify.js.map +0 -1
- package/dist/store/store.d.ts.map +0 -1
- package/dist/store/store.js.map +0 -1
- package/dist/store/types.d.ts.map +0 -1
- package/dist/store/types.js.map +0 -1
- package/dist/store/vector-backend.d.ts.map +0 -1
- package/dist/store/vector-backend.js.map +0 -1
package/dist/factory/factory.js
CHANGED
|
@@ -1,47 +1,266 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hides how several adapters share one client and one set of defaults.
|
|
4
|
+
*
|
|
5
|
+
* A caller states its defaults once; which adapter gets the base client
|
|
6
|
+
* choice and which its own, how the DynamoDB region reaches a shared `s3`
|
|
7
|
+
* config, and who destroys a client the factory built rather than was handed
|
|
8
|
+
* are decided here. Teardown is total — one adapter failing to release cannot
|
|
9
|
+
* strand the others — and a `createAll` that fails partway releases what it
|
|
10
|
+
* had built before its own error propagates.
|
|
11
|
+
*/
|
|
2
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
13
|
exports.DynamoDBFactory = void 0;
|
|
4
14
|
const saver_1 = require("../checkpointer/saver");
|
|
5
15
|
const chat_message_history_1 = require("../history/chat-message-history");
|
|
16
|
+
const client_types_1 = require("../shared/codec/s3/client-types");
|
|
6
17
|
const client_1 = require("../shared/dynamodb/client");
|
|
18
|
+
const base_error_1 = require("../shared/errors/base-error");
|
|
19
|
+
const logger_1 = require("../shared/logging/logger");
|
|
20
|
+
const truncate_1 = require("../shared/logging/truncate");
|
|
21
|
+
const collaborators_1 = require("../shared/validation/collaborators");
|
|
22
|
+
const option_shape_1 = require("../shared/validation/option-shape");
|
|
23
|
+
const options_1 = require("../shared/validation/options");
|
|
7
24
|
const store_1 = require("../store/store");
|
|
25
|
+
/** The factory's own options, checked against {@link FactoryBaseOptions} at compile time. */
|
|
26
|
+
const FACTORY_BASE_KEYS = (0, option_shape_1.allKeysOf)({
|
|
27
|
+
client: 'client',
|
|
28
|
+
clientConfig: 'clientConfig',
|
|
29
|
+
createClient: 'createClient',
|
|
30
|
+
logger: 'logger',
|
|
31
|
+
ttl: 'ttl',
|
|
32
|
+
compression: 'compression',
|
|
33
|
+
s3: 's3',
|
|
34
|
+
retry: 'retry',
|
|
35
|
+
});
|
|
36
|
+
/** The sections `createAll` builds, checked against {@link CreateAllOptions} at compile time. */
|
|
37
|
+
const CREATE_ALL_KEYS = (0, option_shape_1.allKeysOf)({
|
|
38
|
+
saver: 'saver',
|
|
39
|
+
store: 'store',
|
|
40
|
+
history: 'history',
|
|
41
|
+
});
|
|
42
|
+
/**
|
|
43
|
+
* Release one resource without letting its failure strand the others.
|
|
44
|
+
*
|
|
45
|
+
* Teardown runs in two places that must both finish: the caller's `destroy`,
|
|
46
|
+
* where a throw halfway through would leak every resource after it, and the
|
|
47
|
+
* rollback of a failed {@link DynamoDBFactory.createAll}, where it would also
|
|
48
|
+
* replace the constructor error the caller needs with its own.
|
|
49
|
+
*/
|
|
50
|
+
function release(logger, close) {
|
|
51
|
+
try {
|
|
52
|
+
close();
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
// The name, never the message — and bounded, because a name is a string an
|
|
56
|
+
// adapter's own `close` threw and nothing this package ran checked its
|
|
57
|
+
// length. `message` is bounded at `redactedMessage`, and relaying the two
|
|
58
|
+
// halves of "what the failure was" under different rules is the split that
|
|
59
|
+
// rule exists to remove.
|
|
60
|
+
logger.warn('factory.destroy: an adapter did not release its resources', {
|
|
61
|
+
reason: (0, truncate_1.truncateForLog)((0, base_error_1.failureLabel)(error)),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function overridesClient(options) {
|
|
66
|
+
return (options.client !== undefined ||
|
|
67
|
+
options.clientConfig !== undefined ||
|
|
68
|
+
options.createClient !== undefined);
|
|
69
|
+
}
|
|
8
70
|
/**
|
|
9
|
-
* Convenience constructors for the adapters.
|
|
10
|
-
*
|
|
11
|
-
*
|
|
71
|
+
* Convenience constructors for the adapters.
|
|
72
|
+
*
|
|
73
|
+
* Individual `create*` methods each build their own client; {@link createAll}
|
|
74
|
+
* builds one shared client used by all three and returns a combined `destroy`
|
|
75
|
+
* that tears everything down once. Each adapter validates the options it ends
|
|
76
|
+
* up with, so the same mistake is caught the same way however the adapter was
|
|
77
|
+
* built. The factory checks only what it reads itself before an adapter can:
|
|
78
|
+
* its own base options, client choice and logger, the keys of `createAll`'s
|
|
79
|
+
* argument, and that each adapter's options are an object at all.
|
|
80
|
+
*
|
|
81
|
+
* Every `create*` argument and every `createAll` section is one adapter's
|
|
82
|
+
* options, and a mistake in one is named the way that adapter's constructor
|
|
83
|
+
* names it: `options` for a value that is not an object, and the adapter's own
|
|
84
|
+
* field names (`options.<key>`, `tableName`, …) for anything inside one.
|
|
12
85
|
*/
|
|
13
86
|
class DynamoDBFactory {
|
|
14
87
|
base;
|
|
88
|
+
/**
|
|
89
|
+
* Accepts: `base` — the defaults every adapter inherits. Checked here, where
|
|
90
|
+
* the caller wrote them: an unknown key would otherwise be ignored, and a
|
|
91
|
+
* `client` next to a `clientConfig` was refused by the first `create*` call
|
|
92
|
+
* and accepted by `createAll`, for the same base. So is the shape of
|
|
93
|
+
* `clientConfig`: `createAll` hands its adapters the client built from it,
|
|
94
|
+
* never the config, so no adapter would see a malformed one. And so is
|
|
95
|
+
* `logger`, which `createAll` logs its own teardown failures through: a
|
|
96
|
+
* malformed one threw from inside that teardown, replacing a failed build's
|
|
97
|
+
* own error with a bare `TypeError`.
|
|
98
|
+
*
|
|
99
|
+
* Returns: a factory holding those defaults. It opens nothing: every client
|
|
100
|
+
* is built by the `create*` call that needs one.
|
|
101
|
+
*
|
|
102
|
+
* Throws: `VALIDATION` naming `options.<key>`, `client`, `clientConfig`,
|
|
103
|
+
* `logger` or `logger.<method>`. Everything else each adapter validates for
|
|
104
|
+
* itself, since a per-adapter value may still replace it.
|
|
105
|
+
*/
|
|
15
106
|
constructor(base = {}) {
|
|
16
107
|
this.base = base;
|
|
108
|
+
(0, option_shape_1.assertShape)(base, FACTORY_BASE_KEYS, 'options');
|
|
109
|
+
(0, options_1.assertClientChoice)(base);
|
|
110
|
+
if (base.logger !== undefined)
|
|
111
|
+
(0, collaborators_1.assertMembers)(base.logger, collaborators_1.LOGGER_MEMBERS, 'logger');
|
|
112
|
+
}
|
|
113
|
+
/** The base options every adapter inherits regardless of which client it uses. */
|
|
114
|
+
sharedDefaults() {
|
|
115
|
+
const { logger, ttl, compression, s3, retry } = this.base;
|
|
116
|
+
return { logger, ttl, compression, s3, retry };
|
|
17
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* The base `s3` config with the region the DynamoDB side was configured with
|
|
120
|
+
* already filled in.
|
|
121
|
+
*
|
|
122
|
+
* An adapter normally reads that region off its own `clientConfig`
|
|
123
|
+
* (`offloaderConfigFor`), but the adapters {@link createAll} builds are given
|
|
124
|
+
* the one shared `client` instead — and a `clientConfig` beside a `client` is
|
|
125
|
+
* refused, because for the DynamoDB client it would be silently ignored. So
|
|
126
|
+
* the region has to be carried here, on the config that still needs it:
|
|
127
|
+
* without it, a bucket reachable only through that region fails with an
|
|
128
|
+
* opaque `PermanentRedirect` on the first offload, unlike the identical
|
|
129
|
+
* configuration through `createStore`, which resolves its own region
|
|
130
|
+
* directly.
|
|
131
|
+
*
|
|
132
|
+
* A base `s3`, or its `clientConfig`, that is not an object is handed on
|
|
133
|
+
* unchanged, for each adapter to refuse by its own name: reading `.region`
|
|
134
|
+
* off a `null` one would throw here instead, and writing a region into a
|
|
135
|
+
* malformed `clientConfig` would turn it into an object shape an adapter
|
|
136
|
+
* then accepts instead of refusing.
|
|
137
|
+
*/
|
|
138
|
+
sharedS3() {
|
|
139
|
+
const s3 = this.base.s3;
|
|
140
|
+
if (!(0, option_shape_1.isObjectShape)(s3))
|
|
141
|
+
return s3;
|
|
142
|
+
if (s3.clientConfig !== undefined && !(0, option_shape_1.isObjectShape)(s3.clientConfig))
|
|
143
|
+
return s3;
|
|
144
|
+
const region = (0, client_types_1.s3ClientOptions)(s3.clientConfig).region ?? this.base.clientConfig?.region;
|
|
145
|
+
if (region === undefined)
|
|
146
|
+
return s3;
|
|
147
|
+
return { ...s3, clientConfig: { ...s3.clientConfig, region } };
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Per-adapter options replace the factory's client choice as a unit: a
|
|
151
|
+
* `client` handed to `createSaver` also displaces the base `clientConfig`
|
|
152
|
+
* and `createClient`, because carrying those along is exactly the ambiguous
|
|
153
|
+
* combination the adapters' option validation rejects. The shared
|
|
154
|
+
* `ttl`/`compression`/`s3`/`retry` defaults stay either way.
|
|
155
|
+
*/
|
|
156
|
+
defaultsFor(options) {
|
|
157
|
+
return overridesClient(options) ? this.sharedDefaults() : this.base;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* A saver on its own client.
|
|
161
|
+
*
|
|
162
|
+
* Accepts: `options` — the saver's own, laid over the factory's defaults. A
|
|
163
|
+
* per-adapter value wins; see {@link defaultsFor} for how a client choice
|
|
164
|
+
* replaces the factory's as a unit.
|
|
165
|
+
*
|
|
166
|
+
* Returns: the saver, which owns the client it built and releases it on
|
|
167
|
+
* `destroy()`.
|
|
168
|
+
*
|
|
169
|
+
* Throws: `VALIDATION` for any invalid option, naming it as the saver's
|
|
170
|
+
* constructor does — `options` for a value that is not an object, checked
|
|
171
|
+
* before the defaults are laid under it: reading `.client` off a `null`
|
|
172
|
+
* value would throw here, and spreading a string would iterate its
|
|
173
|
+
* characters instead of refusing it.
|
|
174
|
+
*/
|
|
18
175
|
createSaver(options) {
|
|
19
|
-
|
|
176
|
+
(0, option_shape_1.assertObjectShape)(options, 'options');
|
|
177
|
+
return new saver_1.DynamoDBSaver({ ...this.defaultsFor(options), ...options });
|
|
20
178
|
}
|
|
179
|
+
/**
|
|
180
|
+
* A store on its own client.
|
|
181
|
+
*
|
|
182
|
+
* Accepts: as {@link createSaver}, for the store's options.
|
|
183
|
+
*
|
|
184
|
+
* Returns: the store.
|
|
185
|
+
*
|
|
186
|
+
* Throws: as {@link createSaver}.
|
|
187
|
+
*/
|
|
21
188
|
createStore(options) {
|
|
22
|
-
|
|
189
|
+
(0, option_shape_1.assertObjectShape)(options, 'options');
|
|
190
|
+
return new store_1.DynamoDBStore({ ...this.defaultsFor(options), ...options });
|
|
23
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* A chat history on its own client.
|
|
194
|
+
*
|
|
195
|
+
* Accepts: as {@link createSaver}, for the history's options.
|
|
196
|
+
*
|
|
197
|
+
* Returns: the chat history.
|
|
198
|
+
*
|
|
199
|
+
* Throws: as {@link createSaver}.
|
|
200
|
+
*/
|
|
24
201
|
createChatMessageHistory(options) {
|
|
25
|
-
|
|
202
|
+
(0, option_shape_1.assertObjectShape)(options, 'options');
|
|
203
|
+
return new chat_message_history_1.DynamoDBChatMessageHistory({ ...this.defaultsFor(options), ...options });
|
|
26
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* Build the adapters whose sections are given, all on one shared client.
|
|
207
|
+
*
|
|
208
|
+
* Accepts: `options` — a section per adapter, laid over the factory's shared
|
|
209
|
+
* defaults; omitting one, or giving it as `undefined`, skips that adapter,
|
|
210
|
+
* and `{}` builds none. A key that is not a section name is refused rather
|
|
211
|
+
* than ignored, so a misspelt one cannot silently build nothing. Each section
|
|
212
|
+
* is that adapter's options, so one that is not an object, `null` included,
|
|
213
|
+
* is refused before any client is built.
|
|
214
|
+
*
|
|
215
|
+
* Returns: the adapters, typed by the sections asked for, and one `destroy`
|
|
216
|
+
* that releases all of them and the shared client. A client the factory was
|
|
217
|
+
* given rather than built is never destroyed.
|
|
218
|
+
*
|
|
219
|
+
* Throws: `VALIDATION` naming `options` for an argument or a section that
|
|
220
|
+
* is not an object, or `options.<key>` for a key that is not a section name.
|
|
221
|
+
* Whatever an adapter's constructor throws — after the adapters already
|
|
222
|
+
* built and the freshly created client have been released, so a failed call
|
|
223
|
+
* leaks nothing and the constructor's own error is the one that propagates.
|
|
224
|
+
*
|
|
225
|
+
* Guarantees: one DynamoDB client for all three adapters, and one S3 client
|
|
226
|
+
* per adapter, each under its own key prefix in the shared bucket. Teardown
|
|
227
|
+
* is total: one adapter failing to release its resources cannot strand the
|
|
228
|
+
* others.
|
|
229
|
+
*/
|
|
27
230
|
createAll(options) {
|
|
231
|
+
(0, option_shape_1.assertShape)(options, CREATE_ALL_KEYS, 'options');
|
|
232
|
+
const { saver, store, history } = options;
|
|
233
|
+
for (const section of [saver, store, history]) {
|
|
234
|
+
if (section !== undefined)
|
|
235
|
+
(0, option_shape_1.assertObjectShape)(section, 'options');
|
|
236
|
+
}
|
|
237
|
+
const logger = (0, logger_1.resolveLogger)(this.base.logger);
|
|
28
238
|
const resolved = (0, client_1.resolveDynamoDBClient)(this.base);
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
history.destroy();
|
|
41
|
-
resolved.ddbClient?.destroy();
|
|
42
|
-
},
|
|
239
|
+
const shared = { ...this.sharedDefaults(), s3: this.sharedS3(), client: resolved.client };
|
|
240
|
+
const built = [];
|
|
241
|
+
// Record an adapter the moment it exists, so a later failure can still tear it down.
|
|
242
|
+
const track = (adapter) => {
|
|
243
|
+
built.push(adapter);
|
|
244
|
+
return adapter;
|
|
245
|
+
};
|
|
246
|
+
const destroy = () => {
|
|
247
|
+
for (const adapter of built)
|
|
248
|
+
release(logger, () => adapter.destroy());
|
|
249
|
+
release(logger, () => resolved.ddbClient?.destroy());
|
|
43
250
|
};
|
|
251
|
+
try {
|
|
252
|
+
const adapters = {
|
|
253
|
+
saver: saver && track(new saver_1.DynamoDBSaver({ ...shared, ...saver })),
|
|
254
|
+
store: store && track(new store_1.DynamoDBStore({ ...shared, ...store })),
|
|
255
|
+
history: history && track(new chat_message_history_1.DynamoDBChatMessageHistory({ ...shared, ...history })),
|
|
256
|
+
destroy,
|
|
257
|
+
};
|
|
258
|
+
return adapters;
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
destroy();
|
|
262
|
+
throw error;
|
|
263
|
+
}
|
|
44
264
|
}
|
|
45
265
|
}
|
|
46
266
|
exports.DynamoDBFactory = DynamoDBFactory;
|
|
47
|
-
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides how the factory's options are typed by what a caller asks for.
|
|
3
|
+
*
|
|
4
|
+
* The defaults every adapter inherits, the per-adapter sections of `createAll`
|
|
5
|
+
* without the shared client's fields, and a result whose adapters are typed
|
|
6
|
+
* `undefined` for each section left out are declared here, so a caller's
|
|
7
|
+
* compiler knows which adapters it got without a runtime check.
|
|
8
|
+
*/
|
|
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';
|
|
22
|
+
/**
|
|
23
|
+
* Defaults applied to every adapter the factory builds: the client (or how to
|
|
24
|
+
* build one) and the cross-cutting options a team usually wants identical
|
|
25
|
+
* across its checkpointer, store and history. A per-adapter option wins.
|
|
26
|
+
*/
|
|
27
|
+
export interface FactoryBaseOptions {
|
|
28
|
+
/**
|
|
29
|
+
* Reused as-is by every adapter. Construct it with `maxAttempts: 1`, or the
|
|
30
|
+
* SDK's own retries stack inside the library's retry budget (each adapter
|
|
31
|
+
* logs a `warn` at construction when they would).
|
|
32
|
+
*/
|
|
33
|
+
client?: DynamoDBDocumentLike;
|
|
34
|
+
/**
|
|
35
|
+
* The config the client is built from, and read for its `region` when an `s3`
|
|
36
|
+
* config names none — including by `createAll`, whose adapters are handed the
|
|
37
|
+
* shared client rather than this config.
|
|
38
|
+
*/
|
|
39
|
+
clientConfig?: DynamoDBClientConfig;
|
|
40
|
+
logger?: Logger;
|
|
41
|
+
ttl?: TtlOption;
|
|
42
|
+
compression?: CompressionConfig;
|
|
43
|
+
s3?: S3OffloadConfig;
|
|
44
|
+
retry?: RetryPolicy;
|
|
45
|
+
}
|
|
46
|
+
/** An adapter's own options inside {@link CreateAllOptions}: everything but the shared client. */
|
|
47
|
+
export type AdapterSection<Options> = Omit<Options, 'client' | 'clientConfig' | 'createClient'>;
|
|
48
|
+
/**
|
|
49
|
+
* Per-adapter options for `DynamoDBFactory.createAll`; omit a section to skip
|
|
50
|
+
* that adapter, and pass none to build none. A key that is not one of these
|
|
51
|
+
* three is refused: it would otherwise skip every adapter silently. So is a
|
|
52
|
+
* section that is not an object, `null` included, naming `options` as that
|
|
53
|
+
* adapter's constructor would.
|
|
54
|
+
*/
|
|
55
|
+
export interface CreateAllOptions {
|
|
56
|
+
saver?: AdapterSection<DynamoDBSaverOptions>;
|
|
57
|
+
store?: AdapterSection<DynamoDBStoreOptions>;
|
|
58
|
+
history?: AdapterSection<DynamoDBChatMessageHistoryOptions>;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The adapters `createAll` built, typed by the sections it was given: an
|
|
62
|
+
* omitted section is `undefined`. The default names the all-three result.
|
|
63
|
+
*/
|
|
64
|
+
export interface CreatedAdapters<O extends CreateAllOptions = Required<CreateAllOptions>> {
|
|
65
|
+
saver: O extends {
|
|
66
|
+
saver: object;
|
|
67
|
+
} ? DynamoDBSaver : undefined;
|
|
68
|
+
store: O extends {
|
|
69
|
+
store: object;
|
|
70
|
+
} ? DynamoDBStore : undefined;
|
|
71
|
+
history: O extends {
|
|
72
|
+
history: object;
|
|
73
|
+
} ? DynamoDBChatMessageHistory : undefined;
|
|
74
|
+
/** Tear down every built adapter and the shared client, once. */
|
|
75
|
+
destroy: () => void;
|
|
76
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hides how the factory's options are typed by what a caller asks for.
|
|
4
|
+
*
|
|
5
|
+
* The defaults every adapter inherits, the per-adapter sections of `createAll`
|
|
6
|
+
* without the shared client's fields, and a result whose adapters are typed
|
|
7
|
+
* `undefined` for each section left out are declared here, so a caller's
|
|
8
|
+
* compiler knows which adapters it got without a runtime check.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -1,4 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Hides what an append settles before its first write.
|
|
3
|
+
*
|
|
4
|
+
* The session id and every message are parsed before anything is sent, so a
|
|
5
|
+
* message that could never be read back fails with its index and nothing
|
|
6
|
+
* stored; an empty list ends here, the no-op a turn without a message is; and
|
|
7
|
+
* with a ttl configured, the session's creation-anchored expiry is read first
|
|
8
|
+
* so every message of the append shares it. How the rows and the count are
|
|
9
|
+
* then written together is `appendMessages`' decision, not this module's.
|
|
10
|
+
*/
|
|
11
|
+
import type { BaseMessage } from '@langchain/core/messages';
|
|
2
12
|
import type { HistoryContext } from '../internal/setup';
|
|
3
13
|
/**
|
|
4
14
|
* Append messages as one item per message. Each chunk writes its message Puts
|
|
@@ -7,10 +17,27 @@ import type { HistoryContext } from '../internal/setup';
|
|
|
7
17
|
* TTL (resolved by read, set in the transaction via `if_not_exists`) gives every
|
|
8
18
|
* item one shared expiry. Batches larger than the 100-item / 4 MB transaction
|
|
9
19
|
* limits are split into chunks and applied with caller-observed atomicity: if a
|
|
10
|
-
* later chunk fails, the committed chunks are rolled back (see {@link
|
|
20
|
+
* later chunk fails, the committed chunks are rolled back (see {@link appendMessages}).
|
|
11
21
|
*
|
|
12
22
|
* Per item the 400 KB DynamoDB limit still applies; enable S3 offloading so
|
|
13
23
|
* large payloads become small descriptors and stay well under the limits.
|
|
24
|
+
*
|
|
25
|
+
* Accepts: `messages` — LangChain messages; an empty list writes nothing and is
|
|
26
|
+
* not an error, which is what a turn that produced no message means.
|
|
27
|
+
* `signal` — aborts between chunks.
|
|
28
|
+
*
|
|
29
|
+
* Returns: nothing, and only once every message has landed.
|
|
30
|
+
*
|
|
31
|
+
* Throws: `VALIDATION` naming `sessionId` or `messages` (with the offending
|
|
32
|
+
* index) before any write; `S3_OFFLOAD_FAILED`; whatever the transaction
|
|
33
|
+
* throws, after the rollback; `COMPENSATION_FAILED` when that
|
|
34
|
+
* rollback could not finish.
|
|
35
|
+
*
|
|
36
|
+
* Guarantees: a caller observes all messages or none. `messageCount` always
|
|
37
|
+
* agrees with the messages that landed, because each chunk writes both in one
|
|
38
|
+
* transaction. Every message of the append shares one creation-anchored expiry,
|
|
39
|
+
* so a conversation expires whole rather than losing its oldest turns first. No
|
|
40
|
+
* S3 object is left behind by a failure, at any stage — including a failure
|
|
41
|
+
* partway through encoding, before the saga exists.
|
|
14
42
|
*/
|
|
15
|
-
export declare function addMessages(context: HistoryContext, sessionId: string, messages: BaseMessage[]): Promise<void>;
|
|
16
|
-
//# sourceMappingURL=add-messages.d.ts.map
|
|
43
|
+
export declare function addMessages(context: HistoryContext, sessionId: string, messages: BaseMessage[], signal?: AbortSignal): Promise<void>;
|
|
@@ -1,50 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.addMessages = addMessages;
|
|
4
|
-
const messages_1 = require("@langchain/core/messages");
|
|
5
|
-
const clock_1 = require("../../shared/clock");
|
|
6
|
-
const descriptor_keys_1 = require("../../shared/codec/descriptor-keys");
|
|
7
|
-
const orphans_1 = require("../../shared/codec/s3/orphans");
|
|
8
|
-
const ttl_1 = require("../../shared/validation/ttl");
|
|
9
|
-
const append_saga_1 = require("../internal/append-saga");
|
|
10
|
-
const item_mapper_1 = require("../internal/item-mapper");
|
|
11
|
-
const message_chunker_1 = require("../internal/message-chunker");
|
|
12
|
-
const title_generator_1 = require("../internal/title-generator");
|
|
13
|
-
const ttl_anchor_1 = require("../internal/ttl-anchor");
|
|
14
|
-
const validation_1 = require("../internal/validation");
|
|
15
|
-
/** Message Puts per append transaction: the 100-item limit, less the metadata Update. */
|
|
16
|
-
const MAX_MESSAGES_PER_TRANSACTION = 99;
|
|
17
2
|
/**
|
|
18
|
-
*
|
|
19
|
-
* `TransactWriteItems` ceiling so the conservative per-item estimate (see
|
|
20
|
-
* `ITEM_OVERHEAD_BYTES`) cannot push a chunk over the real limit at commit time.
|
|
21
|
-
*/
|
|
22
|
-
const MAX_TRANSACTION_BYTES = 3_500_000;
|
|
23
|
-
/**
|
|
24
|
-
* Encode every message, cleaning up after itself if one fails partway.
|
|
3
|
+
* Hides what an append settles before its first write.
|
|
25
4
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
5
|
+
* The session id and every message are parsed before anything is sent, so a
|
|
6
|
+
* message that could never be read back fails with its index and nothing
|
|
7
|
+
* stored; an empty list ends here, the no-op a turn without a message is; and
|
|
8
|
+
* with a ttl configured, the session's creation-anchored expiry is read first
|
|
9
|
+
* so every message of the append shares it. How the rows and the count are
|
|
10
|
+
* then written together is `appendMessages`' decision, not this module's.
|
|
32
11
|
*/
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
if (context.offloader) {
|
|
42
|
-
await (0, orphans_1.cleanUpS3Orphans)(context.offloader, (0, descriptor_keys_1.collectS3Keys)(items.map((item) => item.message)), 'history.addMessages.encode', context.logger);
|
|
43
|
-
}
|
|
44
|
-
throw error;
|
|
45
|
-
}
|
|
46
|
-
return items;
|
|
47
|
-
}
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.addMessages = addMessages;
|
|
14
|
+
const ttl_1 = require("../../shared/validation/ttl");
|
|
15
|
+
const append_1 = require("../internal/append");
|
|
16
|
+
const parse_1 = require("../internal/parse");
|
|
17
|
+
const session_1 = require("../internal/session");
|
|
48
18
|
/**
|
|
49
19
|
* Append messages as one item per message. Each chunk writes its message Puts
|
|
50
20
|
* and the session-metadata count `ADD` in a single `TransactWriteItems`, so
|
|
@@ -52,26 +22,36 @@ async function buildItems(context, sessionId, stored, ttlTimestamp) {
|
|
|
52
22
|
* TTL (resolved by read, set in the transaction via `if_not_exists`) gives every
|
|
53
23
|
* item one shared expiry. Batches larger than the 100-item / 4 MB transaction
|
|
54
24
|
* limits are split into chunks and applied with caller-observed atomicity: if a
|
|
55
|
-
* later chunk fails, the committed chunks are rolled back (see {@link
|
|
25
|
+
* later chunk fails, the committed chunks are rolled back (see {@link appendMessages}).
|
|
56
26
|
*
|
|
57
27
|
* Per item the 400 KB DynamoDB limit still applies; enable S3 offloading so
|
|
58
28
|
* large payloads become small descriptors and stay well under the limits.
|
|
29
|
+
*
|
|
30
|
+
* Accepts: `messages` — LangChain messages; an empty list writes nothing and is
|
|
31
|
+
* not an error, which is what a turn that produced no message means.
|
|
32
|
+
* `signal` — aborts between chunks.
|
|
33
|
+
*
|
|
34
|
+
* Returns: nothing, and only once every message has landed.
|
|
35
|
+
*
|
|
36
|
+
* Throws: `VALIDATION` naming `sessionId` or `messages` (with the offending
|
|
37
|
+
* index) before any write; `S3_OFFLOAD_FAILED`; whatever the transaction
|
|
38
|
+
* throws, after the rollback; `COMPENSATION_FAILED` when that
|
|
39
|
+
* rollback could not finish.
|
|
40
|
+
*
|
|
41
|
+
* Guarantees: a caller observes all messages or none. `messageCount` always
|
|
42
|
+
* agrees with the messages that landed, because each chunk writes both in one
|
|
43
|
+
* transaction. Every message of the append shares one creation-anchored expiry,
|
|
44
|
+
* so a conversation expires whole rather than losing its oldest turns first. No
|
|
45
|
+
* S3 object is left behind by a failure, at any stage — including a failure
|
|
46
|
+
* partway through encoding, before the saga exists.
|
|
59
47
|
*/
|
|
60
|
-
async function addMessages(context, sessionId, messages) {
|
|
61
|
-
(0,
|
|
62
|
-
|
|
48
|
+
async function addMessages(context, sessionId, messages, signal) {
|
|
49
|
+
const session = (0, parse_1.parseSessionId)(sessionId);
|
|
50
|
+
const stored = (0, parse_1.parseMessages)(messages);
|
|
51
|
+
if (stored.length === 0)
|
|
63
52
|
return;
|
|
64
|
-
const stored = (0, messages_1.mapChatMessagesToStoredMessages)(messages);
|
|
65
53
|
const anchor = context.ttl
|
|
66
|
-
? await (0,
|
|
54
|
+
? await (0, session_1.resolveTtlAnchor)(context, session, (0, ttl_1.calculateTtlTimestamp)(context.ttl), signal)
|
|
67
55
|
: undefined;
|
|
68
|
-
|
|
69
|
-
const chunks = (0, message_chunker_1.chunkBySize)(items, MAX_MESSAGES_PER_TRANSACTION, MAX_TRANSACTION_BYTES);
|
|
70
|
-
await (0, append_saga_1.appendChunks)(context, sessionId, chunks, {
|
|
71
|
-
now: (0, clock_1.nowIso)(),
|
|
72
|
-
title: (0, title_generator_1.deriveTitle)(stored),
|
|
73
|
-
ttlTimestamp: anchor?.ttlTimestamp,
|
|
74
|
-
forceTtlRefresh: anchor?.refresh,
|
|
75
|
-
});
|
|
56
|
+
await (0, append_1.appendMessages)(context, { sessionId: session, messages: stored, anchor, signal });
|
|
76
57
|
}
|
|
77
|
-
//# sourceMappingURL=add-messages.js.map
|
|
@@ -1,9 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides which rows a clear may delete.
|
|
3
|
+
*
|
|
4
|
+
* A clear removes only what the partition read observed and this adapter
|
|
5
|
+
* wrote, each row pinned to the write id it was read with, and reaches a
|
|
6
|
+
* message's offloaded payload through the attribute that holds it. A caller
|
|
7
|
+
* asks for a session to go and never decides that a foreign row, or one a
|
|
8
|
+
* concurrent append rewrote, is left in place and reported rather than
|
|
9
|
+
* deleted; the paging, the per-row deletes and the S3 cleanup are the shared
|
|
10
|
+
* partition delete's.
|
|
11
|
+
*/
|
|
1
12
|
import type { HistoryContext } from '../internal/setup';
|
|
2
13
|
/**
|
|
3
|
-
* Delete
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
14
|
+
* Delete exactly the message rows and the session row of one session that the
|
|
15
|
+
* partition read observed.
|
|
16
|
+
*
|
|
17
|
+
* Accepts: `sessionId` — validated. `options.signal` — aborts between pages.
|
|
18
|
+
*
|
|
19
|
+
* Returns: nothing. Clearing a session that does not exist is not an error;
|
|
20
|
+
* there is simply nothing in the partition.
|
|
21
|
+
*
|
|
22
|
+
* Throws: `VALIDATION` naming `sessionId`; `BATCH_WRITE_INCOMPLETE`
|
|
23
|
+
* when a row's delete fails, carrying what did succeed; `ABORTED` when the
|
|
24
|
+
* signal fires, whether between pages or during a row's delete — a cancel is
|
|
25
|
+
* reported as a cancel and never as an incomplete delete, and no further row
|
|
26
|
+
* is issued after it. A refused
|
|
27
|
+
* row raises nothing and is not one of those failures: the pin turned it away
|
|
28
|
+
* because an append landed after the read, and deleting the session row then
|
|
29
|
+
* would remove the `messageCount`, the `updatedAt` and the recency-index entry
|
|
30
|
+
* of a session that is still alive — leaving it is the safe answer. The error's
|
|
31
|
+
* two counts are **rows**, not batches — rows deleted and rows attempted,
|
|
32
|
+
* summed across every flush of the pass, with `details.succeededCount` repeating
|
|
33
|
+
* the first and `details.failedChunks` holding each failing row's own error — and its
|
|
34
|
+
* message says so, because a pass that sends one request per row is not a batch
|
|
35
|
+
* that did not drain. Refused rows are in neither count; each is reported at
|
|
36
|
+
* `warn` with its sort key and counted as skipped. The remedy is to re-run once
|
|
37
|
+
* the session is quiescent, and `reconcileMessageCount` repairs the count the
|
|
38
|
+
* surviving session row is left over-counting in the meantime.
|
|
39
|
+
*
|
|
40
|
+
* Guarantees: a row this adapter did not write is left in place and logged, so
|
|
41
|
+
* a shared-table partition is never collaterally wiped. Offloaded objects are
|
|
42
|
+
* deleted best-effort after their rows, and only objects under this session's
|
|
43
|
+
* own path. A row rewritten after the read is left in place and reported: an
|
|
44
|
+
* append landing during the call moves the session row's own write id, so that
|
|
45
|
+
* row survives while the messages the read saw are still deleted, and its
|
|
46
|
+
* `messageCount` then over-counts until `reconcileMessageCount` repairs it —
|
|
47
|
+
* which is the right outcome, the session being alive. One pass over a
|
|
48
|
+
* quiescent session: a message appended while this runs may survive it.
|
|
7
49
|
*/
|
|
8
|
-
export declare function clearSession(context: HistoryContext, sessionId: string
|
|
9
|
-
|
|
50
|
+
export declare function clearSession(context: HistoryContext, sessionId: string, options?: {
|
|
51
|
+
signal?: AbortSignal;
|
|
52
|
+
}): Promise<void>;
|