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

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 (512) hide show
  1. package/README.md +1720 -154
  2. package/dist/backfill/backfill.d.ts +168 -0
  3. package/dist/backfill/backfill.js +393 -0
  4. package/dist/checkpointer/actions/delete-thread.d.ts +47 -6
  5. package/dist/checkpointer/actions/delete-thread.js +58 -21
  6. package/dist/checkpointer/actions/get-tuple.d.ts +29 -4
  7. package/dist/checkpointer/actions/get-tuple.js +44 -10
  8. package/dist/checkpointer/actions/list.d.ts +46 -4
  9. package/dist/checkpointer/actions/list.js +121 -66
  10. package/dist/checkpointer/actions/put-writes.d.ts +41 -9
  11. package/dist/checkpointer/actions/put-writes.js +62 -77
  12. package/dist/checkpointer/actions/put.d.ts +83 -4
  13. package/dist/checkpointer/actions/put.js +177 -25
  14. package/dist/checkpointer/internal/delta-history.d.ts +112 -0
  15. package/dist/checkpointer/internal/delta-history.js +252 -0
  16. package/dist/checkpointer/internal/listing.d.ts +149 -0
  17. package/dist/checkpointer/internal/listing.js +245 -0
  18. package/dist/checkpointer/internal/parse.d.ts +262 -0
  19. package/dist/checkpointer/internal/parse.js +372 -0
  20. package/dist/checkpointer/internal/pending-writes.d.ts +275 -0
  21. package/dist/checkpointer/internal/pending-writes.js +588 -0
  22. package/dist/checkpointer/internal/read.d.ts +130 -0
  23. package/dist/checkpointer/internal/read.js +264 -0
  24. package/dist/checkpointer/internal/rows.d.ts +571 -0
  25. package/dist/checkpointer/internal/rows.js +834 -0
  26. package/dist/checkpointer/internal/setup.d.ts +42 -19
  27. package/dist/checkpointer/internal/setup.js +65 -29
  28. package/dist/checkpointer/saver.d.ts +256 -16
  29. package/dist/checkpointer/saver.js +275 -29
  30. package/dist/checkpointer/types.d.ts +39 -39
  31. package/dist/checkpointer/types.js +10 -1
  32. package/dist/factory/factory.d.ts +134 -28
  33. package/dist/factory/factory.js +240 -21
  34. package/dist/factory/types.d.ts +76 -0
  35. package/dist/factory/types.js +10 -0
  36. package/dist/history/actions/add-messages.d.ts +31 -4
  37. package/dist/history/actions/add-messages.js +38 -58
  38. package/dist/history/actions/clear.d.ts +49 -6
  39. package/dist/history/actions/clear.js +66 -14
  40. package/dist/history/actions/get-messages.d.ts +54 -6
  41. package/dist/history/actions/get-messages.js +126 -43
  42. package/dist/history/actions/list-sessions.d.ts +52 -10
  43. package/dist/history/actions/list-sessions.js +139 -40
  44. package/dist/history/actions/reconcile-count.d.ts +42 -10
  45. package/dist/history/actions/reconcile-count.js +45 -45
  46. package/dist/history/chat-message-history.d.ts +220 -33
  47. package/dist/history/chat-message-history.js +240 -43
  48. package/dist/history/internal/append.d.ts +212 -0
  49. package/dist/history/internal/append.js +500 -0
  50. package/dist/history/internal/message-read.d.ts +84 -0
  51. package/dist/history/internal/message-read.js +204 -0
  52. package/dist/history/internal/parse.d.ts +153 -0
  53. package/dist/history/internal/parse.js +252 -0
  54. package/dist/history/internal/rows.d.ts +195 -0
  55. package/dist/history/internal/rows.js +250 -0
  56. package/dist/history/internal/session.d.ts +331 -0
  57. package/dist/history/internal/session.js +628 -0
  58. package/dist/history/internal/setup.d.ts +52 -17
  59. package/dist/history/internal/setup.js +92 -21
  60. package/dist/history/session-adapter.d.ts +102 -7
  61. package/dist/history/session-adapter.js +103 -9
  62. package/dist/history/types.d.ts +80 -29
  63. package/dist/history/types.js +10 -1
  64. package/dist/index.d.ts +42 -11
  65. package/dist/index.js +33 -12
  66. package/dist/shared/adapter.d.ts +135 -0
  67. package/dist/shared/adapter.js +143 -0
  68. package/dist/shared/clock.d.ts +51 -2
  69. package/dist/shared/clock.js +57 -2
  70. package/dist/shared/codec/codec.d.ts +288 -13
  71. package/dist/shared/codec/codec.js +416 -19
  72. package/dist/shared/codec/compression.d.ts +43 -7
  73. package/dist/shared/codec/compression.js +53 -13
  74. package/dist/shared/codec/json-serde.d.ts +76 -4
  75. package/dist/shared/codec/json-serde.js +181 -8
  76. package/dist/shared/codec/s3/client-types.d.ts +53 -0
  77. package/dist/shared/codec/s3/client-types.js +26 -0
  78. package/dist/shared/codec/s3/client.d.ts +43 -10
  79. package/dist/shared/codec/s3/client.js +82 -9
  80. package/dist/shared/codec/s3/config.d.ts +242 -11
  81. package/dist/shared/codec/s3/config.js +293 -11
  82. package/dist/shared/codec/s3/lifecycle.d.ts +164 -6
  83. package/dist/shared/codec/s3/lifecycle.js +335 -27
  84. package/dist/shared/codec/s3/offloader.d.ts +393 -18
  85. package/dist/shared/codec/s3/offloader.js +595 -37
  86. package/dist/shared/concurrency.d.ts +43 -0
  87. package/dist/shared/concurrency.js +78 -0
  88. package/dist/shared/dynamodb/abort.d.ts +47 -0
  89. package/dist/shared/dynamodb/abort.js +59 -0
  90. package/dist/shared/dynamodb/batch-write.d.ts +77 -14
  91. package/dist/shared/dynamodb/batch-write.js +146 -27
  92. package/dist/shared/dynamodb/cancellation.d.ts +121 -4
  93. package/dist/shared/dynamodb/cancellation.js +147 -3
  94. package/dist/shared/dynamodb/client.d.ts +162 -8
  95. package/dist/shared/dynamodb/client.js +153 -5
  96. package/dist/shared/dynamodb/idempotent-write.d.ts +551 -0
  97. package/dist/shared/dynamodb/idempotent-write.js +593 -0
  98. package/dist/shared/dynamodb/paginate.d.ts +105 -9
  99. package/dist/shared/dynamodb/paginate.js +175 -7
  100. package/dist/shared/dynamodb/partition-delete.d.ts +185 -14
  101. package/dist/shared/dynamodb/partition-delete.js +314 -44
  102. package/dist/shared/dynamodb/recency-index.d.ts +231 -0
  103. package/dist/shared/dynamodb/recency-index.js +377 -0
  104. package/dist/shared/dynamodb/retry.d.ts +276 -8
  105. package/dist/shared/dynamodb/retry.js +433 -23
  106. package/dist/shared/dynamodb/table-schema.d.ts +190 -0
  107. package/dist/shared/dynamodb/table-schema.js +209 -0
  108. package/dist/shared/errors/base-error.d.ts +184 -10
  109. package/dist/shared/errors/base-error.js +160 -14
  110. package/dist/shared/errors/boundary.d.ts +71 -0
  111. package/dist/shared/errors/boundary.js +143 -0
  112. package/dist/shared/errors/classify.d.ts +97 -0
  113. package/dist/shared/errors/classify.js +257 -0
  114. package/dist/shared/errors/error-code.d.ts +77 -2
  115. package/dist/shared/errors/error-code.js +83 -1
  116. package/dist/shared/errors/errors.d.ts +158 -59
  117. package/dist/shared/errors/errors.js +219 -92
  118. package/dist/shared/logging/logger.d.ts +69 -3
  119. package/dist/shared/logging/logger.js +97 -3
  120. package/dist/shared/logging/redaction.d.ts +92 -8
  121. package/dist/shared/logging/redaction.js +273 -17
  122. package/dist/shared/logging/secret-patterns.d.ts +149 -19
  123. package/dist/shared/logging/secret-patterns.js +188 -27
  124. package/dist/shared/logging/truncate.d.ts +197 -0
  125. package/dist/shared/logging/truncate.js +231 -0
  126. package/dist/shared/options.d.ts +59 -7
  127. package/dist/shared/options.js +9 -1
  128. package/dist/shared/ulid.d.ts +77 -7
  129. package/dist/shared/ulid.js +103 -8
  130. package/dist/shared/validation/collaborators.d.ts +141 -0
  131. package/dist/shared/validation/collaborators.js +188 -0
  132. package/dist/shared/validation/option-shape.d.ts +89 -0
  133. package/dist/shared/validation/option-shape.js +113 -0
  134. package/dist/shared/validation/options.d.ts +145 -0
  135. package/dist/shared/validation/options.js +328 -0
  136. package/dist/shared/validation/primitives.d.ts +288 -21
  137. package/dist/shared/validation/primitives.js +353 -50
  138. package/dist/shared/validation/ttl.d.ts +66 -10
  139. package/dist/shared/validation/ttl.js +113 -15
  140. package/dist/store/actions/list-namespaces.d.ts +76 -6
  141. package/dist/store/actions/list-namespaces.js +166 -24
  142. package/dist/store/actions/put.d.ts +33 -8
  143. package/dist/store/actions/put.js +53 -60
  144. package/dist/store/actions/reconcile-vector-index.d.ts +31 -10
  145. package/dist/store/actions/reconcile-vector-index.js +34 -15
  146. package/dist/store/actions/search.d.ts +34 -6
  147. package/dist/store/actions/search.js +56 -51
  148. package/dist/store/internal/batch-plan.d.ts +26 -0
  149. package/dist/store/internal/batch-plan.js +109 -0
  150. package/dist/store/internal/filter.d.ts +36 -3
  151. package/dist/store/internal/filter.js +66 -15
  152. package/dist/store/internal/get-item.d.ts +45 -0
  153. package/dist/store/internal/get-item.js +115 -0
  154. package/dist/store/internal/item-write.d.ts +230 -0
  155. package/dist/store/internal/item-write.js +463 -0
  156. package/dist/store/internal/parse.d.ts +225 -0
  157. package/dist/store/internal/parse.js +350 -0
  158. package/dist/store/internal/rows.d.ts +355 -0
  159. package/dist/store/internal/rows.js +447 -0
  160. package/dist/store/internal/semantic-search.d.ts +161 -6
  161. package/dist/store/internal/semantic-search.js +360 -18
  162. package/dist/store/internal/setup.d.ts +77 -20
  163. package/dist/store/internal/setup.js +178 -47
  164. package/dist/store/internal/table-search.d.ts +100 -0
  165. package/dist/store/internal/table-search.js +213 -0
  166. package/dist/store/internal/vector-index.d.ts +247 -0
  167. package/dist/store/internal/vector-index.js +546 -0
  168. package/dist/store/store.d.ts +270 -17
  169. package/dist/store/store.js +329 -38
  170. package/dist/store/types.d.ts +76 -26
  171. package/dist/store/types.js +13 -1
  172. package/dist/store/vector-backend.d.ts +64 -4
  173. package/dist/store/vector-backend.js +15 -1
  174. package/package.json +58 -36
  175. package/dist/checkpointer/actions/delete-thread.d.ts.map +0 -1
  176. package/dist/checkpointer/actions/delete-thread.js.map +0 -1
  177. package/dist/checkpointer/actions/get-tuple.d.ts.map +0 -1
  178. package/dist/checkpointer/actions/get-tuple.js.map +0 -1
  179. package/dist/checkpointer/actions/list.d.ts.map +0 -1
  180. package/dist/checkpointer/actions/list.js.map +0 -1
  181. package/dist/checkpointer/actions/put-writes.d.ts.map +0 -1
  182. package/dist/checkpointer/actions/put-writes.js.map +0 -1
  183. package/dist/checkpointer/actions/put.d.ts.map +0 -1
  184. package/dist/checkpointer/actions/put.js.map +0 -1
  185. package/dist/checkpointer/internal/assemble.d.ts +0 -10
  186. package/dist/checkpointer/internal/assemble.d.ts.map +0 -1
  187. package/dist/checkpointer/internal/assemble.js +0 -37
  188. package/dist/checkpointer/internal/assemble.js.map +0 -1
  189. package/dist/checkpointer/internal/configurable.d.ts +0 -13
  190. package/dist/checkpointer/internal/configurable.d.ts.map +0 -1
  191. package/dist/checkpointer/internal/configurable.js +0 -23
  192. package/dist/checkpointer/internal/configurable.js.map +0 -1
  193. package/dist/checkpointer/internal/fetch.d.ts +0 -10
  194. package/dist/checkpointer/internal/fetch.d.ts.map +0 -1
  195. package/dist/checkpointer/internal/fetch.js +0 -46
  196. package/dist/checkpointer/internal/fetch.js.map +0 -1
  197. package/dist/checkpointer/internal/filter-match.d.ts +0 -12
  198. package/dist/checkpointer/internal/filter-match.d.ts.map +0 -1
  199. package/dist/checkpointer/internal/filter-match.js +0 -14
  200. package/dist/checkpointer/internal/filter-match.js.map +0 -1
  201. package/dist/checkpointer/internal/item-reader.d.ts +0 -55
  202. package/dist/checkpointer/internal/item-reader.d.ts.map +0 -1
  203. package/dist/checkpointer/internal/item-reader.js +0 -88
  204. package/dist/checkpointer/internal/item-reader.js.map +0 -1
  205. package/dist/checkpointer/internal/item-writer.d.ts +0 -26
  206. package/dist/checkpointer/internal/item-writer.d.ts.map +0 -1
  207. package/dist/checkpointer/internal/item-writer.js +0 -92
  208. package/dist/checkpointer/internal/item-writer.js.map +0 -1
  209. package/dist/checkpointer/internal/keys.d.ts +0 -31
  210. package/dist/checkpointer/internal/keys.d.ts.map +0 -1
  211. package/dist/checkpointer/internal/keys.js +0 -87
  212. package/dist/checkpointer/internal/keys.js.map +0 -1
  213. package/dist/checkpointer/internal/query.d.ts +0 -20
  214. package/dist/checkpointer/internal/query.d.ts.map +0 -1
  215. package/dist/checkpointer/internal/query.js +0 -36
  216. package/dist/checkpointer/internal/query.js.map +0 -1
  217. package/dist/checkpointer/internal/setup.d.ts.map +0 -1
  218. package/dist/checkpointer/internal/setup.js.map +0 -1
  219. package/dist/checkpointer/internal/special-write-cas.d.ts +0 -30
  220. package/dist/checkpointer/internal/special-write-cas.d.ts.map +0 -1
  221. package/dist/checkpointer/internal/special-write-cas.js +0 -104
  222. package/dist/checkpointer/internal/special-write-cas.js.map +0 -1
  223. package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -24
  224. package/dist/checkpointer/internal/special-write-cleanup.d.ts.map +0 -1
  225. package/dist/checkpointer/internal/special-write-cleanup.js +0 -47
  226. package/dist/checkpointer/internal/special-write-cleanup.js.map +0 -1
  227. package/dist/checkpointer/internal/special-write-verify.d.ts +0 -54
  228. package/dist/checkpointer/internal/special-write-verify.d.ts.map +0 -1
  229. package/dist/checkpointer/internal/special-write-verify.js +0 -65
  230. package/dist/checkpointer/internal/special-write-verify.js.map +0 -1
  231. package/dist/checkpointer/internal/validation.d.ts +0 -13
  232. package/dist/checkpointer/internal/validation.d.ts.map +0 -1
  233. package/dist/checkpointer/internal/validation.js +0 -30
  234. package/dist/checkpointer/internal/validation.js.map +0 -1
  235. package/dist/checkpointer/internal/write-guard.d.ts +0 -13
  236. package/dist/checkpointer/internal/write-guard.d.ts.map +0 -1
  237. package/dist/checkpointer/internal/write-guard.js +0 -39
  238. package/dist/checkpointer/internal/write-guard.js.map +0 -1
  239. package/dist/checkpointer/internal/write-index.d.ts +0 -37
  240. package/dist/checkpointer/internal/write-index.d.ts.map +0 -1
  241. package/dist/checkpointer/internal/write-index.js +0 -42
  242. package/dist/checkpointer/internal/write-index.js.map +0 -1
  243. package/dist/checkpointer/saver.d.ts.map +0 -1
  244. package/dist/checkpointer/saver.js.map +0 -1
  245. package/dist/checkpointer/types.d.ts.map +0 -1
  246. package/dist/checkpointer/types.js.map +0 -1
  247. package/dist/factory/factory.d.ts.map +0 -1
  248. package/dist/factory/factory.js.map +0 -1
  249. package/dist/history/actions/add-messages.d.ts.map +0 -1
  250. package/dist/history/actions/add-messages.js.map +0 -1
  251. package/dist/history/actions/clear.d.ts.map +0 -1
  252. package/dist/history/actions/clear.js.map +0 -1
  253. package/dist/history/actions/get-messages.d.ts.map +0 -1
  254. package/dist/history/actions/get-messages.js.map +0 -1
  255. package/dist/history/actions/list-sessions.d.ts.map +0 -1
  256. package/dist/history/actions/list-sessions.js.map +0 -1
  257. package/dist/history/actions/reconcile-count.d.ts.map +0 -1
  258. package/dist/history/actions/reconcile-count.js.map +0 -1
  259. package/dist/history/chat-message-history.d.ts.map +0 -1
  260. package/dist/history/chat-message-history.js.map +0 -1
  261. package/dist/history/internal/append-saga.d.ts +0 -20
  262. package/dist/history/internal/append-saga.d.ts.map +0 -1
  263. package/dist/history/internal/append-saga.js +0 -35
  264. package/dist/history/internal/append-saga.js.map +0 -1
  265. package/dist/history/internal/compensation.d.ts +0 -21
  266. package/dist/history/internal/compensation.d.ts.map +0 -1
  267. package/dist/history/internal/compensation.js +0 -84
  268. package/dist/history/internal/compensation.js.map +0 -1
  269. package/dist/history/internal/item-mapper.d.ts +0 -12
  270. package/dist/history/internal/item-mapper.d.ts.map +0 -1
  271. package/dist/history/internal/item-mapper.js +0 -33
  272. package/dist/history/internal/item-mapper.js.map +0 -1
  273. package/dist/history/internal/keys.d.ts +0 -17
  274. package/dist/history/internal/keys.d.ts.map +0 -1
  275. package/dist/history/internal/keys.js +0 -49
  276. package/dist/history/internal/keys.js.map +0 -1
  277. package/dist/history/internal/message-chunker.d.ts +0 -14
  278. package/dist/history/internal/message-chunker.d.ts.map +0 -1
  279. package/dist/history/internal/message-chunker.js +0 -68
  280. package/dist/history/internal/message-chunker.js.map +0 -1
  281. package/dist/history/internal/message-transaction.d.ts +0 -26
  282. package/dist/history/internal/message-transaction.d.ts.map +0 -1
  283. package/dist/history/internal/message-transaction.js +0 -60
  284. package/dist/history/internal/message-transaction.js.map +0 -1
  285. package/dist/history/internal/query.d.ts +0 -10
  286. package/dist/history/internal/query.d.ts.map +0 -1
  287. package/dist/history/internal/query.js +0 -31
  288. package/dist/history/internal/query.js.map +0 -1
  289. package/dist/history/internal/session-count.d.ts +0 -41
  290. package/dist/history/internal/session-count.d.ts.map +0 -1
  291. package/dist/history/internal/session-count.js +0 -109
  292. package/dist/history/internal/session-count.js.map +0 -1
  293. package/dist/history/internal/session-title.d.ts +0 -20
  294. package/dist/history/internal/session-title.d.ts.map +0 -1
  295. package/dist/history/internal/session-title.js +0 -44
  296. package/dist/history/internal/session-title.js.map +0 -1
  297. package/dist/history/internal/session-update.d.ts +0 -28
  298. package/dist/history/internal/session-update.d.ts.map +0 -1
  299. package/dist/history/internal/session-update.js +0 -70
  300. package/dist/history/internal/session-update.js.map +0 -1
  301. package/dist/history/internal/setup.d.ts.map +0 -1
  302. package/dist/history/internal/setup.js.map +0 -1
  303. package/dist/history/internal/title-generator.d.ts +0 -13
  304. package/dist/history/internal/title-generator.d.ts.map +0 -1
  305. package/dist/history/internal/title-generator.js +0 -25
  306. package/dist/history/internal/title-generator.js.map +0 -1
  307. package/dist/history/internal/ttl-anchor.d.ts +0 -25
  308. package/dist/history/internal/ttl-anchor.d.ts.map +0 -1
  309. package/dist/history/internal/ttl-anchor.js +0 -38
  310. package/dist/history/internal/ttl-anchor.js.map +0 -1
  311. package/dist/history/internal/validation.d.ts +0 -9
  312. package/dist/history/internal/validation.d.ts.map +0 -1
  313. package/dist/history/internal/validation.js +0 -16
  314. package/dist/history/internal/validation.js.map +0 -1
  315. package/dist/history/session-adapter.d.ts.map +0 -1
  316. package/dist/history/session-adapter.js.map +0 -1
  317. package/dist/history/types.d.ts.map +0 -1
  318. package/dist/history/types.js.map +0 -1
  319. package/dist/index.d.ts.map +0 -1
  320. package/dist/index.js.map +0 -1
  321. package/dist/shared/clock.d.ts.map +0 -1
  322. package/dist/shared/clock.js.map +0 -1
  323. package/dist/shared/codec/codec.d.ts.map +0 -1
  324. package/dist/shared/codec/codec.js.map +0 -1
  325. package/dist/shared/codec/compression.d.ts.map +0 -1
  326. package/dist/shared/codec/compression.js.map +0 -1
  327. package/dist/shared/codec/descriptor-keys.d.ts +0 -4
  328. package/dist/shared/codec/descriptor-keys.d.ts.map +0 -1
  329. package/dist/shared/codec/descriptor-keys.js +0 -14
  330. package/dist/shared/codec/descriptor-keys.js.map +0 -1
  331. package/dist/shared/codec/json-serde.d.ts.map +0 -1
  332. package/dist/shared/codec/json-serde.js.map +0 -1
  333. package/dist/shared/codec/s3/client.d.ts.map +0 -1
  334. package/dist/shared/codec/s3/client.js.map +0 -1
  335. package/dist/shared/codec/s3/config.d.ts.map +0 -1
  336. package/dist/shared/codec/s3/config.js.map +0 -1
  337. package/dist/shared/codec/s3/delete.d.ts +0 -8
  338. package/dist/shared/codec/s3/delete.d.ts.map +0 -1
  339. package/dist/shared/codec/s3/delete.js +0 -29
  340. package/dist/shared/codec/s3/delete.js.map +0 -1
  341. package/dist/shared/codec/s3/lifecycle.d.ts.map +0 -1
  342. package/dist/shared/codec/s3/lifecycle.js.map +0 -1
  343. package/dist/shared/codec/s3/offloader.d.ts.map +0 -1
  344. package/dist/shared/codec/s3/offloader.js.map +0 -1
  345. package/dist/shared/codec/s3/orphans.d.ts +0 -18
  346. package/dist/shared/codec/s3/orphans.d.ts.map +0 -1
  347. package/dist/shared/codec/s3/orphans.js +0 -58
  348. package/dist/shared/codec/s3/orphans.js.map +0 -1
  349. package/dist/shared/codec/s3/read-write.d.ts +0 -14
  350. package/dist/shared/codec/s3/read-write.d.ts.map +0 -1
  351. package/dist/shared/codec/s3/read-write.js +0 -43
  352. package/dist/shared/codec/s3/read-write.js.map +0 -1
  353. package/dist/shared/codec/s3/retry.d.ts +0 -5
  354. package/dist/shared/codec/s3/retry.d.ts.map +0 -1
  355. package/dist/shared/codec/s3/retry.js +0 -25
  356. package/dist/shared/codec/s3/retry.js.map +0 -1
  357. package/dist/shared/constants.d.ts +0 -64
  358. package/dist/shared/constants.d.ts.map +0 -1
  359. package/dist/shared/constants.js +0 -67
  360. package/dist/shared/constants.js.map +0 -1
  361. package/dist/shared/dynamodb/backoff.d.ts +0 -15
  362. package/dist/shared/dynamodb/backoff.d.ts.map +0 -1
  363. package/dist/shared/dynamodb/backoff.js +0 -48
  364. package/dist/shared/dynamodb/backoff.js.map +0 -1
  365. package/dist/shared/dynamodb/batch-write.d.ts.map +0 -1
  366. package/dist/shared/dynamodb/batch-write.js.map +0 -1
  367. package/dist/shared/dynamodb/cancellation.d.ts.map +0 -1
  368. package/dist/shared/dynamodb/cancellation.js.map +0 -1
  369. package/dist/shared/dynamodb/client.d.ts.map +0 -1
  370. package/dist/shared/dynamodb/client.js.map +0 -1
  371. package/dist/shared/dynamodb/conditional-put.d.ts +0 -51
  372. package/dist/shared/dynamodb/conditional-put.d.ts.map +0 -1
  373. package/dist/shared/dynamodb/conditional-put.js +0 -59
  374. package/dist/shared/dynamodb/conditional-put.js.map +0 -1
  375. package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -19
  376. package/dist/shared/dynamodb/drain-unprocessed.d.ts.map +0 -1
  377. package/dist/shared/dynamodb/drain-unprocessed.js +0 -44
  378. package/dist/shared/dynamodb/drain-unprocessed.js.map +0 -1
  379. package/dist/shared/dynamodb/paginate-core.d.ts +0 -22
  380. package/dist/shared/dynamodb/paginate-core.d.ts.map +0 -1
  381. package/dist/shared/dynamodb/paginate-core.js +0 -52
  382. package/dist/shared/dynamodb/paginate-core.js.map +0 -1
  383. package/dist/shared/dynamodb/paginate.d.ts.map +0 -1
  384. package/dist/shared/dynamodb/paginate.js.map +0 -1
  385. package/dist/shared/dynamodb/partition-delete.d.ts.map +0 -1
  386. package/dist/shared/dynamodb/partition-delete.js.map +0 -1
  387. package/dist/shared/dynamodb/retry-classifier.d.ts +0 -9
  388. package/dist/shared/dynamodb/retry-classifier.d.ts.map +0 -1
  389. package/dist/shared/dynamodb/retry-classifier.js +0 -87
  390. package/dist/shared/dynamodb/retry-classifier.js.map +0 -1
  391. package/dist/shared/dynamodb/retry.d.ts.map +0 -1
  392. package/dist/shared/dynamodb/retry.js.map +0 -1
  393. package/dist/shared/dynamodb/scan.d.ts +0 -15
  394. package/dist/shared/dynamodb/scan.d.ts.map +0 -1
  395. package/dist/shared/dynamodb/scan.js +0 -20
  396. package/dist/shared/dynamodb/scan.js.map +0 -1
  397. package/dist/shared/dynamodb/types.d.ts +0 -24
  398. package/dist/shared/dynamodb/types.d.ts.map +0 -1
  399. package/dist/shared/dynamodb/types.js +0 -3
  400. package/dist/shared/dynamodb/types.js.map +0 -1
  401. package/dist/shared/errors/base-error.d.ts.map +0 -1
  402. package/dist/shared/errors/base-error.js.map +0 -1
  403. package/dist/shared/errors/error-code.d.ts.map +0 -1
  404. package/dist/shared/errors/error-code.js.map +0 -1
  405. package/dist/shared/errors/errors.d.ts.map +0 -1
  406. package/dist/shared/errors/errors.js.map +0 -1
  407. package/dist/shared/errors/wrap-error.d.ts +0 -16
  408. package/dist/shared/errors/wrap-error.d.ts.map +0 -1
  409. package/dist/shared/errors/wrap-error.js +0 -30
  410. package/dist/shared/errors/wrap-error.js.map +0 -1
  411. package/dist/shared/logging/logger.d.ts.map +0 -1
  412. package/dist/shared/logging/logger.js.map +0 -1
  413. package/dist/shared/logging/redaction-walk.d.ts +0 -23
  414. package/dist/shared/logging/redaction-walk.d.ts.map +0 -1
  415. package/dist/shared/logging/redaction-walk.js +0 -92
  416. package/dist/shared/logging/redaction-walk.js.map +0 -1
  417. package/dist/shared/logging/redaction.d.ts.map +0 -1
  418. package/dist/shared/logging/redaction.js.map +0 -1
  419. package/dist/shared/logging/secret-patterns.d.ts.map +0 -1
  420. package/dist/shared/logging/secret-patterns.js.map +0 -1
  421. package/dist/shared/options.d.ts.map +0 -1
  422. package/dist/shared/options.js.map +0 -1
  423. package/dist/shared/ulid.d.ts.map +0 -1
  424. package/dist/shared/ulid.js.map +0 -1
  425. package/dist/shared/validation/primitives.d.ts.map +0 -1
  426. package/dist/shared/validation/primitives.js.map +0 -1
  427. package/dist/shared/validation/ttl.d.ts.map +0 -1
  428. package/dist/shared/validation/ttl.js.map +0 -1
  429. package/dist/store/actions/get.d.ts +0 -5
  430. package/dist/store/actions/get.d.ts.map +0 -1
  431. package/dist/store/actions/get.js +0 -35
  432. package/dist/store/actions/get.js.map +0 -1
  433. package/dist/store/actions/list-namespaces.d.ts.map +0 -1
  434. package/dist/store/actions/list-namespaces.js.map +0 -1
  435. package/dist/store/actions/put.d.ts.map +0 -1
  436. package/dist/store/actions/put.js.map +0 -1
  437. package/dist/store/actions/reconcile-vector-index.d.ts.map +0 -1
  438. package/dist/store/actions/reconcile-vector-index.js.map +0 -1
  439. package/dist/store/actions/search.d.ts.map +0 -1
  440. package/dist/store/actions/search.js.map +0 -1
  441. package/dist/store/internal/backend-search.d.ts +0 -5
  442. package/dist/store/internal/backend-search.d.ts.map +0 -1
  443. package/dist/store/internal/backend-search.js +0 -68
  444. package/dist/store/internal/backend-search.js.map +0 -1
  445. package/dist/store/internal/filter.d.ts.map +0 -1
  446. package/dist/store/internal/filter.js.map +0 -1
  447. package/dist/store/internal/index-reconcile.d.ts +0 -22
  448. package/dist/store/internal/index-reconcile.d.ts.map +0 -1
  449. package/dist/store/internal/index-reconcile.js +0 -105
  450. package/dist/store/internal/index-reconcile.js.map +0 -1
  451. package/dist/store/internal/index-sync.d.ts +0 -11
  452. package/dist/store/internal/index-sync.d.ts.map +0 -1
  453. package/dist/store/internal/index-sync.js +0 -26
  454. package/dist/store/internal/index-sync.js.map +0 -1
  455. package/dist/store/internal/item-mapper.d.ts +0 -25
  456. package/dist/store/internal/item-mapper.d.ts.map +0 -1
  457. package/dist/store/internal/item-mapper.js +0 -53
  458. package/dist/store/internal/item-mapper.js.map +0 -1
  459. package/dist/store/internal/keys.d.ts +0 -18
  460. package/dist/store/internal/keys.d.ts.map +0 -1
  461. package/dist/store/internal/keys.js +0 -42
  462. package/dist/store/internal/keys.js.map +0 -1
  463. package/dist/store/internal/namespace-match.d.ts +0 -12
  464. package/dist/store/internal/namespace-match.d.ts.map +0 -1
  465. package/dist/store/internal/namespace-match.js +0 -41
  466. package/dist/store/internal/namespace-match.js.map +0 -1
  467. package/dist/store/internal/overwrite-swap.d.ts +0 -33
  468. package/dist/store/internal/overwrite-swap.d.ts.map +0 -1
  469. package/dist/store/internal/overwrite-swap.js +0 -62
  470. package/dist/store/internal/overwrite-swap.js.map +0 -1
  471. package/dist/store/internal/persist.d.ts +0 -27
  472. package/dist/store/internal/persist.d.ts.map +0 -1
  473. package/dist/store/internal/persist.js +0 -59
  474. package/dist/store/internal/persist.js.map +0 -1
  475. package/dist/store/internal/query.d.ts +0 -6
  476. package/dist/store/internal/query.d.ts.map +0 -1
  477. package/dist/store/internal/query.js +0 -32
  478. package/dist/store/internal/query.js.map +0 -1
  479. package/dist/store/internal/ranker.d.ts +0 -13
  480. package/dist/store/internal/ranker.d.ts.map +0 -1
  481. package/dist/store/internal/ranker.js +0 -31
  482. package/dist/store/internal/ranker.js.map +0 -1
  483. package/dist/store/internal/read-existing.d.ts +0 -19
  484. package/dist/store/internal/read-existing.d.ts.map +0 -1
  485. package/dist/store/internal/read-existing.js +0 -29
  486. package/dist/store/internal/read-existing.js.map +0 -1
  487. package/dist/store/internal/score-direction.d.ts +0 -32
  488. package/dist/store/internal/score-direction.d.ts.map +0 -1
  489. package/dist/store/internal/score-direction.js +0 -39
  490. package/dist/store/internal/score-direction.js.map +0 -1
  491. package/dist/store/internal/search-filter.d.ts +0 -4
  492. package/dist/store/internal/search-filter.d.ts.map +0 -1
  493. package/dist/store/internal/search-filter.js +0 -11
  494. package/dist/store/internal/search-filter.js.map +0 -1
  495. package/dist/store/internal/semantic-search.d.ts.map +0 -1
  496. package/dist/store/internal/semantic-search.js.map +0 -1
  497. package/dist/store/internal/setup.d.ts.map +0 -1
  498. package/dist/store/internal/setup.js.map +0 -1
  499. package/dist/store/internal/validation.d.ts +0 -13
  500. package/dist/store/internal/validation.d.ts.map +0 -1
  501. package/dist/store/internal/validation.js +0 -35
  502. package/dist/store/internal/validation.js.map +0 -1
  503. package/dist/store/internal/write-verify.d.ts +0 -37
  504. package/dist/store/internal/write-verify.d.ts.map +0 -1
  505. package/dist/store/internal/write-verify.js +0 -68
  506. package/dist/store/internal/write-verify.js.map +0 -1
  507. package/dist/store/store.d.ts.map +0 -1
  508. package/dist/store/store.js.map +0 -1
  509. package/dist/store/types.d.ts.map +0 -1
  510. package/dist/store/types.js.map +0 -1
  511. package/dist/store/vector-backend.d.ts.map +0 -1
  512. package/dist/store/vector-backend.js.map +0 -1
