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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (512) hide show
  1. package/README.md +1720 -154
  2. package/dist/backfill/backfill.d.ts +168 -0
  3. package/dist/backfill/backfill.js +393 -0
  4. package/dist/checkpointer/actions/delete-thread.d.ts +47 -6
  5. package/dist/checkpointer/actions/delete-thread.js +58 -21
  6. package/dist/checkpointer/actions/get-tuple.d.ts +29 -4
  7. package/dist/checkpointer/actions/get-tuple.js +44 -10
  8. package/dist/checkpointer/actions/list.d.ts +46 -4
  9. package/dist/checkpointer/actions/list.js +121 -66
  10. package/dist/checkpointer/actions/put-writes.d.ts +41 -9
  11. package/dist/checkpointer/actions/put-writes.js +62 -77
  12. package/dist/checkpointer/actions/put.d.ts +83 -4
  13. package/dist/checkpointer/actions/put.js +177 -25
  14. package/dist/checkpointer/internal/delta-history.d.ts +112 -0
  15. package/dist/checkpointer/internal/delta-history.js +252 -0
  16. package/dist/checkpointer/internal/listing.d.ts +149 -0
  17. package/dist/checkpointer/internal/listing.js +245 -0
  18. package/dist/checkpointer/internal/parse.d.ts +262 -0
  19. package/dist/checkpointer/internal/parse.js +372 -0
  20. package/dist/checkpointer/internal/pending-writes.d.ts +275 -0
  21. package/dist/checkpointer/internal/pending-writes.js +588 -0
  22. package/dist/checkpointer/internal/read.d.ts +130 -0
  23. package/dist/checkpointer/internal/read.js +264 -0
  24. package/dist/checkpointer/internal/rows.d.ts +571 -0
  25. package/dist/checkpointer/internal/rows.js +834 -0
  26. package/dist/checkpointer/internal/setup.d.ts +42 -19
  27. package/dist/checkpointer/internal/setup.js +65 -29
  28. package/dist/checkpointer/saver.d.ts +256 -16
  29. package/dist/checkpointer/saver.js +275 -29
  30. package/dist/checkpointer/types.d.ts +39 -39
  31. package/dist/checkpointer/types.js +10 -1
  32. package/dist/factory/factory.d.ts +134 -28
  33. package/dist/factory/factory.js +240 -21
  34. package/dist/factory/types.d.ts +76 -0
  35. package/dist/factory/types.js +10 -0
  36. package/dist/history/actions/add-messages.d.ts +31 -4
  37. package/dist/history/actions/add-messages.js +38 -58
  38. package/dist/history/actions/clear.d.ts +49 -6
  39. package/dist/history/actions/clear.js +66 -14
  40. package/dist/history/actions/get-messages.d.ts +54 -6
  41. package/dist/history/actions/get-messages.js +126 -43
  42. package/dist/history/actions/list-sessions.d.ts +52 -10
  43. package/dist/history/actions/list-sessions.js +139 -40
  44. package/dist/history/actions/reconcile-count.d.ts +42 -10
  45. package/dist/history/actions/reconcile-count.js +45 -45
  46. package/dist/history/chat-message-history.d.ts +220 -33
  47. package/dist/history/chat-message-history.js +240 -43
  48. package/dist/history/internal/append.d.ts +212 -0
  49. package/dist/history/internal/append.js +500 -0
  50. package/dist/history/internal/message-read.d.ts +84 -0
  51. package/dist/history/internal/message-read.js +204 -0
  52. package/dist/history/internal/parse.d.ts +153 -0
  53. package/dist/history/internal/parse.js +252 -0
  54. package/dist/history/internal/rows.d.ts +195 -0
  55. package/dist/history/internal/rows.js +250 -0
  56. package/dist/history/internal/session.d.ts +331 -0
  57. package/dist/history/internal/session.js +628 -0
  58. package/dist/history/internal/setup.d.ts +52 -17
  59. package/dist/history/internal/setup.js +92 -21
  60. package/dist/history/session-adapter.d.ts +102 -7
  61. package/dist/history/session-adapter.js +103 -9
  62. package/dist/history/types.d.ts +80 -29
  63. package/dist/history/types.js +10 -1
  64. package/dist/index.d.ts +42 -11
  65. package/dist/index.js +33 -12
  66. package/dist/shared/adapter.d.ts +135 -0
  67. package/dist/shared/adapter.js +143 -0
  68. package/dist/shared/clock.d.ts +51 -2
  69. package/dist/shared/clock.js +57 -2
  70. package/dist/shared/codec/codec.d.ts +288 -13
  71. package/dist/shared/codec/codec.js +416 -19
  72. package/dist/shared/codec/compression.d.ts +43 -7
  73. package/dist/shared/codec/compression.js +53 -13
  74. package/dist/shared/codec/json-serde.d.ts +76 -4
  75. package/dist/shared/codec/json-serde.js +181 -8
  76. package/dist/shared/codec/s3/client-types.d.ts +53 -0
  77. package/dist/shared/codec/s3/client-types.js +26 -0
  78. package/dist/shared/codec/s3/client.d.ts +43 -10
  79. package/dist/shared/codec/s3/client.js +82 -9
  80. package/dist/shared/codec/s3/config.d.ts +242 -11
  81. package/dist/shared/codec/s3/config.js +293 -11
  82. package/dist/shared/codec/s3/lifecycle.d.ts +164 -6
  83. package/dist/shared/codec/s3/lifecycle.js +335 -27
  84. package/dist/shared/codec/s3/offloader.d.ts +393 -18
  85. package/dist/shared/codec/s3/offloader.js +595 -37
  86. package/dist/shared/concurrency.d.ts +43 -0
  87. package/dist/shared/concurrency.js +78 -0
  88. package/dist/shared/dynamodb/abort.d.ts +47 -0
  89. package/dist/shared/dynamodb/abort.js +59 -0
  90. package/dist/shared/dynamodb/batch-write.d.ts +77 -14
  91. package/dist/shared/dynamodb/batch-write.js +146 -27
  92. package/dist/shared/dynamodb/cancellation.d.ts +121 -4
  93. package/dist/shared/dynamodb/cancellation.js +147 -3
  94. package/dist/shared/dynamodb/client.d.ts +162 -8
  95. package/dist/shared/dynamodb/client.js +153 -5
  96. package/dist/shared/dynamodb/idempotent-write.d.ts +551 -0
  97. package/dist/shared/dynamodb/idempotent-write.js +593 -0
  98. package/dist/shared/dynamodb/paginate.d.ts +105 -9
  99. package/dist/shared/dynamodb/paginate.js +175 -7
  100. package/dist/shared/dynamodb/partition-delete.d.ts +185 -14
  101. package/dist/shared/dynamodb/partition-delete.js +314 -44
  102. package/dist/shared/dynamodb/recency-index.d.ts +231 -0
  103. package/dist/shared/dynamodb/recency-index.js +377 -0
  104. package/dist/shared/dynamodb/retry.d.ts +276 -8
  105. package/dist/shared/dynamodb/retry.js +433 -23
  106. package/dist/shared/dynamodb/table-schema.d.ts +190 -0
  107. package/dist/shared/dynamodb/table-schema.js +209 -0
  108. package/dist/shared/errors/base-error.d.ts +184 -10
  109. package/dist/shared/errors/base-error.js +160 -14
  110. package/dist/shared/errors/boundary.d.ts +71 -0
  111. package/dist/shared/errors/boundary.js +143 -0
  112. package/dist/shared/errors/classify.d.ts +97 -0
  113. package/dist/shared/errors/classify.js +257 -0
  114. package/dist/shared/errors/error-code.d.ts +77 -2
  115. package/dist/shared/errors/error-code.js +83 -1
  116. package/dist/shared/errors/errors.d.ts +158 -59
  117. package/dist/shared/errors/errors.js +219 -92
  118. package/dist/shared/logging/logger.d.ts +69 -3
  119. package/dist/shared/logging/logger.js +97 -3
  120. package/dist/shared/logging/redaction.d.ts +92 -8
  121. package/dist/shared/logging/redaction.js +273 -17
  122. package/dist/shared/logging/secret-patterns.d.ts +149 -19
  123. package/dist/shared/logging/secret-patterns.js +188 -27
  124. package/dist/shared/logging/truncate.d.ts +197 -0
  125. package/dist/shared/logging/truncate.js +231 -0
  126. package/dist/shared/options.d.ts +59 -7
  127. package/dist/shared/options.js +9 -1
  128. package/dist/shared/ulid.d.ts +77 -7
  129. package/dist/shared/ulid.js +103 -8
  130. package/dist/shared/validation/collaborators.d.ts +141 -0
  131. package/dist/shared/validation/collaborators.js +188 -0
  132. package/dist/shared/validation/option-shape.d.ts +89 -0
  133. package/dist/shared/validation/option-shape.js +113 -0
  134. package/dist/shared/validation/options.d.ts +145 -0
  135. package/dist/shared/validation/options.js +328 -0
  136. package/dist/shared/validation/primitives.d.ts +288 -21
  137. package/dist/shared/validation/primitives.js +353 -50
  138. package/dist/shared/validation/ttl.d.ts +66 -10
  139. package/dist/shared/validation/ttl.js +113 -15
  140. package/dist/store/actions/list-namespaces.d.ts +76 -6
  141. package/dist/store/actions/list-namespaces.js +166 -24
  142. package/dist/store/actions/put.d.ts +33 -8
  143. package/dist/store/actions/put.js +53 -60
  144. package/dist/store/actions/reconcile-vector-index.d.ts +31 -10
  145. package/dist/store/actions/reconcile-vector-index.js +34 -15
  146. package/dist/store/actions/search.d.ts +34 -6
  147. package/dist/store/actions/search.js +56 -51
  148. package/dist/store/internal/batch-plan.d.ts +26 -0
  149. package/dist/store/internal/batch-plan.js +109 -0
  150. package/dist/store/internal/filter.d.ts +36 -3
  151. package/dist/store/internal/filter.js +66 -15
  152. package/dist/store/internal/get-item.d.ts +45 -0
  153. package/dist/store/internal/get-item.js +115 -0
  154. package/dist/store/internal/item-write.d.ts +230 -0
  155. package/dist/store/internal/item-write.js +463 -0
  156. package/dist/store/internal/parse.d.ts +225 -0
  157. package/dist/store/internal/parse.js +350 -0
  158. package/dist/store/internal/rows.d.ts +355 -0
  159. package/dist/store/internal/rows.js +447 -0
  160. package/dist/store/internal/semantic-search.d.ts +161 -6
  161. package/dist/store/internal/semantic-search.js +360 -18
  162. package/dist/store/internal/setup.d.ts +77 -20
  163. package/dist/store/internal/setup.js +178 -47
  164. package/dist/store/internal/table-search.d.ts +100 -0
  165. package/dist/store/internal/table-search.js +213 -0
  166. package/dist/store/internal/vector-index.d.ts +247 -0
  167. package/dist/store/internal/vector-index.js +546 -0
  168. package/dist/store/store.d.ts +270 -17
  169. package/dist/store/store.js +329 -38
  170. package/dist/store/types.d.ts +76 -26
  171. package/dist/store/types.js +13 -1
  172. package/dist/store/vector-backend.d.ts +64 -4
  173. package/dist/store/vector-backend.js +15 -1
  174. package/package.json +58 -36
  175. package/dist/checkpointer/actions/delete-thread.d.ts.map +0 -1
  176. package/dist/checkpointer/actions/delete-thread.js.map +0 -1
  177. package/dist/checkpointer/actions/get-tuple.d.ts.map +0 -1
  178. package/dist/checkpointer/actions/get-tuple.js.map +0 -1
  179. package/dist/checkpointer/actions/list.d.ts.map +0 -1
  180. package/dist/checkpointer/actions/list.js.map +0 -1
  181. package/dist/checkpointer/actions/put-writes.d.ts.map +0 -1
  182. package/dist/checkpointer/actions/put-writes.js.map +0 -1
  183. package/dist/checkpointer/actions/put.d.ts.map +0 -1
  184. package/dist/checkpointer/actions/put.js.map +0 -1
  185. package/dist/checkpointer/internal/assemble.d.ts +0 -10
  186. package/dist/checkpointer/internal/assemble.d.ts.map +0 -1
  187. package/dist/checkpointer/internal/assemble.js +0 -37
  188. package/dist/checkpointer/internal/assemble.js.map +0 -1
  189. package/dist/checkpointer/internal/configurable.d.ts +0 -13
  190. package/dist/checkpointer/internal/configurable.d.ts.map +0 -1
  191. package/dist/checkpointer/internal/configurable.js +0 -23
  192. package/dist/checkpointer/internal/configurable.js.map +0 -1
  193. package/dist/checkpointer/internal/fetch.d.ts +0 -10
  194. package/dist/checkpointer/internal/fetch.d.ts.map +0 -1
  195. package/dist/checkpointer/internal/fetch.js +0 -46
  196. package/dist/checkpointer/internal/fetch.js.map +0 -1
  197. package/dist/checkpointer/internal/filter-match.d.ts +0 -12
  198. package/dist/checkpointer/internal/filter-match.d.ts.map +0 -1
  199. package/dist/checkpointer/internal/filter-match.js +0 -14
  200. package/dist/checkpointer/internal/filter-match.js.map +0 -1
  201. package/dist/checkpointer/internal/item-reader.d.ts +0 -55
  202. package/dist/checkpointer/internal/item-reader.d.ts.map +0 -1
  203. package/dist/checkpointer/internal/item-reader.js +0 -88
  204. package/dist/checkpointer/internal/item-reader.js.map +0 -1
  205. package/dist/checkpointer/internal/item-writer.d.ts +0 -26
  206. package/dist/checkpointer/internal/item-writer.d.ts.map +0 -1
  207. package/dist/checkpointer/internal/item-writer.js +0 -92
  208. package/dist/checkpointer/internal/item-writer.js.map +0 -1
  209. package/dist/checkpointer/internal/keys.d.ts +0 -31
  210. package/dist/checkpointer/internal/keys.d.ts.map +0 -1
  211. package/dist/checkpointer/internal/keys.js +0 -87
  212. package/dist/checkpointer/internal/keys.js.map +0 -1
  213. package/dist/checkpointer/internal/query.d.ts +0 -20
  214. package/dist/checkpointer/internal/query.d.ts.map +0 -1
  215. package/dist/checkpointer/internal/query.js +0 -36
  216. package/dist/checkpointer/internal/query.js.map +0 -1
  217. package/dist/checkpointer/internal/setup.d.ts.map +0 -1
  218. package/dist/checkpointer/internal/setup.js.map +0 -1
  219. package/dist/checkpointer/internal/special-write-cas.d.ts +0 -30
  220. package/dist/checkpointer/internal/special-write-cas.d.ts.map +0 -1
  221. package/dist/checkpointer/internal/special-write-cas.js +0 -104
  222. package/dist/checkpointer/internal/special-write-cas.js.map +0 -1
  223. package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -24
  224. package/dist/checkpointer/internal/special-write-cleanup.d.ts.map +0 -1
  225. package/dist/checkpointer/internal/special-write-cleanup.js +0 -47
  226. package/dist/checkpointer/internal/special-write-cleanup.js.map +0 -1
  227. package/dist/checkpointer/internal/special-write-verify.d.ts +0 -54
  228. package/dist/checkpointer/internal/special-write-verify.d.ts.map +0 -1
  229. package/dist/checkpointer/internal/special-write-verify.js +0 -65
  230. package/dist/checkpointer/internal/special-write-verify.js.map +0 -1
  231. package/dist/checkpointer/internal/validation.d.ts +0 -13
  232. package/dist/checkpointer/internal/validation.d.ts.map +0 -1
  233. package/dist/checkpointer/internal/validation.js +0 -30
  234. package/dist/checkpointer/internal/validation.js.map +0 -1
  235. package/dist/checkpointer/internal/write-guard.d.ts +0 -13
  236. package/dist/checkpointer/internal/write-guard.d.ts.map +0 -1
  237. package/dist/checkpointer/internal/write-guard.js +0 -39
  238. package/dist/checkpointer/internal/write-guard.js.map +0 -1
  239. package/dist/checkpointer/internal/write-index.d.ts +0 -37
  240. package/dist/checkpointer/internal/write-index.d.ts.map +0 -1
  241. package/dist/checkpointer/internal/write-index.js +0 -42
  242. package/dist/checkpointer/internal/write-index.js.map +0 -1
  243. package/dist/checkpointer/saver.d.ts.map +0 -1
  244. package/dist/checkpointer/saver.js.map +0 -1
  245. package/dist/checkpointer/types.d.ts.map +0 -1
  246. package/dist/checkpointer/types.js.map +0 -1
  247. package/dist/factory/factory.d.ts.map +0 -1
  248. package/dist/factory/factory.js.map +0 -1
  249. package/dist/history/actions/add-messages.d.ts.map +0 -1
  250. package/dist/history/actions/add-messages.js.map +0 -1
  251. package/dist/history/actions/clear.d.ts.map +0 -1
  252. package/dist/history/actions/clear.js.map +0 -1
  253. package/dist/history/actions/get-messages.d.ts.map +0 -1
  254. package/dist/history/actions/get-messages.js.map +0 -1
  255. package/dist/history/actions/list-sessions.d.ts.map +0 -1
  256. package/dist/history/actions/list-sessions.js.map +0 -1
  257. package/dist/history/actions/reconcile-count.d.ts.map +0 -1
  258. package/dist/history/actions/reconcile-count.js.map +0 -1
  259. package/dist/history/chat-message-history.d.ts.map +0 -1
  260. package/dist/history/chat-message-history.js.map +0 -1
  261. package/dist/history/internal/append-saga.d.ts +0 -20
  262. package/dist/history/internal/append-saga.d.ts.map +0 -1
  263. package/dist/history/internal/append-saga.js +0 -35
  264. package/dist/history/internal/append-saga.js.map +0 -1
  265. package/dist/history/internal/compensation.d.ts +0 -21
  266. package/dist/history/internal/compensation.d.ts.map +0 -1
  267. package/dist/history/internal/compensation.js +0 -84
  268. package/dist/history/internal/compensation.js.map +0 -1
  269. package/dist/history/internal/item-mapper.d.ts +0 -12
  270. package/dist/history/internal/item-mapper.d.ts.map +0 -1
  271. package/dist/history/internal/item-mapper.js +0 -33
  272. package/dist/history/internal/item-mapper.js.map +0 -1
  273. package/dist/history/internal/keys.d.ts +0 -17
  274. package/dist/history/internal/keys.d.ts.map +0 -1
  275. package/dist/history/internal/keys.js +0 -49
  276. package/dist/history/internal/keys.js.map +0 -1
  277. package/dist/history/internal/message-chunker.d.ts +0 -14
  278. package/dist/history/internal/message-chunker.d.ts.map +0 -1
  279. package/dist/history/internal/message-chunker.js +0 -68
  280. package/dist/history/internal/message-chunker.js.map +0 -1
  281. package/dist/history/internal/message-transaction.d.ts +0 -26
  282. package/dist/history/internal/message-transaction.d.ts.map +0 -1
  283. package/dist/history/internal/message-transaction.js +0 -60
  284. package/dist/history/internal/message-transaction.js.map +0 -1
  285. package/dist/history/internal/query.d.ts +0 -10
  286. package/dist/history/internal/query.d.ts.map +0 -1
  287. package/dist/history/internal/query.js +0 -31
  288. package/dist/history/internal/query.js.map +0 -1
  289. package/dist/history/internal/session-count.d.ts +0 -41
  290. package/dist/history/internal/session-count.d.ts.map +0 -1
  291. package/dist/history/internal/session-count.js +0 -109
  292. package/dist/history/internal/session-count.js.map +0 -1
  293. package/dist/history/internal/session-title.d.ts +0 -20
  294. package/dist/history/internal/session-title.d.ts.map +0 -1
  295. package/dist/history/internal/session-title.js +0 -44
  296. package/dist/history/internal/session-title.js.map +0 -1
  297. package/dist/history/internal/session-update.d.ts +0 -28
  298. package/dist/history/internal/session-update.d.ts.map +0 -1
  299. package/dist/history/internal/session-update.js +0 -70
  300. package/dist/history/internal/session-update.js.map +0 -1
  301. package/dist/history/internal/setup.d.ts.map +0 -1
  302. package/dist/history/internal/setup.js.map +0 -1
  303. package/dist/history/internal/title-generator.d.ts +0 -13
  304. package/dist/history/internal/title-generator.d.ts.map +0 -1
  305. package/dist/history/internal/title-generator.js +0 -25
  306. package/dist/history/internal/title-generator.js.map +0 -1
  307. package/dist/history/internal/ttl-anchor.d.ts +0 -25
  308. package/dist/history/internal/ttl-anchor.d.ts.map +0 -1
  309. package/dist/history/internal/ttl-anchor.js +0 -38
  310. package/dist/history/internal/ttl-anchor.js.map +0 -1
  311. package/dist/history/internal/validation.d.ts +0 -9
  312. package/dist/history/internal/validation.d.ts.map +0 -1
  313. package/dist/history/internal/validation.js +0 -16
  314. package/dist/history/internal/validation.js.map +0 -1
  315. package/dist/history/session-adapter.d.ts.map +0 -1
  316. package/dist/history/session-adapter.js.map +0 -1
  317. package/dist/history/types.d.ts.map +0 -1
  318. package/dist/history/types.js.map +0 -1
  319. package/dist/index.d.ts.map +0 -1
  320. package/dist/index.js.map +0 -1
  321. package/dist/shared/clock.d.ts.map +0 -1
  322. package/dist/shared/clock.js.map +0 -1
  323. package/dist/shared/codec/codec.d.ts.map +0 -1
  324. package/dist/shared/codec/codec.js.map +0 -1
  325. package/dist/shared/codec/compression.d.ts.map +0 -1
  326. package/dist/shared/codec/compression.js.map +0 -1
  327. package/dist/shared/codec/descriptor-keys.d.ts +0 -4
  328. package/dist/shared/codec/descriptor-keys.d.ts.map +0 -1
  329. package/dist/shared/codec/descriptor-keys.js +0 -14
  330. package/dist/shared/codec/descriptor-keys.js.map +0 -1
  331. package/dist/shared/codec/json-serde.d.ts.map +0 -1
  332. package/dist/shared/codec/json-serde.js.map +0 -1
  333. package/dist/shared/codec/s3/client.d.ts.map +0 -1
  334. package/dist/shared/codec/s3/client.js.map +0 -1
  335. package/dist/shared/codec/s3/config.d.ts.map +0 -1
  336. package/dist/shared/codec/s3/config.js.map +0 -1
  337. package/dist/shared/codec/s3/delete.d.ts +0 -8
  338. package/dist/shared/codec/s3/delete.d.ts.map +0 -1
  339. package/dist/shared/codec/s3/delete.js +0 -29
  340. package/dist/shared/codec/s3/delete.js.map +0 -1
  341. package/dist/shared/codec/s3/lifecycle.d.ts.map +0 -1
  342. package/dist/shared/codec/s3/lifecycle.js.map +0 -1
  343. package/dist/shared/codec/s3/offloader.d.ts.map +0 -1
  344. package/dist/shared/codec/s3/offloader.js.map +0 -1
  345. package/dist/shared/codec/s3/orphans.d.ts +0 -18
  346. package/dist/shared/codec/s3/orphans.d.ts.map +0 -1
  347. package/dist/shared/codec/s3/orphans.js +0 -58
  348. package/dist/shared/codec/s3/orphans.js.map +0 -1
  349. package/dist/shared/codec/s3/read-write.d.ts +0 -14
  350. package/dist/shared/codec/s3/read-write.d.ts.map +0 -1
  351. package/dist/shared/codec/s3/read-write.js +0 -43
  352. package/dist/shared/codec/s3/read-write.js.map +0 -1
  353. package/dist/shared/codec/s3/retry.d.ts +0 -5
  354. package/dist/shared/codec/s3/retry.d.ts.map +0 -1
  355. package/dist/shared/codec/s3/retry.js +0 -25
  356. package/dist/shared/codec/s3/retry.js.map +0 -1
  357. package/dist/shared/constants.d.ts +0 -64
  358. package/dist/shared/constants.d.ts.map +0 -1
  359. package/dist/shared/constants.js +0 -67
  360. package/dist/shared/constants.js.map +0 -1
  361. package/dist/shared/dynamodb/backoff.d.ts +0 -15
  362. package/dist/shared/dynamodb/backoff.d.ts.map +0 -1
  363. package/dist/shared/dynamodb/backoff.js +0 -48
  364. package/dist/shared/dynamodb/backoff.js.map +0 -1
  365. package/dist/shared/dynamodb/batch-write.d.ts.map +0 -1
  366. package/dist/shared/dynamodb/batch-write.js.map +0 -1
  367. package/dist/shared/dynamodb/cancellation.d.ts.map +0 -1
  368. package/dist/shared/dynamodb/cancellation.js.map +0 -1
  369. package/dist/shared/dynamodb/client.d.ts.map +0 -1
  370. package/dist/shared/dynamodb/client.js.map +0 -1
  371. package/dist/shared/dynamodb/conditional-put.d.ts +0 -51
  372. package/dist/shared/dynamodb/conditional-put.d.ts.map +0 -1
  373. package/dist/shared/dynamodb/conditional-put.js +0 -59
  374. package/dist/shared/dynamodb/conditional-put.js.map +0 -1
  375. package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -19
  376. package/dist/shared/dynamodb/drain-unprocessed.d.ts.map +0 -1
  377. package/dist/shared/dynamodb/drain-unprocessed.js +0 -44
  378. package/dist/shared/dynamodb/drain-unprocessed.js.map +0 -1
  379. package/dist/shared/dynamodb/paginate-core.d.ts +0 -22
  380. package/dist/shared/dynamodb/paginate-core.d.ts.map +0 -1
  381. package/dist/shared/dynamodb/paginate-core.js +0 -52
  382. package/dist/shared/dynamodb/paginate-core.js.map +0 -1
  383. package/dist/shared/dynamodb/paginate.d.ts.map +0 -1
  384. package/dist/shared/dynamodb/paginate.js.map +0 -1
  385. package/dist/shared/dynamodb/partition-delete.d.ts.map +0 -1
  386. package/dist/shared/dynamodb/partition-delete.js.map +0 -1
  387. package/dist/shared/dynamodb/retry-classifier.d.ts +0 -9
  388. package/dist/shared/dynamodb/retry-classifier.d.ts.map +0 -1
  389. package/dist/shared/dynamodb/retry-classifier.js +0 -87
  390. package/dist/shared/dynamodb/retry-classifier.js.map +0 -1
  391. package/dist/shared/dynamodb/retry.d.ts.map +0 -1
  392. package/dist/shared/dynamodb/retry.js.map +0 -1
  393. package/dist/shared/dynamodb/scan.d.ts +0 -15
  394. package/dist/shared/dynamodb/scan.d.ts.map +0 -1
  395. package/dist/shared/dynamodb/scan.js +0 -20
  396. package/dist/shared/dynamodb/scan.js.map +0 -1
  397. package/dist/shared/dynamodb/types.d.ts +0 -24
  398. package/dist/shared/dynamodb/types.d.ts.map +0 -1
  399. package/dist/shared/dynamodb/types.js +0 -3
  400. package/dist/shared/dynamodb/types.js.map +0 -1
  401. package/dist/shared/errors/base-error.d.ts.map +0 -1
  402. package/dist/shared/errors/base-error.js.map +0 -1
  403. package/dist/shared/errors/error-code.d.ts.map +0 -1
  404. package/dist/shared/errors/error-code.js.map +0 -1
  405. package/dist/shared/errors/errors.d.ts.map +0 -1
  406. package/dist/shared/errors/errors.js.map +0 -1
  407. package/dist/shared/errors/wrap-error.d.ts +0 -16
  408. package/dist/shared/errors/wrap-error.d.ts.map +0 -1
  409. package/dist/shared/errors/wrap-error.js +0 -30
  410. package/dist/shared/errors/wrap-error.js.map +0 -1
  411. package/dist/shared/logging/logger.d.ts.map +0 -1
  412. package/dist/shared/logging/logger.js.map +0 -1
  413. package/dist/shared/logging/redaction-walk.d.ts +0 -23
  414. package/dist/shared/logging/redaction-walk.d.ts.map +0 -1
  415. package/dist/shared/logging/redaction-walk.js +0 -92
  416. package/dist/shared/logging/redaction-walk.js.map +0 -1
  417. package/dist/shared/logging/redaction.d.ts.map +0 -1
  418. package/dist/shared/logging/redaction.js.map +0 -1
  419. package/dist/shared/logging/secret-patterns.d.ts.map +0 -1
  420. package/dist/shared/logging/secret-patterns.js.map +0 -1
  421. package/dist/shared/options.d.ts.map +0 -1
  422. package/dist/shared/options.js.map +0 -1
  423. package/dist/shared/ulid.d.ts.map +0 -1
  424. package/dist/shared/ulid.js.map +0 -1
  425. package/dist/shared/validation/primitives.d.ts.map +0 -1
  426. package/dist/shared/validation/primitives.js.map +0 -1
  427. package/dist/shared/validation/ttl.d.ts.map +0 -1
  428. package/dist/shared/validation/ttl.js.map +0 -1
  429. package/dist/store/actions/get.d.ts +0 -5
  430. package/dist/store/actions/get.d.ts.map +0 -1
  431. package/dist/store/actions/get.js +0 -35
  432. package/dist/store/actions/get.js.map +0 -1
  433. package/dist/store/actions/list-namespaces.d.ts.map +0 -1
  434. package/dist/store/actions/list-namespaces.js.map +0 -1
  435. package/dist/store/actions/put.d.ts.map +0 -1
  436. package/dist/store/actions/put.js.map +0 -1
  437. package/dist/store/actions/reconcile-vector-index.d.ts.map +0 -1
  438. package/dist/store/actions/reconcile-vector-index.js.map +0 -1
  439. package/dist/store/actions/search.d.ts.map +0 -1
  440. package/dist/store/actions/search.js.map +0 -1
  441. package/dist/store/internal/backend-search.d.ts +0 -5
  442. package/dist/store/internal/backend-search.d.ts.map +0 -1
  443. package/dist/store/internal/backend-search.js +0 -68
  444. package/dist/store/internal/backend-search.js.map +0 -1
  445. package/dist/store/internal/filter.d.ts.map +0 -1
  446. package/dist/store/internal/filter.js.map +0 -1
  447. package/dist/store/internal/index-reconcile.d.ts +0 -22
  448. package/dist/store/internal/index-reconcile.d.ts.map +0 -1
  449. package/dist/store/internal/index-reconcile.js +0 -105
  450. package/dist/store/internal/index-reconcile.js.map +0 -1
  451. package/dist/store/internal/index-sync.d.ts +0 -11
  452. package/dist/store/internal/index-sync.d.ts.map +0 -1
  453. package/dist/store/internal/index-sync.js +0 -26
  454. package/dist/store/internal/index-sync.js.map +0 -1
  455. package/dist/store/internal/item-mapper.d.ts +0 -25
  456. package/dist/store/internal/item-mapper.d.ts.map +0 -1
  457. package/dist/store/internal/item-mapper.js +0 -53
  458. package/dist/store/internal/item-mapper.js.map +0 -1
  459. package/dist/store/internal/keys.d.ts +0 -18
  460. package/dist/store/internal/keys.d.ts.map +0 -1
  461. package/dist/store/internal/keys.js +0 -42
  462. package/dist/store/internal/keys.js.map +0 -1
  463. package/dist/store/internal/namespace-match.d.ts +0 -12
  464. package/dist/store/internal/namespace-match.d.ts.map +0 -1
  465. package/dist/store/internal/namespace-match.js +0 -41
  466. package/dist/store/internal/namespace-match.js.map +0 -1
  467. package/dist/store/internal/overwrite-swap.d.ts +0 -33
  468. package/dist/store/internal/overwrite-swap.d.ts.map +0 -1
  469. package/dist/store/internal/overwrite-swap.js +0 -62
  470. package/dist/store/internal/overwrite-swap.js.map +0 -1
  471. package/dist/store/internal/persist.d.ts +0 -27
  472. package/dist/store/internal/persist.d.ts.map +0 -1
  473. package/dist/store/internal/persist.js +0 -59
  474. package/dist/store/internal/persist.js.map +0 -1
  475. package/dist/store/internal/query.d.ts +0 -6
  476. package/dist/store/internal/query.d.ts.map +0 -1
  477. package/dist/store/internal/query.js +0 -32
  478. package/dist/store/internal/query.js.map +0 -1
  479. package/dist/store/internal/ranker.d.ts +0 -13
  480. package/dist/store/internal/ranker.d.ts.map +0 -1
  481. package/dist/store/internal/ranker.js +0 -31
  482. package/dist/store/internal/ranker.js.map +0 -1
  483. package/dist/store/internal/read-existing.d.ts +0 -19
  484. package/dist/store/internal/read-existing.d.ts.map +0 -1
  485. package/dist/store/internal/read-existing.js +0 -29
  486. package/dist/store/internal/read-existing.js.map +0 -1
  487. package/dist/store/internal/score-direction.d.ts +0 -32
  488. package/dist/store/internal/score-direction.d.ts.map +0 -1
  489. package/dist/store/internal/score-direction.js +0 -39
  490. package/dist/store/internal/score-direction.js.map +0 -1
  491. package/dist/store/internal/search-filter.d.ts +0 -4
  492. package/dist/store/internal/search-filter.d.ts.map +0 -1
  493. package/dist/store/internal/search-filter.js +0 -11
  494. package/dist/store/internal/search-filter.js.map +0 -1
  495. package/dist/store/internal/semantic-search.d.ts.map +0 -1
  496. package/dist/store/internal/semantic-search.js.map +0 -1
  497. package/dist/store/internal/setup.d.ts.map +0 -1
  498. package/dist/store/internal/setup.js.map +0 -1
  499. package/dist/store/internal/validation.d.ts +0 -13
  500. package/dist/store/internal/validation.d.ts.map +0 -1
  501. package/dist/store/internal/validation.js +0 -35
  502. package/dist/store/internal/validation.js.map +0 -1
  503. package/dist/store/internal/write-verify.d.ts +0 -37
  504. package/dist/store/internal/write-verify.d.ts.map +0 -1
  505. package/dist/store/internal/write-verify.js +0 -68
  506. package/dist/store/internal/write-verify.js.map +0 -1
  507. package/dist/store/store.d.ts.map +0 -1
  508. package/dist/store/store.js.map +0 -1
  509. package/dist/store/types.d.ts.map +0 -1
  510. package/dist/store/types.js.map +0 -1
  511. package/dist/store/vector-backend.d.ts.map +0 -1
  512. package/dist/store/vector-backend.js.map +0 -1
