@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,169 @@
1
+ import { KEY_SEPARATOR, MAX_CHECKPOINT_NS_BYTES, MAX_KEY_SEGMENT_BYTES, MAX_PARTITION_ID_BYTES, MAX_SORT_KEY_BYTES, MAX_WRITE_CHANNEL_BYTES, } from '../../shared/dynamodb/table-schema.js';
2
+ import { validationError } from '../../shared/errors/errors.js';
3
+ import { assertSignalLike } from '../../shared/validation/collaborators.js';
4
+ import { assertObjectShape } from '../../shared/validation/option-shape.js';
5
+ import { parseIdentifier, parseKeySegment, parseLimit, parseStringArray, } from '../../shared/validation/primitives.js';
6
+ import { writeSortKeyBytes } from './rows.js';
7
+ export function parseThreadId(value) {
8
+ return parseIdentifier(value, KEY_SEPARATOR, 'thread_id', MAX_PARTITION_ID_BYTES);
9
+ }
10
+ export function parseCheckpointNs(value) {
11
+ return parseKeySegment(value, KEY_SEPARATOR, 'checkpoint_ns', MAX_CHECKPOINT_NS_BYTES);
12
+ }
13
+ export function parseCheckpointId(value, field = 'checkpoint_id') {
14
+ return parseIdentifier(value, KEY_SEPARATOR, field, MAX_KEY_SEGMENT_BYTES);
15
+ }
16
+ export function parseTaskId(value) {
17
+ return parseIdentifier(value, KEY_SEPARATOR, 'taskId', MAX_KEY_SEGMENT_BYTES);
18
+ }
19
+ export function parseWriteChannel(value) {
20
+ return parseIdentifier(value, KEY_SEPARATOR, 'channel', MAX_WRITE_CHANNEL_BYTES);
21
+ }
22
+ export function parseTaskPath(value) {
23
+ if (value === undefined)
24
+ return undefined;
25
+ if (typeof value !== 'string')
26
+ throw validationError('taskPath must be a string', 'taskPath');
27
+ return value;
28
+ }
29
+ export const ROOT_NAMESPACE = parseCheckpointNs('');
30
+ function isAbsentId(value) {
31
+ return value === undefined || value === null || value === '';
32
+ }
33
+ function assertConfigShape(config) {
34
+ assertObjectShape(config, 'config');
35
+ if (config.configurable !== undefined)
36
+ assertObjectShape(config.configurable, 'configurable');
37
+ assertSignalLike(config.signal);
38
+ }
39
+ function configurableOf(config) {
40
+ assertConfigShape(config);
41
+ return (config.configurable ?? {});
42
+ }
43
+ function namespaceOf(configurable) {
44
+ if (configurable.checkpoint_ns === undefined)
45
+ return undefined;
46
+ return parseCheckpointNs(configurable.checkpoint_ns ?? '');
47
+ }
48
+ function resolveCheckpointId(configurable) {
49
+ if (!isAbsentId(configurable.checkpoint_id))
50
+ return parseCheckpointId(configurable.checkpoint_id);
51
+ if (!isAbsentId(configurable.thread_ts)) {
52
+ return parseCheckpointId(configurable.thread_ts, 'thread_ts');
53
+ }
54
+ return undefined;
55
+ }
56
+ export function parseConfig(config) {
57
+ const configurable = configurableOf(config);
58
+ const threadId = configurable.thread_id === undefined ? undefined : parseThreadId(configurable.thread_id);
59
+ return {
60
+ threadId,
61
+ checkpointNs: namespaceOf(configurable),
62
+ checkpointId: resolveCheckpointId(configurable),
63
+ signal: config.signal,
64
+ };
65
+ }
66
+ export function parseThreadConfig(config) {
67
+ const configurable = configurableOf(config);
68
+ const threadId = parseThreadId(configurable.thread_id);
69
+ return {
70
+ address: {
71
+ threadId,
72
+ checkpointNs: namespaceOf(configurable) ?? ROOT_NAMESPACE,
73
+ checkpointId: resolveCheckpointId(configurable),
74
+ },
75
+ signal: config.signal,
76
+ };
77
+ }
78
+ export function parsePutRequest(config, checkpoint, metadata) {
79
+ const { address, signal } = parseThreadConfig(config);
80
+ if (checkpoint === null || checkpoint === undefined) {
81
+ throw validationError('checkpoint must be an object', 'checkpoint');
82
+ }
83
+ const checkpointId = parseCheckpointId(checkpoint.id);
84
+ return {
85
+ address: { threadId: address.threadId, checkpointNs: address.checkpointNs, checkpointId },
86
+ parentCheckpointId: address.checkpointId,
87
+ checkpoint,
88
+ metadata,
89
+ signal,
90
+ };
91
+ }
92
+ function assertWriteEntries(writes) {
93
+ if (!Array.isArray(writes)) {
94
+ throw validationError('writes must be an array', 'writes');
95
+ }
96
+ for (let index = 0; index < writes.length; index += 1) {
97
+ if (!Array.isArray(writes[index])) {
98
+ throw validationError(`writes[${index}] must be a [channel, value] tuple`, 'writes');
99
+ }
100
+ }
101
+ }
102
+ function assertWriteKeyFits(address, taskId, channel) {
103
+ const bytes = writeSortKeyBytes({
104
+ checkpointNs: address.checkpointNs,
105
+ checkpointId: address.checkpointId,
106
+ taskId,
107
+ channel,
108
+ });
109
+ if (bytes > MAX_SORT_KEY_BYTES) {
110
+ throw validationError(`checkpoint_ns, checkpoint_id, taskId and channel compose a ${bytes}-byte sort key; ` +
111
+ `DynamoDB caps sort keys at ${MAX_SORT_KEY_BYTES} bytes`, 'sortKey');
112
+ }
113
+ }
114
+ export function parsePutWritesRequest(config, writes, taskId, taskPath) {
115
+ const parsedTaskId = parseTaskId(taskId);
116
+ const parsedTaskPath = parseTaskPath(taskPath);
117
+ const { address, signal } = parseThreadConfig(config);
118
+ if (address.checkpointId === undefined) {
119
+ throw validationError('checkpoint_id is required to store writes', 'checkpoint_id');
120
+ }
121
+ const target = {
122
+ threadId: address.threadId,
123
+ checkpointNs: address.checkpointNs,
124
+ checkpointId: address.checkpointId,
125
+ };
126
+ assertWriteEntries(writes);
127
+ const channels = writes.map(([channel]) => parseWriteChannel(channel));
128
+ for (const channel of channels)
129
+ assertWriteKeyFits(target, parsedTaskId, channel);
130
+ return {
131
+ address: target,
132
+ taskId: parsedTaskId,
133
+ taskPath: parsedTaskPath,
134
+ writes: writes.map(([, value], index) => [channels[index], value]),
135
+ signal,
136
+ };
137
+ }
138
+ function beforeCheckpointId(before) {
139
+ if (before === undefined)
140
+ return undefined;
141
+ assertObjectShape(before, 'before');
142
+ const checkpointId = before.configurable?.checkpoint_id;
143
+ if (isAbsentId(checkpointId))
144
+ return undefined;
145
+ return parseCheckpointId(checkpointId, 'before');
146
+ }
147
+ export function parseListScope(config, options) {
148
+ const { threadId, checkpointNs, checkpointId, signal } = parseConfig(config);
149
+ if (options !== undefined) {
150
+ assertObjectShape(options, 'options');
151
+ if (options.filter !== undefined)
152
+ assertObjectShape(options.filter, 'filter');
153
+ }
154
+ const limit = options?.limit === undefined ? undefined : parseLimit(options.limit, 0);
155
+ return {
156
+ threadId,
157
+ checkpointNs,
158
+ checkpointId,
159
+ before: beforeCheckpointId(options?.before),
160
+ filter: options?.filter,
161
+ limit,
162
+ signal,
163
+ };
164
+ }
165
+ export function parseDeltaHistoryRequest(options) {
166
+ assertObjectShape(options, 'options');
167
+ assertConfigShape(options.config);
168
+ return { config: options.config, channels: parseStringArray(options.channels, 'channels') };
169
+ }
@@ -0,0 +1,314 @@
1
+ /**
2
+ * Hides how one `putWrites` call's rows commit, and which uploads each outcome
3
+ * releases.
4
+ *
5
+ * A positional write is first-write-wins: a retried task must not overwrite
6
+ * what its first run committed, and a rejection is the expected outcome of a
7
+ * retry, not a failure. A special channel's write overwrites, as every reference
8
+ * checkpointer does, under a compare-and-swap on the row's `writeGroup` so two
9
+ * concurrent calls cannot both release the same superseded payload. Around both,
10
+ * an upload is released only when a read, or the row a rejection returned,
11
+ * proves no live row names it — never on an outcome nothing confirmed.
12
+ */
13
+ import { type PayloadDescriptor } from '../../shared/codec/codec.js';
14
+ import { type RowProbe } from '../../shared/dynamodb/idempotent-write.js';
15
+ import type { ThreadId } from './parse.js';
16
+ import { type CheckpointWriteRow } from './rows.js';
17
+ import type { CheckpointerContext } from './setup.js';
18
+ /** One call's rows, ready to commit. */
19
+ export interface PendingWriteBatch {
20
+ /** The caller's thread, which scopes every superseded object this commit may release. */
21
+ readonly threadId: ThreadId;
22
+ readonly items: CheckpointWriteRow[];
23
+ readonly signal: AbortSignal | undefined;
24
+ }
25
+ /**
26
+ * Commit one call's pending-write rows, then release the uploads the outcome
27
+ * proves dead.
28
+ *
29
+ * Accepts: `batch` — the call's thread, its encoded rows (positional and
30
+ * special together, in any order), and its signal.
31
+ *
32
+ * Returns: nothing, once every write has settled and the cleanup has run.
33
+ *
34
+ * Throws: the first genuine write failure, after every write has settled and
35
+ * the cleanup has run. A first-write-wins rejection is not a failure.
36
+ */
37
+ export declare function commitPendingWrites(context: CheckpointerContext, batch: PendingWriteBatch): Promise<void>;
38
+ /**
39
+ * Overwrite one special row, pinned to the `writeGroup` this call observed, and
40
+ * report the descriptor it superseded.
41
+ *
42
+ * Overwriting is correct for special channels — every reference implementation
43
+ * does it — but two concurrent calls to the same channel both read the same
44
+ * previous descriptor and both delete it, orphaning the loser's upload. Pinning
45
+ * the observed `writeGroup` and re-reading on rejection makes each call
46
+ * supersede exactly one payload.
47
+ *
48
+ * `BatchWriteItem` cannot carry conditions, which is why this path issues
49
+ * individual puts; a call holds at most one row per special channel, so that is
50
+ * four writes at worst.
51
+ *
52
+ * The compare-and-swap runs only when an offloader is configured — matching
53
+ * `store/internal/item-write.ts` — because without one there is no S3 object to
54
+ * orphan, so a plain unconditional put stays correct and costs no extra
55
+ * ConsistentRead or write capacity (see {@link writeWithoutOffloader}).
56
+ *
57
+ * A failure of the first read, before any put, is no verdict read from the row,
58
+ * and this call releases its own upload only on one. It is therefore reported
59
+ * the way every unverified outcome is: `committed: true` with the error, so the
60
+ * caller keeps the upload and leaves it to the lifecycle rule.
61
+ *
62
+ * Accepts: `item` — one special-channel row, carrying this call's `writeGroup`.
63
+ * `signal` — aborts the attempts.
64
+ *
65
+ * Returns: whether this item's upload must be kept (see
66
+ * {@link SpecialWriteOutcome}), the descriptor it superseded when the write
67
+ * committed, and the failure when there was one.
68
+ *
69
+ * Throws: nothing. The caller runs this concurrently with the regular writes
70
+ * under `Promise.all`, whose own cleanup depends on every branch resolving
71
+ * rather than short-circuiting.
72
+ *
73
+ * Guarantees: each call supersedes exactly one payload, so two concurrent calls
74
+ * to the same channel cannot both delete the same object and orphan the loser's
75
+ * upload.
76
+ */
77
+ export declare function writeSpecialRow(context: CheckpointerContext, item: CheckpointWriteRow, signal?: AbortSignal): Promise<SpecialWriteOutcome>;
78
+ /** What a special item's row held before this call tried to overwrite it. */
79
+ export interface SpecialRowState {
80
+ exists: boolean;
81
+ value?: PayloadDescriptor;
82
+ revision?: string;
83
+ }
84
+ /**
85
+ * Outcome of one special item's conditional write. Never thrown, always returned.
86
+ *
87
+ * `committed` is true whenever this call's own upload must be kept: a confirmed
88
+ * commit, or an outcome nothing confirmed, which then also carries `error`. It
89
+ * is false only when the write is confirmed not to have committed, or when no
90
+ * offloader is configured and there is no upload to keep.
91
+ */
92
+ export interface SpecialWriteOutcome {
93
+ committed: boolean;
94
+ superseded?: PayloadDescriptor;
95
+ error?: Error;
96
+ }
97
+ /** What a post-failure verification read established about the attempt. */
98
+ export interface VerifiedFailure {
99
+ outcome: SpecialWriteOutcome;
100
+ /**
101
+ * Present only when the attempt is confirmed not to have landed: the row's
102
+ * state, for a compare-and-swap to re-pin to.
103
+ */
104
+ observed?: SpecialRowState;
105
+ }
106
+ /**
107
+ * The probe that recognises a write row's own write on its row — a special
108
+ * channel's row or a regular one, both of which carry a `writeGroup`.
109
+ *
110
+ * Accepts: `item` — the row this call tried to write, carrying its own
111
+ * `writeGroup`.
112
+ *
113
+ * Returns: the probe, which projects the guard attribute and the descriptor —
114
+ * the descriptor because a caller that has to re-pin a compare-and-swap needs
115
+ * the value it lost to, not just the fact that it lost.
116
+ *
117
+ * Throws: nothing.
118
+ */
119
+ export declare function writeRowProbe(item: CheckpointWriteRow): RowProbe;
120
+ /**
121
+ * Read a special row's current descriptor and the writeGroup guarding it.
122
+ *
123
+ * Accepts: `item` — the row to read, by its key.
124
+ *
125
+ * Returns: the row's state, with `exists: false` when there is none — which is
126
+ * what a first writer pins its compare-and-swap to.
127
+ *
128
+ * Throws: whatever the read throws. Deliberately not swallowed: the caller
129
+ * reports that failure with its own cause rather than guessing at the row's
130
+ * state, which is why this is separate from {@link verifyAfterFailure}.
131
+ */
132
+ export declare function readSpecialRow(context: CheckpointerContext, item: CheckpointWriteRow): Promise<SpecialRowState>;
133
+ /**
134
+ * Read the row back after a put failed, and report what that failure actually
135
+ * did — never assuming it did nothing.
136
+ *
137
+ * A guard rejection already carries the row that turned it away (see
138
+ * `rejectedRow`), so the strongly-consistent read is spent only for a failure
139
+ * that does not: a lost response, or a rejection whose row vanished since.
140
+ *
141
+ * Five answers are possible:
142
+ * - the row holds this item's own `writeGroup`: the write landed, and the
143
+ * descriptor this attempt pinned is the dead one.
144
+ * - the row no longer satisfies this attempt's condition — it holds some other
145
+ * group than the one the attempt was pinned to, or it is absent while the
146
+ * attempt was pinned to a revision (`#rev = :rev`): the write is confirmed
147
+ * not to be what is live and can no longer apply, so this item's own upload
148
+ * is dead — its key ends in this call's own group, which no row names.
149
+ * `observed` is returned so a rejected compare-and-swap can re-pin and try
150
+ * again.
151
+ * - the row does not hold this item's group but still satisfies this attempt's
152
+ * condition — it holds exactly the state the attempt was pinned to; or the
153
+ * attempt was pinned to "no revision" and the row is absent, which that
154
+ * `attribute_not_exists` guard admits too; or this attempt was never pinned
155
+ * at all (the unconditional overwrite, which fits any row, a third writer's
156
+ * included) — and the failure may
157
+ * still land: any attempt of its budget got no answer (a cancel, a timeout,
158
+ * a dropped connection), or DynamoDB answered that an earlier attempt under
159
+ * this same token is still being processed, or with a server error (5xx).
160
+ * Nothing is confirmed either way, so this is `'unverified'` rather than
161
+ * `'not-landed'`, and the outcome reports a commit and keeps the upload.
162
+ * - the row still fits this attempt, but the failure was an answer that leaves
163
+ * nothing in flight (a refusal, a throttle, a spent budget of such answers):
164
+ * the write did not land, so this is `'not-landed'` and the upload is dead.
165
+ * - the read itself fails: nothing is confirmed, so the outcome still reports a
166
+ * commit and keeps the originating error. That leaks one S3 object at worst
167
+ * (reclaimed by `ensureS3LifecycleRule`) where the alternative strands a live
168
+ * row — the same trade `store/internal/item-write.ts` makes.
169
+ *
170
+ * Accepts: `attempted` — the state this attempt pinned, whose descriptor is the
171
+ * one superseded if the write did land. `error` — the failure being explained.
172
+ * `pinned` — false for the unconditional overwrite, whose attempt can land
173
+ * over any row.
174
+ *
175
+ * Returns: the outcome, and the row's observed state whenever the attempt is
176
+ * confirmed not to have landed, so a rejected compare-and-swap can re-pin and
177
+ * try again.
178
+ *
179
+ * Throws: nothing. It exists to turn a failure into a decision.
180
+ *
181
+ * Guarantees: a guard rejection already carries the row that turned it away, so
182
+ * the strongly-consistent read is spent only for a failure that does not — a
183
+ * lost response, or a rejection whose row vanished since.
184
+ */
185
+ export declare function verifyAfterFailure(context: CheckpointerContext, item: CheckpointWriteRow, attempted: SpecialRowState, error: Error, pinned?: boolean): Promise<VerifiedFailure>;
186
+ /**
187
+ * Write special (negative-index) rows, then clean up the correct side of each.
188
+ *
189
+ * Overwrite is correct here, matching every reference checkpointer. Each item
190
+ * is written with a compare-and-swap on its row's `writeGroup` (see
191
+ * {@link writeSpecialRow}) so a concurrent call to the same special channel
192
+ * cannot make both callers delete the same superseded object and orphan one
193
+ * upload. A committed item cleans up the payload it actually superseded, and an
194
+ * item confirmed never to have committed cleans up its own new upload. Neither
195
+ * reads the row again first: every call uploads under its own `writeGroup`, so
196
+ * a row another call writes never names this item's upload, and this item's
197
+ * row names only that upload, never the payload it superseded.
198
+ *
199
+ * "Confirmed" is load-bearing, and {@link writeSpecialRow} is what earns it:
200
+ * an ambiguous failure, or a first read of the row that failed, is reported as
201
+ * committed unless a read proves otherwise. Deleting on *unknown* would strand
202
+ * a live row pointing at a deleted object; leaking one object instead is
203
+ * recoverable.
204
+ *
205
+ * Accepts: `items` — this call's special-channel rows; empty writes nothing.
206
+ * `threadId` — the caller's, which scopes every object this cleanup may delete.
207
+ *
208
+ * Returns: the first failure, or undefined when every item committed.
209
+ *
210
+ * Throws: nothing — a failure is reported via the return value, because the
211
+ * caller runs this concurrently with `writeRegularRows` under `Promise.all`,
212
+ * whose own cleanup depends on every branch resolving rather than
213
+ * short-circuiting.
214
+ *
215
+ * Guarantees: a superseded payload is released only once the item that
216
+ * superseded it committed, and an item's own upload only once a read, or the
217
+ * row returned with its rejected write, shows that the item's write is not what
218
+ * the row holds and can no longer land there: the row no longer satisfies the
219
+ * attempt's condition, or the failure left no attempt in flight (see
220
+ * {@link verifyAfterFailure}).
221
+ */
222
+ export declare function writeSpecialRowsWithCleanup(context: CheckpointerContext, threadId: ThreadId, items: CheckpointWriteRow[], signal?: AbortSignal): Promise<Error | undefined>;
223
+ /**
224
+ * Outcome of {@link writeRegularRows}: never rejects. `deadUploads` holds
225
+ * exactly the items whose own S3 upload is confirmed unreferenced by this
226
+ * call's row — a verified non-commit, a guard rejection whose returned row
227
+ * provably belongs to another call, or a write the caller's signal came
228
+ * before, which was never sent at all. Everything else either committed, was
229
+ * turned away by a row this call may have written itself, or could not be
230
+ * verified; none of those may be cleaned up.
231
+ *
232
+ * No other row is consulted before an upload in `deadUploads` is released: its
233
+ * key ends in this call's own `writeGroup`, which no row of another call names.
234
+ */
235
+ export interface RegularWriteOutcome {
236
+ deadUploads: CheckpointWriteRow[];
237
+ error?: Error;
238
+ }
239
+ /**
240
+ * Regular pending writes one `putWrites` call keeps in flight. A `Send`
241
+ * fan-out can name a thousand of them, and the SDK's HTTP agent holds 50
242
+ * sockets by default: past that, a request waits for a socket, and the
243
+ * request timeout counts the wait, so a wide enough fan-out, larger values,
244
+ * or an injected client with a shorter request timeout can time out healthy
245
+ * writes that the retry layer then re-sends. Thirty-two in flight stays
246
+ * under the socket pool and still overlaps the round trips.
247
+ */
248
+ export declare const REGULAR_WRITE_CONCURRENCY = 32;
249
+ /**
250
+ * Write regular rows with a first-write-wins guard. Every write fully settles,
251
+ * at most {@link REGULAR_WRITE_CONCURRENCY} at a time, before this resolves,
252
+ * and it never rejects; a genuine failure is reported via `error`, not thrown.
253
+ * The fan-out is one call per item whichever shape {@link commitWriteRow}
254
+ * gives that item's write.
255
+ *
256
+ * A failure is not proof of a non-commit: `withDynamoDBRetry` re-issues a put
257
+ * whose response was lost, and the re-issues can time out at the transport, so
258
+ * the budget is spent on a `RETRY_EXHAUSTED` error while the row is live.
259
+ * Treating that as "never reached DynamoDB" deleted the object the live row
260
+ * pointed at, making the checkpoint's pending writes unreadable forever. Each
261
+ * such failure is therefore verified against the row before it is classified,
262
+ * and a committed one is not an error at all.
263
+ *
264
+ * Accepts: `items` — this call's regular write rows; empty writes nothing.
265
+ * `signal` — aborts the puts.
266
+ *
267
+ * Returns: which items are known not to have committed — whose own uploads are
268
+ * therefore dead — and the first genuine failure, if any; a write the caller's
269
+ * signal came before is not sent, and its upload is dead.
270
+ *
271
+ * Throws: nothing. Every put settles before this resolves, because the caller
272
+ * runs it beside the special writes under `Promise.all` and its cleanup depends
273
+ * on every branch resolving rather than short-circuiting.
274
+ *
275
+ * Guarantees: first-write-wins. A rejection means the row is already held, which
276
+ * is the expected outcome of a retry, not a failure.
277
+ */
278
+ export declare function writeRegularRows(context: CheckpointerContext, items: CheckpointWriteRow[], signal?: AbortSignal): Promise<RegularWriteOutcome>;
279
+ /**
280
+ * Report a guard rejection. Sort keys carry their channel, so a rejection
281
+ * normally means this exact (task, channel, occurrence) row is already
282
+ * committed — a genuine duplicate, and the expected outcome of a retry. A row
283
+ * held by a *different* channel is not something this adapter can produce, so
284
+ * it is reported at `warn`: the write was not persisted and something else
285
+ * wrote to this key space.
286
+ *
287
+ * Accepts: `error` — the rejection, which carries the row that caused it when
288
+ * the service returned attributes. No attributes means the two cases cannot be
289
+ * told apart, and the ordinary duplicate is the one assumed: warning on every
290
+ * unattributed rejection would cry wolf on the expected outcome of a retry.
291
+ *
292
+ * Returns: nothing. A rejection is not a failure here — first-write-wins means
293
+ * losing is a normal outcome — so it is reported, not thrown.
294
+ *
295
+ * Throws: nothing.
296
+ */
297
+ export declare function reportGuardRejection(context: CheckpointerContext, item: CheckpointWriteRow, error: Error): void;
298
+ /**
299
+ * Whether the rejection's returned row provably belongs to another `putWrites`
300
+ * call.
301
+ *
302
+ * Accepts: `error` — the rejection. `item` — the row this call tried to write,
303
+ * carrying its own `writeGroup`.
304
+ *
305
+ * Returns: whether the row that won carries a *different* group, which is the
306
+ * only evidence that this call's own upload is dead and safe to delete. A
307
+ * retried put whose response was lost can be rejected by the row it wrote
308
+ * itself, so an equal group — or no attributes at all — proves nothing and is
309
+ * answered `false`: the object is then left to the lifecycle rule rather than
310
+ * deleted out from under a live row.
311
+ *
312
+ * Throws: nothing.
313
+ */
314
+ export declare function rejectionProvesForeignRow(item: CheckpointWriteRow, error: Error): boolean;