@@ -1,8 +1,80 @@
1
+ /**
2
+ * Hides the JSON form: writing it, reading it, and recognising it.
3
+ *
4
+ * The default serde writes a value as JSON under the `json` type and reads
5
+ * back only that type; the codec also asks, when a serde refuses stored bytes,
6
+ * whether those bytes are still JSON at all, which tells a corrupt payload from
7
+ * a serde that would not reconstruct it.
8
+ */
1
9
  import type { SerializerProtocol } from '@langchain/langgraph-checkpoint';
2
10
  /**
3
- * A minimal JSON serializer implementing LangGraph's {@link SerializerProtocol},
4
- * used by adapters (the store, history) that persist plain JSON values through
5
- * the shared payload codec.
11
+ * A plain JSON serializer implementing LangGraph's `SerializerProtocol`:
12
+ * the default `serde` of `DynamoDBStore` and `DynamoDBChatMessageHistory`, and
13
+ * the alternative a `DynamoDBSaver` can be given in place of LangGraph's
14
+ * `JsonPlusSerializer`.
15
+ *
16
+ * It is exported so that choice is available. The checkpointer's default
17
+ * revives a stored `{"lc": …}` record by instantiating the class the record
18
+ * names, so the row selects which constructor runs on read; this serializer
19
+ * runs `JSON.parse` and nothing else, and reconstructs no class at all.
20
+ * Reading with it is the narrower trust boundary, and the price is stated
21
+ * below: it stores the JSON projection of a value, not the value.
22
+ *
23
+ * `dumpsTyped` accepts any value `JSON.stringify` can represent and refuses the
24
+ * rest. A value it cannot represent — `undefined`, a function, a symbol —
25
+ * stringifies to `undefined` and would be stored as **zero bytes**, which reads
26
+ * back as a parse error; a circular structure or a `BigInt` makes it throw. Both
27
+ * are reported as `VALIDATION` naming `value`, at the write, rather than
28
+ * as an unreadable row later — with the refusal attached as `cause` and never
29
+ * quoted into the message, which for a circular structure names the caller's
30
+ * own properties and classes.
31
+ *
32
+ * What it represents, it represents as JSON, which is lossy in ways nothing
33
+ * records: a `Map` or `Set` stores as `{}`, an object key whose value is
34
+ * `undefined` is dropped and an array element is stored as `null`, `NaN` and
35
+ * `Infinity` store as `null`, `-0` as `0`, a `Uint8Array` as an index-keyed
36
+ * object and a `Date` as an ISO string. The README's *Table schema* section
37
+ * holds the whole table, against the checkpointer default column by column.
38
+ *
39
+ * `loadsTyped` reads only the `json` form it writes, and says
40
+ * so before it looks at a byte. Any other declared form is a `VALIDATION` error
41
+ * naming `serde`, because it says what *this* reader may rebuild and not that
42
+ * the payload is damaged. Bytes of that form which do not parse are
43
+ * `PAYLOAD_CORRUPT`, because they can never be read and the caller should
44
+ * report rather than retry; a `data` that is not bytes at all is a
45
+ * `VALIDATION` naming `data`, because that is the caller's mistake and
46
+ * not a row's.
47
+ *
48
+ * Frozen for the reason {@link ErrorCode} is: one object, shared by every
49
+ * adapter in the process that did not pass a `serde` of its own, and
50
+ * reachable from the package root. An assignment to `dumpsTyped` by any one
51
+ * consumer would silently change how every other one writes.
6
52
  */
