@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,260 @@
1
+ /**
2
+ * Hides the S3 key layout: where a row's object lives, and which keys a row may touch.
3
+ *
4
+ * An offloaded object's key is the adapter's prefix, then the row's own
5
+ * identifiers each base64url-encoded, then the id of the write that produced
6
+ * it, so a key read back from a row can be checked against the path that row
7
+ * could have produced before anything is read or deleted. The configuration a
8
+ * caller passes, its checks, the default prefix per adapter and the lifecycle
9
+ * rule ids derived from a prefix are part of the same layout.
10
+ */
11
+ import type { DynamoDBClientConfig } from '@aws-sdk/client-dynamodb';
12
+ import { type S3ClientConfigLike } from './client-types.js';
13
+ /** Default S3 key prefix for offloaded payloads. */
14
+ export declare const DEFAULT_S3_KEY_PREFIX = "langgraph-checkpoints/";
15
+ /** S3 cap on an object key, applied to the produced offload key. */
16
+ export declare const MAX_S3_KEY_BYTES = 1024;
17
+ /** Configuration for offloading large payloads to S3. */
18
+ export interface S3OffloadConfig {
19
+ bucketName: string;
20
+ keyPrefix?: string;
21
+ /**
22
+ * Serialized payloads at or above this size are offloaded (default 350 KB).
23
+ * Only the payload counts: the store's inline vectors live on the same item
24
+ * and are not part of it. The store embeds one vector per text its
25
+ * `index.fields` extract — a wildcard path yields one per element — each up
26
+ * to about 10 bytes per dimension, so three texts at 1024 dims cost roughly
27
+ * 30 KB. A row that payload and those vectors would take past DynamoDB's
28
+ * 400 KB item limit is refused with `VALIDATION` naming `index`.
29
+ */
30
+ thresholdBytes?: number;
31
+ serverSideEncryption?: string;
32
+ sseKmsKeyId?: string;
33
+ /**
34
+ * Largest object this adapter will buffer from S3 (default 50 MiB). An
35
+ * offloaded payload larger than it is refused at the write, and a value
36
+ * below `thresholdBytes` is refused at construction, so an adapter never
37
+ * stores an object it could not read back.
38
+ */
39
+ maxDownloadBytes?: number;
40
+ /**
41
+ * S3 client configuration (an `S3ClientConfig`). `region` defaults to the
42
+ * adapter's DynamoDB region.
43
+ */
44
+ clientConfig?: S3ClientConfigLike;
45
+ }
46
+ /**
47
+ * One key part, base64url-encoded.
48
+ *
49
+ * Accepts: `part` — any string, including empty.
50
+ *
51
+ * Returns: base64url text, whose alphabet (`A-Z a-z 0-9 - _`) contains neither
52
+ * `/` nor `.`, so an encoded part can never be mistaken for a path separator
53
+ * or the `.bin` suffix.
54
+ *
55
+ * Throws: nothing.
56
+ */
57
+ export declare function encodeKeyPart(part: string): string;
58
+ /**
59
+ * Build a fully-qualified S3 key: `${prefix}${parts, each base64url-encoded,
60
+ * joined with '/'}/${objectId}.bin`.
61
+ *
62
+ * `parts` are the identity of the DynamoDB row that will point at the object,
63
+ * and they are encoded rather than rejected: a namespace element or key may
64
+ * contain '/' (only the DynamoDB '#' separator is forbidden at the validation
65
+ * layer), and base64url's output alphabet never contains '/', so two distinct
66
+ * `parts` arrays can never compose one key.
67
+ *
68
+ * `objectId` names the write that uploads the object and is appended as it
69
+ * is, not encoded, so it must be safe in an S3 key and hold no `/`, or its
70
+ * segments would read as parts. The ids this package passes are both: a UUID
71
+ * (hex digits and `-`) and a ULID (Crockford base-32 digits).
72
+ *
73
+ * Accepts: `prefix` — the offloader's, already validated and separator-
74
+ * terminated. `parts` — at least one; the identity of the row that will point
75
+ * at the object. `objectId` — the uploading write's id: key-safe, with no `/`.
76
+ *
77
+ * Returns: the key. Under one prefix, two distinct `(parts, objectId)` pairs
78
+ * never compose one key, and the same prefix, parts and id always compose the
79
+ * same one.
80
+ *
81
+ * Throws: `VALIDATION` naming `s3Key` for an empty `parts` — an object with
82
+ * no row above it is outside every row's scope and could never be read back —
83
+ * and for a key over the 1024-byte cap. The encoding grows every part by a
84
+ * third, so identifiers that each pass their own length rule can still compose
85
+ * a key S3 would reject with a raw error.
86
+ */
87
+ export declare function buildS3Key(prefix: string, parts: readonly string[], objectId: string): string;
88
+ /**
89
+ * Refuse a key prefix that does not scope what it is used for.
90
+ *
91
+ * Accepts: `keyPrefix` — must be a string, non-empty, not `/`, and end in `/`.
92
+ * The type is checked here, before any string method is called, so every
93
+ * caller gets it: a number or `null` escaped as a bare `TypeError` from
94
+ * `keyPrefix.endsWith`. Every segment before that final `/` must be a real
95
+ * name: not empty, not `.`, not `..`. The whole prefix must also be free of
96
+ * control characters and well-formed UTF-16, the rules identifiers already
97
+ * meet, since it is written into log lines and into a lifecycle rule's filter.
98
+ *
99
+ * Returns: nothing: the value is kept under its declared type, and this
100
+ * checks it.
101
+ *
102
+ * Throws: `VALIDATION` naming `s3.keyPrefix`. The shape rule is reported
103
+ * before the segment rule, so a prefix breaking both is named by its shape.
104
+ *
105
+ * Guarantees: the prefix scopes both the objects and the lifecycle rule built
106
+ * from it. An empty or root prefix would make that rule expire the whole
107
+ * bucket, and one without a trailing `/` (`app/langgraph`) would also match
108
+ * every sibling starting with the same characters (`app/langgraph-other/`).
109
+ * An accepted prefix also survives path normalisation unchanged, which is what
110
+ * the segment rule buys. An S3 key is a byte string rather than a path, so
111
+ * `a/../b/x.bin` and `b/x.bin` are two different objects — but the IAM
112
+ * object-key condition a deployment writes, the lifecycle rule's
113
+ * `Filter.Prefix`, the console and every tool that resolves a path before
114
+ * matching one disagree about which. A prefix holding `..`, `.` or an empty
115
+ * segment therefore writes objects outside the path the deployment granted and
116
+ * outside the path the lifecycle rule sweeps, which is the whole job of a
117
+ * prefix.
118
+ */
119
+ export declare function assertScopedKeyPrefix(keyPrefix: string): void;
120
+ /**
121
+ * The lifecycle rule id for `prefix`: `langgraph-ttl-` plus its slug.
122
+ *
123
+ * Accepts: `prefix` — any string; trailing slashes are trimmed, and every
124
+ * character outside `[A-Za-z0-9-]` becomes `-`.
125
+ *
126
+ * Returns: a deterministic id that does not change with the TTL, so raising or
127
+ * lowering the TTL updates one rule rather than adding another. A prefix with
128
+ * no usable characters yields `langgraph-ttl-default`.
129
+ *
130
+ * Throws: nothing.
131
+ *
132
+ * Guarantees: the slug is not injective — `a/b/` and `a-b/` produce one id —
133
+ * and `ensureLifecycleRule` refuses rather than take over a rule that a
134
+ * different prefix already holds.
135
+ */
136
+ export declare function buildLifecycleRuleId(prefix: string): string;
137
+ /**
138
+ * The id of the rule that reclaims this prefix's expired delete markers:
139
+ * {@link buildLifecycleRuleId}'s id with a suffix of its own.
140
+ *
141
+ * Accepts: `prefix` — as {@link buildLifecycleRuleId} takes it.
142
+ *
143
+ * Returns: a second deterministic id, distinct from the expiration rule's.
144
+ * S3 refuses `ExpiredObjectDeleteMarker` inside an `Expiration` that also
145
+ * carries `Days`, so the reclaim cannot be a field on that rule and needs an
146
+ * id to be found by.
147
+ *
148
+ * Throws: nothing.
149
+ *
150
+ * Guarantees: it is *less* injective than the first id rather than merely as
151
+ * injective. On top of the slug collisions that one already has,
152
+ * `buildMarkerRuleId('app/')` and `buildLifecycleRuleId('app-markers/')` are
153
+ * one id — a clash between two prefixes whose letters and digits differ, which
154
+ * the first id alone cannot produce. `ensureLifecycleRule` refuses to take
155
+ * over either id when a different prefix already holds it, and its refusal
156
+ * names the suffix so the remedy fits the case.
157
+ */
158
+ export declare function buildMarkerRuleId(prefix: string): string;
159
+ /**
160
+ * An adapter's default S3 key prefix.
161
+ *
162
+ * Accepts: `base` — the shared prefix, ending in `/`. `adapter` — the adapter's
163
+ * own segment.
164
+ *
165
+ * Returns: `base` + `adapter` + `/`, so three adapters sharing one bucket write
166
+ * under three paths and one adapter's lifecycle rule never sweeps another's
167
+ * objects.
168
+ *
169
+ * Throws: nothing.
170
+ */
171
+ export declare function defaultAdapterKeyPrefix(base: string, adapter: string): string;
172
+ /**
173
+ * The path every key built from `parts` shares.
174
+ *
175
+ * Accepts: `prefix` — the configured key prefix, ending in `/`. `parts` —
176
+ * the row's identifiers; `[]` yields the prefix alone.
177
+ *
178
+ * Returns: the prefix plus the encoded parts joined by `/`, carrying neither
179
+ * `.bin` nor a trailing `/`.
180
+ *
181
+ * Throws: nothing.
182
+ */
183
+ export declare function s3KeyScope(prefix: string, parts: readonly string[]): string;
184
+ /**
185
+ * Whether `key` lies inside the path `parts` produce.
186
+ *
187
+ * Accepts: `key` — a key read back from a row, or one this package built.
188
+ * `parts` — the row's leading identifiers; `[]` degrades to a prefix-only
189
+ * check.
190
+ *
191
+ * Returns: true when the key continues below the scope (`<scope>/…`, which is
192
+ * every key this release writes, since the write's object id is one segment
193
+ * deeper) or equals it (`<scope>.bin`, the key of a store item offloaded by a
194
+ * release that gave the key no per-write segment).
195
+ *
196
+ * Throws: nothing.
197
+ *
198
+ * Guarantees: an identifier sharing a leading substring with another (`t` and
199
+ * `t1`) never matches its scope — the parts are base64url-encoded and joined
200
+ * by `/`, so the comparison is segment-wise, not textual.
201
+ */
202
+ export declare function isKeyInScope(key: string, prefix: string, parts: readonly string[]): boolean;
203
+ /**
204
+ * Refuse a row-sourced `s3Key` outside the path the row's own identifiers
205
+ * produce.
206
+ *
207
+ * Accepts: as {@link isKeyInScope}.
208
+ *
209
+ * Returns: nothing: `key` is kept under its declared type, and this checks it
210
+ * against the scope `prefix` and `parts` compose.
211
+ *
212
+ * Throws: `VALIDATION` naming `s3Key`, quoting the key and the path the
213
+ * row may reference, each bounded by {@link truncateForLog}: the key comes off
214
+ * the row and the path is composed from an `s3.keyPrefix` checked for shape
215
+ * and never for length, so neither is bounded by anything this package ran.
216
+ * The key stays named — a bounded prefix still says which object to go and
217
+ * look at. It reaches the caller on all three adapters, including
218
+ * `history.getMessages` under `onCorruptMessage: 'skip'`, because
219
+ * `isPermanentPayloadLoss` does **not** classify it — an out-of-scope key is
220
+ * not the same kind of thing as an unreadable descriptor. An unreadable
221
+ * descriptor condemns the payload itself: nobody can read those bytes, so
222
+ * skipping the row loses nothing that was ever retrievable. An out-of-scope
223
+ * key says only that *this* reader may not follow it — the object is very
224
+ * likely intact, under the prefix that does own it — and what produced it is a
225
+ * `keyPrefix` pointed at the wrong place, a table shared with another tenant,
226
+ * or a planted row. Every one of those is a condition an operator must see and
227
+ * can fix. Classifying it as loss made only `history` answer with a silently
228
+ * shorter conversation — the one adapter that consults the classifier — which
229
+ * the chain then re-persisted as the truth, while the store and the saver
230
+ * raised on the same row. A short answer is the one failure a caller cannot
231
+ * detect, and one row shape must not mean two things across three adapters.
232
+ *
233
+ * Guarantees: a row is trusted for its shape, never for the object it points
234
+ * at. A writer able to place one row in a partition cannot make this library
235
+ * download or delete another tenant's object, nor make it quietly return less.
236
+ */
237
+ export declare function assertKeyInScope(key: string, prefix: string, parts: readonly string[]): void;
238
+ /** The adapters that share one bucket, each under its own default key prefix. */
239
+ export type AdapterName = 'checkpointer' | 'store' | 'history';
240
+ /**
241
+ * An adapter's `s3` option resolved into the offloader's configuration.
242
+ *
243
+ * Accepts: `s3` — as the caller gave it. `adapter` — names the default key
244
+ * prefix, so three adapters sharing one bucket do not share a path.
245
+ * `clientConfig` — the adapter's DynamoDB client config, read for its region
246
+ * only.
247
+ *
248
+ * Returns: `s3` with `keyPrefix` defaulted to the adapter's own path, and
249
+ * `clientConfig.region` filled in from the DynamoDB side when the S3 config
250
+ * names none. With no region on either side the field is left absent and the
251
+ * SDK resolves it from the environment.
252
+ *
253
+ * Throws: nothing.
254
+ *
255
+ * Guarantees: a bucket reachable only through the region the DynamoDB side was
256
+ * configured with is addressed in that region. The S3 SDK does not follow
257
+ * region redirects, so such a bucket otherwise failed with an opaque
258
+ * `PermanentRedirect` on the first offload.
259
+ */
260
+ export declare function offloaderConfigFor(s3: S3OffloadConfig, adapter: AdapterName, clientConfig?: DynamoDBClientConfig): S3OffloadConfig;
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_S3_KEY_BYTES = exports.DEFAULT_S3_KEY_PREFIX = void 0;
4
+ exports.encodeKeyPart = encodeKeyPart;
5
+ exports.buildS3Key = buildS3Key;
6
+ exports.assertScopedKeyPrefix = assertScopedKeyPrefix;
7
+ exports.buildLifecycleRuleId = buildLifecycleRuleId;
8
+ exports.buildMarkerRuleId = buildMarkerRuleId;
9
+ exports.defaultAdapterKeyPrefix = defaultAdapterKeyPrefix;
10
+ exports.s3KeyScope = s3KeyScope;
11
+ exports.isKeyInScope = isKeyInScope;
12
+ exports.assertKeyInScope = assertKeyInScope;
13
+ exports.offloaderConfigFor = offloaderConfigFor;
14
+ const errors_js_1 = require("../../errors/errors.js");
15
+ const truncate_js_1 = require("../../logging/truncate.js");
16
+ const primitives_js_1 = require("../../validation/primitives.js");
17
+ const client_types_js_1 = require("./client-types.js");
18
+ exports.DEFAULT_S3_KEY_PREFIX = 'langgraph-checkpoints/';
19
+ exports.MAX_S3_KEY_BYTES = 1024;
20
+ function encodeKeyPart(part) {
21
+ return Buffer.from(part, 'utf8').toString('base64url');
22
+ }
23
+ function buildS3Key(prefix, parts, objectId) {
24
+ if (parts.length === 0) {
25
+ throw (0, errors_js_1.validationError)('an offloaded object needs the identity of the row that points at it; parts was empty', 's3Key');
26
+ }
27
+ const encoded = [...parts.map(encodeKeyPart), objectId];
28
+ const key = `${prefix}${encoded.join('/')}.bin`;
29
+ const bytes = Buffer.byteLength(key, 'utf8');
30
+ if (bytes > exports.MAX_S3_KEY_BYTES) {
31
+ throw (0, errors_js_1.validationError)(`the offloaded S3 object key would be ${bytes} bytes; S3 caps keys at ` +
32
+ `${exports.MAX_S3_KEY_BYTES} — shorten the identifiers or the keyPrefix`, 's3Key');
33
+ }
34
+ return key;
35
+ }
36
+ const UNSCOPED_SEGMENTS = new Set(['', '.', '..']);
37
+ function assertScopedKeyPrefix(keyPrefix) {
38
+ if (typeof keyPrefix !== 'string' ||
39
+ keyPrefix === '' ||
40
+ keyPrefix === '/' ||
41
+ !keyPrefix.endsWith('/')) {
42
+ throw (0, errors_js_1.validationError)('s3.keyPrefix must be a non-empty path that ends with "/" (for example "langgraph/"): ' +
43
+ 'it scopes both the offloaded objects and the S3 lifecycle rule', 's3.keyPrefix');
44
+ }
45
+ (0, primitives_js_1.assertNoControlChars)(keyPrefix, 's3.keyPrefix');
46
+ (0, primitives_js_1.assertWellFormed)(keyPrefix, 's3.keyPrefix');
47
+ if (keyPrefix
48
+ .slice(0, -1)
49
+ .split('/')
50
+ .some((segment) => UNSCOPED_SEGMENTS.has(segment))) {
51
+ throw (0, errors_js_1.validationError)('s3.keyPrefix must name a real path: no empty, "." or ".." segment (for example ' +
52
+ '"langgraph/", not "../langgraph/" or "/langgraph/"). Such a prefix addresses object ' +
53
+ 'keys outside the path the IAM policy grants and the lifecycle rule sweeps', 's3.keyPrefix');
54
+ }
55
+ }
56
+ function buildLifecycleRuleId(prefix) {
57
+ let trimmed = prefix;
58
+ while (trimmed.endsWith('/'))
59
+ trimmed = trimmed.slice(0, -1);
60
+ const slug = trimmed.replace(/[^a-zA-Z0-9-]/g, '-') || 'default';
61
+ return `langgraph-ttl-${slug}`;
62
+ }
63
+ function buildMarkerRuleId(prefix) {
64
+ return `${buildLifecycleRuleId(prefix)}-markers`;
65
+ }
66
+ function defaultAdapterKeyPrefix(base, adapter) {
67
+ return `${base}${adapter}/`;
68
+ }
69
+ function s3KeyScope(prefix, parts) {
70
+ return `${prefix}${parts.map(encodeKeyPart).join('/')}`;
71
+ }
72
+ function isKeyInScope(key, prefix, parts) {
73
+ const scope = s3KeyScope(prefix, parts);
74
+ if (parts.length === 0)
75
+ return key.startsWith(scope);
76
+ return key === `${scope}.bin` || key.startsWith(`${scope}/`);
77
+ }
78
+ function assertKeyInScope(key, prefix, parts) {
79
+ if (isKeyInScope(key, prefix, parts))
80
+ return;
81
+ throw (0, errors_js_1.validationError)(`s3Key "${(0, truncate_js_1.truncateForLog)(key)}" lies outside the S3 path this row may reference ` +
82
+ `("${(0, truncate_js_1.truncateForLog)(s3KeyScope(prefix, parts))}"); refusing to touch an object the row ` +
83
+ 'does not own', 's3Key');
84
+ }
85
+ function offloaderConfigFor(s3, adapter, clientConfig) {
86
+ const region = (0, client_types_js_1.s3ClientOptions)(s3.clientConfig).region ?? clientConfig?.region;
87
+ return {
88
+ ...s3,
89
+ keyPrefix: s3.keyPrefix ?? defaultAdapterKeyPrefix(exports.DEFAULT_S3_KEY_PREFIX, adapter),
90
+ ...(region === undefined ? {} : { clientConfig: { ...s3.clientConfig, region } }),
91
+ };
92
+ }
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Hides the bucket lifecycle configuration this package maintains.
3
+ *
4
+ * Two rules per prefix — one expiring objects a day after the ttl plus the
5
+ * sweep margin and keeping a released payload's noncurrent version for a
6
+ * grace window, one reclaiming expired delete markers — are written beside
7
+ * whatever else the read that built the write showed, rewritten only when
8
+ * they differ. A lifecycle GET carries no version, so a later read can show
9
+ * less than an earlier one; a rule that read does not show — this package's
10
+ * own included — is dropped by the write built from it. This is followed by
11
+ * a report of whether the bucket keeps versions at all.
12
+ */
13
+ import type { LifecycleRule, S3Client } from '@aws-sdk/client-s3';
14
+ import type { Logger } from '../../logging/logger.js';
15
+ /**
16
+ * Days a released payload's noncurrent version survives behind its delete
17
+ * marker before S3 reclaims it. One day is the smallest the lifecycle API
18
+ * accepts and it rounds up to the next UTC midnight, so the window is 24-48 h:
19
+ * long enough to restore a payload released in error, short enough that a
20
+ * versioned bucket does not pay for every release it has ever made. It is a
21
+ * floor and never a cap — a longer retention the bucket already carries is
22
+ * kept, because this package has no business shortening someone else's
23
+ * recovery window. Inert on an unversioned bucket, which has no noncurrent
24
+ * versions to expire.
25
+ */
26
+ export declare const S3_RELEASE_GRACE_DAYS = 1;
27
+ /** The rules to ensure: on which bucket, for which prefix, expiring after how many days. */
28
+ export interface LifecycleTarget {
29
+ readonly bucket: string;
30
+ readonly prefix: string;
31
+ readonly days: number;
32
+ }
33
+ /** Rounds {@link ensureLifecycleRule} polls before it reports a writer it cannot outlast. */
34
+ export declare const LIFECYCLE_SETTLE_WRITES = 5;
35
+ /** How {@link ensureLifecycleRule} waits between re-reads; a test passes one that takes no time. */
36
+ export interface LifecyclePace {
37
+ wait?: (delayMs: number) => Promise<void>;
38
+ }
39
+ /**
40
+ * Ensure the two rules scoped to `target.prefix` exist on `target.bucket`: a
41
+ * `target.days`-day expiration for current versions, and the reclaim that
42
+ * removes the delete marker a released payload leaves behind.
43
+ *
44
+ * Accepts: `target.prefix` — re-checked for scoping here, because these rules
45
+ * are the one place an unscoped prefix would destroy data outside this
46
+ * library's. `target.days` — the current-version expiry only. Released
47
+ * versions are governed by the release grace instead (see {@link ttlRule}),
48
+ * which is a floor measured against every rule already governing these keys.
49
+ * Both are inert on an unversioned bucket, which keeps no noncurrent version
50
+ * and leaves no marker. `pace.wait` — how to wait between re-reads; the
51
+ * default sleeps.
52
+ *
53
+ * Returns: nothing. Idempotent: when both rules already say this, no write is
54
+ * issued. Otherwise it writes them, waits, and re-reads. A bucket's
55
+ * configuration is served eventually consistently rather than
56
+ * read-your-writes
57
+ * (https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html, "Amazon
58
+ * S3 data consistency model": "Bucket configurations have an eventual
59
+ * consistency model"), and S3 documents specifically that a lifecycle
60
+ * configuration can take a few minutes to fully propagate
61
+ * (https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html,
62
+ * "Lifecycle configuration propagation delay"). So a re-read that still shows
63
+ * the same rules — by id and the fields this comparison examines — as the
64
+ * read behind this call's last write is treated as that lag, not as loss, and
65
+ * prompts another wait rather than another write; a re-read that instead
66
+ * shows some *other* configuration, still without this call's rules, is a
67
+ * competing writer, and the rules are written again, merged with whatever
68
+ * that read now holds. The waits (1, 2, 4, 8 s) and the five-round limit are
69
+ * this library's own polling policy — a choice, not a bound AWS documents.
70
+ * `CONTENTION` is reserved for a writer this call never once found the bucket
71
+ * at rest for: it fires only when every one of the five rounds needs a
72
+ * write, meaning no re-read this call took ever agreed with the one before
73
+ * it. A last round that writes without reaching that count, or that finds
74
+ * only lag, ends the same way instead — a `warn` and a normal return: the
75
+ * rules were written, only their visibility could not be confirmed here, and
76
+ * a later call (or the same one, run again after a few minutes) can still
77
+ * find them settled. The bucket's versioning state is reported on every exit
78
+ * the loop itself chooses — settled, lag, a late rival, or `CONTENTION` —
79
+ * because the containment a released payload depends on is missing or
80
+ * present regardless of how this call ended. A read or write failure, or a
81
+ * `VALIDATION` `planRules` raises from a re-read, propagates directly instead
82
+ * and skips it, the same as it would skip any other cleanup this never got
83
+ * to.
84
+ *
85
+ * Throws: `VALIDATION` naming `s3.keyPrefix` for an unscoped prefix, or when
86
+ * either rule id this prefix produces is already held by a different prefix
87
+ * (see {@link assertNoIdCollision}); `CONTENTION` when every one of the five
88
+ * rounds this call polls needs a write — a competing writer replacing the
89
+ * configuration on every single re-read, never once leaving it long enough
90
+ * for lag alone to explain what this call sees; otherwise whatever the SDK
91
+ * rejects with. A bucket with no lifecycle configuration at all is not an
92
+ * error — S3 reports `NoSuchLifecycleConfiguration` and this starts from an
93
+ * empty rule set.
94
+ *
95
+ * Guarantees: a write carries forward whatever its own read showed — every
96
+ * rule this package did not add or replace, and the bucket-level
97
+ * `TransitionDefaultMinimumObjectSize` — because a Put replaces the whole
98
+ * configuration and dropping either would silently reset the bucket. That
99
+ * guarantee is only as good as the read, though: a lifecycle GET carries no
100
+ * version, so a later read can show less than an earlier one, and a rule —
101
+ * this package's own included — that a write's own read does not show is
102
+ * dropped by that write, whether or not it is genuinely still on the bucket.
103
+ * Building each write from a read taken right before it, rather than from a
104
+ * plan an earlier wait left stale, narrows this without closing it: a rule a
105
+ * competing writer added is carried forward when this call's own next
106
+ * re-read happens to show it, and lost when a still staler one does not.
107
+ * None of this reaches a *different* call's own first read either: run
108
+ * provisioning calls one at a time, and when more than one adapter or
109
+ * process shares a bucket, re-run each after a few minutes once every one of
110
+ * them has run.
111
+ */
112
+ export declare function ensureLifecycleRule(client: S3Client, target: LifecycleTarget, logger: Logger, pace?: LifecyclePace): Promise<void>;
113
+ /** The rule to build: its id, its prefix, and the days after which current versions expire. */
114
+ interface RuleTarget {
115
+ readonly id: string;
116
+ readonly prefix: string;
117
+ readonly days: number;
118
+ }
119
+ /**
120
+ * The rule that expires current versions on the TTL's schedule and released
121
+ * ones on the grace.
122
+ *
123
+ * Accepts: `rules` — everything the bucket holds, which is what the grace is
124
+ * measured against. `existing` — the rule this one replaces, if any.
125
+ *
126
+ * Returns: the rule to write. Every field of `existing` this package does not
127
+ * manage is carried through, because the rewrite a changed TTL triggers is
128
+ * otherwise unrecoverable: the next call reads the rewritten rule as already
129
+ * correct and never restores what it dropped.
130
+ *
131
+ * Throws: nothing.
132
+ *
133
+ * Guarantees: the `Expiration` is replaced rather than merged. Merging this
134
+ * package's `Days` into a `Date` an operator set would change the expiry they
135
+ * configured, whatever the service made of the pair.
136
+ */
137
+ export declare function ttlRule(rule: RuleTarget, rules: readonly LifecycleRule[], existing?: LifecycleRule): LifecycleRule;
138
+ /**
139
+ * The rule that reclaims the delete marker a release leaves, once its last
140
+ * noncurrent version has expired.
141
+ *
142
+ * Accepts: `existing` — the rule this one replaces, if any.
143
+ *
144
+ * Returns: the rule to write, a second one rather than a field on the TTL
145
+ * rule: S3 refuses `ExpiredObjectDeleteMarker` inside an `Expiration` that
146
+ * also carries `Days`, so each rule's `Expiration` holds its own half and
147
+ * nothing of the other's. Fields this package does not manage are carried
148
+ * through as they are on the TTL rule — this id is one this package invented,
149
+ * but that is no reason to drop what an operator has since put on it.
150
+ *
151
+ * Throws: nothing.
152
+ */
153
+ export declare function markerRule(id: string, prefix: string, existing?: LifecycleRule): LifecycleRule;
154
+ /**
155
+ * Refuse to touch a rule that carries one of this prefix's ids but scopes a
156
+ * different prefix. Three shapes reach here: slugging maps every
157
+ * non-alphanumeric character to `-`, so `app/langgraph/` and `app-langgraph/`
158
+ * produce one id; the marker rule appends `-markers`, so `app/`'s marker id is
159
+ * the expiration id of `app-markers/`; and a rule written in the older schema
160
+ * holds an id this package would take while naming its scope in the top-level
161
+ * `Prefix`.
162
+ *
163
+ * Accepts: `rule` — the rule holding `id`, or nothing. `prefix` — the one this
164
+ * call scopes rules to.
165
+ *
166
+ * Returns: nothing: `rule` is kept under its declared type, and this checks
167
+ * it. A rule naming no scope anywhere is taken over, and so is one already
168
+ * scoping this prefix — including in the older schema, which is then upgraded
169
+ * to a filter.
170
+ *
171
+ * Throws: `VALIDATION` naming `s3.keyPrefix`. The id and the scope are
172
+ * both bounded by {@link truncateForLog}: the scope is whatever the bucket's
173
+ * lifecycle configuration holds, and the id is composed from an
174
+ * `s3.keyPrefix` checked for shape and never for length.
175
+ *
176
+ * Guarantees: the scope is read wherever the rule names it, through the same
177
+ * {@link scopeOf} the floor uses. Reading only `Filter.Prefix` would let a
178
+ * rule in the older schema through, and the rewrite would then replace its
179
+ * scope with this one's — so the objects that rule governs would silently
180
+ * lose their expiration, and a bucket-wide rule would narrow to this prefix.
181
+ */
182
+ export declare function assertNoIdCollision(rule: LifecycleRule | undefined, prefix: string, id: string): void;
183
+ /**
184
+ * Whether the rule the bucket carries already says what would be written.
185
+ *
186
+ * Accepts: `existing` — the held rule, or nothing. `desired` — what a write
187
+ * would put there.
188
+ *
189
+ * Returns: whether a write can be skipped. A rule in the older schema never
190
+ * matches, because it names its prefix somewhere this does not read, so it is
191
+ * rewritten once into a filter and matches from then on.
192
+ *
193
+ * Throws: nothing.
194
+ */
195
+ export declare function alreadyCorrect(existing: LifecycleRule | undefined, desired: LifecycleRule): boolean;
196
+ /**
197
+ * Report whether `bucket` keeps versions, which is the whole of the recovery
198
+ * window behind a released payload.
199
+ *
200
+ * Accepts: `bucket` — the offload bucket. `logger` — the adapter's; silent by
201
+ * default, like every other event this package emits.
202
+ *
203
+ * Returns: nothing. A versioned bucket is silent; the other two states warn
204
+ * and name their own remedy, because those remedies differ — a bucket that
205
+ * never had versioning needs it enabled, while a suspended one needs it
206
+ * re-enabled *and* an accounting of what suspension has already destroyed.
207
+ *
208
+ * Throws: nothing, deliberately. A failure of the call itself is a `warn` too,
209
+ * including the `AccessDenied` of a role that provisioned lifecycle rules
210
+ * yesterday without this action: a permission the call did not need then must
211
+ * not break it now. This runs after the rules are written for the same reason
212
+ * — a bucket that cannot answer still gets them.
213
+ *
214
+ * Guarantees: a bucket that has never been versioned answers with an empty
215
+ * body, so the absent state is `Status === undefined`. It is never the string
216
+ * `'Disabled'`, which this API does not return, and testing for one would read
217
+ * an unversioned bucket as a versioned one.
218
+ */
219
+ export declare function reportBucketVersioning(client: S3Client, bucket: string, logger: Logger): Promise<void>;
220
+ export {};