@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,10 +1,39 @@
1
1
  "use strict";
2
+ /**
3
+ * Hides which text of a value is embedded, and how.
4
+ *
5
+ * The text an index field names is extracted exactly as LangGraph's in-memory
6
+ * store extracts it — dotted paths, `[n]` and `[*]`, `{a,b}` groups, pretty
7
+ * JSON for containers — then embedded in bounded batches, and every vector the
8
+ * model returns is held to the configured dimension.
9
+ */
2
10
  Object.defineProperty(exports, "__esModule", { value: true });
3
11
  exports.cosineSimilarity = cosineSimilarity;
12
+ exports.extractTexts = extractTexts;
4
13
  exports.extractText = extractText;
14
+ exports.assertVectorDims = assertVectorDims;
15
+ exports.embedValues = embedValues;
5
16
  exports.embedValue = embedValue;
6
- const langgraph_checkpoint_1 = require("@langchain/langgraph-checkpoint");
7
- /** Cosine similarity of two equal-length vectors; 0 for zero/mismatched vectors. */
17
+ exports.embedPassages = embedPassages;
18
+ exports.tokenizePath = tokenizePath;
19
+ exports.getTextAtPath = getTextAtPath;
20
+ const errors_1 = require("../../shared/errors/errors");
21
+ /** Texts per `embedDocuments` call; keeps provider request sizes bounded. */
22
+ const EMBED_BATCH_SIZE = 100;
23
+ /**
24
+ * Cosine similarity of two vectors.
25
+ *
26
+ * Accepts: any two vectors. Lengths that disagree, and a vector of all zeros,
27
+ * have no defined angle between them.
28
+ *
29
+ * Returns: the cosine, in [-1, 1]; `0` for the undefined cases, which ranks
30
+ * such a pair as unrelated rather than as opposed. A caller that must
31
+ * distinguish "unrelated" from "incomparable" checks the lengths itself —
32
+ * `rankInMemory` does, so it can report a model mismatch instead of ranking
33
+ * everything at zero.
34
+ *
35
+ * Throws: nothing.
36
+ */
8
37
  function cosineSimilarity(a, b) {
9
38
  if (a.length !== b.length)
10
39
  return 0;
@@ -20,28 +49,341 @@ function cosineSimilarity(a, b) {
20
49
  return 0;
21
50
  return dot / (Math.sqrt(normA) * Math.sqrt(normB));
22
51
  }
23
- /** Extract and join the indexable text of a value for the configured fields. */
52
+ /**
53
+ * The indexable texts of a value, one per extracted path, in field order.
54
+ *
55
+ * Extraction is byte-for-byte what LangGraph's `InMemoryStore` does (see
56
+ * {@link getTextAtPath}), and so is keeping them apart: the reference embeds each
57
+ * extracted element separately and scores an item by its best-matching one.
58
+ * Joining them and embedding once averages a long document into a single
59
+ * vector, which ranks a document holding one strongly-matching section
60
+ * materially lower — a retrieval-quality difference, not an edge case.
61
+ *
62
+ * Accepts: `value` — a stored item's value. `fields` — JSON paths; a path that
63
+ * addresses nothing contributes nothing.
64
+ *
65
+ * Returns: one text per extracted path, in field order, with empty ones
66
+ * dropped: an empty string embeds to a vector that means nothing and would rank
67
+ * against every query.
68
+ *
69
+ * Throws: nothing.
70
+ */
71
+ function extractTexts(value, fields) {
72
+ return fields.flatMap((field) => getTextAtPath(value, field)).filter((text) => text.length > 0);
73
+ }
74
+ /**
75
+ * The same texts joined into one, which is what a single-vector consumer needs.
76
+ *
77
+ * Accepts: as {@link extractTexts}.
78
+ *
79
+ * Returns: the texts joined by a space, and `''` when there are none — which is
80
+ * how a caller tells "nothing to index" from a text to embed.
81
+ *
82
+ * Throws: nothing.
83
+ *
84
+ * Used only for a configured `vectorBackend`, whose contract is one vector per
85
+ * `(namespace, key)`; the in-DynamoDB path embeds each text separately.
86
+ */
24
87
  function extractText(value, fields) {
25
- const parts = [];
26
- for (const field of fields) {
27
- if (field === '$')
28
- parts.push(JSON.stringify(value));
29
- else
30
- parts.push(...(0, langgraph_checkpoint_1.getTextAtPath)(value, field));
88
+ return extractTexts(value, fields).join(' ');
89
+ }
90
+ /**
91
+ * Reject a vector whose length disagrees with the configured `index.dims`. A
92
+ * mismatch means the embeddings model does not match the configuration, so
93
+ * every stored vector would be incomparable with every query; failing here
94
+ * surfaces that at the first put or search instead of ranking silently.
95
+ *
96
+ * Accepts: `index.dims` — the check is skipped when it is not a positive
97
+ * integer, since nothing else in this package reads it and a store configured
98
+ * without it must keep working. `vector` — a document or query vector the model
99
+ * just returned. `what` — names which of the two, for the message.
100
+ *
101
+ * Returns: nothing: `vector` is kept under its declared type, and this
102
+ * checks it.
103
+ *
104
+ * Throws: `VALIDATION` naming `index.dims`.
105
+ */
106
+ function assertVectorDims(index, vector, what) {
107
+ const dims = index.dims;
108
+ if (!Number.isInteger(dims) || dims <= 0 || vector.length === dims)
109
+ return;
110
+ throw (0, errors_1.validationError)(`index.embeddings returned a ${vector.length}-dimensional ${what} vector but index.dims ` +
111
+ `is ${dims}; the embeddings model does not match the configured index`, 'index.dims');
112
+ }
113
+ /**
114
+ * Embed several values for indexing with `embedDocuments` — the document-side
115
+ * method; providers such as Titan and Cohere embed documents and queries with
116
+ * different task types, so embedding a document with `embedQuery` degrades
117
+ * retrieval.
118
+ *
119
+ * Accepts: `values` — any number, including none. `fieldsOverride` — a put's
120
+ * own `index` fields; absent uses the store's, and a store with no configured
121
+ * fields indexes the whole document (`'$'`), as the reference does.
122
+ *
123
+ * Returns: one entry per value, in input order: its vector, or `undefined` when
124
+ * the value has no indexable text or the store has no index at all.
125
+ *
126
+ * Throws: `VALIDATION` naming `index.dims` when the model's width disagrees
127
+ * with the configuration; whatever the model throws.
128
+ *
129
+ * Guarantees: values with no text are never sent to the model, and the rest go
130
+ * in batches of {@link EMBED_BATCH_SIZE}, so one call cannot turn into one
131
+ * provider request per item or a single unbounded one.
132
+ */
133
+ async function embedValues(context, values, fieldsOverride) {
134
+ const index = context.index;
135
+ if (!index)
136
+ return values.map(() => undefined);
137
+ const fields = fieldsOverride ?? index.fields ?? ['$'];
138
+ const pending = [];
139
+ values.forEach((value, position) => {
140
+ const text = extractText(value, fields);
141
+ if (text.length > 0)
142
+ pending.push({ text, position });
143
+ });
144
+ const vectors = values.map(() => undefined);
145
+ for (let start = 0; start < pending.length; start += EMBED_BATCH_SIZE) {
146
+ const batch = pending.slice(start, start + EMBED_BATCH_SIZE);
147
+ const embedded = await index.embeddings.embedDocuments(batch.map((entry) => entry.text));
148
+ batch.forEach((entry, i) => {
149
+ assertVectorDims(index, embedded[i], 'document');
150
+ vectors[entry.position] = embedded[i];
151
+ });
31
152
  }
32
- return parts.join(' ');
153
+ return vectors;
33
154
  }
34
155
  /**
35
- * Embed a value for indexing, or undefined when indexing is off or the text is
36
- * empty. `fieldsOverride` (from a put's `index` option) takes precedence over
37
- * the store's configured fields.
156
+ * Embed one value for indexing.
157
+ *
158
+ * Accepts: as {@link embedValues}, for one value; `fieldsOverride` (from a
159
+ * put's `index` option) takes precedence over the store's configured fields.
160
+ *
161
+ * Returns: the value's vector, or undefined when indexing is off or it has no
162
+ * indexable text.
163
+ *
164
+ * Throws: as {@link embedValues}.
38
165
  */
39
166
  async function embedValue(context, value, fieldsOverride) {
40
- if (!context.index)
167
+ return (await embedValues(context, [value], fieldsOverride))[0];
168
+ }
169
+ /**
170
+ * One vector per extracted path, for the item's own row — the shape the
171
+ * in-DynamoDB ranker scores by best match, matching the reference store.
172
+ *
173
+ * Accepts: as {@link embedValues}, for one value.
174
+ *
175
+ * Returns: one vector per extracted text, in path order; `undefined` when
176
+ * indexing is off or the value yields no indexable text — which is what clears
177
+ * a stale vector on a re-put, since the row is written without the attribute.
178
+ *
179
+ * Throws: as {@link embedValues}.
180
+ *
181
+ * Guarantees: every text of one value goes in as few `embedDocuments` calls as
182
+ * {@link EMBED_BATCH_SIZE} allows, never one call per path.
183
+ */
184
+ async function embedPassages(context, value, fieldsOverride) {
185
+ const index = context.index;
186
+ if (!index)
41
187
  return undefined;
42
- const text = extractText(value, fieldsOverride ?? context.index.fields ?? ['$']);
43
- if (text.length === 0)
188
+ const texts = extractTexts(value, fieldsOverride ?? index.fields ?? ['$']);
189
+ if (texts.length === 0)
44
190
  return undefined;
45
- return context.index.embeddings.embedQuery(text);
191
+ const vectors = [];
192
+ for (let start = 0; start < texts.length; start += EMBED_BATCH_SIZE) {
193
+ const embedded = await index.embeddings.embedDocuments(texts.slice(start, start + EMBED_BATCH_SIZE));
194
+ for (const vector of embedded) {
195
+ assertVectorDims(index, vector, 'document');
196
+ vectors.push(vector);
197
+ }
198
+ }
199
+ return vectors;
200
+ }
201
+ /**
202
+ * Pretty JSON, exactly as `InMemoryStore` embeds non-scalar values, as a list so
203
+ * that a value with no JSON text contributes nothing.
204
+ *
205
+ * `JSON.stringify` answers "no text" in two ways: it *returns* undefined for a
206
+ * value JSON cannot represent (`undefined`, a function, a symbol) and it
207
+ * *throws* for one it refuses (a circular structure, a `BigInt`). Both mean the
208
+ * same thing here — there is no text to index — and neither may escape: the
209
+ * first would put a literal `undefined` into a `string[]` and crash the
210
+ * caller's `text.length` filter, and the second would surface a raw
211
+ * `TypeError` from inside the embedding step. A value JSON refuses outright is
212
+ * still refused, by the codec, at the write that follows, which names the
213
+ * offending field.
214
+ */
215
+ function prettyText(value) {
216
+ let text;
217
+ try {
218
+ text = JSON.stringify(value, null, 2);
219
+ }
220
+ catch {
221
+ return [];
222
+ }
223
+ return text === undefined ? [] : [text];
224
+ }
225
+ function isScalar(value) {
226
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
227
+ }
228
+ /** Text for a leaf: scalars stringify, containers pretty-print, null yields nothing. */
229
+ function leafText(value) {
230
+ if (isScalar(value))
231
+ return [String(value)];
232
+ if (value === null)
233
+ return [];
234
+ return prettyText(value);
235
+ }
236
+ /** Index just past the closer matching an opener at `start - 1`, honouring nesting. */
237
+ function scanGroup(path, start, open, close) {
238
+ let depth = 1;
239
+ let i = start;
240
+ while (i < path.length && depth > 0) {
241
+ if (path[i] === open)
242
+ depth += 1;
243
+ else if (path[i] === close)
244
+ depth -= 1;
245
+ i += 1;
246
+ }
247
+ return i;
248
+ }
249
+ /**
250
+ * Split a JSON path into tokens the way LangGraph's `InMemoryStore` does: dots
251
+ * separate plain segments, while a `[…]` index and a `{…}` field group each
252
+ * become a token of their own (`tags[0]` → `['tags', '[0]']`).
253
+ *
254
+ * Accepts: any path string. An empty path, and a path of nothing but
255
+ * separators, tokenize to nothing. An **unterminated** `[` or `{` runs to the
256
+ * end of the path and becomes a token that no longer closes — `'tags[0'` →
257
+ * `['tags', '[0']` — so it is resolved as a plain member name and matches
258
+ * nothing unless the value at `tags` holds a field literally called `[0`. That is the reference
259
+ * tokenizer's own answer (`@langchain/langgraph-checkpoint@1.1.5`
260
+ * `dist/store/utils.js:23-30`), and matching it matters more than refusing the
261
+ * path: `index.fields` is validated where it is configured, and text extraction
262
+ * must stay byte-for-byte comparable with the reference store.
263
+ *
264
+ * Returns: the tokens, in path order.
265
+ *
266
+ * Throws: nothing.
267
+ */
268
+ function tokenizePath(path) {
269
+ const tokens = [];
270
+ let current = '';
271
+ const flush = () => {
272
+ if (current.length > 0)
273
+ tokens.push(current);
274
+ current = '';
275
+ };
276
+ let i = 0;
277
+ while (i < path.length) {
278
+ const char = path[i];
279
+ if (char === '[' || char === '{') {
280
+ flush();
281
+ const end = scanGroup(path, i + 1, char, char === '[' ? ']' : '}');
282
+ tokens.push(path.slice(i, end));
283
+ i = end;
284
+ continue;
285
+ }
286
+ if (char === '.')
287
+ flush();
288
+ else
289
+ current += char;
290
+ i += 1;
291
+ }
292
+ flush();
293
+ return tokens;
294
+ }
295
+ /** Walk one `{…}`-group field by plain `in` lookups, as the reference does. */
296
+ function groupFieldText(value, field) {
297
+ let current = value;
298
+ for (const token of tokenizePath(field)) {
299
+ if (current !== null && typeof current === 'object' && token in current) {
300
+ current = current[token];
301
+ }
302
+ else {
303
+ return [];
304
+ }
305
+ }
306
+ return isScalar(current) ? [String(current)] : prettyText(current);
307
+ }
308
+ /** Resolve a `[n]`, `[-n]` or `[*]` token against an array; anything else yields nothing. */
309
+ function indexText(value, token, tokens, pos) {
310
+ if (!Array.isArray(value))
311
+ return [];
312
+ const index = token.slice(1, -1);
313
+ if (index === '*')
314
+ return value.flatMap((item) => extract(item, tokens, pos + 1));
315
+ let idx = Number.parseInt(index, 10);
316
+ if (Number.isNaN(idx))
317
+ return [];
318
+ if (idx < 0)
319
+ idx = value.length + idx;
320
+ return idx >= 0 && idx < value.length ? extract(value[idx], tokens, pos + 1) : [];
321
+ }
322
+ /** Resolve a `{a,b.c}` token: each listed field, walked from the current value. */
323
+ function groupText(value, token) {
324
+ if (typeof value !== 'object' || value === null)
325
+ return [];
326
+ const results = [];
327
+ for (const field of token.slice(1, -1).split(',')) {
328
+ const trimmed = field.trim();
329
+ if (tokenizePath(trimmed).length > 0)
330
+ results.push(...groupFieldText(value, trimmed));
331
+ }
332
+ return results;
333
+ }
334
+ /** Resolve a bare `*` token: every array item or every object value. */
335
+ function wildcardText(value, tokens, pos) {
336
+ if (Array.isArray(value))
337
+ return value.flatMap((item) => extract(item, tokens, pos + 1));
338
+ if (typeof value === 'object' && value !== null) {
339
+ return Object.values(value).flatMap((item) => extract(item, tokens, pos + 1));
340
+ }
341
+ return [];
342
+ }
343
+ /** Resolve a plain member token by an `in` lookup, exactly as the reference does. */
344
+ function memberText(value, token, tokens, pos) {
345
+ if (typeof value !== 'object' || value === null || !(token in value))
346
+ return [];
347
+ return extract(value[token], tokens, pos + 1);
348
+ }
349
+ function extract(value, tokens, pos) {
350
+ if (pos >= tokens.length)
351
+ return leafText(value);
352
+ const token = tokens[pos];
353
+ if (token.startsWith('[') && token.endsWith(']'))
354
+ return indexText(value, token, tokens, pos);
355
+ const results = pos === 0 && token === '$' ? prettyText(value) : [];
356
+ if (token.startsWith('{') && token.endsWith('}'))
357
+ results.push(...groupText(value, token));
358
+ else if (token === '*')
359
+ results.push(...wildcardText(value, tokens, pos));
360
+ else
361
+ results.push(...memberText(value, token, tokens, pos));
362
+ return results;
363
+ }
364
+ /**
365
+ * Extract the indexable text of `value` at `path`, byte-for-byte as LangGraph's
366
+ * `InMemoryStore` does (`store/utils`), so an embedding computed here matches
367
+ * one computed by the reference store for the same document. Supports plain
368
+ * paths, `[n]`/`[-n]`/`[*]` indexing, a bare `*` wildcard, `{a,b.c}` field
369
+ * groups and `$` for the whole document. The package root's `getTextAtPath` is
370
+ * a string-only variant that returns nothing for numbers, booleans, objects
371
+ * and arrays and throws on a `null` intermediate; it must not be used here.
372
+ *
373
+ * Accepts: `value` — any stored value, including a scalar and `null`. `path` —
374
+ * empty or `$` asks for the whole document; anything else is tokenized. A path
375
+ * that addresses nothing present, a `[n]` against a non-array, a `{…}` group
376
+ * against a non-object: each yields no text rather than an error, because one
377
+ * unindexable field of one item must not fail a put or a search.
378
+ *
379
+ * Returns: the extracted texts, in path order — one per match, kept apart so
380
+ * each is embedded on its own (see `extractTexts`). Empty when the path
381
+ * addresses nothing, and empty for a leaf JSON cannot represent.
382
+ *
383
+ * Throws: nothing.
384
+ */
385
+ function getTextAtPath(value, path) {
386
+ if (path === '' || path === '$')
387
+ return prettyText(value);
388
+ return extract(value, tokenizePath(path), 0);
46
389
  }
47
- //# sourceMappingURL=semantic-search.js.map
@@ -1,22 +1,36 @@
1
- import type { DynamoDBClient } from '@aws-sdk/client-dynamodb';
2
- import type { DynamoDBDocument } from '@aws-sdk/lib-dynamodb';
1
+ /**
2
+ * Hides which options the store and its methods accept, and how the store is
3
+ * assembled from them.
4
+ *
5
+ * The exhaustive key list of every option bag — the constructor's, `search`'s,
6
+ * `listNamespaces`' — lives here, compiler-checked against its type. The
7
+ * store's own options are checked after the shared ones — the in-memory caps,
8
+ * that a vector backend comes with an index, that the index can embed, the
9
+ * score direction — and the context every operation receives is built with its
10
+ * defaults filled in.
11
+ */
3
12
  import type { IndexConfig, SerializerProtocol } from '@langchain/langgraph-checkpoint';
4
- import type { CompressionConfig } from '../../shared/codec/compression';
5
- import { S3Offloader } from '../../shared/codec/s3/offloader';
6
- import { type Logger } from '../../shared/logging/logger';
7
- import type { TtlOption } from '../../shared/validation/ttl';
13
+ import { type AdapterCore, type AdapterShell } from '../../shared/adapter';
8
14
  import type { DynamoDBStoreOptions } from '../types';
9
- import type { VectorBackend } from '../vector-backend';
10
- import { type VectorScoreDirection } from './score-direction';
15
+ import { type VectorBackend, type VectorScoreDirection } from '../vector-backend';
16
+ /** Default cap on candidates the in-DB semantic ranker will score. */
17
+ export declare const DEFAULT_MAX_SEARCH_CANDIDATES = 1000;
18
+ /**
19
+ * Largest `maxSearchCandidates` an adapter accepts: this many decoded
20
+ * candidates are held and re-ranked in memory by one `search()` call, so an
21
+ * unbounded value lets a typo or hostile config hold an unbounded working set.
22
+ */
23
+ export declare const MAX_SEARCH_CANDIDATES = 100000;
24
+ /**
25
+ * Largest `maxScanItems` an adapter accepts: this many raw rows are collected
26
+ * into memory across one paginated scan/query before it errors, so — like
27
+ * {@link MAX_SEARCH_CANDIDATES} — an unbounded value lets a typo or hostile
28
+ * config hold an unbounded working set.
29
+ */
30
+ export declare const MAX_SCAN_ITEMS = 1000000;
11
31
  /** Resolved collaborators shared by every store action. */
12
- export interface StoreContext {
13
- client: DynamoDBDocument;
14
- tableName: string;
32
+ export interface StoreContext extends AdapterCore {
15
33
  serde: SerializerProtocol;
16
- compression?: CompressionConfig;
17
- offloader?: S3Offloader;
18
- ttl?: TtlOption;
19
- logger: Logger;
20
34
  index?: IndexConfig;
21
35
  vectorBackend?: VectorBackend;
22
36
  vectorScoreDirection: VectorScoreDirection;
@@ -26,11 +40,43 @@ export interface StoreContext {
26
40
  /** Result of wiring up a store from its options. */
27
41
  export interface StoreSetup {
28
42
  context: StoreContext;
29
- ddbClient: DynamoDBClient | undefined;
30
- ownsClient: boolean;
43
+ shell: AdapterShell;
31
44
  }
32
45
  /**
33
- * Resolve the client, optional S3 offloader, serializer, and index config.
46
+ * Validate the options, then resolve the client, offloader, serializer and index.
47
+ *
48
+ * Accepts: `options` — validated first, so no half-built store exists when one
49
+ * is wrong. Everything optional has a default here and nowhere else, which is
50
+ * what lets every action read `context.x` without re-deciding what absent means.
51
+ *
52
+ * Returns: the context every action shares, and the shell that releases what
53
+ * it holds — a client the caller passed in is never destroyed by `destroy()`.
54
+ *
55
+ * Throws: `VALIDATION` for any invalid option, naming the option.
56
+ *
57
+ * Guarantees: constructing a store performs no I/O. The stacked-retry check is
58
+ * deliberately not awaited: it is a warning about a caller-supplied client, not
59
+ * a precondition.
60
+ */
61
+ export declare function setUpStore(options: DynamoDBStoreOptions): StoreSetup;
62
+ /**
63
+ * The keys of each store option bag, exhaustive in both directions:
64
+ * `allKeysOf<T>` makes omitting or inventing one a compile error, so a list
65
+ * cannot rot away from the type it guards. They live with the feature because
66
+ * the types they are checked against do; `shared/` knows no feature.
67
+ */
68
+ export declare const STORE_KEYS: readonly string[];
69
+ /** See {@link STORE_KEYS}. */
70
+ export declare const STORE_SEARCH_KEYS: readonly string[];
71
+ /**
72
+ * See {@link STORE_KEYS}. `ListNamespacesOptions` is pinned equal to
73
+ * `BaseStore.listNamespaces`' own parameter type, so this list is checked
74
+ * against upstream's options through it.
75
+ */
76
+ export declare const STORE_LIST_NAMESPACES_KEYS: readonly string[];
77
+ /**
78
+ * Validate the store's own options at construction; the shared ones are
79
+ * `openAdapter`'s, which checks them before these.
34
80
  *
35
81
  * A `vectorBackend` without an `index` is rejected outright rather than
36
82
  * silently degrading: with no embeddings configured, every `put` would compute
@@ -39,6 +85,17 @@ export interface StoreSetup {
39
85
  * listing with no `.score` field and no error — a semantic query returning a
40
86
  * normal-looking but meaningless response. `reconcileVectorIndex` already
41
87
  * refused this exact misconfiguration.
88
+ *
89
+ * Accepts: every option the store takes. The types describe the intended
90
+ * shapes; this runs for the JavaScript caller the types never see, and for the
91
+ * combinations no type can express — a backend without an index, an `index`
92
+ * key `IndexConfig` does not declare, an `embeddings` object missing a method,
93
+ * a direction outside its union.
94
+ *
95
+ * Returns: nothing: the value is kept under its declared type, and this
96
+ * checks it.
97
+ *
98
+ * Throws: `VALIDATION` naming the offending option. Every failure is raised
99
+ * at construction, where the fix is, rather than at the first put or search.
42
100
  */
43
- export declare function setUpStore(options: DynamoDBStoreOptions): StoreSetup;
44
- //# sourceMappingURL=setup.d.ts.map
101
+ export declare function assertStoreOptions(options: DynamoDBStoreOptions): void;