@farukada/aws-langgraph-dynamodb-ts 1.0.0-rc.2 → 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 (409) hide show
  1. package/README.md +390 -193
  2. package/dist/{backfill → cjs/backfill}/backfill.d.ts +15 -12
  3. package/dist/cjs/backfill/backfill.js +177 -0
  4. package/dist/{checkpointer → cjs/checkpointer}/actions/delete-thread.d.ts +1 -1
  5. package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
  6. package/dist/{checkpointer → cjs/checkpointer}/actions/get-tuple.d.ts +4 -3
  7. package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
  8. package/dist/{checkpointer → cjs/checkpointer}/actions/list.d.ts +7 -4
  9. package/dist/cjs/checkpointer/actions/list.js +70 -0
  10. package/dist/{checkpointer → cjs/checkpointer}/actions/put-writes.d.ts +8 -6
  11. package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
  12. package/dist/{checkpointer → cjs/checkpointer}/actions/put.d.ts +21 -15
  13. package/dist/cjs/checkpointer/actions/put.js +79 -0
  14. package/dist/{checkpointer → cjs/checkpointer}/internal/delta-history.d.ts +38 -26
  15. package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
  16. package/dist/{checkpointer → cjs/checkpointer}/internal/listing.d.ts +4 -4
  17. package/dist/cjs/checkpointer/internal/listing.js +104 -0
  18. package/dist/{checkpointer → cjs/checkpointer}/internal/parse.d.ts +51 -15
  19. package/dist/cjs/checkpointer/internal/parse.js +184 -0
  20. package/dist/{checkpointer → cjs/checkpointer}/internal/pending-writes.d.ts +64 -25
  21. package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
  22. package/dist/{checkpointer → cjs/checkpointer}/internal/read.d.ts +15 -10
  23. package/dist/cjs/checkpointer/internal/read.js +132 -0
  24. package/dist/{checkpointer → cjs/checkpointer}/internal/rows.d.ts +94 -21
  25. package/dist/cjs/checkpointer/internal/rows.js +356 -0
  26. package/dist/{checkpointer → cjs/checkpointer}/internal/setup.d.ts +13 -20
  27. package/dist/cjs/checkpointer/internal/setup.js +25 -0
  28. package/dist/{checkpointer → cjs/checkpointer}/saver.d.ts +72 -36
  29. package/dist/cjs/checkpointer/saver.js +56 -0
  30. package/dist/{checkpointer → cjs/checkpointer}/types.d.ts +1 -1
  31. package/dist/cjs/checkpointer/types.js +2 -0
  32. package/dist/{factory → cjs/factory}/factory.d.ts +25 -20
  33. package/dist/cjs/factory/factory.js +137 -0
  34. package/dist/{factory → cjs/factory}/types.d.ts +12 -12
  35. package/dist/cjs/factory/types.js +2 -0
  36. package/dist/{history → cjs/history}/actions/add-messages.d.ts +18 -10
  37. package/dist/cjs/history/actions/add-messages.js +17 -0
  38. package/dist/{history → cjs/history}/actions/clear.d.ts +1 -1
  39. package/dist/cjs/history/actions/clear.js +29 -0
  40. package/dist/{history → cjs/history}/actions/get-messages.d.ts +11 -9
  41. package/dist/cjs/history/actions/get-messages.js +58 -0
  42. package/dist/{history → cjs/history}/actions/list-sessions.d.ts +3 -3
  43. package/dist/cjs/history/actions/list-sessions.js +67 -0
  44. package/dist/{history → cjs/history}/actions/reconcile-count.d.ts +13 -9
  45. package/dist/cjs/history/actions/reconcile-count.js +8 -0
  46. package/dist/{history → cjs/history}/chat-message-history.d.ts +62 -30
  47. package/dist/cjs/history/chat-message-history.js +61 -0
  48. package/dist/{history → cjs/history}/internal/append.d.ts +64 -32
  49. package/dist/cjs/history/internal/append.js +267 -0
  50. package/dist/{history → cjs/history}/internal/message-read.d.ts +3 -3
  51. package/dist/cjs/history/internal/message-read.js +93 -0
  52. package/dist/{history → cjs/history}/internal/parse.d.ts +2 -2
  53. package/dist/cjs/history/internal/parse.js +113 -0
  54. package/dist/{history → cjs/history}/internal/rows.d.ts +11 -10
  55. package/dist/cjs/history/internal/rows.js +96 -0
  56. package/dist/{history → cjs/history}/internal/session.d.ts +41 -22
  57. package/dist/cjs/history/internal/session.js +296 -0
  58. package/dist/{history → cjs/history}/internal/setup.d.ts +2 -2
  59. package/dist/cjs/history/internal/setup.js +60 -0
  60. package/dist/{history → cjs/history}/session-adapter.d.ts +0 -6
  61. package/dist/cjs/history/session-adapter.js +38 -0
  62. package/dist/{history → cjs/history}/types.d.ts +18 -15
  63. package/dist/cjs/history/types.js +2 -0
  64. package/dist/{index.d.ts → cjs/index.d.ts} +27 -27
  65. package/dist/cjs/index.js +25 -0
  66. package/dist/cjs/package.json +1 -0
  67. package/dist/{shared → cjs/shared}/adapter.d.ts +27 -16
  68. package/dist/cjs/shared/adapter.js +70 -0
  69. package/dist/cjs/shared/clock.js +14 -0
  70. package/dist/{shared → cjs/shared}/codec/codec.d.ts +37 -20
  71. package/dist/cjs/shared/codec/codec.js +162 -0
  72. package/dist/{shared → cjs/shared}/codec/compression.d.ts +9 -4
  73. package/dist/cjs/shared/codec/compression.js +45 -0
  74. package/dist/cjs/shared/codec/json-serde.js +58 -0
  75. package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +2 -1
  76. package/dist/cjs/shared/codec/s3/client-types.js +6 -0
  77. package/dist/{shared → cjs/shared}/codec/s3/client.d.ts +25 -7
  78. package/dist/cjs/shared/codec/s3/client.js +78 -0
  79. package/dist/{shared → cjs/shared}/codec/s3/config.d.ts +12 -7
  80. package/dist/cjs/shared/codec/s3/config.js +92 -0
  81. package/dist/{shared → cjs/shared}/codec/s3/lifecycle.d.ts +71 -17
  82. package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
  83. package/dist/{shared → cjs/shared}/codec/s3/offloader.d.ts +42 -29
  84. package/dist/cjs/shared/codec/s3/offloader.js +289 -0
  85. package/dist/cjs/shared/concurrency.js +31 -0
  86. package/dist/{shared → cjs/shared}/dynamodb/abort.d.ts +2 -2
  87. package/dist/cjs/shared/dynamodb/abort.js +16 -0
  88. package/dist/{shared → cjs/shared}/dynamodb/batch-write.d.ts +2 -2
  89. package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
  90. package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
  91. package/dist/{shared → cjs/shared}/dynamodb/client.d.ts +24 -22
  92. package/dist/cjs/shared/dynamodb/client.js +40 -0
  93. package/dist/{shared → cjs/shared}/dynamodb/idempotent-write.d.ts +64 -19
  94. package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
  95. package/dist/{shared → cjs/shared}/dynamodb/paginate.d.ts +2 -2
  96. package/dist/cjs/shared/dynamodb/paginate.js +90 -0
  97. package/dist/{shared → cjs/shared}/dynamodb/partition-delete.d.ts +6 -6
  98. package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
  99. package/dist/{shared → cjs/shared}/dynamodb/recency-index.d.ts +27 -15
  100. package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
  101. package/dist/{shared → cjs/shared}/dynamodb/retry.d.ts +37 -6
  102. package/dist/cjs/shared/dynamodb/retry.js +193 -0
  103. package/dist/cjs/shared/dynamodb/row-size.d.ts +33 -0
  104. package/dist/cjs/shared/dynamodb/row-size.js +30 -0
  105. package/dist/{shared → cjs/shared}/dynamodb/table-schema.d.ts +27 -18
  106. package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
  107. package/dist/{shared → cjs/shared}/errors/base-error.d.ts +42 -7
  108. package/dist/cjs/shared/errors/base-error.js +73 -0
  109. package/dist/{shared → cjs/shared}/errors/boundary.d.ts +29 -14
  110. package/dist/cjs/shared/errors/boundary.js +61 -0
  111. package/dist/cjs/shared/errors/classify.d.ts +206 -0
  112. package/dist/cjs/shared/errors/classify.js +232 -0
  113. package/dist/{shared → cjs/shared}/errors/error-code.d.ts +17 -10
  114. package/dist/cjs/shared/errors/error-code.js +27 -0
  115. package/dist/{shared → cjs/shared}/errors/errors.d.ts +75 -9
  116. package/dist/cjs/shared/errors/errors.js +123 -0
  117. package/dist/cjs/shared/logging/logger.js +30 -0
  118. package/dist/{shared → cjs/shared}/logging/redaction.d.ts +8 -4
  119. package/dist/cjs/shared/logging/redaction.js +145 -0
  120. package/dist/{shared → cjs/shared}/logging/secret-patterns.d.ts +30 -7
  121. package/dist/cjs/shared/logging/secret-patterns.js +93 -0
  122. package/dist/cjs/shared/logging/truncate.js +31 -0
  123. package/dist/{shared → cjs/shared}/options.d.ts +27 -11
  124. package/dist/cjs/shared/options.js +2 -0
  125. package/dist/cjs/shared/ulid.js +83 -0
  126. package/dist/{shared → cjs/shared}/validation/collaborators.d.ts +21 -2
  127. package/dist/cjs/shared/validation/collaborators.js +79 -0
  128. package/dist/{shared → cjs/shared}/validation/option-shape.d.ts +7 -5
  129. package/dist/cjs/shared/validation/option-shape.js +31 -0
  130. package/dist/{shared → cjs/shared}/validation/options.d.ts +4 -4
  131. package/dist/cjs/shared/validation/options.js +166 -0
  132. package/dist/cjs/shared/validation/primitives.js +114 -0
  133. package/dist/{shared → cjs/shared}/validation/ttl.d.ts +26 -9
  134. package/dist/cjs/shared/validation/ttl.js +52 -0
  135. package/dist/{store → cjs/store}/actions/list-namespaces.d.ts +5 -5
  136. package/dist/cjs/store/actions/list-namespaces.js +92 -0
  137. package/dist/{store → cjs/store}/actions/put.d.ts +11 -4
  138. package/dist/cjs/store/actions/put.js +49 -0
  139. package/dist/{store → cjs/store}/actions/reconcile-vector-index.d.ts +5 -5
  140. package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
  141. package/dist/{store → cjs/store}/actions/search.d.ts +2 -2
  142. package/dist/cjs/store/actions/search.js +26 -0
  143. package/dist/cjs/store/internal/batch-plan.d.ts +56 -0
  144. package/dist/cjs/store/internal/batch-plan.js +32 -0
  145. package/dist/{store → cjs/store}/internal/filter.d.ts +3 -3
  146. package/dist/cjs/store/internal/filter.js +64 -0
  147. package/dist/cjs/store/internal/get-item.d.ts +77 -0
  148. package/dist/cjs/store/internal/get-item.js +58 -0
  149. package/dist/{store → cjs/store}/internal/item-write.d.ts +72 -32
  150. package/dist/cjs/store/internal/item-write.js +181 -0
  151. package/dist/{store → cjs/store}/internal/parse.d.ts +15 -10
  152. package/dist/cjs/store/internal/parse.js +180 -0
  153. package/dist/{store → cjs/store}/internal/rows.d.ts +38 -34
  154. package/dist/cjs/store/internal/rows.js +166 -0
  155. package/dist/{store → cjs/store}/internal/semantic-search.d.ts +2 -2
  156. package/dist/cjs/store/internal/semantic-search.js +211 -0
  157. package/dist/{store → cjs/store}/internal/setup.d.ts +10 -15
  158. package/dist/cjs/store/internal/setup.js +103 -0
  159. package/dist/{store → cjs/store}/internal/table-search.d.ts +5 -5
  160. package/dist/cjs/store/internal/table-search.js +123 -0
  161. package/dist/{store → cjs/store}/internal/vector-index.d.ts +26 -15
  162. package/dist/cjs/store/internal/vector-index.js +269 -0
  163. package/dist/{store → cjs/store}/store.d.ts +82 -39
  164. package/dist/cjs/store/store.js +97 -0
  165. package/dist/{store → cjs/store}/types.d.ts +25 -10
  166. package/dist/cjs/store/types.js +2 -0
  167. package/dist/cjs/store/vector-backend.js +4 -0
  168. package/dist/esm/backfill/backfill.d.ts +171 -0
  169. package/dist/esm/backfill/backfill.js +170 -0
  170. package/dist/{checkpointer/actions/delete-thread.js → esm/checkpointer/actions/delete-thread.d.ts} +4 -26
  171. package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
  172. package/dist/{checkpointer/actions/get-tuple.js → esm/checkpointer/actions/get-tuple.d.ts} +7 -24
  173. package/dist/esm/checkpointer/actions/get-tuple.js +19 -0
  174. package/dist/esm/checkpointer/actions/list.d.ts +55 -0
  175. package/dist/esm/checkpointer/actions/list.js +67 -0
  176. package/dist/{checkpointer/actions/put-writes.js → esm/checkpointer/actions/put-writes.d.ts} +10 -37
  177. package/dist/esm/checkpointer/actions/put-writes.js +18 -0
  178. package/dist/esm/checkpointer/actions/put.d.ts +95 -0
  179. package/dist/esm/checkpointer/actions/put.js +75 -0
  180. package/dist/esm/checkpointer/internal/delta-history.d.ts +124 -0
  181. package/dist/esm/checkpointer/internal/delta-history.js +126 -0
  182. package/dist/{checkpointer/internal/listing.js → esm/checkpointer/internal/listing.d.ts} +22 -118
  183. package/dist/esm/checkpointer/internal/listing.js +95 -0
  184. package/dist/esm/checkpointer/internal/parse.d.ts +298 -0
  185. package/dist/esm/checkpointer/internal/parse.js +169 -0
  186. package/dist/esm/checkpointer/internal/pending-writes.d.ts +314 -0
  187. package/dist/esm/checkpointer/internal/pending-writes.js +229 -0
  188. package/dist/esm/checkpointer/internal/read.d.ts +135 -0
  189. package/dist/esm/checkpointer/internal/read.js +125 -0
  190. package/dist/esm/checkpointer/internal/rows.d.ts +644 -0
  191. package/dist/esm/checkpointer/internal/rows.js +323 -0
  192. package/dist/esm/checkpointer/internal/setup.d.ts +47 -0
  193. package/dist/esm/checkpointer/internal/setup.js +21 -0
  194. package/dist/{checkpointer/saver.js → esm/checkpointer/saver.d.ts} +84 -87
  195. package/dist/esm/checkpointer/saver.js +52 -0
  196. package/dist/esm/checkpointer/types.d.ts +51 -0
  197. package/dist/esm/checkpointer/types.js +1 -0
  198. package/dist/esm/factory/factory.d.ts +154 -0
  199. package/dist/esm/factory/factory.js +133 -0
  200. package/dist/esm/factory/types.d.ts +76 -0
  201. package/dist/esm/factory/types.js +1 -0
  202. package/dist/{history/actions/add-messages.js → esm/history/actions/add-messages.d.ts} +20 -26
  203. package/dist/esm/history/actions/add-messages.js +14 -0
  204. package/dist/{history/actions/clear.js → esm/history/actions/clear.d.ts} +4 -35
  205. package/dist/esm/history/actions/clear.js +26 -0
  206. package/dist/esm/history/actions/get-messages.d.ts +60 -0
  207. package/dist/esm/history/actions/get-messages.js +55 -0
  208. package/dist/esm/history/actions/list-sessions.d.ts +55 -0
  209. package/dist/esm/history/actions/list-sessions.js +64 -0
  210. package/dist/{history/actions/reconcile-count.js → esm/history/actions/reconcile-count.d.ts} +14 -16
  211. package/dist/esm/history/actions/reconcile-count.js +5 -0
  212. package/dist/{history/chat-message-history.js → esm/history/chat-message-history.d.ts} +76 -87
  213. package/dist/esm/history/chat-message-history.js +57 -0
  214. package/dist/esm/history/internal/append.d.ts +244 -0
  215. package/dist/esm/history/internal/append.js +259 -0
  216. package/dist/esm/history/internal/message-read.d.ts +84 -0
  217. package/dist/esm/history/internal/message-read.js +89 -0
  218. package/dist/esm/history/internal/parse.d.ts +153 -0
  219. package/dist/esm/history/internal/parse.js +105 -0
  220. package/dist/{history/internal/rows.js → esm/history/internal/rows.d.ts} +58 -112
  221. package/dist/esm/history/internal/rows.js +83 -0
  222. package/dist/esm/history/internal/session.d.ts +350 -0
  223. package/dist/esm/history/internal/session.js +285 -0
  224. package/dist/esm/history/internal/setup.d.ts +64 -0
  225. package/dist/esm/history/internal/setup.js +56 -0
  226. package/dist/{history/session-adapter.js → esm/history/session-adapter.d.ts} +25 -39
  227. package/dist/esm/history/session-adapter.js +34 -0
  228. package/dist/esm/history/types.d.ts +102 -0
  229. package/dist/esm/history/types.js +1 -0
  230. package/dist/esm/index.d.ts +53 -0
  231. package/dist/esm/index.js +10 -0
  232. package/dist/esm/shared/adapter.d.ts +146 -0
  233. package/dist/esm/shared/adapter.js +65 -0
  234. package/dist/{shared/clock.js → esm/shared/clock.d.ts} +3 -14
  235. package/dist/esm/shared/clock.js +9 -0
  236. package/dist/esm/shared/codec/codec.d.ts +336 -0
  237. package/dist/esm/shared/codec/codec.js +150 -0
  238. package/dist/esm/shared/codec/compression.d.ts +66 -0
  239. package/dist/esm/shared/codec/compression.js +40 -0
  240. package/dist/esm/shared/codec/json-serde.d.ts +80 -0
  241. package/dist/esm/shared/codec/json-serde.js +54 -0
  242. package/dist/esm/shared/codec/s3/client-types.d.ts +54 -0
  243. package/dist/esm/shared/codec/s3/client-types.js +3 -0
  244. package/dist/esm/shared/codec/s3/client.d.ts +63 -0
  245. package/dist/esm/shared/codec/s3/client.js +40 -0
  246. package/dist/{shared/codec/s3/config.js → esm/shared/codec/s3/config.d.ts} +45 -93
  247. package/dist/esm/shared/codec/s3/config.js +79 -0
  248. package/dist/esm/shared/codec/s3/lifecycle.d.ts +220 -0
  249. package/dist/esm/shared/codec/s3/lifecycle.js +214 -0
  250. package/dist/esm/shared/codec/s3/offloader.d.ts +428 -0
  251. package/dist/esm/shared/codec/s3/offloader.js +278 -0
  252. package/dist/{shared/concurrency.js → esm/shared/concurrency.d.ts} +2 -37
  253. package/dist/esm/shared/concurrency.js +27 -0
  254. package/dist/{shared/dynamodb/abort.js → esm/shared/dynamodb/abort.d.ts} +4 -16
  255. package/dist/esm/shared/dynamodb/abort.js +12 -0
  256. package/dist/esm/shared/dynamodb/batch-write.d.ts +86 -0
  257. package/dist/esm/shared/dynamodb/batch-write.js +74 -0
  258. package/dist/{shared/dynamodb/cancellation.js → esm/shared/dynamodb/cancellation.d.ts} +25 -53
  259. package/dist/esm/shared/dynamodb/cancellation.js +30 -0
  260. package/dist/{shared/dynamodb/client.js → esm/shared/dynamodb/client.d.ts} +74 -64
  261. package/dist/esm/shared/dynamodb/client.js +35 -0
  262. package/dist/{shared/dynamodb/idempotent-write.js → esm/shared/dynamodb/idempotent-write.d.ts} +172 -169
  263. package/dist/esm/shared/dynamodb/idempotent-write.js +153 -0
  264. package/dist/esm/shared/dynamodb/paginate.d.ts +111 -0
  265. package/dist/esm/shared/dynamodb/paginate.js +84 -0
  266. package/dist/esm/shared/dynamodb/partition-delete.d.ts +204 -0
  267. package/dist/esm/shared/dynamodb/partition-delete.js +171 -0
  268. package/dist/esm/shared/dynamodb/recency-index.d.ts +243 -0
  269. package/dist/esm/shared/dynamodb/recency-index.js +136 -0
  270. package/dist/esm/shared/dynamodb/retry.d.ts +317 -0
  271. package/dist/esm/shared/dynamodb/retry.js +180 -0
  272. package/dist/esm/shared/dynamodb/row-size.d.ts +33 -0
  273. package/dist/esm/shared/dynamodb/row-size.js +26 -0
  274. package/dist/{shared/dynamodb/table-schema.js → esm/shared/dynamodb/table-schema.d.ts} +57 -67
  275. package/dist/esm/shared/dynamodb/table-schema.js +43 -0
  276. package/dist/esm/shared/errors/base-error.d.ts +231 -0
  277. package/dist/esm/shared/errors/base-error.js +64 -0
  278. package/dist/esm/shared/errors/boundary.d.ts +86 -0
  279. package/dist/esm/shared/errors/boundary.js +54 -0
  280. package/dist/esm/shared/errors/classify.d.ts +206 -0
  281. package/dist/esm/shared/errors/classify.js +220 -0
  282. package/dist/{shared/errors/error-code.js → esm/shared/errors/error-code.d.ts} +39 -43
  283. package/dist/esm/shared/errors/error-code.js +24 -0
  284. package/dist/{shared/errors/errors.js → esm/shared/errors/errors.d.ts} +92 -98
  285. package/dist/esm/shared/errors/errors.js +110 -0
  286. package/dist/{shared/logging/logger.js → esm/shared/logging/logger.d.ts} +22 -52
  287. package/dist/esm/shared/logging/logger.js +25 -0
  288. package/dist/esm/shared/logging/redaction.d.ts +123 -0
  289. package/dist/esm/shared/logging/redaction.js +140 -0
  290. package/dist/{shared/logging/secret-patterns.js → esm/shared/logging/secret-patterns.d.ts} +46 -87
  291. package/dist/esm/shared/logging/secret-patterns.js +83 -0
  292. package/dist/{shared/logging/truncate.js → esm/shared/logging/truncate.d.ts} +6 -40
  293. package/dist/esm/shared/logging/truncate.js +25 -0
  294. package/dist/esm/shared/options.d.ts +100 -0
  295. package/dist/esm/shared/options.js +1 -0
  296. package/dist/{shared/ulid.js → esm/shared/ulid.d.ts} +4 -84
  297. package/dist/esm/shared/ulid.js +77 -0
  298. package/dist/{shared/validation/collaborators.js → esm/shared/validation/collaborators.d.ts} +37 -65
  299. package/dist/esm/shared/validation/collaborators.js +70 -0
  300. package/dist/{shared/validation/option-shape.js → esm/shared/validation/option-shape.d.ts} +14 -36
  301. package/dist/esm/shared/validation/option-shape.js +24 -0
  302. package/dist/esm/shared/validation/options.d.ts +145 -0
  303. package/dist/esm/shared/validation/options.js +156 -0
  304. package/dist/{shared/validation/primitives.js → esm/shared/validation/primitives.d.ts} +30 -125
  305. package/dist/esm/shared/validation/primitives.js +100 -0
  306. package/dist/esm/shared/validation/ttl.d.ts +94 -0
  307. package/dist/esm/shared/validation/ttl.js +46 -0
  308. package/dist/esm/store/actions/list-namespaces.d.ts +79 -0
  309. package/dist/esm/store/actions/list-namespaces.js +86 -0
  310. package/dist/esm/store/actions/put.d.ts +43 -0
  311. package/dist/esm/store/actions/put.js +46 -0
  312. package/dist/{store/actions/reconcile-vector-index.js → esm/store/actions/reconcile-vector-index.d.ts} +8 -16
  313. package/dist/esm/store/actions/reconcile-vector-index.js +10 -0
  314. package/dist/esm/store/actions/search.d.ts +38 -0
  315. package/dist/esm/store/actions/search.js +23 -0
  316. package/dist/esm/store/internal/batch-plan.d.ts +56 -0
  317. package/dist/esm/store/internal/batch-plan.js +28 -0
  318. package/dist/esm/store/internal/filter.d.ts +43 -0
  319. package/dist/esm/store/internal/filter.js +60 -0
  320. package/dist/esm/store/internal/get-item.d.ts +77 -0
  321. package/dist/esm/store/internal/get-item.js +54 -0
  322. package/dist/esm/store/internal/item-write.d.ts +270 -0
  323. package/dist/esm/store/internal/item-write.js +173 -0
  324. package/dist/esm/store/internal/parse.d.ts +230 -0
  325. package/dist/esm/store/internal/parse.js +169 -0
  326. package/dist/{store/internal/rows.js → esm/store/internal/rows.d.ts} +111 -199
  327. package/dist/esm/store/internal/rows.js +147 -0
  328. package/dist/esm/store/internal/semantic-search.d.ts +168 -0
  329. package/dist/esm/store/internal/semantic-search.js +200 -0
  330. package/dist/esm/store/internal/setup.d.ts +96 -0
  331. package/dist/esm/store/internal/setup.js +98 -0
  332. package/dist/esm/store/internal/table-search.d.ts +100 -0
  333. package/dist/esm/store/internal/table-search.js +119 -0
  334. package/dist/esm/store/internal/vector-index.d.ts +258 -0
  335. package/dist/esm/store/internal/vector-index.js +256 -0
  336. package/dist/{store/store.js → esm/store/store.d.ts} +99 -133
  337. package/dist/esm/store/store.js +93 -0
  338. package/dist/esm/store/types.d.ts +111 -0
  339. package/dist/esm/store/types.js +1 -0
  340. package/dist/esm/store/vector-backend.d.ts +104 -0
  341. package/dist/esm/store/vector-backend.js +1 -0
  342. package/package.json +50 -44
  343. package/dist/backfill/backfill.js +0 -393
  344. package/dist/checkpointer/actions/list.js +0 -142
  345. package/dist/checkpointer/actions/put.js +0 -195
  346. package/dist/checkpointer/internal/delta-history.js +0 -252
  347. package/dist/checkpointer/internal/parse.js +0 -372
  348. package/dist/checkpointer/internal/pending-writes.js +0 -588
  349. package/dist/checkpointer/internal/read.js +0 -264
  350. package/dist/checkpointer/internal/rows.js +0 -834
  351. package/dist/checkpointer/internal/setup.js +0 -72
  352. package/dist/checkpointer/types.js +0 -12
  353. package/dist/factory/factory.js +0 -266
  354. package/dist/factory/types.js +0 -10
  355. package/dist/history/actions/get-messages.js +0 -141
  356. package/dist/history/actions/list-sessions.js +0 -156
  357. package/dist/history/internal/append.js +0 -500
  358. package/dist/history/internal/message-read.js +0 -204
  359. package/dist/history/internal/parse.js +0 -252
  360. package/dist/history/internal/session.js +0 -628
  361. package/dist/history/internal/setup.js +0 -106
  362. package/dist/history/types.js +0 -12
  363. package/dist/index.js +0 -51
  364. package/dist/shared/adapter.js +0 -143
  365. package/dist/shared/codec/codec.js +0 -441
  366. package/dist/shared/codec/compression.js +0 -89
  367. package/dist/shared/codec/json-serde.js +0 -191
  368. package/dist/shared/codec/s3/client-types.js +0 -26
  369. package/dist/shared/codec/s3/client.js +0 -97
  370. package/dist/shared/codec/s3/lifecycle.js +0 -355
  371. package/dist/shared/codec/s3/offloader.js +0 -658
  372. package/dist/shared/dynamodb/batch-write.js +0 -173
  373. package/dist/shared/dynamodb/paginate.js +0 -188
  374. package/dist/shared/dynamodb/partition-delete.js +0 -340
  375. package/dist/shared/dynamodb/recency-index.js +0 -377
  376. package/dist/shared/dynamodb/retry.js +0 -463
  377. package/dist/shared/errors/base-error.js +0 -174
  378. package/dist/shared/errors/boundary.js +0 -143
  379. package/dist/shared/errors/classify.d.ts +0 -97
  380. package/dist/shared/errors/classify.js +0 -257
  381. package/dist/shared/logging/redaction.js +0 -316
  382. package/dist/shared/options.js +0 -11
  383. package/dist/shared/validation/options.js +0 -328
  384. package/dist/shared/validation/ttl.js +0 -132
  385. package/dist/store/actions/list-namespaces.js +0 -197
  386. package/dist/store/actions/put.js +0 -78
  387. package/dist/store/actions/search.js +0 -66
  388. package/dist/store/internal/batch-plan.d.ts +0 -26
  389. package/dist/store/internal/batch-plan.js +0 -109
  390. package/dist/store/internal/filter.js +0 -137
  391. package/dist/store/internal/get-item.d.ts +0 -45
  392. package/dist/store/internal/get-item.js +0 -115
  393. package/dist/store/internal/item-write.js +0 -463
  394. package/dist/store/internal/parse.js +0 -350
  395. package/dist/store/internal/semantic-search.js +0 -389
  396. package/dist/store/internal/setup.js +0 -223
  397. package/dist/store/internal/table-search.js +0 -213
  398. package/dist/store/internal/vector-index.js +0 -546
  399. package/dist/store/types.js +0 -15
  400. package/dist/store/vector-backend.js +0 -17
  401. /package/dist/{shared → cjs/shared}/clock.d.ts +0 -0
  402. /package/dist/{shared → cjs/shared}/codec/json-serde.d.ts +0 -0
  403. /package/dist/{shared → cjs/shared}/concurrency.d.ts +0 -0
  404. /package/dist/{shared → cjs/shared}/dynamodb/cancellation.d.ts +0 -0
  405. /package/dist/{shared → cjs/shared}/logging/logger.d.ts +0 -0
  406. /package/dist/{shared → cjs/shared}/logging/truncate.d.ts +0 -0
  407. /package/dist/{shared → cjs/shared}/ulid.d.ts +0 -0
  408. /package/dist/{shared → cjs/shared}/validation/primitives.d.ts +0 -0
  409. /package/dist/{store → cjs/store}/vector-backend.d.ts +0 -0
