@farukada/aws-langgraph-dynamodb-ts 1.0.0-rc.1 → 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 +1820 -290
- package/dist/cjs/backfill/backfill.d.ts +171 -0
- package/dist/cjs/backfill/backfill.js +177 -0
- package/dist/cjs/checkpointer/actions/delete-thread.d.ts +50 -0
- package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
- package/dist/cjs/checkpointer/actions/get-tuple.d.ts +36 -0
- package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
- package/dist/cjs/checkpointer/actions/list.d.ts +55 -0
- package/dist/cjs/checkpointer/actions/list.js +70 -0
- package/dist/cjs/checkpointer/actions/put-writes.d.ts +49 -0
- package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
- package/dist/cjs/checkpointer/actions/put.d.ts +95 -0
- package/dist/cjs/checkpointer/actions/put.js +79 -0
- package/dist/cjs/checkpointer/internal/delta-history.d.ts +124 -0
- package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
- package/dist/cjs/checkpointer/internal/listing.d.ts +149 -0
- package/dist/cjs/checkpointer/internal/listing.js +104 -0
- package/dist/cjs/checkpointer/internal/parse.d.ts +298 -0
- package/dist/cjs/checkpointer/internal/parse.js +184 -0
- package/dist/cjs/checkpointer/internal/pending-writes.d.ts +314 -0
- package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
- package/dist/cjs/checkpointer/internal/read.d.ts +135 -0
- package/dist/cjs/checkpointer/internal/read.js +132 -0
- package/dist/cjs/checkpointer/internal/rows.d.ts +644 -0
- package/dist/cjs/checkpointer/internal/rows.js +356 -0
- package/dist/cjs/checkpointer/internal/setup.d.ts +47 -0
- package/dist/cjs/checkpointer/internal/setup.js +25 -0
- package/dist/cjs/checkpointer/saver.d.ts +306 -0
- package/dist/cjs/checkpointer/saver.js +56 -0
- package/dist/cjs/checkpointer/types.d.ts +51 -0
- package/dist/cjs/factory/factory.d.ts +154 -0
- package/dist/cjs/factory/factory.js +137 -0
- package/dist/{factory → cjs/factory}/types.d.ts +33 -14
- package/dist/cjs/history/actions/add-messages.d.ts +51 -0
- package/dist/cjs/history/actions/add-messages.js +17 -0
- package/dist/cjs/history/actions/clear.d.ts +52 -0
- package/dist/cjs/history/actions/clear.js +29 -0
- package/dist/cjs/history/actions/get-messages.d.ts +60 -0
- package/dist/cjs/history/actions/get-messages.js +58 -0
- package/dist/cjs/history/actions/list-sessions.d.ts +55 -0
- package/dist/cjs/history/actions/list-sessions.js +67 -0
- package/dist/cjs/history/actions/reconcile-count.d.ts +49 -0
- package/dist/cjs/history/actions/reconcile-count.js +8 -0
- package/dist/cjs/history/chat-message-history.d.ts +267 -0
- package/dist/cjs/history/chat-message-history.js +61 -0
- package/dist/cjs/history/internal/append.d.ts +244 -0
- package/dist/cjs/history/internal/append.js +267 -0
- package/dist/cjs/history/internal/message-read.d.ts +84 -0
- package/dist/cjs/history/internal/message-read.js +93 -0
- package/dist/cjs/history/internal/parse.d.ts +153 -0
- package/dist/cjs/history/internal/parse.js +113 -0
- package/dist/cjs/history/internal/rows.d.ts +196 -0
- package/dist/cjs/history/internal/rows.js +96 -0
- package/dist/cjs/history/internal/session.d.ts +350 -0
- package/dist/cjs/history/internal/session.js +296 -0
- package/dist/cjs/history/internal/setup.d.ts +64 -0
- package/dist/cjs/history/internal/setup.js +60 -0
- package/dist/cjs/history/session-adapter.d.ts +112 -0
- package/dist/cjs/history/session-adapter.js +38 -0
- package/dist/cjs/history/types.d.ts +102 -0
- package/dist/cjs/index.d.ts +53 -0
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/shared/adapter.d.ts +146 -0
- package/dist/cjs/shared/adapter.js +70 -0
- package/dist/cjs/shared/clock.d.ts +52 -0
- package/dist/cjs/shared/clock.js +14 -0
- package/dist/cjs/shared/codec/codec.d.ts +336 -0
- package/dist/cjs/shared/codec/codec.js +162 -0
- package/dist/cjs/shared/codec/compression.d.ts +66 -0
- package/dist/cjs/shared/codec/compression.js +45 -0
- package/dist/cjs/shared/codec/json-serde.d.ts +80 -0
- package/dist/cjs/shared/codec/json-serde.js +58 -0
- package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +22 -2
- package/dist/{shared → cjs/shared}/codec/s3/client-types.js +0 -1
- package/dist/cjs/shared/codec/s3/client.d.ts +63 -0
- package/dist/cjs/shared/codec/s3/client.js +78 -0
- package/dist/cjs/shared/codec/s3/config.d.ts +260 -0
- package/dist/cjs/shared/codec/s3/config.js +92 -0
- package/dist/cjs/shared/codec/s3/lifecycle.d.ts +220 -0
- package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
- package/dist/cjs/shared/codec/s3/offloader.d.ts +428 -0
- package/dist/cjs/shared/codec/s3/offloader.js +289 -0
- package/dist/cjs/shared/concurrency.d.ts +43 -0
- package/dist/{shared → cjs/shared}/concurrency.js +10 -9
- package/dist/cjs/shared/dynamodb/abort.d.ts +47 -0
- package/dist/cjs/shared/dynamodb/abort.js +16 -0
- package/dist/cjs/shared/dynamodb/batch-write.d.ts +86 -0
- package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
- package/dist/cjs/shared/dynamodb/cancellation.d.ts +124 -0
- package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
- package/dist/cjs/shared/dynamodb/client.d.ts +177 -0
- package/dist/{shared → cjs/shared}/dynamodb/client.js +12 -14
- package/dist/cjs/shared/dynamodb/idempotent-write.d.ts +596 -0
- package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
- package/dist/cjs/shared/dynamodb/paginate.d.ts +111 -0
- package/dist/cjs/shared/dynamodb/paginate.js +90 -0
- package/dist/cjs/shared/dynamodb/partition-delete.d.ts +204 -0
- package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
- package/dist/cjs/shared/dynamodb/recency-index.d.ts +243 -0
- package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
- package/dist/cjs/shared/dynamodb/retry.d.ts +317 -0
- 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/cjs/shared/dynamodb/table-schema.d.ts +199 -0
- package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
- package/dist/cjs/shared/errors/base-error.d.ts +231 -0
- package/dist/cjs/shared/errors/base-error.js +73 -0
- package/dist/cjs/shared/errors/boundary.d.ts +86 -0
- 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/cjs/shared/errors/error-code.d.ts +95 -0
- package/dist/{shared → cjs/shared}/errors/error-code.js +12 -2
- package/dist/cjs/shared/errors/errors.d.ts +233 -0
- package/dist/cjs/shared/errors/errors.js +123 -0
- package/dist/cjs/shared/logging/logger.d.ts +80 -0
- package/dist/cjs/shared/logging/logger.js +30 -0
- package/dist/cjs/shared/logging/redaction.d.ts +123 -0
- package/dist/cjs/shared/logging/redaction.js +145 -0
- package/dist/cjs/shared/logging/secret-patterns.d.ts +227 -0
- package/dist/cjs/shared/logging/secret-patterns.js +93 -0
- package/dist/cjs/shared/logging/truncate.d.ts +197 -0
- package/dist/cjs/shared/logging/truncate.js +31 -0
- package/dist/cjs/shared/options.d.ts +100 -0
- package/dist/cjs/shared/ulid.d.ts +80 -0
- package/dist/{shared → cjs/shared}/ulid.js +7 -21
- package/dist/cjs/shared/validation/collaborators.d.ts +160 -0
- package/dist/cjs/shared/validation/collaborators.js +79 -0
- package/dist/cjs/shared/validation/option-shape.d.ts +91 -0
- package/dist/cjs/shared/validation/option-shape.js +31 -0
- package/dist/cjs/shared/validation/options.d.ts +145 -0
- package/dist/cjs/shared/validation/options.js +166 -0
- package/dist/cjs/shared/validation/primitives.d.ts +292 -0
- package/dist/cjs/shared/validation/primitives.js +114 -0
- package/dist/cjs/shared/validation/ttl.d.ts +94 -0
- package/dist/cjs/shared/validation/ttl.js +52 -0
- package/dist/cjs/store/actions/list-namespaces.d.ts +79 -0
- package/dist/cjs/store/actions/list-namespaces.js +92 -0
- package/dist/cjs/store/actions/put.d.ts +43 -0
- package/dist/cjs/store/actions/put.js +49 -0
- package/dist/cjs/store/actions/reconcile-vector-index.d.ts +38 -0
- package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
- package/dist/cjs/store/actions/search.d.ts +38 -0
- 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/cjs/store/internal/filter.d.ts +43 -0
- 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/cjs/store/internal/item-write.d.ts +270 -0
- package/dist/cjs/store/internal/item-write.js +181 -0
- package/dist/cjs/store/internal/parse.d.ts +230 -0
- package/dist/cjs/store/internal/parse.js +180 -0
- package/dist/cjs/store/internal/rows.d.ts +359 -0
- package/dist/cjs/store/internal/rows.js +166 -0
- package/dist/cjs/store/internal/semantic-search.d.ts +168 -0
- package/dist/{store/internal/text-path.js → cjs/store/internal/semantic-search.js} +92 -28
- package/dist/cjs/store/internal/setup.d.ts +96 -0
- package/dist/cjs/store/internal/setup.js +103 -0
- package/dist/cjs/store/internal/table-search.d.ts +100 -0
- package/dist/cjs/store/internal/table-search.js +123 -0
- package/dist/cjs/store/internal/vector-index.d.ts +258 -0
- package/dist/cjs/store/internal/vector-index.js +269 -0
- package/dist/cjs/store/store.d.ts +329 -0
- package/dist/cjs/store/store.js +97 -0
- package/dist/cjs/store/types.d.ts +111 -0
- package/dist/cjs/store/vector-backend.d.ts +104 -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/esm/checkpointer/actions/delete-thread.d.ts +50 -0
- package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
- package/dist/esm/checkpointer/actions/get-tuple.d.ts +36 -0
- 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/esm/checkpointer/actions/put-writes.d.ts +49 -0
- 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/esm/checkpointer/internal/listing.d.ts +149 -0
- 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/esm/checkpointer/saver.d.ts +306 -0
- 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/esm/history/actions/add-messages.d.ts +51 -0
- package/dist/esm/history/actions/add-messages.js +14 -0
- package/dist/esm/history/actions/clear.d.ts +52 -0
- 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/esm/history/actions/reconcile-count.d.ts +49 -0
- package/dist/esm/history/actions/reconcile-count.js +5 -0
- package/dist/esm/history/chat-message-history.d.ts +267 -0
- 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/esm/history/internal/rows.d.ts +196 -0
- 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/esm/history/session-adapter.d.ts +112 -0
- 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/esm/shared/clock.d.ts +52 -0
- 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/esm/shared/codec/s3/config.d.ts +260 -0
- 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/esm/shared/concurrency.d.ts +43 -0
- package/dist/esm/shared/concurrency.js +27 -0
- package/dist/esm/shared/dynamodb/abort.d.ts +47 -0
- 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/esm/shared/dynamodb/cancellation.d.ts +124 -0
- package/dist/esm/shared/dynamodb/cancellation.js +30 -0
- package/dist/esm/shared/dynamodb/client.d.ts +177 -0
- package/dist/esm/shared/dynamodb/client.js +35 -0
- package/dist/esm/shared/dynamodb/idempotent-write.d.ts +596 -0
- 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/esm/shared/dynamodb/table-schema.d.ts +199 -0
- 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/esm/shared/errors/error-code.d.ts +95 -0
- package/dist/esm/shared/errors/error-code.js +24 -0
- package/dist/esm/shared/errors/errors.d.ts +233 -0
- package/dist/esm/shared/errors/errors.js +110 -0
- package/dist/esm/shared/logging/logger.d.ts +80 -0
- 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/esm/shared/logging/secret-patterns.d.ts +227 -0
- package/dist/esm/shared/logging/secret-patterns.js +83 -0
- package/dist/esm/shared/logging/truncate.d.ts +197 -0
- 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/esm/shared/ulid.d.ts +80 -0
- package/dist/esm/shared/ulid.js +77 -0
- package/dist/esm/shared/validation/collaborators.d.ts +160 -0
- package/dist/esm/shared/validation/collaborators.js +70 -0
- package/dist/esm/shared/validation/option-shape.d.ts +91 -0
- 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/esm/shared/validation/primitives.d.ts +292 -0
- 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/esm/store/actions/reconcile-vector-index.d.ts +38 -0
- 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/esm/store/internal/rows.d.ts +359 -0
- 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/esm/store/store.d.ts +329 -0
- 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 +68 -46
- package/dist/checkpointer/actions/delete-thread.d.ts +0 -10
- package/dist/checkpointer/actions/delete-thread.js +0 -38
- package/dist/checkpointer/actions/get-tuple.d.ts +0 -11
- package/dist/checkpointer/actions/get-tuple.js +0 -25
- package/dist/checkpointer/actions/list.d.ts +0 -20
- package/dist/checkpointer/actions/list.js +0 -113
- package/dist/checkpointer/actions/put-writes.d.ts +0 -15
- package/dist/checkpointer/actions/put-writes.js +0 -62
- package/dist/checkpointer/actions/put.d.ts +0 -17
- package/dist/checkpointer/actions/put.js +0 -73
- package/dist/checkpointer/internal/assemble.d.ts +0 -17
- package/dist/checkpointer/internal/assemble.js +0 -38
- package/dist/checkpointer/internal/checkpoint-write-verify.d.ts +0 -24
- package/dist/checkpointer/internal/checkpoint-write-verify.js +0 -67
- package/dist/checkpointer/internal/configurable.d.ts +0 -12
- package/dist/checkpointer/internal/configurable.js +0 -24
- package/dist/checkpointer/internal/fetch.d.ts +0 -19
- package/dist/checkpointer/internal/fetch.js +0 -88
- package/dist/checkpointer/internal/filter-match.d.ts +0 -13
- package/dist/checkpointer/internal/filter-match.js +0 -15
- package/dist/checkpointer/internal/item-reader.d.ts +0 -66
- package/dist/checkpointer/internal/item-reader.js +0 -113
- package/dist/checkpointer/internal/item-writer.d.ts +0 -35
- package/dist/checkpointer/internal/item-writer.js +0 -107
- package/dist/checkpointer/internal/keys.d.ts +0 -41
- package/dist/checkpointer/internal/keys.js +0 -117
- package/dist/checkpointer/internal/list-scope.d.ts +0 -61
- package/dist/checkpointer/internal/list-scope.js +0 -108
- package/dist/checkpointer/internal/pending-sends.d.ts +0 -13
- package/dist/checkpointer/internal/pending-sends.js +0 -29
- package/dist/checkpointer/internal/query.d.ts +0 -21
- package/dist/checkpointer/internal/query.js +0 -42
- package/dist/checkpointer/internal/regular-write.d.ts +0 -28
- package/dist/checkpointer/internal/regular-write.js +0 -66
- package/dist/checkpointer/internal/setup.d.ts +0 -33
- package/dist/checkpointer/internal/setup.js +0 -38
- package/dist/checkpointer/internal/special-write-cas.d.ts +0 -29
- package/dist/checkpointer/internal/special-write-cas.js +0 -104
- package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -23
- package/dist/checkpointer/internal/special-write-cleanup.js +0 -50
- package/dist/checkpointer/internal/special-write-verify.d.ts +0 -53
- package/dist/checkpointer/internal/special-write-verify.js +0 -80
- package/dist/checkpointer/internal/stored-channels.d.ts +0 -31
- package/dist/checkpointer/internal/stored-channels.js +0 -70
- package/dist/checkpointer/internal/validation.d.ts +0 -18
- package/dist/checkpointer/internal/validation.js +0 -40
- package/dist/checkpointer/internal/write-guard.d.ts +0 -20
- package/dist/checkpointer/internal/write-guard.js +0 -48
- package/dist/checkpointer/internal/write-index.d.ts +0 -36
- package/dist/checkpointer/internal/write-index.js +0 -41
- package/dist/checkpointer/saver.d.ts +0 -70
- package/dist/checkpointer/saver.js +0 -105
- package/dist/checkpointer/types.d.ts +0 -58
- package/dist/factory/factory.d.ts +0 -40
- package/dist/factory/factory.js +0 -87
- package/dist/history/actions/add-messages.d.ts +0 -15
- package/dist/history/actions/add-messages.js +0 -77
- package/dist/history/actions/clear.d.ts +0 -10
- package/dist/history/actions/clear.js +0 -34
- package/dist/history/actions/get-messages.d.ts +0 -17
- package/dist/history/actions/get-messages.js +0 -79
- package/dist/history/actions/list-sessions.d.ts +0 -13
- package/dist/history/actions/list-sessions.js +0 -53
- package/dist/history/actions/reconcile-count.d.ts +0 -12
- package/dist/history/actions/reconcile-count.js +0 -64
- package/dist/history/chat-message-history.d.ts +0 -73
- package/dist/history/chat-message-history.js +0 -111
- package/dist/history/internal/append-saga.d.ts +0 -25
- package/dist/history/internal/append-saga.js +0 -79
- package/dist/history/internal/compensation.d.ts +0 -25
- package/dist/history/internal/compensation.js +0 -92
- package/dist/history/internal/item-mapper.d.ts +0 -9
- package/dist/history/internal/item-mapper.js +0 -27
- package/dist/history/internal/keys.d.ts +0 -16
- package/dist/history/internal/keys.js +0 -48
- package/dist/history/internal/message-chunker.d.ts +0 -13
- package/dist/history/internal/message-chunker.js +0 -67
- package/dist/history/internal/message-transaction.d.ts +0 -25
- package/dist/history/internal/message-transaction.js +0 -61
- package/dist/history/internal/message-window.d.ts +0 -17
- package/dist/history/internal/message-window.js +0 -49
- package/dist/history/internal/query.d.ts +0 -23
- package/dist/history/internal/query.js +0 -39
- package/dist/history/internal/session-count.d.ts +0 -47
- package/dist/history/internal/session-count.js +0 -115
- package/dist/history/internal/session-title.d.ts +0 -19
- package/dist/history/internal/session-title.js +0 -43
- package/dist/history/internal/session-update.d.ts +0 -27
- package/dist/history/internal/session-update.js +0 -69
- package/dist/history/internal/setup.d.ts +0 -31
- package/dist/history/internal/setup.js +0 -43
- package/dist/history/internal/title-generator.d.ts +0 -12
- package/dist/history/internal/title-generator.js +0 -41
- package/dist/history/internal/ttl-anchor.d.ts +0 -24
- package/dist/history/internal/ttl-anchor.js +0 -38
- package/dist/history/internal/validation.d.ts +0 -25
- package/dist/history/internal/validation.js +0 -53
- package/dist/history/session-adapter.d.ts +0 -29
- package/dist/history/session-adapter.js +0 -35
- package/dist/history/types.d.ts +0 -69
- package/dist/index.d.ts +0 -29
- package/dist/index.js +0 -32
- package/dist/shared/clock.d.ts +0 -8
- package/dist/shared/clock.js +0 -16
- package/dist/shared/codec/codec.d.ts +0 -53
- package/dist/shared/codec/codec.js +0 -66
- package/dist/shared/codec/compression.d.ts +0 -24
- package/dist/shared/codec/compression.js +0 -48
- package/dist/shared/codec/descriptor-keys.d.ts +0 -12
- package/dist/shared/codec/descriptor-keys.js +0 -14
- package/dist/shared/codec/encode.d.ts +0 -13
- package/dist/shared/codec/encode.js +0 -43
- package/dist/shared/codec/json-serde.d.ts +0 -7
- package/dist/shared/codec/json-serde.js +0 -17
- package/dist/shared/codec/payload-loss.d.ts +0 -12
- package/dist/shared/codec/payload-loss.js +0 -38
- package/dist/shared/codec/s3/adapter-config.d.ts +0 -13
- package/dist/shared/codec/s3/adapter-config.js +0 -22
- package/dist/shared/codec/s3/bounded-body.d.ts +0 -14
- package/dist/shared/codec/s3/bounded-body.js +0 -47
- package/dist/shared/codec/s3/client.d.ts +0 -18
- package/dist/shared/codec/s3/client.js +0 -46
- package/dist/shared/codec/s3/config.d.ts +0 -51
- package/dist/shared/codec/s3/config.js +0 -58
- package/dist/shared/codec/s3/delete.d.ts +0 -7
- package/dist/shared/codec/s3/delete.js +0 -28
- package/dist/shared/codec/s3/key-scope.d.ts +0 -23
- package/dist/shared/codec/s3/key-scope.js +0 -44
- package/dist/shared/codec/s3/lifecycle.d.ts +0 -14
- package/dist/shared/codec/s3/lifecycle.js +0 -63
- package/dist/shared/codec/s3/offloader.d.ts +0 -44
- package/dist/shared/codec/s3/offloader.js +0 -118
- package/dist/shared/codec/s3/orphans.d.ts +0 -23
- package/dist/shared/codec/s3/orphans.js +0 -71
- package/dist/shared/codec/s3/read-write.d.ts +0 -18
- package/dist/shared/codec/s3/read-write.js +0 -51
- package/dist/shared/codec/s3/retry.d.ts +0 -5
- package/dist/shared/codec/s3/retry.js +0 -22
- package/dist/shared/concurrency.d.ts +0 -6
- package/dist/shared/constants.d.ts +0 -112
- package/dist/shared/constants.js +0 -115
- package/dist/shared/dynamodb/abort.d.ts +0 -9
- package/dist/shared/dynamodb/abort.js +0 -27
- package/dist/shared/dynamodb/backoff.d.ts +0 -15
- package/dist/shared/dynamodb/backoff.js +0 -48
- package/dist/shared/dynamodb/batch-write.d.ts +0 -22
- package/dist/shared/dynamodb/batch-write.js +0 -53
- package/dist/shared/dynamodb/cancellation.d.ts +0 -6
- package/dist/shared/dynamodb/cancellation.js +0 -7
- package/dist/shared/dynamodb/client.d.ts +0 -28
- package/dist/shared/dynamodb/conditional-put.d.ts +0 -67
- package/dist/shared/dynamodb/conditional-put.js +0 -76
- package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -21
- package/dist/shared/dynamodb/drain-unprocessed.js +0 -43
- package/dist/shared/dynamodb/expiry.d.ts +0 -16
- package/dist/shared/dynamodb/expiry.js +0 -29
- package/dist/shared/dynamodb/paginate-core.d.ts +0 -24
- package/dist/shared/dynamodb/paginate-core.js +0 -82
- package/dist/shared/dynamodb/paginate.d.ts +0 -14
- package/dist/shared/dynamodb/paginate.js +0 -19
- package/dist/shared/dynamodb/partition-delete.d.ts +0 -39
- package/dist/shared/dynamodb/partition-delete.js +0 -71
- package/dist/shared/dynamodb/retry-classifier.d.ts +0 -17
- package/dist/shared/dynamodb/retry-classifier.js +0 -118
- package/dist/shared/dynamodb/retry-policy.d.ts +0 -26
- package/dist/shared/dynamodb/retry-policy.js +0 -22
- package/dist/shared/dynamodb/retry.d.ts +0 -31
- package/dist/shared/dynamodb/retry.js +0 -57
- package/dist/shared/dynamodb/scan.d.ts +0 -14
- package/dist/shared/dynamodb/scan.js +0 -19
- package/dist/shared/dynamodb/types.d.ts +0 -23
- package/dist/shared/errors/base-error.d.ts +0 -30
- package/dist/shared/errors/base-error.js +0 -27
- package/dist/shared/errors/boundary.d.ts +0 -18
- package/dist/shared/errors/boundary.js +0 -46
- package/dist/shared/errors/error-code.d.ts +0 -13
- package/dist/shared/errors/errors.d.ts +0 -68
- package/dist/shared/errors/errors.js +0 -114
- package/dist/shared/errors/upstream-error.d.ts +0 -16
- package/dist/shared/errors/upstream-error.js +0 -27
- package/dist/shared/errors/wrap-error.d.ts +0 -7
- package/dist/shared/errors/wrap-error.js +0 -15
- package/dist/shared/logging/logger.d.ts +0 -18
- package/dist/shared/logging/logger.js +0 -15
- package/dist/shared/logging/redaction-walk.d.ts +0 -23
- package/dist/shared/logging/redaction-walk.js +0 -112
- package/dist/shared/logging/redaction.d.ts +0 -39
- package/dist/shared/logging/redaction.js +0 -75
- package/dist/shared/logging/secret-patterns.d.ts +0 -92
- package/dist/shared/logging/secret-patterns.js +0 -133
- package/dist/shared/options.d.ts +0 -37
- package/dist/shared/ulid.d.ts +0 -23
- package/dist/shared/validation/options.d.ts +0 -8
- package/dist/shared/validation/options.js +0 -90
- package/dist/shared/validation/primitives.d.ts +0 -29
- package/dist/shared/validation/primitives.js +0 -82
- package/dist/shared/validation/ttl.d.ts +0 -28
- package/dist/shared/validation/ttl.js +0 -52
- package/dist/store/actions/get.d.ts +0 -13
- package/dist/store/actions/get.js +0 -73
- package/dist/store/actions/list-namespaces.d.ts +0 -8
- package/dist/store/actions/list-namespaces.js +0 -59
- package/dist/store/actions/put.d.ts +0 -10
- package/dist/store/actions/put.js +0 -96
- package/dist/store/actions/reconcile-vector-index.d.ts +0 -18
- package/dist/store/actions/reconcile-vector-index.js +0 -26
- package/dist/store/actions/search.d.ts +0 -9
- package/dist/store/actions/search.js +0 -34
- package/dist/store/internal/backend-search.d.ts +0 -4
- package/dist/store/internal/backend-search.js +0 -74
- package/dist/store/internal/batch-plan.d.ts +0 -11
- package/dist/store/internal/batch-plan.js +0 -52
- package/dist/store/internal/candidates.d.ts +0 -23
- package/dist/store/internal/candidates.js +0 -94
- package/dist/store/internal/filter.d.ts +0 -9
- package/dist/store/internal/filter.js +0 -85
- package/dist/store/internal/index-reconcile.d.ts +0 -21
- package/dist/store/internal/index-reconcile.js +0 -118
- package/dist/store/internal/index-sync.d.ts +0 -10
- package/dist/store/internal/index-sync.js +0 -25
- package/dist/store/internal/item-mapper.d.ts +0 -27
- package/dist/store/internal/item-mapper.js +0 -61
- package/dist/store/internal/keys.d.ts +0 -17
- package/dist/store/internal/keys.js +0 -41
- package/dist/store/internal/namespace-match.d.ts +0 -11
- package/dist/store/internal/namespace-match.js +0 -40
- package/dist/store/internal/option-validation.d.ts +0 -13
- package/dist/store/internal/option-validation.js +0 -77
- package/dist/store/internal/overwrite-swap.d.ts +0 -32
- package/dist/store/internal/overwrite-swap.js +0 -68
- package/dist/store/internal/persist.d.ts +0 -28
- package/dist/store/internal/persist.js +0 -64
- package/dist/store/internal/query.d.ts +0 -11
- package/dist/store/internal/query.js +0 -48
- package/dist/store/internal/ranker.d.ts +0 -18
- package/dist/store/internal/ranker.js +0 -39
- package/dist/store/internal/read-existing.d.ts +0 -23
- package/dist/store/internal/read-existing.js +0 -41
- package/dist/store/internal/score-direction.d.ts +0 -31
- package/dist/store/internal/score-direction.js +0 -38
- package/dist/store/internal/search-filter.d.ts +0 -3
- package/dist/store/internal/search-filter.js +0 -10
- package/dist/store/internal/semantic-search.d.ts +0 -34
- package/dist/store/internal/semantic-search.js +0 -87
- package/dist/store/internal/setup.d.ts +0 -36
- package/dist/store/internal/setup.js +0 -40
- package/dist/store/internal/text-path.d.ts +0 -17
- package/dist/store/internal/validation.d.ts +0 -18
- package/dist/store/internal/validation.js +0 -51
- package/dist/store/internal/write-verify.d.ts +0 -42
- package/dist/store/internal/write-verify.js +0 -71
- package/dist/store/store.d.ts +0 -61
- package/dist/store/store.js +0 -107
- package/dist/store/types.d.ts +0 -50
- package/dist/store/types.js +0 -2
- package/dist/store/vector-backend.d.ts +0 -43
- package/dist/store/vector-backend.js +0 -2
- /package/dist/{checkpointer → cjs/checkpointer}/types.js +0 -0
- /package/dist/{factory → cjs/factory}/types.js +0 -0
- /package/dist/{history → cjs/history}/types.js +0 -0
- /package/dist/{shared → cjs/shared}/options.js +0 -0
- /package/dist/{shared/dynamodb → cjs/store}/types.js +0 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { nowIso } from '../../shared/clock.js';
|
|
2
|
+
import { PayloadLocation, collectS3Keys, } from '../../shared/codec/codec.js';
|
|
3
|
+
import { cleanUpS3Orphans } from '../../shared/codec/s3/offloader.js';
|
|
4
|
+
import { abortErrorFrom, isAbortError } from '../../shared/dynamodb/abort.js';
|
|
5
|
+
import { batchWriteAll } from '../../shared/dynamodb/batch-write.js';
|
|
6
|
+
import { conditionFailedAt, conditionalCheckFailure } from '../../shared/dynamodb/cancellation.js';
|
|
7
|
+
import { readRow, settledVerdict, transactIdempotently, verdictFor, } from '../../shared/dynamodb/idempotent-write.js';
|
|
8
|
+
import { SORT_KEY_ATTRIBUTE, rowKeyOf } from '../../shared/dynamodb/table-schema.js';
|
|
9
|
+
import { failureLabel, hasErrorCode, toError, } from '../../shared/errors/base-error.js';
|
|
10
|
+
import { refusedByService } from '../../shared/errors/classify.js';
|
|
11
|
+
import { ErrorCode } from '../../shared/errors/error-code.js';
|
|
12
|
+
import { compensationFailedError, retryBudgetMayStillLand, unsettledAppendError, } from '../../shared/errors/errors.js';
|
|
13
|
+
import { absorbLoggerFailure } from '../../shared/logging/logger.js';
|
|
14
|
+
import { truncateForLog } from '../../shared/logging/truncate.js';
|
|
15
|
+
import { buildMessageRow } from './rows.js';
|
|
16
|
+
import { buildSessionUpdate, deriveTitle, revertSessionCount, revertSessionCreation, } from './session.js';
|
|
17
|
+
import { MESSAGE_APPEND_RETRY_MAX_ATTEMPTS } from './setup.js';
|
|
18
|
+
const MAX_MESSAGES_PER_TRANSACTION = 99;
|
|
19
|
+
const MAX_TRANSACTION_BYTES = 3_500_000;
|
|
20
|
+
function keyOfFailedUpload(error) {
|
|
21
|
+
if (!hasErrorCode(error, ErrorCode.S3_OFFLOAD_FAILED))
|
|
22
|
+
return [];
|
|
23
|
+
const { operation, key } = error.context;
|
|
24
|
+
return operation === 'upload' && typeof key === 'string' ? [key] : [];
|
|
25
|
+
}
|
|
26
|
+
async function buildMessageRows(context, request) {
|
|
27
|
+
const { sessionId, signal } = request;
|
|
28
|
+
const ttlTimestamp = request.anchor?.ttlTimestamp;
|
|
29
|
+
const messageIds = request.messages.map(() => context.ulid());
|
|
30
|
+
const items = [];
|
|
31
|
+
try {
|
|
32
|
+
for (const [index, message] of request.messages.entries()) {
|
|
33
|
+
items.push(await buildMessageRow(context, { sessionId, messageId: messageIds[index], message, ttlTimestamp }, signal));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
if (context.offloader) {
|
|
38
|
+
await cleanUpS3Orphans(context.offloader, {
|
|
39
|
+
keys: [
|
|
40
|
+
...collectS3Keys(items.map((item) => item.message)),
|
|
41
|
+
...keyOfFailedUpload(error),
|
|
42
|
+
],
|
|
43
|
+
operation: 'history.addMessages.encode',
|
|
44
|
+
logger: context.logger,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
return items;
|
|
50
|
+
}
|
|
51
|
+
export async function appendMessages(context, request) {
|
|
52
|
+
const items = await buildMessageRows(context, request);
|
|
53
|
+
const chunks = chunkBySize(items, MAX_MESSAGES_PER_TRANSACTION, MAX_TRANSACTION_BYTES);
|
|
54
|
+
await appendChunks(context, {
|
|
55
|
+
sessionId: request.sessionId,
|
|
56
|
+
chunks,
|
|
57
|
+
fields: {
|
|
58
|
+
now: nowIso(),
|
|
59
|
+
title: deriveTitle(request.messages),
|
|
60
|
+
ttlTimestamp: request.anchor?.ttlTimestamp,
|
|
61
|
+
forceTtlRefresh: request.anchor?.refresh,
|
|
62
|
+
restart: request.anchor?.expiredAnchor,
|
|
63
|
+
},
|
|
64
|
+
signal: request.signal,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function reportStep(context, report) {
|
|
68
|
+
absorbLoggerFailure(() => report(context.logger));
|
|
69
|
+
}
|
|
70
|
+
async function cleanBatchS3(context, chunks) {
|
|
71
|
+
if (!context.offloader)
|
|
72
|
+
return;
|
|
73
|
+
const descriptors = chunks.flat().map((item) => item.message);
|
|
74
|
+
await cleanUpS3Orphans(context.offloader, {
|
|
75
|
+
keys: collectS3Keys(descriptors),
|
|
76
|
+
operation: 'history.addMessages',
|
|
77
|
+
logger: context.logger,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
async function rollbackCommitted(context, append, committed) {
|
|
81
|
+
const { sessionId } = append;
|
|
82
|
+
const { now, title } = append.fields;
|
|
83
|
+
const keys = committed.flatMap((chunk) => chunk.keys);
|
|
84
|
+
const total = committed.reduce((sum, chunk) => sum + chunk.count, 0);
|
|
85
|
+
if (keys.length === 0) {
|
|
86
|
+
await revertSessionCreation(context, sessionId, { total, createdAt: now, title });
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
await batchWriteAll(context.client, context.tableName, keys.map((Key) => ({ DeleteRequest: { Key } })), { retry: context.retry });
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
const deleted = error.details
|
|
94
|
+
.succeededCount;
|
|
95
|
+
await revertSessionCount(context, sessionId, deleted, now);
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
await revertSessionCreation(context, sessionId, { total, createdAt: now, title });
|
|
99
|
+
}
|
|
100
|
+
export async function compensate(context, append, failure) {
|
|
101
|
+
const { sessionId, chunks } = append;
|
|
102
|
+
const { committed, trigger, uncertain, unsettledBecause } = failure;
|
|
103
|
+
if (committed.length > 0) {
|
|
104
|
+
reportStep(context, (logger) => logger.warn('history.addMessages compensating committed chunks after a chunk failed', {
|
|
105
|
+
sessionId,
|
|
106
|
+
committedChunks: committed.length,
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
const firstDead = committed.length + (uncertain ? 1 : 0);
|
|
110
|
+
await cleanBatchS3(context, chunks.slice(firstDead));
|
|
111
|
+
try {
|
|
112
|
+
await rollbackCommitted(context, append, committed);
|
|
113
|
+
}
|
|
114
|
+
catch (rollbackError) {
|
|
115
|
+
reportStep(context, (logger) => logger.error('history.addMessages rollback failed; messageCount may have drifted', {
|
|
116
|
+
sessionId,
|
|
117
|
+
committedChunks: committed.length,
|
|
118
|
+
}));
|
|
119
|
+
throw compensationFailedError(trigger, toError(rollbackError));
|
|
120
|
+
}
|
|
121
|
+
await cleanBatchS3(context, chunks.slice(0, committed.length));
|
|
122
|
+
if (!uncertain)
|
|
123
|
+
throw trigger;
|
|
124
|
+
reportStep(context, (logger) => logger.error('history.addMessages could not tell whether a failed chunk committed; messageCount may have drifted', {
|
|
125
|
+
sessionId,
|
|
126
|
+
committedChunks: committed.length,
|
|
127
|
+
reason: truncateForLog(failureLabel(unsettledBecause ?? trigger)),
|
|
128
|
+
}));
|
|
129
|
+
if (isAbortError(trigger))
|
|
130
|
+
throw trigger;
|
|
131
|
+
throw unsettledAppendError(trigger, unsettledBecause ?? trigger);
|
|
132
|
+
}
|
|
133
|
+
function chunkProbe(chunk) {
|
|
134
|
+
return {
|
|
135
|
+
key: rowKeyOf(chunk[0]),
|
|
136
|
+
kind: 'attribute',
|
|
137
|
+
attribute: SORT_KEY_ATTRIBUTE,
|
|
138
|
+
expected: chunk[0].SK,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
async function settleFailedChunk(context, chunk, failure) {
|
|
142
|
+
const answeredRefusal = !isAbortError(failure) && !retryBudgetMayStillLand(failure) && refusedByService(failure);
|
|
143
|
+
if (answeredRefusal)
|
|
144
|
+
return { verdict: 'not-landed' };
|
|
145
|
+
const probe = chunkProbe(chunk);
|
|
146
|
+
let row;
|
|
147
|
+
try {
|
|
148
|
+
row = await readRow(context, probe);
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
return { verdict: 'unverified', unsettledBecause: toError(error) };
|
|
152
|
+
}
|
|
153
|
+
const verdict = settledVerdict(verdictFor(probe, row), failure);
|
|
154
|
+
return verdict === 'unverified' ? { verdict, unsettledBecause: failure } : { verdict };
|
|
155
|
+
}
|
|
156
|
+
async function commitChunk(context, append, chunk, position) {
|
|
157
|
+
const fields = { ...append.fields, sessionId: append.sessionId, count: chunk.length };
|
|
158
|
+
try {
|
|
159
|
+
await writeMessageChunk(context, chunk, position === 0 ? fields : { ...fields, restart: undefined }, { signal: append.signal });
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
return toError(error);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
function asCommitted(chunk) {
|
|
167
|
+
return { keys: chunk.map((item) => rowKeyOf(item)), count: chunk.length };
|
|
168
|
+
}
|
|
169
|
+
export async function appendChunks(context, append) {
|
|
170
|
+
const committed = [];
|
|
171
|
+
for (const [position, chunk] of append.chunks.entries()) {
|
|
172
|
+
if (append.signal?.aborted) {
|
|
173
|
+
await compensate(context, append, {
|
|
174
|
+
committed,
|
|
175
|
+
trigger: abortErrorFrom(append.signal),
|
|
176
|
+
uncertain: false,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
const failure = await commitChunk(context, append, chunk, position);
|
|
180
|
+
if (!failure) {
|
|
181
|
+
committed.push(asCommitted(chunk));
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
const settled = await settleFailedChunk(context, chunk, failure);
|
|
185
|
+
if (settled.verdict === 'landed')
|
|
186
|
+
committed.push(asCommitted(chunk));
|
|
187
|
+
if (settled.verdict === 'landed' && !isAbortError(failure))
|
|
188
|
+
continue;
|
|
189
|
+
await compensate(context, append, {
|
|
190
|
+
committed,
|
|
191
|
+
trigger: failure,
|
|
192
|
+
uncertain: settled.verdict === 'unverified',
|
|
193
|
+
unsettledBecause: settled.unsettledBecause,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
function isTtlConditionLoss(error) {
|
|
198
|
+
return conditionFailedAt(error, 0) && conditionalCheckFailure(error) !== undefined;
|
|
199
|
+
}
|
|
200
|
+
async function attempt(context, items, fields, retry) {
|
|
201
|
+
await transactIdempotently(context, [
|
|
202
|
+
buildSessionUpdate(context.tableName, fields),
|
|
203
|
+
...items.map((item) => ({ Put: { TableName: context.tableName, Item: item } })),
|
|
204
|
+
], { signal: retry.signal, rng: retry.rng, minAttempts: MESSAGE_APPEND_RETRY_MAX_ATTEMPTS });
|
|
205
|
+
}
|
|
206
|
+
export async function writeMessageChunk(context, items, fields, retry = {}) {
|
|
207
|
+
const withIndex = { ...fields, indexShards: context.indexShards, writeId: context.ulid() };
|
|
208
|
+
try {
|
|
209
|
+
await attempt(context, items, withIndex, retry);
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
const pinned = fields.forceTtlRefresh || fields.restart !== undefined;
|
|
213
|
+
if (pinned && isTtlConditionLoss(error)) {
|
|
214
|
+
await attempt(context, items, { ...withIndex, forceTtlRefresh: false, restart: undefined }, retry);
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
throw error;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
const ROW_OVERHEAD_BYTES = 256;
|
|
221
|
+
function utf8Bytes(value) {
|
|
222
|
+
return Buffer.byteLength(value, 'utf8');
|
|
223
|
+
}
|
|
224
|
+
function descriptorBytes(descriptor) {
|
|
225
|
+
const body = descriptor.location === PayloadLocation.INLINE
|
|
226
|
+
? descriptor.bytes.length
|
|
227
|
+
: utf8Bytes(descriptor.s3Key);
|
|
228
|
+
return body + utf8Bytes(descriptor.serdeType);
|
|
229
|
+
}
|
|
230
|
+
export function estimateRowBytes(item) {
|
|
231
|
+
return (utf8Bytes(item.PK) +
|
|
232
|
+
utf8Bytes(item.SK) +
|
|
233
|
+
utf8Bytes(item.sessionId) +
|
|
234
|
+
descriptorBytes(item.message) +
|
|
235
|
+
ROW_OVERHEAD_BYTES);
|
|
236
|
+
}
|
|
237
|
+
function shouldFlush(chunk, next, limits) {
|
|
238
|
+
if (chunk.count === 0)
|
|
239
|
+
return false;
|
|
240
|
+
return chunk.count >= limits.maxItems || chunk.bytes + next > limits.maxBytes;
|
|
241
|
+
}
|
|
242
|
+
export function chunkBySize(items, maxItems, maxBytes) {
|
|
243
|
+
const chunks = [];
|
|
244
|
+
let current = [];
|
|
245
|
+
let currentBytes = 0;
|
|
246
|
+
for (const item of items) {
|
|
247
|
+
const size = estimateRowBytes(item);
|
|
248
|
+
if (shouldFlush({ count: current.length, bytes: currentBytes }, size, { maxItems, maxBytes })) {
|
|
249
|
+
chunks.push(current);
|
|
250
|
+
current = [];
|
|
251
|
+
currentBytes = 0;
|
|
252
|
+
}
|
|
253
|
+
current.push(item);
|
|
254
|
+
currentBytes += size;
|
|
255
|
+
}
|
|
256
|
+
if (current.length > 0)
|
|
257
|
+
chunks.push(current);
|
|
258
|
+
return chunks;
|
|
259
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides how a session's message key space is read.
|
|
3
|
+
*
|
|
4
|
+
* A read admits only rows this package wrote as a message of this session,
|
|
5
|
+
* refusing any other row in the key space rather than skipping it, treats an
|
|
6
|
+
* expired row as absent however long the sweep lags, walks newest-first when
|
|
7
|
+
* it wants the latest few and restores chronological order, and counts the
|
|
8
|
+
* rows the same way it reads them, so a repaired count is the number a read
|
|
9
|
+
* returns.
|
|
10
|
+
*/
|
|
11
|
+
import type { ParsedWindow, SessionId } from './parse.js';
|
|
12
|
+
import { type MessageRow } from './rows.js';
|
|
13
|
+
import type { HistoryContext } from './setup.js';
|
|
14
|
+
/**
|
|
15
|
+
* Read the live message items a window selects, in chronological order.
|
|
16
|
+
*
|
|
17
|
+
* Without `limit` the query walks the session oldest-first. With it the query
|
|
18
|
+
* walks newest-first with a matching page cap and stops as soon as `limit`
|
|
19
|
+
* live items are in hand — rows past their TTL are skipped here, so a page can
|
|
20
|
+
* come back short and the walk simply continues — and the tail is then
|
|
21
|
+
* reversed back into chronological order. `before` becomes an exclusive upper
|
|
22
|
+
* sort-key bound: the message prefix plus the ULID time characters of that
|
|
23
|
+
* instant, which every message id from that millisecond onwards sorts after.
|
|
24
|
+
*
|
|
25
|
+
* Accepts: `window.limit` — absent asks for the whole session, which is what
|
|
26
|
+
* `getMessages()` with no arguments means; otherwise at least 1, which is why
|
|
27
|
+
* no zero case is handled below. `parseMessageWindow` refuses `0` for its
|
|
28
|
+
* own reason, and that refusal is also what keeps `Limit: 0` — which DynamoDB
|
|
29
|
+
* rejects outright with a raw `ValidationException` — out of the query built
|
|
30
|
+
* here. `window.before` — already parsed as a real date. `signal` — aborts
|
|
31
|
+
* between pages.
|
|
32
|
+
*
|
|
33
|
+
* Returns: the live messages in chronological order, oldest first, whichever
|
|
34
|
+
* direction the query walked.
|
|
35
|
+
*
|
|
36
|
+
* Throws: `FORMAT_UNSUPPORTED` for a row a newer version wrote — checked before
|
|
37
|
+
* the row's ttl, so the answer does not depend on the reading machine's clock;
|
|
38
|
+
* `VALIDATION` naming `message` for a row in this session's message key
|
|
39
|
+
* space that this adapter did not write, checked before the ttl for the same
|
|
40
|
+
* reason; `ABORTED`; whatever the query throws.
|
|
41
|
+
*
|
|
42
|
+
* Guarantees: strongly consistent, so the turn just appended is visible to the
|
|
43
|
+
* very next read. An unlimited window is deliberately uncapped — silently
|
|
44
|
+
* truncating a conversation is worse than a slow read, and a caller that wants
|
|
45
|
+
* a bound passes `limit` — so past {@link LIST_SCAN_WARN_THRESHOLD} messages
|
|
46
|
+
* the read still succeeds and an operator is told the session is unusually
|
|
47
|
+
* large.
|
|
48
|
+
*/
|
|
49
|
+
export declare function readWindow(context: HistoryContext, sessionId: SessionId, window: ParsedWindow, signal?: AbortSignal): Promise<MessageRow[]>;
|
|
50
|
+
/**
|
|
51
|
+
* The number of message rows a session holds, counted the way the read path
|
|
52
|
+
* counts them.
|
|
53
|
+
*
|
|
54
|
+
* Only rows `getMessages` would return are counted: an expired message that
|
|
55
|
+
* DynamoDB's TTL sweep has not yet removed is invisible to every reader, so
|
|
56
|
+
* counting it would "repair" `messageCount` to a number nobody ever sees. The
|
|
57
|
+
* count is therefore a definition, not an implementation detail — it is what
|
|
58
|
+
* makes the repaired value agree with what the session returns. For the same
|
|
59
|
+
* reason a message a newer release wrote, and a row in the message key space
|
|
60
|
+
* that this adapter did not write, are both refused rather than counted:
|
|
61
|
+
* `getMessages` refuses them.
|
|
62
|
+
*
|
|
63
|
+
* Accepts: `sessionId` — validated by the caller. `signal` — aborts the reads.
|
|
64
|
+
*
|
|
65
|
+
* Returns: how many messages a reader would actually see right now.
|
|
66
|
+
*
|
|
67
|
+
* Throws: `FORMAT_UNSUPPORTED` for a message row a newer release wrote, checked
|
|
68
|
+
* before the row's ttl as `getMessages` checks it; `VALIDATION` naming
|
|
69
|
+
* `message` for a row in the message key space that is not one of this
|
|
70
|
+
* adapter's, which `getMessages` refuses too; whatever the query throws
|
|
71
|
+
* after retries; `ABORTED`.
|
|
72
|
+
*
|
|
73
|
+
* Guarantees: each row comes back projected to its identity, its format
|
|
74
|
+
* version and its ttl, so no message payload is transferred however large the
|
|
75
|
+
* session is — the descriptor is projected by the one nested path
|
|
76
|
+
* `message.location` that every descriptor this package has written carries,
|
|
77
|
+
* which proves the attribute is there and a map without reading the bytes it
|
|
78
|
+
* holds. Every check runs here rather than in a filter, because a filter would
|
|
79
|
+
* drop an expired row before its version could be checked. The pages are
|
|
80
|
+
* walked by the shared paginator with both of its caps lifted: a partial count
|
|
81
|
+
* is not a repair, it is a new and wrong number, so the count either completes
|
|
82
|
+
* or fails.
|
|
83
|
+
*/
|
|
84
|
+
export declare function countLiveMessages(context: HistoryContext, sessionId: SessionId, signal?: AbortSignal): Promise<number>;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { nowSeconds } from '../../shared/clock.js';
|
|
2
|
+
import { LIST_SCAN_WARN_THRESHOLD, paginateQuery } from '../../shared/dynamodb/paginate.js';
|
|
3
|
+
import { retryFor } from '../../shared/dynamodb/retry.js';
|
|
4
|
+
import { isExpiredRow, assertReadableRow } from '../../shared/dynamodb/table-schema.js';
|
|
5
|
+
import { validationError } from '../../shared/errors/errors.js';
|
|
6
|
+
import { truncateForLog } from '../../shared/logging/truncate.js';
|
|
7
|
+
import { ulidTimePrefix } from '../../shared/ulid.js';
|
|
8
|
+
import { messageQuery, messageSortKey, parseMessageRow } from './rows.js';
|
|
9
|
+
function parseSessionMessageRow(context, sessionId, raw) {
|
|
10
|
+
assertReadableRow(raw, 'message');
|
|
11
|
+
const item = parseMessageRow(raw);
|
|
12
|
+
if (item)
|
|
13
|
+
return item;
|
|
14
|
+
context.logger.warn('getMessages: refused a row that is not a chat message item', {
|
|
15
|
+
sessionId,
|
|
16
|
+
sortKey: truncateForLog(raw.SK),
|
|
17
|
+
});
|
|
18
|
+
throw validationError('a row in the message key space of this session is not a chat message item this package ' +
|
|
19
|
+
'wrote: its `sessionId` or `message` attribute is absent, is of the wrong type, or names ' +
|
|
20
|
+
'another session. The `warn` logged alongside this names the row', 'message');
|
|
21
|
+
}
|
|
22
|
+
export async function readWindow(context, sessionId, window, signal) {
|
|
23
|
+
const now = nowSeconds();
|
|
24
|
+
const limit = window.limit ?? Number.POSITIVE_INFINITY;
|
|
25
|
+
const items = [];
|
|
26
|
+
for await (const raw of paginateQuery({
|
|
27
|
+
retry: retryFor(context, signal),
|
|
28
|
+
signal,
|
|
29
|
+
client: context.client,
|
|
30
|
+
params: messageQuery(context.tableName, sessionId, {
|
|
31
|
+
consistent: true,
|
|
32
|
+
descending: window.limit !== undefined,
|
|
33
|
+
limit: window.limit,
|
|
34
|
+
beforeSortKey: window.before && messageSortKey(ulidTimePrefix(window.before.getTime())),
|
|
35
|
+
}),
|
|
36
|
+
maxItems: Number.POSITIVE_INFINITY,
|
|
37
|
+
maxIterations: Number.POSITIVE_INFINITY,
|
|
38
|
+
})) {
|
|
39
|
+
const item = parseSessionMessageRow(context, sessionId, raw);
|
|
40
|
+
if (isExpiredRow(item, now))
|
|
41
|
+
continue;
|
|
42
|
+
items.push(item);
|
|
43
|
+
if (items.length >= limit)
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
if (items.length >= LIST_SCAN_WARN_THRESHOLD) {
|
|
47
|
+
context.logger.warn('getMessages: a session holds very many messages; the read is complete but slow. Pass a ' +
|
|
48
|
+
'`limit` to read only the newest turns', { sessionId, messages: items.length });
|
|
49
|
+
}
|
|
50
|
+
return window.limit === undefined ? items : items.reverse();
|
|
51
|
+
}
|
|
52
|
+
function parseCountableRow(raw, sessionId) {
|
|
53
|
+
assertReadableRow(raw, 'message');
|
|
54
|
+
const item = parseMessageRow(raw);
|
|
55
|
+
if (item)
|
|
56
|
+
return item;
|
|
57
|
+
throw validationError(`session "${sessionId}" holds a row in its message key space that is not a chat message ` +
|
|
58
|
+
'item this package wrote, so its messages cannot be counted: a read of the session ' +
|
|
59
|
+
'reports the same row and names it. Remove or repair the row, then reconcile again', 'message');
|
|
60
|
+
}
|
|
61
|
+
export async function countLiveMessages(context, sessionId, signal) {
|
|
62
|
+
const now = nowSeconds();
|
|
63
|
+
const query = messageQuery(context.tableName, sessionId, { consistent: true });
|
|
64
|
+
let total = 0;
|
|
65
|
+
for await (const raw of paginateQuery({
|
|
66
|
+
retry: retryFor(context, signal),
|
|
67
|
+
signal,
|
|
68
|
+
client: context.client,
|
|
69
|
+
params: {
|
|
70
|
+
...query,
|
|
71
|
+
ProjectionExpression: '#pk, #sid, #msg.#loc, #v, #ttl',
|
|
72
|
+
ExpressionAttributeNames: {
|
|
73
|
+
...query.ExpressionAttributeNames,
|
|
74
|
+
'#sid': 'sessionId',
|
|
75
|
+
'#msg': 'message',
|
|
76
|
+
'#loc': 'location',
|
|
77
|
+
'#v': 'v',
|
|
78
|
+
'#ttl': 'ttl',
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
maxItems: Number.POSITIVE_INFINITY,
|
|
82
|
+
maxIterations: Number.POSITIVE_INFINITY,
|
|
83
|
+
})) {
|
|
84
|
+
const row = parseCountableRow(raw, sessionId);
|
|
85
|
+
if (!isExpiredRow(row, now))
|
|
86
|
+
total += 1;
|
|
87
|
+
}
|
|
88
|
+
return total;
|
|
89
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides the rules chat-history input must meet before anything reads it.
|
|
3
|
+
*
|
|
4
|
+
* A session id, an append's messages, a read window and the listing options
|
|
5
|
+
* are each parsed once into a type only this module can build (record 21), so
|
|
6
|
+
* an action that holds one never checks it again. Which messages may be
|
|
7
|
+
* stored is decided by the read side's own rebuild, so write and read agree
|
|
8
|
+
* by construction, and which instants a `before` may name follows from the
|
|
9
|
+
* range a message id can express.
|
|
10
|
+
*/
|
|
11
|
+
import { type BaseMessage, type StoredMessage } from '@langchain/core/messages';
|
|
12
|
+
import { type PageLimit } from '../../shared/validation/primitives.js';
|
|
13
|
+
import type { GetMessagesOptions, ListSessionsOptions, MessageWindow } from '../types.js';
|
|
14
|
+
declare const sessionIdBrand: unique symbol;
|
|
15
|
+
declare const storableMessagesBrand: unique symbol;
|
|
16
|
+
declare const parsedWindowBrand: unique symbol;
|
|
17
|
+
/**
|
|
18
|
+
* A session id checked as the partition key it becomes. {@link parseSessionId}
|
|
19
|
+
* is the only way to obtain one, so an internal function that asks for a
|
|
20
|
+
* `SessionId` cannot be handed one nobody checked, and does not check it again.
|
|
21
|
+
* Each of the four history actions that take one — add, clear, get and
|
|
22
|
+
* reconcile — parses it on every call, and the session adapter parses the id
|
|
23
|
+
* it is bound to when it is built. The brand is phantom: at run time it is the
|
|
24
|
+
* caller's string.
|
|
25
|
+
*/
|
|
26
|
+
export type SessionId = string & {
|
|
27
|
+
readonly [sessionIdBrand]: true;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Messages in their stored form, each one proven to rebuild on the read side.
|
|
31
|
+
* Built only by {@link parseStoredMessages}; the array is the one
|
|
32
|
+
* {@link parseMessages} made, which no caller holds.
|
|
33
|
+
*/
|
|
34
|
+
export type StorableMessages = StoredMessage[] & {
|
|
35
|
+
readonly [storableMessagesBrand]: true;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* A conversation window checked against the page rule and the range a message
|
|
39
|
+
* id can express, holding only the keys the caller gave. Built only by
|
|
40
|
+
* {@link parseMessageWindow}; its `before` is a copy, so a caller moving its own
|
|
41
|
+
* `Date` afterwards moves nothing this package reads.
|
|
42
|
+
*/
|
|
43
|
+
export type ParsedWindow = {
|
|
44
|
+
readonly limit?: PageLimit;
|
|
45
|
+
readonly before?: Date;
|
|
46
|
+
} & {
|
|
47
|
+
readonly [parsedWindowBrand]: true;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Parse a session id.
|
|
51
|
+
*
|
|
52
|
+
* Accepts: `value` — anything; a session id reaches the partition key, so it is
|
|
53
|
+
* held to every identifier rule at {@link MAX_PARTITION_ID_BYTES}.
|
|
54
|
+
*
|
|
55
|
+
* Returns: `value` as a {@link SessionId}.
|
|
56
|
+
*
|
|
57
|
+
* Throws: `VALIDATION` naming `sessionId`.
|
|
58
|
+
*/
|
|
59
|
+
export declare function parseSessionId(value: unknown): SessionId;
|
|
60
|
+
/**
|
|
61
|
+
* Parse stored messages: prove each one rebuilds on the read side.
|
|
62
|
+
*
|
|
63
|
+
* Accepts: `stored` — the stored form of one call's messages. The check *is*
|
|
64
|
+
* the read side's own rebuild (`mapStoredMessagesToChatMessages`), so write and
|
|
65
|
+
* read agree by construction rather than by two lists of types kept in step by
|
|
66
|
+
* hand.
|
|
67
|
+
*
|
|
68
|
+
* Returns: `stored`, as {@link StorableMessages}.
|
|
69
|
+
*
|
|
70
|
+
* Throws: `VALIDATION` naming `messages`, carrying the offending index and
|
|
71
|
+
* type. The type comes off the caller's own object and nothing length-checked
|
|
72
|
+
* it, so the message names it bounded by {@link truncateForLog}, and so is
|
|
73
|
+
* what LangChain says about it — that text renders the same unchecked value
|
|
74
|
+
* into itself, so bounding only the type bounds nothing. The two take
|
|
75
|
+
* different caps because they are different things: the type is an identifier,
|
|
76
|
+
* while what LangChain threw is prose, cut once by `redactedMessage` and not
|
|
77
|
+
* again here. `context` still names `messages`, which is what a caller
|
|
78
|
+
* branches on. A `RemoveMessage`, or a tool, function or generic message
|
|
79
|
+
* missing its required field, is refused here instead of being persisted and
|
|
80
|
+
* then skipped or thrown by `getMessages`. A hole in a sparse array is refused
|
|
81
|
+
* as missing, naming its index: the array is walked by index, where
|
|
82
|
+
* `Array.prototype.forEach` would skip the hole and let it through.
|
|
83
|
+
*/
|
|
84
|
+
export declare function parseStoredMessages(stored: StoredMessage[]): StorableMessages;
|
|
85
|
+
/**
|
|
86
|
+
* Parse the messages of one append, in two passes: to the stored form, then
|
|
87
|
+
* proof that each rebuilds.
|
|
88
|
+
*
|
|
89
|
+
* Accepts: `messages` — declared `BaseMessage[]`; a non-array is refused, and
|
|
90
|
+
* so is an entry LangChain cannot serialize.
|
|
91
|
+
*
|
|
92
|
+
* Returns: a fresh array of stored messages, as {@link StorableMessages}.
|
|
93
|
+
*
|
|
94
|
+
* Throws: `VALIDATION` naming `messages`, with the offending index for an
|
|
95
|
+
* entry.
|
|
96
|
+
*/
|
|
97
|
+
export declare function parseMessages(messages: BaseMessage[]): StorableMessages;
|
|
98
|
+
/**
|
|
99
|
+
* Parse a conversation window.
|
|
100
|
+
*
|
|
101
|
+
* Accepts: `window.limit` — an integer from 1 to the page ceiling; the only
|
|
102
|
+
* floor of 1 in the package, because a window feeds a model, and an empty
|
|
103
|
+
* conversation is not a visibly empty answer but an invented one.
|
|
104
|
+
* `window.before` — a valid `Date` inside the range a message id can express.
|
|
105
|
+
*
|
|
106
|
+
* Returns: a fresh window holding only the keys the caller gave, as a
|
|
107
|
+
* {@link ParsedWindow}.
|
|
108
|
+
*
|
|
109
|
+
* Throws: `VALIDATION` naming `limit` or `before`.
|
|
110
|
+
*/
|
|
111
|
+
export declare function parseMessageWindow(window: MessageWindow): ParsedWindow;
|
|
112
|
+
/** The arguments of `getMessages`, parsed. */
|
|
113
|
+
export interface GetMessagesRequest {
|
|
114
|
+
readonly sessionId: SessionId;
|
|
115
|
+
readonly window: ParsedWindow;
|
|
116
|
+
readonly signal: AbortSignal | undefined;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Parse the arguments of `getMessages`.
|
|
120
|
+
*
|
|
121
|
+
* Accepts: `sessionId` — as {@link parseSessionId}. `options` — an object with
|
|
122
|
+
* only `limit`, `before` and `signal`; the window as {@link parseMessageWindow}.
|
|
123
|
+
*
|
|
124
|
+
* Returns: the request the read works from.
|
|
125
|
+
*
|
|
126
|
+
* Throws: `VALIDATION`, in this order: `options.<key>`, `signal`, `sessionId`,
|
|
127
|
+
* `limit`, `before`.
|
|
128
|
+
*/
|
|
129
|
+
export declare function parseGetMessagesRequest(sessionId: string, options: GetMessagesOptions): GetMessagesRequest;
|
|
130
|
+
/** The options of `listSessions`, parsed. */
|
|
131
|
+
export interface ListSessionsRequest {
|
|
132
|
+
readonly limit: PageLimit | undefined;
|
|
133
|
+
readonly maxItems: number | undefined;
|
|
134
|
+
readonly maxIterations: number | undefined;
|
|
135
|
+
readonly cursor: string | undefined;
|
|
136
|
+
readonly signal: AbortSignal | undefined;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Parse the options of `listSessions`.
|
|
140
|
+
*
|
|
141
|
+
* Accepts: `options` — only `limit`, `cursor`, `maxIterations`, `maxItems` and
|
|
142
|
+
* `signal`. `limit` — 0 to the page ceiling; `0` is answered with an empty page.
|
|
143
|
+
* `maxItems`, `maxIterations` — an integer of at least 1, or `Infinity`.
|
|
144
|
+
* `cursor` — a string, and only with `indexName`. `indexName` — the adapter's
|
|
145
|
+
* configured recency index, if any.
|
|
146
|
+
*
|
|
147
|
+
* Returns: the request the listing works from.
|
|
148
|
+
*
|
|
149
|
+
* Throws: `VALIDATION`, in this order: `options.<key>`, `signal`, `limit`,
|
|
150
|
+
* `maxItems`, `maxIterations`, `cursor`.
|
|
151
|
+
*/
|
|
152
|
+
export declare function parseListSessionsRequest(options: ListSessionsOptions, indexName: string | undefined): ListSessionsRequest;
|
|
153
|
+
export {};
|