@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,225 @@
1
+ /**
2
+ * Hides what a well-formed store operation is (record 21).
3
+ *
4
+ * Every namespace, key, address, search, listing and batch is checked here,
5
+ * once, into branded types only these parsers build, and each operation's
6
+ * kind is decided from its shape here and nowhere else. Which of upstream's
7
+ * own rules apply — no `.` in a label and no `"langgraph"` root, for `put()`
8
+ * alone — and every default a caller may leave out are settled here too, so
9
+ * no later step checks again.
10
+ */
11
+ import type { BaseStore, ListNamespacesOperation, Operation, PutOperation, SearchOperation } from '@langchain/langgraph-checkpoint';
12
+ import { type PageLimit } from '../../shared/validation/primitives';
13
+ import type { ListNamespacesOptions } from '../types';
14
+ import type { JsonValue } from './filter';
15
+ declare const namespaceBrand: unique symbol;
16
+ declare const namespacePrefixBrand: unique symbol;
17
+ declare const storeAddressBrand: unique symbol;
18
+ /**
19
+ * A namespace checked as the partition and sort-key segments it becomes:
20
+ * non-empty, every label a well-formed identifier. Built only by
21
+ * {@link parseNamespace}, as a copy no caller holds. Mutable in type only so it
22
+ * still satisfies the public `VectorBackend` signatures; nothing writes to it.
23
+ */
24
+ export type Namespace = string[] & {
25
+ readonly [namespaceBrand]: true;
26
+ };
27
+ /** A namespace prefix: like a {@link Namespace}, but possibly empty. Built only by {@link parseNamespacePrefix}. */
28
+ export type NamespacePrefix = string[] & {
29
+ readonly [namespacePrefixBrand]: true;
30
+ };
31
+ /**
32
+ * An item's address — namespace and key — checked together, because the
33
+ * DynamoDB sort-key cap is a property of the pair. Built only by
34
+ * {@link parseStoreAddress}.
35
+ */
36
+ export type StoreAddress = {
37
+ readonly namespace: Namespace;
38
+ readonly key: string;
39
+ } & {
40
+ readonly [storeAddressBrand]: true;
41
+ };
42
+ /**
43
+ * Parse a namespace prefix.
44
+ *
45
+ * Accepts: `value` — anything; an array of labels a namespace can hold,
46
+ * possibly empty, which spans every namespace. `field` — the argument the
47
+ * caller set (`namespacePrefix`, or `prefix`/`suffix` for a match condition's
48
+ * path), named on a refusal.
49
+ *
50
+ * Returns: a copy of the labels, as a {@link NamespacePrefix}. A prefix no
51
+ * stored namespace could ever match is refused rather than answered with a
52
+ * silent empty page.
53
+ *
54
+ * Throws: `VALIDATION` naming `field` for a non-array, or `<field> element` for
55
+ * a malformed label.
56
+ */
57
+ export declare function parseNamespacePrefix(value: unknown, field: string): NamespacePrefix;
58
+ /**
59
+ * Parse a namespace.
60
+ *
61
+ * Accepts: `value` — anything; a non-empty array of labels. `field` — defaults
62
+ * to `namespace`; `reconcileVectorIndex` passes `namespacePrefix`, whose prefix
63
+ * must not be empty.
64
+ *
65
+ * Returns: a copy of the labels, as a {@link Namespace}.
66
+ *
67
+ * Throws: `VALIDATION` naming `field` for a non-array or an empty one, or
68
+ * `<field> element` for a malformed label.
69
+ */
70
+ export declare function parseNamespace(value: unknown, field?: string): Namespace;
71
+ /**
72
+ * Parse an item's address: the namespace and key together, because the
73
+ * DynamoDB sort-key cap is a property of the pair. A deep namespace of legal
74
+ * segments can still compose an illegal sort key, which is why the
75
+ * composition is checked and not just the parts.
76
+ *
77
+ * Accepts: `namespace` — as {@link parseNamespace}. `key` — a well-formed
78
+ * identifier.
79
+ *
80
+ * Returns: the address, as a {@link StoreAddress}.
81
+ *
82
+ * Throws: `VALIDATION` naming `namespace` (or `namespace element`), then `key`,
83
+ * then `sortKey` when the two compose a sort key over DynamoDB's cap.
84
+ */
85
+ export declare function parseStoreAddress(namespace: unknown, key: unknown): StoreAddress;
86
+ /** Read one item. */
87
+ export interface ParsedGet {
88
+ readonly kind: 'get';
89
+ readonly address: StoreAddress;
90
+ }
91
+ /** Store one item. */
92
+ export interface ParsedPut {
93
+ readonly kind: 'put';
94
+ readonly address: StoreAddress;
95
+ readonly value: Record<string, JsonValue>;
96
+ /** `false` indexes nothing, a list the fields named, `undefined` the configured fields. */
97
+ readonly index: false | string[] | undefined;
98
+ }
99
+ /** Delete one item: a put whose value is `null`. */
100
+ export interface ParsedDelete {
101
+ readonly kind: 'delete';
102
+ readonly address: StoreAddress;
103
+ }
104
+ /** Search under a prefix, its page and its defaults resolved. */
105
+ export interface ParsedSearch {
106
+ readonly kind: 'search';
107
+ readonly namespacePrefix: NamespacePrefix;
108
+ readonly filter: Record<string, JsonValue> | undefined;
109
+ readonly query: string | undefined;
110
+ readonly offset: number;
111
+ readonly limit: PageLimit;
112
+ }
113
+ /** One match condition of a namespace listing. */
114
+ export interface ParsedMatchCondition {
115
+ readonly matchType: 'prefix' | 'suffix';
116
+ readonly path: NamespacePrefix;
117
+ }
118
+ /** List namespaces. */
119
+ export interface ParsedList {
120
+ readonly kind: 'list';
121
+ readonly matchConditions: ParsedMatchCondition[] | undefined;
122
+ readonly maxDepth: number | undefined;
123
+ readonly offset: number;
124
+ readonly limit: PageLimit;
125
+ }
126
+ /**
127
+ * One store operation, parsed. The kind is decided here, once, from the shape
128
+ * upstream's `Operation` union gives it — every other step switches on `kind`
129
+ * instead of asking the shape again.
130
+ */
131
+ export type ParsedOperation = ParsedGet | ParsedPut | ParsedDelete | ParsedSearch | ParsedList;
132
+ /**
133
+ * Parse a search's options against a prefix already parsed.
134
+ *
135
+ * Accepts: `namespacePrefix` — parsed by {@link parseNamespacePrefix}, which
136
+ * `store.search` does first so a malformed prefix is named before a malformed
137
+ * option. `op.filter` — an object when given. `op.query` — a string when given.
138
+ * `op.offset` — an integer of at least 0, `0` when absent; it carries no
139
+ * ceiling of its own, since it selects where a page starts rather than how
140
+ * much one holds, and what it can make a read walk is already bounded by
141
+ * `maxScanItems`. `op.limit` — 0 to the page ceiling, 10 when absent; `null` is
142
+ * not absent, so `limit: null` is refused rather than read as the default.
143
+ * `0` asks for no items and is answered as such, not refused — a page, not a
144
+ * conversation window, which is the one place this package refuses zero.
145
+ *
146
+ * Returns: the search, its defaults applied.
147
+ *
148
+ * Throws: `VALIDATION` naming `filter`, `query`, `offset` or `limit`, in that
149
+ * order.
150
+ */
151
+ export declare function parseSearch(namespacePrefix: NamespacePrefix, op: Pick<SearchOperation, 'filter' | 'limit' | 'offset' | 'query'>): ParsedSearch;
152
+ /**
153
+ * Parse a namespace-listing operation.
154
+ *
155
+ * Accepts: `op.offset` — an integer of at least 0. `op.limit` — 0 to the page
156
+ * ceiling. `op.maxDepth` — an integer of at least 1 when given: left
157
+ * unchecked, a negative value inverts truncation via `Array.prototype.slice(0,
158
+ * -n)`, which drops the *last* n elements rather than erroring, and 0
159
+ * truncates every namespace to the same empty one. `op.matchConditions` — an
160
+ * array of `{ matchType: 'prefix' | 'suffix', path }` when given; `*` is a
161
+ * legal label in a path.
162
+ *
163
+ * Returns: the listing.
164
+ *
165
+ * Throws: `VALIDATION` naming `offset`, `limit`, `maxDepth`, `matchConditions`
166
+ * or `<matchType> element`, in that order.
167
+ */
168
+ export declare function parseListOperation(op: ListNamespacesOperation): ParsedList;
169
+ /**
170
+ * Parse the options of `listNamespaces`.
171
+ *
172
+ * Accepts: `options` — only `prefix`, `suffix`, `maxDepth`, `limit` and
173
+ * `offset`; `limit` defaults to 100 and `offset` to 0.
174
+ *
175
+ * Returns: the listing the options describe.
176
+ *
177
+ * Throws: `VALIDATION` naming `options.<key>` for a key this package does not
178
+ * read, then as {@link parseListOperation}.
179
+ */
180
+ export declare function parseListNamespacesOptions(options: ListNamespacesOptions): ParsedList;
181
+ /**
182
+ * Parse the arguments of `put()`.
183
+ *
184
+ * Accepts: `namespace`, `key` — as {@link parseStoreAddress}, plus the
185
+ * namespace rules upstream `put()` adds. `value` — an object; `null` is refused,
186
+ * because `delete()` is how an item is removed. `index` — `false`, a list of
187
+ * field paths, or absent.
188
+ *
189
+ * Returns: the put.
190
+ *
191
+ * Throws: `VALIDATION` naming `namespace`, `namespace element`, `key`,
192
+ * `sortKey`, `value` or `index`, in that order.
193
+ */
194
+ export declare function parsePutArguments(namespace: string[], key: string, value: Parameters<BaseStore['put']>[2], index: PutOperation['index']): ParsedPut;
195
+ /**
196
+ * Parse one operation of a batch, deciding its kind from its shape — the only
197
+ * place that asks.
198
+ *
199
+ * Accepts: `operation` — an object; a `namespacePrefix` makes it a search, a
200
+ * `value` a put (a delete when `null`), a `key` a get, anything else a listing.
201
+ *
202
+ * Returns: the parsed operation.
203
+ *
204
+ * Throws: `VALIDATION` naming `operations` for a non-object, else as the
205
+ * parser of its kind.
206
+ */
207
+ export declare function parseOperation(operation: Operation): ParsedOperation;
208
+ /**
209
+ * Parse every operation of a batch before any of them runs, so a malformed
210
+ * last operation cannot leave the first ones applied. That matters most
211
+ * inside a graph: LangGraph reaches a store only through `batch()`, via
212
+ * `AsyncBatchedStore`, which coalesces every call made in one tick into a
213
+ * single batch and rejects them all together (`@langchain/langgraph`
214
+ * `dist/pregel/loop.js:311`, `@langchain/langgraph-checkpoint@1.1.5`
215
+ * `dist/store/batch.js:85-105`).
216
+ *
217
+ * Accepts: `operations` — an array of operations.
218
+ *
219
+ * Returns: the parsed operations, in order.
220
+ *
221
+ * Throws: `VALIDATION` naming `operations` for a non-array, else as
222
+ * {@link parseOperation} for the first malformed one.
223
+ */
224
+ export declare function parseOperations(operations: Operation[]): ParsedOperation[];
225
+ export {};
@@ -0,0 +1,350 @@
1
+ "use strict";
2
+ /**
3
+ * Hides what a well-formed store operation is (record 21).
4
+ *
5
+ * Every namespace, key, address, search, listing and batch is checked here,
6
+ * once, into branded types only these parsers build, and each operation's
7
+ * kind is decided from its shape here and nowhere else. Which of upstream's
8
+ * own rules apply — no `.` in a label and no `"langgraph"` root, for `put()`
9
+ * alone — and every default a caller may leave out are settled here too, so
10
+ * no later step checks again.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.parseNamespacePrefix = parseNamespacePrefix;
14
+ exports.parseNamespace = parseNamespace;
15
+ exports.parseStoreAddress = parseStoreAddress;
16
+ exports.parseSearch = parseSearch;
17
+ exports.parseListOperation = parseListOperation;
18
+ exports.parseListNamespacesOptions = parseListNamespacesOptions;
19
+ exports.parsePutArguments = parsePutArguments;
20
+ exports.parseOperation = parseOperation;
21
+ exports.parseOperations = parseOperations;
22
+ const table_schema_1 = require("../../shared/dynamodb/table-schema");
23
+ const errors_1 = require("../../shared/errors/errors");
24
+ const option_shape_1 = require("../../shared/validation/option-shape");
25
+ const primitives_1 = require("../../shared/validation/primitives");
26
+ const rows_1 = require("./rows");
27
+ const setup_1 = require("./setup");
28
+ /**
29
+ * The root label upstream `BaseStore.put` refuses
30
+ * (`@langchain/langgraph-checkpoint@1.1.5` `dist/store/base.js:23`).
31
+ */
32
+ const RESERVED_ROOT = 'langgraph';
33
+ /** The page `search` reads when the caller names none. */
34
+ const DEFAULT_SEARCH_LIMIT = (0, primitives_1.parseLimit)(10, 0);
35
+ /** The page `listNamespaces` reads when the caller names none. */
36
+ const DEFAULT_LIST_LIMIT = 100;
37
+ /**
38
+ * Every label of `value`, each a well-formed identifier, as a copy. Iterated
39
+ * with `for…of`, so a hole in a sparse array is checked as the `undefined` it
40
+ * reads as rather than skipped.
41
+ *
42
+ * These are this package's own rules, and only those: `#` is this package's
43
+ * separator, so a `.` costs nothing here, and a listing's `'*'` wildcard
44
+ * satisfies every one of these rules, so it needs no exemption. Upstream
45
+ * `BaseStore.put` refuses a `.` in a label and a `"langgraph"` root too, but
46
+ * only in that one method — see {@link assertUpstreamPutNamespace}.
47
+ */
48
+ function parseLabels(value, field) {
49
+ if (!Array.isArray(value)) {
50
+ throw (0, errors_1.validationError)(`${field} must be an array of labels`, field);
51
+ }
52
+ const labels = [];
53
+ for (const label of value) {
54
+ labels.push((0, primitives_1.parseIdentifier)(label, table_schema_1.KEY_SEPARATOR, `${field} element`, table_schema_1.MAX_KEY_SEGMENT_BYTES));
55
+ }
56
+ return labels;
57
+ }
58
+ /**
59
+ * Parse a namespace prefix.
60
+ *
61
+ * Accepts: `value` — anything; an array of labels a namespace can hold,
62
+ * possibly empty, which spans every namespace. `field` — the argument the
63
+ * caller set (`namespacePrefix`, or `prefix`/`suffix` for a match condition's
64
+ * path), named on a refusal.
65
+ *
66
+ * Returns: a copy of the labels, as a {@link NamespacePrefix}. A prefix no
67
+ * stored namespace could ever match is refused rather than answered with a
68
+ * silent empty page.
69
+ *
70
+ * Throws: `VALIDATION` naming `field` for a non-array, or `<field> element` for
71
+ * a malformed label.
72
+ */
73
+ function parseNamespacePrefix(value, field) {
74
+ return parseLabels(value, field);
75
+ }
76
+ /**
77
+ * Parse a namespace.
78
+ *
79
+ * Accepts: `value` — anything; a non-empty array of labels. `field` — defaults
80
+ * to `namespace`; `reconcileVectorIndex` passes `namespacePrefix`, whose prefix
81
+ * must not be empty.
82
+ *
83
+ * Returns: a copy of the labels, as a {@link Namespace}.
84
+ *
85
+ * Throws: `VALIDATION` naming `field` for a non-array or an empty one, or
86
+ * `<field> element` for a malformed label.
87
+ */
88
+ function parseNamespace(value, field = 'namespace') {
89
+ if (!Array.isArray(value) || value.length === 0) {
90
+ throw (0, errors_1.validationError)(`${field} must be a non-empty array`, field);
91
+ }
92
+ return parseLabels(value, field);
93
+ }
94
+ /**
95
+ * Parse an item's address: the namespace and key together, because the
96
+ * DynamoDB sort-key cap is a property of the pair. A deep namespace of legal
97
+ * segments can still compose an illegal sort key, which is why the
98
+ * composition is checked and not just the parts.
99
+ *
100
+ * Accepts: `namespace` — as {@link parseNamespace}. `key` — a well-formed
101
+ * identifier.
102
+ *
103
+ * Returns: the address, as a {@link StoreAddress}.
104
+ *
105
+ * Throws: `VALIDATION` naming `namespace` (or `namespace element`), then `key`,
106
+ * then `sortKey` when the two compose a sort key over DynamoDB's cap.
107
+ */
108
+ function parseStoreAddress(namespace, key) {
109
+ const parsedNamespace = parseNamespace(namespace);
110
+ const parsedKey = (0, primitives_1.parseIdentifier)(key, table_schema_1.KEY_SEPARATOR, 'key', table_schema_1.MAX_KEY_SEGMENT_BYTES);
111
+ const bytes = Buffer.byteLength((0, rows_1.sortKey)(parsedNamespace, parsedKey), 'utf8');
112
+ if (bytes > table_schema_1.MAX_SORT_KEY_BYTES) {
113
+ throw (0, errors_1.validationError)(`namespace and key compose a ${bytes}-byte sort key; DynamoDB caps sort keys at ` +
114
+ `${table_schema_1.MAX_SORT_KEY_BYTES} bytes`, 'sortKey');
115
+ }
116
+ return { namespace: parsedNamespace, key: parsedKey };
117
+ }
118
+ /** A put's `index`: absent and `false` as given, a field list as a copy. */
119
+ function parseIndex(index) {
120
+ if (index === undefined || index === false)
121
+ return index;
122
+ return (0, primitives_1.parseStringArray)(index, 'index');
123
+ }
124
+ /**
125
+ * Parse a search's options against a prefix already parsed.
126
+ *
127
+ * Accepts: `namespacePrefix` — parsed by {@link parseNamespacePrefix}, which
128
+ * `store.search` does first so a malformed prefix is named before a malformed
129
+ * option. `op.filter` — an object when given. `op.query` — a string when given.
130
+ * `op.offset` — an integer of at least 0, `0` when absent; it carries no
131
+ * ceiling of its own, since it selects where a page starts rather than how
132
+ * much one holds, and what it can make a read walk is already bounded by
133
+ * `maxScanItems`. `op.limit` — 0 to the page ceiling, 10 when absent; `null` is
134
+ * not absent, so `limit: null` is refused rather than read as the default.
135
+ * `0` asks for no items and is answered as such, not refused — a page, not a
136
+ * conversation window, which is the one place this package refuses zero.
137
+ *
138
+ * Returns: the search, its defaults applied.
139
+ *
140
+ * Throws: `VALIDATION` naming `filter`, `query`, `offset` or `limit`, in that
141
+ * order.
142
+ */
143
+ function parseSearch(namespacePrefix, op) {
144
+ if (op.filter !== undefined)
145
+ (0, option_shape_1.assertObjectShape)(op.filter, 'filter');
146
+ const query = op.query === undefined ? undefined : (0, primitives_1.parseString)(op.query, 'query');
147
+ const offset = (0, primitives_1.parseInteger)(op.offset === undefined ? 0 : op.offset, 'offset', { min: 0 });
148
+ const limit = op.limit === undefined ? DEFAULT_SEARCH_LIMIT : (0, primitives_1.parseLimit)(op.limit, 0);
149
+ return {
150
+ kind: 'search',
151
+ namespacePrefix,
152
+ filter: op.filter,
153
+ query,
154
+ offset,
155
+ limit,
156
+ };
157
+ }
158
+ /**
159
+ * One match condition: an object, a known match type, a well-formed path.
160
+ * `matchType` is refused rather than resolved when it is neither `'prefix'`
161
+ * nor `'suffix'`: `matchNamespace`'s own branch on `matchType` (see
162
+ * `actions/list-namespaces.ts`) otherwise takes an unrecognised type as a
163
+ * suffix match and answers as if the caller had asked for one. The refusal echoes a string
164
+ * `matchType` in the message and describes anything else by its type, since
165
+ * `JSON.stringify` itself throws on a bigint.
166
+ */
167
+ function parseMatchCondition(condition) {
168
+ (0, option_shape_1.assertObjectShape)(condition, 'matchConditions');
169
+ const { matchType, path } = condition;
170
+ if (matchType !== 'prefix' && matchType !== 'suffix') {
171
+ const received = typeof matchType === 'string' ? JSON.stringify(matchType) : typeof matchType;
172
+ throw (0, errors_1.validationError)(`matchType must be "prefix" or "suffix" (received ${received})`, 'matchConditions');
173
+ }
174
+ return { matchType, path: parseNamespacePrefix(path, matchType) };
175
+ }
176
+ /** The match conditions of a listing, absent when none are given. */
177
+ function parseMatchConditions(conditions) {
178
+ if (conditions === undefined)
179
+ return undefined;
180
+ if (!Array.isArray(conditions)) {
181
+ throw (0, errors_1.validationError)('matchConditions must be an array', 'matchConditions');
182
+ }
183
+ const parsed = [];
184
+ for (const condition of conditions)
185
+ parsed.push(parseMatchCondition(condition));
186
+ return parsed;
187
+ }
188
+ /**
189
+ * Parse a namespace-listing operation.
190
+ *
191
+ * Accepts: `op.offset` — an integer of at least 0. `op.limit` — 0 to the page
192
+ * ceiling. `op.maxDepth` — an integer of at least 1 when given: left
193
+ * unchecked, a negative value inverts truncation via `Array.prototype.slice(0,
194
+ * -n)`, which drops the *last* n elements rather than erroring, and 0
195
+ * truncates every namespace to the same empty one. `op.matchConditions` — an
196
+ * array of `{ matchType: 'prefix' | 'suffix', path }` when given; `*` is a
197
+ * legal label in a path.
198
+ *
199
+ * Returns: the listing.
200
+ *
201
+ * Throws: `VALIDATION` naming `offset`, `limit`, `maxDepth`, `matchConditions`
202
+ * or `<matchType> element`, in that order.
203
+ */
204
+ function parseListOperation(op) {
205
+ const offset = (0, primitives_1.parseInteger)(op.offset, 'offset', { min: 0 });
206
+ const limit = (0, primitives_1.parseLimit)(op.limit, 0);
207
+ const maxDepth = op.maxDepth === undefined ? undefined : (0, primitives_1.parseInteger)(op.maxDepth, 'maxDepth', { min: 1 });
208
+ return {
209
+ kind: 'list',
210
+ matchConditions: parseMatchConditions(op.matchConditions),
211
+ maxDepth,
212
+ offset,
213
+ limit,
214
+ };
215
+ }
216
+ /**
217
+ * Parse the options of `listNamespaces`.
218
+ *
219
+ * Accepts: `options` — only `prefix`, `suffix`, `maxDepth`, `limit` and
220
+ * `offset`; `limit` defaults to 100 and `offset` to 0.
221
+ *
222
+ * Returns: the listing the options describe.
223
+ *
224
+ * Throws: `VALIDATION` naming `options.<key>` for a key this package does not
225
+ * read, then as {@link parseListOperation}.
226
+ */
227
+ function parseListNamespacesOptions(options) {
228
+ (0, option_shape_1.assertShape)(options, setup_1.STORE_LIST_NAMESPACES_KEYS, 'options');
229
+ const { prefix, suffix, maxDepth, limit = DEFAULT_LIST_LIMIT, offset = 0 } = options;
230
+ const matchConditions = [];
231
+ if (prefix !== undefined)
232
+ matchConditions.push({ matchType: 'prefix', path: prefix });
233
+ if (suffix !== undefined)
234
+ matchConditions.push({ matchType: 'suffix', path: suffix });
235
+ return parseListOperation({
236
+ matchConditions: matchConditions.length > 0 ? matchConditions : undefined,
237
+ maxDepth,
238
+ limit,
239
+ offset,
240
+ });
241
+ }
242
+ /**
243
+ * Refuse what upstream `BaseStore.put` refuses and this store's own key rules
244
+ * allow: no `.` in a label, and no `"langgraph"` root
245
+ * (`@langchain/langgraph-checkpoint@1.1.5` `dist/store/base.js:16-24`). These
246
+ * two rules belong to that one method only: the reference `InMemoryStore.batch`
247
+ * checks neither, and LangGraph's runtime reaches a store only through
248
+ * `batch()`, so a namespace such as `['memories', 'jane.doe@example.com']`
249
+ * written there must stay readable, searchable and deletable here. Only
250
+ * `put()` applies it, as upstream does; `batch()` does not.
251
+ */
252
+ function assertUpstreamPutNamespace(namespace) {
253
+ if (namespace.some((label) => label.includes('.'))) {
254
+ throw (0, errors_1.validationError)('namespace element must not contain "."; put() refuses it, as upstream BaseStore.put does', 'namespace element');
255
+ }
256
+ if (namespace[0] === RESERVED_ROOT) {
257
+ throw (0, errors_1.validationError)(`namespace must not start with "${RESERVED_ROOT}", the root label LangGraph reserves`, 'namespace');
258
+ }
259
+ }
260
+ /**
261
+ * Parse the arguments of `put()`.
262
+ *
263
+ * Accepts: `namespace`, `key` — as {@link parseStoreAddress}, plus the
264
+ * namespace rules upstream `put()` adds. `value` — an object; `null` is refused,
265
+ * because `delete()` is how an item is removed. `index` — `false`, a list of
266
+ * field paths, or absent.
267
+ *
268
+ * Returns: the put.
269
+ *
270
+ * Throws: `VALIDATION` naming `namespace`, `namespace element`, `key`,
271
+ * `sortKey`, `value` or `index`, in that order.
272
+ */
273
+ function parsePutArguments(namespace, key, value, index) {
274
+ const address = parseStoreAddress(namespace, key);
275
+ assertUpstreamPutNamespace(address.namespace);
276
+ if (value === null) {
277
+ throw (0, errors_1.validationError)('value must be an object; delete() removes an item', 'value');
278
+ }
279
+ (0, option_shape_1.assertObjectShape)(value, 'value');
280
+ return {
281
+ kind: 'put',
282
+ address,
283
+ value: value,
284
+ index: parseIndex(index),
285
+ };
286
+ }
287
+ /**
288
+ * A batch put, or the delete a `null` value asks for. The index is parsed
289
+ * either way, as it always was for a put with a `null` value.
290
+ */
291
+ function parsePutOperation(op) {
292
+ const address = parseStoreAddress(op.namespace, op.key);
293
+ if (op.value !== null)
294
+ (0, option_shape_1.assertObjectShape)(op.value, 'value');
295
+ const index = parseIndex(op.index);
296
+ if (op.value === null)
297
+ return { kind: 'delete', address };
298
+ return { kind: 'put', address, value: op.value, index };
299
+ }
300
+ /**
301
+ * Parse one operation of a batch, deciding its kind from its shape — the only
302
+ * place that asks.
303
+ *
304
+ * Accepts: `operation` — an object; a `namespacePrefix` makes it a search, a
305
+ * `value` a put (a delete when `null`), a `key` a get, anything else a listing.
306
+ *
307
+ * Returns: the parsed operation.
308
+ *
309
+ * Throws: `VALIDATION` naming `operations` for a non-object, else as the
310
+ * parser of its kind.
311
+ */
312
+ function parseOperation(operation) {
313
+ if (typeof operation !== 'object' || operation === null || Array.isArray(operation)) {
314
+ throw (0, errors_1.validationError)('every operation in operations must be an object', 'operations');
315
+ }
316
+ if ('namespacePrefix' in operation) {
317
+ return parseSearch(parseNamespacePrefix(operation.namespacePrefix, 'namespacePrefix'), operation);
318
+ }
319
+ if ('value' in operation)
320
+ return parsePutOperation(operation);
321
+ if ('key' in operation) {
322
+ return { kind: 'get', address: parseStoreAddress(operation.namespace, operation.key) };
323
+ }
324
+ return parseListOperation(operation);
325
+ }
326
+ /**
327
+ * Parse every operation of a batch before any of them runs, so a malformed
328
+ * last operation cannot leave the first ones applied. That matters most
329
+ * inside a graph: LangGraph reaches a store only through `batch()`, via
330
+ * `AsyncBatchedStore`, which coalesces every call made in one tick into a
331
+ * single batch and rejects them all together (`@langchain/langgraph`
332
+ * `dist/pregel/loop.js:311`, `@langchain/langgraph-checkpoint@1.1.5`
333
+ * `dist/store/batch.js:85-105`).
334
+ *
335
+ * Accepts: `operations` — an array of operations.
336
+ *
337
+ * Returns: the parsed operations, in order.
338
+ *
339
+ * Throws: `VALIDATION` naming `operations` for a non-array, else as
340
+ * {@link parseOperation} for the first malformed one.
341
+ */
342
+ function parseOperations(operations) {
343
+ if (!Array.isArray(operations)) {
344
+ throw (0, errors_1.validationError)('operations must be an array', 'operations');
345
+ }
346
+ const parsed = [];
347
+ for (const operation of operations)
348
+ parsed.push(parseOperation(operation));
349
+ return parsed;
350
+ }