7
53
  export declare const JSON_SERDE: SerializerProtocol;
8
- //# sourceMappingURL=json-serde.d.ts.map
54
+ /**
55
+ * Whether stored bytes are still the form the row that holds them declares.
56
+ *
57
+ * This is the structural question behind the two ways a decode fails —
58
+ * `PAYLOAD_CORRUPT` for bytes no reader can decode, and the `serde` refusal for
59
+ * bytes *this* reader will not rebuild a value from — and it is the only one
60
+ * this package can answer on its own. `SerializerProtocol` offers no way to ask
61
+ * a serde whether it parsed the bytes before deciding not to reconstruct what
62
+ * they name, and the refusal it throws is a caller's object: its class, its
63
+ * fields and its prose are all whatever that caller chose. Classifying a
64
+ * payload by any of those would make the code mean "a third party said so",
65
+ * which is exactly what neither code may mean.
66
+ *
67
+ * Accepts: `serdeType` — the type stamped on the row, as the descriptor carries
68
+ * it. `bytes` — what the row stored, already decompressed.
69
+ *
70
+ * Returns: whether the bytes still parse as the declared form. A type this
71
+ * package has no grammar for is taken at its word and answers `true`, so its
72
+ * serde's refusal is reported rather than written off: dropping a payload this
73
+ * reader merely cannot check would lose data on nothing but its own ignorance.
74
+ *
75
+ * Throws: **nothing**, for any bytes. It is called from inside the `catch` that
76
+ * is classifying a decode failure, where a throw would replace the failure
77
+ * being reported — and the value it is handed came off a row, so it may be
78
+ * anything that row's writer stored.
79
+ */
80
+ export declare function bytesHoldDeclaredForm(serdeType: string, bytes: Uint8Array): boolean;
@@ -1,18 +1,191 @@
1
1
  "use strict";
