@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,9 +1,44 @@
1
1
  "use strict";
2
+ /**
3
+ * Hides how a logger and a value are redacted.
4
+ *
5
+ * A redacting logger walks every argument of every line, bounded in depth and
6
+ * safe against cycles and hostile getters, and replaces the value of any key
7
+ * that looks like a secret and any text that looks like one; the same walk
8
+ * serves `redactSecrets` for a value a caller wants to log themselves.
9
+ */
2
10
  Object.defineProperty(exports, "__esModule", { value: true });
3
11
  exports.redactSecrets = redactSecrets;
4
12
  exports.redactLogger = redactLogger;
5
- const redaction_walk_1 = require("./redaction-walk");
13
+ exports.walkObject = walkObject;
14
+ const errors_1 = require("../errors/errors");
15
+ const collaborators_1 = require("../validation/collaborators");
16
+ const option_shape_1 = require("../validation/option-shape");
17
+ const primitives_1 = require("../validation/primitives");
18
+ const logger_1 = require("./logger");
6
19
  const secret_patterns_1 = require("./secret-patterns");
20
+ /** Substituted for a log argument whose redaction itself failed (a throwing getter, say). */
21
+ const UNREDACTABLE = '[UNREDACTABLE]';
22
+ /**
23
+ * Reject a list of value shapes this package could not apply.
24
+ *
25
+ * Accepts: `value` — the list as the caller gave it. `field` — what the error
26
+ * names.
27
+ *
28
+ * Returns: nothing: the value is kept under its declared type, and this
29
+ * checks it. An empty list is valid, and is how a caller turns value matching
30
+ * off.
31
+ *
32
+ * Throws: `VALIDATION` naming `field` for a non-array or an entry that is
33
+ * not a `RegExp`. {@link redactText} skips such an entry, which protects
34
+ * nothing while the caller believes it does, so it is refused where it is
35
+ * supplied instead.
36
+ */
37
+ function assertRegExpArray(value, field) {
38
+ if (!Array.isArray(value) || value.some((entry) => !(0, secret_patterns_1.isRegExp)(entry))) {
39
+ throw (0, errors_1.validationError)(`${field} must be an array of RegExp`, field);
40
+ }
41
+ }
7
42
  /**
8
43
  * Recursively clone `value`, replacing any value at a secret-looking key with
9
44
  * `[REDACTED]` and any recognised secret *shape* inside a string — including an
@@ -17,44 +52,265 @@ const secret_patterns_1 = require("./secret-patterns");
17
52
  * `stack` redacted and every other own property recursed like a plain object.
18
53
  * `Date`/`RegExp` keep their identity rather than collapsing to `{}`,
19
54
  * `Set`/`Map` render as their contents, and binary views become a short label.
20
- * Does not mutate the input.
55
+ *
56
+ * Accepts: `value` — any log argument, including `undefined`, a primitive, a
57
+ * typed `Error`, a class instance or a `Record`, so callers never cast. A
58
+ * cyclic or shared graph is fine; each node is walked once. `patterns` and
59
+ * `valuePatterns` — the key names and value shapes to redact, an array of
60
+ * strings and an array of `RegExp` respectively; both default to this
61
+ * package's own lists, and an empty one turns that rule off.
62
+ *
63
+ * Returns: a redacted clone. The input is never mutated — a logger that
64
+ * scrubbed the caller's own object would corrupt the very data the application
65
+ * is working with.
66
+ *
67
+ * Throws: `VALIDATION` naming `patterns` or `valuePatterns` for a list this
68
+ * function could not apply, which is a mistake in the call itself and is
69
+ * raised before anything is walked. Nothing after that: a value whose
70
+ * redaction fails — a throwing getter, a structure deep enough to exhaust the
71
+ * stack — is replaced whole by `[UNREDACTABLE]`, since a logger that throws
72
+ * takes down the operation it was only observing. {@link redactLogger}
73
+ * redacts one argument per call, so there a single hostile argument is what is
74
+ * lost rather than the record around it.
21
75
  */
