@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,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.redactSecrets = redactSecrets;
4
+ exports.redactLogger = redactLogger;
5
+ exports.walkObject = walkObject;
6
+ const errors_js_1 = require("../errors/errors.js");
7
+ const collaborators_js_1 = require("../validation/collaborators.js");
8
+ const option_shape_js_1 = require("../validation/option-shape.js");
9
+ const primitives_js_1 = require("../validation/primitives.js");
10
+ const logger_js_1 = require("./logger.js");
11
+ const secret_patterns_js_1 = require("./secret-patterns.js");
12
+ const UNREDACTABLE = '[UNREDACTABLE]';
13
+ function assertRegExpArray(value, field) {
14
+ if (!Array.isArray(value) || value.some((entry) => !(0, secret_patterns_js_1.isRegExp)(entry))) {
15
+ throw (0, errors_js_1.validationError)(`${field} must be an array of RegExp`, field);
16
+ }
17
+ }
18
+ function assertKeyPatterns(value, field) {
19
+ (0, primitives_js_1.assertStringArray)(value, field);
20
+ if (value.some((entry) => (0, secret_patterns_js_1.normaliseKey)(entry) === '')) {
21
+ throw (0, errors_js_1.validationError)(`${field} must name a letter or digit in every entry`, field);
22
+ }
23
+ }
24
+ function redactSecrets(value, patterns = secret_patterns_js_1.DEFAULT_SECRET_KEY_PATTERNS, valuePatterns = secret_patterns_js_1.DEFAULT_SECRET_VALUE_PATTERNS) {
25
+ assertKeyPatterns(patterns, 'patterns');
26
+ assertRegExpArray(valuePatterns, 'valuePatterns');
27
+ const keyPatterns = patterns.map(secret_patterns_js_1.normaliseKey);
28
+ const walking = new WeakSet();
29
+ const done = new WeakMap();
30
+ const walk = (current) => {
31
+ if (typeof current === 'string')
32
+ return (0, secret_patterns_js_1.redactText)(current, valuePatterns);
33
+ if (current === null || typeof current !== 'object')
34
+ return current;
35
+ if (done.has(current))
36
+ return done.get(current);
37
+ if (walking.has(current))
38
+ return '[Circular]';
39
+ walking.add(current);
40
+ try {
41
+ const redacted = walkObject(current, { keyPatterns, valuePatterns, walk });
42
+ done.set(current, redacted);
43
+ return redacted;
44
+ }
45
+ finally {
46
+ walking.delete(current);
47
+ }
48
+ };
49
+ try {
50
+ return walk(value);
51
+ }
52
+ catch {
53
+ return UNREDACTABLE;
54
+ }
55
+ }
56
+ function assertRedactionOptions(options) {
57
+ (0, option_shape_js_1.assertObjectShape)(options, 'options');
58
+ if (options.extraKeys !== undefined)
59
+ assertKeyPatterns(options.extraKeys, 'extraKeys');
60
+ if (options.extraValuePatterns !== undefined) {
61
+ assertRegExpArray(options.extraValuePatterns, 'extraValuePatterns');
62
+ }
63
+ }
64
+ function redactLogger(inner, options = {}) {
65
+ (0, collaborators_js_1.assertMembers)(inner, collaborators_js_1.LOGGER_MEMBERS, 'logger');
66
+ assertRedactionOptions(options);
67
+ const patterns = options.extraKeys
68
+ ? [...secret_patterns_js_1.DEFAULT_SECRET_KEY_PATTERNS, ...options.extraKeys.map(secret_patterns_js_1.normaliseKey)]
69
+ : secret_patterns_js_1.DEFAULT_SECRET_KEY_PATTERNS;
70
+ const valuePatterns = options.extraValuePatterns
71
+ ? [...secret_patterns_js_1.DEFAULT_SECRET_VALUE_PATTERNS, ...options.extraValuePatterns]
72
+ : secret_patterns_js_1.DEFAULT_SECRET_VALUE_PATTERNS;
73
+ const deliver = (method) => (message, ...args) => (0, logger_js_1.absorbLoggerFailure)(() => inner[method](message, ...args.map((arg) => redactSecrets(arg, patterns, valuePatterns))));
74
+ return {
75
+ info: deliver('info'),
76
+ warn: deliver('warn'),
77
+ error: deliver('error'),
78
+ debug: deliver('debug'),
79
+ };
80
+ }
81
+ function isSetValue(value) {
82
+ return Object.prototype.toString.call(value) === '[object Set]';
83
+ }
84
+ function isMapValue(value) {
85
+ return Object.prototype.toString.call(value) === '[object Map]';
86
+ }
87
+ function isErrorValue(value) {
88
+ const tag = Object.prototype.toString.call(value);
89
+ return tag === '[object Error]' || tag === '[object DOMException]';
90
+ }
91
+ function isOpaqueValue(value) {
92
+ const tag = Object.prototype.toString.call(value);
93
+ return tag === '[object Date]' || tag === '[object RegExp]';
94
+ }
95
+ function redactEntries(entries, keyPatterns, walk) {
96
+ const out = {};
97
+ for (const [key, value] of entries) {
98
+ Object.defineProperty(out, key, {
99
+ value: (0, secret_patterns_js_1.isSecretKey)(key, keyPatterns) ? secret_patterns_js_1.REDACTED : walk(value),
100
+ enumerable: true,
101
+ writable: true,
102
+ configurable: true,
103
+ });
104
+ }
105
+ return out;
106
+ }
107
+ function redactMap(value, deps) {
108
+ const entries = [...value].map(([key, entry]) => {
109
+ const keyText = key;
110
+ return [String(keyText), entry];
111
+ });
112
+ return redactEntries(entries, deps.keyPatterns, deps.walk);
113
+ }
114
+ function redactError(current, entries, deps) {
115
+ const text = (0, secret_patterns_js_1.redactErrorText)(current, deps.valuePatterns);
116
+ const aggregated = current.errors;
117
+ const bare = entries.length === 0 && current.cause === undefined && aggregated === undefined;
118
+ if (bare && !text.changed)
119
+ return current;
120
+ const out = redactEntries(entries, deps.keyPatterns, deps.walk);
121
+ out.name = text.name;
122
+ out.message = text.message;
123
+ out.stack = text.stack;
124
+ if (current.cause !== undefined)
125
+ out.cause = deps.walk(current.cause);
126
+ if (Array.isArray(aggregated))
127
+ out.errors = deps.walk(aggregated);
128
+ return out;
129
+ }
130
+ function walkObject(current, deps) {
131
+ if (Array.isArray(current))
132
+ return current.map(deps.walk);
133
+ if (ArrayBuffer.isView(current))
134
+ return (0, secret_patterns_js_1.binaryLabel)(current);
135
+ if (isOpaqueValue(current))
136
+ return current;
137
+ if (isSetValue(current))
138
+ return [...current].map(deps.walk);
139
+ if (isMapValue(current))
140
+ return redactMap(current, deps);
141
+ const entries = Object.entries(current);
142
+ if (isErrorValue(current))
143
+ return redactError(current, entries, deps);
144
+ return redactEntries(entries, deps.keyPatterns, deps.walk);
145
+ }
@@ -40,15 +40,23 @@ export declare function normaliseKey(key: string): string;
40
40
  *
