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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (512) hide show
  1. package/README.md +1720 -154
  2. package/dist/backfill/backfill.d.ts +168 -0
  3. package/dist/backfill/backfill.js +393 -0
  4. package/dist/checkpointer/actions/delete-thread.d.ts +47 -6
  5. package/dist/checkpointer/actions/delete-thread.js +58 -21
  6. package/dist/checkpointer/actions/get-tuple.d.ts +29 -4
  7. package/dist/checkpointer/actions/get-tuple.js +44 -10
  8. package/dist/checkpointer/actions/list.d.ts +46 -4
  9. package/dist/checkpointer/actions/list.js +121 -66
  10. package/dist/checkpointer/actions/put-writes.d.ts +41 -9
  11. package/dist/checkpointer/actions/put-writes.js +62 -77
  12. package/dist/checkpointer/actions/put.d.ts +83 -4
  13. package/dist/checkpointer/actions/put.js +177 -25
  14. package/dist/checkpointer/internal/delta-history.d.ts +112 -0
  15. package/dist/checkpointer/internal/delta-history.js +252 -0
  16. package/dist/checkpointer/internal/listing.d.ts +149 -0
  17. package/dist/checkpointer/internal/listing.js +245 -0
  18. package/dist/checkpointer/internal/parse.d.ts +262 -0
  19. package/dist/checkpointer/internal/parse.js +372 -0
  20. package/dist/checkpointer/internal/pending-writes.d.ts +275 -0
  21. package/dist/checkpointer/internal/pending-writes.js +588 -0
  22. package/dist/checkpointer/internal/read.d.ts +130 -0
  23. package/dist/checkpointer/internal/read.js +264 -0
  24. package/dist/checkpointer/internal/rows.d.ts +571 -0
  25. package/dist/checkpointer/internal/rows.js +834 -0
  26. package/dist/checkpointer/internal/setup.d.ts +42 -19
  27. package/dist/checkpointer/internal/setup.js +65 -29
  28. package/dist/checkpointer/saver.d.ts +256 -16
  29. package/dist/checkpointer/saver.js +275 -29
  30. package/dist/checkpointer/types.d.ts +39 -39
  31. package/dist/checkpointer/types.js +10 -1
  32. package/dist/factory/factory.d.ts +134 -28
  33. package/dist/factory/factory.js +240 -21
  34. package/dist/factory/types.d.ts +76 -0
  35. package/dist/factory/types.js +10 -0
  36. package/dist/history/actions/add-messages.d.ts +31 -4
  37. package/dist/history/actions/add-messages.js +38 -58
  38. package/dist/history/actions/clear.d.ts +49 -6
  39. package/dist/history/actions/clear.js +66 -14
  40. package/dist/history/actions/get-messages.d.ts +54 -6
  41. package/dist/history/actions/get-messages.js +126 -43
  42. package/dist/history/actions/list-sessions.d.ts +52 -10
  43. package/dist/history/actions/list-sessions.js +139 -40
  44. package/dist/history/actions/reconcile-count.d.ts +42 -10
  45. package/dist/history/actions/reconcile-count.js +45 -45
  46. package/dist/history/chat-message-history.d.ts +220 -33
  47. package/dist/history/chat-message-history.js +240 -43
  48. package/dist/history/internal/append.d.ts +212 -0
  49. package/dist/history/internal/append.js +500 -0
  50. package/dist/history/internal/message-read.d.ts +84 -0
  51. package/dist/history/internal/message-read.js +204 -0
  52. package/dist/history/internal/parse.d.ts +153 -0
  53. package/dist/history/internal/parse.js +252 -0
  54. package/dist/history/internal/rows.d.ts +195 -0
  55. package/dist/history/internal/rows.js +250 -0
  56. package/dist/history/internal/session.d.ts +331 -0
  57. package/dist/history/internal/session.js +628 -0
  58. package/dist/history/internal/setup.d.ts +52 -17
  59. package/dist/history/internal/setup.js +92 -21
  60. package/dist/history/session-adapter.d.ts +102 -7
  61. package/dist/history/session-adapter.js +103 -9
  62. package/dist/history/types.d.ts +80 -29
  63. package/dist/history/types.js +10 -1
  64. package/dist/index.d.ts +42 -11
  65. package/dist/index.js +33 -12
  66. package/dist/shared/adapter.d.ts +135 -0
  67. package/dist/shared/adapter.js +143 -0
  68. package/dist/shared/clock.d.ts +51 -2
  69. package/dist/shared/clock.js +57 -2
  70. package/dist/shared/codec/codec.d.ts +288 -13
  71. package/dist/shared/codec/codec.js +416 -19
  72. package/dist/shared/codec/compression.d.ts +43 -7
  73. package/dist/shared/codec/compression.js +53 -13
  74. package/dist/shared/codec/json-serde.d.ts +76 -4
  75. package/dist/shared/codec/json-serde.js +181 -8
  76. package/dist/shared/codec/s3/client-types.d.ts +53 -0
  77. package/dist/shared/codec/s3/client-types.js +26 -0
  78. package/dist/shared/codec/s3/client.d.ts +43 -10
  79. package/dist/shared/codec/s3/client.js +82 -9
  80. package/dist/shared/codec/s3/config.d.ts +242 -11
  81. package/dist/shared/codec/s3/config.js +293 -11
  82. package/dist/shared/codec/s3/lifecycle.d.ts +164 -6
  83. package/dist/shared/codec/s3/lifecycle.js +335 -27
  84. package/dist/shared/codec/s3/offloader.d.ts +393 -18
  85. package/dist/shared/codec/s3/offloader.js +595 -37
  86. package/dist/shared/concurrency.d.ts +43 -0
  87. package/dist/shared/concurrency.js +78 -0
  88. package/dist/shared/dynamodb/abort.d.ts +47 -0
  89. package/dist/shared/dynamodb/abort.js +59 -0
  90. package/dist/shared/dynamodb/batch-write.d.ts +77 -14
  91. package/dist/shared/dynamodb/batch-write.js +146 -27
  92. package/dist/shared/dynamodb/cancellation.d.ts +121 -4
  93. package/dist/shared/dynamodb/cancellation.js +147 -3
  94. package/dist/shared/dynamodb/client.d.ts +162 -8
  95. package/dist/shared/dynamodb/client.js +153 -5
  96. package/dist/shared/dynamodb/idempotent-write.d.ts +551 -0
  97. package/dist/shared/dynamodb/idempotent-write.js +593 -0
  98. package/dist/shared/dynamodb/paginate.d.ts +105 -9
  99. package/dist/shared/dynamodb/paginate.js +175 -7
  100. package/dist/shared/dynamodb/partition-delete.d.ts +185 -14
  101. package/dist/shared/dynamodb/partition-delete.js +314 -44
  102. package/dist/shared/dynamodb/recency-index.d.ts +231 -0
  103. package/dist/shared/dynamodb/recency-index.js +377 -0
  104. package/dist/shared/dynamodb/retry.d.ts +276 -8
  105. package/dist/shared/dynamodb/retry.js +433 -23
  106. package/dist/shared/dynamodb/table-schema.d.ts +190 -0
  107. package/dist/shared/dynamodb/table-schema.js +209 -0
  108. package/dist/shared/errors/base-error.d.ts +184 -10
  109. package/dist/shared/errors/base-error.js +160 -14
  110. package/dist/shared/errors/boundary.d.ts +71 -0
  111. package/dist/shared/errors/boundary.js +143 -0
  112. package/dist/shared/errors/classify.d.ts +97 -0
  113. package/dist/shared/errors/classify.js +257 -0
  114. package/dist/shared/errors/error-code.d.ts +77 -2
  115. package/dist/shared/errors/error-code.js +83 -1
  116. package/dist/shared/errors/errors.d.ts +158 -59
  117. package/dist/shared/errors/errors.js +219 -92
  118. package/dist/shared/logging/logger.d.ts +69 -3
  119. package/dist/shared/logging/logger.js +97 -3
  120. package/dist/shared/logging/redaction.d.ts +92 -8
  121. package/dist/shared/logging/redaction.js +273 -17
  122. package/dist/shared/logging/secret-patterns.d.ts +149 -19
  123. package/dist/shared/logging/secret-patterns.js +188 -27
  124. package/dist/shared/logging/truncate.d.ts +197 -0
  125. package/dist/shared/logging/truncate.js +231 -0
  126. package/dist/shared/options.d.ts +59 -7
  127. package/dist/shared/options.js +9 -1
  128. package/dist/shared/ulid.d.ts +77 -7
  129. package/dist/shared/ulid.js +103 -8
  130. package/dist/shared/validation/collaborators.d.ts +141 -0
  131. package/dist/shared/validation/collaborators.js +188 -0
  132. package/dist/shared/validation/option-shape.d.ts +89 -0
  133. package/dist/shared/validation/option-shape.js +113 -0
  134. package/dist/shared/validation/options.d.ts +145 -0
  135. package/dist/shared/validation/options.js +328 -0
  136. package/dist/shared/validation/primitives.d.ts +288 -21
  137. package/dist/shared/validation/primitives.js +353 -50
  138. package/dist/shared/validation/ttl.d.ts +66 -10
  139. package/dist/shared/validation/ttl.js +113 -15
  140. package/dist/store/actions/list-namespaces.d.ts +76 -6
  141. package/dist/store/actions/list-namespaces.js +166 -24
  142. package/dist/store/actions/put.d.ts +33 -8
  143. package/dist/store/actions/put.js +53 -60
  144. package/dist/store/actions/reconcile-vector-index.d.ts +31 -10
  145. package/dist/store/actions/reconcile-vector-index.js +34 -15
  146. package/dist/store/actions/search.d.ts +34 -6
  147. package/dist/store/actions/search.js +56 -51
  148. package/dist/store/internal/batch-plan.d.ts +26 -0
  149. package/dist/store/internal/batch-plan.js +109 -0
  150. package/dist/store/internal/filter.d.ts +36 -3
  151. package/dist/store/internal/filter.js +66 -15
  152. package/dist/store/internal/get-item.d.ts +45 -0
  153. package/dist/store/internal/get-item.js +115 -0
  154. package/dist/store/internal/item-write.d.ts +230 -0
  155. package/dist/store/internal/item-write.js +463 -0
  156. package/dist/store/internal/parse.d.ts +225 -0
  157. package/dist/store/internal/parse.js +350 -0
  158. package/dist/store/internal/rows.d.ts +355 -0
  159. package/dist/store/internal/rows.js +447 -0
  160. package/dist/store/internal/semantic-search.d.ts +161 -6
  161. package/dist/store/internal/semantic-search.js +360 -18
  162. package/dist/store/internal/setup.d.ts +77 -20
  163. package/dist/store/internal/setup.js +178 -47
  164. package/dist/store/internal/table-search.d.ts +100 -0
  165. package/dist/store/internal/table-search.js +213 -0
  166. package/dist/store/internal/vector-index.d.ts +247 -0
  167. package/dist/store/internal/vector-index.js +546 -0
  168. package/dist/store/store.d.ts +270 -17
  169. package/dist/store/store.js +329 -38
  170. package/dist/store/types.d.ts +76 -26
  171. package/dist/store/types.js +13 -1
  172. package/dist/store/vector-backend.d.ts +64 -4
  173. package/dist/store/vector-backend.js +15 -1
  174. package/package.json +58 -36
  175. package/dist/checkpointer/actions/delete-thread.d.ts.map +0 -1
  176. package/dist/checkpointer/actions/delete-thread.js.map +0 -1
  177. package/dist/checkpointer/actions/get-tuple.d.ts.map +0 -1
  178. package/dist/checkpointer/actions/get-tuple.js.map +0 -1
  179. package/dist/checkpointer/actions/list.d.ts.map +0 -1
  180. package/dist/checkpointer/actions/list.js.map +0 -1
  181. package/dist/checkpointer/actions/put-writes.d.ts.map +0 -1
  182. package/dist/checkpointer/actions/put-writes.js.map +0 -1
  183. package/dist/checkpointer/actions/put.d.ts.map +0 -1
  184. package/dist/checkpointer/actions/put.js.map +0 -1
  185. package/dist/checkpointer/internal/assemble.d.ts +0 -10
  186. package/dist/checkpointer/internal/assemble.d.ts.map +0 -1
  187. package/dist/checkpointer/internal/assemble.js +0 -37
  188. package/dist/checkpointer/internal/assemble.js.map +0 -1
  189. package/dist/checkpointer/internal/configurable.d.ts +0 -13
  190. package/dist/checkpointer/internal/configurable.d.ts.map +0 -1
  191. package/dist/checkpointer/internal/configurable.js +0 -23
  192. package/dist/checkpointer/internal/configurable.js.map +0 -1
  193. package/dist/checkpointer/internal/fetch.d.ts +0 -10
  194. package/dist/checkpointer/internal/fetch.d.ts.map +0 -1
  195. package/dist/checkpointer/internal/fetch.js +0 -46
  196. package/dist/checkpointer/internal/fetch.js.map +0 -1
  197. package/dist/checkpointer/internal/filter-match.d.ts +0 -12
  198. package/dist/checkpointer/internal/filter-match.d.ts.map +0 -1
  199. package/dist/checkpointer/internal/filter-match.js +0 -14
  200. package/dist/checkpointer/internal/filter-match.js.map +0 -1
  201. package/dist/checkpointer/internal/item-reader.d.ts +0 -55
  202. package/dist/checkpointer/internal/item-reader.d.ts.map +0 -1
  203. package/dist/checkpointer/internal/item-reader.js +0 -88
  204. package/dist/checkpointer/internal/item-reader.js.map +0 -1
  205. package/dist/checkpointer/internal/item-writer.d.ts +0 -26
  206. package/dist/checkpointer/internal/item-writer.d.ts.map +0 -1
  207. package/dist/checkpointer/internal/item-writer.js +0 -92
  208. package/dist/checkpointer/internal/item-writer.js.map +0 -1
  209. package/dist/checkpointer/internal/keys.d.ts +0 -31
  210. package/dist/checkpointer/internal/keys.d.ts.map +0 -1
  211. package/dist/checkpointer/internal/keys.js +0 -87
  212. package/dist/checkpointer/internal/keys.js.map +0 -1
  213. package/dist/checkpointer/internal/query.d.ts +0 -20
  214. package/dist/checkpointer/internal/query.d.ts.map +0 -1
  215. package/dist/checkpointer/internal/query.js +0 -36
  216. package/dist/checkpointer/internal/query.js.map +0 -1
  217. package/dist/checkpointer/internal/setup.d.ts.map +0 -1
  218. package/dist/checkpointer/internal/setup.js.map +0 -1
  219. package/dist/checkpointer/internal/special-write-cas.d.ts +0 -30
  220. package/dist/checkpointer/internal/special-write-cas.d.ts.map +0 -1
  221. package/dist/checkpointer/internal/special-write-cas.js +0 -104
  222. package/dist/checkpointer/internal/special-write-cas.js.map +0 -1
  223. package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -24
  224. package/dist/checkpointer/internal/special-write-cleanup.d.ts.map +0 -1
  225. package/dist/checkpointer/internal/special-write-cleanup.js +0 -47
  226. package/dist/checkpointer/internal/special-write-cleanup.js.map +0 -1
  227. package/dist/checkpointer/internal/special-write-verify.d.ts +0 -54
  228. package/dist/checkpointer/internal/special-write-verify.d.ts.map +0 -1
  229. package/dist/checkpointer/internal/special-write-verify.js +0 -65
  230. package/dist/checkpointer/internal/special-write-verify.js.map +0 -1
  231. package/dist/checkpointer/internal/validation.d.ts +0 -13
  232. package/dist/checkpointer/internal/validation.d.ts.map +0 -1
  233. package/dist/checkpointer/internal/validation.js +0 -30
  234. package/dist/checkpointer/internal/validation.js.map +0 -1
  235. package/dist/checkpointer/internal/write-guard.d.ts +0 -13
  236. package/dist/checkpointer/internal/write-guard.d.ts.map +0 -1
  237. package/dist/checkpointer/internal/write-guard.js +0 -39
  238. package/dist/checkpointer/internal/write-guard.js.map +0 -1
  239. package/dist/checkpointer/internal/write-index.d.ts +0 -37
  240. package/dist/checkpointer/internal/write-index.d.ts.map +0 -1
  241. package/dist/checkpointer/internal/write-index.js +0 -42
  242. package/dist/checkpointer/internal/write-index.js.map +0 -1
  243. package/dist/checkpointer/saver.d.ts.map +0 -1
  244. package/dist/checkpointer/saver.js.map +0 -1
  245. package/dist/checkpointer/types.d.ts.map +0 -1
  246. package/dist/checkpointer/types.js.map +0 -1
  247. package/dist/factory/factory.d.ts.map +0 -1
  248. package/dist/factory/factory.js.map +0 -1
  249. package/dist/history/actions/add-messages.d.ts.map +0 -1
  250. package/dist/history/actions/add-messages.js.map +0 -1
  251. package/dist/history/actions/clear.d.ts.map +0 -1
  252. package/dist/history/actions/clear.js.map +0 -1
  253. package/dist/history/actions/get-messages.d.ts.map +0 -1
  254. package/dist/history/actions/get-messages.js.map +0 -1
  255. package/dist/history/actions/list-sessions.d.ts.map +0 -1
  256. package/dist/history/actions/list-sessions.js.map +0 -1
  257. package/dist/history/actions/reconcile-count.d.ts.map +0 -1
  258. package/dist/history/actions/reconcile-count.js.map +0 -1
  259. package/dist/history/chat-message-history.d.ts.map +0 -1
  260. package/dist/history/chat-message-history.js.map +0 -1
  261. package/dist/history/internal/append-saga.d.ts +0 -20
  262. package/dist/history/internal/append-saga.d.ts.map +0 -1
  263. package/dist/history/internal/append-saga.js +0 -35
  264. package/dist/history/internal/append-saga.js.map +0 -1
  265. package/dist/history/internal/compensation.d.ts +0 -21
  266. package/dist/history/internal/compensation.d.ts.map +0 -1
  267. package/dist/history/internal/compensation.js +0 -84
  268. package/dist/history/internal/compensation.js.map +0 -1
  269. package/dist/history/internal/item-mapper.d.ts +0 -12
  270. package/dist/history/internal/item-mapper.d.ts.map +0 -1
  271. package/dist/history/internal/item-mapper.js +0 -33
  272. package/dist/history/internal/item-mapper.js.map +0 -1
  273. package/dist/history/internal/keys.d.ts +0 -17
  274. package/dist/history/internal/keys.d.ts.map +0 -1
  275. package/dist/history/internal/keys.js +0 -49
  276. package/dist/history/internal/keys.js.map +0 -1
  277. package/dist/history/internal/message-chunker.d.ts +0 -14
  278. package/dist/history/internal/message-chunker.d.ts.map +0 -1
  279. package/dist/history/internal/message-chunker.js +0 -68
  280. package/dist/history/internal/message-chunker.js.map +0 -1
  281. package/dist/history/internal/message-transaction.d.ts +0 -26
  282. package/dist/history/internal/message-transaction.d.ts.map +0 -1
  283. package/dist/history/internal/message-transaction.js +0 -60
  284. package/dist/history/internal/message-transaction.js.map +0 -1
  285. package/dist/history/internal/query.d.ts +0 -10
  286. package/dist/history/internal/query.d.ts.map +0 -1
  287. package/dist/history/internal/query.js +0 -31
  288. package/dist/history/internal/query.js.map +0 -1
  289. package/dist/history/internal/session-count.d.ts +0 -41
  290. package/dist/history/internal/session-count.d.ts.map +0 -1
  291. package/dist/history/internal/session-count.js +0 -109
  292. package/dist/history/internal/session-count.js.map +0 -1
  293. package/dist/history/internal/session-title.d.ts +0 -20
  294. package/dist/history/internal/session-title.d.ts.map +0 -1
  295. package/dist/history/internal/session-title.js +0 -44
  296. package/dist/history/internal/session-title.js.map +0 -1
  297. package/dist/history/internal/session-update.d.ts +0 -28
  298. package/dist/history/internal/session-update.d.ts.map +0 -1
  299. package/dist/history/internal/session-update.js +0 -70
  300. package/dist/history/internal/session-update.js.map +0 -1
  301. package/dist/history/internal/setup.d.ts.map +0 -1
  302. package/dist/history/internal/setup.js.map +0 -1
  303. package/dist/history/internal/title-generator.d.ts +0 -13
  304. package/dist/history/internal/title-generator.d.ts.map +0 -1
  305. package/dist/history/internal/title-generator.js +0 -25
  306. package/dist/history/internal/title-generator.js.map +0 -1
  307. package/dist/history/internal/ttl-anchor.d.ts +0 -25
  308. package/dist/history/internal/ttl-anchor.d.ts.map +0 -1
  309. package/dist/history/internal/ttl-anchor.js +0 -38
  310. package/dist/history/internal/ttl-anchor.js.map +0 -1
  311. package/dist/history/internal/validation.d.ts +0 -9
  312. package/dist/history/internal/validation.d.ts.map +0 -1
  313. package/dist/history/internal/validation.js +0 -16
  314. package/dist/history/internal/validation.js.map +0 -1
  315. package/dist/history/session-adapter.d.ts.map +0 -1
  316. package/dist/history/session-adapter.js.map +0 -1
  317. package/dist/history/types.d.ts.map +0 -1
  318. package/dist/history/types.js.map +0 -1
  319. package/dist/index.d.ts.map +0 -1
  320. package/dist/index.js.map +0 -1
  321. package/dist/shared/clock.d.ts.map +0 -1
  322. package/dist/shared/clock.js.map +0 -1
  323. package/dist/shared/codec/codec.d.ts.map +0 -1
  324. package/dist/shared/codec/codec.js.map +0 -1
  325. package/dist/shared/codec/compression.d.ts.map +0 -1
  326. package/dist/shared/codec/compression.js.map +0 -1
  327. package/dist/shared/codec/descriptor-keys.d.ts +0 -4
  328. package/dist/shared/codec/descriptor-keys.d.ts.map +0 -1
  329. package/dist/shared/codec/descriptor-keys.js +0 -14
  330. package/dist/shared/codec/descriptor-keys.js.map +0 -1
  331. package/dist/shared/codec/json-serde.d.ts.map +0 -1
  332. package/dist/shared/codec/json-serde.js.map +0 -1
  333. package/dist/shared/codec/s3/client.d.ts.map +0 -1
  334. package/dist/shared/codec/s3/client.js.map +0 -1
  335. package/dist/shared/codec/s3/config.d.ts.map +0 -1
  336. package/dist/shared/codec/s3/config.js.map +0 -1
  337. package/dist/shared/codec/s3/delete.d.ts +0 -8
  338. package/dist/shared/codec/s3/delete.d.ts.map +0 -1
  339. package/dist/shared/codec/s3/delete.js +0 -29
  340. package/dist/shared/codec/s3/delete.js.map +0 -1
  341. package/dist/shared/codec/s3/lifecycle.d.ts.map +0 -1
  342. package/dist/shared/codec/s3/lifecycle.js.map +0 -1
  343. package/dist/shared/codec/s3/offloader.d.ts.map +0 -1
  344. package/dist/shared/codec/s3/offloader.js.map +0 -1
  345. package/dist/shared/codec/s3/orphans.d.ts +0 -18
  346. package/dist/shared/codec/s3/orphans.d.ts.map +0 -1
  347. package/dist/shared/codec/s3/orphans.js +0 -58
  348. package/dist/shared/codec/s3/orphans.js.map +0 -1
  349. package/dist/shared/codec/s3/read-write.d.ts +0 -14
  350. package/dist/shared/codec/s3/read-write.d.ts.map +0 -1
  351. package/dist/shared/codec/s3/read-write.js +0 -43
  352. package/dist/shared/codec/s3/read-write.js.map +0 -1
  353. package/dist/shared/codec/s3/retry.d.ts +0 -5
  354. package/dist/shared/codec/s3/retry.d.ts.map +0 -1
  355. package/dist/shared/codec/s3/retry.js +0 -25
  356. package/dist/shared/codec/s3/retry.js.map +0 -1
  357. package/dist/shared/constants.d.ts +0 -64
  358. package/dist/shared/constants.d.ts.map +0 -1
  359. package/dist/shared/constants.js +0 -67
  360. package/dist/shared/constants.js.map +0 -1
  361. package/dist/shared/dynamodb/backoff.d.ts +0 -15
  362. package/dist/shared/dynamodb/backoff.d.ts.map +0 -1
  363. package/dist/shared/dynamodb/backoff.js +0 -48
  364. package/dist/shared/dynamodb/backoff.js.map +0 -1
  365. package/dist/shared/dynamodb/batch-write.d.ts.map +0 -1
  366. package/dist/shared/dynamodb/batch-write.js.map +0 -1
  367. package/dist/shared/dynamodb/cancellation.d.ts.map +0 -1
  368. package/dist/shared/dynamodb/cancellation.js.map +0 -1
  369. package/dist/shared/dynamodb/client.d.ts.map +0 -1
  370. package/dist/shared/dynamodb/client.js.map +0 -1
  371. package/dist/shared/dynamodb/conditional-put.d.ts +0 -51
  372. package/dist/shared/dynamodb/conditional-put.d.ts.map +0 -1
  373. package/dist/shared/dynamodb/conditional-put.js +0 -59
  374. package/dist/shared/dynamodb/conditional-put.js.map +0 -1
  375. package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -19
  376. package/dist/shared/dynamodb/drain-unprocessed.d.ts.map +0 -1
  377. package/dist/shared/dynamodb/drain-unprocessed.js +0 -44
  378. package/dist/shared/dynamodb/drain-unprocessed.js.map +0 -1
  379. package/dist/shared/dynamodb/paginate-core.d.ts +0 -22
  380. package/dist/shared/dynamodb/paginate-core.d.ts.map +0 -1
  381. package/dist/shared/dynamodb/paginate-core.js +0 -52
  382. package/dist/shared/dynamodb/paginate-core.js.map +0 -1
  383. package/dist/shared/dynamodb/paginate.d.ts.map +0 -1
  384. package/dist/shared/dynamodb/paginate.js.map +0 -1
  385. package/dist/shared/dynamodb/partition-delete.d.ts.map +0 -1
  386. package/dist/shared/dynamodb/partition-delete.js.map +0 -1
  387. package/dist/shared/dynamodb/retry-classifier.d.ts +0 -9
  388. package/dist/shared/dynamodb/retry-classifier.d.ts.map +0 -1
  389. package/dist/shared/dynamodb/retry-classifier.js +0 -87
  390. package/dist/shared/dynamodb/retry-classifier.js.map +0 -1
  391. package/dist/shared/dynamodb/retry.d.ts.map +0 -1
  392. package/dist/shared/dynamodb/retry.js.map +0 -1
  393. package/dist/shared/dynamodb/scan.d.ts +0 -15
  394. package/dist/shared/dynamodb/scan.d.ts.map +0 -1
  395. package/dist/shared/dynamodb/scan.js +0 -20
  396. package/dist/shared/dynamodb/scan.js.map +0 -1
  397. package/dist/shared/dynamodb/types.d.ts +0 -24
  398. package/dist/shared/dynamodb/types.d.ts.map +0 -1
  399. package/dist/shared/dynamodb/types.js +0 -3
  400. package/dist/shared/dynamodb/types.js.map +0 -1
  401. package/dist/shared/errors/base-error.d.ts.map +0 -1
  402. package/dist/shared/errors/base-error.js.map +0 -1
  403. package/dist/shared/errors/error-code.d.ts.map +0 -1
  404. package/dist/shared/errors/error-code.js.map +0 -1
  405. package/dist/shared/errors/errors.d.ts.map +0 -1
  406. package/dist/shared/errors/errors.js.map +0 -1
  407. package/dist/shared/errors/wrap-error.d.ts +0 -16
  408. package/dist/shared/errors/wrap-error.d.ts.map +0 -1
  409. package/dist/shared/errors/wrap-error.js +0 -30
  410. package/dist/shared/errors/wrap-error.js.map +0 -1
  411. package/dist/shared/logging/logger.d.ts.map +0 -1
  412. package/dist/shared/logging/logger.js.map +0 -1
  413. package/dist/shared/logging/redaction-walk.d.ts +0 -23
  414. package/dist/shared/logging/redaction-walk.d.ts.map +0 -1
  415. package/dist/shared/logging/redaction-walk.js +0 -92
  416. package/dist/shared/logging/redaction-walk.js.map +0 -1
  417. package/dist/shared/logging/redaction.d.ts.map +0 -1
  418. package/dist/shared/logging/redaction.js.map +0 -1
  419. package/dist/shared/logging/secret-patterns.d.ts.map +0 -1
  420. package/dist/shared/logging/secret-patterns.js.map +0 -1
  421. package/dist/shared/options.d.ts.map +0 -1
  422. package/dist/shared/options.js.map +0 -1
  423. package/dist/shared/ulid.d.ts.map +0 -1
  424. package/dist/shared/ulid.js.map +0 -1
  425. package/dist/shared/validation/primitives.d.ts.map +0 -1
  426. package/dist/shared/validation/primitives.js.map +0 -1
  427. package/dist/shared/validation/ttl.d.ts.map +0 -1
  428. package/dist/shared/validation/ttl.js.map +0 -1
  429. package/dist/store/actions/get.d.ts +0 -5
  430. package/dist/store/actions/get.d.ts.map +0 -1
  431. package/dist/store/actions/get.js +0 -35
  432. package/dist/store/actions/get.js.map +0 -1
  433. package/dist/store/actions/list-namespaces.d.ts.map +0 -1
  434. package/dist/store/actions/list-namespaces.js.map +0 -1
  435. package/dist/store/actions/put.d.ts.map +0 -1
  436. package/dist/store/actions/put.js.map +0 -1
  437. package/dist/store/actions/reconcile-vector-index.d.ts.map +0 -1
  438. package/dist/store/actions/reconcile-vector-index.js.map +0 -1
  439. package/dist/store/actions/search.d.ts.map +0 -1
  440. package/dist/store/actions/search.js.map +0 -1
  441. package/dist/store/internal/backend-search.d.ts +0 -5
  442. package/dist/store/internal/backend-search.d.ts.map +0 -1
  443. package/dist/store/internal/backend-search.js +0 -68
  444. package/dist/store/internal/backend-search.js.map +0 -1
  445. package/dist/store/internal/filter.d.ts.map +0 -1
  446. package/dist/store/internal/filter.js.map +0 -1
  447. package/dist/store/internal/index-reconcile.d.ts +0 -22
  448. package/dist/store/internal/index-reconcile.d.ts.map +0 -1
  449. package/dist/store/internal/index-reconcile.js +0 -105
  450. package/dist/store/internal/index-reconcile.js.map +0 -1
  451. package/dist/store/internal/index-sync.d.ts +0 -11
  452. package/dist/store/internal/index-sync.d.ts.map +0 -1
  453. package/dist/store/internal/index-sync.js +0 -26
  454. package/dist/store/internal/index-sync.js.map +0 -1
  455. package/dist/store/internal/item-mapper.d.ts +0 -25
  456. package/dist/store/internal/item-mapper.d.ts.map +0 -1
  457. package/dist/store/internal/item-mapper.js +0 -53
  458. package/dist/store/internal/item-mapper.js.map +0 -1
  459. package/dist/store/internal/keys.d.ts +0 -18
  460. package/dist/store/internal/keys.d.ts.map +0 -1
  461. package/dist/store/internal/keys.js +0 -42
  462. package/dist/store/internal/keys.js.map +0 -1
  463. package/dist/store/internal/namespace-match.d.ts +0 -12
  464. package/dist/store/internal/namespace-match.d.ts.map +0 -1
  465. package/dist/store/internal/namespace-match.js +0 -41
  466. package/dist/store/internal/namespace-match.js.map +0 -1
  467. package/dist/store/internal/overwrite-swap.d.ts +0 -33
  468. package/dist/store/internal/overwrite-swap.d.ts.map +0 -1
  469. package/dist/store/internal/overwrite-swap.js +0 -62
  470. package/dist/store/internal/overwrite-swap.js.map +0 -1
  471. package/dist/store/internal/persist.d.ts +0 -27
  472. package/dist/store/internal/persist.d.ts.map +0 -1
  473. package/dist/store/internal/persist.js +0 -59
  474. package/dist/store/internal/persist.js.map +0 -1
  475. package/dist/store/internal/query.d.ts +0 -6
  476. package/dist/store/internal/query.d.ts.map +0 -1
  477. package/dist/store/internal/query.js +0 -32
  478. package/dist/store/internal/query.js.map +0 -1
  479. package/dist/store/internal/ranker.d.ts +0 -13
  480. package/dist/store/internal/ranker.d.ts.map +0 -1
  481. package/dist/store/internal/ranker.js +0 -31
  482. package/dist/store/internal/ranker.js.map +0 -1
  483. package/dist/store/internal/read-existing.d.ts +0 -19
  484. package/dist/store/internal/read-existing.d.ts.map +0 -1
  485. package/dist/store/internal/read-existing.js +0 -29
  486. package/dist/store/internal/read-existing.js.map +0 -1
  487. package/dist/store/internal/score-direction.d.ts +0 -32
  488. package/dist/store/internal/score-direction.d.ts.map +0 -1
  489. package/dist/store/internal/score-direction.js +0 -39
  490. package/dist/store/internal/score-direction.js.map +0 -1
  491. package/dist/store/internal/search-filter.d.ts +0 -4
  492. package/dist/store/internal/search-filter.d.ts.map +0 -1
  493. package/dist/store/internal/search-filter.js +0 -11
  494. package/dist/store/internal/search-filter.js.map +0 -1
  495. package/dist/store/internal/semantic-search.d.ts.map +0 -1
  496. package/dist/store/internal/semantic-search.js.map +0 -1
  497. package/dist/store/internal/setup.d.ts.map +0 -1
  498. package/dist/store/internal/setup.js.map +0 -1
  499. package/dist/store/internal/validation.d.ts +0 -13
  500. package/dist/store/internal/validation.d.ts.map +0 -1
  501. package/dist/store/internal/validation.js +0 -35
  502. package/dist/store/internal/validation.js.map +0 -1
  503. package/dist/store/internal/write-verify.d.ts +0 -37
  504. package/dist/store/internal/write-verify.d.ts.map +0 -1
  505. package/dist/store/internal/write-verify.js +0 -68
  506. package/dist/store/internal/write-verify.js.map +0 -1
  507. package/dist/store/store.d.ts.map +0 -1
  508. package/dist/store/store.js.map +0 -1
  509. package/dist/store/types.d.ts.map +0 -1
  510. package/dist/store/types.js.map +0 -1
  511. package/dist/store/vector-backend.d.ts.map +0 -1
  512. package/dist/store/vector-backend.js.map +0 -1
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Hides the history's key layout and how a message becomes a row and back.
3
+ *
4
+ * A session is one partition: a SESSION row with a fixed sort key, and one
5
+ * message row per message, sorted by its ULID so a range query reads a window
6
+ * in order. How those keys are composed, how a session's rows are queried, and
7
+ * which rows a read admits as this adapter's messages are decided here. What
8
+ * the SESSION row carries is `session.ts`'s decision; where it lives is this
9
+ * module's.
10
+ */
11
+ import type { QueryCommandInput } from '@aws-sdk/lib-dynamodb';
12
+ import type { StoredMessage } from '@langchain/core/messages';
13
+ import { type PayloadDescriptor } from '../../shared/codec/codec';
14
+ import type { AttributeMap } from '../../shared/dynamodb/client';
15
+ import { type RowKey } from '../../shared/dynamodb/table-schema';
16
+ import type { SessionId } from './parse';
17
+ import type { HistoryContext } from './setup';
18
+ /** Fixed sort key for the per-session metadata item. */
19
+ export declare const SESSION_SORT_KEY = "HISTORY#SESSION";
20
+ /**
21
+ * The tag every chat-history partition key starts with.
22
+ *
23
+ * Accepts: nothing — the tag is fixed, and the function exists so no caller
24
+ * composes it by hand.
25
+ *
26
+ * Returns: the tag, for a table-wide `begins_with` over this adapter's rows.
27
+ *
28
+ * Throws: nothing.
29
+ */
30
+ export declare function historyPartitionPrefix(): string;
31
+ /**
32
+ * Partition key for a chat session: the adapter tag plus the session id.
33
+ *
34
+ * Accepts: `sessionId` — normally validated, so it cannot contain the
35
+ * separator and the key is unambiguous.
36
+ *
37
+ * Returns: the partition key. A whole session lives in one partition, which is
38
+ * what makes a session read one Query and a session delete one partition walk.
39
+ *
40
+ * Throws: nothing.
41
+ */
42
+ export declare function sessionPartition(sessionId: string): string;
43
+ /**
44
+ * The key of a session's SESSION row.
45
+ *
46
+ * Accepts: `sessionId` — the session's id, parsed, or read off the row.
47
+ *
48
+ * Returns: the row's partition and its fixed sort key.
49
+ *
50
+ * Throws: nothing.
51
+ */
52
+ export declare function sessionRowKey(sessionId: string): RowKey;
53
+ /**
54
+ * Sort key for a single message item.
55
+ *
56
+ * Accepts: `ulid` — a monotonic ULID, or the time-prefix of one when the caller
57
+ * is building a range bound rather than a key.
58
+ *
59
+ * Returns: the sort key. ULIDs sort lexicographically in time order, so the
60
+ * sort key *is* the chronological order; nothing re-sorts messages on read.
61
+ *
62
+ * Throws: nothing.
63
+ */
64
+ export declare function messageSortKey(ulid: string): string;
65
+ /**
66
+ * Whether `sortKey` is one this adapter writes.
67
+ *
68
+ * Accepts: any sort key read from the session's partition.
69
+ *
70
+ * Returns: whether this adapter owns the row. A partition query carries no
71
+ * sort-key condition, so a partition-wide delete uses this to leave a row it
72
+ * does not own in place rather than deleting the whole partition blindly.
73
+ *
74
+ * Throws: nothing.
75
+ */
76
+ export declare function isHistorySortKey(sortKey: string): boolean;
77
+ /**
78
+ * `begins_with` prefix selecting every message item in a session.
79
+ *
80
+ * Accepts: nothing — the prefix is the same for every session, because the
81
+ * session is already the partition.
82
+ *
83
+ * Returns: the prefix, which excludes the SESSION metadata row: that row shares
84
+ * the partition but is not a message.
85
+ *
86
+ * Throws: nothing.
87
+ */
88
+ export declare function messageSortKeyPrefix(): string;
89
+ /** Options for {@link sessionRowsQuery}. */
90
+ export interface SessionRowsQueryOptions {
91
+ consistent?: boolean;
92
+ }
93
+ /**
94
+ * Query input selecting every row in a session's partition.
95
+ *
96
+ * Accepts: `options.consistent` — for a read whose answer a write depends on.
97
+ *
98
+ * Returns: the Query input, with no sort-key condition: it selects the
99
+ * messages, the SESSION metadata row, and any row another adapter left in this
100
+ * partition — which is why every caller filters with `isHistorySortKey`.
101
+ *
102
+ * Throws: nothing.
103
+ */
104
+ export declare function sessionRowsQuery(tableName: string, sessionId: SessionId, options?: SessionRowsQueryOptions): QueryCommandInput;
105
+ /** Options for {@link messageQuery}. */
106
+ export interface MessageQueryOptions extends SessionRowsQueryOptions {
107
+ /** Walk the messages newest-first; the caller restores chronological order. */
108
+ descending?: boolean;
109
+ /** Cap the rows DynamoDB evaluates per page. */
110
+ limit?: number;
111
+ /**
112
+ * Exclusive upper sort-key bound. Expressed as `BETWEEN prefix AND bound`
113
+ * because a key condition allows one sort-key operator: the bound is the
114
+ * message prefix plus the ULID time characters of an instant, so every
115
+ * real message key from that millisecond onwards sorts strictly after it.
116
+ */
117
+ beforeSortKey?: string;
118
+ }
119
+ /**
120
+ * Query input selecting a session's message items.
121
+ *
122
+ * Accepts: `options.descending` — newest-first, which is how a tail window is
123
+ * read. `options.limit` — the rows DynamoDB evaluates per page, not a total.
124
+ * `options.beforeSortKey` — an upper bound, expressed as `BETWEEN prefix AND
125
+ * bound` because a key condition allows one sort-key operator.
126
+ *
127
+ * Returns: the Query input, selecting messages only — the SESSION row does not
128
+ * carry the message prefix.
129
+ *
130
+ * Throws: nothing.
131
+ */
132
+ export declare function messageQuery(tableName: string, sessionId: SessionId, options?: MessageQueryOptions): QueryCommandInput;
133
+ /** A single stored chat message row (one per message, ordered by its ULID). */
134
+ export interface MessageRow {
135
+ PK: string;
136
+ SK: string;
137
+ /** Row format version; absent on rows written before it existed (see `table-schema.ts`). */
138
+ v?: number;
139
+ sessionId: string;
140
+ message: PayloadDescriptor;
141
+ ttl?: number;
142
+ }
143
+ /** One message as the row it becomes. */
144
+ export interface MessageRowSource {
145
+ readonly sessionId: SessionId;
146
+ /** The message's own ULID: its sort key and the id its offloaded object is written under. */
147
+ readonly messageId: string;
148
+ readonly message: StoredMessage;
149
+ /** When the row expires; absent when the adapter has no ttl. */
150
+ readonly ttlTimestamp?: number;
151
+ }
152
+ /**
153
+ * Encode a single stored message into its DynamoDB row.
154
+ *
155
+ * Accepts: `source.sessionId` — the session the message belongs to.
156
+ * `source.messageId` — the message's own id, which orders it and names its
157
+ * offloaded object; the caller allocates one per message from a monotonic
158
+ * factory. `source.message` — the message in its stored form.
159
+ * `source.ttlTimestamp` — the uniform whole-conversation expiry every
160
+ * message in the session shares, so a conversation expires as one thing rather
161
+ * than losing its oldest turns first. `signal` — cancels the upload an
162
+ * offloaded message costs.
163
+ *
164
+ * Returns: the row, keyed by the session partition and a `MSG#<messageId>` sort
165
+ * key, its payload inline or offloaded to
166
+ * `<keyPrefix><sessionId, base64url>/<messageId>.bin`.
167
+ *
168
+ * Throws: `VALIDATION` naming `value` for a message the serializer cannot
169
+ * represent; `S3_OFFLOAD_FAILED` when an offloaded payload cannot be uploaded.
170
+ * Encoding precedes the transaction, so a message that cannot be stored never
171
+ * half-writes a turn.
172
+ */
173
+ export declare function buildMessageRow(context: HistoryContext, source: MessageRowSource, signal?: AbortSignal): Promise<MessageRow>;
174
+ /**
175
+ * Narrow a raw row to a {@link MessageRow}.
176
+ *
177
+ * Accepts: `raw` — any row read from a session's partition under the message
178
+ * sort-key prefix, which on a shared table another writer can produce too.
179
+ *
180
+ * Returns: the item, or undefined for a row that merely shares the prefix —
181
+ * one carrying no `sessionId`, no `message` descriptor, or a `sessionId` that
182
+ * disagrees with the partition it was found in. The test is on the attributes
183
+ * a message must have, not on a cast: this is the one boundary where a row may
184
+ * not have been written by this adapter, so the key it was found at is not
185
+ * trusted on its own. A `message` of `null` is refused here, as
186
+ * `parseMetaRow` refuses a `metadata` of `null`.
187
+ *
188
+ * Throws: nothing; a row a newer release wrote is the caller's to refuse,
189
+ * before the shape is judged against attribute types that release may no
190
+ * longer use.
191
+ *
192
+ * Guarantees: a row's attributes are bound to the partition it lives in, so a
193
+ * row planted under one session cannot claim to belong to another.
194
+ */
195
+ export declare function parseMessageRow(raw: AttributeMap): MessageRow | undefined;
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ /**
3
+ * Hides the history's key layout and how a message becomes a row and back.
4
+ *
5
+ * A session is one partition: a SESSION row with a fixed sort key, and one
6
+ * message row per message, sorted by its ULID so a range query reads a window
7
+ * in order. How those keys are composed, how a session's rows are queried, and
8
+ * which rows a read admits as this adapter's messages are decided here. What
9
+ * the SESSION row carries is `session.ts`'s decision; where it lives is this
10
+ * module's.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.SESSION_SORT_KEY = void 0;
14
+ exports.historyPartitionPrefix = historyPartitionPrefix;
15
+ exports.sessionPartition = sessionPartition;
16
+ exports.sessionRowKey = sessionRowKey;
17
+ exports.messageSortKey = messageSortKey;
18
+ exports.isHistorySortKey = isHistorySortKey;
19
+ exports.messageSortKeyPrefix = messageSortKeyPrefix;
20
+ exports.sessionRowsQuery = sessionRowsQuery;
21
+ exports.messageQuery = messageQuery;
22
+ exports.buildMessageRow = buildMessageRow;
23
+ exports.parseMessageRow = parseMessageRow;
24
+ const codec_1 = require("../../shared/codec/codec");
25
+ const table_schema_1 = require("../../shared/dynamodb/table-schema");
26
+ /**
27
+ * Row-kind tag distinguishing this adapter's sort keys from another
28
+ * adapter's on a table shared via `DynamoDBFactory.createAll()` — matches the
29
+ * pattern the checkpointer module already uses for its own META#/PAYLOAD#/
30
+ * WRITE# keys. Without it, `SESSION_SORT_KEY` alone was a bare, common-word
31
+ * literal a store caller could produce by accident (e.g.
32
+ * `store.put([sessionId], 'SESSION', ...)`, since `sortKey` collapses a
33
+ * single-element namespace down to just the key).
34
+ */
35
+ const ADAPTER_PREFIX = `HISTORY${table_schema_1.KEY_SEPARATOR}`;
36
+ /** Fixed sort key for the per-session metadata item. */
37
+ exports.SESSION_SORT_KEY = `${ADAPTER_PREFIX}SESSION`;
38
+ const MESSAGE_PREFIX = `${ADAPTER_PREFIX}MSG#`;
39
+ /**
40
+ * Adapter tag prefixed to every chat-history partition key — see the
41
+ * equivalent in checkpointer/internal/rows.ts for why the three adapters'
42
+ * partitions must not overlap on a shared table.
43
+ */
44
+ const ADAPTER_PARTITION_PREFIX = `${table_schema_1.ADAPTER_TAGS.history}${table_schema_1.KEY_SEPARATOR}`;
45
+ /**
46
+ * The tag every chat-history partition key starts with.
47
+ *
48
+ * Accepts: nothing — the tag is fixed, and the function exists so no caller
49
+ * composes it by hand.
50
+ *
51
+ * Returns: the tag, for a table-wide `begins_with` over this adapter's rows.
52
+ *
53
+ * Throws: nothing.
54
+ */
55
+ function historyPartitionPrefix() {
56
+ return ADAPTER_PARTITION_PREFIX;
57
+ }
58
+ /**
59
+ * Partition key for a chat session: the adapter tag plus the session id.
60
+ *
61
+ * Accepts: `sessionId` — normally validated, so it cannot contain the
62
+ * separator and the key is unambiguous.
63
+ *
64
+ * Returns: the partition key. A whole session lives in one partition, which is
65
+ * what makes a session read one Query and a session delete one partition walk.
66
+ *
67
+ * Throws: nothing.
68
+ */
69
+ function sessionPartition(sessionId) {
70
+ return `${ADAPTER_PARTITION_PREFIX}${sessionId}`;
71
+ }
72
+ /**
73
+ * The key of a session's SESSION row.
74
+ *
75
+ * Accepts: `sessionId` — the session's id, parsed, or read off the row.
76
+ *
77
+ * Returns: the row's partition and its fixed sort key.
78
+ *
79
+ * Throws: nothing.
80
+ */
81
+ function sessionRowKey(sessionId) {
82
+ return { PK: sessionPartition(sessionId), SK: exports.SESSION_SORT_KEY };
83
+ }
84
+ /**
85
+ * Sort key for a single message item.
86
+ *
87
+ * Accepts: `ulid` — a monotonic ULID, or the time-prefix of one when the caller
88
+ * is building a range bound rather than a key.
89
+ *
90
+ * Returns: the sort key. ULIDs sort lexicographically in time order, so the
91
+ * sort key *is* the chronological order; nothing re-sorts messages on read.
92
+ *
93
+ * Throws: nothing.
94
+ */
95
+ function messageSortKey(ulid) {
96
+ return `${MESSAGE_PREFIX}${ulid}`;
97
+ }
98
+ /**
99
+ * Whether `sortKey` is one this adapter writes.
100
+ *
101
+ * Accepts: any sort key read from the session's partition.
102
+ *
103
+ * Returns: whether this adapter owns the row. A partition query carries no
104
+ * sort-key condition, so a partition-wide delete uses this to leave a row it
105
+ * does not own in place rather than deleting the whole partition blindly.
106
+ *
107
+ * Throws: nothing.
108
+ */
109
+ function isHistorySortKey(sortKey) {
110
+ return sortKey.startsWith(ADAPTER_PREFIX);
111
+ }
112
+ /**
113
+ * `begins_with` prefix selecting every message item in a session.
114
+ *
115
+ * Accepts: nothing — the prefix is the same for every session, because the
116
+ * session is already the partition.
117
+ *
118
+ * Returns: the prefix, which excludes the SESSION metadata row: that row shares
119
+ * the partition but is not a message.
120
+ *
121
+ * Throws: nothing.
122
+ */
123
+ function messageSortKeyPrefix() {
124
+ return MESSAGE_PREFIX;
125
+ }
126
+ /**
127
+ * Query input selecting every row in a session's partition.
128
+ *
129
+ * Accepts: `options.consistent` — for a read whose answer a write depends on.
130
+ *
131
+ * Returns: the Query input, with no sort-key condition: it selects the
132
+ * messages, the SESSION metadata row, and any row another adapter left in this
133
+ * partition — which is why every caller filters with `isHistorySortKey`.
134
+ *
135
+ * Throws: nothing.
136
+ */
137
+ function sessionRowsQuery(tableName, sessionId, options = {}) {
138
+ const params = {
139
+ TableName: tableName,
140
+ KeyConditionExpression: '#pk = :pk',
141
+ ExpressionAttributeNames: { '#pk': table_schema_1.PARTITION_KEY_ATTRIBUTE },
142
+ ExpressionAttributeValues: { ':pk': sessionPartition(sessionId) },
143
+ };
144
+ if (options.consistent)
145
+ params.ConsistentRead = true;
146
+ return params;
147
+ }
148
+ /**
149
+ * Query input selecting a session's message items.
150
+ *
151
+ * Accepts: `options.descending` — newest-first, which is how a tail window is
152
+ * read. `options.limit` — the rows DynamoDB evaluates per page, not a total.
153
+ * `options.beforeSortKey` — an upper bound, expressed as `BETWEEN prefix AND
154
+ * bound` because a key condition allows one sort-key operator.
155
+ *
156
+ * Returns: the Query input, selecting messages only — the SESSION row does not
157
+ * carry the message prefix.
158
+ *
159
+ * Throws: nothing.
160
+ */
161
+ function messageQuery(tableName, sessionId, options = {}) {
162
+ const params = {
163
+ TableName: tableName,
164
+ KeyConditionExpression: '#pk = :pk AND begins_with(#sk, :skp)',
165
+ ExpressionAttributeNames: { '#pk': table_schema_1.PARTITION_KEY_ATTRIBUTE, '#sk': table_schema_1.SORT_KEY_ATTRIBUTE },
166
+ ExpressionAttributeValues: {
167
+ ':pk': sessionPartition(sessionId),
168
+ ':skp': messageSortKeyPrefix(),
169
+ },
170
+ ScanIndexForward: !options.descending,
171
+ };
172
+ if (options.beforeSortKey !== undefined) {
173
+ params.KeyConditionExpression = '#pk = :pk AND #sk BETWEEN :skp AND :before';
174
+ params.ExpressionAttributeValues[':before'] = options.beforeSortKey;
175
+ }
176
+ if (options.limit !== undefined)
177
+ params.Limit = options.limit;
178
+ if (options.consistent)
179
+ params.ConsistentRead = true;
180
+ return params;
181
+ }
182
+ /**
183
+ * Encode a single stored message into its DynamoDB row.
184
+ *
185
+ * Accepts: `source.sessionId` — the session the message belongs to.
186
+ * `source.messageId` — the message's own id, which orders it and names its
187
+ * offloaded object; the caller allocates one per message from a monotonic
188
+ * factory. `source.message` — the message in its stored form.
189
+ * `source.ttlTimestamp` — the uniform whole-conversation expiry every
190
+ * message in the session shares, so a conversation expires as one thing rather
191
+ * than losing its oldest turns first. `signal` — cancels the upload an
192
+ * offloaded message costs.
193
+ *
194
+ * Returns: the row, keyed by the session partition and a `MSG#<messageId>` sort
195
+ * key, its payload inline or offloaded to
196
+ * `<keyPrefix><sessionId, base64url>/<messageId>.bin`.
197
+ *
198
+ * Throws: `VALIDATION` naming `value` for a message the serializer cannot
199
+ * represent; `S3_OFFLOAD_FAILED` when an offloaded payload cannot be uploaded.
200
+ * Encoding precedes the transaction, so a message that cannot be stored never
201
+ * half-writes a turn.
202
+ */
203
+ async function buildMessageRow(context, source, signal) {
204
+ const { sessionId, messageId, message, ttlTimestamp } = source;
205
+ const pk = sessionPartition(sessionId);
206
+ const sk = messageSortKey(messageId);
207
+ const descriptor = await (0, codec_1.encodePayload)(message, (0, codec_1.codecDepsOf)(context, signal), {
208
+ keyParts: [sessionId],
209
+ objectId: messageId,
210
+ row: { pk, sk },
211
+ });
212
+ const item = {
213
+ PK: pk,
214
+ SK: sk,
215
+ v: table_schema_1.ROW_FORMAT_VERSION,
216
+ sessionId,
217
+ message: descriptor,
218
+ };
219
+ if (ttlTimestamp !== undefined)
220
+ item.ttl = ttlTimestamp;
221
+ return item;
222
+ }
223
+ /**
224
+ * Narrow a raw row to a {@link MessageRow}.
225
+ *
226
+ * Accepts: `raw` — any row read from a session's partition under the message
227
+ * sort-key prefix, which on a shared table another writer can produce too.
228
+ *
229
+ * Returns: the item, or undefined for a row that merely shares the prefix —
230
+ * one carrying no `sessionId`, no `message` descriptor, or a `sessionId` that
231
+ * disagrees with the partition it was found in. The test is on the attributes
232
+ * a message must have, not on a cast: this is the one boundary where a row may
233
+ * not have been written by this adapter, so the key it was found at is not
234
+ * trusted on its own. A `message` of `null` is refused here, as
235
+ * `parseMetaRow` refuses a `metadata` of `null`.
236
+ *
237
+ * Throws: nothing; a row a newer release wrote is the caller's to refuse,
238
+ * before the shape is judged against attribute types that release may no
239
+ * longer use.
240
+ *
241
+ * Guarantees: a row's attributes are bound to the partition it lives in, so a
242
+ * row planted under one session cannot claim to belong to another.
243
+ */
244
+ function parseMessageRow(raw) {
245
+ const shaped = typeof raw.sessionId === 'string' && typeof raw.message === 'object' && raw.message !== null;
246
+ if (!shaped)
247
+ return undefined;
248
+ const item = raw;
249
+ return item.PK === sessionPartition(item.sessionId) ? item : undefined;
250
+ }