22
76
  function redactSecrets(value, patterns = secret_patterns_1.DEFAULT_SECRET_KEY_PATTERNS, valuePatterns = secret_patterns_1.DEFAULT_SECRET_VALUE_PATTERNS) {
23
- const seen = new WeakSet();
77
+ (0, primitives_1.assertStringArray)(patterns, 'patterns');
78
+ assertRegExpArray(valuePatterns, 'valuePatterns');
79
+ // `walking` detects a cycle; `done` memoises a finished node. Both are
80
+ // needed and they answer different questions. A guard that only removed a
81
+ // node when its subtree finished is correct for cycles but re-walks every
82
+ // node reachable by more than one path, so a graph that merely *shares*
83
+ // structure — not even a cycle — costs exponential time: without `done`, a
84
+ // few dozen shared objects in a sub-kilobyte argument would block the event
85
+ // loop for minutes, and this is a public export reachable from caller code.
86
+ const walking = new WeakSet();
87
+ const done = new WeakMap();
24
88
  const walk = (current) => {
25
89
  if (typeof current === 'string')
26
90
  return (0, secret_patterns_1.redactText)(current, valuePatterns);
27
91
  if (current === null || typeof current !== 'object')
28
92
  return current;
29
- if (seen.has(current))
93
+ if (done.has(current))
94
+ return done.get(current);
95
+ if (walking.has(current))
30
96
  return '[Circular]';
31
- seen.add(current);
97
+ walking.add(current);
32
98
  try {
33
- return (0, redaction_walk_1.walkObject)(current, { keyPatterns: patterns, valuePatterns, walk });
99
+ const redacted = walkObject(current, { keyPatterns: patterns, valuePatterns, walk });
100
+ done.set(current, redacted);
101
+ return redacted;
34
102
  }
35
103
  finally {
36
- seen.delete(current);
104
+ walking.delete(current);
37
105
  }
38
106
  };
39
- return walk(value);
107
+ try {
108
+ return walk(value);
109
+ }
110
+ catch {
111
+ // Every failure of the walk yields the marker: a `RangeError` from nesting
112
+ // deeper than the stack holds, and equally a getter of the caller's own
113
+ // that throws. Telling the two apart served no caller. The value is being
114
+ // prepared for a log line, and the log line is typically written from a
115
+ // `catch`, so a throw here does not report the hostile value — it replaces
116
+ // the failure that was being reported with a `TypeError` about a getter.
117
+ return UNREDACTABLE;
118
+ }
40
119
  }
41
120
  /**
42
- * Wrap a logger so object args are redacted before delegation. The message
43
- * string is passed through unchanged (never interpolate secrets into it).
121
+ * Reject redaction options that would silently fail to redact.
122
+ *
123
+ * A non-string in `extraKeys` reached `key.toLowerCase()` and raised a bare
124
+ * `TypeError` at the first log call; a non-`RegExp` in `extraValuePatterns` is
125
+ * skipped by {@link redactText} and would have protected nothing while the
126
+ * caller believed it did. An `options` that is not an object at all carried no
127
+ * rule to begin with, and was read as "none given", leaving the caller running
128
+ * on a default it believed it had overridden. All three are refused here,
129
+ * once, where they are configured.
130
+ *
131
+ * Accepts: `options` — as the caller gave it.
132
+ *
133
+ * Returns: nothing: the value is kept under its declared type, and this
134
+ * checks it.
135
+ *
136
+ * Throws: `VALIDATION` naming `options`, `extraKeys` or `extraValuePatterns`.
137
+ */
138
+ function assertRedactionOptions(options) {
139
+ (0, option_shape_1.assertObjectShape)(options, 'options');
140
+ if (options.extraKeys !== undefined)
141
+ (0, primitives_1.assertStringArray)(options.extraKeys, 'extraKeys');
142
+ if (options.extraValuePatterns !== undefined) {
143
+ assertRegExpArray(options.extraValuePatterns, 'extraValuePatterns');
144
+ }
145
+ }
146
+ /**
147
+ * Wrap a logger so object args are redacted before delegation.
148
+ *
149
+ * Accepts: `inner` — the logger to delegate to; it must carry all four
150
+ * methods, because a missing one is a wiring mistake worth naming here rather
151
+ * than at the first log line. `options.extraKeys` — further key names to
152
+ * redact, matched like the defaults. `options.extraValuePatterns` — further
153
+ * secret shapes; each must be a `RegExp`, and it is applied globally whether or
154
+ * not it carries the `g` flag.
155
+ *
156
+ * Returns: a logger with the same four methods.
157
+ *
158
+ * Throws: `VALIDATION` naming `logger` or `logger.<method>` for a logger it
159
+ * could not delegate to, and `options`, `extraKeys` or `extraValuePatterns`
160
+ * for an option of the wrong type. Nothing at log time.
161
+ *
162
+ * Guarantees: the message string is passed through unchanged — never
163
+ * interpolate a secret into it — and every other argument is redacted before
164
+ * it reaches `inner`. Past the wrap call nothing escapes a log call: an
165
+ * argument whose redaction fails is replaced by a fixed marker, and a failure
166
+ * of `inner` itself is absorbed, because the
167
+ * operation that wrote the line was only observing itself and is commonly
168
+ * reporting some other failure already.
44
169
  */
