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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (608) hide show
  1. package/README.md +1820 -290
  2. package/dist/cjs/backfill/backfill.d.ts +171 -0
  3. package/dist/cjs/backfill/backfill.js +177 -0
  4. package/dist/cjs/checkpointer/actions/delete-thread.d.ts +50 -0
  5. package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
  6. package/dist/cjs/checkpointer/actions/get-tuple.d.ts +36 -0
  7. package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
  8. package/dist/cjs/checkpointer/actions/list.d.ts +55 -0
  9. package/dist/cjs/checkpointer/actions/list.js +70 -0
  10. package/dist/cjs/checkpointer/actions/put-writes.d.ts +49 -0
  11. package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
  12. package/dist/cjs/checkpointer/actions/put.d.ts +95 -0
  13. package/dist/cjs/checkpointer/actions/put.js +79 -0
  14. package/dist/cjs/checkpointer/internal/delta-history.d.ts +124 -0
  15. package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
  16. package/dist/cjs/checkpointer/internal/listing.d.ts +149 -0
  17. package/dist/cjs/checkpointer/internal/listing.js +104 -0
  18. package/dist/cjs/checkpointer/internal/parse.d.ts +298 -0
  19. package/dist/cjs/checkpointer/internal/parse.js +184 -0
  20. package/dist/cjs/checkpointer/internal/pending-writes.d.ts +314 -0
  21. package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
  22. package/dist/cjs/checkpointer/internal/read.d.ts +135 -0
  23. package/dist/cjs/checkpointer/internal/read.js +132 -0
  24. package/dist/cjs/checkpointer/internal/rows.d.ts +644 -0
  25. package/dist/cjs/checkpointer/internal/rows.js +356 -0
  26. package/dist/cjs/checkpointer/internal/setup.d.ts +47 -0
  27. package/dist/cjs/checkpointer/internal/setup.js +25 -0
  28. package/dist/cjs/checkpointer/saver.d.ts +306 -0
  29. package/dist/cjs/checkpointer/saver.js +56 -0
  30. package/dist/cjs/checkpointer/types.d.ts +51 -0
  31. package/dist/cjs/factory/factory.d.ts +154 -0
  32. package/dist/cjs/factory/factory.js +137 -0
  33. package/dist/{factory → cjs/factory}/types.d.ts +33 -14
  34. package/dist/cjs/history/actions/add-messages.d.ts +51 -0
  35. package/dist/cjs/history/actions/add-messages.js +17 -0
  36. package/dist/cjs/history/actions/clear.d.ts +52 -0
  37. package/dist/cjs/history/actions/clear.js +29 -0
  38. package/dist/cjs/history/actions/get-messages.d.ts +60 -0
  39. package/dist/cjs/history/actions/get-messages.js +58 -0
  40. package/dist/cjs/history/actions/list-sessions.d.ts +55 -0
  41. package/dist/cjs/history/actions/list-sessions.js +67 -0
  42. package/dist/cjs/history/actions/reconcile-count.d.ts +49 -0
  43. package/dist/cjs/history/actions/reconcile-count.js +8 -0
  44. package/dist/cjs/history/chat-message-history.d.ts +267 -0
  45. package/dist/cjs/history/chat-message-history.js +61 -0
  46. package/dist/cjs/history/internal/append.d.ts +244 -0
  47. package/dist/cjs/history/internal/append.js +267 -0
  48. package/dist/cjs/history/internal/message-read.d.ts +84 -0
  49. package/dist/cjs/history/internal/message-read.js +93 -0
  50. package/dist/cjs/history/internal/parse.d.ts +153 -0
  51. package/dist/cjs/history/internal/parse.js +113 -0
  52. package/dist/cjs/history/internal/rows.d.ts +196 -0
  53. package/dist/cjs/history/internal/rows.js +96 -0
  54. package/dist/cjs/history/internal/session.d.ts +350 -0
  55. package/dist/cjs/history/internal/session.js +296 -0
  56. package/dist/cjs/history/internal/setup.d.ts +64 -0
  57. package/dist/cjs/history/internal/setup.js +60 -0
  58. package/dist/cjs/history/session-adapter.d.ts +112 -0
  59. package/dist/cjs/history/session-adapter.js +38 -0
  60. package/dist/cjs/history/types.d.ts +102 -0
  61. package/dist/cjs/index.d.ts +53 -0
  62. package/dist/cjs/index.js +25 -0
  63. package/dist/cjs/package.json +1 -0
  64. package/dist/cjs/shared/adapter.d.ts +146 -0
  65. package/dist/cjs/shared/adapter.js +70 -0
  66. package/dist/cjs/shared/clock.d.ts +52 -0
  67. package/dist/cjs/shared/clock.js +14 -0
  68. package/dist/cjs/shared/codec/codec.d.ts +336 -0
  69. package/dist/cjs/shared/codec/codec.js +162 -0
  70. package/dist/cjs/shared/codec/compression.d.ts +66 -0
  71. package/dist/cjs/shared/codec/compression.js +45 -0
  72. package/dist/cjs/shared/codec/json-serde.d.ts +80 -0
  73. package/dist/cjs/shared/codec/json-serde.js +58 -0
  74. package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +22 -2
  75. package/dist/{shared → cjs/shared}/codec/s3/client-types.js +0 -1
  76. package/dist/cjs/shared/codec/s3/client.d.ts +63 -0
  77. package/dist/cjs/shared/codec/s3/client.js +78 -0
  78. package/dist/cjs/shared/codec/s3/config.d.ts +260 -0
  79. package/dist/cjs/shared/codec/s3/config.js +92 -0
  80. package/dist/cjs/shared/codec/s3/lifecycle.d.ts +220 -0
  81. package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
  82. package/dist/cjs/shared/codec/s3/offloader.d.ts +428 -0
  83. package/dist/cjs/shared/codec/s3/offloader.js +289 -0
  84. package/dist/cjs/shared/concurrency.d.ts +43 -0
  85. package/dist/{shared → cjs/shared}/concurrency.js +10 -9
  86. package/dist/cjs/shared/dynamodb/abort.d.ts +47 -0
  87. package/dist/cjs/shared/dynamodb/abort.js +16 -0
  88. package/dist/cjs/shared/dynamodb/batch-write.d.ts +86 -0
  89. package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
  90. package/dist/cjs/shared/dynamodb/cancellation.d.ts +124 -0
  91. package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
  92. package/dist/cjs/shared/dynamodb/client.d.ts +177 -0
  93. package/dist/{shared → cjs/shared}/dynamodb/client.js +12 -14
  94. package/dist/cjs/shared/dynamodb/idempotent-write.d.ts +596 -0
  95. package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
  96. package/dist/cjs/shared/dynamodb/paginate.d.ts +111 -0
  97. package/dist/cjs/shared/dynamodb/paginate.js +90 -0
  98. package/dist/cjs/shared/dynamodb/partition-delete.d.ts +204 -0
  99. package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
  100. package/dist/cjs/shared/dynamodb/recency-index.d.ts +243 -0
  101. package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
  102. package/dist/cjs/shared/dynamodb/retry.d.ts +317 -0
  103. package/dist/cjs/shared/dynamodb/retry.js +193 -0
  104. package/dist/cjs/shared/dynamodb/row-size.d.ts +33 -0
  105. package/dist/cjs/shared/dynamodb/row-size.js +30 -0
  106. package/dist/cjs/shared/dynamodb/table-schema.d.ts +199 -0
  107. package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
  108. package/dist/cjs/shared/errors/base-error.d.ts +231 -0
  109. package/dist/cjs/shared/errors/base-error.js +73 -0
  110. package/dist/cjs/shared/errors/boundary.d.ts +86 -0
  111. package/dist/cjs/shared/errors/boundary.js +61 -0
  112. package/dist/cjs/shared/errors/classify.d.ts +206 -0
  113. package/dist/cjs/shared/errors/classify.js +232 -0
  114. package/dist/cjs/shared/errors/error-code.d.ts +95 -0
  115. package/dist/{shared → cjs/shared}/errors/error-code.js +12 -2
  116. package/dist/cjs/shared/errors/errors.d.ts +233 -0
  117. package/dist/cjs/shared/errors/errors.js +123 -0
  118. package/dist/cjs/shared/logging/logger.d.ts +80 -0
  119. package/dist/cjs/shared/logging/logger.js +30 -0
  120. package/dist/cjs/shared/logging/redaction.d.ts +123 -0
  121. package/dist/cjs/shared/logging/redaction.js +145 -0
  122. package/dist/cjs/shared/logging/secret-patterns.d.ts +227 -0
  123. package/dist/cjs/shared/logging/secret-patterns.js +93 -0
  124. package/dist/cjs/shared/logging/truncate.d.ts +197 -0
  125. package/dist/cjs/shared/logging/truncate.js +31 -0
  126. package/dist/cjs/shared/options.d.ts +100 -0
  127. package/dist/cjs/shared/ulid.d.ts +80 -0
  128. package/dist/{shared → cjs/shared}/ulid.js +7 -21
  129. package/dist/cjs/shared/validation/collaborators.d.ts +160 -0
  130. package/dist/cjs/shared/validation/collaborators.js +79 -0
  131. package/dist/cjs/shared/validation/option-shape.d.ts +91 -0
  132. package/dist/cjs/shared/validation/option-shape.js +31 -0
  133. package/dist/cjs/shared/validation/options.d.ts +145 -0
  134. package/dist/cjs/shared/validation/options.js +166 -0
  135. package/dist/cjs/shared/validation/primitives.d.ts +292 -0
  136. package/dist/cjs/shared/validation/primitives.js +114 -0
  137. package/dist/cjs/shared/validation/ttl.d.ts +94 -0
  138. package/dist/cjs/shared/validation/ttl.js +52 -0
  139. package/dist/cjs/store/actions/list-namespaces.d.ts +79 -0
  140. package/dist/cjs/store/actions/list-namespaces.js +92 -0
  141. package/dist/cjs/store/actions/put.d.ts +43 -0
  142. package/dist/cjs/store/actions/put.js +49 -0
  143. package/dist/cjs/store/actions/reconcile-vector-index.d.ts +38 -0
  144. package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
  145. package/dist/cjs/store/actions/search.d.ts +38 -0
  146. package/dist/cjs/store/actions/search.js +26 -0
  147. package/dist/cjs/store/internal/batch-plan.d.ts +56 -0
  148. package/dist/cjs/store/internal/batch-plan.js +32 -0
  149. package/dist/cjs/store/internal/filter.d.ts +43 -0
  150. package/dist/cjs/store/internal/filter.js +64 -0
  151. package/dist/cjs/store/internal/get-item.d.ts +77 -0
  152. package/dist/cjs/store/internal/get-item.js +58 -0
  153. package/dist/cjs/store/internal/item-write.d.ts +270 -0
  154. package/dist/cjs/store/internal/item-write.js +181 -0
  155. package/dist/cjs/store/internal/parse.d.ts +230 -0
  156. package/dist/cjs/store/internal/parse.js +180 -0
  157. package/dist/cjs/store/internal/rows.d.ts +359 -0
  158. package/dist/cjs/store/internal/rows.js +166 -0
  159. package/dist/cjs/store/internal/semantic-search.d.ts +168 -0
  160. package/dist/{store/internal/text-path.js → cjs/store/internal/semantic-search.js} +92 -28
  161. package/dist/cjs/store/internal/setup.d.ts +96 -0
  162. package/dist/cjs/store/internal/setup.js +103 -0
  163. package/dist/cjs/store/internal/table-search.d.ts +100 -0
  164. package/dist/cjs/store/internal/table-search.js +123 -0
  165. package/dist/cjs/store/internal/vector-index.d.ts +258 -0
  166. package/dist/cjs/store/internal/vector-index.js +269 -0
  167. package/dist/cjs/store/store.d.ts +329 -0
  168. package/dist/cjs/store/store.js +97 -0
  169. package/dist/cjs/store/types.d.ts +111 -0
  170. package/dist/cjs/store/vector-backend.d.ts +104 -0
  171. package/dist/cjs/store/vector-backend.js +4 -0
  172. package/dist/esm/backfill/backfill.d.ts +171 -0
  173. package/dist/esm/backfill/backfill.js +170 -0
  174. package/dist/esm/checkpointer/actions/delete-thread.d.ts +50 -0
  175. package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
  176. package/dist/esm/checkpointer/actions/get-tuple.d.ts +36 -0
  177. package/dist/esm/checkpointer/actions/get-tuple.js +19 -0
  178. package/dist/esm/checkpointer/actions/list.d.ts +55 -0
  179. package/dist/esm/checkpointer/actions/list.js +67 -0
  180. package/dist/esm/checkpointer/actions/put-writes.d.ts +49 -0
  181. package/dist/esm/checkpointer/actions/put-writes.js +18 -0
  182. package/dist/esm/checkpointer/actions/put.d.ts +95 -0
  183. package/dist/esm/checkpointer/actions/put.js +75 -0
  184. package/dist/esm/checkpointer/internal/delta-history.d.ts +124 -0
  185. package/dist/esm/checkpointer/internal/delta-history.js +126 -0
  186. package/dist/esm/checkpointer/internal/listing.d.ts +149 -0
  187. package/dist/esm/checkpointer/internal/listing.js +95 -0
  188. package/dist/esm/checkpointer/internal/parse.d.ts +298 -0
  189. package/dist/esm/checkpointer/internal/parse.js +169 -0
  190. package/dist/esm/checkpointer/internal/pending-writes.d.ts +314 -0
  191. package/dist/esm/checkpointer/internal/pending-writes.js +229 -0
  192. package/dist/esm/checkpointer/internal/read.d.ts +135 -0
  193. package/dist/esm/checkpointer/internal/read.js +125 -0
  194. package/dist/esm/checkpointer/internal/rows.d.ts +644 -0
  195. package/dist/esm/checkpointer/internal/rows.js +323 -0
  196. package/dist/esm/checkpointer/internal/setup.d.ts +47 -0
  197. package/dist/esm/checkpointer/internal/setup.js +21 -0
  198. package/dist/esm/checkpointer/saver.d.ts +306 -0
  199. package/dist/esm/checkpointer/saver.js +52 -0
  200. package/dist/esm/checkpointer/types.d.ts +51 -0
  201. package/dist/esm/checkpointer/types.js +1 -0
  202. package/dist/esm/factory/factory.d.ts +154 -0
  203. package/dist/esm/factory/factory.js +133 -0
  204. package/dist/esm/factory/types.d.ts +76 -0
  205. package/dist/esm/factory/types.js +1 -0
  206. package/dist/esm/history/actions/add-messages.d.ts +51 -0
  207. package/dist/esm/history/actions/add-messages.js +14 -0
  208. package/dist/esm/history/actions/clear.d.ts +52 -0
  209. package/dist/esm/history/actions/clear.js +26 -0
  210. package/dist/esm/history/actions/get-messages.d.ts +60 -0
  211. package/dist/esm/history/actions/get-messages.js +55 -0
  212. package/dist/esm/history/actions/list-sessions.d.ts +55 -0
  213. package/dist/esm/history/actions/list-sessions.js +64 -0
  214. package/dist/esm/history/actions/reconcile-count.d.ts +49 -0
  215. package/dist/esm/history/actions/reconcile-count.js +5 -0
  216. package/dist/esm/history/chat-message-history.d.ts +267 -0
  217. package/dist/esm/history/chat-message-history.js +57 -0
  218. package/dist/esm/history/internal/append.d.ts +244 -0
  219. package/dist/esm/history/internal/append.js +259 -0
  220. package/dist/esm/history/internal/message-read.d.ts +84 -0
  221. package/dist/esm/history/internal/message-read.js +89 -0
  222. package/dist/esm/history/internal/parse.d.ts +153 -0
  223. package/dist/esm/history/internal/parse.js +105 -0
  224. package/dist/esm/history/internal/rows.d.ts +196 -0
  225. package/dist/esm/history/internal/rows.js +83 -0
  226. package/dist/esm/history/internal/session.d.ts +350 -0
  227. package/dist/esm/history/internal/session.js +285 -0
  228. package/dist/esm/history/internal/setup.d.ts +64 -0
  229. package/dist/esm/history/internal/setup.js +56 -0
  230. package/dist/esm/history/session-adapter.d.ts +112 -0
  231. package/dist/esm/history/session-adapter.js +34 -0
  232. package/dist/esm/history/types.d.ts +102 -0
  233. package/dist/esm/history/types.js +1 -0
  234. package/dist/esm/index.d.ts +53 -0
  235. package/dist/esm/index.js +10 -0
  236. package/dist/esm/shared/adapter.d.ts +146 -0
  237. package/dist/esm/shared/adapter.js +65 -0
  238. package/dist/esm/shared/clock.d.ts +52 -0
  239. package/dist/esm/shared/clock.js +9 -0
  240. package/dist/esm/shared/codec/codec.d.ts +336 -0
  241. package/dist/esm/shared/codec/codec.js +150 -0
  242. package/dist/esm/shared/codec/compression.d.ts +66 -0
  243. package/dist/esm/shared/codec/compression.js +40 -0
  244. package/dist/esm/shared/codec/json-serde.d.ts +80 -0
  245. package/dist/esm/shared/codec/json-serde.js +54 -0
  246. package/dist/esm/shared/codec/s3/client-types.d.ts +54 -0
  247. package/dist/esm/shared/codec/s3/client-types.js +3 -0
  248. package/dist/esm/shared/codec/s3/client.d.ts +63 -0
  249. package/dist/esm/shared/codec/s3/client.js +40 -0
  250. package/dist/esm/shared/codec/s3/config.d.ts +260 -0
  251. package/dist/esm/shared/codec/s3/config.js +79 -0
  252. package/dist/esm/shared/codec/s3/lifecycle.d.ts +220 -0
  253. package/dist/esm/shared/codec/s3/lifecycle.js +214 -0
  254. package/dist/esm/shared/codec/s3/offloader.d.ts +428 -0
  255. package/dist/esm/shared/codec/s3/offloader.js +278 -0
  256. package/dist/esm/shared/concurrency.d.ts +43 -0
  257. package/dist/esm/shared/concurrency.js +27 -0
  258. package/dist/esm/shared/dynamodb/abort.d.ts +47 -0
  259. package/dist/esm/shared/dynamodb/abort.js +12 -0
  260. package/dist/esm/shared/dynamodb/batch-write.d.ts +86 -0
  261. package/dist/esm/shared/dynamodb/batch-write.js +74 -0
  262. package/dist/esm/shared/dynamodb/cancellation.d.ts +124 -0
  263. package/dist/esm/shared/dynamodb/cancellation.js +30 -0
  264. package/dist/esm/shared/dynamodb/client.d.ts +177 -0
  265. package/dist/esm/shared/dynamodb/client.js +35 -0
  266. package/dist/esm/shared/dynamodb/idempotent-write.d.ts +596 -0
  267. package/dist/esm/shared/dynamodb/idempotent-write.js +153 -0
  268. package/dist/esm/shared/dynamodb/paginate.d.ts +111 -0
  269. package/dist/esm/shared/dynamodb/paginate.js +84 -0
  270. package/dist/esm/shared/dynamodb/partition-delete.d.ts +204 -0
  271. package/dist/esm/shared/dynamodb/partition-delete.js +171 -0
  272. package/dist/esm/shared/dynamodb/recency-index.d.ts +243 -0
  273. package/dist/esm/shared/dynamodb/recency-index.js +136 -0
  274. package/dist/esm/shared/dynamodb/retry.d.ts +317 -0
  275. package/dist/esm/shared/dynamodb/retry.js +180 -0
  276. package/dist/esm/shared/dynamodb/row-size.d.ts +33 -0
  277. package/dist/esm/shared/dynamodb/row-size.js +26 -0
  278. package/dist/esm/shared/dynamodb/table-schema.d.ts +199 -0
  279. package/dist/esm/shared/dynamodb/table-schema.js +43 -0
  280. package/dist/esm/shared/errors/base-error.d.ts +231 -0
  281. package/dist/esm/shared/errors/base-error.js +64 -0
  282. package/dist/esm/shared/errors/boundary.d.ts +86 -0
  283. package/dist/esm/shared/errors/boundary.js +54 -0
  284. package/dist/esm/shared/errors/classify.d.ts +206 -0
  285. package/dist/esm/shared/errors/classify.js +220 -0
  286. package/dist/esm/shared/errors/error-code.d.ts +95 -0
  287. package/dist/esm/shared/errors/error-code.js +24 -0
  288. package/dist/esm/shared/errors/errors.d.ts +233 -0
  289. package/dist/esm/shared/errors/errors.js +110 -0
  290. package/dist/esm/shared/logging/logger.d.ts +80 -0
  291. package/dist/esm/shared/logging/logger.js +25 -0
  292. package/dist/esm/shared/logging/redaction.d.ts +123 -0
  293. package/dist/esm/shared/logging/redaction.js +140 -0
  294. package/dist/esm/shared/logging/secret-patterns.d.ts +227 -0
  295. package/dist/esm/shared/logging/secret-patterns.js +83 -0
  296. package/dist/esm/shared/logging/truncate.d.ts +197 -0
  297. package/dist/esm/shared/logging/truncate.js +25 -0
  298. package/dist/esm/shared/options.d.ts +100 -0
  299. package/dist/esm/shared/options.js +1 -0
  300. package/dist/esm/shared/ulid.d.ts +80 -0
  301. package/dist/esm/shared/ulid.js +77 -0
  302. package/dist/esm/shared/validation/collaborators.d.ts +160 -0
  303. package/dist/esm/shared/validation/collaborators.js +70 -0
  304. package/dist/esm/shared/validation/option-shape.d.ts +91 -0
  305. package/dist/esm/shared/validation/option-shape.js +24 -0
  306. package/dist/esm/shared/validation/options.d.ts +145 -0
  307. package/dist/esm/shared/validation/options.js +156 -0
  308. package/dist/esm/shared/validation/primitives.d.ts +292 -0
  309. package/dist/esm/shared/validation/primitives.js +100 -0
  310. package/dist/esm/shared/validation/ttl.d.ts +94 -0
  311. package/dist/esm/shared/validation/ttl.js +46 -0
  312. package/dist/esm/store/actions/list-namespaces.d.ts +79 -0
  313. package/dist/esm/store/actions/list-namespaces.js +86 -0
  314. package/dist/esm/store/actions/put.d.ts +43 -0
  315. package/dist/esm/store/actions/put.js +46 -0
  316. package/dist/esm/store/actions/reconcile-vector-index.d.ts +38 -0
  317. package/dist/esm/store/actions/reconcile-vector-index.js +10 -0
  318. package/dist/esm/store/actions/search.d.ts +38 -0
  319. package/dist/esm/store/actions/search.js +23 -0
  320. package/dist/esm/store/internal/batch-plan.d.ts +56 -0
  321. package/dist/esm/store/internal/batch-plan.js +28 -0
  322. package/dist/esm/store/internal/filter.d.ts +43 -0
  323. package/dist/esm/store/internal/filter.js +60 -0
  324. package/dist/esm/store/internal/get-item.d.ts +77 -0
  325. package/dist/esm/store/internal/get-item.js +54 -0
  326. package/dist/esm/store/internal/item-write.d.ts +270 -0
  327. package/dist/esm/store/internal/item-write.js +173 -0
  328. package/dist/esm/store/internal/parse.d.ts +230 -0
  329. package/dist/esm/store/internal/parse.js +169 -0
  330. package/dist/esm/store/internal/rows.d.ts +359 -0
  331. package/dist/esm/store/internal/rows.js +147 -0
  332. package/dist/esm/store/internal/semantic-search.d.ts +168 -0
  333. package/dist/esm/store/internal/semantic-search.js +200 -0
  334. package/dist/esm/store/internal/setup.d.ts +96 -0
  335. package/dist/esm/store/internal/setup.js +98 -0
  336. package/dist/esm/store/internal/table-search.d.ts +100 -0
  337. package/dist/esm/store/internal/table-search.js +119 -0
  338. package/dist/esm/store/internal/vector-index.d.ts +258 -0
  339. package/dist/esm/store/internal/vector-index.js +256 -0
  340. package/dist/esm/store/store.d.ts +329 -0
  341. package/dist/esm/store/store.js +93 -0
  342. package/dist/esm/store/types.d.ts +111 -0
  343. package/dist/esm/store/types.js +1 -0
  344. package/dist/esm/store/vector-backend.d.ts +104 -0
  345. package/dist/esm/store/vector-backend.js +1 -0
  346. package/package.json +68 -46
  347. package/dist/checkpointer/actions/delete-thread.d.ts +0 -10
  348. package/dist/checkpointer/actions/delete-thread.js +0 -38
  349. package/dist/checkpointer/actions/get-tuple.d.ts +0 -11
  350. package/dist/checkpointer/actions/get-tuple.js +0 -25
  351. package/dist/checkpointer/actions/list.d.ts +0 -20
  352. package/dist/checkpointer/actions/list.js +0 -113
  353. package/dist/checkpointer/actions/put-writes.d.ts +0 -15
  354. package/dist/checkpointer/actions/put-writes.js +0 -62
  355. package/dist/checkpointer/actions/put.d.ts +0 -17
  356. package/dist/checkpointer/actions/put.js +0 -73
  357. package/dist/checkpointer/internal/assemble.d.ts +0 -17
  358. package/dist/checkpointer/internal/assemble.js +0 -38
  359. package/dist/checkpointer/internal/checkpoint-write-verify.d.ts +0 -24
  360. package/dist/checkpointer/internal/checkpoint-write-verify.js +0 -67
  361. package/dist/checkpointer/internal/configurable.d.ts +0 -12
  362. package/dist/checkpointer/internal/configurable.js +0 -24
  363. package/dist/checkpointer/internal/fetch.d.ts +0 -19
  364. package/dist/checkpointer/internal/fetch.js +0 -88
  365. package/dist/checkpointer/internal/filter-match.d.ts +0 -13
  366. package/dist/checkpointer/internal/filter-match.js +0 -15
  367. package/dist/checkpointer/internal/item-reader.d.ts +0 -66
  368. package/dist/checkpointer/internal/item-reader.js +0 -113
  369. package/dist/checkpointer/internal/item-writer.d.ts +0 -35
  370. package/dist/checkpointer/internal/item-writer.js +0 -107
  371. package/dist/checkpointer/internal/keys.d.ts +0 -41
  372. package/dist/checkpointer/internal/keys.js +0 -117
  373. package/dist/checkpointer/internal/list-scope.d.ts +0 -61
  374. package/dist/checkpointer/internal/list-scope.js +0 -108
  375. package/dist/checkpointer/internal/pending-sends.d.ts +0 -13
  376. package/dist/checkpointer/internal/pending-sends.js +0 -29
  377. package/dist/checkpointer/internal/query.d.ts +0 -21
  378. package/dist/checkpointer/internal/query.js +0 -42
  379. package/dist/checkpointer/internal/regular-write.d.ts +0 -28
  380. package/dist/checkpointer/internal/regular-write.js +0 -66
  381. package/dist/checkpointer/internal/setup.d.ts +0 -33
  382. package/dist/checkpointer/internal/setup.js +0 -38
  383. package/dist/checkpointer/internal/special-write-cas.d.ts +0 -29
  384. package/dist/checkpointer/internal/special-write-cas.js +0 -104
  385. package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -23
  386. package/dist/checkpointer/internal/special-write-cleanup.js +0 -50
  387. package/dist/checkpointer/internal/special-write-verify.d.ts +0 -53
  388. package/dist/checkpointer/internal/special-write-verify.js +0 -80
  389. package/dist/checkpointer/internal/stored-channels.d.ts +0 -31
  390. package/dist/checkpointer/internal/stored-channels.js +0 -70
  391. package/dist/checkpointer/internal/validation.d.ts +0 -18
  392. package/dist/checkpointer/internal/validation.js +0 -40
  393. package/dist/checkpointer/internal/write-guard.d.ts +0 -20
  394. package/dist/checkpointer/internal/write-guard.js +0 -48
  395. package/dist/checkpointer/internal/write-index.d.ts +0 -36
  396. package/dist/checkpointer/internal/write-index.js +0 -41
  397. package/dist/checkpointer/saver.d.ts +0 -70
  398. package/dist/checkpointer/saver.js +0 -105
  399. package/dist/checkpointer/types.d.ts +0 -58
  400. package/dist/factory/factory.d.ts +0 -40
  401. package/dist/factory/factory.js +0 -87
  402. package/dist/history/actions/add-messages.d.ts +0 -15
  403. package/dist/history/actions/add-messages.js +0 -77
  404. package/dist/history/actions/clear.d.ts +0 -10
  405. package/dist/history/actions/clear.js +0 -34
  406. package/dist/history/actions/get-messages.d.ts +0 -17
  407. package/dist/history/actions/get-messages.js +0 -79
  408. package/dist/history/actions/list-sessions.d.ts +0 -13
  409. package/dist/history/actions/list-sessions.js +0 -53
  410. package/dist/history/actions/reconcile-count.d.ts +0 -12
  411. package/dist/history/actions/reconcile-count.js +0 -64
  412. package/dist/history/chat-message-history.d.ts +0 -73
  413. package/dist/history/chat-message-history.js +0 -111
  414. package/dist/history/internal/append-saga.d.ts +0 -25
  415. package/dist/history/internal/append-saga.js +0 -79
  416. package/dist/history/internal/compensation.d.ts +0 -25
  417. package/dist/history/internal/compensation.js +0 -92
  418. package/dist/history/internal/item-mapper.d.ts +0 -9
  419. package/dist/history/internal/item-mapper.js +0 -27
  420. package/dist/history/internal/keys.d.ts +0 -16
  421. package/dist/history/internal/keys.js +0 -48
  422. package/dist/history/internal/message-chunker.d.ts +0 -13
  423. package/dist/history/internal/message-chunker.js +0 -67
  424. package/dist/history/internal/message-transaction.d.ts +0 -25
  425. package/dist/history/internal/message-transaction.js +0 -61
  426. package/dist/history/internal/message-window.d.ts +0 -17
  427. package/dist/history/internal/message-window.js +0 -49
  428. package/dist/history/internal/query.d.ts +0 -23
  429. package/dist/history/internal/query.js +0 -39
  430. package/dist/history/internal/session-count.d.ts +0 -47
  431. package/dist/history/internal/session-count.js +0 -115
  432. package/dist/history/internal/session-title.d.ts +0 -19
  433. package/dist/history/internal/session-title.js +0 -43
  434. package/dist/history/internal/session-update.d.ts +0 -27
  435. package/dist/history/internal/session-update.js +0 -69
  436. package/dist/history/internal/setup.d.ts +0 -31
  437. package/dist/history/internal/setup.js +0 -43
  438. package/dist/history/internal/title-generator.d.ts +0 -12
  439. package/dist/history/internal/title-generator.js +0 -41
  440. package/dist/history/internal/ttl-anchor.d.ts +0 -24
  441. package/dist/history/internal/ttl-anchor.js +0 -38
  442. package/dist/history/internal/validation.d.ts +0 -25
  443. package/dist/history/internal/validation.js +0 -53
  444. package/dist/history/session-adapter.d.ts +0 -29
  445. package/dist/history/session-adapter.js +0 -35
  446. package/dist/history/types.d.ts +0 -69
  447. package/dist/index.d.ts +0 -29
  448. package/dist/index.js +0 -32
  449. package/dist/shared/clock.d.ts +0 -8
  450. package/dist/shared/clock.js +0 -16
  451. package/dist/shared/codec/codec.d.ts +0 -53
  452. package/dist/shared/codec/codec.js +0 -66
  453. package/dist/shared/codec/compression.d.ts +0 -24
  454. package/dist/shared/codec/compression.js +0 -48
  455. package/dist/shared/codec/descriptor-keys.d.ts +0 -12
  456. package/dist/shared/codec/descriptor-keys.js +0 -14
  457. package/dist/shared/codec/encode.d.ts +0 -13
  458. package/dist/shared/codec/encode.js +0 -43
  459. package/dist/shared/codec/json-serde.d.ts +0 -7
  460. package/dist/shared/codec/json-serde.js +0 -17
  461. package/dist/shared/codec/payload-loss.d.ts +0 -12
  462. package/dist/shared/codec/payload-loss.js +0 -38
  463. package/dist/shared/codec/s3/adapter-config.d.ts +0 -13
  464. package/dist/shared/codec/s3/adapter-config.js +0 -22
  465. package/dist/shared/codec/s3/bounded-body.d.ts +0 -14
  466. package/dist/shared/codec/s3/bounded-body.js +0 -47
  467. package/dist/shared/codec/s3/client.d.ts +0 -18
  468. package/dist/shared/codec/s3/client.js +0 -46
  469. package/dist/shared/codec/s3/config.d.ts +0 -51
  470. package/dist/shared/codec/s3/config.js +0 -58
  471. package/dist/shared/codec/s3/delete.d.ts +0 -7
  472. package/dist/shared/codec/s3/delete.js +0 -28
  473. package/dist/shared/codec/s3/key-scope.d.ts +0 -23
  474. package/dist/shared/codec/s3/key-scope.js +0 -44
  475. package/dist/shared/codec/s3/lifecycle.d.ts +0 -14
  476. package/dist/shared/codec/s3/lifecycle.js +0 -63
  477. package/dist/shared/codec/s3/offloader.d.ts +0 -44
  478. package/dist/shared/codec/s3/offloader.js +0 -118
  479. package/dist/shared/codec/s3/orphans.d.ts +0 -23
  480. package/dist/shared/codec/s3/orphans.js +0 -71
  481. package/dist/shared/codec/s3/read-write.d.ts +0 -18
  482. package/dist/shared/codec/s3/read-write.js +0 -51
  483. package/dist/shared/codec/s3/retry.d.ts +0 -5
  484. package/dist/shared/codec/s3/retry.js +0 -22
  485. package/dist/shared/concurrency.d.ts +0 -6
  486. package/dist/shared/constants.d.ts +0 -112
  487. package/dist/shared/constants.js +0 -115
  488. package/dist/shared/dynamodb/abort.d.ts +0 -9
  489. package/dist/shared/dynamodb/abort.js +0 -27
  490. package/dist/shared/dynamodb/backoff.d.ts +0 -15
  491. package/dist/shared/dynamodb/backoff.js +0 -48
  492. package/dist/shared/dynamodb/batch-write.d.ts +0 -22
  493. package/dist/shared/dynamodb/batch-write.js +0 -53
  494. package/dist/shared/dynamodb/cancellation.d.ts +0 -6
  495. package/dist/shared/dynamodb/cancellation.js +0 -7
  496. package/dist/shared/dynamodb/client.d.ts +0 -28
  497. package/dist/shared/dynamodb/conditional-put.d.ts +0 -67
  498. package/dist/shared/dynamodb/conditional-put.js +0 -76
  499. package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -21
  500. package/dist/shared/dynamodb/drain-unprocessed.js +0 -43
  501. package/dist/shared/dynamodb/expiry.d.ts +0 -16
  502. package/dist/shared/dynamodb/expiry.js +0 -29
  503. package/dist/shared/dynamodb/paginate-core.d.ts +0 -24
  504. package/dist/shared/dynamodb/paginate-core.js +0 -82
  505. package/dist/shared/dynamodb/paginate.d.ts +0 -14
  506. package/dist/shared/dynamodb/paginate.js +0 -19
  507. package/dist/shared/dynamodb/partition-delete.d.ts +0 -39
  508. package/dist/shared/dynamodb/partition-delete.js +0 -71
  509. package/dist/shared/dynamodb/retry-classifier.d.ts +0 -17
  510. package/dist/shared/dynamodb/retry-classifier.js +0 -118
  511. package/dist/shared/dynamodb/retry-policy.d.ts +0 -26
  512. package/dist/shared/dynamodb/retry-policy.js +0 -22
  513. package/dist/shared/dynamodb/retry.d.ts +0 -31
  514. package/dist/shared/dynamodb/retry.js +0 -57
  515. package/dist/shared/dynamodb/scan.d.ts +0 -14
  516. package/dist/shared/dynamodb/scan.js +0 -19
  517. package/dist/shared/dynamodb/types.d.ts +0 -23
  518. package/dist/shared/errors/base-error.d.ts +0 -30
  519. package/dist/shared/errors/base-error.js +0 -27
  520. package/dist/shared/errors/boundary.d.ts +0 -18
  521. package/dist/shared/errors/boundary.js +0 -46
  522. package/dist/shared/errors/error-code.d.ts +0 -13
  523. package/dist/shared/errors/errors.d.ts +0 -68
  524. package/dist/shared/errors/errors.js +0 -114
  525. package/dist/shared/errors/upstream-error.d.ts +0 -16
  526. package/dist/shared/errors/upstream-error.js +0 -27
  527. package/dist/shared/errors/wrap-error.d.ts +0 -7
  528. package/dist/shared/errors/wrap-error.js +0 -15
  529. package/dist/shared/logging/logger.d.ts +0 -18
  530. package/dist/shared/logging/logger.js +0 -15
  531. package/dist/shared/logging/redaction-walk.d.ts +0 -23
  532. package/dist/shared/logging/redaction-walk.js +0 -112
  533. package/dist/shared/logging/redaction.d.ts +0 -39
  534. package/dist/shared/logging/redaction.js +0 -75
  535. package/dist/shared/logging/secret-patterns.d.ts +0 -92
  536. package/dist/shared/logging/secret-patterns.js +0 -133
  537. package/dist/shared/options.d.ts +0 -37
  538. package/dist/shared/ulid.d.ts +0 -23
  539. package/dist/shared/validation/options.d.ts +0 -8
  540. package/dist/shared/validation/options.js +0 -90
  541. package/dist/shared/validation/primitives.d.ts +0 -29
  542. package/dist/shared/validation/primitives.js +0 -82
  543. package/dist/shared/validation/ttl.d.ts +0 -28
  544. package/dist/shared/validation/ttl.js +0 -52
  545. package/dist/store/actions/get.d.ts +0 -13
  546. package/dist/store/actions/get.js +0 -73
  547. package/dist/store/actions/list-namespaces.d.ts +0 -8
  548. package/dist/store/actions/list-namespaces.js +0 -59
  549. package/dist/store/actions/put.d.ts +0 -10
  550. package/dist/store/actions/put.js +0 -96
  551. package/dist/store/actions/reconcile-vector-index.d.ts +0 -18
  552. package/dist/store/actions/reconcile-vector-index.js +0 -26
  553. package/dist/store/actions/search.d.ts +0 -9
  554. package/dist/store/actions/search.js +0 -34
  555. package/dist/store/internal/backend-search.d.ts +0 -4
  556. package/dist/store/internal/backend-search.js +0 -74
  557. package/dist/store/internal/batch-plan.d.ts +0 -11
  558. package/dist/store/internal/batch-plan.js +0 -52
  559. package/dist/store/internal/candidates.d.ts +0 -23
  560. package/dist/store/internal/candidates.js +0 -94
  561. package/dist/store/internal/filter.d.ts +0 -9
  562. package/dist/store/internal/filter.js +0 -85
  563. package/dist/store/internal/index-reconcile.d.ts +0 -21
  564. package/dist/store/internal/index-reconcile.js +0 -118
  565. package/dist/store/internal/index-sync.d.ts +0 -10
  566. package/dist/store/internal/index-sync.js +0 -25
  567. package/dist/store/internal/item-mapper.d.ts +0 -27
  568. package/dist/store/internal/item-mapper.js +0 -61
  569. package/dist/store/internal/keys.d.ts +0 -17
  570. package/dist/store/internal/keys.js +0 -41
  571. package/dist/store/internal/namespace-match.d.ts +0 -11
  572. package/dist/store/internal/namespace-match.js +0 -40
  573. package/dist/store/internal/option-validation.d.ts +0 -13
  574. package/dist/store/internal/option-validation.js +0 -77
  575. package/dist/store/internal/overwrite-swap.d.ts +0 -32
  576. package/dist/store/internal/overwrite-swap.js +0 -68
  577. package/dist/store/internal/persist.d.ts +0 -28
  578. package/dist/store/internal/persist.js +0 -64
  579. package/dist/store/internal/query.d.ts +0 -11
  580. package/dist/store/internal/query.js +0 -48
  581. package/dist/store/internal/ranker.d.ts +0 -18
  582. package/dist/store/internal/ranker.js +0 -39
  583. package/dist/store/internal/read-existing.d.ts +0 -23
  584. package/dist/store/internal/read-existing.js +0 -41
  585. package/dist/store/internal/score-direction.d.ts +0 -31
  586. package/dist/store/internal/score-direction.js +0 -38
  587. package/dist/store/internal/search-filter.d.ts +0 -3
  588. package/dist/store/internal/search-filter.js +0 -10
  589. package/dist/store/internal/semantic-search.d.ts +0 -34
  590. package/dist/store/internal/semantic-search.js +0 -87
  591. package/dist/store/internal/setup.d.ts +0 -36
  592. package/dist/store/internal/setup.js +0 -40
  593. package/dist/store/internal/text-path.d.ts +0 -17
  594. package/dist/store/internal/validation.d.ts +0 -18
  595. package/dist/store/internal/validation.js +0 -51
  596. package/dist/store/internal/write-verify.d.ts +0 -42
  597. package/dist/store/internal/write-verify.js +0 -71
  598. package/dist/store/store.d.ts +0 -61
  599. package/dist/store/store.js +0 -107
  600. package/dist/store/types.d.ts +0 -50
  601. package/dist/store/types.js +0 -2
  602. package/dist/store/vector-backend.d.ts +0 -43
  603. package/dist/store/vector-backend.js +0 -2
  604. /package/dist/{checkpointer → cjs/checkpointer}/types.js +0 -0
  605. /package/dist/{factory → cjs/factory}/types.js +0 -0
  606. /package/dist/{history → cjs/history}/types.js +0 -0
  607. /package/dist/{shared → cjs/shared}/options.js +0 -0
  608. /package/dist/{shared/dynamodb → cjs/store}/types.js +0 -0
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.listSessions = listSessions;
4
- const clock_1 = require("../../shared/clock");
5
- const expiry_1 = require("../../shared/dynamodb/expiry");
6
- const retry_policy_1 = require("../../shared/dynamodb/retry-policy");
7
- const scan_1 = require("../../shared/dynamodb/scan");
8
- const keys_1 = require("../internal/keys");
9
- /**
10
- * List all sessions as metadata summaries, newest-updated first. The scan is
11
- * filtered to session items so the adapter works on a table shared with the
12
- * checkpointer/store; foreign rows are also skipped defensively, and rows past
13
- * their TTL are filtered out exactly as `getMessages` filters expired messages.
14
- */
15
- async function listSessions(context, options) {
16
- const sessions = [];
17
- const nowSeconds = (0, clock_1.nowSeconds)();
18
- for await (const raw of (0, scan_1.paginateScan)({
19
- retry: (0, retry_policy_1.retryFor)(context, options?.signal),
20
- signal: options?.signal,
21
- client: context.client,
22
- params: {
23
- TableName: context.tableName,
24
- FilterExpression: '#sk = :session',
25
- ExpressionAttributeNames: { '#sk': 'SK' },
26
- ExpressionAttributeValues: { ':session': keys_1.SESSION_SORT_KEY },
27
- },
28
- maxIterations: options?.maxIterations,
29
- maxItems: options?.maxItems,
30
- })) {
31
- const item = raw;
32
- if (item.SK !== keys_1.SESSION_SORT_KEY || typeof item.sessionId !== 'string')
33
- continue;
34
- if ((0, expiry_1.isExpiredRow)(item, nowSeconds))
35
- continue;
36
- sessions.push({
37
- sessionId: item.sessionId,
38
- title: item.title,
39
- messageCount: item.messageCount,
40
- createdAt: item.createdAt,
41
- updatedAt: item.updatedAt,
42
- expiresAt: item.ttl === undefined ? undefined : new Date(item.ttl * 1000).toISOString(),
43
- });
44
- }
45
- /**
46
- * Ordinal, not `localeCompare`: these are ISO-8601 timestamps, whose
47
- * byte order already is their chronological order. Locale-aware collation
48
- * applies rules (case folding, punctuation weighting) that have no meaning
49
- * here and are not guaranteed to agree with it in every locale.
50
- */
51
- sessions.sort((a, b) => (a.updatedAt < b.updatedAt ? 1 : a.updatedAt > b.updatedAt ? -1 : 0));
52
- return sessions;
53
- }
@@ -1,12 +0,0 @@
1
- import type { HistoryContext } from '../internal/setup';
2
- /**
3
- * Recompute `messageCount` from the authoritative number of stored message items
4
- * and write it back, repairing any drift. A repair tool: the append path keeps
5
- * the count consistent transactionally, so this is only needed after external
6
- * corruption. Run it when the session is quiescent — it `SET`s the count, so a
7
- * concurrent append's increment could be clobbered. Requires the session to
8
- * already exist; reconciling a nonexistent session throws {@link ConflictError}
9
- * rather than creating a permanent, TTL-less metadata-only row. Returns the
10
- * reconciled count.
11
- */
12
- export declare function reconcileMessageCount(context: HistoryContext, sessionId: string, signal?: AbortSignal): Promise<number>;
@@ -1,64 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.reconcileMessageCount = reconcileMessageCount;
4
- const clock_1 = require("../../shared/clock");
5
- const retry_1 = require("../../shared/dynamodb/retry");
6
- const retry_policy_1 = require("../../shared/dynamodb/retry-policy");
7
- const errors_1 = require("../../shared/errors/errors");
8
- const keys_1 = require("../internal/keys");
9
- const query_1 = require("../internal/query");
10
- const validation_1 = require("../internal/validation");
11
- /**
12
- * Count only the rows `getMessages` would return: an expired message that
13
- * DynamoDB's TTL sweep has not yet removed is invisible to the read path, so
14
- * counting it would "repair" `messageCount` to a number no reader ever sees.
15
- */
16
- async function countMessages(context, sessionId, signal) {
17
- const query = (0, query_1.messageQuery)(context.tableName, sessionId);
18
- const base = {
19
- ...query,
20
- Select: 'COUNT',
21
- FilterExpression: 'attribute_not_exists(#ttl) OR #ttl > :now',
22
- ExpressionAttributeNames: { ...query.ExpressionAttributeNames, '#ttl': 'ttl' },
23
- ExpressionAttributeValues: { ...query.ExpressionAttributeValues, ':now': (0, clock_1.nowSeconds)() },
24
- };
25
- let total = 0;
26
- let startKey;
27
- do {
28
- const page = await (0, retry_1.withDynamoDBRetry)(() => context.client.query({ ...base, ExclusiveStartKey: startKey }), (0, retry_policy_1.retryFor)(context, signal));
29
- total += page.Count ?? 0;
30
- startKey = page.LastEvaluatedKey;
31
- } while (startKey);
32
- return total;
33
- }
34
- /**
35
- * Recompute `messageCount` from the authoritative number of stored message items
36
- * and write it back, repairing any drift. A repair tool: the append path keeps
37
- * the count consistent transactionally, so this is only needed after external
38
- * corruption. Run it when the session is quiescent — it `SET`s the count, so a
39
- * concurrent append's increment could be clobbered. Requires the session to
40
- * already exist; reconciling a nonexistent session throws {@link ConflictError}
41
- * rather than creating a permanent, TTL-less metadata-only row. Returns the
42
- * reconciled count.
43
- */
44
- async function reconcileMessageCount(context, sessionId, signal) {
45
- (0, validation_1.validateSessionId)(sessionId);
46
- const count = await countMessages(context, sessionId, signal);
47
- try {
48
- await (0, retry_1.withDynamoDBRetry)(() => context.client.update({
49
- TableName: context.tableName,
50
- Key: { PK: (0, keys_1.sessionPartition)(sessionId), SK: keys_1.SESSION_SORT_KEY },
51
- UpdateExpression: 'SET #count = :count',
52
- ExpressionAttributeNames: { '#count': 'messageCount' },
53
- ExpressionAttributeValues: { ':count': count },
54
- ConditionExpression: 'attribute_exists(PK)',
55
- }), (0, retry_policy_1.retryFor)(context, signal));
56
- }
57
- catch (error) {
58
- if (error.name === 'ConditionalCheckFailedException') {
59
- throw new errors_1.ConflictError(`Cannot reconcile messageCount: session "${sessionId}" does not exist`, error);
60
- }
61
- throw error;
62
- }
63
- return count;
64
- }
@@ -1,73 +0,0 @@
1
- import type { BaseMessage } from '@langchain/core/messages';
2
- import type { CancelOptions } from '../shared/options';
3
- import { type AdapterWindow, DynamoDBSessionChatMessageHistory } from './session-adapter';
4
- import type { DynamoDBChatMessageHistoryOptions, GetMessagesOptions, ListSessionsOptions, SessionMetadata } from './types';
5
- /**
6
- * DynamoDB-backed multi-session chat history. Each message is its own item
7
- * (ordered by a monotonic ULID, compressed / S3-offloaded as needed) alongside a
8
- * per-session metadata item; every message in a session shares one uniform TTL.
9
- * Appends are O(1) and lock-free. Use {@link forSession} to get a single-session
10
- * LangChain adapter. Every public method is the library's error boundary — a
11
- * raw AWS SDK error escaping an action surfaces as an `UpstreamError`.
12
- */
13
- export declare class DynamoDBChatMessageHistory {
14
- private readonly context;
15
- private readonly ownsClient;
16
- private readonly ddbClient;
17
- constructor(options: DynamoDBChatMessageHistoryOptions);
18
- /**
19
- * Get a session's messages in chronological order: the whole session by
20
- * default, or a window of it — `{ limit }` returns only the newest `limit`
21
- * messages, `{ before }` only those appended before that instant — so a
22
- * long-lived session can be read a page at a time instead of whole.
23
- * @remarks Strongly consistent; one query page plus one S3 download per offloaded message.
24
- * @throws ValidationError for a malformed session id or window; UpstreamError; AbortError; and, under `onCorruptMessage: 'throw'`, the decode error of a corrupt row.
25
- */
26
- getMessages(sessionId: string, options?: GetMessagesOptions): Promise<BaseMessage[]>;
27
- /**
28
- * Append messages to a session in one transaction per chunk of up to 99
29
- * messages, keeping the session's `messageCount` exact. Lock-free and safe
30
- * under concurrent appends to one session; every message shares the
31
- * session's TTL when one is configured.
32
- * @throws ValidationError for a message that could never be read back; CompensationFailedError when a later chunk fails and the rollback fails too; RetryExhaustedError after 18 contended attempts; UpstreamError; AbortError.
33
- */
34
- addMessages(sessionId: string, messages: BaseMessage[], options?: CancelOptions): Promise<void>;
35
- /** Append one message; see {@link addMessages}. */
36
- addMessage(sessionId: string, message: BaseMessage, options?: CancelOptions): Promise<void>;
37
- /**
38
- * Delete a session's messages, metadata and offloaded objects. Single pass:
39
- * call it when the session is quiescent.
40
- * @throws BatchWriteAllIncompleteError when a delete batch does not fully drain; UpstreamError; AbortError.
41
- */
42
- clear(sessionId: string, options?: CancelOptions): Promise<void>;
43
- /**
44
- * List every session as a metadata summary, most recently updated first.
45
- * A table scan: cross-tenant by construction and bounded by `maxItems` /
46
- * `maxIterations`.
47
- * @throws ResultTruncatedError past either cap; UpstreamError; AbortError.
48
- */
49
- listSessions(options?: ListSessionsOptions): Promise<SessionMetadata[]>;
50
- /**
51
- * Recompute and repair a session's `messageCount` from the stored messages.
52
- * A maintenance tool for external corruption; run it when the session is idle.
53
- * @throws ConflictError when the session does not exist or changed while counting; UpstreamError; AbortError.
54
- */
55
- reconcileMessageCount(sessionId: string, options?: CancelOptions): Promise<number>;
56
- /**
57
- * Get a single-session LangChain adapter for `sessionId`. `{ limit }` bounds
58
- * what the adapter feeds the chain to the newest `limit` messages.
59
- */
60
- forSession(sessionId: string, window?: AdapterWindow): DynamoDBSessionChatMessageHistory;
61
- /** Release owned resources (the underlying client and any S3 client). */
62
- destroy(): void;
63
- /**
64
- * Provision an S3 lifecycle expiration rule matching the configured TTL, so
65
- * offloaded objects don't outlive their DynamoDB item forever. No-ops when
66
- * S3 offload or TTL isn't configured; throws when the bucket cannot be read
67
- * or written. Requires the `s3:GetLifecycleConfiguration` /
68
- * `s3:PutLifecycleConfiguration` bucket-level permissions (broader than the
69
- * object-level CRUD the rest of S3 offload needs) — call this once during
70
- * deployment/provisioning, not per-request.
71
- */
72
- ensureS3LifecycleRule(): Promise<void>;
73
- }
@@ -1,111 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DynamoDBChatMessageHistory = void 0;
4
- const boundary_1 = require("../shared/errors/boundary");
5
- const ttl_1 = require("../shared/validation/ttl");
6
- const add_messages_1 = require("./actions/add-messages");
7
- const clear_1 = require("./actions/clear");
8
- const get_messages_1 = require("./actions/get-messages");
9
- const list_sessions_1 = require("./actions/list-sessions");
10
- const reconcile_count_1 = require("./actions/reconcile-count");
11
- const setup_1 = require("./internal/setup");
12
- const session_adapter_1 = require("./session-adapter");
13
- /**
14
- * DynamoDB-backed multi-session chat history. Each message is its own item
15
- * (ordered by a monotonic ULID, compressed / S3-offloaded as needed) alongside a
16
- * per-session metadata item; every message in a session shares one uniform TTL.
17
- * Appends are O(1) and lock-free. Use {@link forSession} to get a single-session
18
- * LangChain adapter. Every public method is the library's error boundary — a
19
- * raw AWS SDK error escaping an action surfaces as an `UpstreamError`.
20
- */
21
- class DynamoDBChatMessageHistory {
22
- context;
23
- ownsClient;
24
- ddbClient;
25
- constructor(options) {
26
- const setup = (0, setup_1.setUpHistory)(options);
27
- this.context = setup.context;
28
- this.ownsClient = setup.ownsClient;
29
- this.ddbClient = setup.ddbClient;
30
- }
31
- /**
32
- * Get a session's messages in chronological order: the whole session by
33
- * default, or a window of it — `{ limit }` returns only the newest `limit`
34
- * messages, `{ before }` only those appended before that instant — so a
35
- * long-lived session can be read a page at a time instead of whole.
36
- * @remarks Strongly consistent; one query page plus one S3 download per offloaded message.
37
- * @throws ValidationError for a malformed session id or window; UpstreamError; AbortError; and, under `onCorruptMessage: 'throw'`, the decode error of a corrupt row.
38
- */
39
- getMessages(sessionId, options) {
40
- return (0, boundary_1.guardPublic)('history.getMessages', () => (0, get_messages_1.getMessages)(this.context, sessionId, options));
41
- }
42
- /**
43
- * Append messages to a session in one transaction per chunk of up to 99
44
- * messages, keeping the session's `messageCount` exact. Lock-free and safe
45
- * under concurrent appends to one session; every message shares the
46
- * session's TTL when one is configured.
47
- * @throws ValidationError for a message that could never be read back; CompensationFailedError when a later chunk fails and the rollback fails too; RetryExhaustedError after 18 contended attempts; UpstreamError; AbortError.
48
- */
49
- addMessages(sessionId, messages, options) {
50
- return (0, boundary_1.guardPublic)('history.addMessages', () => (0, add_messages_1.addMessages)(this.context, sessionId, messages, options?.signal));
51
- }
52
- /** Append one message; see {@link addMessages}. */
53
- addMessage(sessionId, message, options) {
54
- return (0, boundary_1.guardPublic)('history.addMessage', () => (0, add_messages_1.addMessages)(this.context, sessionId, [message], options?.signal));
55
- }
56
- /**
57
- * Delete a session's messages, metadata and offloaded objects. Single pass:
58
- * call it when the session is quiescent.
59
- * @throws BatchWriteAllIncompleteError when a delete batch does not fully drain; UpstreamError; AbortError.
60
- */
61
- clear(sessionId, options) {
62
- return (0, boundary_1.guardPublic)('history.clear', () => (0, clear_1.clearSession)(this.context, sessionId, options));
63
- }
64
- /**
65
- * List every session as a metadata summary, most recently updated first.
66
- * A table scan: cross-tenant by construction and bounded by `maxItems` /
67
- * `maxIterations`.
68
- * @throws ResultTruncatedError past either cap; UpstreamError; AbortError.
69
- */
70
- listSessions(options) {
71
- return (0, boundary_1.guardPublic)('history.listSessions', () => (0, list_sessions_1.listSessions)(this.context, options));
72
- }
73
- /**
74
- * Recompute and repair a session's `messageCount` from the stored messages.
75
- * A maintenance tool for external corruption; run it when the session is idle.
76
- * @throws ConflictError when the session does not exist or changed while counting; UpstreamError; AbortError.
77
- */
78
- reconcileMessageCount(sessionId, options) {
79
- return (0, boundary_1.guardPublic)('history.reconcileMessageCount', () => (0, reconcile_count_1.reconcileMessageCount)(this.context, sessionId, options?.signal));
80
- }
81
- /**
82
- * Get a single-session LangChain adapter for `sessionId`. `{ limit }` bounds
83
- * what the adapter feeds the chain to the newest `limit` messages.
84
- */
85
- forSession(sessionId, window) {
86
- return new session_adapter_1.DynamoDBSessionChatMessageHistory(this, sessionId, window);
87
- }
88
- /** Release owned resources (the underlying client and any S3 client). */
89
- destroy() {
90
- this.context.offloader?.destroy();
91
- if (this.ownsClient)
92
- this.ddbClient?.destroy();
93
- }
94
- /**
95
- * Provision an S3 lifecycle expiration rule matching the configured TTL, so
96
- * offloaded objects don't outlive their DynamoDB item forever. No-ops when
97
- * S3 offload or TTL isn't configured; throws when the bucket cannot be read
98
- * or written. Requires the `s3:GetLifecycleConfiguration` /
99
- * `s3:PutLifecycleConfiguration` bucket-level permissions (broader than the
100
- * object-level CRUD the rest of S3 offload needs) — call this once during
101
- * deployment/provisioning, not per-request.
102
- */
103
- async ensureS3LifecycleRule() {
104
- return (0, boundary_1.guardPublic)('history.ensureS3LifecycleRule', async () => {
105
- if (!this.context.offloader || !this.context.ttl)
106
- return;
107
- await this.context.offloader.ensureLifecycleRule((0, ttl_1.lifecycleExpirationDays)(this.context.ttl));
108
- });
109
- }
110
- }
111
- exports.DynamoDBChatMessageHistory = DynamoDBChatMessageHistory;
@@ -1,25 +0,0 @@
1
- import type { ChatMessageItem } from '../types';
2
- import type { HistoryContext } from './setup';
3
- /** Shared per-append metadata applied to every chunk's session update. */
4
- export interface AppendFields {
5
- now: string;
6
- title?: string;
7
- ttlTimestamp?: number;
8
- forceTtlRefresh?: boolean;
9
- }
10
- /**
11
- * Append message chunks with caller-observed atomicity. Each chunk commits its
12
- * messages and count in one transaction; if a later chunk fails, every
13
- * already-committed chunk is deleted and its count reverted, and the batch's
14
- * S3 objects are cleaned once their rows are gone, restoring the pre-call
15
- * state before the error is rethrown. Except on a failed rollback, which
16
- * surfaces as {@link CompensationFailedError} and deliberately leaves the
17
- * committed chunks' S3 objects behind, since their rows may survive.
18
- *
19
- * A `RetryExhaustedError` is ambiguous — the transaction may have committed
20
- * and lost its response — so the chunk is read back first: present means it
21
- * committed (continue), absent means it did not (compensate), and a failed
22
- * read compensates but leaks that chunk's objects rather than delete objects
23
- * its possibly-live rows reference.
24
- */
25
- export declare function appendChunks(context: HistoryContext, sessionId: string, chunks: ChatMessageItem[][], fields: AppendFields, signal?: AbortSignal): Promise<void>;
@@ -1,79 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.appendChunks = appendChunks;
4
- const retry_1 = require("../../shared/dynamodb/retry");
5
- const error_code_1 = require("../../shared/errors/error-code");
6
- const wrap_error_1 = require("../../shared/errors/wrap-error");
7
- const compensation_1 = require("./compensation");
8
- const message_transaction_1 = require("./message-transaction");
9
- /** True for the one failure shape that leaves the outcome ambiguous. */
10
- function isAmbiguous(error) {
11
- return error.code === error_code_1.ErrorCode.RETRY_EXHAUSTED;
12
- }
13
- /**
14
- * Read the chunk's first row back with `ConsistentRead`. A chunk commits
15
- * atomically, so one row present means the whole chunk (and its count `ADD`)
16
- * landed and only the response was lost. Message sort keys are per-call
17
- * ULIDs, so a present row can only be this call's own.
18
- */
19
- async function verifyChunkLanded(context, chunk) {
20
- try {
21
- const result = await (0, retry_1.withDynamoDBRetry)(() => context.client.get({
22
- TableName: context.tableName,
23
- Key: { PK: chunk[0].PK, SK: chunk[0].SK },
24
- ConsistentRead: true,
25
- ProjectionExpression: '#sk',
26
- ExpressionAttributeNames: { '#sk': 'SK' },
27
- }), context.retry);
28
- return result.Item ? 'committed' : 'not-committed';
29
- }
30
- catch {
31
- return 'unverified';
32
- }
33
- }
34
- /** Run one chunk's transaction, returning its error instead of throwing. */
35
- async function commitChunk(context, sessionId, chunk, fields, signal) {
36
- try {
37
- await (0, message_transaction_1.writeMessageChunk)(context, chunk, { ...fields, sessionId, count: chunk.length }, { signal });
38
- return undefined;
39
- }
40
- catch (error) {
41
- return (0, wrap_error_1.toError)(error);
42
- }
43
- }
44
- function asCommitted(chunk) {
45
- return { keys: chunk.map((item) => ({ PK: item.PK, SK: item.SK })), count: chunk.length };
46
- }
47
- /**
48
- * Append message chunks with caller-observed atomicity. Each chunk commits its
49
- * messages and count in one transaction; if a later chunk fails, every
50
- * already-committed chunk is deleted and its count reverted, and the batch's
51
- * S3 objects are cleaned once their rows are gone, restoring the pre-call
52
- * state before the error is rethrown. Except on a failed rollback, which
53
- * surfaces as {@link CompensationFailedError} and deliberately leaves the
54
- * committed chunks' S3 objects behind, since their rows may survive.
55
- *
56
- * A `RetryExhaustedError` is ambiguous — the transaction may have committed
57
- * and lost its response — so the chunk is read back first: present means it
58
- * committed (continue), absent means it did not (compensate), and a failed
59
- * read compensates but leaks that chunk's objects rather than delete objects
60
- * its possibly-live rows reference.
61
- */
62
- async function appendChunks(context, sessionId, chunks, fields, signal) {
63
- const committed = [];
64
- for (const chunk of chunks) {
65
- const failure = await commitChunk(context, sessionId, chunk, fields, signal);
66
- if (!failure) {
67
- committed.push(asCommitted(chunk));
68
- continue;
69
- }
70
- const verdict = isAmbiguous(failure)
71
- ? await verifyChunkLanded(context, chunk)
72
- : 'not-committed';
73
- if (verdict === 'committed') {
74
- committed.push(asCommitted(chunk));
75
- continue;
76
- }
77
- await (0, compensation_1.compensate)(context, sessionId, chunks, committed, failure, fields.now, fields.title, verdict === 'unverified');
78
- }
79
- }
@@ -1,25 +0,0 @@
1
- import type { ChatMessageItem } from '../types';
2
- import type { HistoryContext } from './setup';
3
- /** A chunk that committed, retained so it can be rolled back on a later failure. */
4
- export interface CommittedChunk {
5
- keys: {
6
- PK: string;
7
- SK: string;
8
- }[];
9
- count: number;
10
- }
11
- /**
12
- * Undo a failed batch. Always throws. S3 cleanup is split by commit status so
13
- * no live row is ever left pointing at a deleted object: the never-committed
14
- * suffix is cleaned immediately, the committed prefix only after its rows are
15
- * confirmed deleted. If the rollback itself fails, the committed chunks' S3
16
- * objects are deliberately left in place (their rows may survive) and it
17
- * raises {@link CompensationFailedError} carrying both the trigger and the
18
- * rollback error; otherwise it rethrows the trigger.
19
- *
20
- * `uncertain` marks the failed chunk (`chunks[committed.length]`) as one whose
21
- * outcome could not be verified: its rows may be live, so its objects are
22
- * leaked rather than deleted, while the never-attempted chunks after it are
23
- * still cleaned.
24
- */
25
- export declare function compensate(context: HistoryContext, sessionId: string, chunks: ChatMessageItem[][], committed: CommittedChunk[], trigger: Error, now: string, title: string | undefined, uncertain: boolean): Promise<never>;
@@ -1,92 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.compensate = compensate;
4
- const descriptor_keys_1 = require("../../shared/codec/descriptor-keys");
5
- const orphans_1 = require("../../shared/codec/s3/orphans");
6
- const batch_write_1 = require("../../shared/dynamodb/batch-write");
7
- const errors_1 = require("../../shared/errors/errors");
8
- const wrap_error_1 = require("../../shared/errors/wrap-error");
9
- const session_count_1 = require("./session-count");
10
- /**
11
- * Best-effort delete the offloaded S3 objects of the `chunks` slice given.
12
- * {@link compensate} calls it once per commit status, never for the whole
13
- * batch, so a committed chunk's objects arrive only once its rows are gone.
14
- */
15
- async function cleanBatchS3(context, chunks) {
16
- if (!context.offloader)
17
- return;
18
- const descriptors = chunks.flat().map((item) => item.message);
19
- await (0, orphans_1.cleanUpS3Orphans)(context.offloader, (0, descriptor_keys_1.collectS3Keys)(descriptors), 'history.addMessages', context.logger);
20
- }
21
- /**
22
- * Delete every committed chunk's items, then undo their effect on the session
23
- * row — deleting it outright when this call created it (see
24
- * {@link revertSessionCreation}), so a failed first append leaves no ghost
25
- * session holding the rolled-back message's title. A *partial* delete is not a
26
- * clean creation to undo, so that branch reverts only the count.
27
- */
28
- async function rollbackCommitted(context, sessionId, committed, now, title) {
29
- const keys = committed.flatMap((chunk) => chunk.keys);
30
- const total = committed.reduce((sum, chunk) => sum + chunk.count, 0);
31
- if (keys.length === 0) {
32
- await (0, session_count_1.revertSessionCreation)(context, sessionId, total, now, title);
33
- return;
34
- }
35
- try {
36
- await (0, batch_write_1.batchWriteAll)(context.client, context.tableName, keys.map((Key) => ({ DeleteRequest: { Key } })), { retry: context.retry });
37
- }
38
- catch (error) {
39
- /**
40
- * batchWriteAll has exactly one throw site and it is always a
41
- * BatchWriteAllIncompleteError (see Task 9) — asserted, not instanceof-
42
- * checked, since the false case is unreachable and this project
43
- * enforces 100% branch coverage with no exceptions.
44
- */
45
- const deleted = error.succeededCount;
46
- await (0, session_count_1.revertSessionCount)(context, sessionId, deleted, now);
47
- throw error;
48
- }
49
- await (0, session_count_1.revertSessionCreation)(context, sessionId, total, now, title);
50
- }
51
- /**
52
- * Undo a failed batch. Always throws. S3 cleanup is split by commit status so
53
- * no live row is ever left pointing at a deleted object: the never-committed
54
- * suffix is cleaned immediately, the committed prefix only after its rows are
55
- * confirmed deleted. If the rollback itself fails, the committed chunks' S3
56
- * objects are deliberately left in place (their rows may survive) and it
57
- * raises {@link CompensationFailedError} carrying both the trigger and the
58
- * rollback error; otherwise it rethrows the trigger.
59
- *
60
- * `uncertain` marks the failed chunk (`chunks[committed.length]`) as one whose
61
- * outcome could not be verified: its rows may be live, so its objects are
62
- * leaked rather than deleted, while the never-attempted chunks after it are
63
- * still cleaned.
64
- */
65
- async function compensate(context, sessionId, chunks, committed, trigger, now, title, uncertain) {
66
- if (committed.length > 0) {
67
- context.logger.warn('history.addMessages compensating committed chunks after a chunk failed', {
68
- sessionId,
69
- committedChunks: committed.length,
70
- });
71
- }
72
- /**
73
- * The never-attempted suffix never had a DynamoDB row, so it is safe to
74
- * clean now; an uncertain failed chunk is skipped because its rows may live.
75
- */
76
- const firstDead = committed.length + (uncertain ? 1 : 0);
77
- await cleanBatchS3(context, chunks.slice(firstDead));
78
- try {
79
- await rollbackCommitted(context, sessionId, committed, now, title);
80
- }
81
- catch (rollbackError) {
82
- context.logger.error('history.addMessages rollback failed; messageCount may have drifted', {
83
- sessionId,
84
- committedChunks: committed.length,
85
- });
86
- /** Skip S3 cleanup here: rollback may have failed, so committed rows might still reference these objects. */
87
- throw new errors_1.CompensationFailedError(trigger, (0, wrap_error_1.toError)(rollbackError));
88
- }
89
- /** Only now that committed rows are confirmed deleted is it safe to delete their S3 objects. */
90
- await cleanBatchS3(context, chunks.slice(0, committed.length));
91
- throw trigger;
92
- }
@@ -1,9 +0,0 @@
1
- import type { StoredMessage } from '@langchain/core/messages';
2
- import type { ChatMessageItem } from '../types';
3
- import type { HistoryContext } from './setup';
4
- /**
5
- * Encode a single stored message into its DynamoDB item, keyed by the session
6
- * partition and a `MSG#<ulid>` sort key. A `ttlTimestamp` stamps the uniform
7
- * whole-conversation expiry shared by every message in the session.
8
- */
9
- export declare function buildMessageItem(context: HistoryContext, sessionId: string, ulid: string, message: StoredMessage, ttlTimestamp?: number): Promise<ChatMessageItem>;
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildMessageItem = buildMessageItem;
4
- const encode_1 = require("../../shared/codec/encode");
5
- const keys_1 = require("./keys");
6
- function codecDeps(context) {
7
- return { serde: context.serde, compression: context.compression, offloader: context.offloader };
8
- }
9
- /**
10
- * Encode a single stored message into its DynamoDB item, keyed by the session
11
- * partition and a `MSG#<ulid>` sort key. A `ttlTimestamp` stamps the uniform
12
- * whole-conversation expiry shared by every message in the session.
13
- */
14
- async function buildMessageItem(context, sessionId, ulid, message, ttlTimestamp) {
15
- const descriptor = await (0, encode_1.encodePayload)(message, codecDeps(context), {
16
- keyParts: [sessionId, ulid],
17
- });
18
- const item = {
19
- PK: (0, keys_1.sessionPartition)(sessionId),
20
- SK: (0, keys_1.messageSortKey)(ulid),
21
- sessionId,
22
- message: descriptor,
23
- };
24
- if (ttlTimestamp !== undefined)
25
- item.ttl = ttlTimestamp;
26
- return item;
27
- }
@@ -1,16 +0,0 @@
1
- /** Reserved separator joining sort-key segments; forbidden inside a session id. */
2
- export declare const SORT_KEY_SEPARATOR = "#";
3
- /** Fixed sort key for the per-session metadata item. */
4
- export declare const SESSION_SORT_KEY = "HISTORY#SESSION";
5
- /** Partition key for a chat session: the adapter tag plus the session id. */
6
- export declare function sessionPartition(sessionId: string): string;
7
- /** Sort key for a single message item, ordered by its monotonic ULID. */
8
- export declare function messageSortKey(ulid: string): string;
9
- /**
10
- * True when `sortKey` is one this adapter writes. A partition query carries no
11
- * sort-key condition, so a partition-wide delete uses this to leave any row it
12
- * does not own in place rather than deleting the whole partition blindly.
13
- */
14
- export declare function isHistorySortKey(sortKey: string): boolean;
15
- /** `begins_with` prefix selecting every message item in a session. */
16
- export declare function messageSortKeyPrefix(): string;
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SESSION_SORT_KEY = exports.SORT_KEY_SEPARATOR = void 0;
4
- exports.sessionPartition = sessionPartition;
5
- exports.messageSortKey = messageSortKey;
6
- exports.isHistorySortKey = isHistorySortKey;
7
- exports.messageSortKeyPrefix = messageSortKeyPrefix;
8
- /** Reserved separator joining sort-key segments; forbidden inside a session id. */
9
- exports.SORT_KEY_SEPARATOR = '#';
10
- /**
11
- * Item-kind tag distinguishing this adapter's sort keys from another
12
- * adapter's on a table shared via `DynamoDBFactory.createAll()` — matches the
13
- * pattern the checkpointer module already uses for its own META#/PAYLOAD#/
14
- * WRITE# keys. Without it, `SESSION_SORT_KEY` alone was a bare, common-word
15
- * literal a store caller could produce by accident (e.g.
16
- * `store.put([sessionId], 'SESSION', ...)`, since `sortKey` collapses a
17
- * single-element namespace down to just the key).
18
- */
19
- const ADAPTER_PREFIX = `HISTORY${exports.SORT_KEY_SEPARATOR}`;
20
- /** Fixed sort key for the per-session metadata item. */
21
- exports.SESSION_SORT_KEY = `${ADAPTER_PREFIX}SESSION`;
22
- const MESSAGE_PREFIX = `${ADAPTER_PREFIX}MSG#`;
23
- /**
24
- * Adapter tag prefixed to every chat-history partition key — see the
25
- * equivalent in checkpointer/internal/keys.ts for why the three adapters'
26
- * partitions must not overlap on a shared table.
27
- */
28
- const ADAPTER_PARTITION_PREFIX = `HIST${exports.SORT_KEY_SEPARATOR}`;
29
- /** Partition key for a chat session: the adapter tag plus the session id. */
30
- function sessionPartition(sessionId) {
31
- return `${ADAPTER_PARTITION_PREFIX}${sessionId}`;
32
- }
33
- /** Sort key for a single message item, ordered by its monotonic ULID. */
34
- function messageSortKey(ulid) {
35
- return `${MESSAGE_PREFIX}${ulid}`;
36
- }
37
- /**
38
- * True when `sortKey` is one this adapter writes. A partition query carries no
39
- * sort-key condition, so a partition-wide delete uses this to leave any row it
40
- * does not own in place rather than deleting the whole partition blindly.
41
- */
42
- function isHistorySortKey(sortKey) {
43
- return sortKey.startsWith(ADAPTER_PREFIX);
44
- }
45
- /** `begins_with` prefix selecting every message item in a session. */
46
- function messageSortKeyPrefix() {
47
- return MESSAGE_PREFIX;
48
- }