@@ -1,72 +1,363 @@
1
1
  "use strict";
2
+ /**
3
+ * Hides which public methods share one guarded dispatch, and which do not.
4
+ *
5
+ * `get`, `put`, `delete`, `listNamespaces` and `batch` parse their arguments
6
+ * and hand the parsed operations to the same batch runner and dispatch, so
7
+ * the five answer and refuse alike. `search` guards the same way but calls
8
+ * its own action directly, to carry a signal that `batch` cannot;
9
+ * `reconcileVectorIndex` and `ensureS3LifecycleRule` guard directly too,
10
+ * since neither is a batchable store operation. Each asynchronous method
11
+ * declared here is also the error boundary (record 13); `stop` and `destroy`
12
+ * are the synchronous exceptions, releasing what the store owns through its
13
+ * shell, and the inherited `start()` no-op — declared by `BaseStore`, not
14
+ * overridden here — is neither guarded nor routed through any of this.
15
+ */
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
17
  exports.DynamoDBStore = void 0;
4
18
  const langgraph_checkpoint_1 = require("@langchain/langgraph-checkpoint");
5
- const ttl_1 = require("../shared/validation/ttl");
6
- const get_1 = require("./actions/get");
19
+ const boundary_1 = require("../shared/errors/boundary");
20
+ const collaborators_1 = require("../shared/validation/collaborators");
21
+ const option_shape_1 = require("../shared/validation/option-shape");
7
22
  const list_namespaces_1 = require("./actions/list-namespaces");
