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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (512) hide show
  1. package/README.md +1720 -154
  2. package/dist/backfill/backfill.d.ts +168 -0
  3. package/dist/backfill/backfill.js +393 -0
  4. package/dist/checkpointer/actions/delete-thread.d.ts +47 -6
  5. package/dist/checkpointer/actions/delete-thread.js +58 -21
  6. package/dist/checkpointer/actions/get-tuple.d.ts +29 -4
  7. package/dist/checkpointer/actions/get-tuple.js +44 -10
  8. package/dist/checkpointer/actions/list.d.ts +46 -4
  9. package/dist/checkpointer/actions/list.js +121 -66
  10. package/dist/checkpointer/actions/put-writes.d.ts +41 -9
  11. package/dist/checkpointer/actions/put-writes.js +62 -77
  12. package/dist/checkpointer/actions/put.d.ts +83 -4
  13. package/dist/checkpointer/actions/put.js +177 -25
  14. package/dist/checkpointer/internal/delta-history.d.ts +112 -0
  15. package/dist/checkpointer/internal/delta-history.js +252 -0
  16. package/dist/checkpointer/internal/listing.d.ts +149 -0
  17. package/dist/checkpointer/internal/listing.js +245 -0
  18. package/dist/checkpointer/internal/parse.d.ts +262 -0
  19. package/dist/checkpointer/internal/parse.js +372 -0
  20. package/dist/checkpointer/internal/pending-writes.d.ts +275 -0
  21. package/dist/checkpointer/internal/pending-writes.js +588 -0
  22. package/dist/checkpointer/internal/read.d.ts +130 -0
  23. package/dist/checkpointer/internal/read.js +264 -0
  24. package/dist/checkpointer/internal/rows.d.ts +571 -0
  25. package/dist/checkpointer/internal/rows.js +834 -0
  26. package/dist/checkpointer/internal/setup.d.ts +42 -19
  27. package/dist/checkpointer/internal/setup.js +65 -29
  28. package/dist/checkpointer/saver.d.ts +256 -16
  29. package/dist/checkpointer/saver.js +275 -29
  30. package/dist/checkpointer/types.d.ts +39 -39
  31. package/dist/checkpointer/types.js +10 -1
  32. package/dist/factory/factory.d.ts +134 -28
  33. package/dist/factory/factory.js +240 -21
  34. package/dist/factory/types.d.ts +76 -0
  35. package/dist/factory/types.js +10 -0
  36. package/dist/history/actions/add-messages.d.ts +31 -4
  37. package/dist/history/actions/add-messages.js +38 -58
  38. package/dist/history/actions/clear.d.ts +49 -6
  39. package/dist/history/actions/clear.js +66 -14
  40. package/dist/history/actions/get-messages.d.ts +54 -6
  41. package/dist/history/actions/get-messages.js +126 -43
  42. package/dist/history/actions/list-sessions.d.ts +52 -10
  43. package/dist/history/actions/list-sessions.js +139 -40
  44. package/dist/history/actions/reconcile-count.d.ts +42 -10
  45. package/dist/history/actions/reconcile-count.js +45 -45
  46. package/dist/history/chat-message-history.d.ts +220 -33
  47. package/dist/history/chat-message-history.js +240 -43
  48. package/dist/history/internal/append.d.ts +212 -0
  49. package/dist/history/internal/append.js +500 -0
  50. package/dist/history/internal/message-read.d.ts +84 -0
  51. package/dist/history/internal/message-read.js +204 -0
  52. package/dist/history/internal/parse.d.ts +153 -0
  53. package/dist/history/internal/parse.js +252 -0
  54. package/dist/history/internal/rows.d.ts +195 -0
  55. package/dist/history/internal/rows.js +250 -0
  56. package/dist/history/internal/session.d.ts +331 -0
  57. package/dist/history/internal/session.js +628 -0
  58. package/dist/history/internal/setup.d.ts +52 -17
  59. package/dist/history/internal/setup.js +92 -21
  60. package/dist/history/session-adapter.d.ts +102 -7
  61. package/dist/history/session-adapter.js +103 -9
  62. package/dist/history/types.d.ts +80 -29
  63. package/dist/history/types.js +10 -1
  64. package/dist/index.d.ts +42 -11
  65. package/dist/index.js +33 -12
  66. package/dist/shared/adapter.d.ts +135 -0
  67. package/dist/shared/adapter.js +143 -0
  68. package/dist/shared/clock.d.ts +51 -2
  69. package/dist/shared/clock.js +57 -2
  70. package/dist/shared/codec/codec.d.ts +288 -13
  71. package/dist/shared/codec/codec.js +416 -19
  72. package/dist/shared/codec/compression.d.ts +43 -7
  73. package/dist/shared/codec/compression.js +53 -13
  74. package/dist/shared/codec/json-serde.d.ts +76 -4
  75. package/dist/shared/codec/json-serde.js +181 -8
  76. package/dist/shared/codec/s3/client-types.d.ts +53 -0
  77. package/dist/shared/codec/s3/client-types.js +26 -0
  78. package/dist/shared/codec/s3/client.d.ts +43 -10
  79. package/dist/shared/codec/s3/client.js +82 -9
  80. package/dist/shared/codec/s3/config.d.ts +242 -11
  81. package/dist/shared/codec/s3/config.js +293 -11
  82. package/dist/shared/codec/s3/lifecycle.d.ts +164 -6
  83. package/dist/shared/codec/s3/lifecycle.js +335 -27
  84. package/dist/shared/codec/s3/offloader.d.ts +393 -18
  85. package/dist/shared/codec/s3/offloader.js +595 -37
  86. package/dist/shared/concurrency.d.ts +43 -0
  87. package/dist/shared/concurrency.js +78 -0
  88. package/dist/shared/dynamodb/abort.d.ts +47 -0
  89. package/dist/shared/dynamodb/abort.js +59 -0
  90. package/dist/shared/dynamodb/batch-write.d.ts +77 -14
  91. package/dist/shared/dynamodb/batch-write.js +146 -27
  92. package/dist/shared/dynamodb/cancellation.d.ts +121 -4
  93. package/dist/shared/dynamodb/cancellation.js +147 -3
  94. package/dist/shared/dynamodb/client.d.ts +162 -8
  95. package/dist/shared/dynamodb/client.js +153 -5
  96. package/dist/shared/dynamodb/idempotent-write.d.ts +551 -0
  97. package/dist/shared/dynamodb/idempotent-write.js +593 -0
  98. package/dist/shared/dynamodb/paginate.d.ts +105 -9
  99. package/dist/shared/dynamodb/paginate.js +175 -7
  100. package/dist/shared/dynamodb/partition-delete.d.ts +185 -14
  101. package/dist/shared/dynamodb/partition-delete.js +314 -44
  102. package/dist/shared/dynamodb/recency-index.d.ts +231 -0
  103. package/dist/shared/dynamodb/recency-index.js +377 -0
  104. package/dist/shared/dynamodb/retry.d.ts +276 -8
  105. package/dist/shared/dynamodb/retry.js +433 -23
  106. package/dist/shared/dynamodb/table-schema.d.ts +190 -0
  107. package/dist/shared/dynamodb/table-schema.js +209 -0
  108. package/dist/shared/errors/base-error.d.ts +184 -10
  109. package/dist/shared/errors/base-error.js +160 -14
  110. package/dist/shared/errors/boundary.d.ts +71 -0
  111. package/dist/shared/errors/boundary.js +143 -0
  112. package/dist/shared/errors/classify.d.ts +97 -0
  113. package/dist/shared/errors/classify.js +257 -0
  114. package/dist/shared/errors/error-code.d.ts +77 -2
  115. package/dist/shared/errors/error-code.js +83 -1
  116. package/dist/shared/errors/errors.d.ts +158 -59
  117. package/dist/shared/errors/errors.js +219 -92
  118. package/dist/shared/logging/logger.d.ts +69 -3
  119. package/dist/shared/logging/logger.js +97 -3
  120. package/dist/shared/logging/redaction.d.ts +92 -8
  121. package/dist/shared/logging/redaction.js +273 -17
  122. package/dist/shared/logging/secret-patterns.d.ts +149 -19
  123. package/dist/shared/logging/secret-patterns.js +188 -27
  124. package/dist/shared/logging/truncate.d.ts +197 -0
  125. package/dist/shared/logging/truncate.js +231 -0
  126. package/dist/shared/options.d.ts +59 -7
  127. package/dist/shared/options.js +9 -1
  128. package/dist/shared/ulid.d.ts +77 -7
  129. package/dist/shared/ulid.js +103 -8
  130. package/dist/shared/validation/collaborators.d.ts +141 -0
  131. package/dist/shared/validation/collaborators.js +188 -0
  132. package/dist/shared/validation/option-shape.d.ts +89 -0
  133. package/dist/shared/validation/option-shape.js +113 -0
  134. package/dist/shared/validation/options.d.ts +145 -0
  135. package/dist/shared/validation/options.js +328 -0
  136. package/dist/shared/validation/primitives.d.ts +288 -21
  137. package/dist/shared/validation/primitives.js +353 -50
  138. package/dist/shared/validation/ttl.d.ts +66 -10
  139. package/dist/shared/validation/ttl.js +113 -15
  140. package/dist/store/actions/list-namespaces.d.ts +76 -6
  141. package/dist/store/actions/list-namespaces.js +166 -24
  142. package/dist/store/actions/put.d.ts +33 -8
  143. package/dist/store/actions/put.js +53 -60
  144. package/dist/store/actions/reconcile-vector-index.d.ts +31 -10
  145. package/dist/store/actions/reconcile-vector-index.js +34 -15
  146. package/dist/store/actions/search.d.ts +34 -6
  147. package/dist/store/actions/search.js +56 -51
  148. package/dist/store/internal/batch-plan.d.ts +26 -0
  149. package/dist/store/internal/batch-plan.js +109 -0
  150. package/dist/store/internal/filter.d.ts +36 -3
  151. package/dist/store/internal/filter.js +66 -15
  152. package/dist/store/internal/get-item.d.ts +45 -0
  153. package/dist/store/internal/get-item.js +115 -0
  154. package/dist/store/internal/item-write.d.ts +230 -0
  155. package/dist/store/internal/item-write.js +463 -0
  156. package/dist/store/internal/parse.d.ts +225 -0
  157. package/dist/store/internal/parse.js +350 -0
  158. package/dist/store/internal/rows.d.ts +355 -0
  159. package/dist/store/internal/rows.js +447 -0
  160. package/dist/store/internal/semantic-search.d.ts +161 -6
  161. package/dist/store/internal/semantic-search.js +360 -18
  162. package/dist/store/internal/setup.d.ts +77 -20
  163. package/dist/store/internal/setup.js +178 -47
  164. package/dist/store/internal/table-search.d.ts +100 -0
  165. package/dist/store/internal/table-search.js +213 -0
  166. package/dist/store/internal/vector-index.d.ts +247 -0
  167. package/dist/store/internal/vector-index.js +546 -0
  168. package/dist/store/store.d.ts +270 -17
  169. package/dist/store/store.js +329 -38
  170. package/dist/store/types.d.ts +76 -26
  171. package/dist/store/types.js +13 -1
  172. package/dist/store/vector-backend.d.ts +64 -4
  173. package/dist/store/vector-backend.js +15 -1
  174. package/package.json +58 -36
  175. package/dist/checkpointer/actions/delete-thread.d.ts.map +0 -1
  176. package/dist/checkpointer/actions/delete-thread.js.map +0 -1
  177. package/dist/checkpointer/actions/get-tuple.d.ts.map +0 -1
  178. package/dist/checkpointer/actions/get-tuple.js.map +0 -1
  179. package/dist/checkpointer/actions/list.d.ts.map +0 -1
  180. package/dist/checkpointer/actions/list.js.map +0 -1
  181. package/dist/checkpointer/actions/put-writes.d.ts.map +0 -1
  182. package/dist/checkpointer/actions/put-writes.js.map +0 -1
  183. package/dist/checkpointer/actions/put.d.ts.map +0 -1
  184. package/dist/checkpointer/actions/put.js.map +0 -1
  185. package/dist/checkpointer/internal/assemble.d.ts +0 -10
  186. package/dist/checkpointer/internal/assemble.d.ts.map +0 -1
  187. package/dist/checkpointer/internal/assemble.js +0 -37
  188. package/dist/checkpointer/internal/assemble.js.map +0 -1
  189. package/dist/checkpointer/internal/configurable.d.ts +0 -13
  190. package/dist/checkpointer/internal/configurable.d.ts.map +0 -1
  191. package/dist/checkpointer/internal/configurable.js +0 -23
  192. package/dist/checkpointer/internal/configurable.js.map +0 -1
  193. package/dist/checkpointer/internal/fetch.d.ts +0 -10
  194. package/dist/checkpointer/internal/fetch.d.ts.map +0 -1
  195. package/dist/checkpointer/internal/fetch.js +0 -46
  196. package/dist/checkpointer/internal/fetch.js.map +0 -1
  197. package/dist/checkpointer/internal/filter-match.d.ts +0 -12
  198. package/dist/checkpointer/internal/filter-match.d.ts.map +0 -1
  199. package/dist/checkpointer/internal/filter-match.js +0 -14
  200. package/dist/checkpointer/internal/filter-match.js.map +0 -1
  201. package/dist/checkpointer/internal/item-reader.d.ts +0 -55
  202. package/dist/checkpointer/internal/item-reader.d.ts.map +0 -1
  203. package/dist/checkpointer/internal/item-reader.js +0 -88
  204. package/dist/checkpointer/internal/item-reader.js.map +0 -1
  205. package/dist/checkpointer/internal/item-writer.d.ts +0 -26
  206. package/dist/checkpointer/internal/item-writer.d.ts.map +0 -1
  207. package/dist/checkpointer/internal/item-writer.js +0 -92
  208. package/dist/checkpointer/internal/item-writer.js.map +0 -1
  209. package/dist/checkpointer/internal/keys.d.ts +0 -31
  210. package/dist/checkpointer/internal/keys.d.ts.map +0 -1
  211. package/dist/checkpointer/internal/keys.js +0 -87
  212. package/dist/checkpointer/internal/keys.js.map +0 -1
  213. package/dist/checkpointer/internal/query.d.ts +0 -20
  214. package/dist/checkpointer/internal/query.d.ts.map +0 -1
  215. package/dist/checkpointer/internal/query.js +0 -36
  216. package/dist/checkpointer/internal/query.js.map +0 -1
  217. package/dist/checkpointer/internal/setup.d.ts.map +0 -1
  218. package/dist/checkpointer/internal/setup.js.map +0 -1
  219. package/dist/checkpointer/internal/special-write-cas.d.ts +0 -30
  220. package/dist/checkpointer/internal/special-write-cas.d.ts.map +0 -1
  221. package/dist/checkpointer/internal/special-write-cas.js +0 -104
  222. package/dist/checkpointer/internal/special-write-cas.js.map +0 -1
  223. package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -24
  224. package/dist/checkpointer/internal/special-write-cleanup.d.ts.map +0 -1
  225. package/dist/checkpointer/internal/special-write-cleanup.js +0 -47
  226. package/dist/checkpointer/internal/special-write-cleanup.js.map +0 -1
  227. package/dist/checkpointer/internal/special-write-verify.d.ts +0 -54
  228. package/dist/checkpointer/internal/special-write-verify.d.ts.map +0 -1
  229. package/dist/checkpointer/internal/special-write-verify.js +0 -65
  230. package/dist/checkpointer/internal/special-write-verify.js.map +0 -1
  231. package/dist/checkpointer/internal/validation.d.ts +0 -13
  232. package/dist/checkpointer/internal/validation.d.ts.map +0 -1
  233. package/dist/checkpointer/internal/validation.js +0 -30
  234. package/dist/checkpointer/internal/validation.js.map +0 -1
  235. package/dist/checkpointer/internal/write-guard.d.ts +0 -13
  236. package/dist/checkpointer/internal/write-guard.d.ts.map +0 -1
  237. package/dist/checkpointer/internal/write-guard.js +0 -39
  238. package/dist/checkpointer/internal/write-guard.js.map +0 -1
  239. package/dist/checkpointer/internal/write-index.d.ts +0 -37
  240. package/dist/checkpointer/internal/write-index.d.ts.map +0 -1
  241. package/dist/checkpointer/internal/write-index.js +0 -42
  242. package/dist/checkpointer/internal/write-index.js.map +0 -1
  243. package/dist/checkpointer/saver.d.ts.map +0 -1
  244. package/dist/checkpointer/saver.js.map +0 -1
  245. package/dist/checkpointer/types.d.ts.map +0 -1
  246. package/dist/checkpointer/types.js.map +0 -1
  247. package/dist/factory/factory.d.ts.map +0 -1
  248. package/dist/factory/factory.js.map +0 -1
  249. package/dist/history/actions/add-messages.d.ts.map +0 -1
  250. package/dist/history/actions/add-messages.js.map +0 -1
  251. package/dist/history/actions/clear.d.ts.map +0 -1
  252. package/dist/history/actions/clear.js.map +0 -1
  253. package/dist/history/actions/get-messages.d.ts.map +0 -1
  254. package/dist/history/actions/get-messages.js.map +0 -1
  255. package/dist/history/actions/list-sessions.d.ts.map +0 -1
  256. package/dist/history/actions/list-sessions.js.map +0 -1
  257. package/dist/history/actions/reconcile-count.d.ts.map +0 -1
  258. package/dist/history/actions/reconcile-count.js.map +0 -1
  259. package/dist/history/chat-message-history.d.ts.map +0 -1
  260. package/dist/history/chat-message-history.js.map +0 -1
  261. package/dist/history/internal/append-saga.d.ts +0 -20
  262. package/dist/history/internal/append-saga.d.ts.map +0 -1
  263. package/dist/history/internal/append-saga.js +0 -35
  264. package/dist/history/internal/append-saga.js.map +0 -1
  265. package/dist/history/internal/compensation.d.ts +0 -21
  266. package/dist/history/internal/compensation.d.ts.map +0 -1
  267. package/dist/history/internal/compensation.js +0 -84
  268. package/dist/history/internal/compensation.js.map +0 -1
  269. package/dist/history/internal/item-mapper.d.ts +0 -12
  270. package/dist/history/internal/item-mapper.d.ts.map +0 -1
  271. package/dist/history/internal/item-mapper.js +0 -33
  272. package/dist/history/internal/item-mapper.js.map +0 -1
  273. package/dist/history/internal/keys.d.ts +0 -17
  274. package/dist/history/internal/keys.d.ts.map +0 -1
  275. package/dist/history/internal/keys.js +0 -49
  276. package/dist/history/internal/keys.js.map +0 -1
  277. package/dist/history/internal/message-chunker.d.ts +0 -14
  278. package/dist/history/internal/message-chunker.d.ts.map +0 -1
  279. package/dist/history/internal/message-chunker.js +0 -68
  280. package/dist/history/internal/message-chunker.js.map +0 -1
  281. package/dist/history/internal/message-transaction.d.ts +0 -26
  282. package/dist/history/internal/message-transaction.d.ts.map +0 -1
  283. package/dist/history/internal/message-transaction.js +0 -60
  284. package/dist/history/internal/message-transaction.js.map +0 -1
  285. package/dist/history/internal/query.d.ts +0 -10
  286. package/dist/history/internal/query.d.ts.map +0 -1
  287. package/dist/history/internal/query.js +0 -31
  288. package/dist/history/internal/query.js.map +0 -1
  289. package/dist/history/internal/session-count.d.ts +0 -41
  290. package/dist/history/internal/session-count.d.ts.map +0 -1
  291. package/dist/history/internal/session-count.js +0 -109
  292. package/dist/history/internal/session-count.js.map +0 -1
  293. package/dist/history/internal/session-title.d.ts +0 -20
  294. package/dist/history/internal/session-title.d.ts.map +0 -1
  295. package/dist/history/internal/session-title.js +0 -44
  296. package/dist/history/internal/session-title.js.map +0 -1
  297. package/dist/history/internal/session-update.d.ts +0 -28
  298. package/dist/history/internal/session-update.d.ts.map +0 -1
  299. package/dist/history/internal/session-update.js +0 -70
  300. package/dist/history/internal/session-update.js.map +0 -1
  301. package/dist/history/internal/setup.d.ts.map +0 -1
  302. package/dist/history/internal/setup.js.map +0 -1
  303. package/dist/history/internal/title-generator.d.ts +0 -13
  304. package/dist/history/internal/title-generator.d.ts.map +0 -1
  305. package/dist/history/internal/title-generator.js +0 -25
  306. package/dist/history/internal/title-generator.js.map +0 -1
  307. package/dist/history/internal/ttl-anchor.d.ts +0 -25
  308. package/dist/history/internal/ttl-anchor.d.ts.map +0 -1
  309. package/dist/history/internal/ttl-anchor.js +0 -38
  310. package/dist/history/internal/ttl-anchor.js.map +0 -1
  311. package/dist/history/internal/validation.d.ts +0 -9
  312. package/dist/history/internal/validation.d.ts.map +0 -1
  313. package/dist/history/internal/validation.js +0 -16
  314. package/dist/history/internal/validation.js.map +0 -1
  315. package/dist/history/session-adapter.d.ts.map +0 -1
  316. package/dist/history/session-adapter.js.map +0 -1
  317. package/dist/history/types.d.ts.map +0 -1
  318. package/dist/history/types.js.map +0 -1
  319. package/dist/index.d.ts.map +0 -1
  320. package/dist/index.js.map +0 -1
  321. package/dist/shared/clock.d.ts.map +0 -1
  322. package/dist/shared/clock.js.map +0 -1
  323. package/dist/shared/codec/codec.d.ts.map +0 -1
  324. package/dist/shared/codec/codec.js.map +0 -1
  325. package/dist/shared/codec/compression.d.ts.map +0 -1
  326. package/dist/shared/codec/compression.js.map +0 -1
  327. package/dist/shared/codec/descriptor-keys.d.ts +0 -4
  328. package/dist/shared/codec/descriptor-keys.d.ts.map +0 -1
  329. package/dist/shared/codec/descriptor-keys.js +0 -14
  330. package/dist/shared/codec/descriptor-keys.js.map +0 -1
  331. package/dist/shared/codec/json-serde.d.ts.map +0 -1
  332. package/dist/shared/codec/json-serde.js.map +0 -1
  333. package/dist/shared/codec/s3/client.d.ts.map +0 -1
  334. package/dist/shared/codec/s3/client.js.map +0 -1
  335. package/dist/shared/codec/s3/config.d.ts.map +0 -1
  336. package/dist/shared/codec/s3/config.js.map +0 -1
  337. package/dist/shared/codec/s3/delete.d.ts +0 -8
  338. package/dist/shared/codec/s3/delete.d.ts.map +0 -1
  339. package/dist/shared/codec/s3/delete.js +0 -29
  340. package/dist/shared/codec/s3/delete.js.map +0 -1
  341. package/dist/shared/codec/s3/lifecycle.d.ts.map +0 -1
  342. package/dist/shared/codec/s3/lifecycle.js.map +0 -1
  343. package/dist/shared/codec/s3/offloader.d.ts.map +0 -1
  344. package/dist/shared/codec/s3/offloader.js.map +0 -1
  345. package/dist/shared/codec/s3/orphans.d.ts +0 -18
  346. package/dist/shared/codec/s3/orphans.d.ts.map +0 -1
  347. package/dist/shared/codec/s3/orphans.js +0 -58
  348. package/dist/shared/codec/s3/orphans.js.map +0 -1
  349. package/dist/shared/codec/s3/read-write.d.ts +0 -14
  350. package/dist/shared/codec/s3/read-write.d.ts.map +0 -1
  351. package/dist/shared/codec/s3/read-write.js +0 -43
  352. package/dist/shared/codec/s3/read-write.js.map +0 -1
  353. package/dist/shared/codec/s3/retry.d.ts +0 -5
  354. package/dist/shared/codec/s3/retry.d.ts.map +0 -1
  355. package/dist/shared/codec/s3/retry.js +0 -25
  356. package/dist/shared/codec/s3/retry.js.map +0 -1
  357. package/dist/shared/constants.d.ts +0 -64
  358. package/dist/shared/constants.d.ts.map +0 -1
  359. package/dist/shared/constants.js +0 -67
  360. package/dist/shared/constants.js.map +0 -1
  361. package/dist/shared/dynamodb/backoff.d.ts +0 -15
  362. package/dist/shared/dynamodb/backoff.d.ts.map +0 -1
  363. package/dist/shared/dynamodb/backoff.js +0 -48
  364. package/dist/shared/dynamodb/backoff.js.map +0 -1
  365. package/dist/shared/dynamodb/batch-write.d.ts.map +0 -1
  366. package/dist/shared/dynamodb/batch-write.js.map +0 -1
  367. package/dist/shared/dynamodb/cancellation.d.ts.map +0 -1
  368. package/dist/shared/dynamodb/cancellation.js.map +0 -1
  369. package/dist/shared/dynamodb/client.d.ts.map +0 -1
  370. package/dist/shared/dynamodb/client.js.map +0 -1
  371. package/dist/shared/dynamodb/conditional-put.d.ts +0 -51
  372. package/dist/shared/dynamodb/conditional-put.d.ts.map +0 -1
  373. package/dist/shared/dynamodb/conditional-put.js +0 -59
  374. package/dist/shared/dynamodb/conditional-put.js.map +0 -1
  375. package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -19
  376. package/dist/shared/dynamodb/drain-unprocessed.d.ts.map +0 -1
  377. package/dist/shared/dynamodb/drain-unprocessed.js +0 -44
  378. package/dist/shared/dynamodb/drain-unprocessed.js.map +0 -1
  379. package/dist/shared/dynamodb/paginate-core.d.ts +0 -22
  380. package/dist/shared/dynamodb/paginate-core.d.ts.map +0 -1
  381. package/dist/shared/dynamodb/paginate-core.js +0 -52
  382. package/dist/shared/dynamodb/paginate-core.js.map +0 -1
  383. package/dist/shared/dynamodb/paginate.d.ts.map +0 -1
  384. package/dist/shared/dynamodb/paginate.js.map +0 -1
  385. package/dist/shared/dynamodb/partition-delete.d.ts.map +0 -1
  386. package/dist/shared/dynamodb/partition-delete.js.map +0 -1
  387. package/dist/shared/dynamodb/retry-classifier.d.ts +0 -9
  388. package/dist/shared/dynamodb/retry-classifier.d.ts.map +0 -1
  389. package/dist/shared/dynamodb/retry-classifier.js +0 -87
  390. package/dist/shared/dynamodb/retry-classifier.js.map +0 -1
  391. package/dist/shared/dynamodb/retry.d.ts.map +0 -1
  392. package/dist/shared/dynamodb/retry.js.map +0 -1
  393. package/dist/shared/dynamodb/scan.d.ts +0 -15
  394. package/dist/shared/dynamodb/scan.d.ts.map +0 -1
  395. package/dist/shared/dynamodb/scan.js +0 -20
  396. package/dist/shared/dynamodb/scan.js.map +0 -1
  397. package/dist/shared/dynamodb/types.d.ts +0 -24
  398. package/dist/shared/dynamodb/types.d.ts.map +0 -1
  399. package/dist/shared/dynamodb/types.js +0 -3
  400. package/dist/shared/dynamodb/types.js.map +0 -1
  401. package/dist/shared/errors/base-error.d.ts.map +0 -1
  402. package/dist/shared/errors/base-error.js.map +0 -1
  403. package/dist/shared/errors/error-code.d.ts.map +0 -1
  404. package/dist/shared/errors/error-code.js.map +0 -1
  405. package/dist/shared/errors/errors.d.ts.map +0 -1
  406. package/dist/shared/errors/errors.js.map +0 -1
  407. package/dist/shared/errors/wrap-error.d.ts +0 -16
  408. package/dist/shared/errors/wrap-error.d.ts.map +0 -1
  409. package/dist/shared/errors/wrap-error.js +0 -30
  410. package/dist/shared/errors/wrap-error.js.map +0 -1
  411. package/dist/shared/logging/logger.d.ts.map +0 -1
  412. package/dist/shared/logging/logger.js.map +0 -1
  413. package/dist/shared/logging/redaction-walk.d.ts +0 -23
  414. package/dist/shared/logging/redaction-walk.d.ts.map +0 -1
  415. package/dist/shared/logging/redaction-walk.js +0 -92
  416. package/dist/shared/logging/redaction-walk.js.map +0 -1
  417. package/dist/shared/logging/redaction.d.ts.map +0 -1
  418. package/dist/shared/logging/redaction.js.map +0 -1
  419. package/dist/shared/logging/secret-patterns.d.ts.map +0 -1
  420. package/dist/shared/logging/secret-patterns.js.map +0 -1
  421. package/dist/shared/options.d.ts.map +0 -1
  422. package/dist/shared/options.js.map +0 -1
  423. package/dist/shared/ulid.d.ts.map +0 -1
  424. package/dist/shared/ulid.js.map +0 -1
  425. package/dist/shared/validation/primitives.d.ts.map +0 -1
  426. package/dist/shared/validation/primitives.js.map +0 -1
  427. package/dist/shared/validation/ttl.d.ts.map +0 -1
  428. package/dist/shared/validation/ttl.js.map +0 -1
  429. package/dist/store/actions/get.d.ts +0 -5
  430. package/dist/store/actions/get.d.ts.map +0 -1
  431. package/dist/store/actions/get.js +0 -35
  432. package/dist/store/actions/get.js.map +0 -1
  433. package/dist/store/actions/list-namespaces.d.ts.map +0 -1
  434. package/dist/store/actions/list-namespaces.js.map +0 -1
  435. package/dist/store/actions/put.d.ts.map +0 -1
  436. package/dist/store/actions/put.js.map +0 -1
  437. package/dist/store/actions/reconcile-vector-index.d.ts.map +0 -1
  438. package/dist/store/actions/reconcile-vector-index.js.map +0 -1
  439. package/dist/store/actions/search.d.ts.map +0 -1
  440. package/dist/store/actions/search.js.map +0 -1
  441. package/dist/store/internal/backend-search.d.ts +0 -5
  442. package/dist/store/internal/backend-search.d.ts.map +0 -1
  443. package/dist/store/internal/backend-search.js +0 -68
  444. package/dist/store/internal/backend-search.js.map +0 -1
  445. package/dist/store/internal/filter.d.ts.map +0 -1
  446. package/dist/store/internal/filter.js.map +0 -1
  447. package/dist/store/internal/index-reconcile.d.ts +0 -22
  448. package/dist/store/internal/index-reconcile.d.ts.map +0 -1
  449. package/dist/store/internal/index-reconcile.js +0 -105
  450. package/dist/store/internal/index-reconcile.js.map +0 -1
  451. package/dist/store/internal/index-sync.d.ts +0 -11
  452. package/dist/store/internal/index-sync.d.ts.map +0 -1
  453. package/dist/store/internal/index-sync.js +0 -26
  454. package/dist/store/internal/index-sync.js.map +0 -1
  455. package/dist/store/internal/item-mapper.d.ts +0 -25
  456. package/dist/store/internal/item-mapper.d.ts.map +0 -1
  457. package/dist/store/internal/item-mapper.js +0 -53
  458. package/dist/store/internal/item-mapper.js.map +0 -1
  459. package/dist/store/internal/keys.d.ts +0 -18
  460. package/dist/store/internal/keys.d.ts.map +0 -1
  461. package/dist/store/internal/keys.js +0 -42
  462. package/dist/store/internal/keys.js.map +0 -1
  463. package/dist/store/internal/namespace-match.d.ts +0 -12
  464. package/dist/store/internal/namespace-match.d.ts.map +0 -1
  465. package/dist/store/internal/namespace-match.js +0 -41
  466. package/dist/store/internal/namespace-match.js.map +0 -1
  467. package/dist/store/internal/overwrite-swap.d.ts +0 -33
  468. package/dist/store/internal/overwrite-swap.d.ts.map +0 -1
  469. package/dist/store/internal/overwrite-swap.js +0 -62
  470. package/dist/store/internal/overwrite-swap.js.map +0 -1
  471. package/dist/store/internal/persist.d.ts +0 -27
  472. package/dist/store/internal/persist.d.ts.map +0 -1
  473. package/dist/store/internal/persist.js +0 -59
  474. package/dist/store/internal/persist.js.map +0 -1
  475. package/dist/store/internal/query.d.ts +0 -6
  476. package/dist/store/internal/query.d.ts.map +0 -1
  477. package/dist/store/internal/query.js +0 -32
  478. package/dist/store/internal/query.js.map +0 -1
  479. package/dist/store/internal/ranker.d.ts +0 -13
  480. package/dist/store/internal/ranker.d.ts.map +0 -1
  481. package/dist/store/internal/ranker.js +0 -31
  482. package/dist/store/internal/ranker.js.map +0 -1
  483. package/dist/store/internal/read-existing.d.ts +0 -19
  484. package/dist/store/internal/read-existing.d.ts.map +0 -1
  485. package/dist/store/internal/read-existing.js +0 -29
  486. package/dist/store/internal/read-existing.js.map +0 -1
  487. package/dist/store/internal/score-direction.d.ts +0 -32
  488. package/dist/store/internal/score-direction.d.ts.map +0 -1
  489. package/dist/store/internal/score-direction.js +0 -39
  490. package/dist/store/internal/score-direction.js.map +0 -1
  491. package/dist/store/internal/search-filter.d.ts +0 -4
  492. package/dist/store/internal/search-filter.d.ts.map +0 -1
  493. package/dist/store/internal/search-filter.js +0 -11
  494. package/dist/store/internal/search-filter.js.map +0 -1
  495. package/dist/store/internal/semantic-search.d.ts.map +0 -1
  496. package/dist/store/internal/semantic-search.js.map +0 -1
  497. package/dist/store/internal/setup.d.ts.map +0 -1
  498. package/dist/store/internal/setup.js.map +0 -1
  499. package/dist/store/internal/validation.d.ts +0 -13
  500. package/dist/store/internal/validation.d.ts.map +0 -1
  501. package/dist/store/internal/validation.js +0 -35
  502. package/dist/store/internal/validation.js.map +0 -1
  503. package/dist/store/internal/write-verify.d.ts +0 -37
  504. package/dist/store/internal/write-verify.d.ts.map +0 -1
  505. package/dist/store/internal/write-verify.js +0 -68
  506. package/dist/store/internal/write-verify.js.map +0 -1
  507. package/dist/store/store.d.ts.map +0 -1
  508. package/dist/store/store.js.map +0 -1
  509. package/dist/store/types.d.ts.map +0 -1
  510. package/dist/store/types.js.map +0 -1
  511. package/dist/store/vector-backend.d.ts.map +0 -1
  512. package/dist/store/vector-backend.js.map +0 -1