41
41
  * The credential-pair pattern (last) tolerates a **closing quote after the
42
42
  * keyword**, because that is what `JSON.stringify` produces
43
- * (`{"password":"…"}`) and requiring the separator to follow the bare keyword
44
- * matched nothing at all there — a silent, complete bypass on the single most
45
- * common shape a downstream HTTP error arrives in. Its group 1 is the keyword
46
- * and separator, preserved by {@link redactText}.
47
- *
48
- * 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:
49
53
  * 1. a fully-quoted span that consumes escapes, so `{"password":"a\"b"}` is
50
54
  * redacted whole. Ending the span at the escaped quote stopped the
51
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.
52
60
  * 2. an unquoted JSON scalar — number, `true`, `false`, `null` — required to
53
61
  * end at a real delimiter — `,`, `}`, `]` or end of input, optionally
54
62
  * preceded by whitespace. Without this alternative,
@@ -62,6 +70,17 @@ export declare function normaliseKey(key: string): string;
62
70
  * 3. the rest of the line, so a multi-word secret is redacted whole instead of
63
71
  * up to its first space. Trying the two precise shapes first is what keeps
64
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.
65
84
  */
66
85
  export declare const DEFAULT_SECRET_VALUE_PATTERNS: readonly RegExp[];
67
86
  /**
@@ -199,6 +218,10 @@ export interface RedactedErrorText {
199
218
  * for truncation. A consumer who wants a bound has their own transport to put
200
219
  * one in.
201
220
  *
202
- * 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.
203
226
  */