@@ -0,0 +1,105 @@
1
+ import { mapChatMessagesToStoredMessages, mapStoredMessagesToChatMessages, } from '@langchain/core/messages';
2
+ import { KEY_SEPARATOR, MAX_PARTITION_ID_BYTES } from '../../shared/dynamodb/table-schema.js';
3
+ import { validationError } from '../../shared/errors/errors.js';
4
+ import { redactedMessage } from '../../shared/logging/secret-patterns.js';
5
+ import { truncateForLog } from '../../shared/logging/truncate.js';
6
+ import { ULID_TIME_RANGE_MS } from '../../shared/ulid.js';
7
+ import { assertSignalLike } from '../../shared/validation/collaborators.js';
8
+ import { assertShape } from '../../shared/validation/option-shape.js';
9
+ import { parseIdentifier, parseInteger, parseLimit, parseString, } from '../../shared/validation/primitives.js';
10
+ import { GET_MESSAGES_KEYS, LIST_SESSIONS_KEYS } from './setup.js';
11
+ export function parseSessionId(value) {
12
+ return parseIdentifier(value, KEY_SEPARATOR, 'sessionId', MAX_PARTITION_ID_BYTES);
13
+ }
14
+ function toStoredMessages(messages) {
15
+ const stored = [];
16
+ for (let index = 0; index < messages.length; index += 1) {
17
+ try {
18
+ stored.push(mapChatMessagesToStoredMessages([messages[index]])[0]);
19
+ }
20
+ catch (error) {
21
+ throw validationError(`messages[${index}] is not a LangChain message: ` + redactedMessage(error), 'messages');
22
+ }
23
+ }
24
+ return stored;
25
+ }
26
+ export function parseStoredMessages(stored) {
27
+ for (let index = 0; index < stored.length; index += 1) {
28
+ const message = stored[index];
29
+ if (message === undefined) {
30
+ throw validationError(`messages[${index}] is missing`, 'messages');
31
+ }
32
+ try {
33
+ mapStoredMessagesToChatMessages([message]);
34
+ }
35
+ catch (error) {
36
+ throw validationError(`messages[${index}] of type "${truncateForLog(message.type)}" cannot be stored: ` +
37
+ redactedMessage(error), 'messages');
38
+ }
39
+ }
40
+ return stored;
41
+ }
42
+ export function parseMessages(messages) {
43
+ if (!Array.isArray(messages)) {
44
+ throw validationError('messages must be an array', 'messages');
45
+ }
46
+ return parseStoredMessages(toStoredMessages(messages));
47
+ }
48
+ function windowBound(before) {
49
+ const hasGetTime = before !== null && typeof before.getTime === 'function';
50
+ const time = hasGetTime ? before.getTime() : Number.NaN;
51
+ if (!Number.isFinite(time))
52
+ throw validationError('before must be a valid Date', 'before');
53
+ if (time < 0 || time >= ULID_TIME_RANGE_MS) {
54
+ throw validationError('before must be a Date from the epoch onwards and before the year 37648: the bound is ' +
55
+ 'the message id of that instant, and a message id encodes its millisecond in ten ' +
56
+ 'base-32 characters, which hold no instant outside that range', 'before');
57
+ }
58
+ return new Date(time);
59
+ }
60
+ export function parseMessageWindow(window) {
61
+ const parsed = {};
62
+ if (window.limit !== undefined)
63
+ parsed.limit = parseLimit(window.limit, 1);
64
+ if (window.before !== undefined)
65
+ parsed.before = windowBound(window.before);
66
+ return parsed;
67
+ }
68
+ export function parseGetMessagesRequest(sessionId, options) {
69
+ assertShape(options, GET_MESSAGES_KEYS, 'options');
70
+ assertSignalLike(options.signal);
71
+ const parsedSessionId = parseSessionId(sessionId);
72
+ return {
73
+ sessionId: parsedSessionId,
74
+ window: parseMessageWindow(options),
75
+ signal: options.signal,
76
+ };
77
+ }
78
+ function scanCap(value, field) {
79
+ if (value === undefined || value === Infinity)
80
+ return value;
81
+ return parseInteger(value, field, { min: 1 });
82
+ }
83
+ function pageCursor(cursor, indexName) {
84
+ if (cursor === undefined)
85
+ return undefined;
86
+ if (indexName === undefined) {
87
+ throw validationError('paging by cursor needs a configured `indexName`: without the recency index a listing is ' +
88
+ 'one table scan, which has no position to resume from', 'cursor');
89
+ }
90
+ return parseString(cursor, 'cursor');
91
+ }
92
+ export function parseListSessionsRequest(options, indexName) {
93
+ assertShape(options, LIST_SESSIONS_KEYS, 'options');
94
+ assertSignalLike(options.signal);
95
+ const limit = options.limit === undefined ? undefined : parseLimit(options.limit, 0);
96
+ const maxItems = scanCap(options.maxItems, 'maxItems');
97
+ const maxIterations = scanCap(options.maxIterations, 'maxIterations');
98
+ return {
99
+ limit,
100
+ maxItems,
101
+ maxIterations,
102
+ cursor: pageCursor(options.cursor, indexName),
103
+ signal: options.signal,
104
+ };
105
+ }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  /**
3
2
  * Hides the history's key layout and how a message becomes a row and back.
4
3
  *
@@ -9,39 +8,15 @@
9
8
  * the SESSION row carries is `session.ts`'s decision; where it lives is this
10
9
  * module's.
11
10
  */
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}`;
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.js';
14
+ import type { AttributeMap } from '../../shared/dynamodb/client.js';
15
+ import { type RowKey } from '../../shared/dynamodb/table-schema.js';
16
+ import type { SessionId } from './parse.js';
17
+ import type { HistoryContext } from './setup.js';
36
18
  /** 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}`;