2
+ /**
3
+ * Hides the JSON form: writing it, reading it, and recognising it.
4
+ *
5
+ * The default serde writes a value as JSON under the `json` type and reads
6
+ * back only that type; the codec also asks, when a serde refuses stored bytes,
7
+ * whether those bytes are still JSON at all, which tells a corrupt payload from
8
+ * a serde that would not reconstruct it.
9
+ */
2
10
  Object.defineProperty(exports, "__esModule", { value: true });
3
11
  exports.JSON_SERDE = void 0;
12
+ exports.bytesHoldDeclaredForm = bytesHoldDeclaredForm;
13
+ const base_error_1 = require("../errors/base-error");
14
+ const error_code_1 = require("../errors/error-code");
15
+ const errors_1 = require("../errors/errors");
16
+ const truncate_1 = require("../logging/truncate");
4
17
  /**
5
- * A minimal JSON serializer implementing LangGraph's {@link SerializerProtocol},
6
- * used by adapters (the store, history) that persist plain JSON values through
7
- * the shared payload codec.
18
+ * A plain JSON serializer implementing LangGraph's `SerializerProtocol`:
19
+ * the default `serde` of `DynamoDBStore` and `DynamoDBChatMessageHistory`, and
20
+ * the alternative a `DynamoDBSaver` can be given in place of LangGraph's
21
+ * `JsonPlusSerializer`.
22
+ *
23
+ * It is exported so that choice is available. The checkpointer's default
24
+ * revives a stored `{"lc": …}` record by instantiating the class the record
25
+ * names, so the row selects which constructor runs on read; this serializer
26
+ * runs `JSON.parse` and nothing else, and reconstructs no class at all.
27
+ * Reading with it is the narrower trust boundary, and the price is stated
28
+ * below: it stores the JSON projection of a value, not the value.
29
+ *
30
+ * `dumpsTyped` accepts any value `JSON.stringify` can represent and refuses the
31
+ * rest. A value it cannot represent — `undefined`, a function, a symbol —
32
+ * stringifies to `undefined` and would be stored as **zero bytes**, which reads
33
+ * back as a parse error; a circular structure or a `BigInt` makes it throw. Both
34
+ * are reported as `VALIDATION` naming `value`, at the write, rather than
35
+ * as an unreadable row later — with the refusal attached as `cause` and never
36
+ * quoted into the message, which for a circular structure names the caller's
37
+ * own properties and classes.
38
+ *
39
+ * What it represents, it represents as JSON, which is lossy in ways nothing
40
+ * records: a `Map` or `Set` stores as `{}`, an object key whose value is
41
+ * `undefined` is dropped and an array element is stored as `null`, `NaN` and
42
+ * `Infinity` store as `null`, `-0` as `0`, a `Uint8Array` as an index-keyed
43
+ * object and a `Date` as an ISO string. The README's *Table schema* section
44
+ * holds the whole table, against the checkpointer default column by column.
45
+ *
46
+ * `loadsTyped` reads only the `json` form it writes, and says
47
+ * so before it looks at a byte. Any other declared form is a `VALIDATION` error
48
+ * naming `serde`, because it says what *this* reader may rebuild and not that
49
+ * the payload is damaged. Bytes of that form which do not parse are
50
+ * `PAYLOAD_CORRUPT`, because they can never be read and the caller should
51
+ * report rather than retry; a `data` that is not bytes at all is a
52
+ * `VALIDATION` naming `data`, because that is the caller's mistake and
53
+ * not a row's.
54
+ *
55
+ * Frozen for the reason {@link ErrorCode} is: one object, shared by every
56
+ * adapter in the process that did not pass a `serde` of its own, and
57
+ * reachable from the package root. An assignment to `dumpsTyped` by any one
58
+ * consumer would silently change how every other one writes.
8
59
  */