45
170
  function redactLogger(inner, options = {}) {
171
+ (0, collaborators_1.assertMembers)(inner, collaborators_1.LOGGER_MEMBERS, 'logger');
172
+ assertRedactionOptions(options);
46
173
  const patterns = options.extraKeys
47
- ? [...secret_patterns_1.DEFAULT_SECRET_KEY_PATTERNS, ...options.extraKeys.map((key) => key.toLowerCase())]
174
+ ? [...secret_patterns_1.DEFAULT_SECRET_KEY_PATTERNS, ...options.extraKeys.map(secret_patterns_1.normaliseKey)]
48
175
  : secret_patterns_1.DEFAULT_SECRET_KEY_PATTERNS;
49
176
  const valuePatterns = options.extraValuePatterns
50
177
  ? [...secret_patterns_1.DEFAULT_SECRET_VALUE_PATTERNS, ...options.extraValuePatterns]
51
178
  : secret_patterns_1.DEFAULT_SECRET_VALUE_PATTERNS;
52
- const wrap = (args) => args.map((arg) => redactSecrets(arg, patterns, valuePatterns));
179
+ const deliver = (method) => (message, ...args) => (0, logger_1.absorbLoggerFailure)(() => inner[method](message, ...args.map((arg) => redactSecrets(arg, patterns, valuePatterns))));
53
180
  return {
54
- info: (message, ...args) => inner.info(message, ...wrap(args)),
55
- warn: (message, ...args) => inner.warn(message, ...wrap(args)),
56
- error: (message, ...args) => inner.error(message, ...wrap(args)),
57
- debug: (message, ...args) => inner.debug(message, ...wrap(args)),
181
+ info: deliver('info'),
182
+ warn: deliver('warn'),
183
+ error: deliver('error'),
184
+ debug: deliver('debug'),
58
185
  };
59
186
  }