19
+ export declare const SESSION_SORT_KEY = "HISTORY#SESSION";
45
20
  /**
46
21
  * The tag every chat-history partition key starts with.
47
22
  *
@@ -52,9 +27,7 @@ const ADAPTER_PARTITION_PREFIX = `${table_schema_1.ADAPTER_TAGS.history}${table_
52
27
  *
53
28
  * Throws: nothing.
54
29
  */
55
- function historyPartitionPrefix() {
56
- return ADAPTER_PARTITION_PREFIX;
57
- }
30
+ export declare function historyPartitionPrefix(): string;
58
31
  /**
59
32
  * Partition key for a chat session: the adapter tag plus the session id.
60
33
  *
@@ -66,9 +39,7 @@ function historyPartitionPrefix() {
66
39
  *
67
40
  * Throws: nothing.
68
41
  */
69
- function sessionPartition(sessionId) {
70
- return `${ADAPTER_PARTITION_PREFIX}${sessionId}`;
71
- }
42
+ export declare function sessionPartition(sessionId: string): string;
72
43
  /**
73
44
  * The key of a session's SESSION row.
74
45
  *
@@ -78,9 +49,7 @@ function sessionPartition(sessionId) {
78
49
  *
79
50
  * Throws: nothing.
80
51
  */
81
- function sessionRowKey(sessionId) {
82
- return { PK: sessionPartition(sessionId), SK: exports.SESSION_SORT_KEY };
83
- }
52
+ export declare function sessionRowKey(sessionId: string): RowKey;
84
53
  /**
85
54
  * Sort key for a single message item.
86
55
  *
@@ -92,9 +61,7 @@ function sessionRowKey(sessionId) {
92
61
  *
93
62
  * Throws: nothing.
94
63
  */