8
23
  const put_1 = require("./actions/put");
9
24
  const reconcile_vector_index_1 = require("./actions/reconcile-vector-index");
10
25
  const search_1 = require("./actions/search");
26
+ const batch_plan_1 = require("./internal/batch-plan");
27
+ const get_item_1 = require("./internal/get-item");
28
+ const parse_1 = require("./internal/parse");
11
29
  const setup_1 = require("./internal/setup");
12
30
  /**
13
31
  * DynamoDB-backed LangGraph store for long-term memory with optional semantic
14
- * search. A thin orchestrator: the base class's get/put/search/delete/
15
- * listNamespaces all funnel into {@link batch}, which dispatches each operation.
32
+ * search. `get`, `put`, `delete` and `listNamespaces` answer and refuse exactly
33
+ * as the same operation inside a {@link batch} does, and `put` keeps upstream's
34
+ * own namespace rules. Every public method rejects only with this library's
35
+ * error.
16
36
  */
17
37
  class DynamoDBStore extends langgraph_checkpoint_1.BaseStore {
18
38
  context;
19
- ownsClient;
20
- ddbClient;
39
+ shell;
40
+ /**
41
+ * Accepts: `options` — validated here, so a misconfiguration surfaces at
42
+ * construction rather than on the first request. A `vectorBackend` without an
43
+ * `index` is refused outright, since every put would then clear the item's
44
+ * vector and every query would answer unranked.
45
+ *
46
+ * Returns: a store that owns the client it built, or borrows the one it was
47
+ * given.
48
+ *
49
+ * Throws: `VALIDATION` naming the offending option.
50
+ *
51
+ * Guarantees: no I/O. Constructing a store issues no request.
52
+ */
21
53
  constructor(options) {
22
54
  super();
23
55
  const setup = (0, setup_1.setUpStore)(options);
24
56
  this.context = setup.context;
25
- this.ownsClient = setup.ownsClient;
26
- this.ddbClient = setup.ddbClient;
57
+ this.shell = setup.shell;
27
58
  }
28
- dispatch(operation) {
29
- if ('namespacePrefix' in operation)
30
- return (0, search_1.searchItems)(this.context, operation);
31
- if ('value' in operation)
32
- return (0, put_1.putItem)(this.context, operation);
33
- if ('key' in operation)
34
- return (0, get_1.getItem)(this.context, operation.namespace, operation.key);
35
- return (0, list_namespaces_1.listNamespaces)(this.context, operation);
59
+ /**
60
+ * One operation's result: the item for a get, the page for a search, the
61
+ * namespaces for a listing, and `null` for a put or a delete — the value the
62
+ * reference store's `batch` answers a put or a delete with. The kind was
63
+ * decided once, by the parser that built `operation`, so this switches on it
64
+ * instead of asking the operation's shape again.
65
+ */
66
+ async dispatch(operation) {
67
+ switch (operation.kind) {
68
+ case 'search':
69
+ return (0, search_1.searchItems)(this.context, operation);
70
+ case 'put':
71
+ case 'delete':
72
+ await (0, put_1.putItem)(this.context, operation);
73
+ return null;
74
+ case 'get':
75
+ return (0, get_item_1.getItem)(this.context, operation.address);
76
+ case 'list':
77
+ return (0, list_namespaces_1.listNamespaces)(this.context, operation);
78
+ }
36
79
  }
80
+ /**
81
+ * Run a batch of already-parsed operations, with no boundary of its own.
82
+ *
83
+ * The guard is the caller's method, not this: a nested `guardPublic` keeps
84
+ * the brand the *inner* one assigned, so routing `get`, `put`, `delete` and
85
+ * `listNamespaces` through the public {@link batch} reported all four as
86
+ * `store.batch` and left an operator counting AWS failures by
87
+ * `context.operation` unable to tell them apart.
88
+ */
89
+ async execute(operations) {
90
+ return (0, batch_plan_1.runBatch)(operations, (operation) => this.dispatch(operation), this.context.readConcurrency);
91
+ }
92
+ /**
93
+ * Execute a batch of operations and return their results in operation
94
+ * order.
95
+ *
96
+ * Accepts: `operations` — an array of operation objects, in the order they
97
+ * are to be observed; an empty batch does nothing and returns `[]`. Every
98
+ * operation is checked before any of them runs. A put carrying a `null`
99
+ * value deletes its item. `get`, `put`, `delete` and `listNamespaces` check
100
+ * their own call by the same rules and run the same dispatch, as upstream's
101
+ * implementations do, so the field a malformed call names is the same
102
+ * whichever of the five reached it — `put` alone adds what is about the
103
+ * method: upstream's own `.` and `"langgraph"` namespace rules, and a refusal
104
+ * of a `null` value, since `delete` is how an item is removed. Each of the
105
+ * four keeps its own name in `context.operation`, so a failure says which
106
+ * method the caller called rather than reporting all five alike.
107
+ *
108
+ * Returns: the results in operation order — an item or `null` for a get,
109
+ * matches for a search, namespaces for a listing, `null` for a put or a
110
+ * delete, as the reference store answers them.
111
+ *
112
+ * Throws: `VALIDATION`, raised for every operation before any operation
113
+ * runs, naming `operations` for a value that is not an array or an entry that
114
+ * is not an object; `namespace`, `namespace element`, `key` or `sortKey` for an
115
+ * item address; `value` or `index` for a put; `namespacePrefix`,
116
+ * `namespacePrefix element`, `filter`, `query`, `offset` or `limit` for a
117
+ * search; `offset`, `limit`, `maxDepth`, `matchConditions`, `prefix`,
118
+ * `prefix element`, `suffix` or `suffix element` for a listing; and later,
119
+ * from a running operation, `value` for one JSON cannot represent,
120
+ * `maxSearchCandidates` or `index.dims`. A classified AWS failure; `RETRY_EXHAUSTED`;
121
+ * `RESULT_TRUNCATED` from a search or a listing that reads past
122
+ * `maxScanItems`. One failing operation rejects the whole batch.
123
+ *
124
+ * Guarantees: the order the caller wrote is the order the caller observes — a
125
+ * get after a put of the same item sees it, a get before one does not, and a
126
+ * search sees every write that precedes it and none that follow. Operations
127
+ * addressing different items run concurrently, so a batch of ten gets costs
128
+ * about one round trip rather than ten.
129
+ */
37
130
  async batch(operations) {
38
- const results = [];
39
- for (const operation of operations) {
40
- results.push(await this.dispatch(operation));
41
- }
42
- return results;
131
+ return (0, boundary_1.guardPublic)('store.batch', async () => {
132
+ const results = await this.execute((0, parse_1.parseOperations)(operations));
133
+ return results;
134
+ });
135
+ }
136
+ /**
137
+ * Retrieve one item. Overrides the base implementation so the call is
138
+ * guarded here; the operation is the one upstream builds.
139
+ *
140
+ * Accepts: `namespace` — at least one label, each a non-blank identifier of
141
+ * at most 256 bytes, free of `#` and control characters and well-formed
142
+ * UTF-16. A `.` and a `"langgraph"` root are accepted, as the reference store
143
+ * accepts them. `key` — an identifier by the same rules. Together they may
144
+ * compose a sort key of at most 1024 bytes. **No signal**: upstream's
145
+ * `BaseStore.get` takes no parameter for one, so the S3 download an
146
+ * offloaded value costs is not cancellable here. `store.search` is the read
147
+ * that takes one.
148
+ *
149
+ * Returns: the item, or `null` for one that does not exist or has expired.
150
+ *
151
+ * Throws: `VALIDATION` naming `namespace`, `namespace element`, `key` or
152
+ * `sortKey`, and — from the row rather than from the call — `descriptor` for
153
+ * a payload descriptor no reader could make sense of, `s3` for an offloaded
154
+ * row with no offloader configured, `s3Key` for a row addressing an object
155
+ * outside its own path, or `serde` for a payload the configured serializer
156
+ * refuses to reconstruct; `FORMAT_UNSUPPORTED` for an item, or its payload,
157
+ * written by a newer version, which is reported rather than hidden as
158
+ * absent; `PAYLOAD_CORRUPT` for a payload that is no longer the form its row
159
+ * declares; `S3_OFFLOAD_FAILED` for an offloaded payload that cannot be
160
+ * downloaded; `COMPRESSION_LIMIT` for one whose decompressed size would pass
161
+ * the cap; a classified AWS failure; `RETRY_EXHAUSTED`. Not `ABORTED`: there is no
162
+ * signal to fire.
163
+ */
164
+ async get(namespace, key) {
165
+ return (0, boundary_1.guardPublic)('store.get', async () => {
166
+ const [item] = await this.execute([
167
+ { kind: 'get', address: (0, parse_1.parseStoreAddress)(namespace, key) },
168
+ ]);
169
+ return item;
170
+ });
171
+ }
172
+ /**
173
+ * Store or replace one item. Overrides the base implementation, whose own
174
+ * namespace check threw an error this package does not brand. The value and
175
+ * index are checked by {@link batch}, so LangGraph's own puts hold them too.
176
+ *
177
+ * Accepts: `namespace` and `key` — as {@link get}, plus upstream
178
+ * `BaseStore.put`'s own two rules, which only this method applies: no label
179
+ * holding `.`, and a root other than `"langgraph"`. `value` — an object; `null`
180
+ * is refused, since {@link delete} is how an item is removed. `index` —
181
+ * absent uses the store's configuration, `false` indexes nothing, and field
182
+ * paths override it for this put.
183
+ *
184
+ * Returns: nothing.
185
+ *
186
+ * Throws: `VALIDATION` naming `namespace`, `namespace element`, `key`,
187
+ * `sortKey`, `value` or `index`; a classified AWS failure; `RETRY_EXHAUSTED`.
188
+ */
189
+ async put(namespace, key, value, index) {
190
+ return (0, boundary_1.guardPublic)('store.put', async () => {
191
+ await this.execute([(0, parse_1.parsePutArguments)(namespace, key, value, index)]);
192
+ });
193
+ }
194
+ /**
195
+ * Remove one item, as upstream does: a put operation carrying `null`.
196
+ *
197
+ * Accepts: `namespace` and `key` — as {@link get}.
198
+ *
199
+ * Returns: nothing. Deleting an item that is not there is not an error —
200
+ * which now describes the outcome rather than the round trip, since the row
201
+ * is read before it is removed.
202
+ *
203
+ * Throws: `VALIDATION` naming `namespace`, `namespace element`, `key` or
204
+ * `sortKey`; a classified AWS failure; `RETRY_EXHAUSTED`. The set of types is
205
+ * unchanged, but the occasions are not: that pre-read is a request like any
206
+ * other, so a delete of a key with **no row** can now fail where it always
207
+ * succeeded. Nothing has been written when it does — no row removed, no
208
+ * object released, no vector touched. A delete the row's revision turns away
209
+ * never reaches a caller at all: it is re-pinned on the row the rejection
210
+ * returned and re-issued, because refusing to remove a row a concurrent put
211
+ * replaced is what stops this call erasing that put.
212
+ *
213
+ * Guarantees: the item is gone, was already gone, or — when three attempts in
214
+ * a row are each turned away by a write that landed since the observation
215
+ * that attempt pinned — is still there and was left alone. That last case
216
+ * **resolves**, logging one `warn` naming the namespace, the key and the
217
+ * attempt count, where the reference store always removes the item;
218
+ * throwing instead would add a failure mode to an interleaving that succeeds
219
+ * today, which every caller deleting in a `finally` would have to handle.
220
+ * Re-run once the key is quiescent. Nothing is released on that path, which
221
+ * is correct: a live row still names the object.
222
+ */
223
+ async delete(namespace, key) {
224
+ return (0, boundary_1.guardPublic)('store.delete', async () => {
225
+ await this.execute([{ kind: 'delete', address: (0, parse_1.parseStoreAddress)(namespace, key) }]);
226
+ });
227
+ }
228
+ /**
229
+ * List the distinct namespaces, sorted, optionally filtered and truncated.
230
+ *
231
+ * Accepts: `options.prefix`/`suffix` — labels a namespace can hold, where
232
+ * `'*'` matches any one label. `options.maxDepth` — at least 1.
233
+ * `options.limit` — an integer from 0 to `MAX_PAGE_LIMIT` (10,000), defaulting
234
+ * to 100, where `0` returns an empty listing without reading the table.
235
+ * `options.offset` — a non-negative integer, defaulting to 0.
236
+ *
237
+ * Returns: at most `limit` namespaces from `offset`.
238
+ *
239
+ * Throws: `VALIDATION` naming `options`, `options.<key>`, `prefix`,
240
+ * `prefix element`, `suffix`, `suffix element`, `maxDepth`, `limit` or
241
+ * `offset`; `RESULT_TRUNCATED` past `maxScanItems`; `FORMAT_UNSUPPORTED`
242
+ * for an item written by a newer version; a classified AWS failure.
243
+ */
244
+ async listNamespaces(options = {}) {
245
+ return (0, boundary_1.guardPublic)('store.listNamespaces', async () => {
246
+ const [namespaces] = await this.execute([(0, parse_1.parseListNamespacesOptions)(options)]);
247
+ return namespaces;
248
+ });
249
+ }
250
+ /**
251
+ * Search with optional cancellation. Overrides the base implementation, which
252
+ * routes through {@link batch} and therefore cannot carry a signal.
253
+ *
254
+ * Accepts: `namespacePrefix` — labels a namespace can hold; empty spans the
255
+ * whole table. `options.query` —
256
+ * absent or empty ranks nothing. `options.filter` — metadata equality on the
257
+ * item's value. `options.offset` — a non-negative integer, defaulting to 0.
258
+ * `options.limit` — an integer from 0 to `MAX_PAGE_LIMIT` (10,000), defaulting
259
+ * to 10, where `0` returns an empty page without a read or an embedding.
260
+ * `options.signal` — aborts the reads.
261
+ *
262
+ * Returns: at most `limit` items from `offset`, each carrying a `score` when
263
+ * a query and an index are configured.
264
+ *
265
+ * Throws: `VALIDATION` naming `namespacePrefix`, `namespacePrefix element`,
266
+ * `filter`, `query`, `offset`, `limit`, `maxSearchCandidates`, `index.dims`,
267
+ * `signal`, or
268
+ * `options.<key>` for a key this package does not read; `ABORTED`;
269
+ * `FORMAT_UNSUPPORTED` for an item, or its payload, written by a newer
270
+ * version — a search reads rows it did not name, so one such row anywhere in
271
+ * the prefix it walks reports rather than being passed over; a classified AWS failure.
272
+ *
273
+ * Guarantees: a plain search stops reading once `offset + limit` matches are
274
+ * in hand; a query ranks in-process up to `maxSearchCandidates`, or through
275
+ * the `vectorBackend` when one is configured.
276
+ */
277
+ async search(namespacePrefix, options = {}) {
278
+ return (0, boundary_1.guardPublic)('store.search', () => {
279
+ const prefix = (0, parse_1.parseNamespacePrefix)(namespacePrefix, 'namespacePrefix');
280
+ (0, option_shape_1.assertShape)(options, setup_1.STORE_SEARCH_KEYS, 'options');
281
+ (0, collaborators_1.assertSignalLike)(options.signal);
282
+ const { signal, ...rest } = options;
283
+ return (0, search_1.searchItems)(this.context, (0, parse_1.parseSearch)(prefix, rest), signal);
284
+ });
43
285
  }
44
286
  /**
45
287
  * Repair the configured vector backend against the canonical items under
46
- * `namespacePrefix`. A maintenance tool; see {@link reconcileVectorIndex}.
288
+ * `namespacePrefix`. A maintenance tool; see the action of the same name.
289
+ *
290
+ * Accepts: `namespacePrefix` — a non-empty namespace. `options.signal` —
291
+ * aborts between pages.
292
+ *
293
+ * Returns: how many vectors were upserted and how many pruned.
294
+ *
295
+ * Throws: `VALIDATION` without both an `index` and a `vectorBackend`, for
296
+ * an empty prefix, for an invalid `signal`, or for `options.<key>` naming a
297
+ * key this package does not read; `RESULT_TRUNCATED` past `maxScanItems`;
298
+ * `FORMAT_UNSUPPORTED` for an item, or its payload, written by a newer
299
+ * version — repairing a backend from a view of the prefix that silently
300
+ * omitted such a row would prune the vectors of items that are still there;
301
+ * a classified AWS failure.
302
+ *
303
+ * Guarantees: DynamoDB is never written — only the backend is repaired — and
304
+ * a vector is deleted only on evidence that its item is gone.
305
+ */
306
+ reconcileVectorIndex(namespacePrefix, options) {
307
+ return (0, boundary_1.guardPublic)('store.reconcileVectorIndex', () => {
308
+ (0, collaborators_1.assertCancelOptions)(options);
309
+ return (0, reconcile_vector_index_1.reconcileVectorIndex)(this.context, namespacePrefix, options);
310
+ });
311
+ }
312
+ /**
313
+ * LangGraph's lifecycle hook.
314
+ *
315
+ * Accepts: nothing.
316
+ *
317
+ * Returns: nothing. A host that manages stores through the upstream
318
+ * `BaseStore` interface calls `stop()`, so it releases the owned client
319
+ * exactly like {@link destroy}, which stays the explicit API. Both are
320
+ * idempotent.
321
+ *
322
+ * Throws: exactly what {@link destroy} throws, since it is that call.
47
323
  */
48
- reconcileVectorIndex(namespacePrefix) {
49
- return (0, reconcile_vector_index_1.reconcileVectorIndex)(this.context, namespacePrefix);
324
+ stop() {
325
+ this.destroy();
50
326
  }
51
- /** Release owned resources (the underlying client and any S3 client). */
327
+ /**
328
+ * Release owned resources.
329
+ *
330
+ * Accepts: nothing.
331
+ *
332
+ * Returns: nothing. Idempotent, and a no-op for a client the caller injected
333
+ * — that one is theirs to close.
334
+ *
335
+ * Throws: whatever a resource's own `destroy` raises — but only after every
336
+ * other one has been released, so a client that fails to close never strands
337
+ * the one behind it.
338
+ */
52
339
  destroy() {
53
- this.context.offloader?.destroy();
54
- if (this.ownsClient)
55
- this.ddbClient?.destroy();
340
+ this.shell.release();
56
341
  }
57
342
  /**
58
- * Best-effort provision an S3 lifecycle expiration rule matching the
59
- * configured TTL, so offloaded objects don't outlive their DynamoDB item
60
- * forever. No-ops when S3 offload or TTL isn't configured. Requires the
61
- * `s3:GetLifecycleConfiguration`/`s3:PutLifecycleConfiguration` bucket-level
62
- * permissions (broader than the object-level CRUD the rest of S3 offload
63
- * needs) — call this once during deployment/provisioning, not per-request.
343
+ * Provision an S3 lifecycle expiration rule matching the configured TTL, so
344
+ * offloaded objects don't outlive their DynamoDB item forever.
345
+ *
346
+ * Accepts: nothing; the rule follows the configured `s3` and `ttl`. A no-op
347
+ * without both.
348
+ *
349
+ * Returns: nothing. Installing a rule that is already there is a no-op too,
350
+ * so calling it on every deploy is safe.
351
+ *
352
+ * Throws: `VALIDATION` naming `s3.keyPrefix` on a rule-id collision;
353
+ * a classified AWS failure when the bucket's lifecycle cannot be read or written.
354
+ * @remarks Requires the bucket-level `s3:GetLifecycleConfiguration` /
355
+ * `s3:PutLifecycleConfiguration` permissions, broader than the object-level
356
+ * CRUD the rest of S3 offload needs — call it once during provisioning, not
357
+ * per request.
64
358
  */
65
359
  async ensureS3LifecycleRule() {
66
- if (!this.context.offloader || !this.context.ttl)
67
- return;
68
- await this.context.offloader.ensureLifecycleRule((0, ttl_1.resolveTtlDaysCeil)(this.context.ttl));
360
+ return (0, boundary_1.guardPublic)('store.ensureS3LifecycleRule', () => this.shell.ensureLifecycleRule());
69
361
  }
70
362
  }
71
363
  exports.DynamoDBStore = DynamoDBStore;
72
- //# sourceMappingURL=store.js.map
@@ -1,46 +1,96 @@
1
- import type { IndexConfig, SerializerProtocol } from '@langchain/langgraph-checkpoint';
2
- import type { PayloadDescriptor } from '../shared/codec/codec';
3
- import type { BaseAdapterOptions, CodecOptions } from '../shared/options';
4
- import type { VectorScoreDirection } from './internal/score-direction';
5
- import type { VectorBackend } from './vector-backend';
1
+ /**
2
+ * Hides the store's own option and result shapes, composed from building
3
+ * blocks declared elsewhere.
4
+ *
5
+ * `DynamoDBStoreOptions`, `SearchOptions`, `ListNamespacesOptions` and
6
+ * `VectorReconcileResult` are declared here. `DynamoDBStoreOptions` composes
7
+ * `BaseAdapterOptions` and `CodecOptions`, and `SearchOptions` composes
8
+ * `CancelOptions` — all three declared once in the shared options module, not
9
+ * copied here — plus `VectorBackend` and `VectorScoreDirection`, declared
10
+ * once in `vector-backend.ts`. Which keys each bag accepts, and the defaults
11
+ * filled in, are decided by the store's setup and parsers, so a caller can
12
+ * type what it builds without learning how it is checked.
13
+ */
14
+ import type { IndexConfig, SearchOperation, SerializerProtocol } from '@langchain/langgraph-checkpoint';
15
+ import type { BaseAdapterOptions, CancelOptions, CodecOptions } from '../shared/options';
16
+ import type { VectorBackend, VectorScoreDirection } from './vector-backend';
6
17
  /** Options for {@link DynamoDBStore}. */
7
18
  export type DynamoDBStoreOptions = BaseAdapterOptions & CodecOptions & {
8
- /** Optional semantic-search index configuration (embeddings + fields). */
19
+ /**
20
+ * Optional semantic-search index configuration (embeddings + fields).
21
+ *
22
+ * Without a `vectorBackend` the vectors live on the item itself, one per
23
+ * extracted path at roughly 10 bytes per dimension. They are not counted
24
+ * toward `s3.thresholdBytes` — offload decides on the payload alone — so a
25
+ * value near the threshold plus many vectors is the combination to watch
26
+ * against DynamoDB's 400 KB item limit; see that option's note.
27
+ */
9
28
  index?: IndexConfig;
10
- /** Optional serializer override (defaults to the JSON serializer). */
29
+ /**
30
+ * Optional serializer override. The default is the exported `JSON_SERDE`,
31
+ * plain JSON: what it stores is the JSON projection of a value, and the
32
+ * README's *Table schema* section tabulates where that differs from the
33
+ * value itself.
34
+ */
11
35
  serde?: SerializerProtocol;
12
36
  /** Optional external vector index; when set, similarity search delegates to it. */
13
37
  vectorBackend?: VectorBackend;
14
- /** Max candidates the in-DB ranker will score before erroring (default 1000). */
38
+ /**
39
+ * Max candidates a semantic search may hold in memory to rank, and the
40
+ * furthest a `vectorBackend` page may reach, before erroring (default
41
+ * 1000). It bounds this process's memory, not the corpus — a corpus larger
42
+ * than this belongs behind a `vectorBackend`.
43
+ */
15
44
  maxSearchCandidates?: number;
16
- /** Cap on items scanned into memory during a plain (non-semantic) search before ResultTruncatedError. Defaults to MAX_TOTAL_ITEMS_IN_MEMORY. */
45
+ /**
46
+ * Cap on rows read into memory by one search, namespace listing or
47
+ * reconcile before `RESULT_TRUNCATED`. Reaching it is an error, not a
48
+ * truncation: a partial answer is never returned as a complete one.
49
+ * Defaults to `MAX_TOTAL_ROWS_IN_MEMORY`.
50
+ */
17
51
  maxScanItems?: number;
18
52
  /**
19
53
  * Direction of the score a `vectorBackend` returns. `'relevance'` (the
20
54
  * default) forwards it unchanged; `'distance'` negates and re-sorts, so a
21
55
  * distance-native backend (S3 Vectors, FAISS L2, pgvector `<->`) satisfies
22
56
  * the higher-is-better contract without the caller wrapping it. Any other
23
- * value is rejected at construction with a `ValidationError` rather than
57
+ * value is rejected at construction with a `VALIDATION` error rather than
24
58
  * silently ranking one direction as the other.
25
59
  */
26
60
  vectorScoreDirection?: VectorScoreDirection;
27
61
  };
28
- /** The DynamoDB item backing a single stored value. */
29
- export interface StoreItemRecord {
30
- PK: string;
31
- SK: string;
32
- namespace: string[];
33
- key: string;
34
- value: PayloadDescriptor;
35
- createdAt: string;
36
- updatedAt: string;
37
- embedding?: number[];
38
- ttl?: number;
62
+ /**
63
+ * Options {@link DynamoDBStore.search} accepts: the metadata/paging fields of
64
+ * `SearchOperation` it exposes as its own parameter (`namespacePrefix` is a
65
+ * separate positional argument instead), plus cancellation.
66
+ */
67
+ export type SearchOptions = Pick<SearchOperation, 'filter' | 'limit' | 'offset' | 'query'> & CancelOptions;
68
+ /**
69
+ * Options {@link DynamoDBStore.listNamespaces} accepts: the object
70
+ * `BaseStore.listNamespaces` declares inline, with the same five optional
71
+ * fields, named so a caller can type the options it builds. A test pins it
72
+ * equal to upstream's parameter type.
73
+ */
74
+ export interface ListNamespacesOptions {
75
+ /** Only namespaces starting with these labels; `'*'` matches any one label. */
76
+ prefix?: string[];
77
+ /** Only namespaces ending with these labels; `'*'` matches any one label. */
78
+ suffix?: string[];
39
79
  /**
40
- * Revision token, rewritten on every put. Pins the compare-and-swap that
41
- * keeps two concurrent overwrites from both deleting the same superseded S3
42
- * object. Optional: rows written before 0.9.0 carry none.
80
+ * Truncate each namespace to at most this many labels, at least 1; the
81
+ * namespaces that truncation makes equal are listed once.
43
82
  */
44
- rev?: string;
83
+ maxDepth?: number;
84
+ /**
85
+ * How many namespaces to return, from 0 to `MAX_PAGE_LIMIT` (10,000);
86
+ * default 100. `0` returns an empty array without reading the table.
87
+ */
88
+ limit?: number;
89
+ /** How many namespaces to skip first, a non-negative integer; default 0. */
90
+ offset?: number;
91
+ }
92
+ /** Counts returned by {@link DynamoDBStore.reconcileVectorIndex}. */
93
+ export interface VectorReconcileResult {
94
+ upserted: number;
95
+ pruned: number;
45
96
  }
46
- //# sourceMappingURL=types.d.ts.map
@@ -1,3 +1,15 @@
1
1
  "use strict";
2
+ /**
3
+ * Hides the store's own option and result shapes, composed from building
4
+ * blocks declared elsewhere.
5
+ *
6
+ * `DynamoDBStoreOptions`, `SearchOptions`, `ListNamespacesOptions` and
7
+ * `VectorReconcileResult` are declared here. `DynamoDBStoreOptions` composes
8
+ * `BaseAdapterOptions` and `CodecOptions`, and `SearchOptions` composes
9
+ * `CancelOptions` — all three declared once in the shared options module, not
10
+ * copied here — plus `VectorBackend` and `VectorScoreDirection`, declared
11
+ * once in `vector-backend.ts`. Which keys each bag accepts, and the defaults
12
+ * filled in, are decided by the store's setup and parsers, so a caller can
13
+ * type what it builds without learning how it is checked.
14
+ */
2
15
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
@@ -1,3 +1,12 @@
1
+ /**
2
+ * Hides which vector index the store talks to.
3
+ *
4
+ * The store sees only `VectorBackend` — upsert, query, delete and an optional
5
+ * listing — with what it promises and requires stated per method, so any
6
+ * index that keeps those terms plugs in without the store changing. The table
7
+ * stays the truth: a backend may lag it and may score by distance, and every
8
+ * match is re-read before a caller sees it.
9
+ */
1
10
  /** A vector-similarity match returned by an external {@link VectorBackend}. */
2
11
  export interface VectorMatch {
3
12
  namespace: string[];
@@ -21,24 +30,75 @@ export interface VectorRef {
21
30
  namespace: string[];
22
31
  key: string;
23
32
  }
33
+ /** Which direction a {@link VectorBackend} reports its score in. */
34
+ export type VectorScoreDirection = 'relevance' | 'distance';
24
35
  /**
25
36
  * Pluggable vector index. When provided to the store, embeddings live here and
26
37
  * similarity search is delegated to it; DynamoDB still holds the canonical item.
38
+ *
39
+ * This is an interface you implement, so what the store promises and what it
40
+ * requires are both stated per method. Two properties hold throughout: the
41
+ * store writes DynamoDB first and syncs here afterwards, so the backend may lag
42
+ * the canonical item and `reconcileVectorIndex` exists to close that gap; and
43
+ * every result is re-read from DynamoDB before a caller sees it, so a stale
44
+ * entry costs a wasted read, never a wrong answer.
27
45
  */
28
46
  export interface VectorBackend {
47
+ /**
48
+ * Store one item's vector.
49
+ *
50
+ * Receives: a validated `namespace` and `key`, and a vector of the width
51
+ * `index.dims` declares. Called once per indexed put, after the item is
52
+ * committed, and again for every item of a `reconcileVectorIndex`.
53
+ *
54
+ * Must: replace any vector already held for that `(namespace, key)` —
55
+ * upserting the same pair repeatedly is normal and must not accumulate
56
+ * entries.
57
+ *
58
+ * May throw: a rejection is logged and swallowed on the put path (the item
59
+ * still stands) and propagates from a reconcile.
60
+ */
29
61
  upsert(namespace: string[], key: string, vector: number[]): Promise<void>;
30
62
  /**
31
- * Return up to `topK` matches under `namespacePrefix`, best first. Each
32
- * match's `score` must be a relevance, not a distance — see
33
- * {@link VectorMatch.score}.
63
+ * Return up to `topK` matches under `namespacePrefix`, best first.
64
+ *
65
+ * Receives: the same query vector width as `upsert`, and a `topK` the store
66
+ * raises — up to `maxSearchCandidates` — while its filter leaves the page
67
+ * short, so returning fewer than `topK` is read as "that is all there is".
68
+ *
69
+ * Must: order best-first, and score each match as a relevance, not a
70
+ * distance (see {@link VectorMatch.score}). Matches outside the prefix, and
71
+ * matches whose item has since been deleted, are dropped by the store rather
72
+ * than trusted — over-returning is safe, under-returning silently shortens
73
+ * the page.
34
74
  */
35
75
  query(namespacePrefix: string[], queryVector: number[], topK: number): Promise<VectorMatch[]>;
76
+ /**
77
+ * Drop one item's vector.
78
+ *
79
+ * Receives: the item's address. Called when the item is deleted, and also
80
+ * after any put that produced no vector — `index: false`, or a value with no
81
+ * indexable text — because the previous vector would otherwise keep matching
82
+ * an item that no longer has that text.
83
+ *
84
+ * Must: succeed for a key that holds no vector. That is the common case on
85
+ * the no-vector put path, and treating it as an error would warn on every
86
+ * such put.
87
+ */
36
88
  delete(namespace: string[], key: string): Promise<void>;
37
89
  /**
38
90
  * Optionally enumerate every stored vector under `namespacePrefix`. Enables
39
91
  * `reconcileVectorIndex` to prune vectors orphaned by a lost delete. Omit it
40
92
  * when the backend cannot enumerate — reconciliation then re-pushes only.
93
+ *
94
+ * Must: not return keys from outside `namespacePrefix`. Under-reporting only
95
+ * leaves an orphan for a later reconcile; over-reporting offers a vector
96
+ * outside the scope for pruning, and the reconcile is what would delete it.
41
97
  */
42
98
  listKeys?(namespacePrefix: string[]): Promise<VectorRef[]>;
43
99
  }
44
- //# sourceMappingURL=vector-backend.d.ts.map
100
+ /**
101
+ * Every direction `toRelevanceScores` (store/internal/vector-index.ts)
102
+ * recognises, for validating input.
103
+ */
104
+ export declare const VECTOR_SCORE_DIRECTIONS: readonly VectorScoreDirection[];
@@ -1,3 +1,17 @@
1
1
  "use strict";
2
+ /**
3
+ * Hides which vector index the store talks to.
4
+ *
5
+ * The store sees only `VectorBackend` — upsert, query, delete and an optional
6
+ * listing — with what it promises and requires stated per method, so any
7
+ * index that keeps those terms plugs in without the store changing. The table
8
+ * stays the truth: a backend may lag it and may score by distance, and every
9
+ * match is re-read before a caller sees it.
10
+ */
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=vector-backend.js.map
12
+ exports.VECTOR_SCORE_DIRECTIONS = void 0;
13
+ /**
14
+ * Every direction `toRelevanceScores` (store/internal/vector-index.ts)
15
+ * recognises, for validating input.
16
+ */
17
+ exports.VECTOR_SCORE_DIRECTIONS = ['relevance', 'distance'];