60
- //# sourceMappingURL=redaction.js.map
187
+ /** True when `value` is a Set, tested by tag so a cross-realm Set still matches. */
188
+ function isSetValue(value) {
189
+ return Object.prototype.toString.call(value) === '[object Set]';
190
+ }
191
+ /** True when `value` is a Map, tested by tag so a cross-realm Map still matches. */
192
+ function isMapValue(value) {
193
+ return Object.prototype.toString.call(value) === '[object Map]';
194
+ }
195
+ /**
196
+ * True when `value` is an Error (or subclass) or a `DOMException` — which has
197
+ * its own tag yet carries the same `name`/`message`/`stack` — tested by tag,
198
+ * not `instanceof`, so a cross-realm error still matches.
199
+ */
200
+ function isErrorValue(value) {
201
+ const tag = Object.prototype.toString.call(value);
202
+ return tag === '[object Error]' || tag === '[object DOMException]';
203
+ }
204
+ /**
205
+ * True for a value whose identity matters more than its own properties.
206
+ * `Date` and `RegExp` have none, so recursing either would yield a bare `{}`.
207
+ */
208
+ function isOpaqueValue(value) {
209
+ const tag = Object.prototype.toString.call(value);
210
+ return tag === '[object Date]' || tag === '[object RegExp]';
211
+ }
212
+ /**
213
+ * Rebuild entries into a plain object, redacting values at secret-looking
214
+ * keys. Properties are defined, not assigned: `out['__proto__'] = …` would
215
+ * replace the result's prototype (and drop the entry) instead of recording the
216
+ * key as data.
217
+ */
218
+ function redactEntries(entries, keyPatterns, walk) {
219
+ const out = {};
220
+ for (const [key, value] of entries) {
221
+ Object.defineProperty(out, key, {
222
+ value: (0, secret_patterns_1.isSecretKey)(key, keyPatterns) ? secret_patterns_1.REDACTED : walk(value),
223
+ enumerable: true,
224
+ writable: true,
225
+ configurable: true,
226
+ });
227
+ }
228
+ return out;
229
+ }
230
+ /**
231
+ * A Map's entries as an object. Keys are stringified so a non-string key is
232
+ * still reported rather than dropped — including as `[object Object]` for a
233
+ * plain-object key, which beats silently losing the entry — and each is
234
+ * checked against the secret-key patterns exactly as a plain object's own
235
+ * keys are.
236
+ *
237
+ * The annotation on `keyText` is `Redactable`'s own shape restated with an
238
+ * explicit `toString`, which every one of its members already has; it changes
239
+ * nothing about which key is what, only what `no-base-to-string` can see, so
240
+ * it stops mistaking the deliberate `[object Object]` case above for a bug.
241
+ */
242
+ function redactMap(value, deps) {
243
+ const entries = [...value].map(([key, entry]) => {
244
+ const keyText = key;
245
+ return [String(keyText), entry];
246
+ });
247
+ return redactEntries(entries, deps.keyPatterns, deps.walk);
248
+ }
249
+ /**
250
+ * Rebuild an Error as a plain object carrying its redacted text alongside its
251
+ * redacted own properties. The one exception is an Error with no own
252
+ * enumerable data, no `cause`, no aggregated `errors`, and no secret in its
253
+ * text: it is returned by reference so its identity and stack trace survive,
254
+ * which is what keeps a caught error useful in a log.
255
+ *
256
+ * `cause` and `AggregateError.errors` are copied explicitly because both are
257
+ * defined *non-enumerable* per spec, so `Object.entries` never sees them.
258
+ * Without this the whole chain vanished on every rebuild — and the rebuild
259
+ * always fires for this library's own error types, since each attaches an
260
+ * enumerable `code`/`context`. A redacted `RETRY_EXHAUSTED` would then no
261
+ * longer say whether the underlying failure was a throttle, a validation error
262
+ * or a network fault, which is the entire reason it carries a cause. A bare
263
+ * Error *with* a cause is rebuilt for the same reason: passing it by reference
264
+ * would hand the caller whatever secret the cause carries. Recursing through
265
+ * `walk` redacts the chain too, and the cycle guard handles a cause that
266
+ * points back at its own wrapper.
267
+ */
268
+ function redactError(current, entries, deps) {
269
+ const text = (0, secret_patterns_1.redactErrorText)(current, deps.valuePatterns);
270
+ const aggregated = current.errors;
271
+ const bare = entries.length === 0 && current.cause === undefined && aggregated === undefined;
272
+ if (bare && !text.changed)
273
+ return current;
274
+ const out = redactEntries(entries, deps.keyPatterns, deps.walk);
275
+ out.name = text.name;
276
+ out.message = text.message;
277
+ out.stack = text.stack;
278
+ if (current.cause !== undefined)
279
+ out.cause = deps.walk(current.cause);
280
+ if (Array.isArray(aggregated))
281
+ out.errors = deps.walk(aggregated);
282
+ return out;
283
+ }
284
+ /**
285
+ * Dispatch one non-null object by its shape.
286
+ *
287
+ * Accepts: `current` — any object. `deps.walk` — how to recurse, which carries
288
+ * the cycle and memo state this module deliberately does not own.
289
+ *
290
+ * Returns: the redacted form — arrays and plain objects recursed, binary views
291
+ * collapsed to a label, `Date`/`RegExp` passed through by reference so they do
292
+ * not become `{}`, `Set`/`Map` rendered as their contents, and an Error through
293
+ * the error path, which preserves the non-enumerable text a plain walk cannot
294
+ * see.
295
+ *
296
+ * Throws: whatever a property getter on the value throws. `redactSecrets`, the
297
+ * only caller, catches it and returns `[UNREDACTABLE]` in place of the whole
298
+ * value it was given, rather than raising a getter's error at a caller who
299
+ * asked only for a copy it could log.
300
+ */
301
+ function walkObject(current, deps) {
302
+ if (Array.isArray(current))
303
+ return current.map(deps.walk);
304
+ if (ArrayBuffer.isView(current))
305
+ return (0, secret_patterns_1.binaryLabel)(current);
306
+ if (isOpaqueValue(current))
307
+ return current;
308
+ if (isSetValue(current))
309
+ return [...current].map(deps.walk);
310
+ if (isMapValue(current))
311
+ return redactMap(current, deps);
312
+ const entries = Object.entries(current);
313
+ if (isErrorValue(current))
314
+ return redactError(current, entries, deps);
315
+ return redactEntries(entries, deps.keyPatterns, deps.walk);
316
+ }
@@ -1,7 +1,36 @@
1
+ /**
2
+ * Hides what a secret looks like.
3
+ *
4
+ * Which key names mark their value as a secret, which credential formats are
5
+ * recognised in free text, how a match is replaced while the field's name is
6
+ * kept, and how a caught value's message is redacted before another error
7
+ * quotes it are decided here. The redacting logger and every error that
8
+ * quotes its cause share these rules, so a new credential shape is one edit.
9
+ */
1
10
  /** Marker substituted for anything recognised as secret. */