95
- function messageSortKey(ulid) {
96
- return `${MESSAGE_PREFIX}${ulid}`;
97
- }
64
+ export declare function messageSortKey(ulid: string): string;
98
65
  /**
99
66
  * Whether `sortKey` is one this adapter writes.
100
67
  *
@@ -106,9 +73,7 @@ function messageSortKey(ulid) {
106
73
  *
107
74
  * Throws: nothing.
108
75
  */
109
- function isHistorySortKey(sortKey) {
110
- return sortKey.startsWith(ADAPTER_PREFIX);
111
- }
76
+ export declare function isHistorySortKey(sortKey: string): boolean;
112
77
  /**
113
78
  * `begins_with` prefix selecting every message item in a session.
114
79
  *
@@ -120,8 +85,10 @@ function isHistorySortKey(sortKey) {
120
85
  *
121
86
  * Throws: nothing.
122
87
  */
123
- function messageSortKeyPrefix() {
124
- return MESSAGE_PREFIX;
88
+ export declare function messageSortKeyPrefix(): string;
89
+ /** Options for {@link sessionRowsQuery}. */
90
+ export interface SessionRowsQueryOptions {
91
+ consistent?: boolean;
125
92
  }
126
93
  /**
127
94
  * Query input selecting every row in a session's partition.
@@ -134,16 +101,20 @@ function messageSortKeyPrefix() {
134
101
  *
135
102
  * Throws: nothing.
136
103
  */
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;
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;
147
118
  }
