@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,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides what each of this library's errors carries, for the codes that have
|
|
3
|
+
* a factory here.
|
|
4
|
+
*
|
|
5
|
+
* A failure site with a factory below names it for its code and the facts it
|
|
6
|
+
* has. The message wording, which facts go into `context` or `details`,
|
|
7
|
+
* copying a list a caller reads from a `catch` long after the throw,
|
|
8
|
+
* redacting quoted cause text, and a stack that starts at the caller rather
|
|
9
|
+
* than inside the factory are decided here once per code, on the one error
|
|
10
|
+
* class (record 19). `FORMAT_UNSUPPORTED`, `PAYLOAD_CORRUPT`,
|
|
11
|
+
* `COMPRESSION_LIMIT`, `S3_OFFLOAD_FAILED` and `ANCESTOR_EXPIRED` are raised
|
|
12
|
+
* with `new DynamoDBLangGraphError` at their own call sites instead; so is
|
|
13
|
+
* `CONTENTION` when `ensureLifecycleRule` gives up on a lifecycle write that
|
|
14
|
+
* never stays, which is this package's own verdict rather than an AWS
|
|
15
|
+
* rejection. Every other occurrence of an AWS-classified code, `CONTENTION`
|
|
16
|
+
* included, is wrapped once, by `wrapForeignError` in the error boundary, not
|
|
17
|
+
* per code here.
|
|
18
|
+
*/
|
|
19
|
+
import type { WriteRequest } from '../dynamodb/client.js';
|
|
20
|
+
import { DynamoDBLangGraphError } from './base-error.js';
|
|
21
|
+
import { ErrorCode } from './error-code.js';
|
|
22
|
+
/**
|
|
23
|
+
* The error for input that failed a check before any AWS call was made.
|
|
24
|
+
*
|
|
25
|
+
* Accepts: `message` — already redacted by whoever composed it. `field` — the
|
|
26
|
+
* option, argument or cap that failed, dotted for a nested one
|
|
27
|
+
* (`s3.bucketName`); omitted only where no single input is at fault. `cause` —
|
|
28
|
+
* the refusal beneath it.
|
|
29
|
+
*
|
|
30
|
+
* Returns: a `VALIDATION` error, with `context.field` set when a field was
|
|
31
|
+
* named — which is what a caller branches on to point at the offending input.
|
|
32
|
+
*
|
|
33
|
+
* Throws: nothing; building an error may not fail.
|
|
34
|
+
*/
|
|
35
|
+
export declare function validationError(message: string, field?: string, cause?: Error): DynamoDBLangGraphError<ErrorCode.VALIDATION>;
|
|
36
|
+
/**
|
|
37
|
+
* The error for a conditional write whose precondition no longer holds.
|
|
38
|
+
*
|
|
39
|
+
* Accepts: `message` — what precondition no longer held. `cause` — the
|
|
40
|
+
* rejection beneath it, when there is one.
|
|
41
|
+
*
|
|
42
|
+
* Returns: a `CONDITION_CONFLICT` error. A caller may retry the operation
|
|
43
|
+
* from a fresh read; nothing was written.
|
|
44
|
+
*
|
|
45
|
+
* Throws: nothing; building an error may not fail.
|
|
46
|
+
*/
|
|
47
|
+
export declare function conflictError(message: string, cause?: Error): DynamoDBLangGraphError<ErrorCode.CONDITION_CONFLICT>;
|
|
48
|
+
/**
|
|
49
|
+
* Record on `error` that an attempt of the budget it ended may still land.
|
|
50
|
+
*
|
|
51
|
+
* Accepts: `error` — the failure a retry budget is about to throw as it is: a
|
|
52
|
+
* refusal that is not retried, so it is thrown bare rather than wrapped in
|
|
53
|
+
* `RETRY_EXHAUSTED`, after an earlier attempt of the same budget got no
|
|
54
|
+
* answer. Credentials expiring mid-budget are the ordinary way there.
|
|
55
|
+
*
|
|
56
|
+
* Returns: `error`, carrying the record for {@link retryBudgetMayStillLand}.
|
|
57
|
+
* An error that cannot take a property — frozen, or not an object — is
|
|
58
|
+
* returned as it is, and then reads as answered, which is how every error
|
|
59
|
+
* read before this record existed.
|
|
60
|
+
*
|
|
61
|
+
* Throws: nothing, for any value.
|
|
62
|
+
*/
|
|
63
|
+
export declare function markMayStillLand<E extends Error>(error: E): E;
|
|
64
|
+
/**
|
|
65
|
+
* The error for a retried operation that exhausted its attempt budget.
|
|
66
|
+
*
|
|
67
|
+
* Accepts: `attempts` — how many were made before the budget ran out.
|
|
68
|
+
* `cause` — the last failure, kept so a caller can classify what actually
|
|
69
|
+
* went wrong. `mayStillLand` — whether any attempt of the budget, not only the
|
|
70
|
+
* last, left DynamoDB free to apply it later; read back by
|
|
71
|
+
* {@link retryBudgetMayStillLand}. Defaults to false, which is what a caller
|
|
72
|
+
* outside `withRetry` — one built by an older release, or a test double — gets
|
|
73
|
+
* for not recording one.
|
|
74
|
+
*
|
|
75
|
+
* Returns: a `RETRY_EXHAUSTED` error, with `context.attempts` when `attempts`
|
|
76
|
+
* was given, and the `awsErrorName`, `httpStatusCode` and `requestId` of the
|
|
77
|
+
* last failure when that failure was AWS's, so a count by status needs no walk
|
|
78
|
+
* of `cause`. It says the attempts are spent, **not** that the operation did
|
|
79
|
+
* not happen: a write whose response was lost is reported this way too, which
|
|
80
|
+
* is why every caller that would delete something reads the row back first.
|
|
81
|
+
*
|
|
82
|
+
* Throws: nothing; building an error may not fail.
|
|
83
|
+
*/
|
|
84
|
+
export declare function retryExhaustedError(message: string, attempts?: number, cause?: Error, mayStillLand?: boolean): DynamoDBLangGraphError<ErrorCode.RETRY_EXHAUSTED>;
|
|
85
|
+
/**
|
|
86
|
+
* Whether some attempt of the retry budget this error ended — recorded across
|
|
87
|
+
* every attempt `withRetry` made, not re-derived from the error, which is only
|
|
88
|
+
* the last one — left DynamoDB free to apply it later.
|
|
89
|
+
*
|
|
90
|
+
* Accepts: `error` — any error; one {@link retryExhaustedError} built, or one
|
|
91
|
+
* {@link markMayStillLand} marked, carries the record.
|
|
92
|
+
*
|
|
93
|
+
* Returns: the flag recorded on the error; false for any other error,
|
|
94
|
+
* including a `RETRY_EXHAUSTED` error built without passing one.
|
|
95
|
+
*
|
|
96
|
+
* Throws: nothing, for any value.
|
|
97
|
+
*/
|
|
98
|
+
export declare function retryBudgetMayStillLand(error: Error): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* The error for a paginated read that hit its runaway guard (item or
|
|
101
|
+
* iteration cap) while more data remained, so the result would have been
|
|
102
|
+
* silently truncated. Narrow the query (filter/prefix) or raise the cap rather
|
|
103
|
+
* than trusting a partial result.
|
|
104
|
+
*
|
|
105
|
+
* Accepts: `cap` — which cap was hit (`maxItems`, `maxIterations`). `limit` —
|
|
106
|
+
* its value, quoted in the message so the fix is obvious.
|
|
107
|
+
*
|
|
108
|
+
* Returns: a `RESULT_TRUNCATED` error, with `context.field` naming the cap.
|
|
109
|
+
* Raised only when data actually remained, so it never turns a complete
|
|
110
|
+
* result into a failure.
|
|
111
|
+
*
|
|
112
|
+
* Throws: nothing; building an error may not fail.
|
|
113
|
+
*/
|
|
114
|
+
export declare function resultTruncatedError(cap: string, limit: number): DynamoDBLangGraphError<ErrorCode.RESULT_TRUNCATED>;
|
|
115
|
+
/**
|
|
116
|
+
* The error for an operation cancelled via its `AbortSignal`.
|
|
117
|
+
*
|
|
118
|
+
* Accepts: `message` — defaults to `Operation aborted`. `cause` — the
|
|
119
|
+
* `AbortSignal`'s own reason, when it carried one.
|
|
120
|
+
*
|
|
121
|
+
* Returns: an `ABORTED` error. Distinct from every failure code on purpose: a
|
|
122
|
+
* caller who cancelled did not encounter a fault, and treating the two alike
|
|
123
|
+
* reported an incomplete write for a deliberate stop.
|
|
124
|
+
*
|
|
125
|
+
* Throws: nothing; building an error may not fail.
|
|
126
|
+
*/
|
|
127
|
+
export declare function abortError(message?: string, cause?: Error): DynamoDBLangGraphError<ErrorCode.ABORTED>;
|
|
128
|
+
/**
|
|
129
|
+
* The error for a `BatchWriteItem` sequence that could not drain its
|
|
130
|
+
* `UnprocessedItems`.
|
|
131
|
+
*
|
|
132
|
+
* Accepts: `succeededCount` — writes DynamoDB acked. `unprocessed` — the
|
|
133
|
+
* requests it did not, verbatim, so they can be re-submitted. `retries` —
|
|
134
|
+
* rounds spent. `cause` — an error that interrupted the drain (a thrown,
|
|
135
|
+
* non-`UnprocessedItems` error from a retry round), rather than a clean
|
|
136
|
+
* exhaustion of the `UnprocessedItems` retry budget.
|
|
137
|
+
*
|
|
138
|
+
* Returns: a `BATCH_WRITE_INCOMPLETE` error whose `details` (`kind: 'drain'`)
|
|
139
|
+
* carry both counts and the list. Items *not* listed in `details.unprocessed`
|
|
140
|
+
* persist: there is no rollback, so reconciliation is driven from that list.
|
|
141
|
+
* That list is **copied**: it is read from a `catch` long after the throw, and
|
|
142
|
+
* a caller reusing its request buffer must not be able to rewrite it.
|
|
143
|
+
*
|
|
144
|
+
* Throws: nothing; building an error may not fail. Anything but an array of
|
|
145
|
+
* requests reads as an empty list rather than crashing the report.
|
|
146
|
+
*/
|
|
147
|
+
export declare function batchWriteIncompleteError(succeededCount: number, unprocessed: WriteRequest[], retries: number, cause?: Error): DynamoDBLangGraphError<ErrorCode.BATCH_WRITE_INCOMPLETE>;
|
|
148
|
+
/** What a batch that could not finish reports. */
|
|
149
|
+
export interface IncompleteBatch {
|
|
150
|
+
/** Chunks (or rows) that committed. */
|
|
151
|
+
readonly succeeded: number;
|
|
152
|
+
/** Chunks (or rows) the batch had. */
|
|
153
|
+
readonly total: number;
|
|
154
|
+
readonly failures: Error[];
|
|
155
|
+
/** Requests that committed, when a chunk is more than one request. */
|
|
156
|
+
readonly succeededCount?: number;
|
|
157
|
+
readonly unit?: 'row';
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* The error for a `batchWriteAll` pass — or a partition-wide delete — that did
|
|
161
|
+
* not fully drain. `batchWriteAll` attempts every chunk rather than stopping
|
|
162
|
+
* at the first failure, so a mid-sequence chunk failing does not abandon the
|
|
163
|
+
* chunks after it. A partition-wide delete reports through the same shape,
|
|
164
|
+
* because what it answers is the same question — how much of this call got
|
|
165
|
+
* through — but it sends one conditional request per row rather than a batch
|
|
166
|
+
* of twenty-five, so it counts rows where a batch counts chunks and says so in
|
|
167
|
+
* its message.
|
|
168
|
+
*
|
|
169
|
+
* Accepts: `batch.succeeded`/`batch.total` — the chunk tally. `batch.failures`
|
|
170
|
+
* — each failing chunk's own error, commonly a `BATCH_WRITE_INCOMPLETE` drain
|
|
171
|
+
* error. `batch.succeededCount` — individual writes confirmed persisted across
|
|
172
|
+
* every chunk (full chunks plus any failed chunk's own partial drain), which
|
|
173
|
+
* is more precise than the chunk tally when a chunk partially drains.
|
|
174
|
+
* `batch.unit` — what the first two counts count; omitting it reproduces the
|
|
175
|
+
* batch wording exactly.
|
|
176
|
+
*
|
|
177
|
+
* Returns: a `BATCH_WRITE_INCOMPLETE` error whose `details` (`kind: 'pass'`)
|
|
178
|
+
* carry the tally, with the first failing chunk's error as `cause`. Every
|
|
179
|
+
* chunk not represented in `details.failedChunks` drained successfully and its
|
|
180
|
+
* writes persist — there is no rollback. The list is **copied**, for the same
|
|
181
|
+
* reason a drain error copies its own.
|
|
182
|
+
*
|
|
183
|
+
* Throws: nothing; building an error may not fail. Anything but an array of
|
|
184
|
+
* errors reads as an empty list rather than crashing the report.
|
|
185
|
+
*/
|
|
186
|
+
export declare function batchWriteAllIncompleteError(batch: IncompleteBatch): DynamoDBLangGraphError<ErrorCode.BATCH_WRITE_INCOMPLETE>;
|
|
187
|
+
/**
|
|
188
|
+
* The error for a compensating rollback that failed after an append-saga
|
|
189
|
+
* chunk error, so the trigger could not be cleanly undone.
|
|
190
|
+
*
|
|
191
|
+
* Accepts: `cause` — the failure that triggered the rollback. `rollbackError`
|
|
192
|
+
* — why the rollback itself could not finish. Both are built from a `catch`,
|
|
193
|
+
* so either may be whatever a `throw` produced rather than an `Error`.
|
|
194
|
+
*
|
|
195
|
+
* Returns: a `COMPENSATION_FAILED` error carrying the trigger as `cause` and
|
|
196
|
+
* the rollback failure as `details.rollbackError`, each normalised through
|
|
197
|
+
* `toError` so both are always error-shaped. The session's `messageCount` may
|
|
198
|
+
* have drifted, which `reconcileMessageCount` repairs; the quoted text of both
|
|
199
|
+
* errors is redacted before it is embedded.
|
|
200
|
+
*
|
|
201
|
+
* Throws: nothing; building an error may not fail. Reading `.message` off a
|
|
202
|
+
* thrown `null` or `undefined` would throw here, inside the `catch` reporting
|
|
203
|
+
* the rollback — which is why `toError` normalises both `cause` and
|
|
204
|
+
* `rollbackError` before anything reads off them.
|
|
205
|
+
*/
|
|
206
|
+
export declare function compensationFailedError(cause: Error, rollbackError: Error): DynamoDBLangGraphError<ErrorCode.COMPENSATION_FAILED>;
|
|
207
|
+
/**
|
|
208
|
+
* The error for an append-saga chunk whose own outcome could not be
|
|
209
|
+
* established, raised once every chunk this call *could* confirm has already
|
|
210
|
+
* been undone — the rollback itself did not fail; this chunk alone could not
|
|
211
|
+
* be read back, or its write may still be applied after the read.
|
|
212
|
+
*
|
|
213
|
+
* Accepts: `cause` — the failing chunk's own failure. `unsettledBecause` —
|
|
214
|
+
* why its outcome is unknown: the read-back's own failure, or the write's
|
|
215
|
+
* own failure, when some attempt of it may still be applied. Both are built
|
|
216
|
+
* from a `catch`, so either may be whatever a `throw` produced rather than
|
|
217
|
+
* an `Error`.
|
|
218
|
+
*
|
|
219
|
+
* Returns: a `COMPENSATION_FAILED` error carrying `cause` as `cause` and
|
|
220
|
+
* `unsettledBecause` as `details.rollbackError`, each normalised through
|
|
221
|
+
* `toError` so both are always error-shaped. Its message says the chunk's
|
|
222
|
+
* own fate could not be established — never that a rollback failed, since
|
|
223
|
+
* every chunk this call could confirm was already rolled back before this is
|
|
224
|
+
* raised. The session's `messageCount` may have drifted, which
|
|
225
|
+
* `reconcileMessageCount` repairs; the quoted text of both errors is
|
|
226
|
+
* redacted before it is embedded.
|
|
227
|
+
*
|
|
228
|
+
* Throws: nothing; building an error may not fail. Reading `.message` off a
|
|
229
|
+
* thrown `null` or `undefined` would throw here, which is why `toError`
|
|
230
|
+
* normalises both `cause` and `unsettledBecause` before anything reads off
|
|
231
|
+
* them.
|
|
232
|
+
*/
|
|
233
|
+
export declare function unsettledAppendError(cause: Error, unsettledBecause: Error): DynamoDBLangGraphError<ErrorCode.COMPENSATION_FAILED>;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validationError = validationError;
|
|
4
|
+
exports.conflictError = conflictError;
|
|
5
|
+
exports.markMayStillLand = markMayStillLand;
|
|
6
|
+
exports.retryExhaustedError = retryExhaustedError;
|
|
7
|
+
exports.retryBudgetMayStillLand = retryBudgetMayStillLand;
|
|
8
|
+
exports.resultTruncatedError = resultTruncatedError;
|
|
9
|
+
exports.abortError = abortError;
|
|
10
|
+
exports.batchWriteIncompleteError = batchWriteIncompleteError;
|
|
11
|
+
exports.batchWriteAllIncompleteError = batchWriteAllIncompleteError;
|
|
12
|
+
exports.compensationFailedError = compensationFailedError;
|
|
13
|
+
exports.unsettledAppendError = unsettledAppendError;
|
|
14
|
+
const secret_patterns_js_1 = require("../logging/secret-patterns.js");
|
|
15
|
+
const base_error_js_1 = require("./base-error.js");
|
|
16
|
+
const classify_js_1 = require("./classify.js");
|
|
17
|
+
const error_code_js_1 = require("./error-code.js");
|
|
18
|
+
function build(factory, spec) {
|
|
19
|
+
const error = new base_error_js_1.DynamoDBLangGraphError(spec.message, spec.code, spec.context, spec.cause, spec.details);
|
|
20
|
+
Error.captureStackTrace(error, factory);
|
|
21
|
+
return error;
|
|
22
|
+
}
|
|
23
|
+
function validationError(message, field, cause) {
|
|
24
|
+
return build(validationError, {
|
|
25
|
+
message,
|
|
26
|
+
code: error_code_js_1.ErrorCode.VALIDATION,
|
|
27
|
+
context: field === undefined ? {} : { field },
|
|
28
|
+
cause,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function conflictError(message, cause) {
|
|
32
|
+
return build(conflictError, { message, code: error_code_js_1.ErrorCode.CONDITION_CONFLICT, context: {}, cause });
|
|
33
|
+
}
|
|
34
|
+
const MAY_STILL_LAND = Symbol('retryBudget.mayStillLand');
|
|
35
|
+
function markMayStillLand(error) {
|
|
36
|
+
if (typeof error === 'object' && error !== null && Object.isExtensible(error)) {
|
|
37
|
+
Object.defineProperty(error, MAY_STILL_LAND, { value: true, enumerable: false });
|
|
38
|
+
}
|
|
39
|
+
return error;
|
|
40
|
+
}
|
|
41
|
+
function retryExhaustedError(message, attempts, cause, mayStillLand = false) {
|
|
42
|
+
const error = build(retryExhaustedError, {
|
|
43
|
+
message,
|
|
44
|
+
code: error_code_js_1.ErrorCode.RETRY_EXHAUSTED,
|
|
45
|
+
context: {
|
|
46
|
+
...(attempts === undefined ? {} : { attempts }),
|
|
47
|
+
...(cause === undefined ? {} : (0, classify_js_1.awsDiagnostics)(cause)),
|
|
48
|
+
},
|
|
49
|
+
cause,
|
|
50
|
+
});
|
|
51
|
+
Object.defineProperty(error, MAY_STILL_LAND, { value: mayStillLand, enumerable: false });
|
|
52
|
+
return error;
|
|
53
|
+
}
|
|
54
|
+
function retryBudgetMayStillLand(error) {
|
|
55
|
+
if (typeof error !== 'object' || error === null)
|
|
56
|
+
return false;
|
|
57
|
+
return error[MAY_STILL_LAND] === true;
|
|
58
|
+
}
|
|
59
|
+
function resultTruncatedError(cap, limit) {
|
|
60
|
+
return build(resultTruncatedError, {
|
|
61
|
+
message: `paginated read truncated at the ${cap} cap (${limit}) with more data remaining`,
|
|
62
|
+
code: error_code_js_1.ErrorCode.RESULT_TRUNCATED,
|
|
63
|
+
context: { field: cap },
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function abortError(message = 'Operation aborted', cause) {
|
|
67
|
+
return build(abortError, { message, code: error_code_js_1.ErrorCode.ABORTED, context: {}, cause });
|
|
68
|
+
}
|
|
69
|
+
function batchWriteIncompleteError(succeededCount, unprocessed, retries, cause) {
|
|
70
|
+
const items = Array.isArray(unprocessed) ? [...unprocessed] : [];
|
|
71
|
+
return build(batchWriteIncompleteError, {
|
|
72
|
+
message: `batchWrite did not drain after ${retries} UnprocessedItems retries: ` +
|
|
73
|
+
`${succeededCount} item(s) persisted, ${items.length} still un-acked.`,
|
|
74
|
+
code: error_code_js_1.ErrorCode.BATCH_WRITE_INCOMPLETE,
|
|
75
|
+
context: {},
|
|
76
|
+
cause,
|
|
77
|
+
details: { kind: 'drain', succeededCount, unprocessed: items, retries },
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function batchWriteAllIncompleteError(batch) {
|
|
81
|
+
const { succeeded, total, succeededCount = 0, unit = 'chunk' } = batch;
|
|
82
|
+
const failed = Array.isArray(batch.failures) ? [...batch.failures] : [];
|
|
83
|
+
return build(batchWriteAllIncompleteError, {
|
|
84
|
+
message: `${unit === 'chunk' ? 'batchWriteAll' : 'the partition delete'} did not fully drain: ` +
|
|
85
|
+
`${succeeded}/${total} ${unit}(s) succeeded, ` +
|
|
86
|
+
`${failed.length} ${unit}(s) failed. ${succeededCount} write(s) persisted before the failure.`,
|
|
87
|
+
code: error_code_js_1.ErrorCode.BATCH_WRITE_INCOMPLETE,
|
|
88
|
+
context: {},
|
|
89
|
+
cause: failed[0],
|
|
90
|
+
details: {
|
|
91
|
+
kind: 'pass',
|
|
92
|
+
unit,
|
|
93
|
+
succeededChunks: succeeded,
|
|
94
|
+
totalChunks: total,
|
|
95
|
+
failedChunks: failed,
|
|
96
|
+
succeededCount,
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function compensationFailedError(cause, rollbackError) {
|
|
101
|
+
const trigger = (0, base_error_js_1.toError)(cause);
|
|
102
|
+
const rollback = (0, base_error_js_1.toError)(rollbackError);
|
|
103
|
+
return build(compensationFailedError, {
|
|
104
|
+
message: `compensation failed after an append error: ${(0, secret_patterns_js_1.redactedMessage)(trigger)} ` +
|
|
105
|
+
`(rollback: ${(0, secret_patterns_js_1.redactedMessage)(rollback)})`,
|
|
106
|
+
code: error_code_js_1.ErrorCode.COMPENSATION_FAILED,
|
|
107
|
+
context: {},
|
|
108
|
+
cause: trigger,
|
|
109
|
+
details: { rollbackError: rollback },
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
function unsettledAppendError(cause, unsettledBecause) {
|
|
113
|
+
const trigger = (0, base_error_js_1.toError)(cause);
|
|
114
|
+
const unsettled = (0, base_error_js_1.toError)(unsettledBecause);
|
|
115
|
+
return build(unsettledAppendError, {
|
|
116
|
+
message: `an append chunk could not be settled after ${(0, secret_patterns_js_1.redactedMessage)(trigger)} ` +
|
|
117
|
+
`(unsettled because: ${(0, secret_patterns_js_1.redactedMessage)(unsettled)})`,
|
|
118
|
+
code: error_code_js_1.ErrorCode.COMPENSATION_FAILED,
|
|
119
|
+
context: {},
|
|
120
|
+
cause: trigger,
|
|
121
|
+
details: { rollbackError: unsettled },
|
|
122
|
+
});
|
|
123
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides that a caller's logger is foreign code that may throw.
|
|
3
|
+
*
|
|
4
|
+
* A caller supplies no logger or one of their own, and internal code receives
|
|
5
|
+
* a logger that is silent by default and whose four levels never throw. No
|
|
6
|
+
* `catch` block or retry hook therefore treats a log call as a failure path
|
|
7
|
+
* of its own, and where a throw is absorbed, and what becomes of the line it
|
|
8
|
+
* was writing, can change here without touching any call site.
|
|
9
|
+
*/
|
|
10
|
+
/** A value safe to pass as a structured log argument. */
|
|
11
|
+
export type LogArgument = string | number | boolean | null | object;
|
|
12
|
+
/**
|
|
13
|
+
* Pluggable logging interface — consumers supply their own implementation.
|
|
14
|
+
* `args` are structured fields, at most one plain object per call, so an
|
|
15
|
+
* adapter for a structured logger (pino, winston) can merge them into one
|
|
16
|
+
* record; the message is a fixed string and never carries a value.
|
|
17
|
+
*
|
|
18
|
+
* It is the one piece of foreign code every adapter of this package calls,
|
|
19
|
+
* almost always from a `catch` block, so an adapter wraps it: anything one of
|
|
20
|
+
* its methods throws is absorbed at the log call and never replaces the error
|
|
21
|
+
* being reported.
|
|
22
|
+
*/
|
|
23
|
+
export interface Logger {
|
|
24
|
+
info(message: string, ...args: LogArgument[]): void;
|
|
25
|
+
warn(message: string, ...args: LogArgument[]): void;
|
|
26
|
+
error(message: string, ...args: LogArgument[]): void;
|
|
27
|
+
debug(message: string, ...args: LogArgument[]): void;
|
|
28
|
+
}
|
|
29
|
+
/** Default logger: discards everything. Inject a real logger to enable output. */
|
|
30
|
+
export declare const SILENT_LOGGER: Logger;
|
|
31
|
+
/**
|
|
32
|
+
* Run one log call so that a failure of the caller's own logger cannot become
|
|
33
|
+
* the caller's problem.
|
|
34
|
+
*
|
|
35
|
+
* Shared rather than private to the file that first needed it: a `Logger` is
|
|
36
|
+
* an interface a consumer implements, so a log call is foreign code wherever
|
|
37
|
+
* it appears, and a guard each site has to remember is a guard most sites will
|
|
38
|
+
* not have.
|
|
39
|
+
*
|
|
40
|
+
* Swallowed rather than reported onward, because the only channel a report
|
|
41
|
+
* could use is the logger that just broke, and the alternative — writing to
|
|
42
|
+
* the host's console uninvited — is what {@link SILENT_LOGGER} exists to
|
|
43
|
+
* refuse. What the line was going to say is an observation about work that has
|
|
44
|
+
* either succeeded or is already failing for a reason of its own; the error it
|
|
45
|
+
* protects is the one that says what that reason was.
|
|
46
|
+
*
|
|
47
|
+
* Accepts: `emit` — the whole log call as a thunk, so the arguments are built
|
|
48
|
+
* inside the guard too: a formatter that throws while composing the line is
|
|
49
|
+
* the same failure as a transport that throws while writing it.
|
|
50
|
+
*
|
|
51
|
+
* Returns: nothing, and the same nothing whether the line was written or lost.
|
|
52
|
+
*
|
|
53
|
+
* Throws: **nothing**, ever. That is the entire job. The caller's next
|
|
54
|
+
* statement runs, so a path that says what it is about to do and then does it
|
|
55
|
+
* cannot be stopped between the two by the saying.
|
|
56
|
+
*/
|
|
57
|
+
export declare function absorbLoggerFailure(emit: () => void): void;
|
|
58
|
+
/**
|
|
59
|
+
* Resolve an optional logger to a concrete one.
|
|
60
|
+
*
|
|
61
|
+
* Accepts: `logger` — the caller's, or nothing. Its members were validated
|
|
62
|
+
* where the options were.
|
|
63
|
+
*
|
|
64
|
+
* Returns: {@link SILENT_LOGGER} when nothing was given — silent rather than
|
|
65
|
+
* console by default: a library writing to a host's stdout uninvited is a
|
|
66
|
+
* nuisance, and every event it would have written is documented so an operator
|
|
67
|
+
* can opt in. Otherwise a **wrapper** around the caller's logger, not the
|
|
68
|
+
* object itself: the same four levels, delegating each call with its message
|
|
69
|
+
* and arguments unchanged, and absorbing anything the caller's method throws
|
|
70
|
+
* (see `absorbLoggerFailure`). Identity is therefore not preserved, and
|
|
71
|
+
* a caller comparing what it passed in against what an adapter holds would
|
|
72
|
+
* find two different objects; nothing observable about a log line changes.
|
|
73
|
+
*
|
|
74
|
+
* Throws: nothing.
|
|
75
|
+
*
|
|
76
|
+
* Guarantees: every logger this package hands to its own internals has methods
|
|
77
|
+
* that cannot throw, so no `catch` block, and no retry hook, has to treat a log
|
|
78
|
+
* call as a failure path of its own.
|
|
79
|
+
*/
|
|
80
|
+
export declare function resolveLogger(logger?: Logger): Logger;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SILENT_LOGGER = void 0;
|
|
4
|
+
exports.absorbLoggerFailure = absorbLoggerFailure;
|
|
5
|
+
exports.resolveLogger = resolveLogger;
|
|
6
|
+
exports.SILENT_LOGGER = {
|
|
7
|
+
info() { },
|
|
8
|
+
warn() { },
|
|
9
|
+
error() { },
|
|
10
|
+
debug() { },
|
|
11
|
+
};
|
|
12
|
+
function absorbLoggerFailure(emit) {
|
|
13
|
+
try {
|
|
14
|
+
emit();
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function containedLogger(inner) {
|
|
20
|
+
const deliver = (level) => (message, ...args) => absorbLoggerFailure(() => inner[level](message, ...args));
|
|
21
|
+
return {
|
|
22
|
+
info: deliver('info'),
|
|
23
|
+
warn: deliver('warn'),
|
|
24
|
+
error: deliver('error'),
|
|
25
|
+
debug: deliver('debug'),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function resolveLogger(logger) {
|
|
29
|
+
return logger === undefined ? exports.SILENT_LOGGER : containedLogger(logger);
|
|
30
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides how a logger and a value are redacted.
|
|
3
|
+
*
|
|
4
|
+
* A redacting logger walks every argument of every line, bounded in depth and
|
|
5
|
+
* safe against cycles and hostile getters, and replaces the value of any key
|
|
6
|
+
* that looks like a secret and any text that looks like one; the same walk
|
|
7
|
+
* serves `redactSecrets` for a value a caller wants to log themselves.
|
|
8
|
+
*/
|
|
9
|
+
import { type LogArgument, type Logger } from './logger.js';
|
|
10
|
+
/**
|
|
11
|
+
* Recursively clone `value`, replacing any value at a secret-looking key with
|
|
12
|
+
* `[REDACTED]` and any recognised secret *shape* inside a string — including an
|
|
13
|
+
* error's `message`/`stack` text, which key-name matching cannot reach — with
|
|
14
|
+
* the same marker. Cycles become `[Circular]`.
|
|
15
|
+
*
|
|
16
|
+
* An Error with no own enumerable properties whose text holds no secret is
|
|
17
|
+
* passed through by reference, so its identity and stack trace survive; one
|
|
18
|
+
* carrying own data (this library's error types all attach `code`/`context`
|
|
19
|
+
* this way) or a secret in its text is rebuilt instead, with `name`/`message`/
|
|
20
|
+
* `stack` redacted and every other own property recursed like a plain object.
|
|
21
|
+
* `Date`/`RegExp` keep their identity rather than collapsing to `{}`,
|
|
22
|
+
* `Set`/`Map` render as their contents, and binary views become a short label.
|
|
23
|
+
*
|
|
24
|
+
* Accepts: `value` — any log argument, including `undefined`, a primitive, a
|
|
25
|
+
* typed `Error`, a class instance or a `Record`, so callers never cast. A
|
|
26
|
+
* cyclic or shared graph is fine; each node is walked once. `patterns` and
|
|
27
|
+
* `valuePatterns` — the key names and value shapes to redact, an array of
|
|
28
|
+
* strings and an array of `RegExp` respectively; both default to this
|
|
29
|
+
* package's own lists, and an empty one turns that rule off. A key name is
|
|
30
|
+
* matched by its normalised form — lower-case, punctuation removed — against
|
|
31
|
+
* the end of each key's, so `'apiKey'` covers `x-api-key` and `API_KEY`.
|
|
32
|
+
*
|
|
33
|
+
* Returns: a redacted clone. The input is never mutated — a logger that
|
|
34
|
+
* scrubbed the caller's own object would corrupt the very data the application
|
|
35
|
+
* is working with.
|
|
36
|
+
*
|
|
37
|
+
* Throws: `VALIDATION` naming `patterns` or `valuePatterns` for a list this
|
|
38
|
+
* function could not apply — a non-array, a wrong entry, or a key name with
|
|
39
|
+
* no letter or digit in it, which would match every key — which is a mistake
|
|
40
|
+
* in the call itself and is raised before anything is walked. Nothing after
|
|
41
|
+
* that: a value whose
|
|
42
|
+
* redaction fails — a throwing getter, a structure deep enough to exhaust the
|
|
43
|
+
* stack — is replaced whole by `[UNREDACTABLE]`, since a logger that throws
|
|
44
|
+
* takes down the operation it was only observing. {@link redactLogger}
|
|
45
|
+
* redacts one argument per call, so there a single hostile argument is what is
|
|
46
|
+
* lost rather than the record around it.
|
|
47
|
+
*/
|
|
48
|
+
export declare function redactSecrets(value: LogArgument | undefined, patterns?: readonly string[], valuePatterns?: readonly RegExp[]): Redactable;
|
|
49
|
+
/** Options controlling {@link redactLogger}. */
|
|
50
|
+
export interface RedactLoggerOptions {
|
|
51
|
+
/**
|
|
52
|
+
* Additional key names to redact. Matched like the defaults: a key is
|
|
53
|
+
* redacted when its normalised form (lower-case, punctuation removed) equals
|
|
54
|
+
* or ends with the normalised name, so `'ssn'` covers `SSN` and `user_ssn`.
|
|
55
|
+
*/
|
|
56
|
+
extraKeys?: readonly string[];
|
|
57
|
+
/**
|
|
58
|
+
* Additional secret shapes to redact wherever they appear inside a string.
|
|
59
|
+
* A pattern's first capture group, if it has one, is preserved verbatim and
|
|
60
|
+
* only the remainder of the match is replaced.
|
|
61
|
+
*/
|
|
62
|
+
extraValuePatterns?: readonly RegExp[];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Wrap a logger so object args are redacted before delegation.
|
|
66
|
+
*
|
|
67
|
+
* Accepts: `inner` — the logger to delegate to; it must carry all four
|
|
68
|
+
* methods, because a missing one is a wiring mistake worth naming here rather
|
|
69
|
+
* than at the first log line. `options.extraKeys` — further key names to
|
|
70
|
+
* redact, matched like the defaults. `options.extraValuePatterns` — further
|
|
71
|
+
* secret shapes; each must be a `RegExp`, and it is applied globally whether or
|
|
72
|
+
* not it carries the `g` flag.
|
|
73
|
+
*
|
|
74
|
+
* Returns: a logger with the same four methods.
|
|
75
|
+
*
|
|
76
|
+
* Throws: `VALIDATION` naming `logger` or `logger.<method>` for a logger it
|
|
77
|
+
* could not delegate to, and `options`, `extraKeys` or `extraValuePatterns`
|
|
78
|
+
* for an option of the wrong type. Nothing at log time.
|
|
79
|
+
*
|
|
80
|
+
* Guarantees: the message string is passed through unchanged — never
|
|
81
|
+
* interpolate a secret into it — and every other argument is redacted before
|
|
82
|
+
* it reaches `inner`. Past the wrap call nothing escapes a log call: an
|
|
83
|
+
* argument whose redaction fails is replaced by a fixed marker, and a failure
|
|
84
|
+
* of `inner` itself is absorbed, because the
|
|
85
|
+
* operation that wrote the line was only observing itself and is commonly
|
|
86
|
+
* reporting some other failure already.
|
|
87
|
+
*/
|
|
88
|
+
export declare function redactLogger(inner: Logger, options?: RedactLoggerOptions): Logger;
|
|
89
|
+
/** A value that {@link redactSecrets} can recurse through. */
|
|
90
|
+
export type Redactable = string | number | boolean | null | undefined | Redactable[] | {
|
|
91
|
+
[key: string]: Redactable;
|
|
92
|
+
};
|
|
93
|
+
/** Any `Redactable` that is a non-null object — what the walk dispatches on. */
|
|
94
|
+
export type RedactableObject = Redactable[] | {
|
|
95
|
+
[key: string]: Redactable;
|
|
96
|
+
};
|
|
97
|
+
/** One step of the recursive walk, threaded into the entry helpers. */
|
|
98
|
+
type Walk = (value: Redactable) => Redactable;
|
|
99
|
+
/** Collaborators threaded through the recursive walk. */
|
|
100
|
+
export interface WalkDeps {
|
|
101
|
+
keyPatterns: readonly string[];
|
|
102
|
+
valuePatterns: readonly RegExp[];
|
|
103
|
+
walk: Walk;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Dispatch one non-null object by its shape.
|
|
107
|
+
*
|
|
108
|
+
* Accepts: `current` — any object. `deps.walk` — how to recurse, which carries
|
|
109
|
+
* the cycle and memo state this module deliberately does not own.
|
|
110
|
+
*
|
|
111
|
+
* Returns: the redacted form — arrays and plain objects recursed, binary views
|
|
112
|
+
* collapsed to a label, `Date`/`RegExp` passed through by reference so they do
|
|
113
|
+
* not become `{}`, `Set`/`Map` rendered as their contents, and an Error through
|
|
114
|
+
* the error path, which preserves the non-enumerable text a plain walk cannot
|
|
115
|
+
* see.
|
|
116
|
+
*
|
|
117
|
+
* Throws: whatever a property getter on the value throws. `redactSecrets`, the
|
|
118
|
+
* only caller, catches it and returns `[UNREDACTABLE]` in place of the whole
|
|
119
|
+
* value it was given, rather than raising a getter's error at a caller who
|
|
120
|
+
* asked only for a copy it could log.
|
|
121
|
+
*/
|
|
122
|
+
export declare function walkObject(current: RedactableObject, deps: WalkDeps): Redactable;
|
|
123
|
+
export {};
|