204
227
  export declare function redactErrorText(error: Error, patterns: readonly RegExp[]): RedactedErrorText;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_SECRET_VALUE_PATTERNS = exports.DEFAULT_SECRET_KEY_PATTERNS = exports.REDACTED = void 0;
4
+ exports.normaliseKey = normaliseKey;
5
+ exports.isSecretKey = isSecretKey;
6
+ exports.redactedMessage = redactedMessage;
7
+ exports.isRegExp = isRegExp;
8
+ exports.redactText = redactText;
9
+ exports.binaryLabel = binaryLabel;
10
+ exports.redactErrorText = redactErrorText;
11
+ const base_error_js_1 = require("../errors/base-error.js");
12
+ const truncate_js_1 = require("./truncate.js");
13
+ exports.REDACTED = '[REDACTED]';
14
+ exports.DEFAULT_SECRET_KEY_PATTERNS = [
15
+ 'accesskey',
16
+ 'accesskeyid',
17
+ 'secret',
18
+ 'sessiontoken',
19
+ 'securitytoken',
20
+ 'authorization',
21
+ 'password',
22
+ 'passwd',
23
+ 'passphrase',
24
+ 'apikey',
25
+ 'bearer',
26
+ 'token',
27
+ 'privatekey',
28
+ 'secretkey',
29
+ ];
30
+ function normaliseKey(key) {
31
+ return key.toLowerCase().replace(/[^a-z0-9]/g, '');
32
+ }
33
+ exports.DEFAULT_SECRET_VALUE_PATTERNS = [
34
+ /\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/g,
35
+ /\bBearer\s+[A-Za-z0-9._~+/-]+=*/gi,
36
+ /\beyJ(?:[A-Za-z0-9_]|-(?!eyJ))+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,
37
+ /((?: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,
38
+ ];
39
+ function isSecretKey(key, patterns) {
40
+ const normalised = normaliseKey(key);
41
+ return patterns.some((pattern) => normalised === pattern || normalised.endsWith(pattern));
42
+ }
43
+ function redactedMessage(error) {
44
+ return (0, truncate_js_1.truncateRelayedText)(redactText((0, base_error_js_1.toError)(error).message, exports.DEFAULT_SECRET_VALUE_PATTERNS));
45
+ }
46
+ function globalCopyOf(pattern) {
47
+ const flags = pattern.flags.includes('g') ? pattern.flags : `${pattern.flags}g`;
48
+ return new RegExp(pattern.source, flags);
49
+ }
50
+ function isRegExp(value) {
51
+ return Object.prototype.toString.call(value) === '[object RegExp]';
52
+ }
53
+ function redactText(value, patterns) {
54
+ return patterns.reduce((text, pattern) => {
55
+ if (!isRegExp(pattern))
56
+ return text;
57
+ return text.replace(globalCopyOf(pattern), (_match, prefix) => typeof prefix === 'string' ? `${prefix}${exports.REDACTED}` : exports.REDACTED);
58
+ }, value);
59
+ }
60
+ function binaryLabel(value) {
61
+ return `[${value.constructor.name}(${value.byteLength})]`;
62
+ }
63
+ function redactErrorText(error, patterns) {
64
+ const described = (0, base_error_js_1.toError)(error);
65
+ const rawName = nameOf(described);
66
+ const rawStack = stackOf(described);
67
+ const name = redactText(rawName, patterns);
68
+ const message = redactText(described.message, patterns);
69
+ const stack = rawStack === undefined ? undefined : redactText(rawStack, patterns);
70
+ return {
71
+ name,
72
+ message,
73
+ stack,
74
+ changed: name !== rawName || message !== described.message || stack !== rawStack,
75
+ };
76
+ }
77
+ function nameOf(error) {
78
+ try {
79
+ return String(error.name);
80
+ }
81
+ catch {
82
+ return '[unreadable name]';
83
+ }
84
+ }
85
+ function stackOf(error) {
86
+ try {
87
+ const { stack } = error;
88
+ return stack === undefined ? undefined : String(stack);
89
+ }
90
+ catch {
91
+ return '[unreadable stack]';
92
+ }
93
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_RELAYED_MESSAGE_CHARS = exports.MAX_LOGGED_LABELS = exports.MAX_LOGGED_VALUE_CHARS = void 0;
4
+ exports.truncateForLog = truncateForLog;
5
+ exports.truncateRelayedText = truncateRelayedText;
6
+ exports.truncateLabelsForLog = truncateLabelsForLog;
7
+ exports.MAX_LOGGED_VALUE_CHARS = 256;
8
+ exports.MAX_LOGGED_LABELS = 8;
9
+ exports.MAX_RELAYED_MESSAGE_CHARS = 1024;
10
+ function isHighSurrogate(unit) {
11
+ return unit >= 0xd800 && unit <= 0xdbff;
12
+ }
13
+ function cutTo(value, max) {
14
+ if (typeof value !== 'string' || value.length <= max)
15
+ return value;
16
+ const last = value.charCodeAt(max - 1);
17
+ const kept = isHighSurrogate(last) ? max - 1 : max;
18
+ return `${value.slice(0, kept)}…(len ${value.length})`;
19
+ }
20
+ function truncateForLog(value) {
21
+ return cutTo(value, exports.MAX_LOGGED_VALUE_CHARS);
22
+ }
23
+ function truncateRelayedText(value) {
24
+ return cutTo(value, exports.MAX_RELAYED_MESSAGE_CHARS);
25
+ }
26
+ function truncateLabelsForLog(labels) {
27
+ if (!Array.isArray(labels))
28
+ return labels;
29
+ const kept = labels.slice(0, exports.MAX_LOGGED_LABELS).map((label) => truncateForLog(label));
30
+ return labels.length > exports.MAX_LOGGED_LABELS ? [...kept, `…(len ${labels.length})`] : kept;
31
+ }
@@ -8,12 +8,12 @@
8
8
  * one place. This module holds their types only; checking them is elsewhere.
9
9
  */
10
10
  import type { DynamoDBClientConfig } from '@aws-sdk/client-dynamodb';
11
- import type { CompressionConfig } from './codec/compression';
12
- import type { S3OffloadConfig } from './codec/s3/config';
13
- import type { DynamoDBDocumentLike } from './dynamodb/client';
14
- import type { RetryPolicy } from './dynamodb/retry';
15
- import type { Logger } from './logging/logger';
16
- import type { TtlOption } from './validation/ttl';
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
17
  /**
18
18
  * Options common to every adapter (the unified options shape). An adapter
19
19
  * either reuses an injected `client` or builds one from `clientConfig`.
@@ -34,10 +34,14 @@ export interface BaseAdapterOptions {
34
34
  /**
35
35
  * Index partitions per adapter in the recency index (GSI1), default 8.
36
36
  *
37
- * Rows carry the index attributes whether or not the table defines the
38
- * index, so enabling it later needs no rewrite of new rows — only a backfill
39
- * of the old ones. The value is fixed at table creation: changing it changes
40
- * every row's shard, so an existing index must be backfilled again.
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`.
41
45
  *
42
46
  * A single index partition per adapter would concentrate every listing on
43
47
  * one partition, which is worse than the table scan it replaces.
@@ -54,6 +58,9 @@ export interface BaseAdapterOptions {
54
58
  * `saver.list` without a `thread_id`, which streams it and takes no cursor.
55
59
  * Leaving it unset keeps both on the table scan, so the index can be created
56
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.
57
64
  */
58
65
  indexName?: string;
59
66
  /**
@@ -79,6 +86,15 @@ export interface CodecOptions {
79
86
  }
80
87
  /** Per-call cancellation for the long-running adapter methods. */
81
88
  export interface CancelOptions {
82
- /** Aborting it rejects the call with an `ABORTED` error at the next wait. */
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
+ */
83
99
  signal?: AbortSignal;
84
100
  }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ULID_TIME_RANGE_MS = void 0;
4
+ exports.secureRng = secureRng;
5
+ exports.ulidTimePrefix = ulidTimePrefix;
6
+ exports.createUlidFactory = createUlidFactory;
7
+ const node_crypto_1 = require("node:crypto");
8
+ const errors_js_1 = require("./errors/errors.js");
9
+ const ENCODING = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
10
+ const ENCODING_LEN = 32;
11
+ const TIME_CHARS = 10;
12
+ const RANDOM_CHARS = 16;
13
+ exports.ULID_TIME_RANGE_MS = ENCODING_LEN ** TIME_CHARS;
14
+ const RNG_POOL_BYTES = 256;
15
+ function secureRng() {
16
+ let pool = Buffer.alloc(0);
17
+ let offset = 0;
18
+ return () => {
19
+ if (offset >= pool.length) {
20
+ pool = (0, node_crypto_1.randomBytes)(RNG_POOL_BYTES);
21
+ offset = 0;
22
+ }
23
+ const byte = pool[offset];
24
+ offset += 1;
25
+ return byte / 256;
26
+ };
27
+ }
28
+ function encodeTime(timeMs) {
29
+ let remaining = Math.floor(timeMs);
30
+ let out = '';
31
+ for (let i = 0; i < TIME_CHARS; i++) {
32
+ out = ENCODING[remaining % ENCODING_LEN] + out;
33
+ remaining = Math.floor(remaining / ENCODING_LEN);
34
+ }
35
+ return out;
36
+ }
37
+ function ulidTimePrefix(timeMs) {
38
+ if (!(timeMs >= 0 && timeMs < exports.ULID_TIME_RANGE_MS)) {
39
+ throw (0, errors_js_1.validationError)(`a ULID time prefix covers epoch milliseconds 0 to ${exports.ULID_TIME_RANGE_MS - 1} (the year ` +
40
+ `37648); ${timeMs} is outside it and has no ten-character encoding`);
41
+ }
42
+ return encodeTime(timeMs);
43
+ }
44
+ function randomDigits(rng) {
45
+ const digits = [];
46
+ for (let i = 0; i < RANDOM_CHARS; i++) {
47
+ digits.push(Math.floor(rng() * ENCODING_LEN));
48
+ }
49
+ return digits;
50
+ }
51
+ function incrementDigits(digits) {
52
+ const next = [...digits];
53
+ for (let i = RANDOM_CHARS - 1; i >= 0; i--) {
54
+ if (next[i] < ENCODING_LEN - 1) {
55
+ next[i] += 1;
56
+ return { digits: next, overflowed: false };
57
+ }
58
+ next[i] = 0;
59
+ }
60
+ return { digits: next, overflowed: true };
61
+ }
62
+ function createUlidFactory(now = Date.now, rng = secureRng()) {
63
+ let lastTime = -1;
64
+ let lastRandom = [];
65
+ return () => {
66
+ const time = now();
67
+ if (time > lastTime) {
68
+ lastTime = time;
69
+ lastRandom = randomDigits(rng);
70
+ }
71
+ else {
72
+ const result = incrementDigits(lastRandom);
73
+ if (result.overflowed) {
74
+ lastTime += 1;
75
+ lastRandom = randomDigits(rng);
76
+ }
77
+ else {
78
+ lastRandom = result.digits;
79
+ }
80
+ }
81
+ return encodeTime(lastTime) + lastRandom.map((digit) => ENCODING[digit]).join('');
82
+ };
83
+ }
@@ -7,7 +7,7 @@
7
7
  * `AbortSignal` has, so a wrong object fails where it was passed and not at the
8
8
  * first call deep inside an operation.
9
9
  */
10
- import type { CancelOptions } from '../options';
10
+ import type { CancelOptions } from '../options.js';
11
11
  /** The `DynamoDBDocument` methods this package calls on an injected `client`. */
12
12
  export declare const CLIENT_MEMBERS: readonly string[];
13
13
  /** The `Logger` methods every adapter calls. */
@@ -53,6 +53,23 @@ export declare const ABORT_SIGNAL_MEMBERS: Readonly<Record<string, 'boolean' | '
53
53
  * the value.
54
54
  */
55
55
  export declare function assertMembers(value: object, members: readonly string[], field: string): void;
56
+ /**
57
+ * Refuse an injected client whose document translation changes what this
58
+ * package writes or reads back.
59
+ *
60
+ * Accepts: `client` — the injected document client, or any object standing in
61
+ * for one; one without `config.translateConfig` translates the default way.
62
+ *
63
+ * Returns: nothing: the client is kept under its declared type, and this checks it.
64
+ *
65
+ * Throws: `VALIDATION` naming `client` when its `unmarshallOptions.wrapNumbers`
66
+ * is set — every number this package reads back (a row's format version, a
67
+ * `ttl`, a message count) would arrive wrapped, so a newer row would read as
68
+ * version 0 and a session as malformed — or when its
69
+ * `marshallOptions.convertEmptyValues` is on, which stores the root checkpoint
70
+ * namespace, the empty string, as NULL.
71
+ */
72
+ export declare function assertClientTranslation(client: object): void;
56
73
  /**
57
74
  * Validate the collaborators every adapter shares: `client`, `logger` and
58
75
  * `serde`. Pulled out of each `setUp*` as one call rather than three inline
@@ -67,7 +84,9 @@ export declare function assertMembers(value: object, members: readonly string[],
67
84
  * and this checks it. A collaborator the caller did not supply is left
68
85
  * untouched, so it still reaches its default.
69
86
  *
70
- * Throws: see {@link assertMembers}.
87
+ * Throws: see {@link assertMembers} for a collaborator missing a method, and
88
+ * {@link assertClientTranslation} for a `client` whose translation would
89
+ * change how a row reads back.
71
90
  */
72
91
  export declare function assertBaseCollaborators(options: {
73
92
  client?: object;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CANCEL_KEYS = exports.ABORT_SIGNAL_MEMBERS = exports.VECTOR_BACKEND_MEMBERS = exports.EMBEDDINGS_MEMBERS = exports.SERDE_MEMBERS = exports.LOGGER_MEMBERS = exports.CLIENT_MEMBERS = void 0;
4
+ exports.assertMembers = assertMembers;
5
+ exports.assertClientTranslation = assertClientTranslation;
6
+ exports.assertBaseCollaborators = assertBaseCollaborators;
7
+ exports.isAbortSignalLike = isAbortSignalLike;
8
+ exports.assertSignalLike = assertSignalLike;
9
+ exports.assertCancelOptions = assertCancelOptions;
10
+ const errors_js_1 = require("../errors/errors.js");
11
+ const option_shape_js_1 = require("./option-shape.js");
12
+ exports.CLIENT_MEMBERS = [
13
+ 'get',
14
+ 'put',
15
+ 'delete',
16
+ 'update',
17
+ 'query',
18
+ 'scan',
19
+ 'batchWrite',
20
+ 'transactWrite',
21
+ ];
22
+ exports.LOGGER_MEMBERS = ['debug', 'info', 'warn', 'error'];
23
+ exports.SERDE_MEMBERS = ['dumpsTyped', 'loadsTyped'];
24
+ exports.EMBEDDINGS_MEMBERS = ['embedQuery', 'embedDocuments'];
25
+ exports.VECTOR_BACKEND_MEMBERS = ['upsert', 'query', 'delete'];
26
+ exports.ABORT_SIGNAL_MEMBERS = {
27
+ aborted: 'boolean',
28
+ addEventListener: 'function',
29
+ removeEventListener: 'function',
30
+ };
31
+ function assertMembers(value, members, field) {
32
+ if (!(0, option_shape_js_1.isObjectShape)(value)) {
33
+ throw (0, errors_js_1.validationError)(`${field} must be an object`, field);
34
+ }
35
+ for (const member of members) {
36
+ if (typeof Reflect.get(value, member) !== 'function') {
37
+ throw (0, errors_js_1.validationError)(`${field}.${member} must be a function`, `${field}.${member}`);
38
+ }
39
+ }
40
+ }
41
+ function assertClientTranslation(client) {
42
+ const translate = client.config?.translateConfig;
43
+ if (translate?.unmarshallOptions?.wrapNumbers) {
44
+ throw (0, errors_js_1.validationError)('client reads numbers back wrapped (unmarshallOptions.wrapNumbers), where this package ' +
45
+ 'reads a row version, a ttl and a count as numbers; inject a DynamoDBDocument built ' +
46
+ 'without it', 'client');
47
+ }
48
+ if (translate?.marshallOptions?.convertEmptyValues === true) {
49
+ throw (0, errors_js_1.validationError)('client stores an empty string as NULL (marshallOptions.convertEmptyValues), which erases ' +
50
+ 'the root checkpoint namespace; inject a DynamoDBDocument built without it', 'client');
51
+ }
52
+ }
53
+ function assertBaseCollaborators(options) {
54
+ if (options.client !== undefined) {
55
+ assertMembers(options.client, exports.CLIENT_MEMBERS, 'client');
56
+ assertClientTranslation(options.client);
57
+ }
58
+ if (options.logger !== undefined)
59
+ assertMembers(options.logger, exports.LOGGER_MEMBERS, 'logger');
60
+ if (options.serde !== undefined)
61
+ assertMembers(options.serde, exports.SERDE_MEMBERS, 'serde');
62
+ }
63
+ function isAbortSignalLike(value) {
64
+ if (typeof value !== 'object' || value === null)
65
+ return false;
66
+ return Object.entries(exports.ABORT_SIGNAL_MEMBERS).every(([member, type]) => typeof Reflect.get(value, member) === type);
67
+ }
68
+ function assertSignalLike(value, field = 'signal') {
69
+ if (value !== undefined && !isAbortSignalLike(value)) {
70
+ throw (0, errors_js_1.validationError)(`${field} must be an AbortSignal`, field);
71
+ }
72
+ }
73
+ exports.CANCEL_KEYS = (0, option_shape_js_1.allKeysOf)({ signal: 'signal' });
74
+ function assertCancelOptions(options) {
75
+ if (options === undefined)
76
+ return;
77
+ (0, option_shape_js_1.assertShape)(options, exports.CANCEL_KEYS, 'options');
78
+ assertSignalLike(options.signal);
79
+ }
@@ -1,11 +1,13 @@
1
1
  /**
2
2
  * Hides how an option object is told apart from a misspelt one.
3
3
  *
4
- * An option type lists its keys once, checked by the compiler against the
5
- * type, and an object carrying any other key is refused naming that key. No
6
- * caller writes the plain-object test or the unknown-key walk itself, so the
7
- * message and the field a refusal names are the same for every option object
8
- * this package reads.
4
+ * An option type this package defines lists its keys once, checked by the
5
+ * compiler against the type, and an object carrying any other key is refused
6
+ * naming that key. An option object LangGraph defines is only held to being an
7
+ * object, since a key a later LangGraph adds must not refuse a call LangGraph
8
+ * makes (decision record 28). No caller writes the plain-object test or the
9
+ * unknown-key walk itself, so the message and the field a refusal names are the
10
+ * same for every option object this package reads.
9
11
  */
10
12
  /**
11
13
  * Every key of `T`, listed once.
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.allKeysOf = allKeysOf;
4
+ exports.isObjectShape = isObjectShape;
5
+ exports.assertObjectShape = assertObjectShape;
6
+ exports.assertShape = assertShape;
7
+ exports.parseShape = parseShape;
8
+ const errors_js_1 = require("../errors/errors.js");
9
+ function allKeysOf(keys) {
10
+ return Object.keys(keys);
11
+ }
12
+ function isObjectShape(value) {
13
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
14
+ }
15
+ function assertObjectShape(value, field) {
16
+ if (!isObjectShape(value)) {
17
+ throw (0, errors_js_1.validationError)(`${field} must be an object`, field);
18
+ }
19
+ }
20
+ function assertShape(value, allowed, field) {
21
+ assertObjectShape(value, field);
22
+ for (const key of Object.keys(value)) {
23
+ if (!allowed.includes(key)) {
24
+ throw (0, errors_js_1.validationError)(`${field}.${key} is not an option this package reads; expected one of ${allowed.join(', ')}`, `${field}.${key}`);
25
+ }
26
+ }
27
+ }
28
+ function parseShape(value, allowed, field) {
29
+ assertShape(value, allowed, field);
30
+ return value;
31
+ }