148
119
  /**
149
120
  * Query input selecting a session's message items.
@@ -158,26 +129,25 @@ function sessionRowsQuery(tableName, sessionId, options = {}) {
158
129
  *
159
130
  * Throws: nothing.
160
131
  */
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;
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;
181
151
  }
182
152
  /**
183
153
  * Encode a single stored message into its DynamoDB row.
@@ -191,35 +161,17 @@ function messageQuery(tableName, sessionId, options = {}) {
191
161
  * than losing its oldest turns first. `signal` — cancels the upload an
192
162
  * offloaded message costs.
193
163
  *
194
- * Returns: the row, keyed by the session partition and a `MSG#<messageId>` sort
195
- * key, its payload inline or offloaded to
164
+ * Returns: the row, keyed by the session partition and a
165
+ * `HISTORY#MSG#<messageId>` sort key, its payload inline or offloaded to
196
166
  * `<keyPrefix><sessionId, base64url>/<messageId>.bin`.
197
167
  *
198
168
  * 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.
169
+ * represent, or `payload` for one too large to store inline without `s3`,
170
+ * or, once offloaded, larger than `s3.maxDownloadBytes`; `S3_OFFLOAD_FAILED`
171
+ * when an offloaded payload cannot be uploaded. Encoding precedes the
172
+ * transaction, so a message that cannot be stored never half-writes a turn.
202
173
  */
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
- }
174
+ export declare function buildMessageRow(context: HistoryContext, source: MessageRowSource, signal?: AbortSignal): Promise<MessageRow>;
223
175
  /**
224
176
  * Narrow a raw row to a {@link MessageRow}.
225
177
  *
@@ -241,10 +193,4 @@ async function buildMessageRow(context, source, signal) {
241
193
  * Guarantees: a row's attributes are bound to the partition it lives in, so a
242
194
  * row planted under one session cannot claim to belong to another.
243
195
  */
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
- }
196
+ export declare function parseMessageRow(raw: AttributeMap): MessageRow | undefined;
@@ -0,0 +1,83 @@
1
+ import { codecDepsOf, encodePayload } from '../../shared/codec/codec.js';
2
+ import { ADAPTER_TAGS, KEY_SEPARATOR, PARTITION_KEY_ATTRIBUTE, ROW_FORMAT_VERSION, SORT_KEY_ATTRIBUTE, } from '../../shared/dynamodb/table-schema.js';
3
+ const ADAPTER_PREFIX = `HISTORY${KEY_SEPARATOR}`;
4
+ export const SESSION_SORT_KEY = `${ADAPTER_PREFIX}SESSION`;
5
+ const MESSAGE_PREFIX = `${ADAPTER_PREFIX}MSG${KEY_SEPARATOR}`;
6
+ const ADAPTER_PARTITION_PREFIX = `${ADAPTER_TAGS.history}${KEY_SEPARATOR}`;
7
+ export function historyPartitionPrefix() {
8
+ return ADAPTER_PARTITION_PREFIX;
9
+ }
10
+ export function sessionPartition(sessionId) {
11
+ return `${ADAPTER_PARTITION_PREFIX}${sessionId}`;
12
+ }
13
+ export function sessionRowKey(sessionId) {
14
+ return { PK: sessionPartition(sessionId), SK: SESSION_SORT_KEY };
15
+ }
16
+ export function messageSortKey(ulid) {
17
+ return `${MESSAGE_PREFIX}${ulid}`;
18
+ }
19
+ export function isHistorySortKey(sortKey) {
20
+ return sortKey.startsWith(ADAPTER_PREFIX);
21
+ }
22
+ export function messageSortKeyPrefix() {
23
+ return MESSAGE_PREFIX;
24
+ }
25
+ export function sessionRowsQuery(tableName, sessionId, options = {}) {
26
+ const params = {
27
+ TableName: tableName,
28
+ KeyConditionExpression: '#pk = :pk',
29
+ ExpressionAttributeNames: { '#pk': PARTITION_KEY_ATTRIBUTE },
30
+ ExpressionAttributeValues: { ':pk': sessionPartition(sessionId) },
31
+ };
32
+ if (options.consistent)
33
+ params.ConsistentRead = true;
34
+ return params;
35
+ }
36
+ export function messageQuery(tableName, sessionId, options = {}) {
37
+ const params = {
38
+ TableName: tableName,
39
+ KeyConditionExpression: '#pk = :pk AND begins_with(#sk, :skp)',
40
+ ExpressionAttributeNames: { '#pk': PARTITION_KEY_ATTRIBUTE, '#sk': SORT_KEY_ATTRIBUTE },
41
+ ExpressionAttributeValues: {
42
+ ':pk': sessionPartition(sessionId),
43
+ ':skp': messageSortKeyPrefix(),
44
+ },
45
+ ScanIndexForward: !options.descending,
46
+ };
47
+ if (options.beforeSortKey !== undefined) {
48
+ params.KeyConditionExpression = '#pk = :pk AND #sk BETWEEN :skp AND :before';
49
+ params.ExpressionAttributeValues[':before'] = options.beforeSortKey;
50
+ }
51
+ if (options.limit !== undefined)
52
+ params.Limit = options.limit;
53
+ if (options.consistent)
54
+ params.ConsistentRead = true;
55
+ return params;
56
+ }
57
+ export async function buildMessageRow(context, source, signal) {
58
+ const { sessionId, messageId, message, ttlTimestamp } = source;
59
+ const pk = sessionPartition(sessionId);
60
+ const sk = messageSortKey(messageId);
61
+ const descriptor = await encodePayload(message, codecDepsOf(context, signal), {
62
+ keyParts: [sessionId],
63
+ objectId: messageId,
64
+ row: { pk, sk },
65
+ });
66
+ const item = {
67
+ PK: pk,
68
+ SK: sk,
69
+ v: ROW_FORMAT_VERSION,
70
+ sessionId,
71
+ message: descriptor,
72
+ };
73
+ if (ttlTimestamp !== undefined)
74
+ item.ttl = ttlTimestamp;
75
+ return item;
76
+ }
77
+ export function parseMessageRow(raw) {
78
+ const shaped = typeof raw.sessionId === 'string' && typeof raw.message === 'object' && raw.message !== null;
79
+ if (!shaped)
80
+ return undefined;
81
+ const item = raw;
82
+ return item.PK === sessionPartition(item.sessionId) ? item : undefined;
83
+ }