@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,13 +0,0 @@
1
- import type { ChatMessageItem } from '../types';
2
- /**
3
- * Conservatively estimate a message item's stored size, so chunks can stay under
4
- * the DynamoDB transaction byte limit. The overhead allowance keeps the estimate
5
- * on the safe side of the real marshalled size.
6
- */
7
- export declare function estimateItemBytes(item: ChatMessageItem): number;
8
- /**
9
- * Split message items into transaction-sized chunks bounded by both the item
10
- * count and the aggregate byte budget. A single item larger than the budget is
11
- * placed alone rather than dropped.
12
- */
13
- export declare function chunkBySize(items: ChatMessageItem[], maxItems: number, maxBytes: number): ChatMessageItem[][];
@@ -1,67 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.estimateItemBytes = estimateItemBytes;
4
- exports.chunkBySize = chunkBySize;
5
- const codec_1 = require("../../shared/codec/codec");
6
- /**
7
- * Per-item allowance added to the measured field bytes to cover what the size
8
- * estimate does not count directly: DynamoDB attribute names, the document
9
- * marshalling envelope, and descriptor scaffolding. Deliberately generous so the
10
- * estimate stays at or above the real marshalled item size and chunks never
11
- * overshoot the transaction byte limit.
12
- */
13
- const ITEM_OVERHEAD_BYTES = 256;
14
- /**
15
- * Byte length of a string as DynamoDB stores it. `String.length` counts UTF-16
16
- * code units, which understates every non-ASCII character — the wrong
17
- * direction for an estimate documented to sit at or above the real size.
18
- */
19
- function utf8Bytes(value) {
20
- return Buffer.byteLength(value, 'utf8');
21
- }
22
- function descriptorBytes(descriptor) {
23
- const body = descriptor.location === codec_1.PayloadLocation.INLINE
24
- ? descriptor.bytes.length
25
- : utf8Bytes(descriptor.s3Key);
26
- return body + utf8Bytes(descriptor.serdeType);
27
- }
28
- /**
29
- * Conservatively estimate a message item's stored size, so chunks can stay under
30
- * the DynamoDB transaction byte limit. The overhead allowance keeps the estimate
31
- * on the safe side of the real marshalled size.
32
- */
33
- function estimateItemBytes(item) {
34
- return (utf8Bytes(item.PK) +
35
- utf8Bytes(item.SK) +
36
- utf8Bytes(item.sessionId) +
37
- descriptorBytes(item.message) +
38
- ITEM_OVERHEAD_BYTES);
39
- }
40
- function shouldFlush(count, bytes, next, max, maxBytes) {
41
- if (count === 0)
42
- return false;
43
- return count >= max || bytes + next > maxBytes;
44
- }
45
- /**
46
- * Split message items into transaction-sized chunks bounded by both the item
47
- * count and the aggregate byte budget. A single item larger than the budget is
48
- * placed alone rather than dropped.
49
- */
50
- function chunkBySize(items, maxItems, maxBytes) {
51
- const chunks = [];
52
- let current = [];
53
- let currentBytes = 0;
54
- for (const item of items) {
55
- const size = estimateItemBytes(item);
56
- if (shouldFlush(current.length, currentBytes, size, maxItems, maxBytes)) {
57
- chunks.push(current);
58
- current = [];
59
- currentBytes = 0;
60
- }
61
- current.push(item);
62
- currentBytes += size;
63
- }
64
- if (current.length > 0)
65
- chunks.push(current);
66
- return chunks;
67
- }
@@ -1,25 +0,0 @@
1
- import type { ChatMessageItem } from '../types';
2
- import { type SessionUpdateFields } from './session-update';
3
- import type { HistoryContext } from './setup';
4
- /** Per-call retry seams (injected in tests to keep backoff instant). */
5
- export interface ChunkRetryOptions {
6
- rng?: () => number;
7
- signal?: AbortSignal;
8
- }
9
- /**
10
- * Atomically write a chunk of message items together with the session-metadata
11
- * count update in one {@link https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactWriteItems.html | TransactWriteItems}
12
- * call, so `messageCount` can never disagree with the messages that landed. A
13
- * single `ClientRequestToken` is used per attempt so a re-sent commit (e.g.
14
- * after a lost response) is idempotent and never double-applies the count
15
- * `ADD`. When `fields.forceTtlRefresh` is set, the session update carries a
16
- * monotonic ConditionExpression (see session-update.ts); if — and only if —
17
- * that specific condition loses a race against a concurrent caller who just
18
- * healed the same anchor, this retries the identical chunk once with
19
- * `forceTtlRefresh: false` (safe: `if_not_exists` then converges to whatever
20
- * already won) rather than losing the message writes to a benign ttl race. A
21
- * cancellation caused by any other item (a genuine message-row conflict) is
22
- * not retried here — it propagates for the normal transient-conflict retry
23
- * budget inside `withDynamoDBRetry` to handle, or to the caller otherwise.
24
- */
25
- export declare function writeMessageChunk(context: HistoryContext, items: ChatMessageItem[], fields: SessionUpdateFields, retry?: ChunkRetryOptions): Promise<void>;
@@ -1,61 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.writeMessageChunk = writeMessageChunk;
4
- const node_crypto_1 = require("node:crypto");
5
- const constants_1 = require("../../shared/constants");
6
- const cancellation_1 = require("../../shared/dynamodb/cancellation");
7
- const retry_1 = require("../../shared/dynamodb/retry");
8
- const session_update_1 = require("./session-update");
9
- /** True when a TransactWriteItems cancellation was caused solely by the SESSION update's ttl condition (always TransactItems index 0 — see buildInput below), not by any message item. */
10
- function isTtlConditionLoss(error) {
11
- const reasons = (0, cancellation_1.getCancellationReasons)(error);
12
- return (reasons?.[0]?.Code === 'ConditionalCheckFailed' &&
13
- reasons.slice(1).every((reason) => reason.Code === 'None'));
14
- }
15
- function buildInput(context, items, fields) {
16
- return {
17
- TransactItems: [
18
- (0, session_update_1.buildSessionUpdateItem)(context.tableName, fields),
19
- ...items.map((item) => ({ Put: { TableName: context.tableName, Item: item } })),
20
- ],
21
- ClientRequestToken: (0, node_crypto_1.randomUUID)(),
22
- };
23
- }
24
- async function attempt(context, items, fields, retry) {
25
- const input = buildInput(context, items, fields);
26
- await (0, retry_1.withDynamoDBRetry)(() => context.client.transactWrite(input), {
27
- ...context.retry,
28
- /** The contention floor: a caller policy may raise the budget, never lower it. */
29
- maxAttempts: Math.max(constants_1.MESSAGE_APPEND_RETRY_MAX_ATTEMPTS, context.retry?.maxAttempts ?? 0),
30
- rng: retry.rng,
31
- signal: retry.signal,
32
- });
33
- }
34
- /**
35
- * Atomically write a chunk of message items together with the session-metadata
36
- * count update in one {@link https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactWriteItems.html | TransactWriteItems}
37
- * call, so `messageCount` can never disagree with the messages that landed. A
38
- * single `ClientRequestToken` is used per attempt so a re-sent commit (e.g.
39
- * after a lost response) is idempotent and never double-applies the count
40
- * `ADD`. When `fields.forceTtlRefresh` is set, the session update carries a
41
- * monotonic ConditionExpression (see session-update.ts); if — and only if —
42
- * that specific condition loses a race against a concurrent caller who just
43
- * healed the same anchor, this retries the identical chunk once with
44
- * `forceTtlRefresh: false` (safe: `if_not_exists` then converges to whatever
45
- * already won) rather than losing the message writes to a benign ttl race. A
46
- * cancellation caused by any other item (a genuine message-row conflict) is
47
- * not retried here — it propagates for the normal transient-conflict retry
48
- * budget inside `withDynamoDBRetry` to handle, or to the caller otherwise.
49
- */
50
- async function writeMessageChunk(context, items, fields, retry = {}) {
51
- try {
52
- await attempt(context, items, fields, retry);
53
- }
54
- catch (error) {
55
- if (fields.forceTtlRefresh && isTtlConditionLoss(error)) {
56
- await attempt(context, items, { ...fields, forceTtlRefresh: false }, retry);
57
- return;
58
- }
59
- throw error;
60
- }
61
- }
@@ -1,17 +0,0 @@
1
- import type { CancelOptions } from '../../shared/options';
2
- import type { ChatMessageItem, MessageWindow } from '../types';
3
- import type { HistoryContext } from './setup';
4
- /**
5
- * Read the live message items a window selects, in chronological order.
6
- *
7
- * Without `limit` the query walks the session oldest-first. With it the query
8
- * walks newest-first with a matching page cap and stops as soon as `limit`
9
- * live items are in hand — rows past their TTL are skipped here, so a page can
10
- * come back short and the walk simply continues — and the tail is then
11
- * reversed back into chronological order. `before` becomes an exclusive upper
12
- * sort-key bound: the message prefix plus the ULID time characters of that
13
- * instant, which every message id from that millisecond onwards sorts after.
14
- * Reads are strongly consistent so the turn just appended is visible to the
15
- * very next read.
16
- */
17
- export declare function readWindow(context: HistoryContext, sessionId: string, options: MessageWindow & CancelOptions): Promise<ChatMessageItem[]>;
@@ -1,49 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.readWindow = readWindow;
4
- const clock_1 = require("../../shared/clock");
5
- const expiry_1 = require("../../shared/dynamodb/expiry");
6
- const paginate_1 = require("../../shared/dynamodb/paginate");
7
- const retry_policy_1 = require("../../shared/dynamodb/retry-policy");
8
- const ulid_1 = require("../../shared/ulid");
9
- const keys_1 = require("./keys");
10
- const query_1 = require("./query");
11
- /**
12
- * Read the live message items a window selects, in chronological order.
13
- *
14
- * Without `limit` the query walks the session oldest-first. With it the query
15
- * walks newest-first with a matching page cap and stops as soon as `limit`
16
- * live items are in hand — rows past their TTL are skipped here, so a page can
17
- * come back short and the walk simply continues — and the tail is then
18
- * reversed back into chronological order. `before` becomes an exclusive upper
19
- * sort-key bound: the message prefix plus the ULID time characters of that
20
- * instant, which every message id from that millisecond onwards sorts after.
21
- * Reads are strongly consistent so the turn just appended is visible to the
22
- * very next read.
23
- */
24
- async function readWindow(context, sessionId, options) {
25
- const now = (0, clock_1.nowSeconds)();
26
- const limit = options.limit ?? Number.POSITIVE_INFINITY;
27
- const items = [];
28
- for await (const raw of (0, paginate_1.paginateQuery)({
29
- retry: (0, retry_policy_1.retryFor)(context, options.signal),
30
- signal: options.signal,
31
- client: context.client,
32
- params: (0, query_1.messageQuery)(context.tableName, sessionId, {
33
- consistent: true,
34
- descending: options.limit !== undefined,
35
- limit: options.limit,
36
- beforeSortKey: options.before && (0, keys_1.messageSortKey)((0, ulid_1.ulidTimePrefix)(options.before.getTime())),
37
- }),
38
- maxItems: Number.POSITIVE_INFINITY,
39
- maxIterations: Number.POSITIVE_INFINITY,
40
- })) {
41
- const item = raw;
42
- if ((0, expiry_1.isExpiredRow)(item, now))
43
- continue;
44
- items.push(item);
45
- if (items.length >= limit)
46
- break;
47
- }
48
- return options.limit === undefined ? items : items.reverse();
49
- }
@@ -1,23 +0,0 @@
1
- import type { QueryCommandInput } from '@aws-sdk/lib-dynamodb';
2
- /** Options for {@link sessionItemsQuery}. */
3
- export interface SessionItemsQueryOptions {
4
- consistent?: boolean;
5
- }
6
- /** Query input selecting every item in a session's partition (messages + metadata). */
7
- export declare function sessionItemsQuery(tableName: string, sessionId: string, options?: SessionItemsQueryOptions): QueryCommandInput;
8
- /** Options for {@link messageQuery}. */
9
- export interface MessageQueryOptions extends SessionItemsQueryOptions {
10
- /** Walk the messages newest-first; the caller restores chronological order. */
11
- descending?: boolean;
12
- /** Cap the rows DynamoDB evaluates per page. */
13
- limit?: number;
14
- /**
15
- * Exclusive upper sort-key bound. Expressed as `BETWEEN prefix AND bound`
16
- * because a key condition allows one sort-key operator: the bound is the
17
- * message prefix plus the ULID time characters of an instant, so every
18
- * real message key from that millisecond onwards sorts strictly after it.
19
- */
20
- beforeSortKey?: string;
21
- }
22
- /** Query input selecting a session's message items, chronological unless `descending`. */
23
- export declare function messageQuery(tableName: string, sessionId: string, options?: MessageQueryOptions): QueryCommandInput;
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sessionItemsQuery = sessionItemsQuery;
4
- exports.messageQuery = messageQuery;
5
- const keys_1 = require("./keys");
6
- /** Query input selecting every item in a session's partition (messages + metadata). */
7
- function sessionItemsQuery(tableName, sessionId, options = {}) {
8
- const params = {
9
- TableName: tableName,
10
- KeyConditionExpression: '#pk = :pk',
11
- ExpressionAttributeNames: { '#pk': 'PK' },
12
- ExpressionAttributeValues: { ':pk': (0, keys_1.sessionPartition)(sessionId) },
13
- };
14
- if (options.consistent)
15
- params.ConsistentRead = true;
16
- return params;
17
- }
18
- /** Query input selecting a session's message items, chronological unless `descending`. */
19
- function messageQuery(tableName, sessionId, options = {}) {
20
- const params = {
21
- TableName: tableName,
22
- KeyConditionExpression: '#pk = :pk AND begins_with(#sk, :skp)',
23
- ExpressionAttributeNames: { '#pk': 'PK', '#sk': 'SK' },
24
- ExpressionAttributeValues: {
25
- ':pk': (0, keys_1.sessionPartition)(sessionId),
26
- ':skp': (0, keys_1.messageSortKeyPrefix)(),
27
- },
28
- ScanIndexForward: !options.descending,
29
- };
30
- if (options.beforeSortKey !== undefined) {
31
- params.KeyConditionExpression = '#pk = :pk AND #sk BETWEEN :skp AND :before';
32
- params.ExpressionAttributeValues[':before'] = options.beforeSortKey;
33
- }
34
- if (options.limit !== undefined)
35
- params.Limit = options.limit;
36
- if (options.consistent)
37
- params.ConsistentRead = true;
38
- return params;
39
- }
@@ -1,47 +0,0 @@
1
- import type { HistoryContext } from './setup';
2
- /**
3
- * Subtract a previously-added count from the session, leaving it consistent.
4
- * Guarded so a concurrently-deleted SESSION row is never resurrected as a
5
- * permanent, ttl-less junk row: if the row is already gone there is nothing
6
- * to revert, so that specific condition failure is swallowed rather than
7
- * surfaced — this runs only from an already-in-progress rollback, where a
8
- * spurious error for a no-op would misrepresent what happened.
9
- *
10
- * The same condition also pins the *incarnation*: `createdAt <= createdBefore`
11
- * (this call's own append timestamp). A session `clear()`-ed and re-created by
12
- * another caller between this call's commit and its rollback carries a later
13
- * `createdAt`; decrementing it would corrupt the new incarnation's count, and
14
- * its rows were never this call's to revert. That rejection is swallowed too,
15
- * for the same reason as a vanished row.
16
- *
17
- * Deliberately does not revert a `forceTtlRefresh`-driven ttl SET from an
18
- * earlier committed chunk: the healed anchor is never shorter than what
19
- * was there before, so leaving it in place after a rollback only means the
20
- * session's metadata row outlives its content a bit longer than ideal —
21
- * self-healing (the next successful append, or DynamoDB's own TTL sweep,
22
- * resolves it), unlike reverting, which would need to re-check for a
23
- * concurrent legitimate extension to avoid regressing it. See README.md's
24
- * "TTL expiry" section.
25
- */
26
- export declare function revertSessionCount(context: HistoryContext, sessionId: string, delta: number, createdBefore: string): Promise<void>;
27
- /**
28
- * Undo a rolled-back append's effect on the session row.
29
- *
30
- * When this call is the one that created the row — `createdAt` still equals
31
- * this call's timestamp, and the only messages counted on it are the ones
32
- * being reverted — the whole row is deleted. Without that, a failed first
33
- * append left a "ghost session": `title`, `createdAt` and `sessionId` are all
34
- * written via `if_not_exists`, so they were never reverted and never set
35
- * again, leaving `listSessions()` reporting a session with `messageCount: 0`
36
- * whose title still held up to 80 characters of a message the caller was told
37
- * had not persisted, with no API to clear it.
38
- *
39
- * Both conditions are load-bearing. `createdAt = :now` establishes that this
40
- * call created the row; `messageCount = :total` establishes that nothing else
41
- * has added to it since. A concurrent append to the same brand-new session
42
- * fails the count check, because deleting the row would destroy that caller's
43
- * committed messages — so it falls through to the plain decrement, and then
44
- * strips just the title this call contributed, which is the only part of the
45
- * row still carrying rolled-back message content.
46
- */
47
- export declare function revertSessionCreation(context: HistoryContext, sessionId: string, total: number, createdAt: string, title?: string): Promise<void>;
@@ -1,115 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.revertSessionCount = revertSessionCount;
4
- exports.revertSessionCreation = revertSessionCreation;
5
- const node_crypto_1 = require("node:crypto");
6
- const cancellation_1 = require("../../shared/dynamodb/cancellation");
7
- const retry_1 = require("../../shared/dynamodb/retry");
8
- const keys_1 = require("./keys");
9
- const session_title_1 = require("./session-title");
10
- /**
11
- * True when a TransactWriteItems cancellation was caused by a
12
- * ConditionalCheckFailed reason. Named distinctly from
13
- * checkpointer/actions/put-writes.ts's isConditionalCheckFailed, which
14
- * checks a different thing entirely (a raw PutItem exception name, not a
15
- * transaction cancellation reason) — this function had that same name
16
- * until now, a real trap for whoever read one assuming it was the other.
17
- */
18
- function isCancelledByCondition(error) {
19
- const reasons = (0, cancellation_1.getCancellationReasons)(error);
20
- return reasons?.[0]?.Code === 'ConditionalCheckFailed';
21
- }
22
- /**
23
- * Subtract a previously-added count from the session, leaving it consistent.
24
- * Guarded so a concurrently-deleted SESSION row is never resurrected as a
25
- * permanent, ttl-less junk row: if the row is already gone there is nothing
26
- * to revert, so that specific condition failure is swallowed rather than
27
- * surfaced — this runs only from an already-in-progress rollback, where a
28
- * spurious error for a no-op would misrepresent what happened.
29
- *
30
- * The same condition also pins the *incarnation*: `createdAt <= createdBefore`
31
- * (this call's own append timestamp). A session `clear()`-ed and re-created by
32
- * another caller between this call's commit and its rollback carries a later
33
- * `createdAt`; decrementing it would corrupt the new incarnation's count, and
34
- * its rows were never this call's to revert. That rejection is swallowed too,
35
- * for the same reason as a vanished row.
36
- *
37
- * Deliberately does not revert a `forceTtlRefresh`-driven ttl SET from an
38
- * earlier committed chunk: the healed anchor is never shorter than what
39
- * was there before, so leaving it in place after a rollback only means the
40
- * session's metadata row outlives its content a bit longer than ideal —
41
- * self-healing (the next successful append, or DynamoDB's own TTL sweep,
42
- * resolves it), unlike reverting, which would need to re-check for a
43
- * concurrent legitimate extension to avoid regressing it. See README.md's
44
- * "TTL expiry" section.
45
- */
46
- async function revertSessionCount(context, sessionId, delta, createdBefore) {
47
- if (delta === 0)
48
- return;
49
- const update = {
50
- TableName: context.tableName,
51
- Key: { PK: (0, keys_1.sessionPartition)(sessionId), SK: keys_1.SESSION_SORT_KEY },
52
- UpdateExpression: 'ADD #count :neg',
53
- ConditionExpression: 'attribute_exists(PK) AND #c <= :now',
54
- ExpressionAttributeNames: { '#count': 'messageCount', '#c': 'createdAt' },
55
- ExpressionAttributeValues: { ':neg': -delta, ':now': createdBefore },
56
- };
57
- const input = { TransactItems: [{ Update: update }], ClientRequestToken: (0, node_crypto_1.randomUUID)() };
58
- try {
59
- await (0, retry_1.withDynamoDBRetry)(() => context.client.transactWrite(input), context.retry);
60
- }
61
- catch (error) {
62
- if (isCancelledByCondition(error))
63
- return;
64
- throw error;
65
- }
66
- }
67
- /**
68
- * Undo a rolled-back append's effect on the session row.
69
- *
70
- * When this call is the one that created the row — `createdAt` still equals
71
- * this call's timestamp, and the only messages counted on it are the ones
72
- * being reverted — the whole row is deleted. Without that, a failed first
73
- * append left a "ghost session": `title`, `createdAt` and `sessionId` are all
74
- * written via `if_not_exists`, so they were never reverted and never set
75
- * again, leaving `listSessions()` reporting a session with `messageCount: 0`
76
- * whose title still held up to 80 characters of a message the caller was told
77
- * had not persisted, with no API to clear it.
78
- *
79
- * Both conditions are load-bearing. `createdAt = :now` establishes that this
80
- * call created the row; `messageCount = :total` establishes that nothing else
81
- * has added to it since. A concurrent append to the same brand-new session
82
- * fails the count check, because deleting the row would destroy that caller's
83
- * committed messages — so it falls through to the plain decrement, and then
84
- * strips just the title this call contributed, which is the only part of the
85
- * row still carrying rolled-back message content.
86
- */
87
- async function revertSessionCreation(context, sessionId, total, createdAt, title) {
88
- if (total === 0)
89
- return;
90
- const input = {
91
- TransactItems: [
92
- {
93
- Delete: {
94
- TableName: context.tableName,
95
- Key: { PK: (0, keys_1.sessionPartition)(sessionId), SK: keys_1.SESSION_SORT_KEY },
96
- ConditionExpression: '#count = :total AND #c = :now',
97
- ExpressionAttributeNames: { '#count': 'messageCount', '#c': 'createdAt' },
98
- ExpressionAttributeValues: { ':total': total, ':now': createdAt },
99
- },
100
- },
101
- ],
102
- ClientRequestToken: (0, node_crypto_1.randomUUID)(),
103
- };
104
- try {
105
- await (0, retry_1.withDynamoDBRetry)(() => context.client.transactWrite(input), context.retry);
106
- return;
107
- }
108
- catch (error) {
109
- if (!isCancelledByCondition(error))
110
- throw error;
111
- }
112
- await revertSessionCount(context, sessionId, total, createdAt);
113
- if (title !== undefined)
114
- await (0, session_title_1.removeRolledBackTitle)(context, sessionId, createdAt, title);
115
- }
@@ -1,19 +0,0 @@
1
- import type { HistoryContext } from './setup';
2
- /**
3
- * Strip a title this call contributed to a session row it created, when the
4
- * row itself could not be deleted because a concurrent append has since added
5
- * messages to it.
6
- *
7
- * Without this, that narrow window reopens exactly the leak C4 closes: the
8
- * title is derived from the first human message of an append the caller was
9
- * told had failed, and `if_not_exists` means nothing ever overwrites it — so
10
- * a row that now belongs to a different caller keeps up to 80 characters of
11
- * rolled-back message content.
12
- *
13
- * Both guards are load-bearing. `createdAt = :now` establishes that this call
14
- * created the row, and `title = :title` that the title on it is still the one
15
- * this call wrote — so a pre-existing title, or one a concurrent caller won
16
- * the `if_not_exists` race for, is never removed. A condition rejection means
17
- * exactly that and is not an error; anything else is.
18
- */
19
- export declare function removeRolledBackTitle(context: HistoryContext, sessionId: string, createdAt: string, title: string): Promise<void>;
@@ -1,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.removeRolledBackTitle = removeRolledBackTitle;
4
- const retry_1 = require("../../shared/dynamodb/retry");
5
- const keys_1 = require("./keys");
6
- /** True when a plain UpdateItem was turned away by its ConditionExpression. */
7
- function isConditionRejected(error) {
8
- return error.name === 'ConditionalCheckFailedException';
9
- }
10
- /**
11
- * Strip a title this call contributed to a session row it created, when the
12
- * row itself could not be deleted because a concurrent append has since added
13
- * messages to it.
14
- *
15
- * Without this, that narrow window reopens exactly the leak C4 closes: the
16
- * title is derived from the first human message of an append the caller was
17
- * told had failed, and `if_not_exists` means nothing ever overwrites it — so
18
- * a row that now belongs to a different caller keeps up to 80 characters of
19
- * rolled-back message content.
20
- *
21
- * Both guards are load-bearing. `createdAt = :now` establishes that this call
22
- * created the row, and `title = :title` that the title on it is still the one
23
- * this call wrote — so a pre-existing title, or one a concurrent caller won
24
- * the `if_not_exists` race for, is never removed. A condition rejection means
25
- * exactly that and is not an error; anything else is.
26
- */
27
- async function removeRolledBackTitle(context, sessionId, createdAt, title) {
28
- try {
29
- await (0, retry_1.withDynamoDBRetry)(() => context.client.update({
30
- TableName: context.tableName,
31
- Key: { PK: (0, keys_1.sessionPartition)(sessionId), SK: keys_1.SESSION_SORT_KEY },
32
- UpdateExpression: 'REMOVE #title',
33
- ConditionExpression: '#c = :now AND #title = :title',
34
- ExpressionAttributeNames: { '#title': 'title', '#c': 'createdAt' },
35
- ExpressionAttributeValues: { ':now': createdAt, ':title': title },
36
- }), context.retry);
37
- }
38
- catch (error) {
39
- if (isConditionRejected(error))
40
- return;
41
- throw error;
42
- }
43
- }
@@ -1,27 +0,0 @@
1
- import type { TransactWriteCommandInput } from '@aws-sdk/lib-dynamodb';
2
- /** One member of a {@link TransactWriteCommandInput} `TransactItems` list. */
3
- export type HistoryTransactItem = NonNullable<TransactWriteCommandInput['TransactItems']>[number];
4
- /** Fields driving the per-session metadata update inside the append transaction. */
5
- export interface SessionUpdateFields {
6
- sessionId: string;
7
- count: number;
8
- now: string;
9
- title?: string;
10
- ttlTimestamp?: number;
11
- forceTtlRefresh?: boolean;
12
- }
13
- /**
14
- * Build the metadata `Update` transact-item: `ADD` the message count and `SET`
15
- * `updatedAt` every time, while `createdAt`, `sessionId`, `title`, and the `ttl`
16
- * anchor are written once via `if_not_exists`. Folding the `ttl` anchor in here
17
- * means the first append fixes one shared expiry atomically with the count, with
18
- * no separate pre-write that could orphan a metadata-only row. When
19
- * `forceTtlRefresh` is set (because {@link resolveTtlAnchor} found the persisted
20
- * anchor missing or already expired), the `ttl` clause instead does a plain
21
- * `SET`, so the SESSION row's own stale attribute actually heals instead of
22
- * being permanently blocked by `if_not_exists`. When forceTtlRefresh is set,
23
- * the SET is additionally guarded by a ConditionExpression so a concurrent
24
- * caller's already-healed anchor can never be regressed backward — see
25
- * message-transaction.ts for how a lost race is retried without forcing.
26
- */
27
- export declare function buildSessionUpdateItem(tableName: string, fields: SessionUpdateFields): HistoryTransactItem;
@@ -1,69 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildSessionUpdateItem = buildSessionUpdateItem;
4
- const keys_1 = require("./keys");
5
- /**
6
- * Build the metadata `Update` transact-item: `ADD` the message count and `SET`
7
- * `updatedAt` every time, while `createdAt`, `sessionId`, `title`, and the `ttl`
8
- * anchor are written once via `if_not_exists`. Folding the `ttl` anchor in here
9
- * means the first append fixes one shared expiry atomically with the count, with
10
- * no separate pre-write that could orphan a metadata-only row. When
11
- * `forceTtlRefresh` is set (because {@link resolveTtlAnchor} found the persisted
12
- * anchor missing or already expired), the `ttl` clause instead does a plain
13
- * `SET`, so the SESSION row's own stale attribute actually heals instead of
14
- * being permanently blocked by `if_not_exists`. When forceTtlRefresh is set,
15
- * the SET is additionally guarded by a ConditionExpression so a concurrent
16
- * caller's already-healed anchor can never be regressed backward — see
17
- * message-transaction.ts for how a lost race is retried without forcing.
18
- */
19
- function buildSessionUpdateItem(tableName, fields) {
20
- const names = {
21
- '#count': 'messageCount',
22
- '#u': 'updatedAt',
23
- '#c': 'createdAt',
24
- '#sid': 'sessionId',
25
- };
26
- const values = {
27
- ':n': fields.count,
28
- ':u': fields.now,
29
- ':c': fields.now,
30
- ':sid': fields.sessionId,
31
- };
32
- const sets = ['#u = :u', '#c = if_not_exists(#c, :c)', '#sid = if_not_exists(#sid, :sid)'];
33
- if (fields.title !== undefined) {
34
- names['#title'] = 'title';
35
- values[':title'] = fields.title;
36
- sets.push('#title = if_not_exists(#title, :title)');
37
- }
38
- let conditionExpression;
39
- if (fields.ttlTimestamp !== undefined) {
40
- names['#ttl'] = 'ttl';
41
- values[':ttl'] = fields.ttlTimestamp;
42
- if (fields.forceTtlRefresh) {
43
- sets.push('#ttl = :ttl');
44
- /**
45
- * Guards the force-overwrite so a concurrent caller's already-healed,
46
- * equal-or-later anchor can never be regressed backward by this one.
47
- * `<=` (not `<`): two concurrent healers of the same stale anchor
48
- * typically compute the identical target timestamp, and `<=` lets
49
- * the second one succeed by re-applying the same value instead of
50
- * failing the condition and paying a full transaction retry for a
51
- * write that was never actually a regression.
52
- */
53
- conditionExpression = 'attribute_not_exists(#ttl) OR #ttl <= :ttl';
54
- }
55
- else {
56
- sets.push('#ttl = if_not_exists(#ttl, :ttl)');
57
- }
58
- }
59
- return {
60
- Update: {
61
- TableName: tableName,
62
- Key: { PK: (0, keys_1.sessionPartition)(fields.sessionId), SK: keys_1.SESSION_SORT_KEY },
63
- UpdateExpression: `ADD #count :n SET ${sets.join(', ')}`,
64
- ...(conditionExpression ? { ConditionExpression: conditionExpression } : {}),
65
- ExpressionAttributeNames: names,
66
- ExpressionAttributeValues: values,
67
- },
68
- };
69
- }