@farukada/aws-langgraph-dynamodb-ts 1.0.0-rc.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/README.md +390 -193
  2. package/dist/{backfill → cjs/backfill}/backfill.d.ts +15 -12
  3. package/dist/cjs/backfill/backfill.js +177 -0
  4. package/dist/{checkpointer → cjs/checkpointer}/actions/delete-thread.d.ts +1 -1
  5. package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
  6. package/dist/{checkpointer → cjs/checkpointer}/actions/get-tuple.d.ts +4 -3
  7. package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
  8. package/dist/{checkpointer → cjs/checkpointer}/actions/list.d.ts +7 -4
  9. package/dist/cjs/checkpointer/actions/list.js +70 -0
  10. package/dist/{checkpointer → cjs/checkpointer}/actions/put-writes.d.ts +8 -6
  11. package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
  12. package/dist/{checkpointer → cjs/checkpointer}/actions/put.d.ts +21 -15
  13. package/dist/cjs/checkpointer/actions/put.js +79 -0
  14. package/dist/{checkpointer → cjs/checkpointer}/internal/delta-history.d.ts +38 -26
  15. package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
  16. package/dist/{checkpointer → cjs/checkpointer}/internal/listing.d.ts +4 -4
  17. package/dist/cjs/checkpointer/internal/listing.js +104 -0
  18. package/dist/{checkpointer → cjs/checkpointer}/internal/parse.d.ts +51 -15
  19. package/dist/cjs/checkpointer/internal/parse.js +184 -0
  20. package/dist/{checkpointer → cjs/checkpointer}/internal/pending-writes.d.ts +64 -25
  21. package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
  22. package/dist/{checkpointer → cjs/checkpointer}/internal/read.d.ts +15 -10
  23. package/dist/cjs/checkpointer/internal/read.js +132 -0
  24. package/dist/{checkpointer → cjs/checkpointer}/internal/rows.d.ts +94 -21
  25. package/dist/cjs/checkpointer/internal/rows.js +356 -0
  26. package/dist/{checkpointer → cjs/checkpointer}/internal/setup.d.ts +13 -20
  27. package/dist/cjs/checkpointer/internal/setup.js +25 -0
  28. package/dist/{checkpointer → cjs/checkpointer}/saver.d.ts +72 -36
  29. package/dist/cjs/checkpointer/saver.js +56 -0
  30. package/dist/{checkpointer → cjs/checkpointer}/types.d.ts +1 -1
  31. package/dist/cjs/checkpointer/types.js +2 -0
  32. package/dist/{factory → cjs/factory}/factory.d.ts +25 -20
  33. package/dist/cjs/factory/factory.js +137 -0
  34. package/dist/{factory → cjs/factory}/types.d.ts +12 -12
  35. package/dist/cjs/factory/types.js +2 -0
  36. package/dist/{history → cjs/history}/actions/add-messages.d.ts +18 -10
  37. package/dist/cjs/history/actions/add-messages.js +17 -0
  38. package/dist/{history → cjs/history}/actions/clear.d.ts +1 -1
  39. package/dist/cjs/history/actions/clear.js +29 -0
  40. package/dist/{history → cjs/history}/actions/get-messages.d.ts +11 -9
  41. package/dist/cjs/history/actions/get-messages.js +58 -0
  42. package/dist/{history → cjs/history}/actions/list-sessions.d.ts +3 -3
  43. package/dist/cjs/history/actions/list-sessions.js +67 -0
  44. package/dist/{history → cjs/history}/actions/reconcile-count.d.ts +13 -9
  45. package/dist/cjs/history/actions/reconcile-count.js +8 -0
  46. package/dist/{history → cjs/history}/chat-message-history.d.ts +62 -30
  47. package/dist/cjs/history/chat-message-history.js +61 -0
  48. package/dist/{history → cjs/history}/internal/append.d.ts +64 -32
  49. package/dist/cjs/history/internal/append.js +267 -0
  50. package/dist/{history → cjs/history}/internal/message-read.d.ts +3 -3
  51. package/dist/cjs/history/internal/message-read.js +93 -0
  52. package/dist/{history → cjs/history}/internal/parse.d.ts +2 -2
  53. package/dist/cjs/history/internal/parse.js +113 -0
  54. package/dist/{history → cjs/history}/internal/rows.d.ts +11 -10
  55. package/dist/cjs/history/internal/rows.js +96 -0
  56. package/dist/{history → cjs/history}/internal/session.d.ts +41 -22
  57. package/dist/cjs/history/internal/session.js +296 -0
  58. package/dist/{history → cjs/history}/internal/setup.d.ts +2 -2
  59. package/dist/cjs/history/internal/setup.js +60 -0
  60. package/dist/{history → cjs/history}/session-adapter.d.ts +0 -6
  61. package/dist/cjs/history/session-adapter.js +38 -0
  62. package/dist/{history → cjs/history}/types.d.ts +18 -15
  63. package/dist/cjs/history/types.js +2 -0
  64. package/dist/{index.d.ts → cjs/index.d.ts} +27 -27
  65. package/dist/cjs/index.js +25 -0
  66. package/dist/cjs/package.json +1 -0
  67. package/dist/{shared → cjs/shared}/adapter.d.ts +27 -16
  68. package/dist/cjs/shared/adapter.js +70 -0
  69. package/dist/cjs/shared/clock.js +14 -0
  70. package/dist/{shared → cjs/shared}/codec/codec.d.ts +37 -20
  71. package/dist/cjs/shared/codec/codec.js +162 -0
  72. package/dist/{shared → cjs/shared}/codec/compression.d.ts +9 -4
  73. package/dist/cjs/shared/codec/compression.js +45 -0
  74. package/dist/cjs/shared/codec/json-serde.js +58 -0
  75. package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +2 -1
  76. package/dist/cjs/shared/codec/s3/client-types.js +6 -0
  77. package/dist/{shared → cjs/shared}/codec/s3/client.d.ts +25 -7
  78. package/dist/cjs/shared/codec/s3/client.js +78 -0
  79. package/dist/{shared → cjs/shared}/codec/s3/config.d.ts +12 -7
  80. package/dist/cjs/shared/codec/s3/config.js +92 -0
  81. package/dist/{shared → cjs/shared}/codec/s3/lifecycle.d.ts +71 -17
  82. package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
  83. package/dist/{shared → cjs/shared}/codec/s3/offloader.d.ts +42 -29
  84. package/dist/cjs/shared/codec/s3/offloader.js +289 -0
  85. package/dist/cjs/shared/concurrency.js +31 -0
  86. package/dist/{shared → cjs/shared}/dynamodb/abort.d.ts +2 -2
  87. package/dist/cjs/shared/dynamodb/abort.js +16 -0
  88. package/dist/{shared → cjs/shared}/dynamodb/batch-write.d.ts +2 -2
  89. package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
  90. package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
  91. package/dist/{shared → cjs/shared}/dynamodb/client.d.ts +24 -22
  92. package/dist/cjs/shared/dynamodb/client.js +40 -0
  93. package/dist/{shared → cjs/shared}/dynamodb/idempotent-write.d.ts +64 -19
  94. package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
  95. package/dist/{shared → cjs/shared}/dynamodb/paginate.d.ts +2 -2
  96. package/dist/cjs/shared/dynamodb/paginate.js +90 -0
  97. package/dist/{shared → cjs/shared}/dynamodb/partition-delete.d.ts +6 -6
  98. package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
  99. package/dist/{shared → cjs/shared}/dynamodb/recency-index.d.ts +27 -15
  100. package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
  101. package/dist/{shared → cjs/shared}/dynamodb/retry.d.ts +37 -6
  102. package/dist/cjs/shared/dynamodb/retry.js +193 -0
  103. package/dist/cjs/shared/dynamodb/row-size.d.ts +33 -0
  104. package/dist/cjs/shared/dynamodb/row-size.js +30 -0
  105. package/dist/{shared → cjs/shared}/dynamodb/table-schema.d.ts +27 -18
  106. package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
  107. package/dist/{shared → cjs/shared}/errors/base-error.d.ts +42 -7
  108. package/dist/cjs/shared/errors/base-error.js +73 -0
  109. package/dist/{shared → cjs/shared}/errors/boundary.d.ts +29 -14
  110. package/dist/cjs/shared/errors/boundary.js +61 -0
  111. package/dist/cjs/shared/errors/classify.d.ts +206 -0
  112. package/dist/cjs/shared/errors/classify.js +232 -0
  113. package/dist/{shared → cjs/shared}/errors/error-code.d.ts +17 -10
  114. package/dist/cjs/shared/errors/error-code.js +27 -0
  115. package/dist/{shared → cjs/shared}/errors/errors.d.ts +75 -9
  116. package/dist/cjs/shared/errors/errors.js +123 -0
  117. package/dist/cjs/shared/logging/logger.js +30 -0
  118. package/dist/{shared → cjs/shared}/logging/redaction.d.ts +8 -4
  119. package/dist/cjs/shared/logging/redaction.js +145 -0
  120. package/dist/{shared → cjs/shared}/logging/secret-patterns.d.ts +30 -7
  121. package/dist/cjs/shared/logging/secret-patterns.js +93 -0
  122. package/dist/cjs/shared/logging/truncate.js +31 -0
  123. package/dist/{shared → cjs/shared}/options.d.ts +27 -11
  124. package/dist/cjs/shared/options.js +2 -0
  125. package/dist/cjs/shared/ulid.js +83 -0
  126. package/dist/{shared → cjs/shared}/validation/collaborators.d.ts +21 -2
  127. package/dist/cjs/shared/validation/collaborators.js +79 -0
  128. package/dist/{shared → cjs/shared}/validation/option-shape.d.ts +7 -5
  129. package/dist/cjs/shared/validation/option-shape.js +31 -0
  130. package/dist/{shared → cjs/shared}/validation/options.d.ts +4 -4
  131. package/dist/cjs/shared/validation/options.js +166 -0
  132. package/dist/cjs/shared/validation/primitives.js +114 -0
  133. package/dist/{shared → cjs/shared}/validation/ttl.d.ts +26 -9
  134. package/dist/cjs/shared/validation/ttl.js +52 -0
  135. package/dist/{store → cjs/store}/actions/list-namespaces.d.ts +5 -5
  136. package/dist/cjs/store/actions/list-namespaces.js +92 -0
  137. package/dist/{store → cjs/store}/actions/put.d.ts +11 -4
  138. package/dist/cjs/store/actions/put.js +49 -0
  139. package/dist/{store → cjs/store}/actions/reconcile-vector-index.d.ts +5 -5
  140. package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
  141. package/dist/{store → cjs/store}/actions/search.d.ts +2 -2
  142. package/dist/cjs/store/actions/search.js +26 -0
  143. package/dist/cjs/store/internal/batch-plan.d.ts +56 -0
  144. package/dist/cjs/store/internal/batch-plan.js +32 -0
  145. package/dist/{store → cjs/store}/internal/filter.d.ts +3 -3
  146. package/dist/cjs/store/internal/filter.js +64 -0
  147. package/dist/cjs/store/internal/get-item.d.ts +77 -0
  148. package/dist/cjs/store/internal/get-item.js +58 -0
  149. package/dist/{store → cjs/store}/internal/item-write.d.ts +72 -32
  150. package/dist/cjs/store/internal/item-write.js +181 -0
  151. package/dist/{store → cjs/store}/internal/parse.d.ts +15 -10
  152. package/dist/cjs/store/internal/parse.js +180 -0
  153. package/dist/{store → cjs/store}/internal/rows.d.ts +38 -34
  154. package/dist/cjs/store/internal/rows.js +166 -0
  155. package/dist/{store → cjs/store}/internal/semantic-search.d.ts +2 -2
  156. package/dist/cjs/store/internal/semantic-search.js +211 -0
  157. package/dist/{store → cjs/store}/internal/setup.d.ts +10 -15
  158. package/dist/cjs/store/internal/setup.js +103 -0
  159. package/dist/{store → cjs/store}/internal/table-search.d.ts +5 -5
  160. package/dist/cjs/store/internal/table-search.js +123 -0
  161. package/dist/{store → cjs/store}/internal/vector-index.d.ts +26 -15
  162. package/dist/cjs/store/internal/vector-index.js +269 -0
  163. package/dist/{store → cjs/store}/store.d.ts +82 -39
  164. package/dist/cjs/store/store.js +97 -0
  165. package/dist/{store → cjs/store}/types.d.ts +25 -10
  166. package/dist/cjs/store/types.js +2 -0
  167. package/dist/cjs/store/vector-backend.js +4 -0
  168. package/dist/esm/backfill/backfill.d.ts +171 -0
  169. package/dist/esm/backfill/backfill.js +170 -0
  170. package/dist/{checkpointer/actions/delete-thread.js → esm/checkpointer/actions/delete-thread.d.ts} +4 -26
  171. package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
  172. package/dist/{checkpointer/actions/get-tuple.js → esm/checkpointer/actions/get-tuple.d.ts} +7 -24
  173. package/dist/esm/checkpointer/actions/get-tuple.js +19 -0
  174. package/dist/esm/checkpointer/actions/list.d.ts +55 -0
  175. package/dist/esm/checkpointer/actions/list.js +67 -0
  176. package/dist/{checkpointer/actions/put-writes.js → esm/checkpointer/actions/put-writes.d.ts} +10 -37
  177. package/dist/esm/checkpointer/actions/put-writes.js +18 -0
  178. package/dist/esm/checkpointer/actions/put.d.ts +95 -0
  179. package/dist/esm/checkpointer/actions/put.js +75 -0
  180. package/dist/esm/checkpointer/internal/delta-history.d.ts +124 -0
  181. package/dist/esm/checkpointer/internal/delta-history.js +126 -0
  182. package/dist/{checkpointer/internal/listing.js → esm/checkpointer/internal/listing.d.ts} +22 -118
  183. package/dist/esm/checkpointer/internal/listing.js +95 -0
  184. package/dist/esm/checkpointer/internal/parse.d.ts +298 -0
  185. package/dist/esm/checkpointer/internal/parse.js +169 -0
  186. package/dist/esm/checkpointer/internal/pending-writes.d.ts +314 -0
  187. package/dist/esm/checkpointer/internal/pending-writes.js +229 -0
  188. package/dist/esm/checkpointer/internal/read.d.ts +135 -0
  189. package/dist/esm/checkpointer/internal/read.js +125 -0
  190. package/dist/esm/checkpointer/internal/rows.d.ts +644 -0
  191. package/dist/esm/checkpointer/internal/rows.js +323 -0
  192. package/dist/esm/checkpointer/internal/setup.d.ts +47 -0
  193. package/dist/esm/checkpointer/internal/setup.js +21 -0
  194. package/dist/{checkpointer/saver.js → esm/checkpointer/saver.d.ts} +84 -87
  195. package/dist/esm/checkpointer/saver.js +52 -0
  196. package/dist/esm/checkpointer/types.d.ts +51 -0
  197. package/dist/esm/checkpointer/types.js +1 -0
  198. package/dist/esm/factory/factory.d.ts +154 -0
  199. package/dist/esm/factory/factory.js +133 -0
  200. package/dist/esm/factory/types.d.ts +76 -0
  201. package/dist/esm/factory/types.js +1 -0
  202. package/dist/{history/actions/add-messages.js → esm/history/actions/add-messages.d.ts} +20 -26
  203. package/dist/esm/history/actions/add-messages.js +14 -0
  204. package/dist/{history/actions/clear.js → esm/history/actions/clear.d.ts} +4 -35
  205. package/dist/esm/history/actions/clear.js +26 -0
  206. package/dist/esm/history/actions/get-messages.d.ts +60 -0
  207. package/dist/esm/history/actions/get-messages.js +55 -0
  208. package/dist/esm/history/actions/list-sessions.d.ts +55 -0
  209. package/dist/esm/history/actions/list-sessions.js +64 -0
  210. package/dist/{history/actions/reconcile-count.js → esm/history/actions/reconcile-count.d.ts} +14 -16
  211. package/dist/esm/history/actions/reconcile-count.js +5 -0
  212. package/dist/{history/chat-message-history.js → esm/history/chat-message-history.d.ts} +76 -87
  213. package/dist/esm/history/chat-message-history.js +57 -0
  214. package/dist/esm/history/internal/append.d.ts +244 -0
  215. package/dist/esm/history/internal/append.js +259 -0
  216. package/dist/esm/history/internal/message-read.d.ts +84 -0
  217. package/dist/esm/history/internal/message-read.js +89 -0
  218. package/dist/esm/history/internal/parse.d.ts +153 -0
  219. package/dist/esm/history/internal/parse.js +105 -0
  220. package/dist/{history/internal/rows.js → esm/history/internal/rows.d.ts} +58 -112
  221. package/dist/esm/history/internal/rows.js +83 -0
  222. package/dist/esm/history/internal/session.d.ts +350 -0
  223. package/dist/esm/history/internal/session.js +285 -0
  224. package/dist/esm/history/internal/setup.d.ts +64 -0
  225. package/dist/esm/history/internal/setup.js +56 -0
  226. package/dist/{history/session-adapter.js → esm/history/session-adapter.d.ts} +25 -39
  227. package/dist/esm/history/session-adapter.js +34 -0
  228. package/dist/esm/history/types.d.ts +102 -0
  229. package/dist/esm/history/types.js +1 -0
  230. package/dist/esm/index.d.ts +53 -0
  231. package/dist/esm/index.js +10 -0
  232. package/dist/esm/shared/adapter.d.ts +146 -0
  233. package/dist/esm/shared/adapter.js +65 -0
  234. package/dist/{shared/clock.js → esm/shared/clock.d.ts} +3 -14
  235. package/dist/esm/shared/clock.js +9 -0
  236. package/dist/esm/shared/codec/codec.d.ts +336 -0
  237. package/dist/esm/shared/codec/codec.js +150 -0
  238. package/dist/esm/shared/codec/compression.d.ts +66 -0
  239. package/dist/esm/shared/codec/compression.js +40 -0
  240. package/dist/esm/shared/codec/json-serde.d.ts +80 -0
  241. package/dist/esm/shared/codec/json-serde.js +54 -0
  242. package/dist/esm/shared/codec/s3/client-types.d.ts +54 -0
  243. package/dist/esm/shared/codec/s3/client-types.js +3 -0
  244. package/dist/esm/shared/codec/s3/client.d.ts +63 -0
  245. package/dist/esm/shared/codec/s3/client.js +40 -0
  246. package/dist/{shared/codec/s3/config.js → esm/shared/codec/s3/config.d.ts} +45 -93
  247. package/dist/esm/shared/codec/s3/config.js +79 -0
  248. package/dist/esm/shared/codec/s3/lifecycle.d.ts +220 -0
  249. package/dist/esm/shared/codec/s3/lifecycle.js +214 -0
  250. package/dist/esm/shared/codec/s3/offloader.d.ts +428 -0
  251. package/dist/esm/shared/codec/s3/offloader.js +278 -0
  252. package/dist/{shared/concurrency.js → esm/shared/concurrency.d.ts} +2 -37
  253. package/dist/esm/shared/concurrency.js +27 -0
  254. package/dist/{shared/dynamodb/abort.js → esm/shared/dynamodb/abort.d.ts} +4 -16
  255. package/dist/esm/shared/dynamodb/abort.js +12 -0
  256. package/dist/esm/shared/dynamodb/batch-write.d.ts +86 -0
  257. package/dist/esm/shared/dynamodb/batch-write.js +74 -0
  258. package/dist/{shared/dynamodb/cancellation.js → esm/shared/dynamodb/cancellation.d.ts} +25 -53
  259. package/dist/esm/shared/dynamodb/cancellation.js +30 -0
  260. package/dist/{shared/dynamodb/client.js → esm/shared/dynamodb/client.d.ts} +74 -64
  261. package/dist/esm/shared/dynamodb/client.js +35 -0
  262. package/dist/{shared/dynamodb/idempotent-write.js → esm/shared/dynamodb/idempotent-write.d.ts} +172 -169
  263. package/dist/esm/shared/dynamodb/idempotent-write.js +153 -0
  264. package/dist/esm/shared/dynamodb/paginate.d.ts +111 -0
  265. package/dist/esm/shared/dynamodb/paginate.js +84 -0
  266. package/dist/esm/shared/dynamodb/partition-delete.d.ts +204 -0
  267. package/dist/esm/shared/dynamodb/partition-delete.js +171 -0
  268. package/dist/esm/shared/dynamodb/recency-index.d.ts +243 -0
  269. package/dist/esm/shared/dynamodb/recency-index.js +136 -0
  270. package/dist/esm/shared/dynamodb/retry.d.ts +317 -0
  271. package/dist/esm/shared/dynamodb/retry.js +180 -0
  272. package/dist/esm/shared/dynamodb/row-size.d.ts +33 -0
  273. package/dist/esm/shared/dynamodb/row-size.js +26 -0
  274. package/dist/{shared/dynamodb/table-schema.js → esm/shared/dynamodb/table-schema.d.ts} +57 -67
  275. package/dist/esm/shared/dynamodb/table-schema.js +43 -0
  276. package/dist/esm/shared/errors/base-error.d.ts +231 -0
  277. package/dist/esm/shared/errors/base-error.js +64 -0
  278. package/dist/esm/shared/errors/boundary.d.ts +86 -0
  279. package/dist/esm/shared/errors/boundary.js +54 -0
  280. package/dist/esm/shared/errors/classify.d.ts +206 -0
  281. package/dist/esm/shared/errors/classify.js +220 -0
  282. package/dist/{shared/errors/error-code.js → esm/shared/errors/error-code.d.ts} +39 -43
  283. package/dist/esm/shared/errors/error-code.js +24 -0
  284. package/dist/{shared/errors/errors.js → esm/shared/errors/errors.d.ts} +92 -98
  285. package/dist/esm/shared/errors/errors.js +110 -0
  286. package/dist/{shared/logging/logger.js → esm/shared/logging/logger.d.ts} +22 -52
  287. package/dist/esm/shared/logging/logger.js +25 -0
  288. package/dist/esm/shared/logging/redaction.d.ts +123 -0
  289. package/dist/esm/shared/logging/redaction.js +140 -0
  290. package/dist/{shared/logging/secret-patterns.js → esm/shared/logging/secret-patterns.d.ts} +46 -87
  291. package/dist/esm/shared/logging/secret-patterns.js +83 -0
  292. package/dist/{shared/logging/truncate.js → esm/shared/logging/truncate.d.ts} +6 -40
  293. package/dist/esm/shared/logging/truncate.js +25 -0
  294. package/dist/esm/shared/options.d.ts +100 -0
  295. package/dist/esm/shared/options.js +1 -0
  296. package/dist/{shared/ulid.js → esm/shared/ulid.d.ts} +4 -84
  297. package/dist/esm/shared/ulid.js +77 -0
  298. package/dist/{shared/validation/collaborators.js → esm/shared/validation/collaborators.d.ts} +37 -65
  299. package/dist/esm/shared/validation/collaborators.js +70 -0
  300. package/dist/{shared/validation/option-shape.js → esm/shared/validation/option-shape.d.ts} +14 -36
  301. package/dist/esm/shared/validation/option-shape.js +24 -0
  302. package/dist/esm/shared/validation/options.d.ts +145 -0
  303. package/dist/esm/shared/validation/options.js +156 -0
  304. package/dist/{shared/validation/primitives.js → esm/shared/validation/primitives.d.ts} +30 -125
  305. package/dist/esm/shared/validation/primitives.js +100 -0
  306. package/dist/esm/shared/validation/ttl.d.ts +94 -0
  307. package/dist/esm/shared/validation/ttl.js +46 -0
  308. package/dist/esm/store/actions/list-namespaces.d.ts +79 -0
  309. package/dist/esm/store/actions/list-namespaces.js +86 -0
  310. package/dist/esm/store/actions/put.d.ts +43 -0
  311. package/dist/esm/store/actions/put.js +46 -0
  312. package/dist/{store/actions/reconcile-vector-index.js → esm/store/actions/reconcile-vector-index.d.ts} +8 -16
  313. package/dist/esm/store/actions/reconcile-vector-index.js +10 -0
  314. package/dist/esm/store/actions/search.d.ts +38 -0
  315. package/dist/esm/store/actions/search.js +23 -0
  316. package/dist/esm/store/internal/batch-plan.d.ts +56 -0
  317. package/dist/esm/store/internal/batch-plan.js +28 -0
  318. package/dist/esm/store/internal/filter.d.ts +43 -0
  319. package/dist/esm/store/internal/filter.js +60 -0
  320. package/dist/esm/store/internal/get-item.d.ts +77 -0
  321. package/dist/esm/store/internal/get-item.js +54 -0
  322. package/dist/esm/store/internal/item-write.d.ts +270 -0
  323. package/dist/esm/store/internal/item-write.js +173 -0
  324. package/dist/esm/store/internal/parse.d.ts +230 -0
  325. package/dist/esm/store/internal/parse.js +169 -0
  326. package/dist/{store/internal/rows.js → esm/store/internal/rows.d.ts} +111 -199
  327. package/dist/esm/store/internal/rows.js +147 -0
  328. package/dist/esm/store/internal/semantic-search.d.ts +168 -0
  329. package/dist/esm/store/internal/semantic-search.js +200 -0
  330. package/dist/esm/store/internal/setup.d.ts +96 -0
  331. package/dist/esm/store/internal/setup.js +98 -0
  332. package/dist/esm/store/internal/table-search.d.ts +100 -0
  333. package/dist/esm/store/internal/table-search.js +119 -0
  334. package/dist/esm/store/internal/vector-index.d.ts +258 -0
  335. package/dist/esm/store/internal/vector-index.js +256 -0
  336. package/dist/{store/store.js → esm/store/store.d.ts} +99 -133
  337. package/dist/esm/store/store.js +93 -0
  338. package/dist/esm/store/types.d.ts +111 -0
  339. package/dist/esm/store/types.js +1 -0
  340. package/dist/esm/store/vector-backend.d.ts +104 -0
  341. package/dist/esm/store/vector-backend.js +1 -0
  342. package/package.json +50 -44
  343. package/dist/backfill/backfill.js +0 -393
  344. package/dist/checkpointer/actions/list.js +0 -142
  345. package/dist/checkpointer/actions/put.js +0 -195
  346. package/dist/checkpointer/internal/delta-history.js +0 -252
  347. package/dist/checkpointer/internal/parse.js +0 -372
  348. package/dist/checkpointer/internal/pending-writes.js +0 -588
  349. package/dist/checkpointer/internal/read.js +0 -264
  350. package/dist/checkpointer/internal/rows.js +0 -834
  351. package/dist/checkpointer/internal/setup.js +0 -72
  352. package/dist/checkpointer/types.js +0 -12
  353. package/dist/factory/factory.js +0 -266
  354. package/dist/factory/types.js +0 -10
  355. package/dist/history/actions/get-messages.js +0 -141
  356. package/dist/history/actions/list-sessions.js +0 -156
  357. package/dist/history/internal/append.js +0 -500
  358. package/dist/history/internal/message-read.js +0 -204
  359. package/dist/history/internal/parse.js +0 -252
  360. package/dist/history/internal/session.js +0 -628
  361. package/dist/history/internal/setup.js +0 -106
  362. package/dist/history/types.js +0 -12
  363. package/dist/index.js +0 -51
  364. package/dist/shared/adapter.js +0 -143
  365. package/dist/shared/codec/codec.js +0 -441
  366. package/dist/shared/codec/compression.js +0 -89
  367. package/dist/shared/codec/json-serde.js +0 -191
  368. package/dist/shared/codec/s3/client-types.js +0 -26
  369. package/dist/shared/codec/s3/client.js +0 -97
  370. package/dist/shared/codec/s3/lifecycle.js +0 -355
  371. package/dist/shared/codec/s3/offloader.js +0 -658
  372. package/dist/shared/dynamodb/batch-write.js +0 -173
  373. package/dist/shared/dynamodb/paginate.js +0 -188
  374. package/dist/shared/dynamodb/partition-delete.js +0 -340
  375. package/dist/shared/dynamodb/recency-index.js +0 -377
  376. package/dist/shared/dynamodb/retry.js +0 -463
  377. package/dist/shared/errors/base-error.js +0 -174
  378. package/dist/shared/errors/boundary.js +0 -143
  379. package/dist/shared/errors/classify.d.ts +0 -97
  380. package/dist/shared/errors/classify.js +0 -257
  381. package/dist/shared/logging/redaction.js +0 -316
  382. package/dist/shared/options.js +0 -11
  383. package/dist/shared/validation/options.js +0 -328
  384. package/dist/shared/validation/ttl.js +0 -132
  385. package/dist/store/actions/list-namespaces.js +0 -197
  386. package/dist/store/actions/put.js +0 -78
  387. package/dist/store/actions/search.js +0 -66
  388. package/dist/store/internal/batch-plan.d.ts +0 -26
  389. package/dist/store/internal/batch-plan.js +0 -109
  390. package/dist/store/internal/filter.js +0 -137
  391. package/dist/store/internal/get-item.d.ts +0 -45
  392. package/dist/store/internal/get-item.js +0 -115
  393. package/dist/store/internal/item-write.js +0 -463
  394. package/dist/store/internal/parse.js +0 -350
  395. package/dist/store/internal/semantic-search.js +0 -389
  396. package/dist/store/internal/setup.js +0 -223
  397. package/dist/store/internal/table-search.js +0 -213
  398. package/dist/store/internal/vector-index.js +0 -546
  399. package/dist/store/types.js +0 -15
  400. package/dist/store/vector-backend.js +0 -17
  401. /package/dist/{shared → cjs/shared}/clock.d.ts +0 -0
  402. /package/dist/{shared → cjs/shared}/codec/json-serde.d.ts +0 -0
  403. /package/dist/{shared → cjs/shared}/concurrency.d.ts +0 -0
  404. /package/dist/{shared → cjs/shared}/dynamodb/cancellation.d.ts +0 -0
  405. /package/dist/{shared → cjs/shared}/logging/logger.d.ts +0 -0
  406. /package/dist/{shared → cjs/shared}/logging/truncate.d.ts +0 -0
  407. /package/dist/{shared → cjs/shared}/ulid.d.ts +0 -0
  408. /package/dist/{shared → cjs/shared}/validation/primitives.d.ts +0 -0
  409. /package/dist/{store → cjs/store}/vector-backend.d.ts +0 -0