9
60
  exports.JSON_SERDE = {
10
61
  async dumpsTyped(value) {
11
- return ['json', new TextEncoder().encode(JSON.stringify(value))];
62
+ let text;
63
+ try {
64
+ text = JSON.stringify(value);
65
+ }
66
+ catch (error) {
67
+ // The refusal travels as `cause`, never as text. V8 writes the path it
68
+ // walked into the message it throws for a circular structure, quoting
69
+ // the caller's own property names and constructor names — and this
70
+ // package does not compose a public `err.message` out of a caller's
71
+ // identifiers, which an application may print, log or return in a
72
+ // response. `redactedMessage` removes credential shapes, not names, so
73
+ // it never covered this. A caller who wants the path reads `cause`.
74
+ throw (0, errors_1.validationError)('value cannot be serialized as JSON — a circular structure, or a value JSON has no ' +
75
+ 'encoding for such as a BigInt; the refusal itself is attached as `cause`', 'value', (0, base_error_1.toError)(error));
76
+ }
77
+ if (text === undefined) {
78
+ throw (0, errors_1.validationError)('value has no JSON representation (undefined, a function or a symbol), so it cannot be ' +
79
+ 'stored; store null instead to record an absent value', 'value');
80
+ }
81
+ // `dumpsTyped` stays `async` because the two throws above must reach a
82
+ // caller as a rejection even when it is called without `await` (a bare
83
+ // `.catch()`), which a plain synchronous throw would not do. Returning
84
+ // `Promise.resolve(...)` here — rather than the bare tuple — is what
85
+ // satisfies `require-await`: the rule accepts a `return` of a thenable
86
+ // value in place of an explicit `await`, and needs no `await` to do it.
87
+ return Promise.resolve([JSON_SERDE_TYPE, new TextEncoder().encode(text)]);
12
88
  },
13
- async loadsTyped(_type, data) {
14
- const text = typeof data === 'string' ? data : new TextDecoder().decode(data);
15
- return JSON.parse(text);
89
+ async loadsTyped(type, data) {
90
+ // The declared form is honoured, and honoured first. Ignoring it left this
91
+ // serializer answering for forms it has no grammar for: a row stamped
92
+ // `bytes` by the checkpointer's default — what that serializer writes for a
93
+ // raw `Uint8Array` — parsed here as JSON and returned a *different value*
94
+ // whenever those bytes happened to be valid JSON, and returned this
95
+ // serializer's own `PAYLOAD_CORRUPT` when they were not. The second reading
96
+ // is the one that cost data: the codec passes an already-branded refusal
97
+ // through untouched, so `bytesHoldDeclaredForm` never ran, the row was
98
+ // filed as permanent loss, and history's default `onCorruptMessage: 'skip'`
99
+ // dropped the message. The same row read through the checkpointer's own
100
+ // default was reported as a refusal instead, so which serde an adapter
101
+ // carried decided whether a turn survived the read.
102
+ //
103
+ // A form this serializer cannot rebuild a value from is a statement about
104
+ // this reader, not about the payload, so it names `serde` — the same brand
105
+ // the codec puts on `JsonPlusSerializer`'s `Unknown serialization type`,
106
+ // which is what makes the two agree. The type is quoted from the row, so it
107
+ // is bounded, for the reason `truncateForLog` states.
108
+ if (type !== JSON_SERDE_TYPE) {
109
+ throw (0, errors_1.validationError)(`this serializer reads only the \`${JSON_SERDE_TYPE}\` form it writes, and this payload ` +
110
+ `declares ${(0, truncate_1.truncateForLog)(String(JSON.stringify(type)))}; read the row with the ` +
111
+ 'serializer that wrote it, or rewrite the row', 'serde');
112
+ }
113
+ let text;
114
+ // The decode is inside a guard of its own because it fails for a different
115
+ // reason than the parse does, and names it separately. UTF-8 decoding is
116
+ // lenient — a malformed byte becomes U+FFFD rather than an error — so the
117
+ // only way `TextDecoder` refuses is a `data` that is not bytes at all,
118
+ // which is the caller's mistake and not a corrupt row. The codec always
119
+ // passes a `Uint8Array`; a direct caller passing anything else would
120
+ // otherwise get a bare `TypeError` from Node naming an argument called
121
+ // "list".
122
+ try {
123
+ text = typeof data === 'string' ? data : new TextDecoder().decode(data);
124
+ }
125
+ catch (error) {
126
+ throw (0, errors_1.validationError)('data must be the bytes or text this serializer wrote, as a Uint8Array or a string', 'data', error);
127
+ }
128
+ try {
129
+ // Same reasoning as `dumpsTyped`'s final return: see its comment.
130
+ return Promise.resolve(JSON.parse(text));
131
+ }
132
+ catch (error) {
133
+ throw new base_error_1.DynamoDBLangGraphError('the stored payload is not the JSON this serializer wrote, so it cannot be decoded', error_code_1.ErrorCode.PAYLOAD_CORRUPT, {}, error);
134
+ }
16
135
  },
17
136
  };
18
- //# sourceMappingURL=json-serde.js.map
137
+ Object.freeze(exports.JSON_SERDE);
138
+ /**
139
+ * The one `serdeType` whose grammar this package can check for itself: the type
140
+ * `JSON_SERDE` stamps on everything it writes, and the one LangGraph's
141
+ * own `JsonPlusSerializer` stamps on every value but a raw `Uint8Array`, which
142
+ * it stamps `bytes`.
143
+ *
144
+ * The one constant is shared by the serializer that writes this form and the
145
+ * check that re-derives it, within this module. They had each decided
146
+ * separately what they understood: the check took any other type at its
147
+ * word, while `JSON_SERDE` ignored the declared type and ran `JSON.parse` on
148
+ * whatever it was handed. A row declaring a form neither of them writes was
149
+ * therefore classified one way through one serializer and the opposite way
150
+ * through the other — and a row declaring `bytes`, which the checkpointer's
151
+ * default writes for a raw `Uint8Array`, decoded to a *different value*
152
+ * rather than failing at all when its bytes happened to parse as JSON.
153
+ */
154
+ const JSON_SERDE_TYPE = 'json';
155
+ /**
156
+ * Whether stored bytes are still the form the row that holds them declares.
157
+ *
158
+ * This is the structural question behind the two ways a decode fails —
159
+ * `PAYLOAD_CORRUPT` for bytes no reader can decode, and the `serde` refusal for
160
+ * bytes *this* reader will not rebuild a value from — and it is the only one
161
+ * this package can answer on its own. `SerializerProtocol` offers no way to ask
162
+ * a serde whether it parsed the bytes before deciding not to reconstruct what
163
+ * they name, and the refusal it throws is a caller's object: its class, its
164
+ * fields and its prose are all whatever that caller chose. Classifying a
165
+ * payload by any of those would make the code mean "a third party said so",
166
+ * which is exactly what neither code may mean.
167
+ *
168
+ * Accepts: `serdeType` — the type stamped on the row, as the descriptor carries
169
+ * it. `bytes` — what the row stored, already decompressed.
170
+ *
171
+ * Returns: whether the bytes still parse as the declared form. A type this
172
+ * package has no grammar for is taken at its word and answers `true`, so its
173
+ * serde's refusal is reported rather than written off: dropping a payload this
174
+ * reader merely cannot check would lose data on nothing but its own ignorance.
175
+ *
176
+ * Throws: **nothing**, for any bytes. It is called from inside the `catch` that
177
+ * is classifying a decode failure, where a throw would replace the failure
178
+ * being reported — and the value it is handed came off a row, so it may be
179
+ * anything that row's writer stored.
180
+ */
181
+ function bytesHoldDeclaredForm(serdeType, bytes) {
182
+ if (serdeType !== JSON_SERDE_TYPE)
183
+ return true;
184
+ try {
185
+ JSON.parse(new TextDecoder().decode(bytes));
186
+ return true;
187
+ }
188
+ catch {
189
+ return false;
190
+ }
191
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Hides the S3 SDK's own types from this package's declarations.
3
+ *
4
+ * The S3 client, its config and a command are described by the members this
5
+ * package touches, so no shipped declaration imports the optional
6
+ * `@aws-sdk/client-s3` peer and a caller without it installed still compiles
7
+ * (record 1). A real `S3Client` or `S3ClientConfig` satisfies these shapes as
8
+ * it is, so a caller who has the SDK passes its own values unchanged.
9
+ */
10
+ /** A region as the SDK accepts it: a string or a provider resolving to one. */
11
+ export type S3RegionLike = string | (() => Promise<string>);
12
+ /** A value an S3 client option can hold. */
13
+ export type S3ClientOption = string | number | boolean | object | null | undefined;
14
+ /**
15
+ * The S3 client options this library reads (`region`) or sets (`maxAttempts`),
16
+ * open to every other `S3ClientConfig` key.
17
+ */
18
+ export interface S3ClientOptions {
19
+ region?: S3RegionLike;
20
+ maxAttempts?: number;
21
+ [option: string]: S3ClientOption;
22
+ }
23
+ /**
24
+ * Structural stand-in for `S3ClientConfig`, so the shipped declarations compile
25
+ * without the optional `@aws-sdk/client-s3` peer installed. A literal gets
26
+ * completion for the options the library uses; a typed `S3ClientConfig`
27
+ * variable is accepted as it is.
28
+ */
29
+ export type S3ClientConfigLike = S3ClientOptions | object;
30
+ /**
31
+ * The options of a config, read through the structural type.
32
+ *
33
+ * Accepts: a config as the caller gave it, or nothing.
34
+ *
35
+ * Returns: the same object seen as {@link S3ClientOptions} so `region` and
36
+ * `maxAttempts` can be read; an absent config reads as empty rather than
37
+ * needing a guard at every call site.
38
+ *
39
+ * Throws: nothing.
40
+ */
41
+ export declare function s3ClientOptions(config: S3ClientConfigLike | undefined): S3ClientOptions;
42
+ /** What every SDK command object carries: its `input`. */
43
+ export interface S3CommandLike {
44
+ input: object;
45
+ }
46
+ /**
47
+ * The S3 client surface this library calls, typed structurally for the same
48
+ * reason. `S3Client` from `@aws-sdk/client-s3` satisfies it.
49
+ */
50
+ export interface S3ClientLike {
51
+ send(command: S3CommandLike, options?: object): Promise<object>;
52
+ destroy(): void;
53
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /**
3
+ * Hides the S3 SDK's own types from this package's declarations.
4
+ *
5
+ * The S3 client, its config and a command are described by the members this
6
+ * package touches, so no shipped declaration imports the optional
7
+ * `@aws-sdk/client-s3` peer and a caller without it installed still compiles
8
+ * (record 1). A real `S3Client` or `S3ClientConfig` satisfies these shapes as
9
+ * it is, so a caller who has the SDK passes its own values unchanged.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.s3ClientOptions = s3ClientOptions;
13
+ /**
14
+ * The options of a config, read through the structural type.
15
+ *
16
+ * Accepts: a config as the caller gave it, or nothing.
17
+ *
18
+ * Returns: the same object seen as {@link S3ClientOptions} so `region` and
19
+ * `maxAttempts` can be read; an absent config reads as empty rather than
20
+ * needing a guard at every call site.
21
+ *
22
+ * Throws: nothing.
23
+ */
24
+ function s3ClientOptions(config) {
25
+ return (config ?? {});
26
+ }
@@ -1,12 +1,45 @@
1
- import type { S3Client, S3ClientConfig } from '@aws-sdk/client-s3';
2
- /** Lazily import the optional `@aws-sdk/client-s3` peer, caching the module. */
3
- export declare function loadS3Sdk(): Promise<typeof import('@aws-sdk/client-s3')>;
4
1
  /**
5
- * Construct an `S3Client` from `config` using the lazily-loaded SDK. Defaults
6
- * `maxAttempts: 1` so the SDK's own internal retries are disabled and this
7
- * library's retry/backoff/classification system is the sole retry layer,
8
- * matching {@link resolveDynamoDBClient}'s equivalent default; an explicit
9
- * `maxAttempts` in `config` still wins.
2
+ * Hides that the S3 SDK is loaded on first use, and how its client is set up.
3
+ *
4
+ * An adapter without offload never imports the optional peer; the first
5
+ * offload does, once, and a missing install surfaces as `VALIDATION` naming
6
+ * the remedy (record 1). The client built here defaults to no retries of its
7
+ * own — `maxAttempts: 1` — so this package's retry is the only layer unless a
8
+ * caller's own `maxAttempts` overrides it (record 14), and its idle timer
9
+ * bounds a stalled transfer without bounding a slow one.
10
10
  */
11
- export declare function createDefaultS3Client(config: S3ClientConfig): Promise<S3Client>;
12
- //# sourceMappingURL=client.d.ts.map
11
+ import type { S3Client } from '@aws-sdk/client-s3';
12
+ import type { S3ClientConfigLike } from './client-types';
13
+ type S3Sdk = typeof import('@aws-sdk/client-s3');
14
+ /**
15
+ * The optional `@aws-sdk/client-s3` peer, imported on first use.
16
+ *
17
+ * Accepts: nothing. Concurrent callers share one import.
18
+ *
19
+ * Returns: the module, cached for every later call.
20
+ *
21
+ * Throws: `VALIDATION` naming `s3` when the package is not installed,
22
+ * carrying the install command; any other import failure — a broken build, a
23
+ * syntax error inside the package — passes through unchanged. A failure is not
24
+ * cached, so an install or a fixed bundle succeeds on a later call.
25
+ */
26
+ export declare function loadS3Sdk(): Promise<S3Sdk>;
27
+ /**
28
+ * An `S3Client` built from `config` with the lazily-loaded SDK.
29
+ *
30
+ * Accepts: `config` — any `S3ClientConfig`; an explicit `maxAttempts` or
31
+ * `requestHandler` wins over the defaults below.
32
+ *
33
+ * Returns: the client. The caller owns it and destroys it.
34
+ *
35
+ * Throws: whatever {@link loadS3Sdk} throws.
36
+ *
37
+ * Guarantees: `maxAttempts` defaults to 1, so the SDK performs no retries of
38
+ * its own and this library's retry, backoff and classification are the only
39
+ * retry layer — the same default `resolveDynamoDBClient` applies on the
40
+ * DynamoDB side. A default request handler bounds a transfer that has
41
+ * stalled, which `maxAttempts` alone does not; a `requestHandler` in `config`
42
+ * replaces it whole rather than merging with it.
43
+ */
44
+ export declare function createDefaultS3Client(config: S3ClientConfigLike): Promise<S3Client>;
45
+ export {};
@@ -1,24 +1,97 @@
1
1
  "use strict";
2
+ /**
3
+ * Hides that the S3 SDK is loaded on first use, and how its client is set up.
4
+ *
5
+ * An adapter without offload never imports the optional peer; the first
6
+ * offload does, once, and a missing install surfaces as `VALIDATION` naming
7
+ * the remedy (record 1). The client built here defaults to no retries of its
8
+ * own — `maxAttempts: 1` — so this package's retry is the only layer unless a
9
+ * caller's own `maxAttempts` overrides it (record 14), and its idle timer
10
+ * bounds a stalled transfer without bounding a slow one.
11
+ */
2
12
  Object.defineProperty(exports, "__esModule", { value: true });
3
13
  exports.loadS3Sdk = loadS3Sdk;
4
14
  exports.createDefaultS3Client = createDefaultS3Client;
15
+ const client_1 = require("../../dynamodb/client");
16
+ const errors_1 = require("../../errors/errors");
17
+ /** Codes Node and bundlers use for an import that cannot be resolved. */
18
+ const MISSING_MODULE_CODES = ['ERR_MODULE_NOT_FOUND', 'MODULE_NOT_FOUND'];
5
19
  let sdkPromise;
6
- /** Lazily import the optional `@aws-sdk/client-s3` peer, caching the module. */
20
+ /**
21
+ * Convert a failed import of the optional peer into a typed error that names
22
+ * the remedy. Any other failure (a broken build, a syntax error inside the
23
+ * package) passes through unchanged.
24
+ */
25
+ function wrapMissingPeer(error) {
26
+ const code = error.code;
27
+ if (code !== undefined && MISSING_MODULE_CODES.includes(code)) {
28
+ throw (0, errors_1.validationError)('S3 offload requires the optional peer @aws-sdk/client-s3 (npm install @aws-sdk/client-s3); ' +
29
+ 'bundlers must keep it installed or external', 's3', error);
30
+ }
31
+ throw error;
32
+ }
33
+ /**
34
+ * The optional `@aws-sdk/client-s3` peer, imported on first use.
35
+ *
36
+ * Accepts: nothing. Concurrent callers share one import.
37
+ *
38
+ * Returns: the module, cached for every later call.
39
+ *
40
+ * Throws: `VALIDATION` naming `s3` when the package is not installed,
41
+ * carrying the install command; any other import failure — a broken build, a
42
+ * syntax error inside the package — passes through unchanged. A failure is not
43
+ * cached, so an install or a fixed bundle succeeds on a later call.
44
+ */
7
45
  async function loadS3Sdk() {
8
46
  if (!sdkPromise) {
9
- sdkPromise = import('@aws-sdk/client-s3');
47
+ sdkPromise = import('@aws-sdk/client-s3').catch((error) => {
48
+ sdkPromise = undefined;
49
+ return wrapMissingPeer(error);
50
+ });
10
51
  }
11
52
  return sdkPromise;
12
53
  }
13
54
  /**
14
- * Construct an `S3Client` from `config` using the lazily-loaded SDK. Defaults
15
- * `maxAttempts: 1` so the SDK's own internal retries are disabled and this
16
- * library's retry/backoff/classification system is the sole retry layer,
17
- * matching {@link resolveDynamoDBClient}'s equivalent default; an explicit
18
- * `maxAttempts` in `config` still wins.
55
+ * An `S3Client` built from `config` with the lazily-loaded SDK.
56
+ *
57
+ * Accepts: `config` — any `S3ClientConfig`; an explicit `maxAttempts` or
58
+ * `requestHandler` wins over the defaults below.
59
+ *
60
+ * Returns: the client. The caller owns it and destroys it.
61
+ *
62
+ * Throws: whatever {@link loadS3Sdk} throws.
63
+ *
64
+ * Guarantees: `maxAttempts` defaults to 1, so the SDK performs no retries of
65
+ * its own and this library's retry, backoff and classification are the only
66
+ * retry layer — the same default `resolveDynamoDBClient` applies on the
67
+ * DynamoDB side. A default request handler bounds a transfer that has
68
+ * stalled, which `maxAttempts` alone does not; a `requestHandler` in `config`
69
+ * replaces it whole rather than merging with it.
19
70
  */
20
71
  async function createDefaultS3Client(config) {
21
72
  const { S3Client: S3ClientCtor } = await loadS3Sdk();
22
- return new S3ClientCtor({ maxAttempts: 1, ...config });
73
+ // One field, where the DynamoDB client gets three, and the asymmetry is
74
+ // deliberate. `requestTimeout` bounds request creation until response
75
+ // *headers* arrive, and a `PutObject`'s headers arrive only once the whole
76
+ // body has been uploaded — so here it would be a bound on upload duration,
77
+ // over payloads running from the offload threshold to the download cap, and
78
+ // a legitimate large upload on a slow link would be destroyed for being
79
+ // slow. `socketTimeout` is an idle timer that any activity in either
80
+ // direction resets, so it separates a stalled transfer from a slow one.
81
+ // `throwOnRequestTimeout` is absent because without a request timeout it has
82
+ // nothing to act on, and `connectionTimeout` because its timer counts the
83
+ // wait behind the agent's sockets, which this path fans out across.
84
+ //
85
+ // What this bounds is a transfer stalled after its socket was assigned, not
86
+ // the whole attempt: nothing here bounds the time a request spends queued
87
+ // for a socket, and an idle timer is not a deadline, so a large upload's
88
+ // total duration stays unbounded. At or above 2 MiB the SDK sends
89
+ // `Expect: 100-continue` and the handler then waits six seconds for the
90
+ // continue on a throwaway agent, so the five-second idle timer is what
91
+ // fires first — the one place the two timers race.
92
+ return new S3ClientCtor({
93
+ maxAttempts: 1,
94
+ requestHandler: { socketTimeout: client_1.DEFAULT_SOCKET_TIMEOUT_MS },
95
+ ...config,
96
+ });
23
97
  }
24
- //# sourceMappingURL=client.js.map