2
11
  export declare const REDACTED = "[REDACTED]";
3
- /** Key names (matched case-insensitively as substrings) whose value is a secret. */
12
+ /**
13
+ * Key names whose value is a secret. Each entry is a *normalised* name — see
14
+ * {@link normaliseKey} — and matches a key whose normalised form equals it or
15
+ * ends with it. Suffix matching is what catches `secretAccessKey`, `x-api-key`,
16
+ * `client_secret` and `AUTH_TOKEN`; requiring the pattern to be a suffix, not a
17
+ * substring, is what spares `maxTokens`, `total_tokens`, `tokenizer` and
18
+ * `secretary` — a bare substring match would redact all four for merely
19
+ * containing `token` or `secret`.
20
+ */
4
21
  export declare const DEFAULT_SECRET_KEY_PATTERNS: readonly string[];
22
+ /**
23
+ * Canonical form of a key name for matching.
24
+ *
25
+ * Accepts: any key name, in any case and with any separators.
26
+ *
27
+ * Returns: it lower-cased with every character that is not a letter or digit
28
+ * removed, so `api_key`, `x-api-key`, `ApiKey` and `API KEY` all become
29
+ * `apikey` and one pattern covers every spelling.
30
+ *
31
+ * Throws: nothing.
32
+ */
33
+ export declare function normaliseKey(key: string): string;
5
34
  /**
6
35
  * Secret shapes recognisable in free text, where key-name matching cannot
7
36
  * reach: an error's `message`/`stack`, or any other string value. Deliberately
@@ -35,26 +64,105 @@ export declare const DEFAULT_SECRET_KEY_PATTERNS: readonly string[];
35
64
  * this fallback from over-redacting sibling JSON fields.
36
65
  */
37
66
  export declare const DEFAULT_SECRET_VALUE_PATTERNS: readonly RegExp[];
38
- /** True when `key` matches any secret-key pattern. */
67
+ /**
68
+ * Whether a key name says its value is a secret.
69
+ *
70
+ * Accepts: `key` — any name. `patterns` — already-normalised names; an empty
71
+ * list matches nothing, which is how a caller turns key matching off.
72
+ *
73
+ * Returns: whether the normalised key equals or *ends with* a pattern. Suffix,
74
+ * not substring: that is what catches `secretAccessKey` and `x-api-key` while
75
+ * sparing `maxTokens`, `tokenizer` and `secretary`.
76
+ *
77
+ * Throws: nothing.
78
+ */
39
79
  export declare function isSecretKey(key: string, patterns: readonly string[]): boolean;