@@ -0,0 +1,140 @@
1
+ import { validationError } from '../errors/errors.js';
2
+ import { assertMembers, LOGGER_MEMBERS } from '../validation/collaborators.js';
3
+ import { assertObjectShape } from '../validation/option-shape.js';
4
+ import { assertStringArray } from '../validation/primitives.js';
5
+ import { absorbLoggerFailure } from './logger.js';
6
+ import { binaryLabel, DEFAULT_SECRET_KEY_PATTERNS, DEFAULT_SECRET_VALUE_PATTERNS, isRegExp, isSecretKey, normaliseKey, REDACTED, redactErrorText, redactText, } from './secret-patterns.js';
7
+ const UNREDACTABLE = '[UNREDACTABLE]';
8
+ function assertRegExpArray(value, field) {
9
+ if (!Array.isArray(value) || value.some((entry) => !isRegExp(entry))) {
10
+ throw validationError(`${field} must be an array of RegExp`, field);
11
+ }
12
+ }
13
+ function assertKeyPatterns(value, field) {
14
+ assertStringArray(value, field);
15
+ if (value.some((entry) => normaliseKey(entry) === '')) {
16
+ throw validationError(`${field} must name a letter or digit in every entry`, field);
17
+ }
18
+ }
19
+ export function redactSecrets(value, patterns = DEFAULT_SECRET_KEY_PATTERNS, valuePatterns = DEFAULT_SECRET_VALUE_PATTERNS) {
20
+ assertKeyPatterns(patterns, 'patterns');
21
+ assertRegExpArray(valuePatterns, 'valuePatterns');
22
+ const keyPatterns = patterns.map(normaliseKey);
23
+ const walking = new WeakSet();
24
+ const done = new WeakMap();
25
+ const walk = (current) => {
26
+ if (typeof current === 'string')
27
+ return redactText(current, valuePatterns);
28
+ if (current === null || typeof current !== 'object')
29
+ return current;
30
+ if (done.has(current))
31
+ return done.get(current);
32
+ if (walking.has(current))
33
+ return '[Circular]';
34
+ walking.add(current);
35
+ try {
36
+ const redacted = walkObject(current, { keyPatterns, valuePatterns, walk });
37
+ done.set(current, redacted);
38
+ return redacted;
39
+ }
40
+ finally {
41
+ walking.delete(current);
42
+ }
43
+ };
44
+ try {
45
+ return walk(value);
46
+ }
47
+ catch {
48
+ return UNREDACTABLE;
49
+ }
50
+ }
51
+ function assertRedactionOptions(options) {
52
+ assertObjectShape(options, 'options');
53
+ if (options.extraKeys !== undefined)
54
+ assertKeyPatterns(options.extraKeys, 'extraKeys');
55
+ if (options.extraValuePatterns !== undefined) {
56
+ assertRegExpArray(options.extraValuePatterns, 'extraValuePatterns');
57
+ }
58
+ }
59
+ export function redactLogger(inner, options = {}) {
60
+ assertMembers(inner, LOGGER_MEMBERS, 'logger');
61
+ assertRedactionOptions(options);
62
+ const patterns = options.extraKeys
63
+ ? [...DEFAULT_SECRET_KEY_PATTERNS, ...options.extraKeys.map(normaliseKey)]
64
+ : DEFAULT_SECRET_KEY_PATTERNS;
65
+ const valuePatterns = options.extraValuePatterns
66
+ ? [...DEFAULT_SECRET_VALUE_PATTERNS, ...options.extraValuePatterns]
67
+ : DEFAULT_SECRET_VALUE_PATTERNS;
68
+ const deliver = (method) => (message, ...args) => absorbLoggerFailure(() => inner[method](message, ...args.map((arg) => redactSecrets(arg, patterns, valuePatterns))));
69
+ return {
70
+ info: deliver('info'),
71
+ warn: deliver('warn'),
72
+ error: deliver('error'),
73
+ debug: deliver('debug'),
74
+ };
75
+ }
76
+ function isSetValue(value) {
77
+ return Object.prototype.toString.call(value) === '[object Set]';
78
+ }
79
+ function isMapValue(value) {
80
+ return Object.prototype.toString.call(value) === '[object Map]';
81
+ }
82
+ function isErrorValue(value) {
83
+ const tag = Object.prototype.toString.call(value);
84
+ return tag === '[object Error]' || tag === '[object DOMException]';
85
+ }
86
+ function isOpaqueValue(value) {
87
+ const tag = Object.prototype.toString.call(value);
88
+ return tag === '[object Date]' || tag === '[object RegExp]';
89
+ }
90
+ function redactEntries(entries, keyPatterns, walk) {
91
+ const out = {};
92
+ for (const [key, value] of entries) {
93
+ Object.defineProperty(out, key, {
94
+ value: isSecretKey(key, keyPatterns) ? REDACTED : walk(value),
95
+ enumerable: true,
96
+ writable: true,
97
+ configurable: true,
98
+ });
99
+ }
100
+ return out;
101
+ }
102
+ function redactMap(value, deps) {
103
+ const entries = [...value].map(([key, entry]) => {
104
+ const keyText = key;
105
+ return [String(keyText), entry];
106
+ });
107
+ return redactEntries(entries, deps.keyPatterns, deps.walk);
108
+ }
109
+ function redactError(current, entries, deps) {
110
+ const text = redactErrorText(current, deps.valuePatterns);
111
+ const aggregated = current.errors;
112
+ const bare = entries.length === 0 && current.cause === undefined && aggregated === undefined;
113
+ if (bare && !text.changed)
114
+ return current;
115
+ const out = redactEntries(entries, deps.keyPatterns, deps.walk);
116
+ out.name = text.name;
117
+ out.message = text.message;
118
+ out.stack = text.stack;
119
+ if (current.cause !== undefined)
120
+ out.cause = deps.walk(current.cause);
121
+ if (Array.isArray(aggregated))
122
+ out.errors = deps.walk(aggregated);
123
+ return out;
124
+ }
125
+ export function walkObject(current, deps) {
126
+ if (Array.isArray(current))
127
+ return current.map(deps.walk);
128
+ if (ArrayBuffer.isView(current))
129
+ return binaryLabel(current);
130
+ if (isOpaqueValue(current))
131
+ return current;
132
+ if (isSetValue(current))
133
+ return [...current].map(deps.walk);
134
+ if (isMapValue(current))
135
+ return redactMap(current, deps);
136
+ const entries = Object.entries(current);
137
+ if (isErrorValue(current))
138
+ return redactError(current, entries, deps);
139
+ return redactEntries(entries, deps.keyPatterns, deps.walk);
140
+ }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  /**
3
2
  * Hides what a secret looks like.
4
3
  *
@@ -8,19 +7,8 @@
8
7
  * quotes it are decided here. The redacting logger and every error that
9
8
  * quotes its cause share these rules, so a new credential shape is one edit.
10
9
  */
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.DEFAULT_SECRET_VALUE_PATTERNS = exports.DEFAULT_SECRET_KEY_PATTERNS = exports.REDACTED = void 0;
13
- exports.normaliseKey = normaliseKey;
14
- exports.isSecretKey = isSecretKey;
15
- exports.redactedMessage = redactedMessage;
16
- exports.isRegExp = isRegExp;
17
- exports.redactText = redactText;
18
- exports.binaryLabel = binaryLabel;
19
- exports.redactErrorText = redactErrorText;
20
- const base_error_1 = require("../errors/base-error");
21
- const truncate_1 = require("./truncate");
22
10
  /** Marker substituted for anything recognised as secret. */