@@ -1,112 +1,239 @@
1
1
  "use strict";
2
+ /**
3
+ * Hides what each of this library's errors carries, for the codes that have
4
+ * a factory here.
5
+ *
6
+ * A failure site with a factory below names it for its code and the facts it
7
+ * has. The message wording, which facts go into `context` or `details`,
8
+ * copying a list a caller reads from a `catch` long after the throw,
9
+ * redacting quoted cause text, and a stack that starts at the caller rather
10
+ * than inside the factory are decided here once per code, on the one error
11
+ * class (record 19). `FORMAT_UNSUPPORTED`, `PAYLOAD_CORRUPT`,
12
+ * `COMPRESSION_LIMIT`, `S3_OFFLOAD_FAILED` and `ANCESTOR_EXPIRED` are raised
13
+ * with `new DynamoDBLangGraphError` at their own call sites instead, and
14
+ * every AWS-classified code is wrapped once, by `wrapForeignError` in the
15
+ * error boundary, not per code here.
16
+ */
2
17
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CompensationFailedError = exports.BatchWriteAllIncompleteError = exports.BatchWriteIncompleteError = exports.AbortError = exports.ResultTruncatedError = exports.RetryExhaustedError = exports.ConflictError = exports.ValidationError = void 0;
18
+ exports.validationError = validationError;
19
+ exports.conflictError = conflictError;
20
+ exports.retryExhaustedError = retryExhaustedError;
21
+ exports.resultTruncatedError = resultTruncatedError;
22
+ exports.abortError = abortError;
23
+ exports.batchWriteIncompleteError = batchWriteIncompleteError;
24
+ exports.batchWriteAllIncompleteError = batchWriteAllIncompleteError;
25
+ exports.compensationFailedError = compensationFailedError;
26
+ const secret_patterns_1 = require("../logging/secret-patterns");
4
27
  const base_error_1 = require("./base-error");
