@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,317 @@
1
+ /**
2
+ * Hides when and how a failed request is retried (record 14).
3
+ *
4
+ * Which failures are transient — read from an error's whole cause chain, its
5
+ * HTTP status and its retryable trait, and from a cancelled transaction's
6
+ * reasons — the full-jitter backoff schedule, the attempt budget and the
7
+ * deadline that can cut it short, and the policy an adapter resolves from its
8
+ * options at construction are one decision. Every DynamoDB call goes through
9
+ * it, and so does an S3 object upload and download; the bucket lifecycle calls
10
+ * (`maxAttempts: 1` on the S3 client) and orphan release, which retries on its
11
+ * own loop, do not.
12
+ */
13
+ import type { Logger } from '../logging/logger.js';
14
+ /** Starting delay for UnprocessedItems / UnprocessedKeys backoff loops. */
15
+ export declare const INITIAL_BACKOFF_DELAY_MS = 100;
16
+ /** Maximum backoff delay for retry loops. */
17
+ export declare const MAX_BACKOFF_DELAY_MS = 5000;
18
+ /** Default maximum attempts for transient-error retries. */
19
+ export declare const DEFAULT_RETRY_MAX_ATTEMPTS = 5;
20
+ /**
21
+ * How long DynamoDB treats a repeated client request token as the same request
22
+ * rather than a new one, so re-sending a tokened write is deduplicated instead
23
+ * of applied twice (10 minutes). Recorded as its own constant so the margin
24
+ * {@link MAX_WRITE_LIFETIME_MS} keeps under it is legible.
25
+ */
26
+ export declare const TOKEN_IDEMPOTENCY_WINDOW_MS = 600000;
27
+ /**
28
+ * Longest one token-carrying write may keep retrying (5 minutes): half of
29
+ * {@link TOKEN_IDEMPOTENCY_WINDOW_MS}. The other half absorbs the attempt
30
+ * still in flight when the budget ends, clock skew between this client's own
31
+ * clock and DynamoDB's timer, and SDK-internal queueing, so a write that
32
+ * retries to the end still finishes well inside the window its token is
33
+ * honoured for. Its own literal rather than a division of the window:
34
+ * aliasing them would move one whenever the other is retuned (see
35
+ * `LIST_SCAN_WARN_THRESHOLD` (`src/shared/dynamodb/paginate.ts`)).
36
+ */
37
+ export declare const MAX_WRITE_LIFETIME_MS = 300000;
38
+ /**
39
+ * The per-request options one attempt hands to the SDK call it makes.
40
+ *
41
+ * It is the AWS SDK's own second argument (`HttpHandlerOptions` from
42
+ * `@smithy/types`) narrowed to the single field this library sets, so a call
43
+ * site forwards the value it was given instead of assembling one — the
44
+ * difference between `client.get(params, request)` at every site and thirty
45
+ * chances to write `{ signal }` where the SDK reads `abortSignal`.
46
+ *
47
+ * `DynamoDBDocumentLike` picks its members off the real `DynamoDBDocument`, so
48
+ * every method already accepts this as its optional second argument and no
49
+ * type had to move to make room for it.
50
+ */
51
+ export interface SdkRequestOptions {
52
+ abortSignal?: AbortSignal;
53
+ }
54
+ /** What {@link RetryOptions.onRetry} learns before each backoff sleep. */
55
+ export interface RetryAttemptInfo {
56
+ attempt: number;
57
+ delayMs: number;
58
+ error: Error;
59
+ }
60
+ /**
61
+ * How a failed request is retried: how many attempts, how long each wait, and
62
+ * which failures qualify.
63
+ */
64
+ export interface RetryOptions {
65
+ maxAttempts?: number;
66
+ baseDelayMs?: number;
67
+ maxDelayMs?: number;
68
+ retryableErrors?: readonly string[];
69
+ /**
70
+ * Decides retryability instead of `retryableErrors`: called with each failed
71
+ * attempt's error, it retries when it returns `true`.
72
+ */
73
+ isRetryable?: (error: Error) => boolean;
74
+ /** Called before every backoff sleep, so retries are visible before the budget is exhausted. */
75
+ onRetry?: (info: RetryAttemptInfo) => void;
76
+ signal?: AbortSignal;
77
+ rng?: () => number;
78
+ }
79
+ /**
80
+ * The cap a backoff schedule runs under.
81
+ *
82
+ * Accepts: `baseDelayMs` — the schedule's first delay, already defaulted.
83
+ * `maxDelayMs` — the cap the caller named, if it named one.
84
+ *
85
+ * Returns: the named cap; without one, {@link MAX_BACKOFF_DELAY_MS} raised to
86
+ * a base above it.
87
+ *
88
+ * Throws: nothing.
89
+ *
90
+ * Guarantees: a base delay given without a cap is the delay the schedule
91
+ * starts from. Held under the default cap it would be cut to five seconds on
92
+ * every sleep: an option accepted and then ignored.
93
+ */
94
+ export declare function backoffCapMs(baseDelayMs: number, maxDelayMs: number | undefined): number;
95
+ /**
96
+ * Run `fn`, retrying transient failures with full-jitter exponential backoff.
97
+ *
98
+ * Accepts: `fn` — given the {@link SdkRequestOptions} for the attempt, to pass
99
+ * as the second argument of the SDK call it makes. That argument is what
100
+ * carries `options.signal` into the request, and it is the only way a call
101
+ * site can: `fn` closes over its own parameters, so nothing else reaches it.
102
+ * An `fn` that makes no cancellable call ignores the parameter and is written
103
+ * exactly as it was, since a zero-argument function still satisfies the type.
104
+ *
105
+ * Accepts: `options.maxAttempts` — total attempts including the first, default
106
+ * {@link DEFAULT_RETRY_MAX_ATTEMPTS}; at least 1, which `assertRetryPolicy`
107
+ * enforces for every caller-supplied policy. `options.baseDelayMs` /
108
+ * `maxDelayMs` — the backoff schedule, its cap defaulted by
109
+ * {@link backoffCapMs}. `options.isRetryable` — replaces
110
+ * `retryableErrors` entirely, so a call site can share one classifier with
111
+ * paths that do not go through here. `options.signal` — checked before the
112
+ * first attempt, handed to every attempt as `abortSignal` so the request in
113
+ * flight is cancelled rather than merely awaited, checked again when an
114
+ * attempt fails, and honoured during every backoff wait. `options.onRetry` —
115
+ * called synchronously before each wait; an exception from it is not caught
116
+ * and ends the operation. `options.deadlineAt` — an internal bound on the
117
+ * whole budget rather than on one attempt: the wait that would carry the
118
+ * operation past it is never started, and the budget ends there instead.
119
+ * Without it the schedule, the attempt count and every error are unchanged.
120
+ *
121
+ * Returns: whatever `fn` resolves to, from the first attempt that succeeds.
122
+ *
123
+ * Throws: the error itself, unchanged, when it is not retryable — a
124
+ * `ValidationException` or a permission failure is never retried;
125
+ * `ABORTED` when the signal fires, including during a wait and
126
+ * including while a request is in flight — the SDK rejects the cancelled
127
+ * request with an error of its own, and a failed attempt whose signal has
128
+ * fired is reported as the cancel it is rather than being classified, retried
129
+ * or wrapped; `RETRY_EXHAUSTED` once the budget ends, carrying the attempt
130
+ * actually reached — not the attempts configured — and the last error as
131
+ * `cause`. Its message quotes the last error **redacted**, because it reaches
132
+ * `err.message`, which an application may print without a redacting logger.
133
+ * That error also records, for `mayStillLand` to read back
134
+ * (`retryBudgetMayStillLand`), whether *any* attempt of the budget — not only
135
+ * the last — left DynamoDB free to apply it later: one that ended on this
136
+ * side before an answer, one DynamoDB answered `TransactionInProgressException`
137
+ * to (its own earlier attempt under the same token still being processed), or
138
+ * one it answered with a server error (see `mayStillBeInFlight`). An attempt
139
+ * answered some other way settles nothing by itself, whatever attempt beside
140
+ * it did.
141
+ *
142
+ * A deadline that ends the budget is reported exactly as a spent one, by the
143
+ * same error with the same code: a caller cannot tell the two apart, and
144
+ * nothing needs to, since the handling of both is identical — read the row
145
+ * back, and release only what is confirmed not to have landed.
146
+ *
147
+ * A cancelled wait is also an abort no longer observed. The signal is read
148
+ * before the first attempt, after every failed one, and inside each wait, so
149
+ * ending the budget in place of a wait drops only that last observation point:
150
+ * a signal that fires *after* the deadline has already refused the wait, in
151
+ * the window where the wait would have been running, surfaces as
152
+ * `RETRY_EXHAUSTED` rather than `ABORTED`. One already set
153
+ * at entry, fired during an attempt, or fired during an earlier wait, is still
154
+ * caught.
155
+ *
156
+ * Guarantees: `fn` is called at most `maxAttempts` times, and at least once
157
+ * unless the signal was already aborted at entry, when it is not called at
158
+ * all. A thrown non-`Error` is wrapped, so what a caller catches is always an
159
+ * `Error`.
160
+ */
161
+ export declare function withRetry<T>(fn: (request: SdkRequestOptions) => Promise<T>, options?: RetryOptions): Promise<T>;
162
+ /**
163
+ * {@link withRetry} with this package's DynamoDB defaults.
164
+ *
165
+ * Accepts: `overrides` — merged over `maxAttempts:`
166
+ * {@link DEFAULT_RETRY_MAX_ATTEMPTS}, so an adapter's resolved policy wins.
167
+ *
168
+ * Returns: as {@link withRetry}.
169
+ *
170
+ * Throws: as {@link withRetry}.
171
+ */
172
+ export declare function withDynamoDBRetry<T>(fn: (request: SdkRequestOptions) => Promise<T>, overrides?: Partial<RetryOptions>): Promise<T>;
173
+ /**
174
+ * Whether `error`, or any cause in its chain, is transient.
175
+ *
176
+ * Accepts: `error` — an `Error`; its `cause` chain is walked to
177
+ * {@link MAX_CAUSE_DEPTH}, and a cycle in it terminates the walk rather than
178
+ * looping. Anything else a `throw` can produce carries no node to walk and is
179
+ * not retryable. `retryableErrors` — the signal tokens to match; an empty list
180
+ * still admits the trait and status rules below.
181
+ *
182
+ * Returns: true when any of these holds, in this order —
183
+ * 1. the error is a transaction cancellation and **every** reason it carries is
184
+ * transient. This verdict is final either way: a permanent reason arrives
185
+ * with the same HTTP status as a transient one, so the later rules cannot be
186
+ * allowed to overturn it. A cancellation carrying no reasons is not retried.
187
+ * 2. any node carries the SDK's `$retryable` trait, or is a signing failure
188
+ * the SDK corrected its clock for or reports expired (`isCorrectedClockSkew`);
189
+ * 3. any node's HTTP status is in {@link TRANSIENT_HTTP_STATUSES} — which is
190
+ * what classifies a failure the SDK could not map to a modeled exception,
191
+ * arriving as `name: 'Unknown'` with only a status;
192
+ * 4. any node's `name`, `code`, `errno` or `syscall` equals a token in
193
+ * `retryableErrors`.
194
+ *
195
+ * The token match is exact, never substring: these fields are whole tokens, and
196
+ * a substring rule would let an unrelated name that merely contains one ride
197
+ * along.
198
+ *
199
+ * Throws: **nothing**, for any value a `throw` can produce — see
200
+ * {@link transientCancellation}, which the first rule reads through.
201
+ */
202
+ export declare function isRetryableError(error: Error, retryableErrors: readonly string[]): boolean;
203
+ /**
204
+ * Caller-facing retry tunables for every DynamoDB call an adapter makes. The
205
+ * schedule is full-jitter exponential backoff: `baseDelayMs` doubling per
206
+ * attempt, capped at `maxDelayMs`, for `maxAttempts` attempts. The
207
+ * message-append path never goes below its own contention floor.
208
+ */
209
+ export interface RetryPolicy {
210
+ /** Attempts per call before `RETRY_EXHAUSTED` (default 5). */
211
+ maxAttempts?: number;
212
+ /** First backoff delay in milliseconds (default 100). */
213
+ baseDelayMs?: number;
214
+ /**
215
+ * Cap on a single backoff delay in milliseconds (default 5000, or
216
+ * `baseDelayMs` when that is given above it).
217
+ */
218
+ maxDelayMs?: number;
219
+ }
220
+ /**
221
+ * Resolve an adapter's retry policy once, at construction.
222
+ *
223
+ * Accepts: `policy` — the caller's, already validated, or nothing. `logger` —
224
+ * the adapter's resolved logger.
225
+ *
226
+ * Returns: the options every DynamoDB call of that adapter uses, with each
227
+ * field defaulted and the logger attached, so every retry is visible at `debug`
228
+ * (the attempt, the delay about to be slept, the error's name) instead of only
229
+ * surfacing once the budget is exhausted.
230
+ *
231
+ * Accepts: `attemptFloor` — the lowest attempt count this adapter will actually
232
+ * use, when it raises a caller's below its own. The budget is warned about at
233
+ * that number rather than at the caller's, because it is the one the writes
234
+ * will really spend; an adapter that honours the caller's count passes none.
235
+ *
236
+ * Throws: nothing; the policy was validated where it was given. A policy whose
237
+ * nominal budget outlives {@link MAX_WRITE_LIFETIME_MS} is warned about rather
238
+ * than refused, once per adapter constructed — three adapters built from one
239
+ * long policy each say so for themselves — see
240
+ * {@link warnIfOutlivesWriteLifetime}. The defaults are far inside it and say
241
+ * nothing.
242
+ */
243
+ export declare function resolveRetryPolicy(policy: RetryPolicy | undefined, logger: Logger, attemptFloor?: number): RetryOptions;
244
+ /**
245
+ * The context's retry options plus a per-call cancellation signal.
246
+ *
247
+ * Accepts: `context.retry` — the adapter's resolved policy. `signal` — the
248
+ * caller's, when the call takes one.
249
+ *
250
+ * Returns: the adapter's options untouched when there is no signal — the same
251
+ * object, so no per-call allocation on the common path — and a copy carrying it
252
+ * when there is.
253
+ *
254
+ * Throws: nothing.
255
+ */
256
+ export declare function retryFor(context: {
257
+ retry?: RetryOptions;
258
+ }, signal?: AbortSignal): RetryOptions | undefined;
259
+ /**
260
+ * Wait `ms` milliseconds, cancellable.
261
+ *
262
+ * Accepts: `ms` — the delay. `signal` — omitted waits uninterruptibly; already
263
+ * aborted rejects before any timer is set; aborting while pending rejects at
264
+ * that moment and clears the timer.
265
+ *
266
+ * Returns: a promise resolving when the delay elapses.
267
+ *
268
+ * Throws: an `ABORTED` error however the signal was aborted —
269
+ * with a `DOMException`, a string or a custom reason (see
270
+ * {@link abortErrorFrom}).
271
+ *
272
+ * Guarantees: exactly one of resolve and reject runs, and neither the timer nor
273
+ * the abort listener outlives the call. The listener is attached before the
274
+ * timer is armed, so a signal whose `addEventListener` throws rejects the wait
275
+ * with nothing left behind — armed first, the timer outlived that rejection
276
+ * and later called `removeEventListener` outside any promise. A listener that
277
+ * runs while it is being attached settles the wait before any timer exists.
278
+ */
279
+ export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
280
+ /**
281
+ * The next exponential-backoff delay.
282
+ *
283
+ * Accepts: `currentMs` — the delay just used; at least 1, since doubling 0
284
+ * never grows. `maxMs` — the ceiling, default {@link MAX_BACKOFF_DELAY_MS}.
285
+ *
286
+ * Returns: `min(currentMs * 2, maxMs)`.
287
+ *
288
+ * Throws: nothing.
289
+ */
290
+ export declare function nextBackoffDelay(currentMs: number, maxMs?: number): number;
291
+ /**
292
+ * AWS's full jitter over a backoff delay.
293
+ *
294
+ * Accepts: `delayMs` — the unjittered delay. `rng` — a seam returning
295
+ * `[0, 1)`, default `Math.random`; tests inject a fixed one.
296
+ *
297
+ * Returns: a value in `[0, delayMs)`, so two clients retrying the same failure
298
+ * do not retry together
299
+ * (https://aws.amazon.com/builders-library/timeouts-retries-and-backoff-with-jitter/).
300
+ *
301
+ * Throws: nothing.
302
+ */
303
+ export declare function fullJitter(delayMs: number, rng?: () => number): number;
304
+ /**
305
+ * Whether `error` is a transient S3 failure worth retrying.
306
+ *
307
+ * Accepts: `error` — any error, including one carrying no name or code, and
308
+ * equally anything else a `throw` can produce.
309
+ *
310
+ * Returns: {@link isRetryableError} over the shared default tokens, which hold
311
+ * S3's own transient names (`SlowDown`, `InternalError`,
312
+ * `ConditionalRequestConflict`) alongside DynamoDB's — one list, so the two
313
+ * services cannot drift apart on what is transient.
314
+ *
315
+ * Throws: **nothing**, for any value; {@link isRetryableError} is total.
316
+ */
317
+ export declare function isTransientS3Error(error: Error): boolean;
@@ -0,0 +1,180 @@
1
+ import { nowMs } from '../clock.js';
2
+ import { failureLabel, toError } from '../errors/base-error.js';
3
+ import { isCorrectedClockSkew, DEFAULT_RETRYABLE_ERRORS, MAX_CAUSE_DEPTH, mayStillBeInFlight, TRANSIENT_HTTP_STATUSES, } from '../errors/classify.js';
4
+ import { markMayStillLand, retryExhaustedError } from '../errors/errors.js';
5
+ import { redactedMessage } from '../logging/secret-patterns.js';
6
+ import { truncateForLog } from '../logging/truncate.js';
7
+ import { abortErrorFrom } from './abort.js';
8
+ import { transientCancellation } from './cancellation.js';
9
+ export const INITIAL_BACKOFF_DELAY_MS = 100;
10
+ export const MAX_BACKOFF_DELAY_MS = 5000;
11
+ export const DEFAULT_RETRY_MAX_ATTEMPTS = 5;
12
+ export const TOKEN_IDEMPOTENCY_WINDOW_MS = 600_000;
13
+ export const MAX_WRITE_LIFETIME_MS = 300_000;
14
+ function crossesDeadline(deadlineAt, delayMs) {
15
+ return deadlineAt !== undefined && nowMs() + delayMs >= deadlineAt;
16
+ }
17
+ function assertNotAborted(signal) {
18
+ if (signal?.aborted)
19
+ throw abortErrorFrom(signal);
20
+ }
21
+ function delayForAttempt(attempt, base, max, rng) {
22
+ const exponential = base * 2 ** (attempt - 1);
23
+ return fullJitter(Math.min(exponential, max), rng);
24
+ }
25
+ export function backoffCapMs(baseDelayMs, maxDelayMs) {
26
+ return maxDelayMs ?? Math.max(MAX_BACKOFF_DELAY_MS, baseDelayMs);
27
+ }
28
+ function resolveRetryOptions(options) {
29
+ const baseDelayMs = options.baseDelayMs ?? INITIAL_BACKOFF_DELAY_MS;
30
+ return {
31
+ maxAttempts: options.maxAttempts ?? DEFAULT_RETRY_MAX_ATTEMPTS,
32
+ baseDelayMs,
33
+ maxDelayMs: backoffCapMs(baseDelayMs, options.maxDelayMs),
34
+ isRetryable: options.isRetryable ??
35
+ ((error) => isRetryableError(error, options.retryableErrors ?? DEFAULT_RETRYABLE_ERRORS)),
36
+ rng: options.rng ?? Math.random,
37
+ };
38
+ }
39
+ export async function withRetry(fn, options = {}) {
40
+ const { maxAttempts, baseDelayMs, maxDelayMs, isRetryable, rng } = resolveRetryOptions(options);
41
+ assertNotAborted(options.signal);
42
+ const request = { abortSignal: options.signal };
43
+ let lastError = new Error('Retry failed without error');
44
+ let attempts = 0;
45
+ let mayStillLand = false;
46
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
47
+ attempts = attempt;
48
+ try {
49
+ return await fn(request);
50
+ }
51
+ catch (error) {
52
+ assertNotAborted(options.signal);
53
+ lastError = toError(error);
54
+ if (mayStillBeInFlight(lastError))
55
+ mayStillLand = true;
56
+ if (!isRetryable(lastError))
57
+ throw mayStillLand ? markMayStillLand(lastError) : lastError;
58
+ if (attempt === maxAttempts)
59
+ break;
60
+ const delayMs = delayForAttempt(attempt, baseDelayMs, maxDelayMs, rng);
61
+ if (crossesDeadline(options.deadlineAt, delayMs))
62
+ break;
63
+ options.onRetry?.({ attempt, delayMs, error: lastError });
64
+ await sleep(delayMs, options.signal);
65
+ }
66
+ }
67
+ throw retryExhaustedError(`Operation failed after ${attempts} attempts: ${redactedMessage(lastError)}`, attempts, lastError, mayStillLand);
68
+ }
69
+ export async function withDynamoDBRetry(fn, overrides) {
70
+ return withRetry(fn, { maxAttempts: DEFAULT_RETRY_MAX_ATTEMPTS, ...overrides });
71
+ }
72
+ function recordNode(fields, evidence) {
73
+ for (const value of [fields.name, fields.code, fields.errno, fields.syscall]) {
74
+ if (typeof value === 'string')
75
+ evidence.signals.push(value);
76
+ }
77
+ if (typeof fields.$metadata?.httpStatusCode === 'number') {
78
+ evidence.statuses.push(fields.$metadata.httpStatusCode);
79
+ }
80
+ const byTrait = fields.$retryable !== undefined && fields.$retryable !== null;
81
+ if (byTrait || isCorrectedClockSkew(fields))
82
+ evidence.retryableByTrait = true;
83
+ }
84
+ function collectEvidence(error) {
85
+ const seen = new WeakSet();
86
+ const evidence = { signals: [], statuses: [], retryableByTrait: false };
87
+ const walk = (node, depth) => {
88
+ if (depth > MAX_CAUSE_DEPTH || node === null || typeof node !== 'object' || seen.has(node)) {
89
+ return;
90
+ }
91
+ seen.add(node);
92
+ const fields = node;
93
+ recordNode(fields, evidence);
94
+ if (fields.cause)
95
+ walk(fields.cause, depth + 1);
96
+ };
97
+ walk(error, 0);
98
+ return evidence;
99
+ }
100
+ export function isRetryableError(error, retryableErrors) {
101
+ const cancellation = transientCancellation(error);
102
+ if (cancellation !== undefined)
103
+ return cancellation;
104
+ const evidence = collectEvidence(error);
105
+ if (evidence.retryableByTrait)
106
+ return true;
107
+ if (evidence.statuses.some((status) => TRANSIENT_HTTP_STATUSES.includes(status)))
108
+ return true;
109
+ return evidence.signals.some((signal) => retryableErrors.includes(signal));
110
+ }
111
+ function nominalBudgetMs(policy) {
112
+ let total = 0;
113
+ for (let sleep = 1; sleep < policy.maxAttempts; sleep++) {
114
+ total += Math.min(policy.baseDelayMs * 2 ** (sleep - 1), policy.maxDelayMs);
115
+ }
116
+ return total;
117
+ }
118
+ function warnIfOutlivesWriteLifetime(policy, logger) {
119
+ const budgetMs = nominalBudgetMs(policy);
120
+ if (budgetMs <= MAX_WRITE_LIFETIME_MS)
121
+ return;
122
+ logger.warn('retry policy outlives the write lifetime; the budget will be cut short', {
123
+ budgetMs,
124
+ maxWriteLifetimeMs: MAX_WRITE_LIFETIME_MS,
125
+ });
126
+ }
127
+ export function resolveRetryPolicy(policy, logger, attemptFloor = 0) {
128
+ const baseDelayMs = policy?.baseDelayMs ?? INITIAL_BACKOFF_DELAY_MS;
129
+ const resolved = {
130
+ maxAttempts: policy?.maxAttempts ?? DEFAULT_RETRY_MAX_ATTEMPTS,
131
+ baseDelayMs,
132
+ maxDelayMs: backoffCapMs(baseDelayMs, policy?.maxDelayMs),
133
+ };
134
+ warnIfOutlivesWriteLifetime({ ...resolved, maxAttempts: Math.max(resolved.maxAttempts, attemptFloor) }, logger);
135
+ return {
136
+ ...resolved,
137
+ onRetry: ({ attempt, delayMs, error }) => logger.debug('retrying after a transient error', {
138
+ attempt,
139
+ delayMs,
140
+ error: truncateForLog(failureLabel(error)),
141
+ }),
142
+ };
143
+ }
144
+ export function retryFor(context, signal) {
145
+ return signal === undefined ? context.retry : { ...context.retry, signal };
146
+ }
147
+ export function sleep(ms, signal) {
148
+ if (signal?.aborted) {
149
+ return Promise.reject(abortErrorFrom(signal));
150
+ }
151
+ return new Promise((resolve, reject) => {
152
+ const wait = { settled: false };
153
+ const onAbort = () => {
154
+ if (wait.settled)
155
+ return;
156
+ wait.settled = true;
157
+ clearTimeout(wait.timer);
158
+ reject(abortErrorFrom(signal));
159
+ };
160
+ signal?.addEventListener('abort', onAbort, { once: true });
161
+ if (wait.settled)
162
+ return;
163
+ wait.timer = setTimeout(() => {
164
+ if (wait.settled)
165
+ return;
166
+ wait.settled = true;
167
+ signal?.removeEventListener('abort', onAbort);
168
+ resolve();
169
+ }, ms);
170
+ });
171
+ }
172
+ export function nextBackoffDelay(currentMs, maxMs = MAX_BACKOFF_DELAY_MS) {
173
+ return Math.min(currentMs * 2, maxMs);
174
+ }
175
+ export function fullJitter(delayMs, rng = Math.random) {
176
+ return rng() * delayMs;
177
+ }
178
+ export function isTransientS3Error(error) {
179
+ return isRetryableError(error, DEFAULT_RETRYABLE_ERRORS);
180
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Hides how DynamoDB measures a row against its 400 KB item limit.
3
+ *
4
+ * DynamoDB does not measure a row by its JSON length: every attribute name
5
+ * counts, a number costs a byte per two significant digits and one more,
6
+ * binary counts its raw bytes, and a list or a map adds three bytes and one
7
+ * per element. A write that would cross the limit is refused here, by those
8
+ * rules, before anything is sent, so the caller learns which input made the
9
+ * row too large instead of reading an `AWS_REJECTED` error after the work that
10
+ * built the row — an embedding, an upload — was already done.
11
+ */
12
+ import type { AttributeMap } from './client.js';
13
+ /** DynamoDB's cap on one item, 400 KB, in the binary kilobytes its documentation counts in. */
14
+ export declare const MAX_ROW_BYTES: number;
15
+ /**
16
+ * The size DynamoDB counts a row at against its item limit.
17
+ *
18
+ * Accepts: `row` — a row this package is about to write, as the document
19
+ * client would marshall it: strings, numbers, booleans, `null`, binary,
20
+ * arrays and plain objects, nested to any depth. An `undefined` attribute is
21
+ * counted as one byte although the client drops it, which only errs high.
22
+ *
23
+ * Returns: the sum, over every attribute, of its name's UTF-8 bytes and its
24
+ * value's size: a string's UTF-8 bytes; a number's significant digits halved
25
+ * and rounded up, plus one; binary's raw bytes; one byte for a boolean or a
26
+ * null; and for a list or a map three bytes, plus each element's size and one
27
+ * byte per element, a map's element also paying its name. The rules are
28
+ * AWS's own
29
+ * (https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/CapacityUnitCalculations.html).
30
+ *
31
+ * Throws: nothing.
32
+ */
33
+ export declare function rowSizeBytes(row: AttributeMap): number;
@@ -0,0 +1,26 @@
1
+ export const MAX_ROW_BYTES = 400 * 1024;
2
+ function nameBytes(name) {
3
+ return Buffer.byteLength(name, 'utf8');
4
+ }
5
+ function significantDigits(value) {
6
+ const mantissa = String(Math.abs(value)).split(/e/i)[0].replace('.', '');
7
+ const trimmed = mantissa.replace(/^0+/, '').replace(/0+$/, '');
8
+ return Math.max(trimmed.length, 1);
9
+ }
10
+ function valueBytes(value) {
11
+ if (typeof value === 'string')
12
+ return Buffer.byteLength(value, 'utf8');
13
+ if (typeof value === 'number')
14
+ return Math.ceil(significantDigits(value) / 2) + 1;
15
+ if (typeof value === 'boolean' || value === null || value === undefined)
16
+ return 1;
17
+ if (ArrayBuffer.isView(value))
18
+ return value.byteLength;
19
+ if (Array.isArray(value)) {
20
+ return value.reduce((sum, element) => sum + valueBytes(element) + 1, 3);
21
+ }
22
+ return Object.entries(value).reduce((sum, [name, element]) => sum + nameBytes(name) + valueBytes(element) + 1, 3);
23
+ }
24
+ export function rowSizeBytes(row) {
25
+ return Object.entries(row).reduce((sum, [name, value]) => sum + nameBytes(name) + valueBytes(value), 0);
26
+ }