23
- exports.REDACTED = '[REDACTED]';
11
+ export declare const REDACTED = "[REDACTED]";
24
12
  /**
25
13
  * Key names whose value is a secret. Each entry is a *normalised* name — see
26
14
  * {@link normaliseKey} — and matches a key whose normalised form equals it or
@@ -30,21 +18,7 @@ exports.REDACTED = '[REDACTED]';
30
18
  * `secretary` — a bare substring match would redact all four for merely
31
19
  * containing `token` or `secret`.
32
20
  */
33
- exports.DEFAULT_SECRET_KEY_PATTERNS = [
34
- 'accesskey',
35
- 'accesskeyid',
36
- 'secret',
37
- 'sessiontoken',
38
- 'securitytoken',
39
- 'authorization',
40
- 'password',
41
- 'passwd',
42
- 'passphrase',
43
- 'apikey',
44
- 'bearer',
45
- 'token',
46
- 'privatekey',
47
- ];
21
+ export declare const DEFAULT_SECRET_KEY_PATTERNS: readonly string[];
48
22
  /**
49
23
  * Canonical form of a key name for matching.
50
24
  *
@@ -56,9 +30,7 @@ exports.DEFAULT_SECRET_KEY_PATTERNS = [
56
30
  *
57
31
  * Throws: nothing.
58
32
  */