5
28
  const error_code_1 = require("./error-code");
6
- /** Input failed a validation rule before any AWS call was made. */
7
- class ValidationError extends base_error_1.DynamoDbLangGraphError {
8
- constructor(message, field) {
9
- super(message, error_code_1.ErrorCode.VALIDATION, field === undefined ? {} : { operation: field });
10
- this.name = 'ValidationError';
11
- }
29
+ /**
30
+ * Build one error, with the stack starting at the code that called `factory`
31
+ * rather than inside it: the top frame is the one a reader follows.
32
+ */
33
+ function build(factory, spec) {
34
+ const error = new base_error_1.DynamoDBLangGraphError(spec.message, spec.code, spec.context, spec.cause, spec.details);
35
+ Error.captureStackTrace(error, factory);
36
+ return error;
12
37
  }
13
- exports.ValidationError = ValidationError;
14
- /** A conditional write failed because the precondition no longer holds. */
15
- class ConflictError extends base_error_1.DynamoDbLangGraphError {
16
- constructor(message, cause) {
17
- super(message, error_code_1.ErrorCode.CONDITION_CONFLICT, {}, cause);
18
- this.name = 'ConflictError';
19
- }
38
+ /**
39
+ * The error for input that failed a check before any AWS call was made.
40
+ *
41
+ * Accepts: `message` — already redacted by whoever composed it. `field` — the
42
+ * option, argument or cap that failed, dotted for a nested one
43
+ * (`s3.bucketName`); omitted only where no single input is at fault. `cause` —
44
+ * the refusal beneath it.
45
+ *
46
+ * Returns: a `VALIDATION` error, with `context.field` set when a field was
47
+ * named — which is what a caller branches on to point at the offending input.
48
+ *
49
+ * Throws: nothing; building an error may not fail.
50
+ */
51
+ function validationError(message, field, cause) {
52
+ return build(validationError, {
53
+ message,
54
+ code: error_code_1.ErrorCode.VALIDATION,
55
+ context: field === undefined ? {} : { field },
56
+ cause,
57
+ });
20
58
  }
21
- exports.ConflictError = ConflictError;
22
- /** A retried operation exhausted its attempt budget. */
23
- class RetryExhaustedError extends base_error_1.DynamoDbLangGraphError {
24
- constructor(message, attempts, cause) {
25
- super(message, error_code_1.ErrorCode.RETRY_EXHAUSTED, attempts === undefined ? {} : { attempts }, cause);
26
- this.name = 'RetryExhaustedError';
27
- }
59
+ /**
60
+ * The error for a conditional write whose precondition no longer holds.
61
+ *
62
+ * Accepts: `message` — what precondition no longer held. `cause` — the
63
+ * rejection beneath it, when there is one.
64
+ *
65
+ * Returns: a `CONDITION_CONFLICT` error. A caller may retry the operation
66
+ * from a fresh read; nothing was written.
67
+ *
68
+ * Throws: nothing; building an error may not fail.
69
+ */
70
+ function conflictError(message, cause) {
71
+ return build(conflictError, { message, code: error_code_1.ErrorCode.CONDITION_CONFLICT, context: {}, cause });
72
+ }
73
+ /**
74
+ * The error for a retried operation that exhausted its attempt budget.
75
+ *
76
+ * Accepts: `attempts` — how many were made before the budget ran out.
77
+ * `cause` — the last failure, kept so a caller can classify what actually
78
+ * went wrong.
79
+ *
80
+ * Returns: a `RETRY_EXHAUSTED` error, with `context.attempts` when `attempts`
81
+ * was given. It says the attempts are spent, **not** that the operation did
82
+ * not happen: a write whose response was lost is reported this way too, which
83
+ * is why every caller that would delete something reads the row back first.
84
+ *
85
+ * Throws: nothing; building an error may not fail.
86
+ */
87
+ function retryExhaustedError(message, attempts, cause) {
88
+ return build(retryExhaustedError, {
89
+ message,
90
+ code: error_code_1.ErrorCode.RETRY_EXHAUSTED,
91
+ context: attempts === undefined ? {} : { attempts },
92
+ cause,
93
+ });
28
94
  }
29
- exports.RetryExhaustedError = RetryExhaustedError;
30
95
  /**
31
- * A paginated read hit its runaway guard (item or iteration cap) while more
32
- * data remained, so the result would have been silently truncated. Narrow the
33
- * query (filter/prefix) or raise the cap rather than trusting a partial result.
96
+ * The error for a paginated read that hit its runaway guard (item or
97
+ * iteration cap) while more data remained, so the result would have been
98
+ * silently truncated. Narrow the query (filter/prefix) or raise the cap rather
99
+ * than trusting a partial result.
100
+ *
101
+ * Accepts: `cap` — which cap was hit (`maxItems`, `maxIterations`). `limit` —
102
+ * its value, quoted in the message so the fix is obvious.
103
+ *
104
+ * Returns: a `RESULT_TRUNCATED` error, with `context.field` naming the cap.
105
+ * Raised only when data actually remained, so it never turns a complete
106
+ * result into a failure.
107
+ *
108
+ * Throws: nothing; building an error may not fail.
34
109
  */
35
- class ResultTruncatedError extends base_error_1.DynamoDbLangGraphError {
36
- constructor(cap, limit) {
37
- super(`paginated read truncated at the ${cap} cap (${limit}) with more data remaining`, error_code_1.ErrorCode.RESULT_TRUNCATED, { operation: cap });
38
- this.name = 'ResultTruncatedError';
39
- }
110
+ function resultTruncatedError(cap, limit) {
111
+ return build(resultTruncatedError, {
112
+ message: `paginated read truncated at the ${cap} cap (${limit}) with more data remaining`,
113
+ code: error_code_1.ErrorCode.RESULT_TRUNCATED,
114
+ context: { field: cap },
115
+ });
40
116
  }
41
- exports.ResultTruncatedError = ResultTruncatedError;
42
- /** An operation was cancelled via its AbortSignal. */
43
- class AbortError extends base_error_1.DynamoDbLangGraphError {
44
- constructor(message = 'Operation aborted') {
45
- super(message, error_code_1.ErrorCode.ABORTED);
46
- this.name = 'AbortError';
47
- }
117
+ /**
118
+ * The error for an operation cancelled via its `AbortSignal`.
119
+ *
120
+ * Accepts: `message` — defaults to `Operation aborted`. `cause` — the
121
+ * `AbortSignal`'s own reason, when it carried one.
122
+ *
123
+ * Returns: an `ABORTED` error. Distinct from every failure code on purpose: a
124
+ * caller who cancelled did not encounter a fault, and treating the two alike
125
+ * reported an incomplete write for a deliberate stop.
126
+ *
127
+ * Throws: nothing; building an error may not fail.
128
+ */
129
+ function abortError(message = 'Operation aborted', cause) {
130
+ return build(abortError, { message, code: error_code_1.ErrorCode.ABORTED, context: {}, cause });
48
131
  }
49
- exports.AbortError = AbortError;
50
132
  /**
51
- * A BatchWriteItem sequence could not drain its UnprocessedItems. Items NOT
52
- * listed in {@link unprocessed} were acked by DynamoDB and persist — there is
53
- * no rollback (drive reconciliation from `unprocessed`). `cause`, when given,
54
- * is the underlying failure that interrupted the drain (e.g. a thrown,
55
- * non-UnprocessedItems error from a retry round) rather than a clean exhaustion
56
- * of the UnprocessedItems retry budget.
133
+ * The error for a `BatchWriteItem` sequence that could not drain its
134
+ * `UnprocessedItems`.
135
+ *
136
+ * Accepts: `succeededCount` — writes DynamoDB acked. `unprocessed` — the
137
+ * requests it did not, verbatim, so they can be re-submitted. `retries` —
138
+ * rounds spent. `cause` — an error that interrupted the drain (a thrown,
139
+ * non-`UnprocessedItems` error from a retry round), rather than a clean
140
+ * exhaustion of the `UnprocessedItems` retry budget.
141
+ *
142
+ * Returns: a `BATCH_WRITE_INCOMPLETE` error whose `details` (`kind: 'drain'`)
143
+ * carry both counts and the list. Items *not* listed in `details.unprocessed`
144
+ * persist: there is no rollback, so reconciliation is driven from that list.
145
+ * That list is **copied**: it is read from a `catch` long after the throw, and
146
+ * a caller reusing its request buffer must not be able to rewrite it.
147
+ *
148
+ * Throws: nothing; building an error may not fail. Anything but an array of
149
+ * requests reads as an empty list rather than crashing the report.
57
150
  */
58
- class BatchWriteIncompleteError extends base_error_1.DynamoDbLangGraphError {
59
- succeededCount;
60
- unprocessed;
61
- constructor(succeededCount, unprocessed, retries, cause) {
62
- super(`batchWrite did not drain after ${retries} UnprocessedItems retries: ` +
63
- `${succeededCount} item(s) persisted, ${unprocessed.length} still un-acked.`, error_code_1.ErrorCode.BATCH_WRITE_INCOMPLETE, {}, cause);
64
- this.name = 'BatchWriteIncompleteError';
65
- this.succeededCount = succeededCount;
66
- this.unprocessed = unprocessed;
67
- }
151
+ function batchWriteIncompleteError(succeededCount, unprocessed, retries, cause) {
152
+ const items = Array.isArray(unprocessed) ? [...unprocessed] : [];
153
+ return build(batchWriteIncompleteError, {
154
+ message: `batchWrite did not drain after ${retries} UnprocessedItems retries: ` +
155
+ `${succeededCount} item(s) persisted, ${items.length} still un-acked.`,
156
+ code: error_code_1.ErrorCode.BATCH_WRITE_INCOMPLETE,
157
+ context: {},
158
+ cause,
159
+ details: { kind: 'drain', succeededCount, unprocessed: items, retries },
160
+ });
68
161
  }
69
- exports.BatchWriteIncompleteError = BatchWriteIncompleteError;
70
162
  /**
71
- * batchWriteAll attempts every chunk rather than stopping at the first
72
- * failure — a mid-sequence chunk failing does not abandon the chunks after
73
- * it. `failedChunks` holds each failing chunk's own error (commonly a
74
- * {@link BatchWriteIncompleteError}); every chunk not represented there
75
- * drained successfully and its writes persist — there is no rollback.
76
- * `succeededCount` is the exact number of individual write requests
77
- * confirmed persisted across every chunk (full chunks plus any failed
78
- * chunk's own partial drain), more precise than `succeededChunks` alone
79
- * when a chunk partially drains before exhausting its retries.
163
+ * The error for a `batchWriteAll` pass — or a partition-wide delete — that did
164
+ * not fully drain. `batchWriteAll` attempts every chunk rather than stopping
165
+ * at the first failure, so a mid-sequence chunk failing does not abandon the
166
+ * chunks after it. A partition-wide delete reports through the same shape,
167
+ * because what it answers is the same question — how much of this call got
168
+ * through — but it sends one conditional request per row rather than a batch
169
+ * of twenty-five, so it counts rows where a batch counts chunks and says so in
170
+ * its message.
171
+ *
172
+ * Accepts: `batch.succeeded`/`batch.total` — the chunk tally. `batch.failures`
173
+ * — each failing chunk's own error, commonly a `BATCH_WRITE_INCOMPLETE` drain
174
+ * error. `batch.succeededCount` — individual writes confirmed persisted across
175
+ * every chunk (full chunks plus any failed chunk's own partial drain), which
176
+ * is more precise than the chunk tally when a chunk partially drains.
177
+ * `batch.unit` — what the first two counts count; omitting it reproduces the
178
+ * batch wording exactly.
179
+ *
180
+ * Returns: a `BATCH_WRITE_INCOMPLETE` error whose `details` (`kind: 'pass'`)
181
+ * carry the tally, with the first failing chunk's error as `cause`. Every
182
+ * chunk not represented in `details.failedChunks` drained successfully and its
183
+ * writes persist — there is no rollback. The list is **copied**, for the same
184
+ * reason a drain error copies its own.
185
+ *
186
+ * Throws: nothing; building an error may not fail. Anything but an array of
187
+ * errors reads as an empty list rather than crashing the report.
80
188
  */
81
- class BatchWriteAllIncompleteError extends base_error_1.DynamoDbLangGraphError {
82
- succeededChunks;
83
- totalChunks;
84
- failedChunks;
85
- succeededCount;
86
- constructor(succeededChunks, totalChunks, failedChunks, succeededCount = 0) {
87
- super(`batchWriteAll did not fully drain: ${succeededChunks}/${totalChunks} chunk(s) succeeded, ` +
88
- `${failedChunks.length} chunk(s) failed. ${succeededCount} write(s) persisted before the failure.`, error_code_1.ErrorCode.BATCH_WRITE_INCOMPLETE, {}, failedChunks[0]);
89
- this.name = 'BatchWriteAllIncompleteError';
90
- this.succeededChunks = succeededChunks;
91
- this.totalChunks = totalChunks;
92
- this.failedChunks = failedChunks;
93
- this.succeededCount = succeededCount;
94
- }
189
+ function batchWriteAllIncompleteError(batch) {
190
+ const { succeeded, total, succeededCount = 0, unit = 'chunk' } = batch;
191
+ const failed = Array.isArray(batch.failures) ? [...batch.failures] : [];
192
+ return build(batchWriteAllIncompleteError, {
193
+ message: `${unit === 'chunk' ? 'batchWriteAll' : 'the partition delete'} did not fully drain: ` +
194
+ `${succeeded}/${total} ${unit}(s) succeeded, ` +
195
+ `${failed.length} ${unit}(s) failed. ${succeededCount} write(s) persisted before the failure.`,
196
+ code: error_code_1.ErrorCode.BATCH_WRITE_INCOMPLETE,
197
+ context: {},
198
+ cause: failed[0],
199
+ details: {
200
+ kind: 'pass',
201
+ unit,
202
+ succeededChunks: succeeded,
203
+ totalChunks: total,
204
+ failedChunks: failed,
205
+ succeededCount,
206
+ },
207
+ });
95
208
  }
96
- exports.BatchWriteAllIncompleteError = BatchWriteAllIncompleteError;
97
209
  /**
98
- * A compensating rollback failed after an append-saga chunk error, so the
99
- * trigger error could not be cleanly undone. Carries the original trigger as
100
- * `cause` and the rollback failure as {@link rollbackError}; the session's
101
- * `messageCount` may have drifted — repair it with `reconcileMessageCount`.
210
+ * The error for a compensating rollback that failed after an append-saga
211
+ * chunk error, so the trigger could not be cleanly undone.
212
+ *
213
+ * Accepts: `cause` — the failure that triggered the rollback. `rollbackError`
214
+ * — why the rollback itself could not finish. Both are built from a `catch`,
215
+ * so either may be whatever a `throw` produced rather than an `Error`.
216
+ *
217
+ * Returns: a `COMPENSATION_FAILED` error carrying the trigger as `cause` and
218
+ * the rollback failure as `details.rollbackError`, each normalised through
219
+ * `toError` so both are always error-shaped. The session's `messageCount` may
220
+ * have drifted, which `reconcileMessageCount` repairs; the quoted text of both
221
+ * errors is redacted before it is embedded.
222
+ *
223
+ * Throws: nothing; building an error may not fail. Reading `.message` off a
224
+ * thrown `null` or `undefined` would throw here, inside the `catch` reporting
225
+ * the rollback — which is why `toError` normalises both `cause` and
226
+ * `rollbackError` before anything reads off them.
102
227
  */
103
- class CompensationFailedError extends base_error_1.DynamoDbLangGraphError {
104
- rollbackError;
105
- constructor(cause, rollbackError) {
106
- super(`compensation failed after an append error: ${cause.message} (rollback: ${rollbackError.message})`, error_code_1.ErrorCode.COMPENSATION_FAILED, {}, cause);
107
- this.name = 'CompensationFailedError';
108
- this.rollbackError = rollbackError;
109
- }
228
+ function compensationFailedError(cause, rollbackError) {
229
+ const trigger = (0, base_error_1.toError)(cause);
230
+ const rollback = (0, base_error_1.toError)(rollbackError);
231
+ return build(compensationFailedError, {
232
+ message: `compensation failed after an append error: ${(0, secret_patterns_1.redactedMessage)(trigger)} ` +
233
+ `(rollback: ${(0, secret_patterns_1.redactedMessage)(rollback)})`,
234
+ code: error_code_1.ErrorCode.COMPENSATION_FAILED,
235
+ context: {},
236
+ cause: trigger,
237
+ details: { rollbackError: rollback },
238
+ });
110
239
  }
111
- exports.CompensationFailedError = CompensationFailedError;
112
- //# sourceMappingURL=errors.js.map
@@ -1,6 +1,25 @@
1
+ /**
2
+ * Hides that a caller's logger is foreign code that may throw.
3
+ *
4
+ * A caller supplies no logger or one of their own, and internal code receives
5
+ * a logger that is silent by default and whose four levels never throw. No
6
+ * `catch` block or retry hook therefore treats a log call as a failure path
7
+ * of its own, and where a throw is absorbed, and what becomes of the line it
8
+ * was writing, can change here without touching any call site.
9
+ */
1
10
  /** A value safe to pass as a structured log argument. */
2
11
  export type LogArgument = string | number | boolean | null | object;
3
- /** Pluggable logging interface — consumers supply their own implementation. */
12
+ /**
13
+ * Pluggable logging interface — consumers supply their own implementation.
14
+ * `args` are structured fields, at most one plain object per call, so an
15
+ * adapter for a structured logger (pino, winston) can merge them into one
16
+ * record; the message is a fixed string and never carries a value.
17
+ *
18
+ * It is the one piece of foreign code every adapter of this package calls,
19
+ * almost always from a `catch` block, so an adapter wraps it: anything one of
20
+ * its methods throws is absorbed at the log call and never replaces the error
21
+ * being reported.
22
+ */
4
23
  export interface Logger {
5
24
  info(message: string, ...args: LogArgument[]): void;
6
25
  warn(message: string, ...args: LogArgument[]): void;
@@ -9,6 +28,53 @@ export interface Logger {
9
28
  }
10
29
  /** Default logger: discards everything. Inject a real logger to enable output. */
11
30
  export declare const SILENT_LOGGER: Logger;
12
- /** Return the injected logger, or {@link SILENT_LOGGER} when none is given. */
31
+ /**
32
+ * Run one log call so that a failure of the caller's own logger cannot become
33
+ * the caller's problem.
34
+ *
35
+ * Shared rather than private to the file that first needed it: a `Logger` is
36
+ * an interface a consumer implements, so a log call is foreign code wherever
37
+ * it appears, and a guard each site has to remember is a guard most sites will
38
+ * not have.
39
+ *
40
+ * Swallowed rather than reported onward, because the only channel a report
41
+ * could use is the logger that just broke, and the alternative — writing to
42
+ * the host's console uninvited — is what {@link SILENT_LOGGER} exists to
43
+ * refuse. What the line was going to say is an observation about work that has
44
+ * either succeeded or is already failing for a reason of its own; the error it
45
+ * protects is the one that says what that reason was.
46
+ *
47
+ * Accepts: `emit` — the whole log call as a thunk, so the arguments are built
48
+ * inside the guard too: a formatter that throws while composing the line is
49
+ * the same failure as a transport that throws while writing it.
50
+ *
51
+ * Returns: nothing, and the same nothing whether the line was written or lost.
52
+ *
53
+ * Throws: **nothing**, ever. That is the entire job. The caller's next
54
+ * statement runs, so a path that says what it is about to do and then does it
55
+ * cannot be stopped between the two by the saying.
56
+ */
57
+ export declare function absorbLoggerFailure(emit: () => void): void;
58
+ /**
59
+ * Resolve an optional logger to a concrete one.
60
+ *
61
+ * Accepts: `logger` — the caller's, or nothing. Its members were validated
62
+ * where the options were.
63
+ *
64
+ * Returns: {@link SILENT_LOGGER} when nothing was given — silent rather than
65
+ * console by default: a library writing to a host's stdout uninvited is a
66
+ * nuisance, and every event it would have written is documented so an operator
67
+ * can opt in. Otherwise a **wrapper** around the caller's logger, not the
68
+ * object itself: the same four levels, delegating each call with its message
69
+ * and arguments unchanged, and absorbing anything the caller's method throws
70
+ * (see `absorbLoggerFailure`). Identity is therefore not preserved, and
71
+ * a caller comparing what it passed in against what an adapter holds would
72
+ * find two different objects; nothing observable about a log line changes.
73
+ *
74
+ * Throws: nothing.
75
+ *
76
+ * Guarantees: every logger this package hands to its own internals has methods
77
+ * that cannot throw, so no `catch` block, and no retry hook, has to treat a log
78
+ * call as a failure path of its own.
79
+ */
13
80
  export declare function resolveLogger(logger?: Logger): Logger;
14
- //# sourceMappingURL=logger.d.ts.map
@@ -1,6 +1,16 @@
1
1
  "use strict";
2
+ /**
3
+ * Hides that a caller's logger is foreign code that may throw.
4
+ *
5
+ * A caller supplies no logger or one of their own, and internal code receives
6
+ * a logger that is silent by default and whose four levels never throw. No
7
+ * `catch` block or retry hook therefore treats a log call as a failure path
8
+ * of its own, and where a throw is absorbed, and what becomes of the line it
9
+ * was writing, can change here without touching any call site.
10
+ */
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.SILENT_LOGGER = void 0;
13
+ exports.absorbLoggerFailure = absorbLoggerFailure;
4
14
  exports.resolveLogger = resolveLogger;
5
15
  /** Default logger: discards everything. Inject a real logger to enable output. */
6
16
  exports.SILENT_LOGGER = {
@@ -9,8 +19,92 @@ exports.SILENT_LOGGER = {
9
19
  error() { },
10
20
  debug() { },
11
21
  };
12
- /** Return the injected logger, or {@link SILENT_LOGGER} when none is given. */
22
+ /**
23
+ * Run one log call so that a failure of the caller's own logger cannot become
24
+ * the caller's problem.
25
+ *
26
+ * Shared rather than private to the file that first needed it: a `Logger` is
27
+ * an interface a consumer implements, so a log call is foreign code wherever
28
+ * it appears, and a guard each site has to remember is a guard most sites will
29
+ * not have.
30
+ *
31
+ * Swallowed rather than reported onward, because the only channel a report
32
+ * could use is the logger that just broke, and the alternative — writing to
33
+ * the host's console uninvited — is what {@link SILENT_LOGGER} exists to
34
+ * refuse. What the line was going to say is an observation about work that has
35
+ * either succeeded or is already failing for a reason of its own; the error it
36
+ * protects is the one that says what that reason was.
37
+ *
38
+ * Accepts: `emit` — the whole log call as a thunk, so the arguments are built
39
+ * inside the guard too: a formatter that throws while composing the line is
40
+ * the same failure as a transport that throws while writing it.
41
+ *
42
+ * Returns: nothing, and the same nothing whether the line was written or lost.
43
+ *
44
+ * Throws: **nothing**, ever. That is the entire job. The caller's next
45
+ * statement runs, so a path that says what it is about to do and then does it
46
+ * cannot be stopped between the two by the saying.
47
+ */
48
+ function absorbLoggerFailure(emit) {
49
+ try {
50
+ emit();
51
+ }
52
+ catch {
53
+ // Nowhere left to say it: the reporting channel is the broken part.
54
+ }
55
+ }
56
+ /**
57
+ * `inner` with each level wrapped so a throw out of it stops at the log call.
58
+ *
59
+ * A `Logger` is an interface a consumer implements, so every log call this
60
+ * package makes runs foreign code, and almost every one of them is made from
61
+ * inside a `catch`: one that stringifies a circular object, whose transport
62
+ * has closed, or that asserts on a field it did not expect replaces the error
63
+ * the caller actually needs to see with its own. At the retry hook the damage
64
+ * is larger than a swap — `withRetry` calls `onRetry` synchronously and does
65
+ * not catch it, so a logger that throws ends an operation that was still
66
+ * succeeding, after its first transient failure.
67
+ *
68
+ * Wrapped once per adapter, here, rather than remembered at each of the three
69
+ * dozen call sites: a site that forgets is a site whose failure path reports
70
+ * the wrong error, and those sites are exactly the ones a test suite exercises
71
+ * least. `absorbLoggerFailure` stays for the places that promise,
72
+ * with no precondition on the logger they were handed, never to throw:
73
+ * `redactLogger`, which a caller may wrap any logger with, the S3 orphan
74
+ * cleanup, and the chat history's append compensation, whose announcement must
75
+ * not be able to stop the rollback it announces.
76
+ */
77
+ function containedLogger(inner) {
78
+ const deliver = (level) => (message, ...args) => absorbLoggerFailure(() => inner[level](message, ...args));
79
+ return {
80
+ info: deliver('info'),
81
+ warn: deliver('warn'),
82
+ error: deliver('error'),
83
+ debug: deliver('debug'),
84
+ };
85
+ }
86
+ /**
87
+ * Resolve an optional logger to a concrete one.
88
+ *
89
+ * Accepts: `logger` — the caller's, or nothing. Its members were validated
90
+ * where the options were.
91
+ *
92
+ * Returns: {@link SILENT_LOGGER} when nothing was given — silent rather than
93
+ * console by default: a library writing to a host's stdout uninvited is a
94
+ * nuisance, and every event it would have written is documented so an operator
95
+ * can opt in. Otherwise a **wrapper** around the caller's logger, not the
96
+ * object itself: the same four levels, delegating each call with its message
97
+ * and arguments unchanged, and absorbing anything the caller's method throws
98
+ * (see `absorbLoggerFailure`). Identity is therefore not preserved, and
99
+ * a caller comparing what it passed in against what an adapter holds would
100
+ * find two different objects; nothing observable about a log line changes.
101
+ *
102
+ * Throws: nothing.
103
+ *
104
+ * Guarantees: every logger this package hands to its own internals has methods
105
+ * that cannot throw, so no `catch` block, and no retry hook, has to treat a log
106
+ * call as a failure path of its own.
107
+ */
13
108
  function resolveLogger(logger) {
14
- return logger ?? exports.SILENT_LOGGER;
109
+ return logger === undefined ? exports.SILENT_LOGGER : containedLogger(logger);
15
110
  }
16
- //# sourceMappingURL=logger.js.map
@@ -1,5 +1,12 @@
1
- import type { Logger } from './logger';
2
- import { type Redactable } from './redaction-walk';
1
+ /**
2
+ * Hides how a logger and a value are redacted.
3
+ *
4
+ * A redacting logger walks every argument of every line, bounded in depth and
5
+ * safe against cycles and hostile getters, and replaces the value of any key
6
+ * that looks like a secret and any text that looks like one; the same walk
7
+ * serves `redactSecrets` for a value a caller wants to log themselves.
8
+ */
9
+ import { type LogArgument, type Logger } from './logger';
3
10
  /**
4
11
  * Recursively clone `value`, replacing any value at a secret-looking key with
5
12
  * `[REDACTED]` and any recognised secret *shape* inside a string — including an
@@ -13,12 +20,35 @@ import { type Redactable } from './redaction-walk';
13
20
  * `stack` redacted and every other own property recursed like a plain object.
14
21
  * `Date`/`RegExp` keep their identity rather than collapsing to `{}`,
15
22
  * `Set`/`Map` render as their contents, and binary views become a short label.
16
- * Does not mutate the input.
23
+ *
24
+ * Accepts: `value` — any log argument, including `undefined`, a primitive, a
25
+ * typed `Error`, a class instance or a `Record`, so callers never cast. A
26
+ * cyclic or shared graph is fine; each node is walked once. `patterns` and
27
+ * `valuePatterns` — the key names and value shapes to redact, an array of
28
+ * strings and an array of `RegExp` respectively; both default to this
29
+ * package's own lists, and an empty one turns that rule off.
30
+ *
31
+ * Returns: a redacted clone. The input is never mutated — a logger that
32
+ * scrubbed the caller's own object would corrupt the very data the application
33
+ * is working with.
34
+ *
35
+ * Throws: `VALIDATION` naming `patterns` or `valuePatterns` for a list this
36
+ * function could not apply, which is a mistake in the call itself and is
37
+ * raised before anything is walked. Nothing after that: a value whose
38
+ * redaction fails — a throwing getter, a structure deep enough to exhaust the
39
+ * stack — is replaced whole by `[UNREDACTABLE]`, since a logger that throws
40
+ * takes down the operation it was only observing. {@link redactLogger}
41
+ * redacts one argument per call, so there a single hostile argument is what is
42
+ * lost rather than the record around it.
17
43
  */
18
- export declare function redactSecrets(value: Redactable, patterns?: readonly string[], valuePatterns?: readonly RegExp[]): Redactable;
44
+ export declare function redactSecrets(value: LogArgument | undefined, patterns?: readonly string[], valuePatterns?: readonly RegExp[]): Redactable;
19
45
  /** Options controlling {@link redactLogger}. */
20
46
  export interface RedactLoggerOptions {
21
- /** Additional key names (matched case-insensitively as substrings) to redact. */
47
+ /**
48
+ * Additional key names to redact. Matched like the defaults: a key is
49
+ * redacted when its normalised form (lower-case, punctuation removed) equals
50
+ * or ends with the normalised name, so `'ssn'` covers `SSN` and `user_ssn`.
51
+ */
22
52
  extraKeys?: readonly string[];
23
53
  /**
24
54
  * Additional secret shapes to redact wherever they appear inside a string.
@@ -28,8 +58,62 @@ export interface RedactLoggerOptions {
28
58
  extraValuePatterns?: readonly RegExp[];
29
59
  }
30
60
  /**
31
- * Wrap a logger so object args are redacted before delegation. The message
32
- * string is passed through unchanged (never interpolate secrets into it).
61
+ * Wrap a logger so object args are redacted before delegation.
62
+ *
63
+ * Accepts: `inner` — the logger to delegate to; it must carry all four
64
+ * methods, because a missing one is a wiring mistake worth naming here rather
65
+ * than at the first log line. `options.extraKeys` — further key names to
66
+ * redact, matched like the defaults. `options.extraValuePatterns` — further
67
+ * secret shapes; each must be a `RegExp`, and it is applied globally whether or
68
+ * not it carries the `g` flag.
69
+ *
70
+ * Returns: a logger with the same four methods.
71
+ *
72
+ * Throws: `VALIDATION` naming `logger` or `logger.<method>` for a logger it
73
+ * could not delegate to, and `options`, `extraKeys` or `extraValuePatterns`
74
+ * for an option of the wrong type. Nothing at log time.
75
+ *
76
+ * Guarantees: the message string is passed through unchanged — never
77
+ * interpolate a secret into it — and every other argument is redacted before
78
+ * it reaches `inner`. Past the wrap call nothing escapes a log call: an
79
+ * argument whose redaction fails is replaced by a fixed marker, and a failure
80
+ * of `inner` itself is absorbed, because the
81
+ * operation that wrote the line was only observing itself and is commonly
82
+ * reporting some other failure already.
33
83
  */
34
84
  export declare function redactLogger(inner: Logger, options?: RedactLoggerOptions): Logger;
35
- //# sourceMappingURL=redaction.d.ts.map
85
+ /** A value that {@link redactSecrets} can recurse through. */
86
+ export type Redactable = string | number | boolean | null | undefined | Redactable[] | {
87
+ [key: string]: Redactable;
88
+ };
89
+ /** Any `Redactable` that is a non-null object — what the walk dispatches on. */
90
+ export type RedactableObject = Redactable[] | {
91
+ [key: string]: Redactable;
92
+ };
93
+ /** One step of the recursive walk, threaded into the entry helpers. */
94
+ type Walk = (value: Redactable) => Redactable;
95
+ /** Collaborators threaded through the recursive walk. */
96
+ export interface WalkDeps {
97
+ keyPatterns: readonly string[];
98
+ valuePatterns: readonly RegExp[];
99
+ walk: Walk;
100
+ }
101
+ /**
102
+ * Dispatch one non-null object by its shape.
103
+ *
104
+ * Accepts: `current` — any object. `deps.walk` — how to recurse, which carries
105
+ * the cycle and memo state this module deliberately does not own.
106
+ *
107
+ * Returns: the redacted form — arrays and plain objects recursed, binary views
108
+ * collapsed to a label, `Date`/`RegExp` passed through by reference so they do
109
+ * not become `{}`, `Set`/`Map` rendered as their contents, and an Error through
110
+ * the error path, which preserves the non-enumerable text a plain walk cannot
111
+ * see.
112
+ *
113
+ * Throws: whatever a property getter on the value throws. `redactSecrets`, the
114
+ * only caller, catches it and returns `[UNREDACTABLE]` in place of the whole
115
+ * value it was given, rather than raising a getter's error at a caller who
116
+ * asked only for a copy it could log.
117
+ */
118
+ export declare function walkObject(current: RedactableObject, deps: WalkDeps): Redactable;
119
+ export {};