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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/README.md +390 -193
  2. package/dist/{backfill → cjs/backfill}/backfill.d.ts +15 -12
  3. package/dist/cjs/backfill/backfill.js +177 -0
  4. package/dist/{checkpointer → cjs/checkpointer}/actions/delete-thread.d.ts +1 -1
  5. package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
  6. package/dist/{checkpointer → cjs/checkpointer}/actions/get-tuple.d.ts +4 -3
  7. package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
  8. package/dist/{checkpointer → cjs/checkpointer}/actions/list.d.ts +7 -4
  9. package/dist/cjs/checkpointer/actions/list.js +70 -0
  10. package/dist/{checkpointer → cjs/checkpointer}/actions/put-writes.d.ts +8 -6
  11. package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
  12. package/dist/{checkpointer → cjs/checkpointer}/actions/put.d.ts +21 -15
  13. package/dist/cjs/checkpointer/actions/put.js +79 -0
  14. package/dist/{checkpointer → cjs/checkpointer}/internal/delta-history.d.ts +38 -26
  15. package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
  16. package/dist/{checkpointer → cjs/checkpointer}/internal/listing.d.ts +4 -4
  17. package/dist/cjs/checkpointer/internal/listing.js +104 -0
  18. package/dist/{checkpointer → cjs/checkpointer}/internal/parse.d.ts +51 -15
  19. package/dist/cjs/checkpointer/internal/parse.js +184 -0
  20. package/dist/{checkpointer → cjs/checkpointer}/internal/pending-writes.d.ts +64 -25
  21. package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
  22. package/dist/{checkpointer → cjs/checkpointer}/internal/read.d.ts +15 -10
  23. package/dist/cjs/checkpointer/internal/read.js +132 -0
  24. package/dist/{checkpointer → cjs/checkpointer}/internal/rows.d.ts +94 -21
  25. package/dist/cjs/checkpointer/internal/rows.js +356 -0
  26. package/dist/{checkpointer → cjs/checkpointer}/internal/setup.d.ts +13 -20
  27. package/dist/cjs/checkpointer/internal/setup.js +25 -0
  28. package/dist/{checkpointer → cjs/checkpointer}/saver.d.ts +72 -36
  29. package/dist/cjs/checkpointer/saver.js +56 -0
  30. package/dist/{checkpointer → cjs/checkpointer}/types.d.ts +1 -1
  31. package/dist/cjs/checkpointer/types.js +2 -0
  32. package/dist/{factory → cjs/factory}/factory.d.ts +25 -20
  33. package/dist/cjs/factory/factory.js +137 -0
  34. package/dist/{factory → cjs/factory}/types.d.ts +12 -12
  35. package/dist/cjs/factory/types.js +2 -0
  36. package/dist/{history → cjs/history}/actions/add-messages.d.ts +18 -10
  37. package/dist/cjs/history/actions/add-messages.js +17 -0
  38. package/dist/{history → cjs/history}/actions/clear.d.ts +1 -1
  39. package/dist/cjs/history/actions/clear.js +29 -0
  40. package/dist/{history → cjs/history}/actions/get-messages.d.ts +11 -9
  41. package/dist/cjs/history/actions/get-messages.js +58 -0
  42. package/dist/{history → cjs/history}/actions/list-sessions.d.ts +3 -3
  43. package/dist/cjs/history/actions/list-sessions.js +67 -0
  44. package/dist/{history → cjs/history}/actions/reconcile-count.d.ts +13 -9
  45. package/dist/cjs/history/actions/reconcile-count.js +8 -0
  46. package/dist/{history → cjs/history}/chat-message-history.d.ts +62 -30
  47. package/dist/cjs/history/chat-message-history.js +61 -0
  48. package/dist/{history → cjs/history}/internal/append.d.ts +64 -32
  49. package/dist/cjs/history/internal/append.js +267 -0
  50. package/dist/{history → cjs/history}/internal/message-read.d.ts +3 -3
  51. package/dist/cjs/history/internal/message-read.js +93 -0
  52. package/dist/{history → cjs/history}/internal/parse.d.ts +2 -2
  53. package/dist/cjs/history/internal/parse.js +113 -0
  54. package/dist/{history → cjs/history}/internal/rows.d.ts +11 -10
  55. package/dist/cjs/history/internal/rows.js +96 -0
  56. package/dist/{history → cjs/history}/internal/session.d.ts +41 -22
  57. package/dist/cjs/history/internal/session.js +296 -0
  58. package/dist/{history → cjs/history}/internal/setup.d.ts +2 -2
  59. package/dist/cjs/history/internal/setup.js +60 -0
  60. package/dist/{history → cjs/history}/session-adapter.d.ts +0 -6
  61. package/dist/cjs/history/session-adapter.js +38 -0
  62. package/dist/{history → cjs/history}/types.d.ts +18 -15
  63. package/dist/cjs/history/types.js +2 -0
  64. package/dist/{index.d.ts → cjs/index.d.ts} +27 -27
  65. package/dist/cjs/index.js +25 -0
  66. package/dist/cjs/package.json +1 -0
  67. package/dist/{shared → cjs/shared}/adapter.d.ts +27 -16
  68. package/dist/cjs/shared/adapter.js +70 -0
  69. package/dist/cjs/shared/clock.js +14 -0
  70. package/dist/{shared → cjs/shared}/codec/codec.d.ts +37 -20
  71. package/dist/cjs/shared/codec/codec.js +162 -0
  72. package/dist/{shared → cjs/shared}/codec/compression.d.ts +9 -4
  73. package/dist/cjs/shared/codec/compression.js +45 -0
  74. package/dist/cjs/shared/codec/json-serde.js +58 -0
  75. package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +2 -1
  76. package/dist/cjs/shared/codec/s3/client-types.js +6 -0
  77. package/dist/{shared → cjs/shared}/codec/s3/client.d.ts +25 -7
  78. package/dist/cjs/shared/codec/s3/client.js +78 -0
  79. package/dist/{shared → cjs/shared}/codec/s3/config.d.ts +12 -7
  80. package/dist/cjs/shared/codec/s3/config.js +92 -0
  81. package/dist/{shared → cjs/shared}/codec/s3/lifecycle.d.ts +71 -17
  82. package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
  83. package/dist/{shared → cjs/shared}/codec/s3/offloader.d.ts +42 -29
  84. package/dist/cjs/shared/codec/s3/offloader.js +289 -0
  85. package/dist/cjs/shared/concurrency.js +31 -0
  86. package/dist/{shared → cjs/shared}/dynamodb/abort.d.ts +2 -2
  87. package/dist/cjs/shared/dynamodb/abort.js +16 -0
  88. package/dist/{shared → cjs/shared}/dynamodb/batch-write.d.ts +2 -2
  89. package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
  90. package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
  91. package/dist/{shared → cjs/shared}/dynamodb/client.d.ts +24 -22
  92. package/dist/cjs/shared/dynamodb/client.js +40 -0
  93. package/dist/{shared → cjs/shared}/dynamodb/idempotent-write.d.ts +64 -19
  94. package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
  95. package/dist/{shared → cjs/shared}/dynamodb/paginate.d.ts +2 -2
  96. package/dist/cjs/shared/dynamodb/paginate.js +90 -0
  97. package/dist/{shared → cjs/shared}/dynamodb/partition-delete.d.ts +6 -6
  98. package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
  99. package/dist/{shared → cjs/shared}/dynamodb/recency-index.d.ts +27 -15
  100. package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
  101. package/dist/{shared → cjs/shared}/dynamodb/retry.d.ts +37 -6
  102. package/dist/cjs/shared/dynamodb/retry.js +193 -0
  103. package/dist/cjs/shared/dynamodb/row-size.d.ts +33 -0
  104. package/dist/cjs/shared/dynamodb/row-size.js +30 -0
  105. package/dist/{shared → cjs/shared}/dynamodb/table-schema.d.ts +27 -18
  106. package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
  107. package/dist/{shared → cjs/shared}/errors/base-error.d.ts +42 -7
  108. package/dist/cjs/shared/errors/base-error.js +73 -0
  109. package/dist/{shared → cjs/shared}/errors/boundary.d.ts +29 -14
  110. package/dist/cjs/shared/errors/boundary.js +61 -0
  111. package/dist/cjs/shared/errors/classify.d.ts +206 -0
  112. package/dist/cjs/shared/errors/classify.js +232 -0
  113. package/dist/{shared → cjs/shared}/errors/error-code.d.ts +17 -10
  114. package/dist/cjs/shared/errors/error-code.js +27 -0
  115. package/dist/{shared → cjs/shared}/errors/errors.d.ts +75 -9
  116. package/dist/cjs/shared/errors/errors.js +123 -0
  117. package/dist/cjs/shared/logging/logger.js +30 -0
  118. package/dist/{shared → cjs/shared}/logging/redaction.d.ts +8 -4
  119. package/dist/cjs/shared/logging/redaction.js +145 -0
  120. package/dist/{shared → cjs/shared}/logging/secret-patterns.d.ts +30 -7
  121. package/dist/cjs/shared/logging/secret-patterns.js +93 -0
  122. package/dist/cjs/shared/logging/truncate.js +31 -0
  123. package/dist/{shared → cjs/shared}/options.d.ts +27 -11
  124. package/dist/cjs/shared/options.js +2 -0
  125. package/dist/cjs/shared/ulid.js +83 -0
  126. package/dist/{shared → cjs/shared}/validation/collaborators.d.ts +21 -2
  127. package/dist/cjs/shared/validation/collaborators.js +79 -0
  128. package/dist/{shared → cjs/shared}/validation/option-shape.d.ts +7 -5
  129. package/dist/cjs/shared/validation/option-shape.js +31 -0
  130. package/dist/{shared → cjs/shared}/validation/options.d.ts +4 -4
  131. package/dist/cjs/shared/validation/options.js +166 -0
  132. package/dist/cjs/shared/validation/primitives.js +114 -0
  133. package/dist/{shared → cjs/shared}/validation/ttl.d.ts +26 -9
  134. package/dist/cjs/shared/validation/ttl.js +52 -0
  135. package/dist/{store → cjs/store}/actions/list-namespaces.d.ts +5 -5
  136. package/dist/cjs/store/actions/list-namespaces.js +92 -0
  137. package/dist/{store → cjs/store}/actions/put.d.ts +11 -4
  138. package/dist/cjs/store/actions/put.js +49 -0
  139. package/dist/{store → cjs/store}/actions/reconcile-vector-index.d.ts +5 -5
  140. package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
  141. package/dist/{store → cjs/store}/actions/search.d.ts +2 -2
  142. package/dist/cjs/store/actions/search.js +26 -0
  143. package/dist/cjs/store/internal/batch-plan.d.ts +56 -0
  144. package/dist/cjs/store/internal/batch-plan.js +32 -0
  145. package/dist/{store → cjs/store}/internal/filter.d.ts +3 -3
  146. package/dist/cjs/store/internal/filter.js +64 -0
  147. package/dist/cjs/store/internal/get-item.d.ts +77 -0
  148. package/dist/cjs/store/internal/get-item.js +58 -0
  149. package/dist/{store → cjs/store}/internal/item-write.d.ts +72 -32
  150. package/dist/cjs/store/internal/item-write.js +181 -0
  151. package/dist/{store → cjs/store}/internal/parse.d.ts +15 -10
  152. package/dist/cjs/store/internal/parse.js +180 -0
  153. package/dist/{store → cjs/store}/internal/rows.d.ts +38 -34
  154. package/dist/cjs/store/internal/rows.js +166 -0
  155. package/dist/{store → cjs/store}/internal/semantic-search.d.ts +2 -2
  156. package/dist/cjs/store/internal/semantic-search.js +211 -0
  157. package/dist/{store → cjs/store}/internal/setup.d.ts +10 -15
  158. package/dist/cjs/store/internal/setup.js +103 -0
  159. package/dist/{store → cjs/store}/internal/table-search.d.ts +5 -5
  160. package/dist/cjs/store/internal/table-search.js +123 -0
  161. package/dist/{store → cjs/store}/internal/vector-index.d.ts +26 -15
  162. package/dist/cjs/store/internal/vector-index.js +269 -0
  163. package/dist/{store → cjs/store}/store.d.ts +82 -39
  164. package/dist/cjs/store/store.js +97 -0
  165. package/dist/{store → cjs/store}/types.d.ts +25 -10
  166. package/dist/cjs/store/types.js +2 -0
  167. package/dist/cjs/store/vector-backend.js +4 -0
  168. package/dist/esm/backfill/backfill.d.ts +171 -0
  169. package/dist/esm/backfill/backfill.js +170 -0
  170. package/dist/{checkpointer/actions/delete-thread.js → esm/checkpointer/actions/delete-thread.d.ts} +4 -26
  171. package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
  172. package/dist/{checkpointer/actions/get-tuple.js → esm/checkpointer/actions/get-tuple.d.ts} +7 -24
  173. package/dist/esm/checkpointer/actions/get-tuple.js +19 -0
  174. package/dist/esm/checkpointer/actions/list.d.ts +55 -0
  175. package/dist/esm/checkpointer/actions/list.js +67 -0
  176. package/dist/{checkpointer/actions/put-writes.js → esm/checkpointer/actions/put-writes.d.ts} +10 -37
  177. package/dist/esm/checkpointer/actions/put-writes.js +18 -0
  178. package/dist/esm/checkpointer/actions/put.d.ts +95 -0
  179. package/dist/esm/checkpointer/actions/put.js +75 -0
  180. package/dist/esm/checkpointer/internal/delta-history.d.ts +124 -0
  181. package/dist/esm/checkpointer/internal/delta-history.js +126 -0
  182. package/dist/{checkpointer/internal/listing.js → esm/checkpointer/internal/listing.d.ts} +22 -118
  183. package/dist/esm/checkpointer/internal/listing.js +95 -0
  184. package/dist/esm/checkpointer/internal/parse.d.ts +298 -0
  185. package/dist/esm/checkpointer/internal/parse.js +169 -0
  186. package/dist/esm/checkpointer/internal/pending-writes.d.ts +314 -0
  187. package/dist/esm/checkpointer/internal/pending-writes.js +229 -0
  188. package/dist/esm/checkpointer/internal/read.d.ts +135 -0
  189. package/dist/esm/checkpointer/internal/read.js +125 -0
  190. package/dist/esm/checkpointer/internal/rows.d.ts +644 -0
  191. package/dist/esm/checkpointer/internal/rows.js +323 -0
  192. package/dist/esm/checkpointer/internal/setup.d.ts +47 -0
  193. package/dist/esm/checkpointer/internal/setup.js +21 -0
  194. package/dist/{checkpointer/saver.js → esm/checkpointer/saver.d.ts} +84 -87
  195. package/dist/esm/checkpointer/saver.js +52 -0
  196. package/dist/esm/checkpointer/types.d.ts +51 -0
  197. package/dist/esm/checkpointer/types.js +1 -0
  198. package/dist/esm/factory/factory.d.ts +154 -0
  199. package/dist/esm/factory/factory.js +133 -0
  200. package/dist/esm/factory/types.d.ts +76 -0
  201. package/dist/esm/factory/types.js +1 -0
  202. package/dist/{history/actions/add-messages.js → esm/history/actions/add-messages.d.ts} +20 -26
  203. package/dist/esm/history/actions/add-messages.js +14 -0
  204. package/dist/{history/actions/clear.js → esm/history/actions/clear.d.ts} +4 -35
  205. package/dist/esm/history/actions/clear.js +26 -0
  206. package/dist/esm/history/actions/get-messages.d.ts +60 -0
  207. package/dist/esm/history/actions/get-messages.js +55 -0
  208. package/dist/esm/history/actions/list-sessions.d.ts +55 -0
  209. package/dist/esm/history/actions/list-sessions.js +64 -0
  210. package/dist/{history/actions/reconcile-count.js → esm/history/actions/reconcile-count.d.ts} +14 -16
  211. package/dist/esm/history/actions/reconcile-count.js +5 -0
  212. package/dist/{history/chat-message-history.js → esm/history/chat-message-history.d.ts} +76 -87
  213. package/dist/esm/history/chat-message-history.js +57 -0
  214. package/dist/esm/history/internal/append.d.ts +244 -0
  215. package/dist/esm/history/internal/append.js +259 -0
  216. package/dist/esm/history/internal/message-read.d.ts +84 -0
  217. package/dist/esm/history/internal/message-read.js +89 -0
  218. package/dist/esm/history/internal/parse.d.ts +153 -0
  219. package/dist/esm/history/internal/parse.js +105 -0
  220. package/dist/{history/internal/rows.js → esm/history/internal/rows.d.ts} +58 -112
  221. package/dist/esm/history/internal/rows.js +83 -0
  222. package/dist/esm/history/internal/session.d.ts +350 -0
  223. package/dist/esm/history/internal/session.js +285 -0
  224. package/dist/esm/history/internal/setup.d.ts +64 -0
  225. package/dist/esm/history/internal/setup.js +56 -0
  226. package/dist/{history/session-adapter.js → esm/history/session-adapter.d.ts} +25 -39
  227. package/dist/esm/history/session-adapter.js +34 -0
  228. package/dist/esm/history/types.d.ts +102 -0
  229. package/dist/esm/history/types.js +1 -0
  230. package/dist/esm/index.d.ts +53 -0
  231. package/dist/esm/index.js +10 -0
  232. package/dist/esm/shared/adapter.d.ts +146 -0
  233. package/dist/esm/shared/adapter.js +65 -0
  234. package/dist/{shared/clock.js → esm/shared/clock.d.ts} +3 -14
  235. package/dist/esm/shared/clock.js +9 -0
  236. package/dist/esm/shared/codec/codec.d.ts +336 -0
  237. package/dist/esm/shared/codec/codec.js +150 -0
  238. package/dist/esm/shared/codec/compression.d.ts +66 -0
  239. package/dist/esm/shared/codec/compression.js +40 -0
  240. package/dist/esm/shared/codec/json-serde.d.ts +80 -0
  241. package/dist/esm/shared/codec/json-serde.js +54 -0
  242. package/dist/esm/shared/codec/s3/client-types.d.ts +54 -0
  243. package/dist/esm/shared/codec/s3/client-types.js +3 -0
  244. package/dist/esm/shared/codec/s3/client.d.ts +63 -0
  245. package/dist/esm/shared/codec/s3/client.js +40 -0
  246. package/dist/{shared/codec/s3/config.js → esm/shared/codec/s3/config.d.ts} +45 -93
  247. package/dist/esm/shared/codec/s3/config.js +79 -0
  248. package/dist/esm/shared/codec/s3/lifecycle.d.ts +220 -0
  249. package/dist/esm/shared/codec/s3/lifecycle.js +214 -0
  250. package/dist/esm/shared/codec/s3/offloader.d.ts +428 -0
  251. package/dist/esm/shared/codec/s3/offloader.js +278 -0
  252. package/dist/{shared/concurrency.js → esm/shared/concurrency.d.ts} +2 -37
  253. package/dist/esm/shared/concurrency.js +27 -0
  254. package/dist/{shared/dynamodb/abort.js → esm/shared/dynamodb/abort.d.ts} +4 -16
  255. package/dist/esm/shared/dynamodb/abort.js +12 -0
  256. package/dist/esm/shared/dynamodb/batch-write.d.ts +86 -0
  257. package/dist/esm/shared/dynamodb/batch-write.js +74 -0
  258. package/dist/{shared/dynamodb/cancellation.js → esm/shared/dynamodb/cancellation.d.ts} +25 -53
  259. package/dist/esm/shared/dynamodb/cancellation.js +30 -0
  260. package/dist/{shared/dynamodb/client.js → esm/shared/dynamodb/client.d.ts} +74 -64
  261. package/dist/esm/shared/dynamodb/client.js +35 -0
  262. package/dist/{shared/dynamodb/idempotent-write.js → esm/shared/dynamodb/idempotent-write.d.ts} +172 -169
  263. package/dist/esm/shared/dynamodb/idempotent-write.js +153 -0
  264. package/dist/esm/shared/dynamodb/paginate.d.ts +111 -0
  265. package/dist/esm/shared/dynamodb/paginate.js +84 -0
  266. package/dist/esm/shared/dynamodb/partition-delete.d.ts +204 -0
  267. package/dist/esm/shared/dynamodb/partition-delete.js +171 -0
  268. package/dist/esm/shared/dynamodb/recency-index.d.ts +243 -0
  269. package/dist/esm/shared/dynamodb/recency-index.js +136 -0
  270. package/dist/esm/shared/dynamodb/retry.d.ts +317 -0
  271. package/dist/esm/shared/dynamodb/retry.js +180 -0
  272. package/dist/esm/shared/dynamodb/row-size.d.ts +33 -0
  273. package/dist/esm/shared/dynamodb/row-size.js +26 -0
  274. package/dist/{shared/dynamodb/table-schema.js → esm/shared/dynamodb/table-schema.d.ts} +57 -67
  275. package/dist/esm/shared/dynamodb/table-schema.js +43 -0
  276. package/dist/esm/shared/errors/base-error.d.ts +231 -0
  277. package/dist/esm/shared/errors/base-error.js +64 -0
  278. package/dist/esm/shared/errors/boundary.d.ts +86 -0
  279. package/dist/esm/shared/errors/boundary.js +54 -0
  280. package/dist/esm/shared/errors/classify.d.ts +206 -0
  281. package/dist/esm/shared/errors/classify.js +220 -0
  282. package/dist/{shared/errors/error-code.js → esm/shared/errors/error-code.d.ts} +39 -43
  283. package/dist/esm/shared/errors/error-code.js +24 -0
  284. package/dist/{shared/errors/errors.js → esm/shared/errors/errors.d.ts} +92 -98
  285. package/dist/esm/shared/errors/errors.js +110 -0
  286. package/dist/{shared/logging/logger.js → esm/shared/logging/logger.d.ts} +22 -52
  287. package/dist/esm/shared/logging/logger.js +25 -0
  288. package/dist/esm/shared/logging/redaction.d.ts +123 -0
  289. package/dist/esm/shared/logging/redaction.js +140 -0
  290. package/dist/{shared/logging/secret-patterns.js → esm/shared/logging/secret-patterns.d.ts} +46 -87
  291. package/dist/esm/shared/logging/secret-patterns.js +83 -0
  292. package/dist/{shared/logging/truncate.js → esm/shared/logging/truncate.d.ts} +6 -40
  293. package/dist/esm/shared/logging/truncate.js +25 -0
  294. package/dist/esm/shared/options.d.ts +100 -0
  295. package/dist/esm/shared/options.js +1 -0
  296. package/dist/{shared/ulid.js → esm/shared/ulid.d.ts} +4 -84
  297. package/dist/esm/shared/ulid.js +77 -0
  298. package/dist/{shared/validation/collaborators.js → esm/shared/validation/collaborators.d.ts} +37 -65
  299. package/dist/esm/shared/validation/collaborators.js +70 -0
  300. package/dist/{shared/validation/option-shape.js → esm/shared/validation/option-shape.d.ts} +14 -36
  301. package/dist/esm/shared/validation/option-shape.js +24 -0
  302. package/dist/esm/shared/validation/options.d.ts +145 -0
  303. package/dist/esm/shared/validation/options.js +156 -0
  304. package/dist/{shared/validation/primitives.js → esm/shared/validation/primitives.d.ts} +30 -125
  305. package/dist/esm/shared/validation/primitives.js +100 -0
  306. package/dist/esm/shared/validation/ttl.d.ts +94 -0
  307. package/dist/esm/shared/validation/ttl.js +46 -0
  308. package/dist/esm/store/actions/list-namespaces.d.ts +79 -0
  309. package/dist/esm/store/actions/list-namespaces.js +86 -0
  310. package/dist/esm/store/actions/put.d.ts +43 -0
  311. package/dist/esm/store/actions/put.js +46 -0
  312. package/dist/{store/actions/reconcile-vector-index.js → esm/store/actions/reconcile-vector-index.d.ts} +8 -16
  313. package/dist/esm/store/actions/reconcile-vector-index.js +10 -0
  314. package/dist/esm/store/actions/search.d.ts +38 -0
  315. package/dist/esm/store/actions/search.js +23 -0
  316. package/dist/esm/store/internal/batch-plan.d.ts +56 -0
  317. package/dist/esm/store/internal/batch-plan.js +28 -0
  318. package/dist/esm/store/internal/filter.d.ts +43 -0
  319. package/dist/esm/store/internal/filter.js +60 -0
  320. package/dist/esm/store/internal/get-item.d.ts +77 -0
  321. package/dist/esm/store/internal/get-item.js +54 -0
  322. package/dist/esm/store/internal/item-write.d.ts +270 -0
  323. package/dist/esm/store/internal/item-write.js +173 -0
  324. package/dist/esm/store/internal/parse.d.ts +230 -0
  325. package/dist/esm/store/internal/parse.js +169 -0
  326. package/dist/{store/internal/rows.js → esm/store/internal/rows.d.ts} +111 -199
  327. package/dist/esm/store/internal/rows.js +147 -0
  328. package/dist/esm/store/internal/semantic-search.d.ts +168 -0
  329. package/dist/esm/store/internal/semantic-search.js +200 -0
  330. package/dist/esm/store/internal/setup.d.ts +96 -0
  331. package/dist/esm/store/internal/setup.js +98 -0
  332. package/dist/esm/store/internal/table-search.d.ts +100 -0
  333. package/dist/esm/store/internal/table-search.js +119 -0
  334. package/dist/esm/store/internal/vector-index.d.ts +258 -0
  335. package/dist/esm/store/internal/vector-index.js +256 -0
  336. package/dist/{store/store.js → esm/store/store.d.ts} +99 -133
  337. package/dist/esm/store/store.js +93 -0
  338. package/dist/esm/store/types.d.ts +111 -0
  339. package/dist/esm/store/types.js +1 -0
  340. package/dist/esm/store/vector-backend.d.ts +104 -0
  341. package/dist/esm/store/vector-backend.js +1 -0
  342. package/package.json +50 -44
  343. package/dist/backfill/backfill.js +0 -393
  344. package/dist/checkpointer/actions/list.js +0 -142
  345. package/dist/checkpointer/actions/put.js +0 -195
  346. package/dist/checkpointer/internal/delta-history.js +0 -252
  347. package/dist/checkpointer/internal/parse.js +0 -372
  348. package/dist/checkpointer/internal/pending-writes.js +0 -588
  349. package/dist/checkpointer/internal/read.js +0 -264
  350. package/dist/checkpointer/internal/rows.js +0 -834
  351. package/dist/checkpointer/internal/setup.js +0 -72
  352. package/dist/checkpointer/types.js +0 -12
  353. package/dist/factory/factory.js +0 -266
  354. package/dist/factory/types.js +0 -10
  355. package/dist/history/actions/get-messages.js +0 -141
  356. package/dist/history/actions/list-sessions.js +0 -156
  357. package/dist/history/internal/append.js +0 -500
  358. package/dist/history/internal/message-read.js +0 -204
  359. package/dist/history/internal/parse.js +0 -252
  360. package/dist/history/internal/session.js +0 -628
  361. package/dist/history/internal/setup.js +0 -106
  362. package/dist/history/types.js +0 -12
  363. package/dist/index.js +0 -51
  364. package/dist/shared/adapter.js +0 -143
  365. package/dist/shared/codec/codec.js +0 -441
  366. package/dist/shared/codec/compression.js +0 -89
  367. package/dist/shared/codec/json-serde.js +0 -191
  368. package/dist/shared/codec/s3/client-types.js +0 -26
  369. package/dist/shared/codec/s3/client.js +0 -97
  370. package/dist/shared/codec/s3/lifecycle.js +0 -355
  371. package/dist/shared/codec/s3/offloader.js +0 -658
  372. package/dist/shared/dynamodb/batch-write.js +0 -173
  373. package/dist/shared/dynamodb/paginate.js +0 -188
  374. package/dist/shared/dynamodb/partition-delete.js +0 -340
  375. package/dist/shared/dynamodb/recency-index.js +0 -377
  376. package/dist/shared/dynamodb/retry.js +0 -463
  377. package/dist/shared/errors/base-error.js +0 -174
  378. package/dist/shared/errors/boundary.js +0 -143
  379. package/dist/shared/errors/classify.d.ts +0 -97
  380. package/dist/shared/errors/classify.js +0 -257
  381. package/dist/shared/logging/redaction.js +0 -316
  382. package/dist/shared/options.js +0 -11
  383. package/dist/shared/validation/options.js +0 -328
  384. package/dist/shared/validation/ttl.js +0 -132
  385. package/dist/store/actions/list-namespaces.js +0 -197
  386. package/dist/store/actions/put.js +0 -78
  387. package/dist/store/actions/search.js +0 -66
  388. package/dist/store/internal/batch-plan.d.ts +0 -26
  389. package/dist/store/internal/batch-plan.js +0 -109
  390. package/dist/store/internal/filter.js +0 -137
  391. package/dist/store/internal/get-item.d.ts +0 -45
  392. package/dist/store/internal/get-item.js +0 -115
  393. package/dist/store/internal/item-write.js +0 -463
  394. package/dist/store/internal/parse.js +0 -350
  395. package/dist/store/internal/semantic-search.js +0 -389
  396. package/dist/store/internal/setup.js +0 -223
  397. package/dist/store/internal/table-search.js +0 -213
  398. package/dist/store/internal/vector-index.js +0 -546
  399. package/dist/store/types.js +0 -15
  400. package/dist/store/vector-backend.js +0 -17
  401. /package/dist/{shared → cjs/shared}/clock.d.ts +0 -0
  402. /package/dist/{shared → cjs/shared}/codec/json-serde.d.ts +0 -0
  403. /package/dist/{shared → cjs/shared}/concurrency.d.ts +0 -0
  404. /package/dist/{shared → cjs/shared}/dynamodb/cancellation.d.ts +0 -0
  405. /package/dist/{shared → cjs/shared}/logging/logger.d.ts +0 -0
  406. /package/dist/{shared → cjs/shared}/logging/truncate.d.ts +0 -0
  407. /package/dist/{shared → cjs/shared}/ulid.d.ts +0 -0
  408. /package/dist/{shared → cjs/shared}/validation/primitives.d.ts +0 -0
  409. /package/dist/{store → cjs/store}/vector-backend.d.ts +0 -0