59
- function normaliseKey(key) {
60
- return key.toLowerCase().replace(/[^a-z0-9]/g, '');
61
- }
33
+ export declare function normaliseKey(key: string): string;
62
34
  /**
63
35
  * Secret shapes recognisable in free text, where key-name matching cannot
64
36
  * reach: an error's `message`/`stack`, or any other string value. Deliberately
@@ -68,15 +40,23 @@ function normaliseKey(key) {
68
40
  *
69
41
  * The credential-pair pattern (last) tolerates a **closing quote after the
70
42
  * keyword**, because that is what `JSON.stringify` produces
71
- * (`{"password":"…"}`) and requiring the separator to follow the bare keyword
72
- * matched nothing at all there — a silent, complete bypass on the single most
73
- * common shape a downstream HTTP error arrives in. Its group 1 is the keyword
74
- * and separator, preserved by {@link redactText}.
75
- *
76
- * Its value side tries three shapes, and their order is load-bearing:
43
+ * (`{"password":"…"}`), and a backslash before that quote, because a JSON body
44
+ * quoted inside another JSON string — the shape a logged HTTP error carries —
45
+ * reads `{\"password\":\"…\"}`; requiring the separator to follow the bare
46
+ * keyword would match nothing in either, a silent, complete bypass on the
47
+ * most common shapes a downstream error arrives in. Its keywords include the
48
+ * hyphenated and spaced spellings of an API key (`x-api-key`, `api key`), a
49
+ * secret key and a client secret. Its group 1 is the keyword and separator,
50
+ * preserved by {@link redactText}.
51
+ *
52
+ * Its value side tries four shapes, and their order is load-bearing:
77
53
  * 1. a fully-quoted span that consumes escapes, so `{"password":"a\"b"}` is
78
54
  * redacted whole. Ending the span at the escaped quote stopped the
79
55
  * redaction short and printed the rest of the secret verbatim.
56
+ * 1b. a span quoted with escaped quotes, `\"…\"`, the doubly encoded form of
57
+ * the first; it ends at the next quote, so a quote inside such a secret
58
+ * leaves its tail in the clear, and the sibling fields after it stay
59
+ * intact where the line-end fallback would take them too.
80
60
  * 2. an unquoted JSON scalar — number, `true`, `false`, `null` — required to
81
61
  * end at a real delimiter — `,`, `}`, `]` or end of input, optionally
82
62
  * preceded by whitespace. Without this alternative,
@@ -90,13 +70,19 @@ function normaliseKey(key) {
90
70
  * 3. the rest of the line, so a multi-word secret is redacted whole instead of
91
71
  * up to its first space. Trying the two precise shapes first is what keeps
92
72
  * this fallback from over-redacting sibling JSON fields.
73
+ *
74
+ * The JWT pattern (third) must scan in linear time, because these patterns
75
+ * run on text a caller controls — anything passed to `redactSecrets` or
76
+ * `redactLogger`, and an error's whole message before `redactedMessage` cuts
77
+ * it. A token's header segment is therefore not allowed to run across a `-`
78
+ * that opens another `eyJ`: written as `eyJ[A-Za-z0-9_-]+`, every `-eyJ` in a
79
+ * long run of token characters started a fresh scan to the end of the run, so
80
+ * 400 KB of `-eyJ` held the event loop for about 13 seconds. The only output
81
+ * this changes is a token whose header segment itself contains `-eyJ`: it is
82
+ * redacted from that point on, which can leave part of the header — never the
83
+ * payload or the signature — in the clear.
93
84
  */
