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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (608) hide show
  1. package/README.md +1820 -290
  2. package/dist/cjs/backfill/backfill.d.ts +171 -0
  3. package/dist/cjs/backfill/backfill.js +177 -0
  4. package/dist/cjs/checkpointer/actions/delete-thread.d.ts +50 -0
  5. package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
  6. package/dist/cjs/checkpointer/actions/get-tuple.d.ts +36 -0
  7. package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
  8. package/dist/cjs/checkpointer/actions/list.d.ts +55 -0
  9. package/dist/cjs/checkpointer/actions/list.js +70 -0
  10. package/dist/cjs/checkpointer/actions/put-writes.d.ts +49 -0
  11. package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
  12. package/dist/cjs/checkpointer/actions/put.d.ts +95 -0
  13. package/dist/cjs/checkpointer/actions/put.js +79 -0
  14. package/dist/cjs/checkpointer/internal/delta-history.d.ts +124 -0
  15. package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
  16. package/dist/cjs/checkpointer/internal/listing.d.ts +149 -0
  17. package/dist/cjs/checkpointer/internal/listing.js +104 -0
  18. package/dist/cjs/checkpointer/internal/parse.d.ts +298 -0
  19. package/dist/cjs/checkpointer/internal/parse.js +184 -0
  20. package/dist/cjs/checkpointer/internal/pending-writes.d.ts +314 -0
  21. package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
  22. package/dist/cjs/checkpointer/internal/read.d.ts +135 -0
  23. package/dist/cjs/checkpointer/internal/read.js +132 -0
  24. package/dist/cjs/checkpointer/internal/rows.d.ts +644 -0
  25. package/dist/cjs/checkpointer/internal/rows.js +356 -0
  26. package/dist/cjs/checkpointer/internal/setup.d.ts +47 -0
  27. package/dist/cjs/checkpointer/internal/setup.js +25 -0
  28. package/dist/cjs/checkpointer/saver.d.ts +306 -0
  29. package/dist/cjs/checkpointer/saver.js +56 -0
  30. package/dist/cjs/checkpointer/types.d.ts +51 -0
  31. package/dist/cjs/factory/factory.d.ts +154 -0
  32. package/dist/cjs/factory/factory.js +137 -0
  33. package/dist/{factory → cjs/factory}/types.d.ts +33 -14
  34. package/dist/cjs/history/actions/add-messages.d.ts +51 -0
  35. package/dist/cjs/history/actions/add-messages.js +17 -0
  36. package/dist/cjs/history/actions/clear.d.ts +52 -0
  37. package/dist/cjs/history/actions/clear.js +29 -0
  38. package/dist/cjs/history/actions/get-messages.d.ts +60 -0
  39. package/dist/cjs/history/actions/get-messages.js +58 -0
  40. package/dist/cjs/history/actions/list-sessions.d.ts +55 -0
  41. package/dist/cjs/history/actions/list-sessions.js +67 -0
  42. package/dist/cjs/history/actions/reconcile-count.d.ts +49 -0
  43. package/dist/cjs/history/actions/reconcile-count.js +8 -0
  44. package/dist/cjs/history/chat-message-history.d.ts +267 -0
  45. package/dist/cjs/history/chat-message-history.js +61 -0
  46. package/dist/cjs/history/internal/append.d.ts +244 -0
  47. package/dist/cjs/history/internal/append.js +267 -0
  48. package/dist/cjs/history/internal/message-read.d.ts +84 -0
  49. package/dist/cjs/history/internal/message-read.js +93 -0
  50. package/dist/cjs/history/internal/parse.d.ts +153 -0
  51. package/dist/cjs/history/internal/parse.js +113 -0
  52. package/dist/cjs/history/internal/rows.d.ts +196 -0
  53. package/dist/cjs/history/internal/rows.js +96 -0
  54. package/dist/cjs/history/internal/session.d.ts +350 -0
  55. package/dist/cjs/history/internal/session.js +296 -0
  56. package/dist/cjs/history/internal/setup.d.ts +64 -0
  57. package/dist/cjs/history/internal/setup.js +60 -0
  58. package/dist/cjs/history/session-adapter.d.ts +112 -0
  59. package/dist/cjs/history/session-adapter.js +38 -0
  60. package/dist/cjs/history/types.d.ts +102 -0
  61. package/dist/cjs/index.d.ts +53 -0
  62. package/dist/cjs/index.js +25 -0
  63. package/dist/cjs/package.json +1 -0
  64. package/dist/cjs/shared/adapter.d.ts +146 -0
  65. package/dist/cjs/shared/adapter.js +70 -0
  66. package/dist/cjs/shared/clock.d.ts +52 -0
  67. package/dist/cjs/shared/clock.js +14 -0
  68. package/dist/cjs/shared/codec/codec.d.ts +336 -0
  69. package/dist/cjs/shared/codec/codec.js +162 -0
  70. package/dist/cjs/shared/codec/compression.d.ts +66 -0
  71. package/dist/cjs/shared/codec/compression.js +45 -0
  72. package/dist/cjs/shared/codec/json-serde.d.ts +80 -0
  73. package/dist/cjs/shared/codec/json-serde.js +58 -0
  74. package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +22 -2
  75. package/dist/{shared → cjs/shared}/codec/s3/client-types.js +0 -1
  76. package/dist/cjs/shared/codec/s3/client.d.ts +63 -0
  77. package/dist/cjs/shared/codec/s3/client.js +78 -0
  78. package/dist/cjs/shared/codec/s3/config.d.ts +260 -0
  79. package/dist/cjs/shared/codec/s3/config.js +92 -0
  80. package/dist/cjs/shared/codec/s3/lifecycle.d.ts +220 -0
  81. package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
  82. package/dist/cjs/shared/codec/s3/offloader.d.ts +428 -0
  83. package/dist/cjs/shared/codec/s3/offloader.js +289 -0
  84. package/dist/cjs/shared/concurrency.d.ts +43 -0
  85. package/dist/{shared → cjs/shared}/concurrency.js +10 -9
  86. package/dist/cjs/shared/dynamodb/abort.d.ts +47 -0
  87. package/dist/cjs/shared/dynamodb/abort.js +16 -0
  88. package/dist/cjs/shared/dynamodb/batch-write.d.ts +86 -0
  89. package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
  90. package/dist/cjs/shared/dynamodb/cancellation.d.ts +124 -0
  91. package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
  92. package/dist/cjs/shared/dynamodb/client.d.ts +177 -0
  93. package/dist/{shared → cjs/shared}/dynamodb/client.js +12 -14
  94. package/dist/cjs/shared/dynamodb/idempotent-write.d.ts +596 -0
  95. package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
  96. package/dist/cjs/shared/dynamodb/paginate.d.ts +111 -0
  97. package/dist/cjs/shared/dynamodb/paginate.js +90 -0
  98. package/dist/cjs/shared/dynamodb/partition-delete.d.ts +204 -0
  99. package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
  100. package/dist/cjs/shared/dynamodb/recency-index.d.ts +243 -0
  101. package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
  102. package/dist/cjs/shared/dynamodb/retry.d.ts +317 -0
  103. package/dist/cjs/shared/dynamodb/retry.js +193 -0
  104. package/dist/cjs/shared/dynamodb/row-size.d.ts +33 -0
  105. package/dist/cjs/shared/dynamodb/row-size.js +30 -0
  106. package/dist/cjs/shared/dynamodb/table-schema.d.ts +199 -0
  107. package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
  108. package/dist/cjs/shared/errors/base-error.d.ts +231 -0
  109. package/dist/cjs/shared/errors/base-error.js +73 -0
  110. package/dist/cjs/shared/errors/boundary.d.ts +86 -0
  111. package/dist/cjs/shared/errors/boundary.js +61 -0
  112. package/dist/cjs/shared/errors/classify.d.ts +206 -0
  113. package/dist/cjs/shared/errors/classify.js +232 -0
  114. package/dist/cjs/shared/errors/error-code.d.ts +95 -0
  115. package/dist/{shared → cjs/shared}/errors/error-code.js +12 -2
  116. package/dist/cjs/shared/errors/errors.d.ts +233 -0
  117. package/dist/cjs/shared/errors/errors.js +123 -0
  118. package/dist/cjs/shared/logging/logger.d.ts +80 -0
  119. package/dist/cjs/shared/logging/logger.js +30 -0
  120. package/dist/cjs/shared/logging/redaction.d.ts +123 -0
  121. package/dist/cjs/shared/logging/redaction.js +145 -0
  122. package/dist/cjs/shared/logging/secret-patterns.d.ts +227 -0
  123. package/dist/cjs/shared/logging/secret-patterns.js +93 -0
  124. package/dist/cjs/shared/logging/truncate.d.ts +197 -0
  125. package/dist/cjs/shared/logging/truncate.js +31 -0
  126. package/dist/cjs/shared/options.d.ts +100 -0
  127. package/dist/cjs/shared/ulid.d.ts +80 -0
  128. package/dist/{shared → cjs/shared}/ulid.js +7 -21
  129. package/dist/cjs/shared/validation/collaborators.d.ts +160 -0
  130. package/dist/cjs/shared/validation/collaborators.js +79 -0
  131. package/dist/cjs/shared/validation/option-shape.d.ts +91 -0
  132. package/dist/cjs/shared/validation/option-shape.js +31 -0
  133. package/dist/cjs/shared/validation/options.d.ts +145 -0
  134. package/dist/cjs/shared/validation/options.js +166 -0
  135. package/dist/cjs/shared/validation/primitives.d.ts +292 -0
  136. package/dist/cjs/shared/validation/primitives.js +114 -0
  137. package/dist/cjs/shared/validation/ttl.d.ts +94 -0
  138. package/dist/cjs/shared/validation/ttl.js +52 -0
  139. package/dist/cjs/store/actions/list-namespaces.d.ts +79 -0
  140. package/dist/cjs/store/actions/list-namespaces.js +92 -0
  141. package/dist/cjs/store/actions/put.d.ts +43 -0
  142. package/dist/cjs/store/actions/put.js +49 -0
  143. package/dist/cjs/store/actions/reconcile-vector-index.d.ts +38 -0
  144. package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
  145. package/dist/cjs/store/actions/search.d.ts +38 -0
  146. package/dist/cjs/store/actions/search.js +26 -0
  147. package/dist/cjs/store/internal/batch-plan.d.ts +56 -0
  148. package/dist/cjs/store/internal/batch-plan.js +32 -0
  149. package/dist/cjs/store/internal/filter.d.ts +43 -0
  150. package/dist/cjs/store/internal/filter.js +64 -0
  151. package/dist/cjs/store/internal/get-item.d.ts +77 -0
  152. package/dist/cjs/store/internal/get-item.js +58 -0
  153. package/dist/cjs/store/internal/item-write.d.ts +270 -0
  154. package/dist/cjs/store/internal/item-write.js +181 -0
  155. package/dist/cjs/store/internal/parse.d.ts +230 -0
  156. package/dist/cjs/store/internal/parse.js +180 -0
  157. package/dist/cjs/store/internal/rows.d.ts +359 -0
  158. package/dist/cjs/store/internal/rows.js +166 -0
  159. package/dist/cjs/store/internal/semantic-search.d.ts +168 -0
  160. package/dist/{store/internal/text-path.js → cjs/store/internal/semantic-search.js} +92 -28
  161. package/dist/cjs/store/internal/setup.d.ts +96 -0
  162. package/dist/cjs/store/internal/setup.js +103 -0
  163. package/dist/cjs/store/internal/table-search.d.ts +100 -0
  164. package/dist/cjs/store/internal/table-search.js +123 -0
  165. package/dist/cjs/store/internal/vector-index.d.ts +258 -0
  166. package/dist/cjs/store/internal/vector-index.js +269 -0
  167. package/dist/cjs/store/store.d.ts +329 -0
  168. package/dist/cjs/store/store.js +97 -0
  169. package/dist/cjs/store/types.d.ts +111 -0
  170. package/dist/cjs/store/vector-backend.d.ts +104 -0
  171. package/dist/cjs/store/vector-backend.js +4 -0
  172. package/dist/esm/backfill/backfill.d.ts +171 -0
  173. package/dist/esm/backfill/backfill.js +170 -0
  174. package/dist/esm/checkpointer/actions/delete-thread.d.ts +50 -0
  175. package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
  176. package/dist/esm/checkpointer/actions/get-tuple.d.ts +36 -0
  177. package/dist/esm/checkpointer/actions/get-tuple.js +19 -0
  178. package/dist/esm/checkpointer/actions/list.d.ts +55 -0
  179. package/dist/esm/checkpointer/actions/list.js +67 -0
  180. package/dist/esm/checkpointer/actions/put-writes.d.ts +49 -0
  181. package/dist/esm/checkpointer/actions/put-writes.js +18 -0
  182. package/dist/esm/checkpointer/actions/put.d.ts +95 -0
  183. package/dist/esm/checkpointer/actions/put.js +75 -0
  184. package/dist/esm/checkpointer/internal/delta-history.d.ts +124 -0
  185. package/dist/esm/checkpointer/internal/delta-history.js +126 -0
  186. package/dist/esm/checkpointer/internal/listing.d.ts +149 -0
  187. package/dist/esm/checkpointer/internal/listing.js +95 -0
  188. package/dist/esm/checkpointer/internal/parse.d.ts +298 -0
  189. package/dist/esm/checkpointer/internal/parse.js +169 -0
  190. package/dist/esm/checkpointer/internal/pending-writes.d.ts +314 -0
  191. package/dist/esm/checkpointer/internal/pending-writes.js +229 -0
  192. package/dist/esm/checkpointer/internal/read.d.ts +135 -0
  193. package/dist/esm/checkpointer/internal/read.js +125 -0
  194. package/dist/esm/checkpointer/internal/rows.d.ts +644 -0
  195. package/dist/esm/checkpointer/internal/rows.js +323 -0
  196. package/dist/esm/checkpointer/internal/setup.d.ts +47 -0
  197. package/dist/esm/checkpointer/internal/setup.js +21 -0
  198. package/dist/esm/checkpointer/saver.d.ts +306 -0
  199. package/dist/esm/checkpointer/saver.js +52 -0
  200. package/dist/esm/checkpointer/types.d.ts +51 -0
  201. package/dist/esm/checkpointer/types.js +1 -0
  202. package/dist/esm/factory/factory.d.ts +154 -0
  203. package/dist/esm/factory/factory.js +133 -0
  204. package/dist/esm/factory/types.d.ts +76 -0
  205. package/dist/esm/factory/types.js +1 -0
  206. package/dist/esm/history/actions/add-messages.d.ts +51 -0
  207. package/dist/esm/history/actions/add-messages.js +14 -0
  208. package/dist/esm/history/actions/clear.d.ts +52 -0
  209. package/dist/esm/history/actions/clear.js +26 -0
  210. package/dist/esm/history/actions/get-messages.d.ts +60 -0
  211. package/dist/esm/history/actions/get-messages.js +55 -0
  212. package/dist/esm/history/actions/list-sessions.d.ts +55 -0
  213. package/dist/esm/history/actions/list-sessions.js +64 -0
  214. package/dist/esm/history/actions/reconcile-count.d.ts +49 -0
  215. package/dist/esm/history/actions/reconcile-count.js +5 -0
  216. package/dist/esm/history/chat-message-history.d.ts +267 -0
  217. package/dist/esm/history/chat-message-history.js +57 -0
  218. package/dist/esm/history/internal/append.d.ts +244 -0
  219. package/dist/esm/history/internal/append.js +259 -0
  220. package/dist/esm/history/internal/message-read.d.ts +84 -0
  221. package/dist/esm/history/internal/message-read.js +89 -0
  222. package/dist/esm/history/internal/parse.d.ts +153 -0
  223. package/dist/esm/history/internal/parse.js +105 -0
  224. package/dist/esm/history/internal/rows.d.ts +196 -0
  225. package/dist/esm/history/internal/rows.js +83 -0
  226. package/dist/esm/history/internal/session.d.ts +350 -0
  227. package/dist/esm/history/internal/session.js +285 -0
  228. package/dist/esm/history/internal/setup.d.ts +64 -0
  229. package/dist/esm/history/internal/setup.js +56 -0
  230. package/dist/esm/history/session-adapter.d.ts +112 -0
  231. package/dist/esm/history/session-adapter.js +34 -0
  232. package/dist/esm/history/types.d.ts +102 -0
  233. package/dist/esm/history/types.js +1 -0
  234. package/dist/esm/index.d.ts +53 -0
  235. package/dist/esm/index.js +10 -0
  236. package/dist/esm/shared/adapter.d.ts +146 -0
  237. package/dist/esm/shared/adapter.js +65 -0
  238. package/dist/esm/shared/clock.d.ts +52 -0
  239. package/dist/esm/shared/clock.js +9 -0
  240. package/dist/esm/shared/codec/codec.d.ts +336 -0
  241. package/dist/esm/shared/codec/codec.js +150 -0
  242. package/dist/esm/shared/codec/compression.d.ts +66 -0
  243. package/dist/esm/shared/codec/compression.js +40 -0
  244. package/dist/esm/shared/codec/json-serde.d.ts +80 -0
  245. package/dist/esm/shared/codec/json-serde.js +54 -0
  246. package/dist/esm/shared/codec/s3/client-types.d.ts +54 -0
  247. package/dist/esm/shared/codec/s3/client-types.js +3 -0
  248. package/dist/esm/shared/codec/s3/client.d.ts +63 -0
  249. package/dist/esm/shared/codec/s3/client.js +40 -0
  250. package/dist/esm/shared/codec/s3/config.d.ts +260 -0
  251. package/dist/esm/shared/codec/s3/config.js +79 -0
  252. package/dist/esm/shared/codec/s3/lifecycle.d.ts +220 -0
  253. package/dist/esm/shared/codec/s3/lifecycle.js +214 -0
  254. package/dist/esm/shared/codec/s3/offloader.d.ts +428 -0
  255. package/dist/esm/shared/codec/s3/offloader.js +278 -0
  256. package/dist/esm/shared/concurrency.d.ts +43 -0
  257. package/dist/esm/shared/concurrency.js +27 -0
  258. package/dist/esm/shared/dynamodb/abort.d.ts +47 -0
  259. package/dist/esm/shared/dynamodb/abort.js +12 -0
  260. package/dist/esm/shared/dynamodb/batch-write.d.ts +86 -0
  261. package/dist/esm/shared/dynamodb/batch-write.js +74 -0
  262. package/dist/esm/shared/dynamodb/cancellation.d.ts +124 -0
  263. package/dist/esm/shared/dynamodb/cancellation.js +30 -0
  264. package/dist/esm/shared/dynamodb/client.d.ts +177 -0
  265. package/dist/esm/shared/dynamodb/client.js +35 -0
  266. package/dist/esm/shared/dynamodb/idempotent-write.d.ts +596 -0
  267. package/dist/esm/shared/dynamodb/idempotent-write.js +153 -0
  268. package/dist/esm/shared/dynamodb/paginate.d.ts +111 -0
  269. package/dist/esm/shared/dynamodb/paginate.js +84 -0
  270. package/dist/esm/shared/dynamodb/partition-delete.d.ts +204 -0
  271. package/dist/esm/shared/dynamodb/partition-delete.js +171 -0
  272. package/dist/esm/shared/dynamodb/recency-index.d.ts +243 -0
  273. package/dist/esm/shared/dynamodb/recency-index.js +136 -0
  274. package/dist/esm/shared/dynamodb/retry.d.ts +317 -0
  275. package/dist/esm/shared/dynamodb/retry.js +180 -0
  276. package/dist/esm/shared/dynamodb/row-size.d.ts +33 -0
  277. package/dist/esm/shared/dynamodb/row-size.js +26 -0
  278. package/dist/esm/shared/dynamodb/table-schema.d.ts +199 -0
  279. package/dist/esm/shared/dynamodb/table-schema.js +43 -0
  280. package/dist/esm/shared/errors/base-error.d.ts +231 -0
  281. package/dist/esm/shared/errors/base-error.js +64 -0
  282. package/dist/esm/shared/errors/boundary.d.ts +86 -0
  283. package/dist/esm/shared/errors/boundary.js +54 -0
  284. package/dist/esm/shared/errors/classify.d.ts +206 -0
  285. package/dist/esm/shared/errors/classify.js +220 -0
  286. package/dist/esm/shared/errors/error-code.d.ts +95 -0
  287. package/dist/esm/shared/errors/error-code.js +24 -0
  288. package/dist/esm/shared/errors/errors.d.ts +233 -0
  289. package/dist/esm/shared/errors/errors.js +110 -0
  290. package/dist/esm/shared/logging/logger.d.ts +80 -0
  291. package/dist/esm/shared/logging/logger.js +25 -0
  292. package/dist/esm/shared/logging/redaction.d.ts +123 -0
  293. package/dist/esm/shared/logging/redaction.js +140 -0
  294. package/dist/esm/shared/logging/secret-patterns.d.ts +227 -0
  295. package/dist/esm/shared/logging/secret-patterns.js +83 -0
  296. package/dist/esm/shared/logging/truncate.d.ts +197 -0
  297. package/dist/esm/shared/logging/truncate.js +25 -0
  298. package/dist/esm/shared/options.d.ts +100 -0
  299. package/dist/esm/shared/options.js +1 -0
  300. package/dist/esm/shared/ulid.d.ts +80 -0
  301. package/dist/esm/shared/ulid.js +77 -0
  302. package/dist/esm/shared/validation/collaborators.d.ts +160 -0
  303. package/dist/esm/shared/validation/collaborators.js +70 -0
  304. package/dist/esm/shared/validation/option-shape.d.ts +91 -0
  305. package/dist/esm/shared/validation/option-shape.js +24 -0
  306. package/dist/esm/shared/validation/options.d.ts +145 -0
  307. package/dist/esm/shared/validation/options.js +156 -0
  308. package/dist/esm/shared/validation/primitives.d.ts +292 -0
  309. package/dist/esm/shared/validation/primitives.js +100 -0
  310. package/dist/esm/shared/validation/ttl.d.ts +94 -0
  311. package/dist/esm/shared/validation/ttl.js +46 -0
  312. package/dist/esm/store/actions/list-namespaces.d.ts +79 -0
  313. package/dist/esm/store/actions/list-namespaces.js +86 -0
  314. package/dist/esm/store/actions/put.d.ts +43 -0
  315. package/dist/esm/store/actions/put.js +46 -0
  316. package/dist/esm/store/actions/reconcile-vector-index.d.ts +38 -0
  317. package/dist/esm/store/actions/reconcile-vector-index.js +10 -0
  318. package/dist/esm/store/actions/search.d.ts +38 -0
  319. package/dist/esm/store/actions/search.js +23 -0
  320. package/dist/esm/store/internal/batch-plan.d.ts +56 -0
  321. package/dist/esm/store/internal/batch-plan.js +28 -0
  322. package/dist/esm/store/internal/filter.d.ts +43 -0
  323. package/dist/esm/store/internal/filter.js +60 -0
  324. package/dist/esm/store/internal/get-item.d.ts +77 -0
  325. package/dist/esm/store/internal/get-item.js +54 -0
  326. package/dist/esm/store/internal/item-write.d.ts +270 -0
  327. package/dist/esm/store/internal/item-write.js +173 -0
  328. package/dist/esm/store/internal/parse.d.ts +230 -0
  329. package/dist/esm/store/internal/parse.js +169 -0
  330. package/dist/esm/store/internal/rows.d.ts +359 -0
  331. package/dist/esm/store/internal/rows.js +147 -0
  332. package/dist/esm/store/internal/semantic-search.d.ts +168 -0
  333. package/dist/esm/store/internal/semantic-search.js +200 -0
  334. package/dist/esm/store/internal/setup.d.ts +96 -0
  335. package/dist/esm/store/internal/setup.js +98 -0
  336. package/dist/esm/store/internal/table-search.d.ts +100 -0
  337. package/dist/esm/store/internal/table-search.js +119 -0
  338. package/dist/esm/store/internal/vector-index.d.ts +258 -0
  339. package/dist/esm/store/internal/vector-index.js +256 -0
  340. package/dist/esm/store/store.d.ts +329 -0
  341. package/dist/esm/store/store.js +93 -0
  342. package/dist/esm/store/types.d.ts +111 -0
  343. package/dist/esm/store/types.js +1 -0
  344. package/dist/esm/store/vector-backend.d.ts +104 -0
  345. package/dist/esm/store/vector-backend.js +1 -0
  346. package/package.json +68 -46
  347. package/dist/checkpointer/actions/delete-thread.d.ts +0 -10
  348. package/dist/checkpointer/actions/delete-thread.js +0 -38
  349. package/dist/checkpointer/actions/get-tuple.d.ts +0 -11
  350. package/dist/checkpointer/actions/get-tuple.js +0 -25
  351. package/dist/checkpointer/actions/list.d.ts +0 -20
  352. package/dist/checkpointer/actions/list.js +0 -113
  353. package/dist/checkpointer/actions/put-writes.d.ts +0 -15
  354. package/dist/checkpointer/actions/put-writes.js +0 -62
  355. package/dist/checkpointer/actions/put.d.ts +0 -17
  356. package/dist/checkpointer/actions/put.js +0 -73
  357. package/dist/checkpointer/internal/assemble.d.ts +0 -17
  358. package/dist/checkpointer/internal/assemble.js +0 -38
  359. package/dist/checkpointer/internal/checkpoint-write-verify.d.ts +0 -24
  360. package/dist/checkpointer/internal/checkpoint-write-verify.js +0 -67
  361. package/dist/checkpointer/internal/configurable.d.ts +0 -12
  362. package/dist/checkpointer/internal/configurable.js +0 -24
  363. package/dist/checkpointer/internal/fetch.d.ts +0 -19
  364. package/dist/checkpointer/internal/fetch.js +0 -88
  365. package/dist/checkpointer/internal/filter-match.d.ts +0 -13
  366. package/dist/checkpointer/internal/filter-match.js +0 -15
  367. package/dist/checkpointer/internal/item-reader.d.ts +0 -66
  368. package/dist/checkpointer/internal/item-reader.js +0 -113
  369. package/dist/checkpointer/internal/item-writer.d.ts +0 -35
  370. package/dist/checkpointer/internal/item-writer.js +0 -107
  371. package/dist/checkpointer/internal/keys.d.ts +0 -41
  372. package/dist/checkpointer/internal/keys.js +0 -117
  373. package/dist/checkpointer/internal/list-scope.d.ts +0 -61
  374. package/dist/checkpointer/internal/list-scope.js +0 -108
  375. package/dist/checkpointer/internal/pending-sends.d.ts +0 -13
  376. package/dist/checkpointer/internal/pending-sends.js +0 -29
  377. package/dist/checkpointer/internal/query.d.ts +0 -21
  378. package/dist/checkpointer/internal/query.js +0 -42
  379. package/dist/checkpointer/internal/regular-write.d.ts +0 -28
  380. package/dist/checkpointer/internal/regular-write.js +0 -66
  381. package/dist/checkpointer/internal/setup.d.ts +0 -33
  382. package/dist/checkpointer/internal/setup.js +0 -38
  383. package/dist/checkpointer/internal/special-write-cas.d.ts +0 -29
  384. package/dist/checkpointer/internal/special-write-cas.js +0 -104
  385. package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -23
  386. package/dist/checkpointer/internal/special-write-cleanup.js +0 -50
  387. package/dist/checkpointer/internal/special-write-verify.d.ts +0 -53
  388. package/dist/checkpointer/internal/special-write-verify.js +0 -80
  389. package/dist/checkpointer/internal/stored-channels.d.ts +0 -31
  390. package/dist/checkpointer/internal/stored-channels.js +0 -70
  391. package/dist/checkpointer/internal/validation.d.ts +0 -18
  392. package/dist/checkpointer/internal/validation.js +0 -40
  393. package/dist/checkpointer/internal/write-guard.d.ts +0 -20
  394. package/dist/checkpointer/internal/write-guard.js +0 -48
  395. package/dist/checkpointer/internal/write-index.d.ts +0 -36
  396. package/dist/checkpointer/internal/write-index.js +0 -41
  397. package/dist/checkpointer/saver.d.ts +0 -70
  398. package/dist/checkpointer/saver.js +0 -105
  399. package/dist/checkpointer/types.d.ts +0 -58
  400. package/dist/factory/factory.d.ts +0 -40
  401. package/dist/factory/factory.js +0 -87
  402. package/dist/history/actions/add-messages.d.ts +0 -15
  403. package/dist/history/actions/add-messages.js +0 -77
  404. package/dist/history/actions/clear.d.ts +0 -10
  405. package/dist/history/actions/clear.js +0 -34
  406. package/dist/history/actions/get-messages.d.ts +0 -17
  407. package/dist/history/actions/get-messages.js +0 -79
  408. package/dist/history/actions/list-sessions.d.ts +0 -13
  409. package/dist/history/actions/list-sessions.js +0 -53
  410. package/dist/history/actions/reconcile-count.d.ts +0 -12
  411. package/dist/history/actions/reconcile-count.js +0 -64
  412. package/dist/history/chat-message-history.d.ts +0 -73
  413. package/dist/history/chat-message-history.js +0 -111
  414. package/dist/history/internal/append-saga.d.ts +0 -25
  415. package/dist/history/internal/append-saga.js +0 -79
  416. package/dist/history/internal/compensation.d.ts +0 -25
  417. package/dist/history/internal/compensation.js +0 -92
  418. package/dist/history/internal/item-mapper.d.ts +0 -9
  419. package/dist/history/internal/item-mapper.js +0 -27
  420. package/dist/history/internal/keys.d.ts +0 -16
  421. package/dist/history/internal/keys.js +0 -48
  422. package/dist/history/internal/message-chunker.d.ts +0 -13
  423. package/dist/history/internal/message-chunker.js +0 -67
  424. package/dist/history/internal/message-transaction.d.ts +0 -25
  425. package/dist/history/internal/message-transaction.js +0 -61
  426. package/dist/history/internal/message-window.d.ts +0 -17
  427. package/dist/history/internal/message-window.js +0 -49
  428. package/dist/history/internal/query.d.ts +0 -23
  429. package/dist/history/internal/query.js +0 -39
  430. package/dist/history/internal/session-count.d.ts +0 -47
  431. package/dist/history/internal/session-count.js +0 -115
  432. package/dist/history/internal/session-title.d.ts +0 -19
  433. package/dist/history/internal/session-title.js +0 -43
  434. package/dist/history/internal/session-update.d.ts +0 -27
  435. package/dist/history/internal/session-update.js +0 -69
  436. package/dist/history/internal/setup.d.ts +0 -31
  437. package/dist/history/internal/setup.js +0 -43
  438. package/dist/history/internal/title-generator.d.ts +0 -12
  439. package/dist/history/internal/title-generator.js +0 -41
  440. package/dist/history/internal/ttl-anchor.d.ts +0 -24
  441. package/dist/history/internal/ttl-anchor.js +0 -38
  442. package/dist/history/internal/validation.d.ts +0 -25
  443. package/dist/history/internal/validation.js +0 -53
  444. package/dist/history/session-adapter.d.ts +0 -29
  445. package/dist/history/session-adapter.js +0 -35
  446. package/dist/history/types.d.ts +0 -69
  447. package/dist/index.d.ts +0 -29
  448. package/dist/index.js +0 -32
  449. package/dist/shared/clock.d.ts +0 -8
  450. package/dist/shared/clock.js +0 -16
  451. package/dist/shared/codec/codec.d.ts +0 -53
  452. package/dist/shared/codec/codec.js +0 -66
  453. package/dist/shared/codec/compression.d.ts +0 -24
  454. package/dist/shared/codec/compression.js +0 -48
  455. package/dist/shared/codec/descriptor-keys.d.ts +0 -12
  456. package/dist/shared/codec/descriptor-keys.js +0 -14
  457. package/dist/shared/codec/encode.d.ts +0 -13
  458. package/dist/shared/codec/encode.js +0 -43
  459. package/dist/shared/codec/json-serde.d.ts +0 -7
  460. package/dist/shared/codec/json-serde.js +0 -17
  461. package/dist/shared/codec/payload-loss.d.ts +0 -12
  462. package/dist/shared/codec/payload-loss.js +0 -38
  463. package/dist/shared/codec/s3/adapter-config.d.ts +0 -13
  464. package/dist/shared/codec/s3/adapter-config.js +0 -22
  465. package/dist/shared/codec/s3/bounded-body.d.ts +0 -14
  466. package/dist/shared/codec/s3/bounded-body.js +0 -47
  467. package/dist/shared/codec/s3/client.d.ts +0 -18
  468. package/dist/shared/codec/s3/client.js +0 -46
  469. package/dist/shared/codec/s3/config.d.ts +0 -51
  470. package/dist/shared/codec/s3/config.js +0 -58
  471. package/dist/shared/codec/s3/delete.d.ts +0 -7
  472. package/dist/shared/codec/s3/delete.js +0 -28
  473. package/dist/shared/codec/s3/key-scope.d.ts +0 -23
  474. package/dist/shared/codec/s3/key-scope.js +0 -44
  475. package/dist/shared/codec/s3/lifecycle.d.ts +0 -14
  476. package/dist/shared/codec/s3/lifecycle.js +0 -63
  477. package/dist/shared/codec/s3/offloader.d.ts +0 -44
  478. package/dist/shared/codec/s3/offloader.js +0 -118
  479. package/dist/shared/codec/s3/orphans.d.ts +0 -23
  480. package/dist/shared/codec/s3/orphans.js +0 -71
  481. package/dist/shared/codec/s3/read-write.d.ts +0 -18
  482. package/dist/shared/codec/s3/read-write.js +0 -51
  483. package/dist/shared/codec/s3/retry.d.ts +0 -5
  484. package/dist/shared/codec/s3/retry.js +0 -22
  485. package/dist/shared/concurrency.d.ts +0 -6
  486. package/dist/shared/constants.d.ts +0 -112
  487. package/dist/shared/constants.js +0 -115
  488. package/dist/shared/dynamodb/abort.d.ts +0 -9
  489. package/dist/shared/dynamodb/abort.js +0 -27
  490. package/dist/shared/dynamodb/backoff.d.ts +0 -15
  491. package/dist/shared/dynamodb/backoff.js +0 -48
  492. package/dist/shared/dynamodb/batch-write.d.ts +0 -22
  493. package/dist/shared/dynamodb/batch-write.js +0 -53
  494. package/dist/shared/dynamodb/cancellation.d.ts +0 -6
  495. package/dist/shared/dynamodb/cancellation.js +0 -7
  496. package/dist/shared/dynamodb/client.d.ts +0 -28
  497. package/dist/shared/dynamodb/conditional-put.d.ts +0 -67
  498. package/dist/shared/dynamodb/conditional-put.js +0 -76
  499. package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -21
  500. package/dist/shared/dynamodb/drain-unprocessed.js +0 -43
  501. package/dist/shared/dynamodb/expiry.d.ts +0 -16
  502. package/dist/shared/dynamodb/expiry.js +0 -29
  503. package/dist/shared/dynamodb/paginate-core.d.ts +0 -24
  504. package/dist/shared/dynamodb/paginate-core.js +0 -82
  505. package/dist/shared/dynamodb/paginate.d.ts +0 -14
  506. package/dist/shared/dynamodb/paginate.js +0 -19
  507. package/dist/shared/dynamodb/partition-delete.d.ts +0 -39
  508. package/dist/shared/dynamodb/partition-delete.js +0 -71
  509. package/dist/shared/dynamodb/retry-classifier.d.ts +0 -17
  510. package/dist/shared/dynamodb/retry-classifier.js +0 -118
  511. package/dist/shared/dynamodb/retry-policy.d.ts +0 -26
  512. package/dist/shared/dynamodb/retry-policy.js +0 -22
  513. package/dist/shared/dynamodb/retry.d.ts +0 -31
  514. package/dist/shared/dynamodb/retry.js +0 -57
  515. package/dist/shared/dynamodb/scan.d.ts +0 -14
  516. package/dist/shared/dynamodb/scan.js +0 -19
  517. package/dist/shared/dynamodb/types.d.ts +0 -23
  518. package/dist/shared/errors/base-error.d.ts +0 -30
  519. package/dist/shared/errors/base-error.js +0 -27
  520. package/dist/shared/errors/boundary.d.ts +0 -18
  521. package/dist/shared/errors/boundary.js +0 -46
  522. package/dist/shared/errors/error-code.d.ts +0 -13
  523. package/dist/shared/errors/errors.d.ts +0 -68
  524. package/dist/shared/errors/errors.js +0 -114
  525. package/dist/shared/errors/upstream-error.d.ts +0 -16
  526. package/dist/shared/errors/upstream-error.js +0 -27
  527. package/dist/shared/errors/wrap-error.d.ts +0 -7
  528. package/dist/shared/errors/wrap-error.js +0 -15
  529. package/dist/shared/logging/logger.d.ts +0 -18
  530. package/dist/shared/logging/logger.js +0 -15
  531. package/dist/shared/logging/redaction-walk.d.ts +0 -23
  532. package/dist/shared/logging/redaction-walk.js +0 -112
  533. package/dist/shared/logging/redaction.d.ts +0 -39
  534. package/dist/shared/logging/redaction.js +0 -75
  535. package/dist/shared/logging/secret-patterns.d.ts +0 -92
  536. package/dist/shared/logging/secret-patterns.js +0 -133
  537. package/dist/shared/options.d.ts +0 -37
  538. package/dist/shared/ulid.d.ts +0 -23
  539. package/dist/shared/validation/options.d.ts +0 -8
  540. package/dist/shared/validation/options.js +0 -90
  541. package/dist/shared/validation/primitives.d.ts +0 -29
  542. package/dist/shared/validation/primitives.js +0 -82
  543. package/dist/shared/validation/ttl.d.ts +0 -28
  544. package/dist/shared/validation/ttl.js +0 -52
  545. package/dist/store/actions/get.d.ts +0 -13
  546. package/dist/store/actions/get.js +0 -73
  547. package/dist/store/actions/list-namespaces.d.ts +0 -8
  548. package/dist/store/actions/list-namespaces.js +0 -59
  549. package/dist/store/actions/put.d.ts +0 -10
  550. package/dist/store/actions/put.js +0 -96
  551. package/dist/store/actions/reconcile-vector-index.d.ts +0 -18
  552. package/dist/store/actions/reconcile-vector-index.js +0 -26
  553. package/dist/store/actions/search.d.ts +0 -9
  554. package/dist/store/actions/search.js +0 -34
  555. package/dist/store/internal/backend-search.d.ts +0 -4
  556. package/dist/store/internal/backend-search.js +0 -74
  557. package/dist/store/internal/batch-plan.d.ts +0 -11
  558. package/dist/store/internal/batch-plan.js +0 -52
  559. package/dist/store/internal/candidates.d.ts +0 -23
  560. package/dist/store/internal/candidates.js +0 -94
  561. package/dist/store/internal/filter.d.ts +0 -9
  562. package/dist/store/internal/filter.js +0 -85
  563. package/dist/store/internal/index-reconcile.d.ts +0 -21
  564. package/dist/store/internal/index-reconcile.js +0 -118
  565. package/dist/store/internal/index-sync.d.ts +0 -10
  566. package/dist/store/internal/index-sync.js +0 -25
  567. package/dist/store/internal/item-mapper.d.ts +0 -27
  568. package/dist/store/internal/item-mapper.js +0 -61
  569. package/dist/store/internal/keys.d.ts +0 -17
  570. package/dist/store/internal/keys.js +0 -41
  571. package/dist/store/internal/namespace-match.d.ts +0 -11
  572. package/dist/store/internal/namespace-match.js +0 -40
  573. package/dist/store/internal/option-validation.d.ts +0 -13
  574. package/dist/store/internal/option-validation.js +0 -77
  575. package/dist/store/internal/overwrite-swap.d.ts +0 -32
  576. package/dist/store/internal/overwrite-swap.js +0 -68
  577. package/dist/store/internal/persist.d.ts +0 -28
  578. package/dist/store/internal/persist.js +0 -64
  579. package/dist/store/internal/query.d.ts +0 -11
  580. package/dist/store/internal/query.js +0 -48
  581. package/dist/store/internal/ranker.d.ts +0 -18
  582. package/dist/store/internal/ranker.js +0 -39
  583. package/dist/store/internal/read-existing.d.ts +0 -23
  584. package/dist/store/internal/read-existing.js +0 -41
  585. package/dist/store/internal/score-direction.d.ts +0 -31
  586. package/dist/store/internal/score-direction.js +0 -38
  587. package/dist/store/internal/search-filter.d.ts +0 -3
  588. package/dist/store/internal/search-filter.js +0 -10
  589. package/dist/store/internal/semantic-search.d.ts +0 -34
  590. package/dist/store/internal/semantic-search.js +0 -87
  591. package/dist/store/internal/setup.d.ts +0 -36
  592. package/dist/store/internal/setup.js +0 -40
  593. package/dist/store/internal/text-path.d.ts +0 -17
  594. package/dist/store/internal/validation.d.ts +0 -18
  595. package/dist/store/internal/validation.js +0 -51
  596. package/dist/store/internal/write-verify.d.ts +0 -42
  597. package/dist/store/internal/write-verify.js +0 -71
  598. package/dist/store/store.d.ts +0 -61
  599. package/dist/store/store.js +0 -107
  600. package/dist/store/types.d.ts +0 -50
  601. package/dist/store/types.js +0 -2
  602. package/dist/store/vector-backend.d.ts +0 -43
  603. package/dist/store/vector-backend.js +0 -2
  604. /package/dist/{checkpointer → cjs/checkpointer}/types.js +0 -0
  605. /package/dist/{factory → cjs/factory}/types.js +0 -0
  606. /package/dist/{history → cjs/history}/types.js +0 -0
  607. /package/dist/{shared → cjs/shared}/options.js +0 -0
  608. /package/dist/{shared/dynamodb → cjs/store}/types.js +0 -0
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteStoreItem = deleteStoreItem;
4
+ exports.assertRowFits = assertRowFits;
5
+ exports.persistRow = persistRow;
6
+ exports.putWithRevisionSwap = putWithRevisionSwap;
7
+ exports.isRetryExhausted = isRetryExhausted;
8
+ exports.verifyWriteLanded = verifyWriteLanded;
9
+ const codec_js_1 = require("../../shared/codec/codec.js");
10
+ const offloader_js_1 = require("../../shared/codec/s3/offloader.js");
11
+ const idempotent_write_js_1 = require("../../shared/dynamodb/idempotent-write.js");
12
+ const retry_js_1 = require("../../shared/dynamodb/retry.js");
13
+ const row_size_js_1 = require("../../shared/dynamodb/row-size.js");
14
+ const table_schema_js_1 = require("../../shared/dynamodb/table-schema.js");
15
+ const base_error_js_1 = require("../../shared/errors/base-error.js");
16
+ const error_code_js_1 = require("../../shared/errors/error-code.js");
17
+ const errors_js_1 = require("../../shared/errors/errors.js");
18
+ const rows_js_1 = require("./rows.js");
19
+ const vector_index_js_1 = require("./vector-index.js");
20
+ async function repinOrResolve(context, key, error) {
21
+ if ((0, idempotent_write_js_1.isConditionalCheckFailed)(error)) {
22
+ const rejected = (0, idempotent_write_js_1.rejectedRow)(error);
23
+ return rejected === undefined ? undefined : (0, rows_js_1.existingFrom)(rejected);
24
+ }
25
+ if (isRetryExhausted(error) && (await (0, idempotent_write_js_1.isRowAbsent)(context, key)))
26
+ return undefined;
27
+ throw error;
28
+ }
29
+ async function removeObservedRow(context, key, existing) {
30
+ let observed = existing;
31
+ for (let attempt = 1; attempt <= idempotent_write_js_1.OVERWRITE_CAS_MAX_ATTEMPTS; attempt++) {
32
+ try {
33
+ await (0, idempotent_write_js_1.deleteIdempotently)(context, key, (0, idempotent_write_js_1.revisionGuard)(rows_js_1.REVISION_ATTRIBUTE, observed));
34
+ return observed;
35
+ }
36
+ catch (error) {
37
+ const repinned = await repinOrResolve(context, key, error);
38
+ if (repinned === undefined)
39
+ return observed;
40
+ observed = repinned;
41
+ }
42
+ }
43
+ return undefined;
44
+ }
45
+ async function deleteStoreItem(context, address) {
46
+ const key = (0, rows_js_1.itemRowKey)(address);
47
+ const existing = await (0, rows_js_1.readExisting)(context, key);
48
+ const released = existing.exists ? await removeObservedRow(context, key, existing) : existing;
49
+ if (released === undefined) {
50
+ context.logger.warn('store.delete: compare-and-swap exhausted; the item was not deleted', {
51
+ namespace: address.namespace,
52
+ key: address.key,
53
+ attempts: idempotent_write_js_1.OVERWRITE_CAS_MAX_ATTEMPTS,
54
+ });
55
+ }
56
+ await (0, vector_index_js_1.dropVectorWhenGone)(context, address);
57
+ if (context.offloader && released?.value) {
58
+ await (0, offloader_js_1.cleanUpS3Orphans)(context.offloader, {
59
+ keys: (0, codec_js_1.collectS3Keys)([released.value]),
60
+ operation: 'store.delete',
61
+ logger: context.logger,
62
+ scope: [...address.namespace, address.key],
63
+ });
64
+ }
65
+ }
66
+ async function cleanUp(context, release, label, scope) {
67
+ if (!context.offloader || !release)
68
+ return;
69
+ await (0, offloader_js_1.cleanUpS3Orphans)(context.offloader, {
70
+ keys: (0, codec_js_1.collectS3Keys)([release]),
71
+ operation: label,
72
+ logger: context.logger,
73
+ ...(scope === undefined ? {} : { scope }),
74
+ });
75
+ }
76
+ function assertRowFits(record) {
77
+ const bytes = (0, row_size_js_1.rowSizeBytes)(record);
78
+ if (bytes <= row_size_js_1.MAX_ROW_BYTES)
79
+ return;
80
+ const { embeddings, ...bare } = record;
81
+ const vectorsOverflow = embeddings !== undefined && (0, row_size_js_1.rowSizeBytes)(bare) <= row_size_js_1.MAX_ROW_BYTES;
82
+ throw (0, errors_js_1.validationError)(vectorsOverflow
83
+ ? `the item's ${embeddings.length} inline vectors make its row ${bytes} bytes, over ` +
84
+ `DynamoDB's ${row_size_js_1.MAX_ROW_BYTES}-byte item limit; index fewer fields, embed with fewer ` +
85
+ 'dimensions, or configure a vectorBackend'
86
+ : `the item's row would be ${bytes} bytes, over DynamoDB's ${row_size_js_1.MAX_ROW_BYTES}-byte item ` +
87
+ 'limit; configure s3 offloading or store a smaller value', vectorsOverflow ? 'index' : 'value');
88
+ }
89
+ async function persistRow(context, record, existing) {
90
+ try {
91
+ assertRowFits(record);
92
+ }
93
+ catch (error) {
94
+ await cleanUp(context, record.value, 'store.put');
95
+ throw error;
96
+ }
97
+ let superseded;
98
+ if (context.offloader) {
99
+ const swap = await putWithRevisionSwap(context, record, existing);
100
+ superseded = swap.ok
101
+ ? swap.superseded
102
+ : await settleFailedPut(context, record, swap.reason, swap.pinned);
103
+ }
104
+ else {
105
+ try {
106
+ await (0, retry_js_1.withDynamoDBRetry)((request) => context.client.put({ TableName: context.tableName, Item: record }, request), context.retry);
107
+ superseded = existing;
108
+ }
109
+ catch (error) {
110
+ superseded = await settleFailedPut(context, record, error, existing);
111
+ }
112
+ }
113
+ await cleanUp(context, superseded.value, 'store.put.overwrite', [
114
+ ...record.namespace,
115
+ record.key,
116
+ ]);
117
+ }
118
+ async function settleFailedPut(context, record, error, pinned) {
119
+ const verdict = (0, idempotent_write_js_1.settledVerdict)(await verifyWriteLanded(context, record), error);
120
+ if (verdict === 'landed')
121
+ return pinned;
122
+ if (verdict === 'not-landed')
123
+ await cleanUp(context, record.value, 'store.put');
124
+ throw error;
125
+ }
126
+ async function put(context, record, observed) {
127
+ const guard = observed ? (0, idempotent_write_js_1.revisionGuard)(rows_js_1.REVISION_ATTRIBUTE, observed) : undefined;
128
+ await (0, idempotent_write_js_1.commitRow)(context, record, record.value, { guard });
129
+ }
130
+ async function putWithRevisionSwap(context, record, existing) {
131
+ let observed = existing;
132
+ for (let attempt = 1; attempt <= idempotent_write_js_1.OVERWRITE_CAS_MAX_ATTEMPTS; attempt++) {
133
+ const attempted = observed;
134
+ try {
135
+ await put(context, record, attempted);
136
+ return { ok: true, superseded: attempted };
137
+ }
138
+ catch (error) {
139
+ const rejection = error;
140
+ if (!(0, idempotent_write_js_1.isConditionalCheckFailed)(rejection)) {
141
+ return { ok: false, reason: rejection, pinned: attempted };
142
+ }
143
+ try {
144
+ const rejected = (0, idempotent_write_js_1.rejectedRow)(rejection);
145
+ observed = rejected
146
+ ? (0, rows_js_1.existingFrom)(rejected)
147
+ : await (0, rows_js_1.readExisting)(context, (0, table_schema_js_1.rowKeyOf)(record));
148
+ }
149
+ catch (readError) {
150
+ return { ok: false, reason: readError, pinned: attempted };
151
+ }
152
+ if (record.rev !== undefined && observed.revision === record.rev) {
153
+ return { ok: true, superseded: attempted };
154
+ }
155
+ record.createdAt = (0, rows_js_1.isLiveRow)(observed)
156
+ ? (observed.createdAt ?? record.createdAt)
157
+ : record.updatedAt;
158
+ }
159
+ }
160
+ context.logger.warn('store.put: compare-and-swap exhausted; overwriting unconditionally, which can orphan one ' +
161
+ 'S3 object under a concurrent put (reclaimed by ensureS3LifecycleRule)', { namespace: record.namespace, key: record.key, attempts: idempotent_write_js_1.OVERWRITE_CAS_MAX_ATTEMPTS });
162
+ try {
163
+ await put(context, record);
164
+ return { ok: true, superseded: observed };
165
+ }
166
+ catch (error) {
167
+ return { ok: false, reason: error, pinned: observed };
168
+ }
169
+ }
170
+ function isRetryExhausted(error) {
171
+ return (0, base_error_js_1.hasErrorCode)(error, error_code_js_1.ErrorCode.RETRY_EXHAUSTED);
172
+ }
173
+ async function verifyWriteLanded(context, record) {
174
+ const { verdict } = await (0, idempotent_write_js_1.verifyRow)(context, {
175
+ key: (0, table_schema_js_1.rowKeyOf)(record),
176
+ kind: 'attribute',
177
+ attribute: rows_js_1.REVISION_ATTRIBUTE,
178
+ expected: record.rev,
179
+ });
180
+ return verdict;
181
+ }
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Hides what a well-formed store operation is (record 21).
3
+ *
4
+ * Every namespace, key, address, search, listing and batch is checked here,
5
+ * once, into branded types only these parsers build, and each operation's
6
+ * kind is decided from its shape here and nowhere else. Which of upstream's
7
+ * own rules apply — no `.` in a label and no `"langgraph"` root, for `put()`
8
+ * alone — and every default a caller may leave out are settled here too, so
9
+ * no later step checks again.
10
+ */
11
+ import type { BaseStore, ListNamespacesOperation, Operation, PutOperation, SearchOperation } from '@langchain/langgraph-checkpoint';
12
+ import { type PageLimit } from '../../shared/validation/primitives.js';
13
+ import type { ListNamespacesOptions } from '../types.js';
14
+ import type { JsonValue } from './filter.js';
15
+ declare const namespaceBrand: unique symbol;
16
+ declare const namespacePrefixBrand: unique symbol;
17
+ declare const storeAddressBrand: unique symbol;
18
+ /**
19
+ * A namespace checked as the partition and sort-key segments it becomes:
20
+ * non-empty, every label a well-formed identifier. Built only by
21
+ * {@link parseNamespace}, as a copy no caller holds. Mutable in type only so it
22
+ * still satisfies the public `VectorBackend` signatures; nothing writes to it.
23
+ */
24
+ export type Namespace = string[] & {
25
+ readonly [namespaceBrand]: true;
26
+ };
27
+ /** A namespace prefix: like a {@link Namespace}, but possibly empty. Built only by {@link parseNamespacePrefix}. */
28
+ export type NamespacePrefix = string[] & {
29
+ readonly [namespacePrefixBrand]: true;
30
+ };
31
+ /**
32
+ * An item's address — namespace and key — checked together, because the
33
+ * DynamoDB sort-key cap is a property of the pair. Built only by
34
+ * {@link parseStoreAddress}.
35
+ */
36
+ export type StoreAddress = {
37
+ readonly namespace: Namespace;
38
+ readonly key: string;
39
+ } & {
40
+ readonly [storeAddressBrand]: true;
41
+ };
42
+ /**
43
+ * Parse a namespace prefix.
44
+ *
45
+ * Accepts: `value` — anything; an array of labels a namespace can hold,
46
+ * possibly empty, which spans every namespace. `field` — the argument the
47
+ * caller set (`namespacePrefix`, or `prefix`/`suffix` for a match condition's
48
+ * path), named on a refusal.
49
+ *
50
+ * Returns: a copy of the labels, as a {@link NamespacePrefix}. A prefix no
51
+ * stored namespace could ever match is refused rather than answered with a
52
+ * silent empty page: a malformed label, or labels past the first that compose
53
+ * more sort key than DynamoDB allows a row to carry before any key — every
54
+ * label legal on its own, and still no item under it.
55
+ *
56
+ * Throws: `VALIDATION` naming `field` for a non-array or a path too wide for
57
+ * any sort key, or `<field> element` for a malformed label.
58
+ */
59
+ export declare function parseNamespacePrefix(value: unknown, field: string): NamespacePrefix;
60
+ /**
61
+ * Parse a namespace.
62
+ *
63
+ * Accepts: `value` — anything; a non-empty array of labels. `field` — defaults
64
+ * to `namespace`; `reconcileVectorIndex` passes `namespacePrefix`, whose prefix
65
+ * must not be empty.
66
+ *
67
+ * Returns: a copy of the labels, as a {@link Namespace}.
68
+ *
69
+ * Throws: `VALIDATION` naming `field` for a non-array or an empty one, or
70
+ * `<field> element` for a malformed label.
71
+ */
72
+ export declare function parseNamespace(value: unknown, field?: string): Namespace;
73
+ /**
74
+ * Parse an item's address: the namespace and key together, because the
75
+ * DynamoDB sort-key cap is a property of the pair. A deep namespace of legal
76
+ * segments can still compose an illegal sort key, which is why the
77
+ * composition is checked and not just the parts.
78
+ *
79
+ * Accepts: `namespace` — as {@link parseNamespace}. `key` — a well-formed
80
+ * identifier.
81
+ *
82
+ * Returns: the address, as a {@link StoreAddress}.
83
+ *
84
+ * Throws: `VALIDATION` naming `namespace` (or `namespace element`), then `key`,
85
+ * then `sortKey` when the two compose a sort key over DynamoDB's cap.
86
+ */
87
+ export declare function parseStoreAddress(namespace: unknown, key: unknown): StoreAddress;
88
+ /** Read one item. */
89
+ export interface ParsedGet {
90
+ readonly kind: 'get';
91
+ readonly address: StoreAddress;
92
+ }
93
+ /** Store one item. */
94
+ export interface ParsedPut {
95
+ readonly kind: 'put';
96
+ readonly address: StoreAddress;
97
+ readonly value: Record<string, JsonValue>;
98
+ /** `false` indexes nothing, a list the fields named, `undefined` the configured fields. */
99
+ readonly index: false | string[] | undefined;
100
+ }
101
+ /** Delete one item: a put whose value is `null`. */
102
+ export interface ParsedDelete {
103
+ readonly kind: 'delete';
104
+ readonly address: StoreAddress;
105
+ }
106
+ /** Search under a prefix, its page and its defaults resolved. */
107
+ export interface ParsedSearch {
108
+ readonly kind: 'search';
109
+ readonly namespacePrefix: NamespacePrefix;
110
+ readonly filter: Record<string, JsonValue> | undefined;
111
+ readonly query: string | undefined;
112
+ readonly offset: number;
113
+ readonly limit: PageLimit;
114
+ }
115
+ /** One match condition of a namespace listing. */
116
+ export interface ParsedMatchCondition {
117
+ readonly matchType: 'prefix' | 'suffix';
118
+ readonly path: NamespacePrefix;
119
+ }
120
+ /** List namespaces. */
121
+ export interface ParsedList {
122
+ readonly kind: 'list';
123
+ readonly matchConditions: ParsedMatchCondition[] | undefined;
124
+ readonly maxDepth: number | undefined;
125
+ readonly offset: number;
126
+ readonly limit: PageLimit;
127
+ }
128
+ /**
129
+ * One store operation, parsed. The kind is decided here, once, from the shape
130
+ * upstream's `Operation` union gives it — every other step switches on `kind`
131
+ * instead of asking the shape again.
132
+ */
133
+ export type ParsedOperation = ParsedGet | ParsedPut | ParsedDelete | ParsedSearch | ParsedList;
134
+ /**
135
+ * Parse a search's options against a prefix already parsed.
136
+ *
137
+ * Accepts: `namespacePrefix` — parsed by {@link parseNamespacePrefix}, which
138
+ * `store.search` does first so a malformed prefix is named before a malformed
139
+ * option. `op.filter` — an object when given. `op.query` — a string when given.
140
+ * `op.offset` — an integer of at least 0, `0` when absent; it carries no
141
+ * ceiling of its own, since it selects where a page starts rather than how
142
+ * much one holds, and what it can make a read walk is already bounded by
143
+ * `maxScanItems`. `op.limit` — 0 to the page ceiling, 10 when absent; `null` is
144
+ * not absent, so `limit: null` is refused rather than read as the default.
145
+ * `0` asks for no items and is answered as such, not refused — a page, not a
146
+ * conversation window, which is the one place this package refuses zero.
147
+ *
148
+ * Returns: the search, its defaults applied.
149
+ *
150
+ * Throws: `VALIDATION` naming `filter`, `query`, `offset` or `limit`, in that
151
+ * order.
152
+ */
153
+ export declare function parseSearch(namespacePrefix: NamespacePrefix, op: Pick<SearchOperation, 'filter' | 'limit' | 'offset' | 'query'>): ParsedSearch;
154
+ /**
155
+ * Parse a namespace-listing operation.
156
+ *
157
+ * Accepts: `op.offset` — an integer of at least 0. `op.limit` — 0 to the page
158
+ * ceiling. `op.maxDepth` — an integer of at least 1 when given: left
159
+ * unchecked, a negative value inverts truncation via `Array.prototype.slice(0,
160
+ * -n)`, which drops the *last* n elements rather than erroring, and 0
161
+ * truncates every namespace to the same empty one. `op.matchConditions` — an
162
+ * array of `{ matchType: 'prefix' | 'suffix', path }` when given; `*` is a
163
+ * legal label in a path.
164
+ *
165
+ * Returns: the listing.
166
+ *
167
+ * Throws: `VALIDATION` naming `offset`, `limit`, `maxDepth`, `matchConditions`
168
+ * or `<matchType> element`, in that order.
169
+ */
170
+ export declare function parseListOperation(op: ListNamespacesOperation): ParsedList;
171
+ /**
172
+ * Parse the options of `listNamespaces`.
173
+ *
174
+ * Accepts: `options` — an object; `prefix`, `suffix`, `maxDepth`, `limit` and
175
+ * `offset` are read, `limit` defaulting to 100 and `offset` to 0. Any other key
176
+ * is ignored rather than refused: `BaseStore.listNamespaces` declares these
177
+ * options, so a key a later LangGraph adds must not refuse the call (decision
178
+ * record 28).
179
+ *
180
+ * Returns: the listing the options describe.
181
+ *
182
+ * Throws: `VALIDATION` naming `options` for options that are not an object,
183
+ * then as {@link parseListOperation}.
184
+ */
185
+ export declare function parseListNamespacesOptions(options: ListNamespacesOptions): ParsedList;
186
+ /**
187
+ * Parse the arguments of `put()`.
188
+ *
189
+ * Accepts: `namespace`, `key` — as {@link parseStoreAddress}, plus the
190
+ * namespace rules upstream `put()` adds. `value` — an object; `null` is refused,
191
+ * because `delete()` is how an item is removed. `index` — `false`, a list of
192
+ * field paths, or absent.
193
+ *
194
+ * Returns: the put.
195
+ *
196
+ * Throws: `VALIDATION` naming `namespace`, `namespace element`, `key`,
197
+ * `sortKey`, `value` or `index`, in that order.
198
+ */
199
+ export declare function parsePutArguments(namespace: string[], key: string, value: Parameters<BaseStore['put']>[2], index: PutOperation['index']): ParsedPut;
200
+ /**
201
+ * Parse one operation of a batch, deciding its kind from its shape — the only
202
+ * place that asks.
203
+ *
204
+ * Accepts: `operation` — an object; a `namespacePrefix` makes it a search, a
205
+ * `value` a put (a delete when `null`), a `key` a get, anything else a listing.
206
+ *
207
+ * Returns: the parsed operation.
208
+ *
209
+ * Throws: `VALIDATION` naming `operations` for a non-object, else as the
210
+ * parser of its kind.
211
+ */
212
+ export declare function parseOperation(operation: Operation): ParsedOperation;
213
+ /**
214
+ * Parse every operation of a batch before any of them runs, so a malformed
215
+ * last operation cannot leave the first ones applied. That matters most
216
+ * inside a graph: LangGraph reaches a store only through `batch()`, via
217
+ * `AsyncBatchedStore`, which coalesces every call made in one tick into a
218
+ * single batch and rejects them all together (`@langchain/langgraph`
219
+ * `dist/pregel/loop.js:311`, `@langchain/langgraph-checkpoint@1.1.5`
220
+ * `dist/store/batch.js:85-105`).
221
+ *
222
+ * Accepts: `operations` — an array of operations.
223
+ *
224
+ * Returns: the parsed operations, in order.
225
+ *
226
+ * Throws: `VALIDATION` naming `operations` for a non-array, else as
227
+ * {@link parseOperation} for the first malformed one.
228
+ */
229
+ export declare function parseOperations(operations: Operation[]): ParsedOperation[];
230
+ export {};
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseNamespacePrefix = parseNamespacePrefix;
4
+ exports.parseNamespace = parseNamespace;
5
+ exports.parseStoreAddress = parseStoreAddress;
6
+ exports.parseSearch = parseSearch;
7
+ exports.parseListOperation = parseListOperation;
8
+ exports.parseListNamespacesOptions = parseListNamespacesOptions;
9
+ exports.parsePutArguments = parsePutArguments;
10
+ exports.parseOperation = parseOperation;
11
+ exports.parseOperations = parseOperations;
12
+ const table_schema_js_1 = require("../../shared/dynamodb/table-schema.js");
13
+ const errors_js_1 = require("../../shared/errors/errors.js");
14
+ const option_shape_js_1 = require("../../shared/validation/option-shape.js");
15
+ const primitives_js_1 = require("../../shared/validation/primitives.js");
16
+ const rows_js_1 = require("./rows.js");
17
+ const RESERVED_ROOT = 'langgraph';
18
+ const DEFAULT_SEARCH_LIMIT = (0, primitives_js_1.parseLimit)(10, 0);
19
+ const DEFAULT_LIST_LIMIT = 100;
20
+ function parseLabels(value, field) {
21
+ if (!Array.isArray(value)) {
22
+ throw (0, errors_js_1.validationError)(`${field} must be an array of labels`, field);
23
+ }
24
+ const labels = [];
25
+ for (const label of value) {
26
+ labels.push((0, primitives_js_1.parseIdentifier)(label, table_schema_js_1.KEY_SEPARATOR, `${field} element`, table_schema_js_1.MAX_KEY_SEGMENT_BYTES));
27
+ }
28
+ return labels;
29
+ }
30
+ function parseNamespacePrefix(value, field) {
31
+ const labels = parseLabels(value, field);
32
+ const bytes = Buffer.byteLength((0, rows_js_1.sortKeyPrefix)(labels), 'utf8');
33
+ if (bytes >= table_schema_js_1.MAX_SORT_KEY_BYTES) {
34
+ throw (0, errors_js_1.validationError)(`${field} leads a sort key with ${bytes} bytes before any key; DynamoDB caps sort keys at ` +
35
+ `${table_schema_js_1.MAX_SORT_KEY_BYTES} bytes, so no stored namespace can match it`, field);
36
+ }
37
+ return labels;
38
+ }
39
+ function parseNamespace(value, field = 'namespace') {
40
+ if (!Array.isArray(value) || value.length === 0) {
41
+ throw (0, errors_js_1.validationError)(`${field} must be a non-empty array`, field);
42
+ }
43
+ return parseLabels(value, field);
44
+ }
45
+ function parseStoreAddress(namespace, key) {
46
+ const parsedNamespace = parseNamespace(namespace);
47
+ const parsedKey = (0, primitives_js_1.parseIdentifier)(key, table_schema_js_1.KEY_SEPARATOR, 'key', table_schema_js_1.MAX_KEY_SEGMENT_BYTES);
48
+ const bytes = Buffer.byteLength((0, rows_js_1.sortKey)(parsedNamespace, parsedKey), 'utf8');
49
+ if (bytes > table_schema_js_1.MAX_SORT_KEY_BYTES) {
50
+ throw (0, errors_js_1.validationError)(`namespace and key compose a ${bytes}-byte sort key; DynamoDB caps sort keys at ` +
51
+ `${table_schema_js_1.MAX_SORT_KEY_BYTES} bytes`, 'sortKey');
52
+ }
53
+ return { namespace: parsedNamespace, key: parsedKey };
54
+ }
55
+ function parseIndex(index) {
56
+ if (index === undefined || index === false)
57
+ return index;
58
+ return (0, primitives_js_1.parseStringArray)(index, 'index');
59
+ }
60
+ function parseSearch(namespacePrefix, op) {
61
+ if (op.filter !== undefined)
62
+ (0, option_shape_js_1.assertObjectShape)(op.filter, 'filter');
63
+ const query = op.query === undefined ? undefined : (0, primitives_js_1.parseString)(op.query, 'query');
64
+ const offset = (0, primitives_js_1.parseInteger)(op.offset === undefined ? 0 : op.offset, 'offset', { min: 0 });
65
+ const limit = op.limit === undefined ? DEFAULT_SEARCH_LIMIT : (0, primitives_js_1.parseLimit)(op.limit, 0);
66
+ return {
67
+ kind: 'search',
68
+ namespacePrefix,
69
+ filter: op.filter,
70
+ query,
71
+ offset,
72
+ limit,
73
+ };
74
+ }
75
+ function parseMatchCondition(condition) {
76
+ (0, option_shape_js_1.assertObjectShape)(condition, 'matchConditions');
77
+ const { matchType, path } = condition;
78
+ if (matchType !== 'prefix' && matchType !== 'suffix') {
79
+ const received = typeof matchType === 'string' ? JSON.stringify(matchType) : typeof matchType;
80
+ throw (0, errors_js_1.validationError)(`matchType must be "prefix" or "suffix" (received ${received})`, 'matchConditions');
81
+ }
82
+ return { matchType, path: parseNamespacePrefix(path, matchType) };
83
+ }
84
+ function parseMatchConditions(conditions) {
85
+ if (conditions === undefined)
86
+ return undefined;
87
+ if (!Array.isArray(conditions)) {
88
+ throw (0, errors_js_1.validationError)('matchConditions must be an array', 'matchConditions');
89
+ }
90
+ const parsed = [];
91
+ for (const condition of conditions)
92
+ parsed.push(parseMatchCondition(condition));
93
+ return parsed;
94
+ }
95
+ function parseListOperation(op) {
96
+ const offset = (0, primitives_js_1.parseInteger)(op.offset, 'offset', { min: 0 });
97
+ const limit = (0, primitives_js_1.parseLimit)(op.limit, 0);
98
+ const maxDepth = op.maxDepth === undefined ? undefined : (0, primitives_js_1.parseInteger)(op.maxDepth, 'maxDepth', { min: 1 });
99
+ return {
100
+ kind: 'list',
101
+ matchConditions: parseMatchConditions(op.matchConditions),
102
+ maxDepth,
103
+ offset,
104
+ limit,
105
+ };
106
+ }
107
+ function parseListNamespacesOptions(options) {
108
+ (0, option_shape_js_1.assertObjectShape)(options, 'options');
109
+ const { prefix, suffix, maxDepth, limit = DEFAULT_LIST_LIMIT, offset = 0 } = options;
110
+ const matchConditions = [];
111
+ if (prefix !== undefined)
112
+ matchConditions.push({ matchType: 'prefix', path: prefix });
113
+ if (suffix !== undefined)
114
+ matchConditions.push({ matchType: 'suffix', path: suffix });
115
+ return parseListOperation({
116
+ matchConditions: matchConditions.length > 0 ? matchConditions : undefined,
117
+ maxDepth,
118
+ limit,
119
+ offset,
120
+ });
121
+ }
122
+ function assertNoPeriodLabel(namespace) {
123
+ if (namespace.some((label) => label.includes('.'))) {
124
+ throw (0, errors_js_1.validationError)('namespace element must not contain "."; upstream refuses it on every write', 'namespace element');
125
+ }
126
+ }
127
+ function assertUpstreamPutNamespace(namespace) {
128
+ assertNoPeriodLabel(namespace);
129
+ if (namespace[0] === RESERVED_ROOT) {
130
+ throw (0, errors_js_1.validationError)(`namespace must not start with "${RESERVED_ROOT}", the root label LangGraph reserves`, 'namespace');
131
+ }
132
+ }
133
+ function parsePutArguments(namespace, key, value, index) {
134
+ const address = parseStoreAddress(namespace, key);
135
+ assertUpstreamPutNamespace(address.namespace);
136
+ if (value === null) {
137
+ throw (0, errors_js_1.validationError)('value must be an object; delete() removes an item', 'value');
138
+ }
139
+ (0, option_shape_js_1.assertObjectShape)(value, 'value');
140
+ return {
141
+ kind: 'put',
142
+ address,
143
+ value: value,
144
+ index: parseIndex(index),
145
+ };
146
+ }
147
+ function parsePutOperation(op) {
148
+ const address = parseStoreAddress(op.namespace, op.key);
149
+ if (op.value !== null)
150
+ assertNoPeriodLabel(address.namespace);
151
+ if (op.value !== null)
152
+ (0, option_shape_js_1.assertObjectShape)(op.value, 'value');
153
+ const index = parseIndex(op.index);
154
+ if (op.value === null)
155
+ return { kind: 'delete', address };
156
+ return { kind: 'put', address, value: op.value, index };
157
+ }
158
+ function parseOperation(operation) {
159
+ if (typeof operation !== 'object' || operation === null || Array.isArray(operation)) {
160
+ throw (0, errors_js_1.validationError)('every operation in operations must be an object', 'operations');
161
+ }
162
+ if ('namespacePrefix' in operation) {
163
+ return parseSearch(parseNamespacePrefix(operation.namespacePrefix, 'namespacePrefix'), operation);
164
+ }
165
+ if ('value' in operation)
166
+ return parsePutOperation(operation);
167
+ if ('key' in operation) {
168
+ return { kind: 'get', address: parseStoreAddress(operation.namespace, operation.key) };
169
+ }
170
+ return parseListOperation(operation);
171
+ }
172
+ function parseOperations(operations) {
173
+ if (!Array.isArray(operations)) {
174
+ throw (0, errors_js_1.validationError)('operations must be an array', 'operations');
175
+ }
176
+ const parsed = [];
177
+ for (const operation of operations)
178
+ parsed.push(parseOperation(operation));
179
+ return parsed;
180
+ }