@@ -0,0 +1,428 @@
1
+ /**
2
+ * Hides S3 behind one object.
3
+ *
4
+ * The client is built lazily from the optional peer. An upload writes only
5
+ * while its key is free, so a retried upload never replaces another write's
6
+ * object, and carries its row's key as metadata. A download refuses an object
7
+ * over the configured cap before and while reading it. A delete goes out in
8
+ * batches of a thousand, and a best-effort release retries transient failures,
9
+ * never deletes outside the row's own path, and logs rather than throws.
10
+ */
11
+ import type { S3Client } from '@aws-sdk/client-s3';
12
+ import { type RetryAttemptInfo } from '../../dynamodb/retry.js';
13
+ import { DynamoDBLangGraphError } from '../../errors/base-error.js';
14
+ import { type Logger } from '../../logging/logger.js';
15
+ import { S3OffloadConfig } from './config.js';
16
+ /** Default payload size that triggers S3 offload (350 KB; 50 KB under the DDB 400 KB cap). */
17
+ export declare const DEFAULT_S3_THRESHOLD_BYTES: number;
18
+ /** Default S3 server-side encryption algorithm. */
19
+ export declare const DEFAULT_S3_SSE = "AES256";
20
+ /**
21
+ * Default cap on an offloaded object buffered from S3 (50 MiB), checked against
22
+ * `ContentLength` before the body is read and enforced while streaming when
23
+ * the length is unknown. Together with
24
+ * `DEFAULT_MAX_DECOMPRESSED_BYTES` (`src/shared/codec/compression.ts`)
25
+ * it bounds the memory any single payload can claim.
26
+ */
27
+ export declare const DEFAULT_MAX_S3_DOWNLOAD_BYTES: number;
28
+ /** S3 DeleteObjects maximum keys per request. */
29
+ export declare const S3_DELETE_BATCH_MAX = 1000;
30
+ /**
31
+ * Owns the S3 configuration and the lazily-built client; every method is a
32
+ * small delegation to this module's own functions, keyed to that config.
33
+ */
34
+ export declare class S3Offloader {
35
+ private clientPromise;
36
+ private resolvedClient;
37
+ private destroyed;
38
+ private readonly bucketName;
39
+ private readonly keyPrefix;
40
+ private readonly thresholdBytes;
41
+ private readonly sse;
42
+ private readonly sseKmsKeyId?;
43
+ private readonly maxDownloadBytes;
44
+ private readonly config;
45
+ private readonly logger;
46
+ /**
47
+ * Accepts: `config` — already validated by the adapter that builds this, with
48
+ * its key prefix resolved to the adapter's own path. `logger` — the
49
+ * adapter's, which each S3 transfer retry is reported to at `debug`.
50
+ *
51
+ * Returns: an offloader whose S3 client is built lazily, on the first
52
+ * operation that needs one.
53
+ *
54
+ * Throws: nothing. A missing `@aws-sdk/client-s3` is not raised here: the
55
+ * import is warmed so the failure surfaces, typed, on the first S3 operation
56
+ * rather than on the first oversize payload days later.
57
+ */
58
+ constructor(config: S3OffloadConfig, logger?: Logger);
59
+ private getClient;
60
+ /**
61
+ * Whether `data` is large enough to warrant S3 offload.
62
+ *
63
+ * Accepts: the encoded payload, after compression — what would actually be
64
+ * stored.
65
+ *
66
+ * Returns: whether it reaches `thresholdBytes`. The comparison is inclusive,
67
+ * so a payload exactly at the threshold offloads.
68
+ *
69
+ * Throws: nothing.
70
+ */
71
+ shouldOffload(data: Uint8Array): boolean;
72
+ /**
73
+ * Build the S3 key of the object write `objectId` uploads for the row `parts`
74
+ * identify.
75
+ *
76
+ * Accepts: `parts` — at least one; the row's identity. `objectId` — the
77
+ * uploading write's id, appended as it is: key-safe, with no `/` (see
78
+ * {@link buildS3Key}).
79
+ *
80
+ * Returns: the key, under this offloader's prefix.
81
+ *
82
+ * Throws: `VALIDATION` naming `s3Key` for empty `parts` or a key over
83
+ * S3's 1024-byte cap.
84
+ */
85
+ buildKey(parts: readonly string[], objectId: string): string;
86
+ /**
87
+ * The configured key prefix.
88
+ *
89
+ * Accepts: nothing.
90
+ *
91
+ * Returns: the prefix every key this offloader builds starts with, which is
92
+ * what a lifecycle rule is scoped to.
93
+ *
94
+ * Throws: nothing.
95
+ */
96
+ getKeyPrefix(): string;
97
+ /**
98
+ * Whether `key` lies under this offloader's prefix and the `scope` parts'
99
+ * path.
100
+ *
101
+ * Accepts: `key` — any key, including one read off a row. `scope` — the
102
+ * identity of the row that claims it.
103
+ *
104
+ * Returns: whether the row may address that object.
105
+ *
106
+ * Throws: nothing — this is the question form; {@link assertOwnedKey} is the
107
+ * refusing form.
108
+ */
109
+ ownsKey(key: string, scope: readonly string[]): boolean;
110
+ /**
111
+ * Refuse a row-sourced key outside the row's own path.
112
+ *
113
+ * Accepts: as {@link ownsKey}.
114
+ *
115
+ * Returns: nothing: `key` is kept under its declared type, and this checks
116
+ * it against `scope`.
117
+ *
118
+ * Throws: `VALIDATION`. Every download of a key taken from a row goes
119
+ * through here, so a tampered or foreign row cannot make a reader fetch an
120
+ * object belonging to another row.
121
+ */
122
+ assertOwnedKey(key: string, scope: readonly string[]): void;
123
+ /**
124
+ * The line one S3 transfer retry writes: the message a DynamoDB retry writes,
125
+ * so a count of retries by error name covers both, plus the transfer it was.
126
+ * The error is quoted by name only, bounded like every other quoted name.
127
+ */
128
+ private retryReporter;
129
+ /**
130
+ * Upload `data` under `key`, writing only while the key is free.
131
+ *
132
+ * Accepts: `key` — built by {@link buildKey} for the write uploading `data`,
133
+ * so no other write uploads to it. `row` — written to the object as the
134
+ * DynamoDB backlink, for an out-of-band sweeper. `signal` — cancels the
135
+ * request itself, not merely the wait before the next attempt.
136
+ *
137
+ * Returns: the key, whether this request stored the object or an earlier
138
+ * attempt of this upload did (see `uploadObject`); the caller's obligation is
139
+ * the same either way.
140
+ *
141
+ * Throws: `VALIDATION` naming `payload` for bytes over `maxDownloadBytes`,
142
+ * before any request; `S3_OFFLOAD_FAILED` carrying the key; `ABORTED` when
143
+ * the signal fires, which is the caller's own stop rather than a failed
144
+ * offload.
145
+ */
146
+ upload(key: string, data: Uint8Array, row: BacklinkRow, signal?: AbortSignal): Promise<string>;
147
+ /**
148
+ * Download the bytes stored under `key`.
149
+ *
150
+ * Accepts: `key` — already checked against the reading row's scope.
151
+ * `signal` — cancels the request, including a body already streaming: the
152
+ * handler's abort listener outlives the response headers and destroys the
153
+ * socket, which is the one bound a stalled transfer has that the request
154
+ * timeout provably does not give it.
155
+ *
156
+ * Returns: the object's bytes.
157
+ *
158
+ * Throws: `S3_OFFLOAD_FAILED` for an object over `maxDownloadBytes` — the cap
159
+ * is enforced on the declared length and again while reading, so a lying
160
+ * `Content-Length` does not get past it — and for a missing object or a
161
+ * transport failure; `ABORTED` when the signal fires.
162
+ */
163
+ download(key: string, signal?: AbortSignal): Promise<Uint8Array>;
164
+ /**
165
+ * Delete `keys`.
166
+ *
167
+ * Accepts: any number of keys, including none.
168
+ *
169
+ * Returns: the keys S3 reported as failed, so the caller can log what leaked
170
+ * rather than assume it is gone.
171
+ *
172
+ * Throws: whatever the delete throws after its own retries; cleanup callers
173
+ * catch it, since a failed cleanup must not fail the operation it follows.
174
+ */
175
+ deleteBatch(keys: string[]): Promise<string[]>;
176
+ /**
177
+ * Ensure a `${ttlDays}`-day expiration lifecycle rule exists for the prefix.
178
+ *
179
+ * Accepts: `ttlDays` — whole days, the only granularity S3 accepts.
180
+ * `logger` — the adapter's, for the bucket's versioning state, which is
181
+ * reported rather than enforced.
182
+ *
183
+ * Returns: nothing. Rules that are already correct are left alone, so this
184
+ * is safe to call on every deploy. When it writes the rules but cannot
185
+ * confirm within its polling window that a re-read shows them — S3
186
+ * documents that a lifecycle configuration can take minutes to propagate —
187
+ * it logs a `warn` and returns rather than throwing: the rules were
188
+ * written, and a later call can confirm them.
189
+ *
190
+ * Throws: `VALIDATION` naming `s3.keyPrefix` when a rule id this prefix
191
+ * would take is already held by a different prefix; whatever reading or
192
+ * writing the bucket's lifecycle configuration throws; `CONTENTION` when
193
+ * every one of the five rounds this call polls needs a write — a competing
194
+ * writer replacing the configuration on every single re-read.
195
+ */
196
+ ensureLifecycleRule(ttlDays: number, logger: Logger): Promise<void>;
197
+ /**
198
+ * Release the underlying S3 client.
199
+ *
200
+ * Accepts: nothing.
201
+ *
202
+ * Returns: nothing. Safe at any point in the client's lifecycle: called
203
+ * before construction starts it does nothing, called mid-construction it
204
+ * marks the offloader destroyed so the client is released the moment it
205
+ * resolves, and called after it releases it directly.
206
+ *
207
+ * Throws: whatever the SDK client's own `destroy` throws.
208
+ */
209
+ destroy(): void;
210
+ }
211
+ /** Parameters for {@link uploadObject}. */
212
+ export interface UploadParams {
213
+ bucket: string;
214
+ key: string;
215
+ data: Uint8Array;
216
+ serverSideEncryption?: string;
217
+ sseKmsKeyId?: string;
218
+ /** User metadata stored on the object, used for the DynamoDB backlink. */
219
+ metadata?: Record<string, string>;
220
+ /** The caller's cancellation; absent, the upload cannot be interrupted. */
221
+ signal?: AbortSignal;
222
+ /** Called before each retry's backoff, as `withRetry` calls it. */
223
+ onRetry?: (info: RetryAttemptInfo) => void;
224
+ }
225
+ /**
226
+ * Upload `data` to S3 unless an object already exists under `key`, wrapping
227
+ * failures as `S3_OFFLOAD_FAILED`.
228
+ *
229
+ * The write is conditional (`If-None-Match: *`), which costs nothing extra: it
230
+ * needs only `s3:PutObject`, the permission this package already requires, and
231
+ * a retried request writes nothing new: it can never overwrite the object an
232
+ * earlier attempt stored. A `409 Conflict` — S3's answer when a delete lands
233
+ * between the check and the write — is classified as transient and retried
234
+ * like any other conflict.
235
+ *
236
+ * Accepts: `params.key` — the key of one write's upload of `params.data`,
237
+ * written by no other write. `params.metadata` — the backlink, sent with every
238
+ * attempt; an object an earlier attempt stored keeps that attempt's metadata,
239
+ * which is the same. `params.signal` — cancels the request in flight, not only
240
+ * the wait before the next attempt.
241
+ *
242
+ * Returns: nothing, both when this request stored the object and when S3
243
+ * answered `412` because an earlier attempt of this upload already had. The
244
+ * two are not distinguished because the caller's obligation is identical: the
245
+ * bytes are at that key.
246
+ *
247
+ * Throws: `ABORTED` when the signal fires, unwrapped; `S3_OFFLOAD_FAILED`
248
+ * carrying the key and the underlying error, after three attempts on a
249
+ * transient failure. Its message quotes the SDK's, with credential shapes
250
+ * redacted — a signing failure names the key it signed with, and this message
251
+ * reaches `err.message` on a public error. Its context carries the S3
252
+ * failure's `awsErrorName`, `httpStatusCode` and `requestId` when it was AWS's.
253
+ *
254
+ * Guarantees: a cancelled upload leaves at most the object it was writing, at
255
+ * a key ending in this write's own object id, which no row names because the
256
+ * row that would have named it is written afterwards. The conditional write
257
+ * means it can never have replaced anything. It is an orphan of exactly the
258
+ * kind `ensureS3LifecycleRule` sweeps, never a corrupted or half-written
259
+ * object: S3 stores a single `PutObject` whole or not at all.
260
+ */
261
+ export declare function uploadObject(client: S3Client, params: UploadParams): Promise<void>;
262
+ /** One object to read: its bucket, its key, and the most bytes it may hold. */
263
+ export interface StoredObject {
264
+ readonly bucket: string;
265
+ readonly key: string;
266
+ readonly maxBytes: number;
267
+ }
268
+ /**
269
+ * The bytes stored under `object.key`.
270
+ *
271
+ * Accepts: `object.maxBytes` — the largest object this call will buffer.
272
+ * `signal` — cancels the request, and with it a body already streaming.
273
+ * `onRetry` — called before each retry's backoff.
274
+ *
275
+ * Returns: the object's bytes.
276
+ *
277
+ * Throws: `ABORTED` when the signal fires, unwrapped; `S3_OFFLOAD_FAILED`
278
+ * naming the key — for an object over `maxBytes`, for a response with no body,
279
+ * and for any SDK failure that survives the retries. Its message quotes the
280
+ * underlying one with credential shapes redacted; the failure is kept as
281
+ * `cause` — the SDK error itself for a failure that was not retried, the
282
+ * `RETRY_EXHAUSTED` error wrapping it once the retry budget is spent — so
283
+ * `NoSuchKey` stays distinguishable ({@link isMissingObjectError}). Its context carries the S3 failure's
284
+ * `awsErrorName`, `httpStatusCode` and `requestId` when it was AWS's.
285
+ *
286
+ * Guarantees: an object over the cap is refused from its declared
287
+ * `ContentLength` before the body is touched, and that body is destroyed
288
+ * rather than left open, and while streaming when the length is absent, so a
289
+ * replaced or hostile object cannot exhaust memory.
290
+ * Transient failures are retried by this package alone — the client is built
291
+ * with `maxAttempts: 1`.
292
+ *
293
+ * The body is read *inside* the retried attempt, so the signal covers the
294
+ * whole transfer rather than only the round trip to the headers. A signal that
295
+ * fires mid-body destroys the socket, and the stream rejects with a transport
296
+ * error that every classifier here reads as transient; it never reaches that
297
+ * classification, because the signal is read first. A cancelled download
298
+ * leaves nothing behind at all — no local file, no partial object, and the
299
+ * chunks already buffered are dropped with the call.
300
+ */
301
+ export declare function downloadObject(client: S3Client, object: StoredObject, signal?: AbortSignal, onRetry?: (info: RetryAttemptInfo) => void): Promise<Uint8Array>;
302
+ /** The part of an S3 `GetObject` body this module relies on. */
303
+ export interface S3Body {
304
+ transformToByteArray(): Promise<Uint8Array>;
305
+ }
306
+ /**
307
+ * The typed error for an object over the download cap.
308
+ *
309
+ * Accepts: `bytes` — what the object declared or what had been read when the
310
+ * cap was passed; the message says which is not distinguished, because either
311
+ * way the download stops.
312
+ *
313
+ * Returns: the error, coded `S3_OFFLOAD_FAILED` and carrying the key. The
314
+ * message names the key bounded by {@link truncateForLog}, since it came off
315
+ * a row; `context.key` carries it whole, because that is the field a caller
316
+ * reads and it is one value per failed download rather than one per row.
317
+ *
318
+ * Throws: nothing — it builds the error, the caller throws it.
319
+ */
320
+ export declare function oversizedObjectError(key: string, bytes: number, maxBytes: number): DynamoDBLangGraphError;
321
+ /**
322
+ * The bytes of an S3 body, refused once they pass `maxBytes`.
323
+ *
324
+ * Accepts: `body` — a streaming body (Node's `IncomingMessage`, which the SDK
325
+ * returns) is consumed chunk by chunk; a body offering only
326
+ * `transformToByteArray()` is read whole and then checked. `key` — named in the
327
+ * error. `maxBytes` — the cap; `0` admits only an empty body.
328
+ *
329
+ * Returns: the buffered bytes.
330
+ *
331
+ * Throws: `S3_OFFLOAD_FAILED` naming the key once the total passes `maxBytes`.
332
+ * A streaming body is destroyed at that point, so the rest is never fetched.
333
+ *
334
+ * Guarantees: for a streaming body, peak memory is `maxBytes` plus the one
335
+ * chunk that crossed it — the chunks already held never exceed the cap. For a
336
+ * body without a stream the SDK has already buffered it, so the check bounds
337
+ * what is *returned*, not what was read.
338
+ */
339
+ export declare function readBodyBounded(body: S3Body, key: string, maxBytes: number): Promise<Uint8Array>;
340
+ /**
341
+ * Delete `keys` from `bucket`, in chunks of {@link S3_DELETE_BATCH_MAX} — the
342
+ * limit `DeleteObjects` accepts per request.
343
+ *
344
+ * Accepts: `keys` — any length, including empty, which issues no request.
345
+ *
346
+ * Returns: the keys S3 named in an error entry. A per-key failure is reported
347
+ * this way rather than thrown, so the caller (orphan cleanup) decides how
348
+ * loudly to react. An error entry carrying no `Key` cannot be attributed and is
349
+ * not reported.
350
+ *
351
+ * Throws: whatever the SDK rejects with — a request that never reached S3, or
352
+ * one refused whole (permissions, a missing bucket).
353
+ */
354
+ export declare function deleteObjects(client: S3Client, bucket: string, keys: string[]): Promise<string[]>;
355
+ /** The DynamoDB key an offloaded object belongs to. */
356
+ export interface BacklinkRow {
357
+ pk: string;
358
+ sk: string;
359
+ }
360
+ /**
361
+ * The S3 user metadata linking an object back to the DynamoDB row that points
362
+ * at it — the maintenance aid AWS names for this layout: "Store the primary key
363
+ * value of the item as Amazon S3 metadata of the object" (*Best practices for
364
+ * storing large items and attributes in DynamoDB*). Nothing in this package
365
+ * reads it; it lets an out-of-band sweeper ask DynamoDB whether an object's
366
+ * parent row still exists without parsing object keys.
367
+ *
368
+ * Both values are base64url-encoded. A `thread_id` or a store key may hold any
369
+ * well-formed UTF-16 text, while S3 metadata travels in HTTP headers and the
370
+ * User Guide asks for US-ASCII there; encoding unconditionally keeps every
371
+ * value header-safe and keeps the decoding rule single, which a conditional
372
+ * encoding would not.
373
+ *
374
+ * The pair fits S3's 2 KB metadata budget by construction, not by luck: the
375
+ * same identifiers are already base64url-encoded into the object key, which
376
+ * `buildS3Key` caps at 1024 bytes, so anything that produces a usable key
377
+ * leaves these values far below the budget. `offloader-backlink.test.ts` pins
378
+ * that.
379
+ *
380
+ * Accepts: `row` — the DynamoDB key of the row that will point at the object.
381
+ *
382
+ * Returns: the two metadata fields, both base64url.
383
+ *
384
+ * Throws: nothing.
385
+ */
386
+ export declare function backlinkMetadata(row: BacklinkRow): Record<string, string>;
387
+ /** What one release of orphaned objects needs. */
388
+ export interface OrphanRelease {
389
+ /** The keys to delete; an absent or empty one is skipped. */
390
+ readonly keys: ReadonlyArray<string | undefined>;
391
+ /** Names the operation in the log lines, e.g. `putWrites`. */
392
+ readonly operation: string;
393
+ readonly logger: Logger;
394
+ /** The row's own leading key parts, when the keys were read back from a row. */
395
+ readonly scope?: readonly string[];
396
+ readonly rng?: () => number;
397
+ readonly maxAttempts?: number;
398
+ readonly signal?: AbortSignal;
399
+ }
400
+ /**
401
+ * Best-effort delete of S3 objects orphaned by a failed DynamoDB write.
402
+ *
403
+ * Accepts: `release.keys` — may hold `undefined` and empty entries, which are
404
+ * dropped; nothing left means no request. `release.operation` — names the
405
+ * operation in every log line. `release.scope` — the row's own leading key
406
+ * parts when `keys` came from a row: a key outside that path is reported and
407
+ * never deleted. Own uploads pass no scope. `release.maxAttempts` — attempts
408
+ * on a transient failure, default 3. `release.signal` — aborts the wait
409
+ * between attempts.
410
+ *
411
+ * Returns: nothing.
412
+ *
413
+ * Throws: **nothing**, ever: a cleanup failure must not mask the write
414
+ * failure that caused it. Every
415
+ * outcome that is not a clean delete is logged at `warn`, carrying counts and
416
+ * the failing error's *name* — never its message, which can hold a credential
417
+ * fragment. A `logger` that throws is one more thing this absorbs (see
418
+ * `absorbLoggerFailure`): the promise covers the caller's own code too,
419
+ * or every call site's `catch` would hand its caller the wrong error. Every
420
+ * logger reaching here through an adapter is already contained at
421
+ * `resolveLogger`; the guard stays because this promise is written without a
422
+ * precondition, and a `logger` is an argument.
423
+ *
424
+ * Guarantees: an object outside the row's scope is never deleted. Leftovers
425
+ * have no automatic backstop — an S3 lifecycle rule sweeps them only if one was
426
+ * provisioned through `ensureS3LifecycleRule()`, which is opt-in.
427
+ */
428
+ export declare function cleanUpS3Orphans(offloader: S3Offloader, release: OrphanRelease): Promise<void>;