94
- exports.DEFAULT_SECRET_VALUE_PATTERNS = [
95
- /\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/g,
96
- /\bBearer\s+[A-Za-z0-9._~+/-]+=*/gi,
97
- /\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,
98
- /((?:aws_)?(?:secret_access_key|secretaccesskey|password|passwd|api_?key|token)["']?\s*[=:]\s*)(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|(?:-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|true|false|null)(?=\s*[,}\]]|\s*$)|[^\r\n]+)/gi,
99
- ];
85
+ export declare const DEFAULT_SECRET_VALUE_PATTERNS: readonly RegExp[];
100
86
  /**
101
87
  * Whether a key name says its value is a secret.
102
88
  *
@@ -109,10 +95,7 @@ exports.DEFAULT_SECRET_VALUE_PATTERNS = [
109
95
  *
110
96
  * Throws: nothing.
111
97
  */
112
- function isSecretKey(key, patterns) {
113
- const normalised = normaliseKey(key);
114
- return patterns.some((pattern) => normalised === pattern || normalised.endsWith(pattern));
115
- }
98
+ export declare function isSecretKey(key: string, patterns: readonly string[]): boolean;
116
99
  /**
117
100
  * An error's message with recognised credential shapes redacted.
118
101
  *
@@ -146,22 +129,7 @@ function isSecretKey(key, patterns) {
146
129
  * blocks into. Its promise has to hold for what a `catch` actually binds, or
147
130
  * the guard concentrates every site into a function that is not safe.
148
131
  */
149
- function redactedMessage(error) {
150
- return (0, truncate_1.truncateRelayedText)(redactText((0, base_error_1.toError)(error).message, exports.DEFAULT_SECRET_VALUE_PATTERNS));
151
- }
152
- /**
153
- * A fresh, global copy of `pattern`.
154
- *
155
- * Rebuilt per call so a `g` flag's `lastIndex` never leaks between
156
- * invocations, and **forced** global: `String.prototype.replace` without `g`
157
- * substitutes only the first match, so a caller-supplied pattern written
158
- * without the flag would redact the first occurrence of a secret and print
159
- * every later one verbatim.
160
- */
161
- function globalCopyOf(pattern) {
162
- const flags = pattern.flags.includes('g') ? pattern.flags : `${pattern.flags}g`;
163
- return new RegExp(pattern.source, flags);
164
- }
132
+ export declare function redactedMessage(error: Error): string;
165
133
  /**
166
134
  * Whether `value` is a regular expression.
167
135
  *
@@ -173,9 +141,7 @@ function globalCopyOf(pattern) {
173
141
  *
174
142
  * Throws: nothing.
175
143
  */
176
- function isRegExp(value) {
177
- return Object.prototype.toString.call(value) === '[object RegExp]';
178
- }
144
+ export declare function isRegExp(value: RegExp): boolean;
179
145
  /**
180
146
  * Replace every recognised secret shape inside `value` with {@link REDACTED},
181
147
  * leaving the surrounding text intact so a redacted message stays readable.
@@ -204,13 +170,7 @@ function isRegExp(value) {
204
170
  * neither a missing `g` flag nor a leftover `lastIndex` can leave a later
205
171
  * occurrence in the clear.
206
172
  */
207
- function redactText(value, patterns) {
208
- return patterns.reduce((text, pattern) => {
209
- if (!isRegExp(pattern))
210
- return text;
211
- return text.replace(globalCopyOf(pattern), (_match, prefix) => typeof prefix === 'string' ? `${prefix}${exports.REDACTED}` : exports.REDACTED);
212
- }, value);
213
- }
173
+ export declare function redactText(value: string, patterns: readonly RegExp[]): string;
214
174
  /**
215
175
  * A short label for a binary view.
216
176
  *
@@ -223,8 +183,13 @@ function redactText(value, patterns) {
223
183
  *
224
184
  * Throws: nothing.
225
185
  */
226
- function binaryLabel(value) {
227
- return `[${value.constructor.name}(${value.byteLength})]`;
186
+ export declare function binaryLabel(value: ArrayBufferView): string;
187
+ /** An Error's redacted non-enumerable text, plus whether redaction changed it. */
188
+ export interface RedactedErrorText {
189
+ name: string;
190
+ message: string;
191
+ stack: string | undefined;
192
+ changed: boolean;
228
193
  }
229
194
  /**
230
195
  * Redact an Error's `name`, `message` and `stack`.
@@ -253,16 +218,10 @@ function binaryLabel(value) {
253
218
  * for truncation. A consumer who wants a bound has their own transport to put
254
219
  * one in.
255
220
  *
256
- * Throws: **nothing**, for any value.
221
+ * Throws: **nothing**, for any value: a `name` or `stack` that cannot be read
222
+ * — a getter of the consumer's own that throws, a `name` whose `toString`
223
+ * throws — is reported as `[unreadable name]` or `[unreadable stack]`, since
224
+ * the one thing this must not do on the way to the consumer's transport is
225
+ * fail.
257
226
  */
258
- function redactErrorText(error, patterns) {
259
- const described = (0, base_error_1.toError)(error);
260
- const message = redactText(described.message, patterns);
261
- const stack = described.stack === undefined ? undefined : redactText(described.stack, patterns);
262
- return {
263
- name: described.name,
264
- message,
265
- stack,
266
- changed: message !== described.message || stack !== described.stack,
267
- };
268
- }
227
+ export declare function redactErrorText(error: Error, patterns: readonly RegExp[]): RedactedErrorText;
@@ -0,0 +1,83 @@
1
+ import { toError } from '../errors/base-error.js';
2
+ import { truncateRelayedText } from './truncate.js';
3
+ export const REDACTED = '[REDACTED]';
4
+ export const DEFAULT_SECRET_KEY_PATTERNS = [
5
+ 'accesskey',
6
+ 'accesskeyid',
7
+ 'secret',
8
+ 'sessiontoken',
9
+ 'securitytoken',
10
+ 'authorization',
11
+ 'password',
12
+ 'passwd',
13
+ 'passphrase',
14
+ 'apikey',
15
+ 'bearer',
16
+ 'token',
17
+ 'privatekey',
18
+ 'secretkey',
19
+ ];
20
+ export function normaliseKey(key) {
21
+ return key.toLowerCase().replace(/[^a-z0-9]/g, '');
22
+ }
23
+ export const DEFAULT_SECRET_VALUE_PATTERNS = [
24
+ /\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/g,
25
+ /\bBearer\s+[A-Za-z0-9._~+/-]+=*/gi,
26
+ /\beyJ(?:[A-Za-z0-9_]|-(?!eyJ))+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,
27
+ /((?:aws_)?(?:secret_access_key|secretaccesskey|secret_?key|client_?secret|password|passwd|api[-_ ]?key|token)(?:\\?["'])?\s*[=:]\s*)(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\\"[^"\r\n]*\\"|\\'[^'\r\n]*\\'|(?:-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|true|false|null)(?=\s*[,}\]]|\s*$)|[^\r\n]+)/gi,
28
+ ];
29
+ export function isSecretKey(key, patterns) {
30
+ const normalised = normaliseKey(key);
31
+ return patterns.some((pattern) => normalised === pattern || normalised.endsWith(pattern));
32
+ }
33
+ export function redactedMessage(error) {
34
+ return truncateRelayedText(redactText(toError(error).message, DEFAULT_SECRET_VALUE_PATTERNS));
35
+ }
36
+ function globalCopyOf(pattern) {
37
+ const flags = pattern.flags.includes('g') ? pattern.flags : `${pattern.flags}g`;
38
+ return new RegExp(pattern.source, flags);
39
+ }
40
+ export function isRegExp(value) {
41
+ return Object.prototype.toString.call(value) === '[object RegExp]';
42
+ }
43
+ export function redactText(value, patterns) {
44
+ return patterns.reduce((text, pattern) => {
45
+ if (!isRegExp(pattern))
46
+ return text;
47
+ return text.replace(globalCopyOf(pattern), (_match, prefix) => typeof prefix === 'string' ? `${prefix}${REDACTED}` : REDACTED);
48
+ }, value);
49
+ }
50
+ export function binaryLabel(value) {
51
+ return `[${value.constructor.name}(${value.byteLength})]`;
52
+ }
53
+ export function redactErrorText(error, patterns) {
54
+ const described = toError(error);
55
+ const rawName = nameOf(described);
56
+ const rawStack = stackOf(described);
57
+ const name = redactText(rawName, patterns);
58
+ const message = redactText(described.message, patterns);
59
+ const stack = rawStack === undefined ? undefined : redactText(rawStack, patterns);
60
+ return {
61
+ name,
62
+ message,
63
+ stack,
64
+ changed: name !== rawName || message !== described.message || stack !== rawStack,
65
+ };
66
+ }
67
+ function nameOf(error) {
68
+ try {
69
+ return String(error.name);
70
+ }
71
+ catch {
72
+ return '[unreadable name]';
73
+ }
74
+ }
75
+ function stackOf(error) {
76
+ try {
77
+ const { stack } = error;
78
+ return stack === undefined ? undefined : String(stack);
79
+ }
80
+ catch {
81
+ return '[unreadable stack]';
82
+ }
83
+ }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  /**
3
2
  * Hides how much of an unchecked string a line may quote.
4
3
  *
@@ -8,11 +7,6 @@
8
7
  * cut value's real length, are chosen here, so a call site says what kind of
9
8
  * value it quotes and never how many characters it keeps.
10
9
  */
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.MAX_RELAYED_MESSAGE_CHARS = exports.MAX_LOGGED_LABELS = exports.MAX_LOGGED_VALUE_CHARS = void 0;
13
- exports.truncateForLog = truncateForLog;
14
- exports.truncateRelayedText = truncateRelayedText;
15
- exports.truncateLabelsForLog = truncateLabelsForLog;
16
10
  /**
17
11
  * Characters of an unchecked string one log line or one public error message
18
12
  * carries, past which it is cut and marked with its real length.
@@ -33,7 +27,7 @@ exports.truncateLabelsForLog = truncateLabelsForLog;
33
27
  * cases these lines report — is cut. Nothing is lost by cutting: the line's
34
28
  * job is to say which row to go and look at, and the row holds the rest.
35
29
  */
36
- exports.MAX_LOGGED_VALUE_CHARS = 256;
30
+ export declare const MAX_LOGGED_VALUE_CHARS = 256;
37
31
  /**
38
32
  * Labels of an unchecked `string[]` one log line or one public error message
39
33
  * carries, past which the rest are dropped and the real depth is stated.
@@ -57,7 +51,7 @@ exports.MAX_LOGGED_VALUE_CHARS = 256;
57
51
  * a key — so its depth is unchecked however carefully each label was checked,
58
52
  * and a backend's own answer is unchecked in both.
59
53
  */
60
- exports.MAX_LOGGED_LABELS = 8;
54
+ export declare const MAX_LOGGED_LABELS = 8;
61
55
  /**
62
56
  * Characters of a relayed *cause's* text one public error message or one log
63
57
  * line carries, past which it is cut and marked with its real length.
@@ -94,26 +88,7 @@ exports.MAX_LOGGED_LABELS = 8;
94
88
  * records: aliasing two caps would move one whenever the other is retuned,
95
89
  * and these three answer unrelated questions.
96
90
  */
97
- exports.MAX_RELAYED_MESSAGE_CHARS = 1024;
98
- /** True for the high half of a surrogate pair, whose low half follows it. */
99
- function isHighSurrogate(unit) {
100
- return unit >= 0xd800 && unit <= 0xdbff;
101
- }
102
- /**
103
- * The cut itself, shared by both caps so one value can never be marked twice
104
- * with two different lengths.
105
- *
106
- * `max` is a character count. A value at or under it comes back identical; a
107
- * longer one comes back as `max` characters — one fewer when that would split
108
- * a surrogate pair — followed by `…(len N)` giving the length it really had.
109
- */
110
- function cutTo(value, max) {
111
- if (typeof value !== 'string' || value.length <= max)
112
- return value;
113
- const last = value.charCodeAt(max - 1);
114
- const kept = isHighSurrogate(last) ? max - 1 : max;
115
- return `${value.slice(0, kept)}…(len ${value.length})`;
116
- }
91
+ export declare const MAX_RELAYED_MESSAGE_CHARS = 1024;
117
92
  /**
118
93
  * Bound a string this package did not length-check.
119
94
  *
@@ -157,9 +132,7 @@ function cutTo(value, max) {
157
132
  * `assertWellFormed` exists to keep out of this package's strings, and a JSON
158
133
  * log transport rewrites one to U+FFFD without saying so.
159
134
  */
160
- function truncateForLog(value) {
161
- return cutTo(value, exports.MAX_LOGGED_VALUE_CHARS);
162
- }
135
+ export declare function truncateForLog(value: string): string;
163
136
  /**
164
137
  * Bound the **prose** of a relayed cause, which takes its own cap.
165
138
  *
@@ -185,9 +158,7 @@ function truncateForLog(value) {
185
158
  *
186
159
  * Throws: nothing.
187
160
  */
188
- function truncateRelayedText(value) {
189
- return cutTo(value, exports.MAX_RELAYED_MESSAGE_CHARS);
190
- }
161
+ export declare function truncateRelayedText(value: string): string;
191
162
  /**
192
163
  * Bound a list of labels — a store `namespace`, a list of channel names — the
193
164
  * same rule reaches.
@@ -223,9 +194,4 @@ function truncateRelayedText(value) {
223
194
  *
224
195
  * Throws: nothing.
225
196
  */
226
- function truncateLabelsForLog(labels) {
227
- if (!Array.isArray(labels))
228
- return labels;
229
- const kept = labels.slice(0, exports.MAX_LOGGED_LABELS).map((label) => truncateForLog(label));
230
- return labels.length > exports.MAX_LOGGED_LABELS ? [...kept, `…(len ${labels.length})`] : kept;
231
- }
197
+ export declare function truncateLabelsForLog(labels: string[]): string[];
@@ -0,0 +1,25 @@
1
+ export const MAX_LOGGED_VALUE_CHARS = 256;
2
+ export const MAX_LOGGED_LABELS = 8;
3
+ export const MAX_RELAYED_MESSAGE_CHARS = 1024;
4
+ function isHighSurrogate(unit) {
5
+ return unit >= 0xd800 && unit <= 0xdbff;
6
+ }
7
+ function cutTo(value, max) {
8
+ if (typeof value !== 'string' || value.length <= max)
9
+ return value;
10
+ const last = value.charCodeAt(max - 1);
11
+ const kept = isHighSurrogate(last) ? max - 1 : max;
12
+ return `${value.slice(0, kept)}…(len ${value.length})`;
13
+ }
14
+ export function truncateForLog(value) {
15
+ return cutTo(value, MAX_LOGGED_VALUE_CHARS);
16
+ }
17
+ export function truncateRelayedText(value) {
18
+ return cutTo(value, MAX_RELAYED_MESSAGE_CHARS);
19
+ }
20
+ export function truncateLabelsForLog(labels) {
21
+ if (!Array.isArray(labels))
22
+ return labels;
23
+ const kept = labels.slice(0, MAX_LOGGED_LABELS).map((label) => truncateForLog(label));
24
+ return labels.length > MAX_LOGGED_LABELS ? [...kept, `…(len ${labels.length})`] : kept;
25
+ }
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Hides which options every adapter shares.
3
+ *
4
+ * The table, the client, the ttl, the logger, the retry policy, the recency
5
+ * index, the read concurrency, the codec options and per-call cancellation are
6
+ * declared once here, so the checkpointer, the store and the history accept
7
+ * the same keys with the same meaning, and an adapter-wide option is added in
8
+ * one place. This module holds their types only; checking them is elsewhere.
9
+ */
10
+ import type { DynamoDBClientConfig } from '@aws-sdk/client-dynamodb';
11
+ import type { CompressionConfig } from './codec/compression.js';
12
+ import type { S3OffloadConfig } from './codec/s3/config.js';
13
+ import type { DynamoDBDocumentLike } from './dynamodb/client.js';
14
+ import type { RetryPolicy } from './dynamodb/retry.js';
15
+ import type { Logger } from './logging/logger.js';
16
+ import type { TtlOption } from './validation/ttl.js';
17
+ /**
18
+ * Options common to every adapter (the unified options shape). An adapter
19
+ * either reuses an injected `client` or builds one from `clientConfig`.
20
+ */
21
+ export interface BaseAdapterOptions {
22
+ /** DynamoDB table name. */
23
+ tableName: string;
24
+ /** Pre-built DocumentClient to reuse; when set, the adapter does not own it. */
25
+ client?: DynamoDBDocumentLike;
26
+ /** The config a client is built from when `client` is not provided. */
27
+ clientConfig?: DynamoDBClientConfig;
28
+ /** Optional time-to-live applied to written items. */
29
+ ttl?: TtlOption;
30
+ /** Optional per-instance logger (defaults to a silent logger). */
31
+ logger?: Logger;
32
+ /** Retry budget and backoff for every DynamoDB call (see the README "Retries and backoff"). */
33
+ retry?: RetryPolicy;
34
+ /**
35
+ * Index partitions per adapter in the recency index (GSI1), default 8.
36
+ *
37
+ * Checkpoint and session rows carry the index attributes whether or not the
38
+ * table defines the index, so enabling it later needs only a backfill of the
39
+ * rows written before. The value is fixed for the table's life. Every row
40
+ * keeps the shard it was written with, and `backfillRecencyIndex` writes
41
+ * keys only to rows that have none, so it cannot move a row. Raising the
42
+ * count is safe: the old shards stay among the ones a listing queries.
43
+ * Lowering it hides every row on a dropped shard from the listings. The
44
+ * store takes no `indexShards`.
45
+ *
46
+ * A single index partition per adapter would concentrate every listing on
47
+ * one partition, which is worse than the table scan it replaces.
48
+ */
49
+ indexShards?: number;
50
+ /**
51
+ * Name of the recency index (a GSI on `gsi1pk`/`gsi1sk`) on this table.
52
+ *
53
+ * Opt-in on purpose: whether the table carries the index is deployment
54
+ * configuration the operator knows, and probing for it would spend a failed
55
+ * request per process to find out. Naming it switches two listings that
56
+ * would otherwise scan the whole table onto a read of the index, newest
57
+ * first: `history.listSessions`, which pages it by cursor, and a
58
+ * `saver.list` without a `thread_id`, which streams it and takes no cursor.
59
+ * Leaving it unset keeps both on the table scan, so the index can be created
60
+ * and backfilled before any adapter reads it.
61
+ *
62
+ * The store takes no `indexName`: its rootless search and its namespace
63
+ * listing stay table scans.
64
+ */
65
+ indexName?: string;
66
+ /**
67
+ * How many payloads a single call decodes at once, default 8.
68
+ *
69
+ * It is the multiplier on this package's memory ceiling, which is
70
+ * `readConcurrency × (s3.maxDownloadBytes + compression.maxDecompressedBytes)`
71
+ * — a downloaded object and its decompressed form are both resident while a
72
+ * payload is decoded, and that much can be in flight for each concurrent
73
+ * decode. Lower it on a small container; raising it trades memory for
74
+ * latency on reads that fetch many offloaded payloads.
75
+ *
76
+ * It also bounds how many recency-index shards one listing queries at once.
77
+ */
78
+ readConcurrency?: number;
79
+ }
80
+ /** Options enabling payload compression and/or S3 offloading. */
81
+ export interface CodecOptions {
82
+ /** Gzip compression configuration. */
83
+ compression?: CompressionConfig;
84
+ /** S3 offload configuration for payloads over DynamoDB's item limit. */
85
+ s3?: S3OffloadConfig;
86
+ }
87
+ /** Per-call cancellation for the long-running adapter methods. */
88
+ export interface CancelOptions {
89
+ /**
90
+ * Aborting it rejects the call with an `ABORTED` error — carrying the abort
91
+ * reason as `cause` — whether the signal was already aborted (nothing is
92
+ * sent), aborts while the call waits between requests, or aborts while a
93
+ * request is in flight: the signal reaches the AWS SDK on every DynamoDB
94
+ * request and S3 transfer the call makes for you, so the request itself
95
+ * ends. The verification reads and the cleanup that follow a failure run to
96
+ * completion regardless. A value that is not `AbortSignal`-shaped is refused
97
+ * with `VALIDATION` naming `signal` before anything is sent.
98
+ */
99
+ signal?: AbortSignal;
100
+ }
@@ -0,0 +1 @@
1
+ export {};