@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
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Hides which rows a checkpoint read issues, with what consistency, and how a
3
+ * checkpoint an older release wrote is read back.
4
+ *
5
+ * A tuple is a META row, a PAYLOAD row and a checkpoint's WRITE rows, read
6
+ * strongly for `getTuple` and eventually for `list`, with expired rows absent
7
+ * however long DynamoDB's sweep lags, and with a pre-v4 checkpoint's `Send`s
8
+ * migrated from its parent's pending writes. The caller asks for a tuple; which
9
+ * reads that takes, and in what order, is decided here.
10
+ */
11
+ import { type Checkpoint, type CheckpointMetadata, type CheckpointPendingWrite, type CheckpointTuple } from '@langchain/langgraph-checkpoint';
12
+ import type { ThreadAddress } from './parse';
13
+ import { type CheckpointLocation, type CheckpointMetaRow, type CheckpointPayloadRow } from './rows';
14
+ import type { CheckpointerContext } from './setup';
15
+ /** The thread and namespace a read was asked for. */
16
+ export interface ThreadLocation {
17
+ readonly threadId: string;
18
+ readonly checkpointNs: string;
19
+ }
20
+ /** A checkpoint's parent, whose pending writes a pre-v4 checkpoint's migration reads. */
21
+ export interface PendingSendsSource extends ThreadLocation {
22
+ readonly parentCheckpointId: string | undefined;
23
+ }
24
+ /** Per-read options for the payload and writes reads. */
25
+ export interface ReadOptions {
26
+ signal?: AbortSignal;
27
+ /** `false` for bulk reads (`list`) that trade read-your-writes for half the read cost. */
28
+ consistent?: boolean;
29
+ }
30
+ /**
31
+ * The META row a read is about: the one `checkpointId` names, else the newest
32
+ * in the namespace.
33
+ *
34
+ * Accepts: `address` — parsed; its `checkpointId` names the row, and its
35
+ * absence asks for the newest in the namespace. `signal` — aborts the read.
36
+ *
37
+ * Returns: the row, or undefined when there is none — including when every row
38
+ * in the namespace has expired, or when the only rows there belong to another
39
+ * writer.
40
+ *
41
+ * Throws: `FORMAT_UNSUPPORTED` for a row of ours written by a newer version;
42
+ * whatever the read throws.
43
+ *
44
+ * Guarantees: strongly consistent, and expiry is judged here rather than waited
45
+ * for, so a checkpoint past its ttl is absent to every reader however long
46
+ * DynamoDB's sweep lags. The newest-first read returns the first live row of
47
+ * ours and stops there, stepping over expired and foreign rows
48
+ * {@link LATEST_META_PAGE_SIZE} at a time rather than one per round trip.
49
+ */
50
+ export declare function fetchTargetMeta(context: CheckpointerContext, address: ThreadAddress, signal?: AbortSignal): Promise<CheckpointMetaRow | undefined>;
51
+ /**
52
+ * The PAYLOAD row of one checkpoint.
53
+ *
54
+ * Accepts: `at` — the checkpoint's location. `read.consistent` — defaults to
55
+ * true; `list` passes false and accepts replica lag, since a listing tolerates
56
+ * what a read-your-writes `getTuple` does not.
57
+ *
58
+ * Returns: the row, or undefined when it is not there — the window the ordered
59
+ * PAYLOAD→META write leaves open, which the caller answers as "no checkpoint".
60
+ *
61
+ * Throws: `FORMAT_UNSUPPORTED` for a row a newer release wrote; whatever the
62
+ * read throws.
63
+ */
64
+ export declare function fetchPayload(context: CheckpointerContext, at: CheckpointLocation, read?: ReadOptions): Promise<CheckpointPayloadRow | undefined>;
65
+ /**
66
+ * Every pending write stored for one checkpoint, decoded, in write order.
67
+ *
68
+ * Accepts: `at` — the checkpoint's location. `read.consistent` — omitted reads
69
+ * strongly consistently; `list` passes `false` explicitly and accepts replica
70
+ * lag, `getTuple` passes `true`.
71
+ *
72
+ * Returns: the writes after `dropSupersededWrites` has resolved
73
+ * first-write-wins; a checkpoint with none returns an empty array.
74
+ *
75
+ * Throws: `FORMAT_UNSUPPORTED` for a row a newer release wrote; whatever the
76
+ * query or the payload decode throws.
77
+ *
78
+ * Guarantees: the read is deliberately uncapped. It must be complete to be
79
+ * correct — a `Send` fan-out retried with a changed write order leaves
80
+ * superseded rows behind that would count toward any cap — so past
81
+ * {@link LIST_SCAN_WARN_THRESHOLD} rows the read still succeeds and an operator
82
+ * is told the checkpoint is unusually heavy.
83
+ */
84
+ export declare function fetchPendingWrites(context: CheckpointerContext, at: CheckpointLocation, read?: ReadOptions): Promise<CheckpointPendingWrite[]>;
85
+ /** How a tuple is assembled: cancellation, read consistency, and metadata already decoded by the caller. */
86
+ export interface AssembleOptions {
87
+ signal?: AbortSignal;
88
+ /** `true` for `getTuple` (read-your-writes), `false` for the eventually-consistent `list` path. */
89
+ consistent: boolean;
90
+ /** Metadata the caller decoded to apply a filter, so it is not decoded (or downloaded) twice. */
91
+ metadata?: CheckpointMetadata;
92
+ }
93
+ /**
94
+ * A full {@link CheckpointTuple} built from a META row.
95
+ *
96
+ * Accepts: `thread` — the **caller's** location, never the row's: `thread.threadId`
97
+ * scopes which S3 object the row may point at, so it must come from the
98
+ * partition the caller asked for; `thread.checkpointNs` is its namespace.
99
+ * `options.metadata` — already decoded by a filtered `list`, so a filtered
100
+ * listing decodes and downloads each metadata blob once, not twice.
101
+ * `options.consistent` — true for `getTuple`, false for `list`.
102
+ *
103
+ * Returns: the tuple, with `parentConfig` set only when the row names a parent;
104
+ * `undefined` when the PAYLOAD row is absent — the window the ordered
105
+ * PAYLOAD→META write leaves open, and the same answer a caller gets for a
106
+ * checkpoint that does not exist.
107
+ *
108
+ * Throws: whatever the reads and decodes throw.
109
+ */
110
+ export declare function assembleTuple(context: CheckpointerContext, thread: ThreadLocation, meta: CheckpointMetaRow, options: AssembleOptions): Promise<CheckpointTuple | undefined>;
111
+ /**
112
+ * Pre-v4 checkpoints kept a task's `Send`s as `__pregel_tasks` pending writes
113
+ * on the parent rather than in the checkpoint itself. Reading such a
114
+ * checkpoint rebuilds `channel_values[TASKS]` from those writes and stamps
115
+ * the channel with the highest version the checkpoint already carries (or
116
+ * the first version when it carries none), exactly as the reference savers
117
+ * do, so a thread written before LangGraph 0.2 still resumes.
118
+ *
119
+ * Accepts: `checkpoint` — any version. `parent` — the checkpoint's own thread
120
+ * and namespace, plus `parent.parentCheckpointId`, the parent whose pending
121
+ * writes hold the sends; absent means there is nowhere to migrate from.
122
+ * `read` — cancellation and consistency for the pending-writes read.
123
+ *
124
+ * Returns: the checkpoint untouched when it is v4 or has no parent, and
125
+ * otherwise a copy with `channel_values[TASKS]` rebuilt. The input is never
126
+ * mutated.
127
+ *
128
+ * Throws: whatever reading the parent's pending writes throws.
129
+ */
130
+ export declare function migratePendingSends(context: CheckpointerContext, checkpoint: Checkpoint, parent: PendingSendsSource, read: ReadOptions): Promise<Checkpoint>;
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ /**
3
+ * Hides which rows a checkpoint read issues, with what consistency, and how a
4
+ * checkpoint an older release wrote is read back.
5
+ *
6
+ * A tuple is a META row, a PAYLOAD row and a checkpoint's WRITE rows, read
7
+ * strongly for `getTuple` and eventually for `list`, with expired rows absent
8
+ * however long DynamoDB's sweep lags, and with a pre-v4 checkpoint's `Send`s
9
+ * migrated from its parent's pending writes. The caller asks for a tuple; which
10
+ * reads that takes, and in what order, is decided here.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.fetchTargetMeta = fetchTargetMeta;
14
+ exports.fetchPayload = fetchPayload;
15
+ exports.fetchPendingWrites = fetchPendingWrites;
16
+ exports.assembleTuple = assembleTuple;
17
+ exports.migratePendingSends = migratePendingSends;
18
+ const langgraph_checkpoint_1 = require("@langchain/langgraph-checkpoint");
19
+ const clock_1 = require("../../shared/clock");
20
+ const paginate_1 = require("../../shared/dynamodb/paginate");
21
+ const retry_1 = require("../../shared/dynamodb/retry");
22
+ const table_schema_1 = require("../../shared/dynamodb/table-schema");
23
+ const rows_1 = require("./rows");
24
+ /**
25
+ * Rows one page of the newest-first META read evaluates. The read stops at the
26
+ * first live row of ours, so this decides only how many *dead* rows one round
27
+ * trip can step over: at one row per page, a thread whose head has aged out
28
+ * under a `ttl` costs one `Query` per expired row, and DynamoDB's own sweep may
29
+ * lag that `ttl` by up to 48 hours, so the run of dead rows can be as long as
30
+ * the thread is busy. This is the hottest read the package performs — every
31
+ * graph step begins with it — so a round trip per aged-out row is the wrong
32
+ * side of the trade to pay on every step.
33
+ *
34
+ * The trade runs the other way when nothing at the head has expired, which is
35
+ * every thread that sets no `ttl` at all. DynamoDB applies `Limit` before the
36
+ * filter and bills for what it evaluated, so such a read pays for up to this
37
+ * many META rows and keeps exactly one. A META row measures roughly 500
38
+ * bytes for a typical checkpoint, which puts a page at ~26 KB: about seven
39
+ * strongly consistent read units where a single row costs one, and a fortieth
40
+ * of the 1 MB a `Query` may return, so the page size rather than the response
41
+ * cap is always what ends a page.
42
+ */
43
+ const LATEST_META_PAGE_SIZE = 50;
44
+ /**
45
+ * The META row a read is about: the one `checkpointId` names, else the newest
46
+ * in the namespace.
47
+ *
48
+ * Accepts: `address` — parsed; its `checkpointId` names the row, and its
49
+ * absence asks for the newest in the namespace. `signal` — aborts the read.
50
+ *
51
+ * Returns: the row, or undefined when there is none — including when every row
52
+ * in the namespace has expired, or when the only rows there belong to another
53
+ * writer.
54
+ *
55
+ * Throws: `FORMAT_UNSUPPORTED` for a row of ours written by a newer version;
56
+ * whatever the read throws.
57
+ *
58
+ * Guarantees: strongly consistent, and expiry is judged here rather than waited
59
+ * for, so a checkpoint past its ttl is absent to every reader however long
60
+ * DynamoDB's sweep lags. The newest-first read returns the first live row of
61
+ * ours and stops there, stepping over expired and foreign rows
62
+ * {@link LATEST_META_PAGE_SIZE} at a time rather than one per round trip.
63
+ */
64
+ async function fetchTargetMeta(context, address, signal) {
65
+ const { threadId, checkpointNs, checkpointId } = address;
66
+ // Expired rows are absent to every reader, however long DynamoDB's sweep lags.
67
+ const now = (0, clock_1.nowSeconds)();
68
+ if (checkpointId !== undefined) {
69
+ const result = await (0, retry_1.withDynamoDBRetry)((request) => context.client.get({
70
+ TableName: context.tableName,
71
+ Key: (0, rows_1.metaRowKey)({ threadId, checkpointNs, checkpointId }),
72
+ ConsistentRead: true,
73
+ }, request), (0, retry_1.retryFor)(context, signal));
74
+ const meta = (0, rows_1.parseHeadRow)(context, result.Item);
75
+ return meta && !(0, table_schema_1.isExpiredRow)(meta, now) ? meta : undefined;
76
+ }
77
+ const params = (0, rows_1.beginsWithQuery)(context.tableName, (0, rows_1.partitionKey)(threadId), (0, rows_1.metaSortKeyPrefix)(checkpointNs), {
78
+ limit: LATEST_META_PAGE_SIZE,
79
+ consistent: true,
80
+ });
81
+ // Both caps stay off, each for its own reason. `maxItems` counts the rows
82
+ // yielded past the server-side filter, and a finite value there would add
83
+ // the probe `paginateQuery` runs to tell a reached cap apart from an
84
+ // exhausted read — more requests, on the read the page size above exists to
85
+ // make cheaper. `maxIterations` is the runaway guard, but a finite value
86
+ // would turn a namespace whose rows have all aged out into a thrown
87
+ // `RESULT_TRUNCATED` where this function documents `undefined`, failing
88
+ // every graph step on exactly the thread shape the page size is here to
89
+ // serve. The page size is what bounds the walk instead: it divides the
90
+ // requests a dead head costs by `LATEST_META_PAGE_SIZE`.
91
+ const rows = (0, paginate_1.paginateQuery)({
92
+ retry: (0, retry_1.retryFor)(context, signal),
93
+ signal,
94
+ client: context.client,
95
+ params: (0, table_schema_1.withoutExpired)(params, now),
96
+ maxItems: Number.POSITIVE_INFINITY,
97
+ maxIterations: Number.POSITIVE_INFINITY,
98
+ });
99
+ for await (const raw of rows) {
100
+ const meta = (0, rows_1.parseHeadRow)(context, raw);
101
+ if (meta && !(0, table_schema_1.isExpiredRow)(meta, now))
102
+ return meta;
103
+ }
104
+ return undefined;
105
+ }
106
+ /**
107
+ * The PAYLOAD row of one checkpoint.
108
+ *
109
+ * Accepts: `at` — the checkpoint's location. `read.consistent` — defaults to
110
+ * true; `list` passes false and accepts replica lag, since a listing tolerates
111
+ * what a read-your-writes `getTuple` does not.
112
+ *
113
+ * Returns: the row, or undefined when it is not there — the window the ordered
114
+ * PAYLOAD→META write leaves open, which the caller answers as "no checkpoint".
115
+ *
116
+ * Throws: `FORMAT_UNSUPPORTED` for a row a newer release wrote; whatever the
117
+ * read throws.
118
+ */
119
+ async function fetchPayload(context, at, read = {}) {
120
+ const result = await (0, retry_1.withDynamoDBRetry)((request) => context.client.get({
121
+ TableName: context.tableName,
122
+ Key: (0, rows_1.payloadRowKey)(at),
123
+ ConsistentRead: read.consistent ?? true,
124
+ }, request), (0, retry_1.retryFor)(context, read.signal));
125
+ const item = result.Item;
126
+ // A payload of ours written by a newer release fails loudly, as its META row
127
+ // would: decoding it under today's rules is how a checkpoint comes back with
128
+ // state silently missing.
129
+ if (item !== undefined)
130
+ (0, table_schema_1.assertReadableRow)(item, 'checkpoint payload');
131
+ return item;
132
+ }
133
+ /**
134
+ * Every pending write stored for one checkpoint, decoded, in write order.
135
+ *
136
+ * Accepts: `at` — the checkpoint's location. `read.consistent` — omitted reads
137
+ * strongly consistently; `list` passes `false` explicitly and accepts replica
138
+ * lag, `getTuple` passes `true`.
139
+ *
140
+ * Returns: the writes after `dropSupersededWrites` has resolved
141
+ * first-write-wins; a checkpoint with none returns an empty array.
142
+ *
143
+ * Throws: `FORMAT_UNSUPPORTED` for a row a newer release wrote; whatever the
144
+ * query or the payload decode throws.
145
+ *
146
+ * Guarantees: the read is deliberately uncapped. It must be complete to be
147
+ * correct — a `Send` fan-out retried with a changed write order leaves
148
+ * superseded rows behind that would count toward any cap — so past
149
+ * {@link LIST_SCAN_WARN_THRESHOLD} rows the read still succeeds and an operator
150
+ * is told the checkpoint is unusually heavy.
151
+ */
152
+ async function fetchPendingWrites(context, at, read = {}) {
153
+ const params = (0, rows_1.beginsWithQuery)(context.tableName, (0, rows_1.partitionKey)(at.threadId), (0, rows_1.writeSortKeyPrefix)(at.checkpointNs, at.checkpointId), { ascending: true, consistent: read.consistent ?? true });
154
+ // Unbounded: the read must be complete to be correct, and a Send fan-out
155
+ // retried with a changed write order leaves superseded rows behind that
156
+ // count toward any cap. Past the warning threshold the read still succeeds,
157
+ // but an operator is told the checkpoint is unusually heavy.
158
+ const items = [];
159
+ for await (const item of (0, paginate_1.paginateQuery)({
160
+ retry: (0, retry_1.retryFor)(context, read.signal),
161
+ signal: read.signal,
162
+ client: context.client,
163
+ params,
164
+ maxItems: Number.POSITIVE_INFINITY,
165
+ maxIterations: Number.POSITIVE_INFINITY,
166
+ })) {
167
+ // Checked before `dropSupersededWrites` reads `writeGroup`: that dedup runs
168
+ // on every row regardless of format, and a newer format may give the
169
+ // attribute a different meaning.
170
+ (0, table_schema_1.assertReadableRow)(item, 'pending write');
171
+ items.push(item);
172
+ }
173
+ if (items.length >= paginate_1.LIST_SCAN_WARN_THRESHOLD) {
174
+ context.logger.warn('getTuple: a checkpoint carries very many pending-write rows; the read is complete but slow', {
175
+ threadId: at.threadId,
176
+ checkpointId: at.checkpointId,
177
+ rows: items.length,
178
+ });
179
+ }
180
+ return (0, rows_1.toPendingWrites)(context, items, at.threadId, read.signal);
181
+ }
182
+ /** Build a config that addresses a specific checkpoint. */
183
+ function configFor(threadId, checkpointNs, checkpointId) {
184
+ return {
185
+ configurable: { thread_id: threadId, checkpoint_ns: checkpointNs, checkpoint_id: checkpointId },
186
+ };
187
+ }
188
+ /**
189
+ * A full {@link CheckpointTuple} built from a META row.
190
+ *
191
+ * Accepts: `thread` — the **caller's** location, never the row's: `thread.threadId`
192
+ * scopes which S3 object the row may point at, so it must come from the
193
+ * partition the caller asked for; `thread.checkpointNs` is its namespace.
194
+ * `options.metadata` — already decoded by a filtered `list`, so a filtered
195
+ * listing decodes and downloads each metadata blob once, not twice.
196
+ * `options.consistent` — true for `getTuple`, false for `list`.
197
+ *
198
+ * Returns: the tuple, with `parentConfig` set only when the row names a parent;
199
+ * `undefined` when the PAYLOAD row is absent — the window the ordered
200
+ * PAYLOAD→META write leaves open, and the same answer a caller gets for a
201
+ * checkpoint that does not exist.
202
+ *
203
+ * Throws: whatever the reads and decodes throw.
204
+ */
205
+ async function assembleTuple(context, thread, meta, options) {
206
+ const read = { signal: options.signal, consistent: options.consistent };
207
+ const at = { ...thread, checkpointId: meta.checkpointId };
208
+ const payload = await fetchPayload(context, at, read);
209
+ if (!payload)
210
+ return undefined;
211
+ const [checkpoint, metadata, pendingWrites] = await Promise.all([
212
+ (0, rows_1.readCheckpoint)(context, payload, thread.threadId, options.signal).then((stored) => migratePendingSends(context, stored, { ...thread, parentCheckpointId: meta.parentCheckpointId }, read)),
213
+ options.metadata ?? (0, rows_1.readMetadata)(context, meta, thread.threadId, options.signal),
214
+ fetchPendingWrites(context, at, read),
215
+ ]);
216
+ const tuple = {
217
+ config: configFor(thread.threadId, thread.checkpointNs, meta.checkpointId),
218
+ checkpoint,
219
+ metadata,
220
+ pendingWrites,
221
+ };
222
+ if (meta.parentCheckpointId !== undefined) {
223
+ tuple.parentConfig = configFor(thread.threadId, thread.checkpointNs, meta.parentCheckpointId);
224
+ }
225
+ return tuple;
226
+ }
227
+ /**
228
+ * Pre-v4 checkpoints kept a task's `Send`s as `__pregel_tasks` pending writes
229
+ * on the parent rather than in the checkpoint itself. Reading such a
230
+ * checkpoint rebuilds `channel_values[TASKS]` from those writes and stamps
231
+ * the channel with the highest version the checkpoint already carries (or
232
+ * the first version when it carries none), exactly as the reference savers
233
+ * do, so a thread written before LangGraph 0.2 still resumes.
234
+ *
235
+ * Accepts: `checkpoint` — any version. `parent` — the checkpoint's own thread
236
+ * and namespace, plus `parent.parentCheckpointId`, the parent whose pending
237
+ * writes hold the sends; absent means there is nowhere to migrate from.
238
+ * `read` — cancellation and consistency for the pending-writes read.
239
+ *
240
+ * Returns: the checkpoint untouched when it is v4 or has no parent, and
241
+ * otherwise a copy with `channel_values[TASKS]` rebuilt. The input is never
242
+ * mutated.
243
+ *
244
+ * Throws: whatever reading the parent's pending writes throws.
245
+ */
246
+ async function migratePendingSends(context, checkpoint, parent, read) {
247
+ if (checkpoint.v >= 4 || parent.parentCheckpointId === undefined)
248
+ return checkpoint;
249
+ const writes = await fetchPendingWrites(context, {
250
+ threadId: parent.threadId,
251
+ checkpointNs: parent.checkpointNs,
252
+ checkpointId: parent.parentCheckpointId,
253
+ }, read);
254
+ const sends = writes.filter(([, channel]) => channel === langgraph_checkpoint_1.TASKS).map(([, , value]) => value);
255
+ const versions = Object.values(checkpoint.channel_versions);
256
+ return {
257
+ ...checkpoint,
258
+ channel_values: { ...checkpoint.channel_values, [langgraph_checkpoint_1.TASKS]: sends },
259
+ channel_versions: {
260
+ ...checkpoint.channel_versions,
261
+ [langgraph_checkpoint_1.TASKS]: versions.length > 0 ? (0, langgraph_checkpoint_1.maxChannelVersion)(...versions) : 1,
262
+ },
263
+ };
264
+ }