80
+ /**
81
+ * An error's message with recognised credential shapes redacted.
82
+ *
83
+ * Accepts: any error — and, since this is what a `catch` block binds, any
84
+ * other value a `throw` can produce: `null`, `undefined`, a string, a number,
85
+ * a symbol, a plain object. Such a value is described through {@link toError}
86
+ * first and the description is what is redacted, so a secret it carries in its
87
+ * own text is still caught.
88
+ *
89
+ * Returns: the message, redacted with the default value patterns and then
90
+ * bounded by `truncateRelayedText` — for embedding in another error's
91
+ * message, since a wrapper that quotes its cause must not leak a `password=`
92
+ * or token the cause happened to carry. That text reaches `err.message`, which
93
+ * an application may print without a redacting logger.
94
+ *
95
+ * The bound is here rather than at the sites that quote the result, so no call
96
+ * site can get it wrong and no future one has to remember: a `RETRY_EXHAUSTED`
97
+ * report, a wrapped AWS failure, a compensation failure and both S3 transfer
98
+ * errors all inherit it from this one line. Redaction runs **before** the cut,
99
+ * because cutting first could split a credential shape past the pattern that
100
+ * would have caught it. Its own cap rather than the identifier cap: this is
101
+ * prose, and `MAX_RELAYED_MESSAGE_CHARS` records what that number is
102
+ * measured against. The value worth bounding is not the AWS SDK's own text but
103
+ * a **caller's** — a `serde` refusal or a `vectorBackend` rejection, whose
104
+ * length the caller controls entirely and which some paths quote once per row.
105
+ *
106
+ * Throws: **nothing**, for any value. Reading `.message` off a thrown
107
+ * primitive yielded `undefined` and the redaction then raised a `TypeError` —
108
+ * from inside the `catch` that was reporting the real failure, and from the
109
+ * one function a static guard funnels every one of this package's `catch`
110
+ * blocks into. Its promise has to hold for what a `catch` actually binds, or
111
+ * the guard concentrates every site into a function that is not safe.
112
+ */
113
+ export declare function redactedMessage(error: Error): string;
114
+ /**
115
+ * Whether `value` is a regular expression.
116
+ *
117
+ * Accepts: anything, including a `RegExp` from another realm.
118
+ *
119
+ * Returns: whether its tag says so. By tag rather than `instanceof`, which is
120
+ * banned repo-wide because it answers "no" across a realm or a duplicated
121
+ * module.
122
+ *
123
+ * Throws: nothing.
124
+ */
125
+ export declare function isRegExp(value: RegExp): boolean;
40
126
  /**
41
127
  * Replace every recognised secret shape inside `value` with {@link REDACTED},
42
128
  * leaving the surrounding text intact so a redacted message stays readable.
43
- * Each pattern is rebuilt per call so a `g` flag's `lastIndex` never leaks
44
- * between invocations.
45
- *
46
- * A pattern may capture a leading group it wants **preserved**: only the rest
47
- * of the match is replaced, which is what keeps `apiKey=[REDACTED]` saying
48
- * which field was redacted instead of collapsing to a bare marker. A pattern
49
- * with no group is replaced whole, as before. `String.prototype.replace`
50
- * passes the match *offset* — a number — as the second callback argument when
51
- * the pattern has no group, hence the `typeof` test rather than an
52
- * `undefined` check.
129
+ *
130
+ * Accepts: `value` — any text. `patterns` — applied in order, each against the
131
+ * result of the last; an empty list returns the text unchanged. An entry that
132
+ * is not a `RegExp` is skipped: reading `.source` off one produced
133
+ * `new RegExp(undefined)` — that is `/(?:)/`, which matches the empty string
134
+ * and prefixed the marker to every value while catching no secret at all.
135
+ * Both public entry points — `redactSecrets` and {@link redactLogger} — now
136
+ * refuse such an entry where it is supplied, since a skipped pattern protects
137
+ * nothing while its caller believes it does; skipping remains the last-ditch
138
+ * guard for a list this package assembles internally.
139
+ *
140
+ * Returns: the text with every match replaced. A pattern may capture a leading
141
+ * group it wants **preserved**: only the rest of the match is replaced, which
142
+ * keeps `apiKey=[REDACTED]` saying which field was redacted instead of
143
+ * collapsing to a bare marker. A pattern with no group is replaced whole.
144
+ * `String.prototype.replace` passes the match *offset* — a number — as the
145
+ * second callback argument when the pattern has no group, hence the `typeof`
146
+ * test rather than an `undefined` check.
147
+ *
148
+ * Throws: nothing.
149
+ *
150
+ * Guarantees: every pattern is applied globally and from a fresh copy, so
151
+ * neither a missing `g` flag nor a leftover `lastIndex` can leave a later
152
+ * occurrence in the clear.
53
153
  */
