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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (608) hide show
  1. package/README.md +1820 -290
  2. package/dist/cjs/backfill/backfill.d.ts +171 -0
  3. package/dist/cjs/backfill/backfill.js +177 -0
  4. package/dist/cjs/checkpointer/actions/delete-thread.d.ts +50 -0
  5. package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
  6. package/dist/cjs/checkpointer/actions/get-tuple.d.ts +36 -0
  7. package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
  8. package/dist/cjs/checkpointer/actions/list.d.ts +55 -0
  9. package/dist/cjs/checkpointer/actions/list.js +70 -0
  10. package/dist/cjs/checkpointer/actions/put-writes.d.ts +49 -0
  11. package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
  12. package/dist/cjs/checkpointer/actions/put.d.ts +95 -0
  13. package/dist/cjs/checkpointer/actions/put.js +79 -0
  14. package/dist/cjs/checkpointer/internal/delta-history.d.ts +124 -0
  15. package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
  16. package/dist/cjs/checkpointer/internal/listing.d.ts +149 -0
  17. package/dist/cjs/checkpointer/internal/listing.js +104 -0
  18. package/dist/cjs/checkpointer/internal/parse.d.ts +298 -0
  19. package/dist/cjs/checkpointer/internal/parse.js +184 -0
  20. package/dist/cjs/checkpointer/internal/pending-writes.d.ts +314 -0
  21. package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
  22. package/dist/cjs/checkpointer/internal/read.d.ts +135 -0
  23. package/dist/cjs/checkpointer/internal/read.js +132 -0
  24. package/dist/cjs/checkpointer/internal/rows.d.ts +644 -0
  25. package/dist/cjs/checkpointer/internal/rows.js +356 -0
  26. package/dist/cjs/checkpointer/internal/setup.d.ts +47 -0
  27. package/dist/cjs/checkpointer/internal/setup.js +25 -0
  28. package/dist/cjs/checkpointer/saver.d.ts +306 -0
  29. package/dist/cjs/checkpointer/saver.js +56 -0
  30. package/dist/cjs/checkpointer/types.d.ts +51 -0
  31. package/dist/cjs/factory/factory.d.ts +154 -0
  32. package/dist/cjs/factory/factory.js +137 -0
  33. package/dist/{factory → cjs/factory}/types.d.ts +33 -14
  34. package/dist/cjs/history/actions/add-messages.d.ts +51 -0
  35. package/dist/cjs/history/actions/add-messages.js +17 -0
  36. package/dist/cjs/history/actions/clear.d.ts +52 -0
  37. package/dist/cjs/history/actions/clear.js +29 -0
  38. package/dist/cjs/history/actions/get-messages.d.ts +60 -0
  39. package/dist/cjs/history/actions/get-messages.js +58 -0
  40. package/dist/cjs/history/actions/list-sessions.d.ts +55 -0
  41. package/dist/cjs/history/actions/list-sessions.js +67 -0
  42. package/dist/cjs/history/actions/reconcile-count.d.ts +49 -0
  43. package/dist/cjs/history/actions/reconcile-count.js +8 -0
  44. package/dist/cjs/history/chat-message-history.d.ts +267 -0
  45. package/dist/cjs/history/chat-message-history.js +61 -0
  46. package/dist/cjs/history/internal/append.d.ts +244 -0
  47. package/dist/cjs/history/internal/append.js +267 -0
  48. package/dist/cjs/history/internal/message-read.d.ts +84 -0
  49. package/dist/cjs/history/internal/message-read.js +93 -0
  50. package/dist/cjs/history/internal/parse.d.ts +153 -0
  51. package/dist/cjs/history/internal/parse.js +113 -0
  52. package/dist/cjs/history/internal/rows.d.ts +196 -0
  53. package/dist/cjs/history/internal/rows.js +96 -0
  54. package/dist/cjs/history/internal/session.d.ts +350 -0
  55. package/dist/cjs/history/internal/session.js +296 -0
  56. package/dist/cjs/history/internal/setup.d.ts +64 -0
  57. package/dist/cjs/history/internal/setup.js +60 -0
  58. package/dist/cjs/history/session-adapter.d.ts +112 -0
  59. package/dist/cjs/history/session-adapter.js +38 -0
  60. package/dist/cjs/history/types.d.ts +102 -0
  61. package/dist/cjs/index.d.ts +53 -0
  62. package/dist/cjs/index.js +25 -0
  63. package/dist/cjs/package.json +1 -0
  64. package/dist/cjs/shared/adapter.d.ts +146 -0
  65. package/dist/cjs/shared/adapter.js +70 -0
  66. package/dist/cjs/shared/clock.d.ts +52 -0
  67. package/dist/cjs/shared/clock.js +14 -0
  68. package/dist/cjs/shared/codec/codec.d.ts +336 -0
  69. package/dist/cjs/shared/codec/codec.js +162 -0
  70. package/dist/cjs/shared/codec/compression.d.ts +66 -0
  71. package/dist/cjs/shared/codec/compression.js +45 -0
  72. package/dist/cjs/shared/codec/json-serde.d.ts +80 -0
  73. package/dist/cjs/shared/codec/json-serde.js +58 -0
  74. package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +22 -2
  75. package/dist/{shared → cjs/shared}/codec/s3/client-types.js +0 -1
  76. package/dist/cjs/shared/codec/s3/client.d.ts +63 -0
  77. package/dist/cjs/shared/codec/s3/client.js +78 -0
  78. package/dist/cjs/shared/codec/s3/config.d.ts +260 -0
  79. package/dist/cjs/shared/codec/s3/config.js +92 -0
  80. package/dist/cjs/shared/codec/s3/lifecycle.d.ts +220 -0
  81. package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
  82. package/dist/cjs/shared/codec/s3/offloader.d.ts +428 -0
  83. package/dist/cjs/shared/codec/s3/offloader.js +289 -0
  84. package/dist/cjs/shared/concurrency.d.ts +43 -0
  85. package/dist/{shared → cjs/shared}/concurrency.js +10 -9
  86. package/dist/cjs/shared/dynamodb/abort.d.ts +47 -0
  87. package/dist/cjs/shared/dynamodb/abort.js +16 -0
  88. package/dist/cjs/shared/dynamodb/batch-write.d.ts +86 -0
  89. package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
  90. package/dist/cjs/shared/dynamodb/cancellation.d.ts +124 -0
  91. package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
  92. package/dist/cjs/shared/dynamodb/client.d.ts +177 -0
  93. package/dist/{shared → cjs/shared}/dynamodb/client.js +12 -14
  94. package/dist/cjs/shared/dynamodb/idempotent-write.d.ts +596 -0
  95. package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
  96. package/dist/cjs/shared/dynamodb/paginate.d.ts +111 -0
  97. package/dist/cjs/shared/dynamodb/paginate.js +90 -0
  98. package/dist/cjs/shared/dynamodb/partition-delete.d.ts +204 -0
  99. package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
  100. package/dist/cjs/shared/dynamodb/recency-index.d.ts +243 -0
  101. package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
  102. package/dist/cjs/shared/dynamodb/retry.d.ts +317 -0
  103. package/dist/cjs/shared/dynamodb/retry.js +193 -0
  104. package/dist/cjs/shared/dynamodb/row-size.d.ts +33 -0
  105. package/dist/cjs/shared/dynamodb/row-size.js +30 -0
  106. package/dist/cjs/shared/dynamodb/table-schema.d.ts +199 -0
  107. package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
  108. package/dist/cjs/shared/errors/base-error.d.ts +231 -0
  109. package/dist/cjs/shared/errors/base-error.js +73 -0
  110. package/dist/cjs/shared/errors/boundary.d.ts +86 -0
  111. package/dist/cjs/shared/errors/boundary.js +61 -0
  112. package/dist/cjs/shared/errors/classify.d.ts +206 -0
  113. package/dist/cjs/shared/errors/classify.js +232 -0
  114. package/dist/cjs/shared/errors/error-code.d.ts +95 -0
  115. package/dist/{shared → cjs/shared}/errors/error-code.js +12 -2
  116. package/dist/cjs/shared/errors/errors.d.ts +233 -0
  117. package/dist/cjs/shared/errors/errors.js +123 -0
  118. package/dist/cjs/shared/logging/logger.d.ts +80 -0
  119. package/dist/cjs/shared/logging/logger.js +30 -0
  120. package/dist/cjs/shared/logging/redaction.d.ts +123 -0
  121. package/dist/cjs/shared/logging/redaction.js +145 -0
  122. package/dist/cjs/shared/logging/secret-patterns.d.ts +227 -0
  123. package/dist/cjs/shared/logging/secret-patterns.js +93 -0
  124. package/dist/cjs/shared/logging/truncate.d.ts +197 -0
  125. package/dist/cjs/shared/logging/truncate.js +31 -0
  126. package/dist/cjs/shared/options.d.ts +100 -0
  127. package/dist/cjs/shared/ulid.d.ts +80 -0
  128. package/dist/{shared → cjs/shared}/ulid.js +7 -21
  129. package/dist/cjs/shared/validation/collaborators.d.ts +160 -0
  130. package/dist/cjs/shared/validation/collaborators.js +79 -0
  131. package/dist/cjs/shared/validation/option-shape.d.ts +91 -0
  132. package/dist/cjs/shared/validation/option-shape.js +31 -0
  133. package/dist/cjs/shared/validation/options.d.ts +145 -0
  134. package/dist/cjs/shared/validation/options.js +166 -0
  135. package/dist/cjs/shared/validation/primitives.d.ts +292 -0
  136. package/dist/cjs/shared/validation/primitives.js +114 -0
  137. package/dist/cjs/shared/validation/ttl.d.ts +94 -0
  138. package/dist/cjs/shared/validation/ttl.js +52 -0
  139. package/dist/cjs/store/actions/list-namespaces.d.ts +79 -0
  140. package/dist/cjs/store/actions/list-namespaces.js +92 -0
  141. package/dist/cjs/store/actions/put.d.ts +43 -0
  142. package/dist/cjs/store/actions/put.js +49 -0
  143. package/dist/cjs/store/actions/reconcile-vector-index.d.ts +38 -0
  144. package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
  145. package/dist/cjs/store/actions/search.d.ts +38 -0
  146. package/dist/cjs/store/actions/search.js +26 -0
  147. package/dist/cjs/store/internal/batch-plan.d.ts +56 -0
  148. package/dist/cjs/store/internal/batch-plan.js +32 -0
  149. package/dist/cjs/store/internal/filter.d.ts +43 -0
  150. package/dist/cjs/store/internal/filter.js +64 -0
  151. package/dist/cjs/store/internal/get-item.d.ts +77 -0
  152. package/dist/cjs/store/internal/get-item.js +58 -0
  153. package/dist/cjs/store/internal/item-write.d.ts +270 -0
  154. package/dist/cjs/store/internal/item-write.js +181 -0
  155. package/dist/cjs/store/internal/parse.d.ts +230 -0
  156. package/dist/cjs/store/internal/parse.js +180 -0
  157. package/dist/cjs/store/internal/rows.d.ts +359 -0
  158. package/dist/cjs/store/internal/rows.js +166 -0
  159. package/dist/cjs/store/internal/semantic-search.d.ts +168 -0
  160. package/dist/{store/internal/text-path.js → cjs/store/internal/semantic-search.js} +92 -28
  161. package/dist/cjs/store/internal/setup.d.ts +96 -0
  162. package/dist/cjs/store/internal/setup.js +103 -0
  163. package/dist/cjs/store/internal/table-search.d.ts +100 -0
  164. package/dist/cjs/store/internal/table-search.js +123 -0
  165. package/dist/cjs/store/internal/vector-index.d.ts +258 -0
  166. package/dist/cjs/store/internal/vector-index.js +269 -0
  167. package/dist/cjs/store/store.d.ts +329 -0
  168. package/dist/cjs/store/store.js +97 -0
  169. package/dist/cjs/store/types.d.ts +111 -0
  170. package/dist/cjs/store/vector-backend.d.ts +104 -0
  171. package/dist/cjs/store/vector-backend.js +4 -0
  172. package/dist/esm/backfill/backfill.d.ts +171 -0
  173. package/dist/esm/backfill/backfill.js +170 -0
  174. package/dist/esm/checkpointer/actions/delete-thread.d.ts +50 -0
  175. package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
  176. package/dist/esm/checkpointer/actions/get-tuple.d.ts +36 -0
  177. package/dist/esm/checkpointer/actions/get-tuple.js +19 -0
  178. package/dist/esm/checkpointer/actions/list.d.ts +55 -0
  179. package/dist/esm/checkpointer/actions/list.js +67 -0
  180. package/dist/esm/checkpointer/actions/put-writes.d.ts +49 -0
  181. package/dist/esm/checkpointer/actions/put-writes.js +18 -0
  182. package/dist/esm/checkpointer/actions/put.d.ts +95 -0
  183. package/dist/esm/checkpointer/actions/put.js +75 -0
  184. package/dist/esm/checkpointer/internal/delta-history.d.ts +124 -0
  185. package/dist/esm/checkpointer/internal/delta-history.js +126 -0
  186. package/dist/esm/checkpointer/internal/listing.d.ts +149 -0
  187. package/dist/esm/checkpointer/internal/listing.js +95 -0
  188. package/dist/esm/checkpointer/internal/parse.d.ts +298 -0
  189. package/dist/esm/checkpointer/internal/parse.js +169 -0
  190. package/dist/esm/checkpointer/internal/pending-writes.d.ts +314 -0
  191. package/dist/esm/checkpointer/internal/pending-writes.js +229 -0
  192. package/dist/esm/checkpointer/internal/read.d.ts +135 -0
  193. package/dist/esm/checkpointer/internal/read.js +125 -0
  194. package/dist/esm/checkpointer/internal/rows.d.ts +644 -0
  195. package/dist/esm/checkpointer/internal/rows.js +323 -0
  196. package/dist/esm/checkpointer/internal/setup.d.ts +47 -0
  197. package/dist/esm/checkpointer/internal/setup.js +21 -0
  198. package/dist/esm/checkpointer/saver.d.ts +306 -0
  199. package/dist/esm/checkpointer/saver.js +52 -0
  200. package/dist/esm/checkpointer/types.d.ts +51 -0
  201. package/dist/esm/checkpointer/types.js +1 -0
  202. package/dist/esm/factory/factory.d.ts +154 -0
  203. package/dist/esm/factory/factory.js +133 -0
  204. package/dist/esm/factory/types.d.ts +76 -0
  205. package/dist/esm/factory/types.js +1 -0
  206. package/dist/esm/history/actions/add-messages.d.ts +51 -0
  207. package/dist/esm/history/actions/add-messages.js +14 -0
  208. package/dist/esm/history/actions/clear.d.ts +52 -0
  209. package/dist/esm/history/actions/clear.js +26 -0
  210. package/dist/esm/history/actions/get-messages.d.ts +60 -0
  211. package/dist/esm/history/actions/get-messages.js +55 -0
  212. package/dist/esm/history/actions/list-sessions.d.ts +55 -0
  213. package/dist/esm/history/actions/list-sessions.js +64 -0
  214. package/dist/esm/history/actions/reconcile-count.d.ts +49 -0
  215. package/dist/esm/history/actions/reconcile-count.js +5 -0
  216. package/dist/esm/history/chat-message-history.d.ts +267 -0
  217. package/dist/esm/history/chat-message-history.js +57 -0
  218. package/dist/esm/history/internal/append.d.ts +244 -0
  219. package/dist/esm/history/internal/append.js +259 -0
  220. package/dist/esm/history/internal/message-read.d.ts +84 -0
  221. package/dist/esm/history/internal/message-read.js +89 -0
  222. package/dist/esm/history/internal/parse.d.ts +153 -0
  223. package/dist/esm/history/internal/parse.js +105 -0
  224. package/dist/esm/history/internal/rows.d.ts +196 -0
  225. package/dist/esm/history/internal/rows.js +83 -0
  226. package/dist/esm/history/internal/session.d.ts +350 -0
  227. package/dist/esm/history/internal/session.js +285 -0
  228. package/dist/esm/history/internal/setup.d.ts +64 -0
  229. package/dist/esm/history/internal/setup.js +56 -0
  230. package/dist/esm/history/session-adapter.d.ts +112 -0
  231. package/dist/esm/history/session-adapter.js +34 -0
  232. package/dist/esm/history/types.d.ts +102 -0
  233. package/dist/esm/history/types.js +1 -0
  234. package/dist/esm/index.d.ts +53 -0
  235. package/dist/esm/index.js +10 -0
  236. package/dist/esm/shared/adapter.d.ts +146 -0
  237. package/dist/esm/shared/adapter.js +65 -0
  238. package/dist/esm/shared/clock.d.ts +52 -0
  239. package/dist/esm/shared/clock.js +9 -0
  240. package/dist/esm/shared/codec/codec.d.ts +336 -0
  241. package/dist/esm/shared/codec/codec.js +150 -0
  242. package/dist/esm/shared/codec/compression.d.ts +66 -0
  243. package/dist/esm/shared/codec/compression.js +40 -0
  244. package/dist/esm/shared/codec/json-serde.d.ts +80 -0
  245. package/dist/esm/shared/codec/json-serde.js +54 -0
  246. package/dist/esm/shared/codec/s3/client-types.d.ts +54 -0
  247. package/dist/esm/shared/codec/s3/client-types.js +3 -0
  248. package/dist/esm/shared/codec/s3/client.d.ts +63 -0
  249. package/dist/esm/shared/codec/s3/client.js +40 -0
  250. package/dist/esm/shared/codec/s3/config.d.ts +260 -0
  251. package/dist/esm/shared/codec/s3/config.js +79 -0
  252. package/dist/esm/shared/codec/s3/lifecycle.d.ts +220 -0
  253. package/dist/esm/shared/codec/s3/lifecycle.js +214 -0
  254. package/dist/esm/shared/codec/s3/offloader.d.ts +428 -0
  255. package/dist/esm/shared/codec/s3/offloader.js +278 -0
  256. package/dist/esm/shared/concurrency.d.ts +43 -0
  257. package/dist/esm/shared/concurrency.js +27 -0
  258. package/dist/esm/shared/dynamodb/abort.d.ts +47 -0
  259. package/dist/esm/shared/dynamodb/abort.js +12 -0
  260. package/dist/esm/shared/dynamodb/batch-write.d.ts +86 -0
  261. package/dist/esm/shared/dynamodb/batch-write.js +74 -0
  262. package/dist/esm/shared/dynamodb/cancellation.d.ts +124 -0
  263. package/dist/esm/shared/dynamodb/cancellation.js +30 -0
  264. package/dist/esm/shared/dynamodb/client.d.ts +177 -0
  265. package/dist/esm/shared/dynamodb/client.js +35 -0
  266. package/dist/esm/shared/dynamodb/idempotent-write.d.ts +596 -0
  267. package/dist/esm/shared/dynamodb/idempotent-write.js +153 -0
  268. package/dist/esm/shared/dynamodb/paginate.d.ts +111 -0
  269. package/dist/esm/shared/dynamodb/paginate.js +84 -0
  270. package/dist/esm/shared/dynamodb/partition-delete.d.ts +204 -0
  271. package/dist/esm/shared/dynamodb/partition-delete.js +171 -0
  272. package/dist/esm/shared/dynamodb/recency-index.d.ts +243 -0
  273. package/dist/esm/shared/dynamodb/recency-index.js +136 -0
  274. package/dist/esm/shared/dynamodb/retry.d.ts +317 -0
  275. package/dist/esm/shared/dynamodb/retry.js +180 -0
  276. package/dist/esm/shared/dynamodb/row-size.d.ts +33 -0
  277. package/dist/esm/shared/dynamodb/row-size.js +26 -0
  278. package/dist/esm/shared/dynamodb/table-schema.d.ts +199 -0
  279. package/dist/esm/shared/dynamodb/table-schema.js +43 -0
  280. package/dist/esm/shared/errors/base-error.d.ts +231 -0
  281. package/dist/esm/shared/errors/base-error.js +64 -0
  282. package/dist/esm/shared/errors/boundary.d.ts +86 -0
  283. package/dist/esm/shared/errors/boundary.js +54 -0
  284. package/dist/esm/shared/errors/classify.d.ts +206 -0
  285. package/dist/esm/shared/errors/classify.js +220 -0
  286. package/dist/esm/shared/errors/error-code.d.ts +95 -0
  287. package/dist/esm/shared/errors/error-code.js +24 -0
  288. package/dist/esm/shared/errors/errors.d.ts +233 -0
  289. package/dist/esm/shared/errors/errors.js +110 -0
  290. package/dist/esm/shared/logging/logger.d.ts +80 -0
  291. package/dist/esm/shared/logging/logger.js +25 -0
  292. package/dist/esm/shared/logging/redaction.d.ts +123 -0
  293. package/dist/esm/shared/logging/redaction.js +140 -0
  294. package/dist/esm/shared/logging/secret-patterns.d.ts +227 -0
  295. package/dist/esm/shared/logging/secret-patterns.js +83 -0
  296. package/dist/esm/shared/logging/truncate.d.ts +197 -0
  297. package/dist/esm/shared/logging/truncate.js +25 -0
  298. package/dist/esm/shared/options.d.ts +100 -0
  299. package/dist/esm/shared/options.js +1 -0
  300. package/dist/esm/shared/ulid.d.ts +80 -0
  301. package/dist/esm/shared/ulid.js +77 -0
  302. package/dist/esm/shared/validation/collaborators.d.ts +160 -0
  303. package/dist/esm/shared/validation/collaborators.js +70 -0
  304. package/dist/esm/shared/validation/option-shape.d.ts +91 -0
  305. package/dist/esm/shared/validation/option-shape.js +24 -0
  306. package/dist/esm/shared/validation/options.d.ts +145 -0
  307. package/dist/esm/shared/validation/options.js +156 -0
  308. package/dist/esm/shared/validation/primitives.d.ts +292 -0
  309. package/dist/esm/shared/validation/primitives.js +100 -0
  310. package/dist/esm/shared/validation/ttl.d.ts +94 -0
  311. package/dist/esm/shared/validation/ttl.js +46 -0
  312. package/dist/esm/store/actions/list-namespaces.d.ts +79 -0
  313. package/dist/esm/store/actions/list-namespaces.js +86 -0
  314. package/dist/esm/store/actions/put.d.ts +43 -0
  315. package/dist/esm/store/actions/put.js +46 -0
  316. package/dist/esm/store/actions/reconcile-vector-index.d.ts +38 -0
  317. package/dist/esm/store/actions/reconcile-vector-index.js +10 -0
  318. package/dist/esm/store/actions/search.d.ts +38 -0
  319. package/dist/esm/store/actions/search.js +23 -0
  320. package/dist/esm/store/internal/batch-plan.d.ts +56 -0
  321. package/dist/esm/store/internal/batch-plan.js +28 -0
  322. package/dist/esm/store/internal/filter.d.ts +43 -0
  323. package/dist/esm/store/internal/filter.js +60 -0
  324. package/dist/esm/store/internal/get-item.d.ts +77 -0
  325. package/dist/esm/store/internal/get-item.js +54 -0
  326. package/dist/esm/store/internal/item-write.d.ts +270 -0
  327. package/dist/esm/store/internal/item-write.js +173 -0
  328. package/dist/esm/store/internal/parse.d.ts +230 -0
  329. package/dist/esm/store/internal/parse.js +169 -0
  330. package/dist/esm/store/internal/rows.d.ts +359 -0
  331. package/dist/esm/store/internal/rows.js +147 -0
  332. package/dist/esm/store/internal/semantic-search.d.ts +168 -0
  333. package/dist/esm/store/internal/semantic-search.js +200 -0
  334. package/dist/esm/store/internal/setup.d.ts +96 -0
  335. package/dist/esm/store/internal/setup.js +98 -0
  336. package/dist/esm/store/internal/table-search.d.ts +100 -0
  337. package/dist/esm/store/internal/table-search.js +119 -0
  338. package/dist/esm/store/internal/vector-index.d.ts +258 -0
  339. package/dist/esm/store/internal/vector-index.js +256 -0
  340. package/dist/esm/store/store.d.ts +329 -0
  341. package/dist/esm/store/store.js +93 -0
  342. package/dist/esm/store/types.d.ts +111 -0
  343. package/dist/esm/store/types.js +1 -0
  344. package/dist/esm/store/vector-backend.d.ts +104 -0
  345. package/dist/esm/store/vector-backend.js +1 -0
  346. package/package.json +68 -46
  347. package/dist/checkpointer/actions/delete-thread.d.ts +0 -10
  348. package/dist/checkpointer/actions/delete-thread.js +0 -38
  349. package/dist/checkpointer/actions/get-tuple.d.ts +0 -11
  350. package/dist/checkpointer/actions/get-tuple.js +0 -25
  351. package/dist/checkpointer/actions/list.d.ts +0 -20
  352. package/dist/checkpointer/actions/list.js +0 -113
  353. package/dist/checkpointer/actions/put-writes.d.ts +0 -15
  354. package/dist/checkpointer/actions/put-writes.js +0 -62
  355. package/dist/checkpointer/actions/put.d.ts +0 -17
  356. package/dist/checkpointer/actions/put.js +0 -73
  357. package/dist/checkpointer/internal/assemble.d.ts +0 -17
  358. package/dist/checkpointer/internal/assemble.js +0 -38
  359. package/dist/checkpointer/internal/checkpoint-write-verify.d.ts +0 -24
  360. package/dist/checkpointer/internal/checkpoint-write-verify.js +0 -67
  361. package/dist/checkpointer/internal/configurable.d.ts +0 -12
  362. package/dist/checkpointer/internal/configurable.js +0 -24
  363. package/dist/checkpointer/internal/fetch.d.ts +0 -19
  364. package/dist/checkpointer/internal/fetch.js +0 -88
  365. package/dist/checkpointer/internal/filter-match.d.ts +0 -13
  366. package/dist/checkpointer/internal/filter-match.js +0 -15
  367. package/dist/checkpointer/internal/item-reader.d.ts +0 -66
  368. package/dist/checkpointer/internal/item-reader.js +0 -113
  369. package/dist/checkpointer/internal/item-writer.d.ts +0 -35
  370. package/dist/checkpointer/internal/item-writer.js +0 -107
  371. package/dist/checkpointer/internal/keys.d.ts +0 -41
  372. package/dist/checkpointer/internal/keys.js +0 -117
  373. package/dist/checkpointer/internal/list-scope.d.ts +0 -61
  374. package/dist/checkpointer/internal/list-scope.js +0 -108
  375. package/dist/checkpointer/internal/pending-sends.d.ts +0 -13
  376. package/dist/checkpointer/internal/pending-sends.js +0 -29
  377. package/dist/checkpointer/internal/query.d.ts +0 -21
  378. package/dist/checkpointer/internal/query.js +0 -42
  379. package/dist/checkpointer/internal/regular-write.d.ts +0 -28
  380. package/dist/checkpointer/internal/regular-write.js +0 -66
  381. package/dist/checkpointer/internal/setup.d.ts +0 -33
  382. package/dist/checkpointer/internal/setup.js +0 -38
  383. package/dist/checkpointer/internal/special-write-cas.d.ts +0 -29
  384. package/dist/checkpointer/internal/special-write-cas.js +0 -104
  385. package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -23
  386. package/dist/checkpointer/internal/special-write-cleanup.js +0 -50
  387. package/dist/checkpointer/internal/special-write-verify.d.ts +0 -53
  388. package/dist/checkpointer/internal/special-write-verify.js +0 -80
  389. package/dist/checkpointer/internal/stored-channels.d.ts +0 -31
  390. package/dist/checkpointer/internal/stored-channels.js +0 -70
  391. package/dist/checkpointer/internal/validation.d.ts +0 -18
  392. package/dist/checkpointer/internal/validation.js +0 -40
  393. package/dist/checkpointer/internal/write-guard.d.ts +0 -20
  394. package/dist/checkpointer/internal/write-guard.js +0 -48
  395. package/dist/checkpointer/internal/write-index.d.ts +0 -36
  396. package/dist/checkpointer/internal/write-index.js +0 -41
  397. package/dist/checkpointer/saver.d.ts +0 -70
  398. package/dist/checkpointer/saver.js +0 -105
  399. package/dist/checkpointer/types.d.ts +0 -58
  400. package/dist/factory/factory.d.ts +0 -40
  401. package/dist/factory/factory.js +0 -87
  402. package/dist/history/actions/add-messages.d.ts +0 -15
  403. package/dist/history/actions/add-messages.js +0 -77
  404. package/dist/history/actions/clear.d.ts +0 -10
  405. package/dist/history/actions/clear.js +0 -34
  406. package/dist/history/actions/get-messages.d.ts +0 -17
  407. package/dist/history/actions/get-messages.js +0 -79
  408. package/dist/history/actions/list-sessions.d.ts +0 -13
  409. package/dist/history/actions/list-sessions.js +0 -53
  410. package/dist/history/actions/reconcile-count.d.ts +0 -12
  411. package/dist/history/actions/reconcile-count.js +0 -64
  412. package/dist/history/chat-message-history.d.ts +0 -73
  413. package/dist/history/chat-message-history.js +0 -111
  414. package/dist/history/internal/append-saga.d.ts +0 -25
  415. package/dist/history/internal/append-saga.js +0 -79
  416. package/dist/history/internal/compensation.d.ts +0 -25
  417. package/dist/history/internal/compensation.js +0 -92
  418. package/dist/history/internal/item-mapper.d.ts +0 -9
  419. package/dist/history/internal/item-mapper.js +0 -27
  420. package/dist/history/internal/keys.d.ts +0 -16
  421. package/dist/history/internal/keys.js +0 -48
  422. package/dist/history/internal/message-chunker.d.ts +0 -13
  423. package/dist/history/internal/message-chunker.js +0 -67
  424. package/dist/history/internal/message-transaction.d.ts +0 -25
  425. package/dist/history/internal/message-transaction.js +0 -61
  426. package/dist/history/internal/message-window.d.ts +0 -17
  427. package/dist/history/internal/message-window.js +0 -49
  428. package/dist/history/internal/query.d.ts +0 -23
  429. package/dist/history/internal/query.js +0 -39
  430. package/dist/history/internal/session-count.d.ts +0 -47
  431. package/dist/history/internal/session-count.js +0 -115
  432. package/dist/history/internal/session-title.d.ts +0 -19
  433. package/dist/history/internal/session-title.js +0 -43
  434. package/dist/history/internal/session-update.d.ts +0 -27
  435. package/dist/history/internal/session-update.js +0 -69
  436. package/dist/history/internal/setup.d.ts +0 -31
  437. package/dist/history/internal/setup.js +0 -43
  438. package/dist/history/internal/title-generator.d.ts +0 -12
  439. package/dist/history/internal/title-generator.js +0 -41
  440. package/dist/history/internal/ttl-anchor.d.ts +0 -24
  441. package/dist/history/internal/ttl-anchor.js +0 -38
  442. package/dist/history/internal/validation.d.ts +0 -25
  443. package/dist/history/internal/validation.js +0 -53
  444. package/dist/history/session-adapter.d.ts +0 -29
  445. package/dist/history/session-adapter.js +0 -35
  446. package/dist/history/types.d.ts +0 -69
  447. package/dist/index.d.ts +0 -29
  448. package/dist/index.js +0 -32
  449. package/dist/shared/clock.d.ts +0 -8
  450. package/dist/shared/clock.js +0 -16
  451. package/dist/shared/codec/codec.d.ts +0 -53
  452. package/dist/shared/codec/codec.js +0 -66
  453. package/dist/shared/codec/compression.d.ts +0 -24
  454. package/dist/shared/codec/compression.js +0 -48
  455. package/dist/shared/codec/descriptor-keys.d.ts +0 -12
  456. package/dist/shared/codec/descriptor-keys.js +0 -14
  457. package/dist/shared/codec/encode.d.ts +0 -13
  458. package/dist/shared/codec/encode.js +0 -43
  459. package/dist/shared/codec/json-serde.d.ts +0 -7
  460. package/dist/shared/codec/json-serde.js +0 -17
  461. package/dist/shared/codec/payload-loss.d.ts +0 -12
  462. package/dist/shared/codec/payload-loss.js +0 -38
  463. package/dist/shared/codec/s3/adapter-config.d.ts +0 -13
  464. package/dist/shared/codec/s3/adapter-config.js +0 -22
  465. package/dist/shared/codec/s3/bounded-body.d.ts +0 -14
  466. package/dist/shared/codec/s3/bounded-body.js +0 -47
  467. package/dist/shared/codec/s3/client.d.ts +0 -18
  468. package/dist/shared/codec/s3/client.js +0 -46
  469. package/dist/shared/codec/s3/config.d.ts +0 -51
  470. package/dist/shared/codec/s3/config.js +0 -58
  471. package/dist/shared/codec/s3/delete.d.ts +0 -7
  472. package/dist/shared/codec/s3/delete.js +0 -28
  473. package/dist/shared/codec/s3/key-scope.d.ts +0 -23
  474. package/dist/shared/codec/s3/key-scope.js +0 -44
  475. package/dist/shared/codec/s3/lifecycle.d.ts +0 -14
  476. package/dist/shared/codec/s3/lifecycle.js +0 -63
  477. package/dist/shared/codec/s3/offloader.d.ts +0 -44
  478. package/dist/shared/codec/s3/offloader.js +0 -118
  479. package/dist/shared/codec/s3/orphans.d.ts +0 -23
  480. package/dist/shared/codec/s3/orphans.js +0 -71
  481. package/dist/shared/codec/s3/read-write.d.ts +0 -18
  482. package/dist/shared/codec/s3/read-write.js +0 -51
  483. package/dist/shared/codec/s3/retry.d.ts +0 -5
  484. package/dist/shared/codec/s3/retry.js +0 -22
  485. package/dist/shared/concurrency.d.ts +0 -6
  486. package/dist/shared/constants.d.ts +0 -112
  487. package/dist/shared/constants.js +0 -115
  488. package/dist/shared/dynamodb/abort.d.ts +0 -9
  489. package/dist/shared/dynamodb/abort.js +0 -27
  490. package/dist/shared/dynamodb/backoff.d.ts +0 -15
  491. package/dist/shared/dynamodb/backoff.js +0 -48
  492. package/dist/shared/dynamodb/batch-write.d.ts +0 -22
  493. package/dist/shared/dynamodb/batch-write.js +0 -53
  494. package/dist/shared/dynamodb/cancellation.d.ts +0 -6
  495. package/dist/shared/dynamodb/cancellation.js +0 -7
  496. package/dist/shared/dynamodb/client.d.ts +0 -28
  497. package/dist/shared/dynamodb/conditional-put.d.ts +0 -67
  498. package/dist/shared/dynamodb/conditional-put.js +0 -76
  499. package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -21
  500. package/dist/shared/dynamodb/drain-unprocessed.js +0 -43
  501. package/dist/shared/dynamodb/expiry.d.ts +0 -16
  502. package/dist/shared/dynamodb/expiry.js +0 -29
  503. package/dist/shared/dynamodb/paginate-core.d.ts +0 -24
  504. package/dist/shared/dynamodb/paginate-core.js +0 -82
  505. package/dist/shared/dynamodb/paginate.d.ts +0 -14
  506. package/dist/shared/dynamodb/paginate.js +0 -19
  507. package/dist/shared/dynamodb/partition-delete.d.ts +0 -39
  508. package/dist/shared/dynamodb/partition-delete.js +0 -71
  509. package/dist/shared/dynamodb/retry-classifier.d.ts +0 -17
  510. package/dist/shared/dynamodb/retry-classifier.js +0 -118
  511. package/dist/shared/dynamodb/retry-policy.d.ts +0 -26
  512. package/dist/shared/dynamodb/retry-policy.js +0 -22
  513. package/dist/shared/dynamodb/retry.d.ts +0 -31
  514. package/dist/shared/dynamodb/retry.js +0 -57
  515. package/dist/shared/dynamodb/scan.d.ts +0 -14
  516. package/dist/shared/dynamodb/scan.js +0 -19
  517. package/dist/shared/dynamodb/types.d.ts +0 -23
  518. package/dist/shared/errors/base-error.d.ts +0 -30
  519. package/dist/shared/errors/base-error.js +0 -27
  520. package/dist/shared/errors/boundary.d.ts +0 -18
  521. package/dist/shared/errors/boundary.js +0 -46
  522. package/dist/shared/errors/error-code.d.ts +0 -13
  523. package/dist/shared/errors/errors.d.ts +0 -68
  524. package/dist/shared/errors/errors.js +0 -114
  525. package/dist/shared/errors/upstream-error.d.ts +0 -16
  526. package/dist/shared/errors/upstream-error.js +0 -27
  527. package/dist/shared/errors/wrap-error.d.ts +0 -7
  528. package/dist/shared/errors/wrap-error.js +0 -15
  529. package/dist/shared/logging/logger.d.ts +0 -18
  530. package/dist/shared/logging/logger.js +0 -15
  531. package/dist/shared/logging/redaction-walk.d.ts +0 -23
  532. package/dist/shared/logging/redaction-walk.js +0 -112
  533. package/dist/shared/logging/redaction.d.ts +0 -39
  534. package/dist/shared/logging/redaction.js +0 -75
  535. package/dist/shared/logging/secret-patterns.d.ts +0 -92
  536. package/dist/shared/logging/secret-patterns.js +0 -133
  537. package/dist/shared/options.d.ts +0 -37
  538. package/dist/shared/ulid.d.ts +0 -23
  539. package/dist/shared/validation/options.d.ts +0 -8
  540. package/dist/shared/validation/options.js +0 -90
  541. package/dist/shared/validation/primitives.d.ts +0 -29
  542. package/dist/shared/validation/primitives.js +0 -82
  543. package/dist/shared/validation/ttl.d.ts +0 -28
  544. package/dist/shared/validation/ttl.js +0 -52
  545. package/dist/store/actions/get.d.ts +0 -13
  546. package/dist/store/actions/get.js +0 -73
  547. package/dist/store/actions/list-namespaces.d.ts +0 -8
  548. package/dist/store/actions/list-namespaces.js +0 -59
  549. package/dist/store/actions/put.d.ts +0 -10
  550. package/dist/store/actions/put.js +0 -96
  551. package/dist/store/actions/reconcile-vector-index.d.ts +0 -18
  552. package/dist/store/actions/reconcile-vector-index.js +0 -26
  553. package/dist/store/actions/search.d.ts +0 -9
  554. package/dist/store/actions/search.js +0 -34
  555. package/dist/store/internal/backend-search.d.ts +0 -4
  556. package/dist/store/internal/backend-search.js +0 -74
  557. package/dist/store/internal/batch-plan.d.ts +0 -11
  558. package/dist/store/internal/batch-plan.js +0 -52
  559. package/dist/store/internal/candidates.d.ts +0 -23
  560. package/dist/store/internal/candidates.js +0 -94
  561. package/dist/store/internal/filter.d.ts +0 -9
  562. package/dist/store/internal/filter.js +0 -85
  563. package/dist/store/internal/index-reconcile.d.ts +0 -21
  564. package/dist/store/internal/index-reconcile.js +0 -118
  565. package/dist/store/internal/index-sync.d.ts +0 -10
  566. package/dist/store/internal/index-sync.js +0 -25
  567. package/dist/store/internal/item-mapper.d.ts +0 -27
  568. package/dist/store/internal/item-mapper.js +0 -61
  569. package/dist/store/internal/keys.d.ts +0 -17
  570. package/dist/store/internal/keys.js +0 -41
  571. package/dist/store/internal/namespace-match.d.ts +0 -11
  572. package/dist/store/internal/namespace-match.js +0 -40
  573. package/dist/store/internal/option-validation.d.ts +0 -13
  574. package/dist/store/internal/option-validation.js +0 -77
  575. package/dist/store/internal/overwrite-swap.d.ts +0 -32
  576. package/dist/store/internal/overwrite-swap.js +0 -68
  577. package/dist/store/internal/persist.d.ts +0 -28
  578. package/dist/store/internal/persist.js +0 -64
  579. package/dist/store/internal/query.d.ts +0 -11
  580. package/dist/store/internal/query.js +0 -48
  581. package/dist/store/internal/ranker.d.ts +0 -18
  582. package/dist/store/internal/ranker.js +0 -39
  583. package/dist/store/internal/read-existing.d.ts +0 -23
  584. package/dist/store/internal/read-existing.js +0 -41
  585. package/dist/store/internal/score-direction.d.ts +0 -31
  586. package/dist/store/internal/score-direction.js +0 -38
  587. package/dist/store/internal/search-filter.d.ts +0 -3
  588. package/dist/store/internal/search-filter.js +0 -10
  589. package/dist/store/internal/semantic-search.d.ts +0 -34
  590. package/dist/store/internal/semantic-search.js +0 -87
  591. package/dist/store/internal/setup.d.ts +0 -36
  592. package/dist/store/internal/setup.js +0 -40
  593. package/dist/store/internal/text-path.d.ts +0 -17
  594. package/dist/store/internal/validation.d.ts +0 -18
  595. package/dist/store/internal/validation.js +0 -51
  596. package/dist/store/internal/write-verify.d.ts +0 -42
  597. package/dist/store/internal/write-verify.js +0 -71
  598. package/dist/store/store.d.ts +0 -61
  599. package/dist/store/store.js +0 -107
  600. package/dist/store/types.d.ts +0 -50
  601. package/dist/store/types.js +0 -2
  602. package/dist/store/vector-backend.d.ts +0 -43
  603. package/dist/store/vector-backend.js +0 -2
  604. /package/dist/{checkpointer → cjs/checkpointer}/types.js +0 -0
  605. /package/dist/{factory → cjs/factory}/types.js +0 -0
  606. /package/dist/{history → cjs/history}/types.js +0 -0
  607. /package/dist/{shared → cjs/shared}/options.js +0 -0
  608. /package/dist/{shared/dynamodb → cjs/store}/types.js +0 -0
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.releaseOwned = releaseOwned;
4
+ exports.ensureLifecycleFor = ensureLifecycleFor;
5
+ exports.openAdapter = openAdapter;
6
+ const config_js_1 = require("./codec/s3/config.js");
7
+ const offloader_js_1 = require("./codec/s3/offloader.js");
8
+ const concurrency_js_1 = require("./concurrency.js");
9
+ const client_js_1 = require("./dynamodb/client.js");
10
+ const recency_index_js_1 = require("./dynamodb/recency-index.js");
11
+ const retry_js_1 = require("./dynamodb/retry.js");
12
+ const base_error_js_1 = require("./errors/base-error.js");
13
+ const logger_js_1 = require("./logging/logger.js");
14
+ const collaborators_js_1 = require("./validation/collaborators.js");
15
+ const options_js_1 = require("./validation/options.js");
16
+ const ttl_js_1 = require("./validation/ttl.js");
17
+ function releaseOwned(resources) {
18
+ let first;
19
+ for (const resource of resources) {
20
+ try {
21
+ resource?.destroy();
22
+ }
23
+ catch (error) {
24
+ first ??= (0, base_error_js_1.toError)(error);
25
+ }
26
+ }
27
+ if (first !== undefined)
28
+ throw first;
29
+ }
30
+ async function ensureLifecycleFor(core) {
31
+ if (!core.offloader || !core.ttl)
32
+ return;
33
+ await core.offloader.ensureLifecycleRule((0, ttl_js_1.lifecycleExpirationDays)(core.ttl), core.logger);
34
+ }
35
+ function openAdapter(options, adapter, checks = {}) {
36
+ (0, options_js_1.assertBaseAdapterOptions)(options);
37
+ checks.options?.();
38
+ (0, collaborators_js_1.assertBaseCollaborators)(options);
39
+ checks.collaborators?.();
40
+ const logger = (0, logger_js_1.resolveLogger)(options.logger);
41
+ const resolved = (0, client_js_1.resolveDynamoDBClient)(options);
42
+ if (!resolved.ownsClient)
43
+ void (0, client_js_1.warnOnStackedRetries)(resolved.client, logger);
44
+ const offloader = options.s3
45
+ ? new offloader_js_1.S3Offloader((0, config_js_1.offloaderConfigFor)(options.s3, adapter, options.clientConfig), logger)
46
+ : undefined;
47
+ const core = {
48
+ client: resolved.client,
49
+ tableName: options.tableName,
50
+ compression: options.compression,
51
+ offloader,
52
+ ttl: options.ttl,
53
+ logger,
54
+ retry: (0, retry_js_1.resolveRetryPolicy)(options.retry, logger, checks.attemptFloor),
55
+ indexShards: options.indexShards ?? recency_index_js_1.DEFAULT_INDEX_SHARDS,
56
+ readConcurrency: options.readConcurrency ?? concurrency_js_1.DEFAULT_READ_CONCURRENCY,
57
+ indexName: options.indexName,
58
+ };
59
+ let released = false;
60
+ return {
61
+ core,
62
+ ensureLifecycleRule: () => ensureLifecycleFor(core),
63
+ release: () => {
64
+ if (released)
65
+ return;
66
+ released = true;
67
+ releaseOwned([offloader, resolved.ownsClient ? resolved.ddbClient : undefined]);
68
+ },
69
+ };
70
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Hides where the current time comes from, and in which unit each reader
3
+ * takes it.
4
+ *
5
+ * Every timestamp, deadline and expiry this package computes through
6
+ * `nowIso`, `nowMs` or `nowSeconds` reads `Date.now` through here, so a test
7
+ * that freezes it freezes all of them at once, and under a skewed clock they
8
+ * agree with each other rather than disagreeing by a second. Two call sites
9
+ * take their own default instead of this seam — `calculateTtlTimestamp`'s
10
+ * `now` parameter and `createUlidFactory`'s `now` parameter, both defaulting
11
+ * to `Date.now` directly — so freezing this module's clock alone does not
12
+ * freeze them. That the ISO form sorts chronologically and that the TTL unit
13
+ * is floored seconds are settled here; a caller asks for the unit it needs.
14
+ */
15
+ /**
16
+ * The current time as an ISO-8601 string.
17
+ *
18
+ * Accepts: nothing; it reads `Date.now`, which the test setup freezes.
19
+ *
20
+ * Returns: UTC, millisecond precision, `Z`-suffixed — the form whose byte order
21
+ * is its chronological order, which is why it can lead a sort key unparsed.
22
+ *
23
+ * Throws: nothing.
24
+ */
25
+ export declare function nowIso(): string;
26
+ /**
27
+ * The current time as epoch milliseconds.
28
+ *
29
+ * Accepts: nothing; it reads `Date.now`, which the test setup freezes.
30
+ *
31
+ * Returns: the millisecond, unrounded — the unit a whole-operation deadline is
32
+ * measured in, since a retry budget is bounded far below a second's
33
+ * granularity of error.
34
+ *
35
+ * Throws: nothing.
36
+ */
37
+ export declare function nowMs(): number;
38
+ /**
39
+ * The current time as whole epoch seconds, the unit DynamoDB's TTL uses.
40
+ *
41
+ * Accepts: nothing; it reads `Date.now`, which the test setup freezes.
42
+ *
43
+ * Returns: the second, floored — never a fraction, which DynamoDB would reject
44
+ * on the `ttl` attribute.
45
+ *
46
+ * Throws: nothing.
47
+ *
48
+ * Guarantees: every expiry stamp, expiry filter and ttl-anchor comparison in
49
+ * this package reads this one seam, so they agree with each other under a
50
+ * frozen or skewed clock rather than disagreeing by a second.
51
+ */
52
+ export declare function nowSeconds(): number;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nowIso = nowIso;
4
+ exports.nowMs = nowMs;
5
+ exports.nowSeconds = nowSeconds;
6
+ function nowIso() {
7
+ return new Date(Date.now()).toISOString();
8
+ }
9
+ function nowMs() {
10
+ return Date.now();
11
+ }
12
+ function nowSeconds() {
13
+ return Math.floor(Date.now() / 1000);
14
+ }
@@ -0,0 +1,336 @@
1
+ /**
2
+ * Hides how a value becomes a stored payload and back.
3
+ *
4
+ * A value is serialized by the configured serde, gzipped when that pays, and
5
+ * kept inline in its row or offloaded to S3 under a key its row can be traced
6
+ * from, behind a versioned descriptor the row stores. Reading reverses that,
7
+ * and a failure that means the payload can never be read again — a corrupt
8
+ * body, a missing object, a descriptor no reader understands — is told apart
9
+ * here from one a retry might cure.
10
+ */
11
+ import type { SerializerProtocol } from '@langchain/langgraph-checkpoint';
12
+ import { type CompressionConfig } from './compression.js';
13
+ import type { S3Offloader } from './s3/offloader.js';
14
+ /**
15
+ * Largest serialized payload stored inline when no S3 offloader is configured:
16
+ * DynamoDB's 400 KB item cap less 8 KB of headroom for the item's keys,
17
+ * attribute names and descriptor fields. Exceeding it fails before the write
18
+ * with a typed error instead of a raw `ValidationException` after it.
19
+ */
20
+ export declare const MAX_INLINE_PAYLOAD_BYTES: number;
21
+ /** Where an encoded payload lives. */
22
+ export declare enum PayloadLocation {
23
+ INLINE = "INLINE",
24
+ S3 = "S3"
25
+ }
26
+ /**
27
+ * Version of the persisted descriptor shape. Absent on rows written before it
28
+ * existed, which read as version 1; a higher value marks a row written by a
29
+ * newer library and is refused rather than misread.
30
+ */
31
+ export declare const DESCRIPTOR_SCHEMA_VERSION = 1;
32
+ /** Fields every descriptor carries, whatever its location. */
33
+ interface DescriptorBase {
34
+ schemaVersion?: number;
35
+ serdeType: string;
36
+ compressed: boolean;
37
+ /**
38
+ * The id of the write that produced this descriptor — the `objectId` its
39
+ * encode was given, and the identity a delete pins on to tell the row it
40
+ * observed from one another write replaced since. Optional because a row
41
+ * written before the field existed carries none, and a row observed without
42
+ * one is deleted unconditionally rather than pinned on nothing.
43
+ */
44
+ writeId?: string;
45
+ }
46
+ /** A payload stored inline as bytes in the DynamoDB item. */
47
+ interface InlinePayloadDescriptor extends DescriptorBase {
48
+ location: PayloadLocation.INLINE;
49
+ bytes: Uint8Array;
50
+ }
51
+ /** A payload offloaded to S3, referenced by key. */
52
+ interface S3PayloadDescriptor extends DescriptorBase {
53
+ location: PayloadLocation.S3;
54
+ s3Key: string;
55
+ }
56
+ /** The result of encoding a payload. */
57
+ export type PayloadDescriptor = InlinePayloadDescriptor | S3PayloadDescriptor;
58
+ /** Collaborators for the codec. */
59
+ export interface CodecDeps {
60
+ serde: SerializerProtocol;
61
+ compression?: CompressionConfig;
62
+ offloader?: S3Offloader;
63
+ /**
64
+ * The caller's cancellation, carried into the S3 upload or download a
65
+ * payload costs. It belongs here rather than on a parameter of its own for
66
+ * the same reason `RetryOptions.signal` does: the deps object is built per
67
+ * call at every use site, so "these options carry a signal" is already how
68
+ * this package decides what a cancel may interrupt — and a path that must
69
+ * not be interrupted keeps building its deps without one.
70
+ */
71
+ signal?: AbortSignal;
72
+ }
73
+ /**
74
+ * The codec collaborators an adapter context carries, with a call's signal.
75
+ *
76
+ * Accepts: `source` — the adapter's serde, compression and offloader.
77
+ * `signal` — the call's cancellation, carried into the S3 request a payload
78
+ * needs.
79
+ *
80
+ * Returns: the collaborators the codec takes.
81
+ *
82
+ * Throws: nothing.
83
+ */
84
+ export declare function codecDepsOf(source: Pick<CodecDeps, 'serde' | 'compression' | 'offloader'>, signal?: AbortSignal): CodecDeps;
85
+ /**
86
+ * The payload bytes a descriptor stands for: downloaded when offloaded, then
87
+ * decompressed. Infrastructure only, no deserialization — a caller that needs
88
+ * to tell a transport or permission failure from bad data does this step and
89
+ * {@link loadPayloadValue} separately (see
90
+ * `src/history/actions/get-messages.ts`).
91
+ *
92
+ * Accepts: `descriptor` — as written by {@link encodePayload}; a
93
+ * `schemaVersion` above this release's, or a `location` it does not know, is
94
+ * refused rather than guessed at. `deps.offloader` — required only for an `S3`
95
+ * descriptor. `scope` — the row's own leading key parts (`[threadId]`,
96
+ * `[...namespace, key]`, `[sessionId]`); `[]` degrades the check to the
97
+ * configured prefix. `deps.signal` — cancels the download of an offloaded
98
+ * payload, request and all; an inline one reads no bytes and ignores it.
99
+ *
100
+ * Returns: the decoded bytes.
101
+ *
102
+ * Throws: `VALIDATION` naming `descriptor` for a shape no reader could
103
+ * make sense of and `s3` for an offloaded row with no offloader configured;
104
+ * `FORMAT_UNSUPPORTED` naming `schemaVersion` for a payload a newer release
105
+ * wrote, which a newer reader reads fine; `VALIDATION` naming `s3Key` when
106
+ * the key lies outside `scope`; `ABORTED` when the signal fires during the
107
+ * download; `S3_OFFLOAD_FAILED` from the download; `COMPRESSION_LIMIT` or
108
+ * `PAYLOAD_CORRUPT` from decompression.
109
+ *
110
+ * Guarantees: an offloaded object is downloaded only when its key lies under
111
+ * the path `scope` produces, so a row can never point this adapter at an
112
+ * object it does not own.
113
+ */
114
+ export declare function readPayloadBytes(descriptor: PayloadDescriptor, deps: CodecDeps, scope: readonly string[]): Promise<Uint8Array>;
115
+ /**
116
+ * The value stored bytes hold, with a serde that refuses them branded rather
117
+ * than left bare.
118
+ *
119
+ * Accepts: `serdeType` — the row's own, handed to the serde unchanged, and the
120
+ * declared form {@link bytesHoldDeclaredForm} checks the bytes against.
121
+ * `bytes` — what {@link readPayloadBytes} returned. `deps.serde` — the
122
+ * serializer the adapter was configured with, which may be the caller's.
123
+ *
124
+ * Returns: whatever the serde reconstructs, typed as the caller declares.
125
+ *
126
+ * Throws: the serde's own error whenever it is already one of this library's,
127
+ * so `PAYLOAD_CORRUPT` from `JSON_SERDE` stays exactly what it was — as does
128
+ * its refusal of a `serdeType` it has no grammar for, which it brands the same
129
+ * `VALIDATION` naming `serde` that the classifier below reaches for on the
130
+ * identical row under any other serde; `PAYLOAD_CORRUPT` when the bytes are no
131
+ * longer the form the row declares, on whatever serde raised it; anything else
132
+ * as a `VALIDATION` error naming `serde`, carrying the refusal as `cause`.
133
+ *
134
+ * Guarantees: no error leaves a decode unbranded, and which serde the adapter
135
+ * was configured with never decides *which* brand. A rotted row read through
136
+ * `JSON_SERDE` reported `PAYLOAD_CORRUPT` while the identical row read through
137
+ * the checkpointer's own default reported the refusal below, so a caller
138
+ * quarantining on `PAYLOAD_CORRUPT` never matched and `history.getMessages`
139
+ * lost a whole conversation where it promises one dropped message. A row
140
+ * declaring a form neither serde writes ran the same divergence the other way,
141
+ * and reached further: `JSON_SERDE` ignored the declared type, so its own
142
+ * `JSON.parse` failure arrived here already branded and the classifier was
143
+ * never consulted. The serializer honours the declared form now, which is what
144
+ * keeps this the one place the distinction is drawn.
145
+ *
146
+ * The refusal is what remains once the bytes are known to be intact: the
147
+ * serializer would not reconstruct the value they name. A stored `lc`
148
+ * constructor record naming a class outside LangChain's allow-list is refused
149
+ * by `load()` with a plain `Error`, which a public boundary could only rebrand
150
+ * as an `UNEXPECTED_ERROR` — reporting a row's own content to the caller as an AWS
151
+ * failure. It is deliberately *not* classified as payload loss, for
152
+ * `assertKeyInScope`'s reason rather than `PAYLOAD_CORRUPT`'s: the bytes are
153
+ * undamaged and parse, and which classes revive is a property of **this**
154
+ * reader — the serde it was given, and what that serde's allow-list carries —
155
+ * not of the payload. A refusal that says only "this reader may not
156
+ * reconstruct that" is a misconfigured serde or a planted row, both of which an
157
+ * operator must see; writing it off would let `history.getMessages` answer with
158
+ * a silently shorter conversation for the one row shape most worth noticing.
159
+ */
160
+ export declare function loadPayloadValue<T>(serdeType: string, bytes: Uint8Array, deps: CodecDeps): Promise<T>;
161
+ /**
162
+ * The value a descriptor stands for: {@link readPayloadBytes} followed by
163
+ * {@link loadPayloadValue}.
164
+ *
165
+ * Accepts: as {@link readPayloadBytes}; `scope` has the same meaning.
166
+ *
167
+ * Returns: whatever the serde reconstructs, typed as the caller declares.
168
+ *
169
+ * Throws: everything {@link readPayloadBytes} throws, plus everything
170
+ * {@link loadPayloadValue} throws for bytes the serde will not accept —
171
+ * `PAYLOAD_CORRUPT` for bytes that are no longer the form the row declares,
172
+ * whichever serde is configured, `VALIDATION` naming `serde` for a refusal
173
+ * of bytes that are still intact.
174
+ *
175
+ * Guarantees: the bytes are read first, in a statement of their own. Passing
176
+ * `descriptor.serdeType` and the awaited read as two arguments to one call read
177
+ * the property *before* the guard ran, since arguments evaluate left to right —
178
+ * so a row whose payload is `null` raised a bare `TypeError` carrying no code,
179
+ * which a public boundary can only rebrand as an `UNEXPECTED_ERROR`. Every read
180
+ * path now answers such a row with the `VALIDATION` error naming `descriptor` that
181
+ * the history adapter, which reads its bytes separately, already produced.
182
+ */
183
+ export declare function decodePayload<T>(descriptor: PayloadDescriptor, deps: CodecDeps, scope: readonly string[]): Promise<T>;
184
+ /** The DynamoDB key of the row that will hold the descriptor being built. */
185
+ interface RowKey {
186
+ pk: string;
187
+ sk: string;
188
+ }
189
+ /** Options controlling where an offloaded payload's S3 key is built from. */
190
+ export interface EncodeOptions {
191
+ /**
192
+ * The identity of the row this payload belongs to, as the path segments
193
+ * above {@link EncodeOptions.objectId}. A reader refuses an object that lies
194
+ * outside the path its row's leading identifiers produce.
195
+ */
196
+ keyParts: readonly string[];
197
+ /**
198
+ * The id of the write this payload belongs to, and the key's last segment.
199
+ * The caller draws a fresh UUID or ULID for each write — each store put, each
200
+ * checkpoint put, each `putWrites` call, each history message — and passes the
201
+ * same one for every payload of that write, whose `keyParts` already differ.
202
+ * No other write uses that id, so no row another write commits names the
203
+ * object.
204
+ */
205
+ objectId: string;
206
+ /**
207
+ * The row's DynamoDB key, stored on the object as the backlink AWS
208
+ * recommends for exactly this layout: "Store the primary key value of the
209
+ * item as Amazon S3 metadata of the object" (*Best practices for storing
210
+ * large items and attributes in DynamoDB*). Nothing in this package reads it
211
+ * back; it exists so an out-of-band sweeper can ask DynamoDB whether an
212
+ * object's parent row still exists without parsing object keys.
213
+ */
214
+ row: RowKey;
215
+ }
216
+ /**
217
+ * The descriptor recording how to read `value` back: serialized, compressed if
218
+ * configured, and offloaded to S3 if large enough.
219
+ *
220
+ * Accepts: `value` — anything the serde can represent as at least one byte;
221
+ * what it cannot represent is the serde's own error, and what it represents as
222
+ * nothing is refused here (see {@link assertSerialisedToBytes}), whichever
223
+ * serde is configured. `deps.compression` — absent or `enabled: false` stores the
224
+ * serialized bytes as they are. `deps.offloader` — absent stores every payload
225
+ * inline. `deps.signal` — cancels the upload of an offloaded payload; an
226
+ * inline one is never sent anywhere and ignores it. `options` — the row's
227
+ * identity, the write's object id and the row's DynamoDB key (see
228
+ * {@link EncodeOptions}).
229
+ *
230
+ * Returns: an `S3` descriptor when an offloader is configured and
231
+ * `shouldOffload` accepts the compressed size, otherwise an `INLINE`
232
+ * descriptor carrying the bytes. Both record `serdeType` and `compressed`, so
233
+ * neither is ever inferred from the bytes on read.
234
+ *
235
+ * Throws: whatever `serde.dumpsTyped` throws; `ABORTED` when the signal
236
+ * fires during the upload; `S3_OFFLOAD_FAILED` from the upload; and two
237
+ * distinguishable `VALIDATION` errors. One names `payload`, raised either
238
+ * way a payload can turn out unstorable: with **no** offloader, the bytes
239
+ * exceed `MAX_INLINE_PAYLOAD_BYTES`; with one, `s3.thresholdBytes` is itself
240
+ * capped at that limit (`src/shared/validation/options.ts`, `assertS3`), so
241
+ * bytes too large to store inline are always at or above the threshold and
242
+ * offload instead — where they are refused if they exceed
243
+ * `s3.maxDownloadBytes`, before the upload ({@link S3Offloader.upload}). The
244
+ * other names `value` — it serialises to nothing (see
245
+ * {@link assertSerialisedToBytes}) — and is raised for an offloaded payload
246
+ * and an inline one alike, before either is stored.
247
+ */
248
+ export declare function encodePayload<T>(value: T, deps: CodecDeps, options: EncodeOptions): Promise<PayloadDescriptor>;
249
+ /**
250
+ * The part of a descriptor cleanup needs: where the payload lives and, for S3,
251
+ * its key. A full `PayloadDescriptor` satisfies it, and so does the projection
252
+ * a pre-write read returns without the inline bytes.
253
+ */
254
+ export interface DescriptorRef {
255
+ location: PayloadLocation;
256
+ s3Key?: string;
257
+ }
258
+ /**
259
+ * The S3 keys of whichever descriptors are offloaded.
260
+ *
261
+ * Accepts: `descriptors` — any mix of inline and offloaded, including a
262
+ * projection that carries only `location` and `s3Key`, and including none. An
263
+ * offloaded descriptor missing its key is skipped rather than deleted blindly,
264
+ * and so is an entry that is not a descriptor at all: several callers read
265
+ * these straight off a row, and a row this library did not write can hold
266
+ * `null` where the descriptor belongs, or omit the attribute entirely. Widening
267
+ * the parameter rather than making each caller filter is what lets the `Throws`
268
+ * clause below hold for every caller instead of only the careful ones.
269
+ *
270
+ * Returns: the keys, in the order given; an inline payload contributes none,
271
+ * and neither does an absent one.
272
+ *
273
+ * Throws: nothing — this feeds cleanup, which must not fail the operation it
274
+ * follows.
275
+ */
276
+ export declare function collectS3Keys(descriptors: readonly (DescriptorRef | null | undefined)[]): string[];
277
+ /**
278
+ * True when an offloaded object no longer exists.
279
+ *
280
+ * Accepts: `error` — any error; only `S3_OFFLOAD_FAILED` carrying a `NoSuchKey`
281
+ * cause matches. An error with no `cause`, or one whose cause names another
282
+ * S3 failure, is not a missing object. Anything else a `throw` can produce —
283
+ * `null`, `undefined`, a primitive — carries no code and is not one either.
284
+ *
285
+ * Returns: whether the object is gone — a lifecycle sweep removed it, or a
286
+ * competing overwrite deleted it between a row read and the download.
287
+ *
288
+ * Throws: **nothing**, for any value. A caught value that cannot carry a
289
+ * property answers `false`, as `isDynamoDBLangGraphError` does, rather than
290
+ * raising a `TypeError` inside the `catch` that is reporting the download
291
+ * failure this test exists to classify.
292
+ */
293
+ export declare function isMissingObjectError(error: Error): boolean;
294
+ /**
295
+ * True when S3 refused to answer a download rather than answering it.
296
+ *
297
+ * Accepts: `error` — any error; only `S3_OFFLOAD_FAILED` whose cause the
298
+ * classifier codes `ACCESS_DENIED` matches.
299
+ *
300
+ * Returns: whether S3 declined to say anything about the object. Without
301
+ * `s3:ListBucket` on the bucket, S3 answers a GET of a key that does not exist
302
+ * with 403 rather than 404, so this is what a released object looks like to
303
+ * such a role — and equally what a missing `s3:GetObject` looks like. A caller
304
+ * settles which by other means before treating it as either.
305
+ *
306
+ * Throws: **nothing**, for any value.
307
+ */
308
+ export declare function isRefusedObjectError(error: Error): boolean;
309
+ /**
310
+ * True when a payload can never be read again, as opposed to a failure that may
311
+ * succeed on retry or after a configuration fix (throttling, network,
312
+ * permissions).
313
+ *
314
+ * Accepts: `error` — any error. Permanent are: its object is gone
315
+ * ({@link isMissingObjectError}), its bytes are not the form the row declares
316
+ * (`PAYLOAD_CORRUPT`), or the row's own descriptor is unreadable
317
+ * ({@link isUnreadableDescriptor}). Everything else is false, including an
318
+ * error that carries no code at all, and including four refusals that look
319
+ * like loss and are not. The `s3Key` scope refusal: a row pointing outside
320
+ * its own path is a configuration or tenancy fault to report, not a payload
321
+ * to write off. The `serde` refusal, on the same reasoning (see
322
+ * `loadPayloadValue`). `FORMAT_UNSUPPORTED`, on a row or on a payload: newer
323
+ * is not lost. And `COMPRESSION_LIMIT`: a payload larger than this reader
324
+ * inflates is intact, and a reader with a larger cap reads it. From this
325
+ * release on, this package never compresses a payload past its writer's own
326
+ * cap; a payload an earlier release compressed — which did not check it —
327
+ * can still trip a smaller one here.
328
+ *
329
+ * Returns: whether a caller should report rather than retry.
330
+ *
331
+ * Throws: **nothing**, for any value a `throw` can produce. One that cannot
332
+ * carry a code is not permanent loss, which is the same answer an uncoded
333
+ * `Error` gets.
334
+ */
335
+ export declare function isPermanentPayloadLoss(error: Error): boolean;
336
+ export {};
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DESCRIPTOR_SCHEMA_VERSION = exports.PayloadLocation = exports.MAX_INLINE_PAYLOAD_BYTES = void 0;
4
+ exports.codecDepsOf = codecDepsOf;
5
+ exports.readPayloadBytes = readPayloadBytes;
6
+ exports.loadPayloadValue = loadPayloadValue;
7
+ exports.decodePayload = decodePayload;
8
+ exports.encodePayload = encodePayload;
9
+ exports.collectS3Keys = collectS3Keys;
10
+ exports.isMissingObjectError = isMissingObjectError;
11
+ exports.isRefusedObjectError = isRefusedObjectError;
12
+ exports.isPermanentPayloadLoss = isPermanentPayloadLoss;
13
+ const base_error_js_1 = require("../errors/base-error.js");
14
+ const classify_js_1 = require("../errors/classify.js");
15
+ const error_code_js_1 = require("../errors/error-code.js");
16
+ const errors_js_1 = require("../errors/errors.js");
17
+ const truncate_js_1 = require("../logging/truncate.js");
18
+ const compression_js_1 = require("./compression.js");
19
+ const json_serde_js_1 = require("./json-serde.js");
20
+ exports.MAX_INLINE_PAYLOAD_BYTES = 400 * 1024 - 8 * 1024;
21
+ var PayloadLocation;
22
+ (function (PayloadLocation) {
23
+ PayloadLocation["INLINE"] = "INLINE";
24
+ PayloadLocation["S3"] = "S3";
25
+ })(PayloadLocation || (exports.PayloadLocation = PayloadLocation = {}));
26
+ exports.DESCRIPTOR_SCHEMA_VERSION = 1;
27
+ function codecDepsOf(source, signal) {
28
+ return {
29
+ serde: source.serde,
30
+ compression: source.compression,
31
+ offloader: source.offloader,
32
+ signal,
33
+ };
34
+ }
35
+ function configuredOffloader(deps) {
36
+ if (!deps.offloader) {
37
+ throw (0, errors_js_1.validationError)("this row's payload is offloaded to S3 but the adapter has no `s3` configuration; " +
38
+ 'configure the bucket the writer used', 's3');
39
+ }
40
+ return deps.offloader;
41
+ }
42
+ function assertReadableDescriptor(descriptor) {
43
+ if (descriptor === null || typeof descriptor !== 'object') {
44
+ throw (0, errors_js_1.validationError)(`payload descriptor is ${descriptor === null ? 'null' : typeof descriptor}, not a descriptor ` +
45
+ 'this library wrote', 'descriptor');
46
+ }
47
+ const version = descriptor.schemaVersion ?? exports.DESCRIPTOR_SCHEMA_VERSION;
48
+ if (version > exports.DESCRIPTOR_SCHEMA_VERSION) {
49
+ const written = (0, truncate_js_1.truncateForLog)(String(version));
50
+ throw new base_error_js_1.DynamoDBLangGraphError(`this payload was written in descriptor schema version ${written}; this version of the ` +
51
+ `library reads up to ${exports.DESCRIPTOR_SCHEMA_VERSION} — upgrade to read it`, error_code_js_1.ErrorCode.FORMAT_UNSUPPORTED, { field: 'schemaVersion' });
52
+ }
53
+ const locations = Object.values(PayloadLocation);
54
+ if (!locations.includes(descriptor.location)) {
55
+ const location = (0, truncate_js_1.truncateForLog)(String(JSON.stringify(descriptor.location)));
56
+ throw (0, errors_js_1.validationError)(`payload descriptor has an unknown location ${location}`, 'descriptor');
57
+ }
58
+ if (descriptor.location === PayloadLocation.S3 && typeof descriptor.s3Key !== 'string') {
59
+ throw (0, errors_js_1.validationError)('payload descriptor is offloaded but names no object key', 'descriptor');
60
+ }
61
+ if (descriptor.location === PayloadLocation.INLINE && !ArrayBuffer.isView(descriptor.bytes)) {
62
+ throw (0, errors_js_1.validationError)('payload descriptor is inline but carries no bytes', 'descriptor');
63
+ }
64
+ }
65
+ async function readPayloadBytes(descriptor, deps, scope) {
66
+ assertReadableDescriptor(descriptor);
67
+ let raw;
68
+ if (descriptor.location === PayloadLocation.S3) {
69
+ const offloader = configuredOffloader(deps);
70
+ offloader.assertOwnedKey(descriptor.s3Key, scope);
71
+ raw = await offloader.download(descriptor.s3Key, deps.signal);
72
+ }
73
+ else {
74
+ raw = descriptor.bytes;
75
+ }
76
+ return (0, compression_js_1.decompress)(raw, descriptor.compressed, deps.compression?.maxDecompressedBytes);
77
+ }
78
+ async function loadPayloadValue(serdeType, bytes, deps) {
79
+ try {
80
+ return (await deps.serde.loadsTyped(serdeType, bytes));
81
+ }
82
+ catch (error) {
83
+ const refusal = (0, base_error_js_1.toError)(error);
84
+ if ((0, base_error_js_1.isDynamoDBLangGraphError)(refusal))
85
+ throw refusal;
86
+ if (!(0, json_serde_js_1.bytesHoldDeclaredForm)(serdeType, bytes)) {
87
+ throw new base_error_js_1.DynamoDBLangGraphError('the stored payload is no longer the form this row declares, so no serde could decode ' +
88
+ 'it; the refusal that proved it is attached as `cause`', error_code_js_1.ErrorCode.PAYLOAD_CORRUPT, {}, refusal);
89
+ }
90
+ throw (0, errors_js_1.validationError)('the configured serde refused the payload stored in this row: the bytes parse, but the ' +
91
+ 'serializer would not reconstruct the value they name — a stored `lc` constructor record ' +
92
+ 'naming a class outside its allow-list reads this way, as does a serde that did not ' +
93
+ 'write these bytes. The refusal itself is attached as `cause`', 'serde', refusal);
94
+ }
95
+ }
96
+ async function decodePayload(descriptor, deps, scope) {
97
+ const bytes = await readPayloadBytes(descriptor, deps, scope);
98
+ return loadPayloadValue(descriptor.serdeType, bytes, deps);
99
+ }
100
+ function assertInlinePayloadFits(bytes, deps) {
101
+ if (bytes.length <= exports.MAX_INLINE_PAYLOAD_BYTES)
102
+ return;
103
+ const hint = deps.compression?.enabled
104
+ ? ''
105
+ : ', or enable compression if the data compresses well';
106
+ throw (0, errors_js_1.validationError)(`payload of ${bytes.length} bytes exceeds the ${exports.MAX_INLINE_PAYLOAD_BYTES}-byte inline limit ` +
107
+ `(DynamoDB items are capped at 400 KB); configure s3 offloading${hint}`, 'payload');
108
+ }
109
+ function assertSerialisedToBytes(raw) {
110
+ if (raw.length > 0)
111
+ return;
112
+ throw (0, errors_js_1.validationError)('value serialises to zero bytes, which no reader can parse back: a function, a symbol ' +
113
+ 'or any value the configured serde drops encodes to nothing. Store a value the serde ' +
114
+ 'can represent, or configure one that refuses it.', 'value');
115
+ }
116
+ async function encodePayload(value, deps, options) {
117
+ const [serdeType, raw] = await deps.serde.dumpsTyped(value);
118
+ assertSerialisedToBytes(raw);
119
+ const { bytes, compressed } = deps.compression
120
+ ? await (0, compression_js_1.compress)(raw, deps.compression)
121
+ : { bytes: raw, compressed: false };
122
+ const base = {
123
+ schemaVersion: exports.DESCRIPTOR_SCHEMA_VERSION,
124
+ serdeType,
125
+ compressed,
126
+ writeId: options.objectId,
127
+ };
128
+ if (deps.offloader && deps.offloader.shouldOffload(bytes)) {
129
+ const s3Key = deps.offloader.buildKey(options.keyParts, options.objectId);
130
+ await deps.offloader.upload(s3Key, bytes, options.row, deps.signal);
131
+ return { ...base, location: PayloadLocation.S3, s3Key };
132
+ }
133
+ if (!deps.offloader)
134
+ assertInlinePayloadFits(bytes, deps);
135
+ return { ...base, location: PayloadLocation.INLINE, bytes };
136
+ }
137
+ function collectS3Keys(descriptors) {
138
+ const keys = [];
139
+ for (const descriptor of descriptors) {
140
+ if (descriptor?.location === PayloadLocation.S3 && descriptor.s3Key !== undefined) {
141
+ keys.push(descriptor.s3Key);
142
+ }
143
+ }
144
+ return keys;
145
+ }
146
+ function isMissingObjectError(error) {
147
+ return ((0, base_error_js_1.hasErrorCode)(error, error_code_js_1.ErrorCode.S3_OFFLOAD_FAILED) &&
148
+ error.cause !== undefined &&
149
+ (0, classify_js_1.isMissingObject)(error.cause));
150
+ }
151
+ function isRefusedObjectError(error) {
152
+ return ((0, base_error_js_1.hasErrorCode)(error, error_code_js_1.ErrorCode.S3_OFFLOAD_FAILED) &&
153
+ (0, classify_js_1.classifyAwsError)(error.cause) === error_code_js_1.ErrorCode.ACCESS_DENIED);
154
+ }
155
+ function isUnreadableDescriptor(error) {
156
+ return (0, base_error_js_1.hasErrorCode)(error, error_code_js_1.ErrorCode.VALIDATION) && error.context.field === 'descriptor';
157
+ }
158
+ function isPermanentPayloadLoss(error) {
159
+ return ((0, base_error_js_1.hasErrorCode)(error, error_code_js_1.ErrorCode.PAYLOAD_CORRUPT) ||
160
+ isMissingObjectError(error) ||
161
+ isUnreadableDescriptor(error));
162
+ }