54
154
  export declare function redactText(value: string, patterns: readonly RegExp[]): string;
55
155
  /**
56
- * A short label for a binary view. Recursing one would explode it into a
57
- * per-index numeric map, both unreadable and far larger than the value itself.
156
+ * A short label for a binary view.
157
+ *
158
+ * Accepts: any `ArrayBufferView`.
159
+ *
160
+ * Returns: its type and byte length, e.g. `[Uint8Array(4096)]`. Recursing into
161
+ * one would explode it into a per-index numeric map, both unreadable and far
162
+ * larger than the value itself — and a payload is exactly the thing a log must
163
+ * not carry.
164
+ *
165
+ * Throws: nothing.
58
166
  */
59
167
  export declare function binaryLabel(value: ArrayBufferView): string;
60
168
  /** An Error's redacted non-enumerable text, plus whether redaction changed it. */
@@ -65,10 +173,32 @@ export interface RedactedErrorText {
65
173
  changed: boolean;
66
174
  }
67
175
  /**
68
- * Redact an Error's `name`/`message`/`stack`. `changed` reports whether any
69
- * secret was actually found, which is what decides between passing a bare
70
- * Error through by reference (preserving its identity and stack trace) and
71
- * rebuilding it so the secret cannot escape.
176
+ * Redact an Error's `name`, `message` and `stack`.
177
+ *
178
+ * Accepts: `error` — any error; a missing `stack` stays missing. Any other
179
+ * value a `throw` can produce is described through {@link toError} first, on
180
+ * the same reasoning as {@link redactedMessage}: the walk that calls this only
181
+ * reaches it for a value whose tag says `Error`, but the promise below is
182
+ * written in this function's own contract and is this function's to keep.
183
+ *
184
+ * Returns: the redacted text, plus `changed`: whether any secret was actually
185
+ * found. That flag is what decides between passing a bare Error through by
186
+ * reference — preserving its identity and stack trace — and rebuilding it so
187
+ * the secret cannot escape. It compares against the described error, so a
188
+ * value that had no text of its own is never reported as changed by the
189
+ * describing.
190
+ *
191
+ * None of the three is cut, and that is a decision rather than an omission.
192
+ * The rule that bounds unchecked text bounds what *this package* writes into
193
+ * its own `err.message` and its own log lines — `redactedMessage` is that
194
+ * funnel. This function is on the other side of the boundary: it rebuilds an
195
+ * Error the **consumer** handed to `redactSecrets`, or to the logger
196
+ * `redactLogger` wrapped, on the way to the consumer's own transport. Cutting
197
+ * there would change what their transport receives, for a value this package
198
+ * neither produced nor quotes, and the caller asked for redaction rather than
199
+ * for truncation. A consumer who wants a bound has their own transport to put
200
+ * one in.
201
+ *
202
+ * Throws: **nothing**, for any value.
72
203
  */
73
204
  export declare function redactErrorText(error: Error, patterns: readonly RegExp[]): RedactedErrorText;
74
- //# sourceMappingURL=secret-patterns.d.ts.map