@backblaze-labs/b2-sdk 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (701) hide show
  1. package/CHANGELOG.md +110 -5
  2. package/README.md +144 -33
  3. package/dist/_virtual/_b2-sdk-version-json.cjs +4 -0
  4. package/dist/_virtual/_b2-sdk-version-json.js +4 -0
  5. package/dist/auth/account-info.d.cts +32 -0
  6. package/dist/auth/account-info.d.cts.map +1 -1
  7. package/dist/auth/account-info.d.ts +32 -0
  8. package/dist/auth/account-info.d.ts.map +1 -1
  9. package/dist/auth/file.cjs +408 -207
  10. package/dist/auth/file.cjs.map +1 -1
  11. package/dist/auth/file.d.cts +77 -3
  12. package/dist/auth/file.d.cts.map +1 -1
  13. package/dist/auth/file.d.ts +77 -3
  14. package/dist/auth/file.d.ts.map +1 -1
  15. package/dist/auth/file.js +407 -207
  16. package/dist/auth/file.js.map +1 -1
  17. package/dist/auth/in-memory.cjs +212 -183
  18. package/dist/auth/in-memory.cjs.map +1 -1
  19. package/dist/auth/in-memory.d.cts +8 -0
  20. package/dist/auth/in-memory.d.cts.map +1 -1
  21. package/dist/auth/in-memory.d.ts +8 -0
  22. package/dist/auth/in-memory.d.ts.map +1 -1
  23. package/dist/auth/in-memory.js +211 -182
  24. package/dist/auth/in-memory.js.map +1 -1
  25. package/dist/auth/index.cjs +7 -9
  26. package/dist/auth/index.d.cts +3 -2
  27. package/dist/auth/index.d.cts.map +1 -1
  28. package/dist/auth/index.d.ts +3 -2
  29. package/dist/auth/index.d.ts.map +1 -1
  30. package/dist/auth/index.js +2 -8
  31. package/dist/auth/realms.cjs +80 -7
  32. package/dist/auth/realms.cjs.map +1 -1
  33. package/dist/auth/realms.d.cts +27 -4
  34. package/dist/auth/realms.d.cts.map +1 -1
  35. package/dist/auth/realms.d.ts +27 -4
  36. package/dist/auth/realms.d.ts.map +1 -1
  37. package/dist/auth/realms.js +80 -9
  38. package/dist/auth/realms.js.map +1 -1
  39. package/dist/auth/upload-url-pool.cjs +55 -51
  40. package/dist/auth/upload-url-pool.cjs.map +1 -1
  41. package/dist/auth/upload-url-pool.js +55 -51
  42. package/dist/auth/upload-url-pool.js.map +1 -1
  43. package/dist/bucket.cjs +785 -787
  44. package/dist/bucket.cjs.map +1 -1
  45. package/dist/bucket.d.cts +35 -47
  46. package/dist/bucket.d.cts.map +1 -1
  47. package/dist/bucket.d.ts +35 -47
  48. package/dist/bucket.d.ts.map +1 -1
  49. package/dist/bucket.js +780 -782
  50. package/dist/bucket.js.map +1 -1
  51. package/dist/client.cjs +246 -228
  52. package/dist/client.cjs.map +1 -1
  53. package/dist/client.d.cts +25 -17
  54. package/dist/client.d.cts.map +1 -1
  55. package/dist/client.d.ts +25 -17
  56. package/dist/client.d.ts.map +1 -1
  57. package/dist/client.js +243 -225
  58. package/dist/client.js.map +1 -1
  59. package/dist/copy/large.cjs +114 -71
  60. package/dist/copy/large.cjs.map +1 -1
  61. package/dist/copy/large.d.cts +6 -0
  62. package/dist/copy/large.d.cts.map +1 -1
  63. package/dist/copy/large.d.ts +6 -0
  64. package/dist/copy/large.d.ts.map +1 -1
  65. package/dist/copy/large.js +112 -69
  66. package/dist/copy/large.js.map +1 -1
  67. package/dist/download/checksum.cjs +89 -0
  68. package/dist/download/checksum.cjs.map +1 -0
  69. package/dist/download/checksum.d.cts +40 -0
  70. package/dist/download/checksum.d.cts.map +1 -0
  71. package/dist/download/checksum.d.ts +40 -0
  72. package/dist/download/checksum.d.ts.map +1 -0
  73. package/dist/download/checksum.js +87 -0
  74. package/dist/download/checksum.js.map +1 -0
  75. package/dist/download/parallel.cjs +214 -118
  76. package/dist/download/parallel.cjs.map +1 -1
  77. package/dist/download/parallel.d.cts +5 -1
  78. package/dist/download/parallel.d.cts.map +1 -1
  79. package/dist/download/parallel.d.ts +5 -1
  80. package/dist/download/parallel.d.ts.map +1 -1
  81. package/dist/download/parallel.js +212 -116
  82. package/dist/download/parallel.js.map +1 -1
  83. package/dist/download/single.cjs +188 -97
  84. package/dist/download/single.cjs.map +1 -1
  85. package/dist/download/single.d.cts +6 -1
  86. package/dist/download/single.d.cts.map +1 -1
  87. package/dist/download/single.d.ts +6 -1
  88. package/dist/download/single.d.ts.map +1 -1
  89. package/dist/download/single.js +186 -98
  90. package/dist/download/single.js.map +1 -1
  91. package/dist/errors/index.cjs +699 -243
  92. package/dist/errors/index.cjs.map +1 -1
  93. package/dist/errors/index.d.cts +285 -82
  94. package/dist/errors/index.d.cts.map +1 -1
  95. package/dist/errors/index.d.ts +285 -82
  96. package/dist/errors/index.d.ts.map +1 -1
  97. package/dist/errors/index.js +678 -261
  98. package/dist/errors/index.js.map +1 -1
  99. package/dist/http/retry.cjs +45 -28
  100. package/dist/http/retry.cjs.map +1 -1
  101. package/dist/http/retry.d.cts +15 -2
  102. package/dist/http/retry.d.cts.map +1 -1
  103. package/dist/http/retry.d.ts +15 -2
  104. package/dist/http/retry.d.ts.map +1 -1
  105. package/dist/http/retry.js +46 -31
  106. package/dist/http/retry.js.map +1 -1
  107. package/dist/http/transport.cjs +438 -140
  108. package/dist/http/transport.cjs.map +1 -1
  109. package/dist/http/transport.d.cts +21 -2
  110. package/dist/http/transport.d.cts.map +1 -1
  111. package/dist/http/transport.d.ts +21 -2
  112. package/dist/http/transport.d.ts.map +1 -1
  113. package/dist/http/transport.js +437 -140
  114. package/dist/http/transport.js.map +1 -1
  115. package/dist/http/url-guard.cjs +154 -89
  116. package/dist/http/url-guard.cjs.map +1 -1
  117. package/dist/http/url-guard.d.cts +25 -3
  118. package/dist/http/url-guard.d.cts.map +1 -1
  119. package/dist/http/url-guard.d.ts +25 -3
  120. package/dist/http/url-guard.d.ts.map +1 -1
  121. package/dist/http/url-guard.js +152 -90
  122. package/dist/http/url-guard.js.map +1 -1
  123. package/dist/http/user-agent.cjs +84 -44
  124. package/dist/http/user-agent.cjs.map +1 -1
  125. package/dist/http/user-agent.js +84 -46
  126. package/dist/http/user-agent.js.map +1 -1
  127. package/dist/index.cjs +101 -77
  128. package/dist/index.d.cts +27 -21
  129. package/dist/index.d.cts.map +1 -1
  130. package/dist/index.d.ts +27 -21
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +15 -71
  133. package/dist/internal/b2-naming.cjs +66 -0
  134. package/dist/internal/b2-naming.cjs.map +1 -0
  135. package/dist/internal/b2-naming.d.cts +43 -0
  136. package/dist/internal/b2-naming.d.cts.map +1 -0
  137. package/dist/internal/b2-naming.d.ts +43 -0
  138. package/dist/internal/b2-naming.d.ts.map +1 -0
  139. package/dist/internal/b2-naming.js +60 -0
  140. package/dist/internal/b2-naming.js.map +1 -0
  141. package/dist/internal/upload-retry-options.cjs +21 -0
  142. package/dist/internal/upload-retry-options.cjs.map +1 -0
  143. package/dist/internal/upload-retry-options.d.cts +12 -0
  144. package/dist/internal/upload-retry-options.d.cts.map +1 -0
  145. package/dist/internal/upload-retry-options.d.ts +12 -0
  146. package/dist/internal/upload-retry-options.d.ts.map +1 -0
  147. package/dist/internal/upload-retry-options.js +21 -0
  148. package/dist/internal/upload-retry-options.js.map +1 -0
  149. package/dist/internal/url-redaction.cjs +31 -0
  150. package/dist/internal/url-redaction.cjs.map +1 -0
  151. package/dist/internal/url-redaction.d.cts +17 -0
  152. package/dist/internal/url-redaction.d.cts.map +1 -0
  153. package/dist/internal/url-redaction.d.ts +17 -0
  154. package/dist/internal/url-redaction.d.ts.map +1 -0
  155. package/dist/internal/url-redaction.js +31 -0
  156. package/dist/internal/url-redaction.js.map +1 -0
  157. package/dist/notifications/index.cjs +4 -6
  158. package/dist/notifications/index.d.cts +1 -1
  159. package/dist/notifications/index.d.cts.map +1 -1
  160. package/dist/notifications/index.d.ts +1 -1
  161. package/dist/notifications/index.d.ts.map +1 -1
  162. package/dist/notifications/index.js +1 -6
  163. package/dist/notifications/webhook.cjs +195 -85
  164. package/dist/notifications/webhook.cjs.map +1 -1
  165. package/dist/notifications/webhook.d.cts.map +1 -1
  166. package/dist/notifications/webhook.d.ts.map +1 -1
  167. package/dist/notifications/webhook.js +195 -87
  168. package/dist/notifications/webhook.js.map +1 -1
  169. package/dist/object.cjs +253 -210
  170. package/dist/object.cjs.map +1 -1
  171. package/dist/object.d.cts +9 -55
  172. package/dist/object.d.cts.map +1 -1
  173. package/dist/object.d.ts +9 -55
  174. package/dist/object.d.ts.map +1 -1
  175. package/dist/object.js +249 -206
  176. package/dist/object.js.map +1 -1
  177. package/dist/raw/encoding.cjs +74 -35
  178. package/dist/raw/encoding.cjs.map +1 -1
  179. package/dist/raw/encoding.js +74 -38
  180. package/dist/raw/encoding.js.map +1 -1
  181. package/dist/raw/index.cjs +678 -587
  182. package/dist/raw/index.cjs.map +1 -1
  183. package/dist/raw/index.d.cts +121 -18
  184. package/dist/raw/index.d.cts.map +1 -1
  185. package/dist/raw/index.d.ts +121 -18
  186. package/dist/raw/index.d.ts.map +1 -1
  187. package/dist/raw/index.js +674 -589
  188. package/dist/raw/index.js.map +1 -1
  189. package/dist/s3/index.cjs +355 -18
  190. package/dist/s3/index.cjs.map +1 -1
  191. package/dist/s3/index.d.cts +233 -5
  192. package/dist/s3/index.d.cts.map +1 -1
  193. package/dist/s3/index.d.ts +233 -5
  194. package/dist/s3/index.d.ts.map +1 -1
  195. package/dist/s3/index.js +351 -22
  196. package/dist/s3/index.js.map +1 -1
  197. package/dist/s3/sigv4.cjs +149 -0
  198. package/dist/s3/sigv4.cjs.map +1 -0
  199. package/dist/s3/sigv4.d.cts +43 -0
  200. package/dist/s3/sigv4.d.cts.map +1 -0
  201. package/dist/s3/sigv4.d.ts +43 -0
  202. package/dist/s3/sigv4.d.ts.map +1 -0
  203. package/dist/s3/sigv4.js +148 -0
  204. package/dist/s3/sigv4.js.map +1 -0
  205. package/dist/s3/validation.cjs +69 -0
  206. package/dist/s3/validation.cjs.map +1 -0
  207. package/dist/s3/validation.d.cts +43 -0
  208. package/dist/s3/validation.d.cts.map +1 -0
  209. package/dist/s3/validation.d.ts +43 -0
  210. package/dist/s3/validation.d.ts.map +1 -0
  211. package/dist/s3/validation.js +66 -0
  212. package/dist/s3/validation.js.map +1 -0
  213. package/dist/simulator/capabilities.cjs +63 -48
  214. package/dist/simulator/capabilities.cjs.map +1 -1
  215. package/dist/simulator/capabilities.js +63 -49
  216. package/dist/simulator/capabilities.js.map +1 -1
  217. package/dist/simulator/index.cjs +2124 -1548
  218. package/dist/simulator/index.cjs.map +1 -1
  219. package/dist/simulator/index.d.cts +79 -11
  220. package/dist/simulator/index.d.cts.map +1 -1
  221. package/dist/simulator/index.d.ts +79 -11
  222. package/dist/simulator/index.d.ts.map +1 -1
  223. package/dist/simulator/index.js +2112 -1546
  224. package/dist/simulator/index.js.map +1 -1
  225. package/dist/simulator/validation.cjs +191 -153
  226. package/dist/simulator/validation.cjs.map +1 -1
  227. package/dist/simulator/validation.d.cts +3 -21
  228. package/dist/simulator/validation.d.cts.map +1 -1
  229. package/dist/simulator/validation.d.ts +3 -21
  230. package/dist/simulator/validation.d.ts.map +1 -1
  231. package/dist/simulator/validation.js +188 -162
  232. package/dist/simulator/validation.js.map +1 -1
  233. package/dist/streams/collect.cjs +74 -24
  234. package/dist/streams/collect.cjs.map +1 -1
  235. package/dist/streams/collect.d.cts +14 -1
  236. package/dist/streams/collect.d.cts.map +1 -1
  237. package/dist/streams/collect.d.ts +14 -1
  238. package/dist/streams/collect.d.ts.map +1 -1
  239. package/dist/streams/collect.js +74 -25
  240. package/dist/streams/collect.js.map +1 -1
  241. package/dist/streams/file-source.cjs +287 -0
  242. package/dist/streams/file-source.cjs.map +1 -0
  243. package/dist/streams/file-source.d.cts +96 -0
  244. package/dist/streams/file-source.d.cts.map +1 -0
  245. package/dist/streams/file-source.d.ts +96 -0
  246. package/dist/streams/file-source.d.ts.map +1 -0
  247. package/dist/streams/file-source.js +286 -0
  248. package/dist/streams/file-source.js.map +1 -0
  249. package/dist/streams/hash.cjs +207 -115
  250. package/dist/streams/hash.cjs.map +1 -1
  251. package/dist/streams/hash.d.cts +5 -4
  252. package/dist/streams/hash.d.cts.map +1 -1
  253. package/dist/streams/hash.d.ts +5 -4
  254. package/dist/streams/hash.d.ts.map +1 -1
  255. package/dist/streams/hash.js +208 -95
  256. package/dist/streams/hash.js.map +1 -1
  257. package/dist/streams/index.cjs +12 -12
  258. package/dist/streams/index.d.cts +3 -3
  259. package/dist/streams/index.d.cts.map +1 -1
  260. package/dist/streams/index.d.ts +3 -3
  261. package/dist/streams/index.d.ts.map +1 -1
  262. package/dist/streams/index.js +2 -10
  263. package/dist/streams/progress.cjs +60 -46
  264. package/dist/streams/progress.cjs.map +1 -1
  265. package/dist/streams/progress.js +60 -46
  266. package/dist/streams/progress.js.map +1 -1
  267. package/dist/streams/source.cjs +316 -146
  268. package/dist/streams/source.cjs.map +1 -1
  269. package/dist/streams/source.d.cts +56 -18
  270. package/dist/streams/source.d.cts.map +1 -1
  271. package/dist/streams/source.d.ts +56 -18
  272. package/dist/streams/source.d.ts.map +1 -1
  273. package/dist/streams/source.js +312 -149
  274. package/dist/streams/source.js.map +1 -1
  275. package/dist/sync/actions/index.cjs +236 -184
  276. package/dist/sync/actions/index.cjs.map +1 -1
  277. package/dist/sync/actions/index.d.cts +29 -21
  278. package/dist/sync/actions/index.d.cts.map +1 -1
  279. package/dist/sync/actions/index.d.ts +29 -21
  280. package/dist/sync/actions/index.d.ts.map +1 -1
  281. package/dist/sync/actions/index.js +236 -190
  282. package/dist/sync/actions/index.js.map +1 -1
  283. package/dist/sync/b2-sha1-reader.cjs +148 -0
  284. package/dist/sync/b2-sha1-reader.cjs.map +1 -0
  285. package/dist/sync/b2-sha1-reader.d.cts +58 -0
  286. package/dist/sync/b2-sha1-reader.d.cts.map +1 -0
  287. package/dist/sync/b2-sha1-reader.d.ts +58 -0
  288. package/dist/sync/b2-sha1-reader.d.ts.map +1 -0
  289. package/dist/sync/b2-sha1-reader.js +145 -0
  290. package/dist/sync/b2-sha1-reader.js.map +1 -0
  291. package/dist/sync/download-staging.cjs +265 -0
  292. package/dist/sync/download-staging.cjs.map +1 -0
  293. package/dist/sync/download-staging.d.cts +54 -0
  294. package/dist/sync/download-staging.d.cts.map +1 -0
  295. package/dist/sync/download-staging.d.ts +54 -0
  296. package/dist/sync/download-staging.d.ts.map +1 -0
  297. package/dist/sync/download-staging.js +259 -0
  298. package/dist/sync/download-staging.js.map +1 -0
  299. package/dist/sync/filesystem-errors.cjs +32 -0
  300. package/dist/sync/filesystem-errors.cjs.map +1 -0
  301. package/dist/sync/filesystem-errors.d.cts +8 -0
  302. package/dist/sync/filesystem-errors.d.cts.map +1 -0
  303. package/dist/sync/filesystem-errors.d.ts +8 -0
  304. package/dist/sync/filesystem-errors.d.ts.map +1 -0
  305. package/dist/sync/filesystem-errors.js +32 -0
  306. package/dist/sync/filesystem-errors.js.map +1 -0
  307. package/dist/sync/filters.cjs +217 -0
  308. package/dist/sync/filters.cjs.map +1 -0
  309. package/dist/sync/filters.d.cts +51 -0
  310. package/dist/sync/filters.d.cts.map +1 -0
  311. package/dist/sync/filters.d.ts +51 -0
  312. package/dist/sync/filters.d.ts.map +1 -0
  313. package/dist/sync/filters.js +213 -0
  314. package/dist/sync/filters.js.map +1 -0
  315. package/dist/sync/index.cjs +39 -22
  316. package/dist/sync/index.d.cts +14 -9
  317. package/dist/sync/index.d.cts.map +1 -1
  318. package/dist/sync/index.d.ts +14 -9
  319. package/dist/sync/index.d.ts.map +1 -1
  320. package/dist/sync/index.js +9 -20
  321. package/dist/sync/local-file-identity.cjs +61 -0
  322. package/dist/sync/local-file-identity.cjs.map +1 -0
  323. package/dist/sync/local-file-identity.d.cts +37 -0
  324. package/dist/sync/local-file-identity.d.cts.map +1 -0
  325. package/dist/sync/local-file-identity.d.ts +37 -0
  326. package/dist/sync/local-file-identity.d.ts.map +1 -0
  327. package/dist/sync/local-file-identity.js +60 -0
  328. package/dist/sync/local-file-identity.js.map +1 -0
  329. package/dist/sync/local-file-io.cjs +364 -0
  330. package/dist/sync/local-file-io.cjs.map +1 -0
  331. package/dist/sync/local-file-io.d.cts +75 -0
  332. package/dist/sync/local-file-io.d.cts.map +1 -0
  333. package/dist/sync/local-file-io.d.ts +75 -0
  334. package/dist/sync/local-file-io.d.ts.map +1 -0
  335. package/dist/sync/local-file-io.js +360 -0
  336. package/dist/sync/local-file-io.js.map +1 -0
  337. package/dist/sync/local-filesystem-root.cjs +27 -0
  338. package/dist/sync/local-filesystem-root.cjs.map +1 -0
  339. package/dist/sync/local-filesystem-root.d.cts +18 -0
  340. package/dist/sync/local-filesystem-root.d.cts.map +1 -0
  341. package/dist/sync/local-filesystem-root.d.ts +18 -0
  342. package/dist/sync/local-filesystem-root.d.ts.map +1 -0
  343. package/dist/sync/local-filesystem-root.js +26 -0
  344. package/dist/sync/local-filesystem-root.js.map +1 -0
  345. package/dist/sync/local-sha1.cjs +119 -0
  346. package/dist/sync/local-sha1.cjs.map +1 -0
  347. package/dist/sync/local-sha1.d.cts +39 -0
  348. package/dist/sync/local-sha1.d.cts.map +1 -0
  349. package/dist/sync/local-sha1.d.ts +39 -0
  350. package/dist/sync/local-sha1.d.ts.map +1 -0
  351. package/dist/sync/local-sha1.js +117 -0
  352. package/dist/sync/local-sha1.js.map +1 -0
  353. package/dist/sync/pairing.cjs +118 -29
  354. package/dist/sync/pairing.cjs.map +1 -1
  355. package/dist/sync/pairing.d.cts +7 -2
  356. package/dist/sync/pairing.d.cts.map +1 -1
  357. package/dist/sync/pairing.d.ts +7 -2
  358. package/dist/sync/pairing.d.ts.map +1 -1
  359. package/dist/sync/pairing.js +120 -31
  360. package/dist/sync/pairing.js.map +1 -1
  361. package/dist/sync/path-order.cjs +30 -0
  362. package/dist/sync/path-order.cjs.map +1 -0
  363. package/dist/sync/path-order.d.cts +28 -0
  364. package/dist/sync/path-order.d.cts.map +1 -0
  365. package/dist/sync/path-order.d.ts +28 -0
  366. package/dist/sync/path-order.d.ts.map +1 -0
  367. package/dist/sync/path-order.js +29 -0
  368. package/dist/sync/path-order.js.map +1 -0
  369. package/dist/sync/path-safety.cjs +111 -0
  370. package/dist/sync/path-safety.cjs.map +1 -0
  371. package/dist/sync/path-safety.d.cts +78 -0
  372. package/dist/sync/path-safety.d.cts.map +1 -0
  373. package/dist/sync/path-safety.d.ts +78 -0
  374. package/dist/sync/path-safety.d.ts.map +1 -0
  375. package/dist/sync/path-safety.js +105 -0
  376. package/dist/sync/path-safety.js.map +1 -0
  377. package/dist/sync/paths.d.cts +19 -0
  378. package/dist/sync/paths.d.cts.map +1 -0
  379. package/dist/sync/paths.d.ts +19 -0
  380. package/dist/sync/paths.d.ts.map +1 -0
  381. package/dist/sync/policies/compare.cjs +389 -11
  382. package/dist/sync/policies/compare.cjs.map +1 -1
  383. package/dist/sync/policies/compare.d.cts +100 -2
  384. package/dist/sync/policies/compare.d.cts.map +1 -1
  385. package/dist/sync/policies/compare.d.ts +100 -2
  386. package/dist/sync/policies/compare.d.ts.map +1 -1
  387. package/dist/sync/policies/compare.js +387 -13
  388. package/dist/sync/policies/compare.js.map +1 -1
  389. package/dist/sync/policies/index.cjs +76 -65
  390. package/dist/sync/policies/index.cjs.map +1 -1
  391. package/dist/sync/policies/index.d.cts +35 -6
  392. package/dist/sync/policies/index.d.cts.map +1 -1
  393. package/dist/sync/policies/index.d.ts +35 -6
  394. package/dist/sync/policies/index.d.ts.map +1 -1
  395. package/dist/sync/policies/index.js +76 -65
  396. package/dist/sync/policies/index.js.map +1 -1
  397. package/dist/sync/prefix.cjs +96 -0
  398. package/dist/sync/prefix.cjs.map +1 -0
  399. package/dist/sync/prefix.d.cts +55 -0
  400. package/dist/sync/prefix.d.cts.map +1 -0
  401. package/dist/sync/prefix.d.ts +55 -0
  402. package/dist/sync/prefix.d.ts.map +1 -0
  403. package/dist/sync/prefix.js +92 -0
  404. package/dist/sync/prefix.js.map +1 -0
  405. package/dist/sync/regexp-safety.cjs +192 -0
  406. package/dist/sync/regexp-safety.cjs.map +1 -0
  407. package/dist/sync/regexp-safety.d.cts +29 -0
  408. package/dist/sync/regexp-safety.d.cts.map +1 -0
  409. package/dist/sync/regexp-safety.d.ts +29 -0
  410. package/dist/sync/regexp-safety.d.ts.map +1 -0
  411. package/dist/sync/regexp-safety.js +190 -0
  412. package/dist/sync/regexp-safety.js.map +1 -0
  413. package/dist/sync/scan-events.cjs +33 -0
  414. package/dist/sync/scan-events.cjs.map +1 -0
  415. package/dist/sync/scan-events.d.cts +17 -0
  416. package/dist/sync/scan-events.d.cts.map +1 -0
  417. package/dist/sync/scan-events.d.ts +17 -0
  418. package/dist/sync/scan-events.d.ts.map +1 -0
  419. package/dist/sync/scan-events.js +32 -0
  420. package/dist/sync/scan-events.js.map +1 -0
  421. package/dist/sync/scan-limit.cjs +33 -0
  422. package/dist/sync/scan-limit.cjs.map +1 -0
  423. package/dist/sync/scan-limit.d.cts +21 -0
  424. package/dist/sync/scan-limit.d.cts.map +1 -0
  425. package/dist/sync/scan-limit.d.ts +21 -0
  426. package/dist/sync/scan-limit.d.ts.map +1 -0
  427. package/dist/sync/scan-limit.js +31 -0
  428. package/dist/sync/scan-limit.js.map +1 -0
  429. package/dist/sync/scanners/b2.cjs +239 -55
  430. package/dist/sync/scanners/b2.cjs.map +1 -1
  431. package/dist/sync/scanners/b2.d.cts +26 -7
  432. package/dist/sync/scanners/b2.d.cts.map +1 -1
  433. package/dist/sync/scanners/b2.d.ts +26 -7
  434. package/dist/sync/scanners/b2.d.ts.map +1 -1
  435. package/dist/sync/scanners/b2.js +239 -55
  436. package/dist/sync/scanners/b2.js.map +1 -1
  437. package/dist/sync/scanners/local.cjs +215 -56
  438. package/dist/sync/scanners/local.cjs.map +1 -1
  439. package/dist/sync/scanners/local.d.cts +22 -7
  440. package/dist/sync/scanners/local.d.cts.map +1 -1
  441. package/dist/sync/scanners/local.d.ts +22 -7
  442. package/dist/sync/scanners/local.d.ts.map +1 -1
  443. package/dist/sync/scanners/local.js +216 -57
  444. package/dist/sync/scanners/local.js.map +1 -1
  445. package/dist/sync/sha1-metadata.cjs +94 -0
  446. package/dist/sync/sha1-metadata.cjs.map +1 -0
  447. package/dist/sync/sha1-metadata.d.cts +82 -0
  448. package/dist/sync/sha1-metadata.d.cts.map +1 -0
  449. package/dist/sync/sha1-metadata.d.ts +82 -0
  450. package/dist/sync/sha1-metadata.d.ts.map +1 -0
  451. package/dist/sync/sha1-metadata.js +89 -0
  452. package/dist/sync/sha1-metadata.js.map +1 -0
  453. package/dist/sync/sha1-options.cjs +23 -0
  454. package/dist/sync/sha1-options.cjs.map +1 -0
  455. package/dist/sync/sha1-options.d.cts +14 -0
  456. package/dist/sync/sha1-options.d.cts.map +1 -0
  457. package/dist/sync/sha1-options.d.ts +14 -0
  458. package/dist/sync/sha1-options.d.ts.map +1 -0
  459. package/dist/sync/sha1-options.js +21 -0
  460. package/dist/sync/sha1-options.js.map +1 -0
  461. package/dist/sync/synchronizer.cjs +782 -197
  462. package/dist/sync/synchronizer.cjs.map +1 -1
  463. package/dist/sync/synchronizer.d.cts +47 -1
  464. package/dist/sync/synchronizer.d.cts.map +1 -1
  465. package/dist/sync/synchronizer.d.ts +47 -1
  466. package/dist/sync/synchronizer.d.ts.map +1 -1
  467. package/dist/sync/synchronizer.js +779 -173
  468. package/dist/sync/synchronizer.js.map +1 -1
  469. package/dist/sync/types.d.cts +208 -16
  470. package/dist/sync/types.d.cts.map +1 -1
  471. package/dist/sync/types.d.ts +208 -16
  472. package/dist/sync/types.d.ts.map +1 -1
  473. package/dist/types/auth.cjs +76 -56
  474. package/dist/types/auth.cjs.map +1 -1
  475. package/dist/types/auth.d.cts +67 -9
  476. package/dist/types/auth.d.cts.map +1 -1
  477. package/dist/types/auth.d.ts +67 -9
  478. package/dist/types/auth.d.ts.map +1 -1
  479. package/dist/types/auth.js +77 -57
  480. package/dist/types/auth.js.map +1 -1
  481. package/dist/types/bucket.cjs +74 -38
  482. package/dist/types/bucket.cjs.map +1 -1
  483. package/dist/types/bucket.js +75 -41
  484. package/dist/types/bucket.js.map +1 -1
  485. package/dist/types/encryption.cjs +364 -327
  486. package/dist/types/encryption.cjs.map +1 -1
  487. package/dist/types/encryption.d.cts +16 -0
  488. package/dist/types/encryption.d.cts.map +1 -1
  489. package/dist/types/encryption.d.ts +16 -0
  490. package/dist/types/encryption.d.ts.map +1 -1
  491. package/dist/types/encryption.js +364 -310
  492. package/dist/types/encryption.js.map +1 -1
  493. package/dist/types/errors.cjs +47 -0
  494. package/dist/types/errors.cjs.map +1 -0
  495. package/dist/types/errors.d.cts +13 -4
  496. package/dist/types/errors.d.cts.map +1 -1
  497. package/dist/types/errors.d.ts +13 -4
  498. package/dist/types/errors.d.ts.map +1 -1
  499. package/dist/types/errors.js +47 -0
  500. package/dist/types/errors.js.map +1 -0
  501. package/dist/types/file.cjs +36 -19
  502. package/dist/types/file.cjs.map +1 -1
  503. package/dist/types/file.d.cts +2 -2
  504. package/dist/types/file.d.cts.map +1 -1
  505. package/dist/types/file.d.ts +2 -2
  506. package/dist/types/file.d.ts.map +1 -1
  507. package/dist/types/file.js +37 -21
  508. package/dist/types/file.js.map +1 -1
  509. package/dist/types/ids.cjs +53 -9
  510. package/dist/types/ids.cjs.map +1 -1
  511. package/dist/types/ids.js +54 -15
  512. package/dist/types/ids.js.map +1 -1
  513. package/dist/types/index.d.cts +12 -11
  514. package/dist/types/index.d.cts.map +1 -1
  515. package/dist/types/index.d.ts +12 -11
  516. package/dist/types/index.d.ts.map +1 -1
  517. package/dist/types/key.d.cts +44 -8
  518. package/dist/types/key.d.cts.map +1 -1
  519. package/dist/types/key.d.ts +44 -8
  520. package/dist/types/key.d.ts.map +1 -1
  521. package/dist/types/lock.cjs +33 -13
  522. package/dist/types/lock.cjs.map +1 -1
  523. package/dist/types/lock.js +34 -15
  524. package/dist/types/lock.js.map +1 -1
  525. package/dist/types/notifications.cjs +44 -22
  526. package/dist/types/notifications.cjs.map +1 -1
  527. package/dist/types/notifications.js +45 -23
  528. package/dist/types/notifications.js.map +1 -1
  529. package/dist/types/upload.d.cts +39 -5
  530. package/dist/types/upload.d.cts.map +1 -1
  531. package/dist/types/upload.d.ts +39 -5
  532. package/dist/types/upload.d.ts.map +1 -1
  533. package/dist/upload/abort-scope.cjs +91 -0
  534. package/dist/upload/abort-scope.cjs.map +1 -0
  535. package/dist/upload/abort-scope.d.cts +48 -0
  536. package/dist/upload/abort-scope.d.cts.map +1 -0
  537. package/dist/upload/abort-scope.d.ts +48 -0
  538. package/dist/upload/abort-scope.d.ts.map +1 -0
  539. package/dist/upload/abort-scope.js +88 -0
  540. package/dist/upload/abort-scope.js.map +1 -0
  541. package/dist/upload/cancel.cjs +183 -8
  542. package/dist/upload/cancel.cjs.map +1 -1
  543. package/dist/upload/cancel.d.cts +110 -2
  544. package/dist/upload/cancel.d.cts.map +1 -1
  545. package/dist/upload/cancel.d.ts +110 -2
  546. package/dist/upload/cancel.d.ts.map +1 -1
  547. package/dist/upload/cancel.js +178 -9
  548. package/dist/upload/cancel.js.map +1 -1
  549. package/dist/upload/concurrency.cjs +79 -52
  550. package/dist/upload/concurrency.cjs.map +1 -1
  551. package/dist/upload/concurrency.js +79 -53
  552. package/dist/upload/concurrency.js.map +1 -1
  553. package/dist/upload/finish.cjs +59 -0
  554. package/dist/upload/finish.cjs.map +1 -0
  555. package/dist/upload/finish.d.cts +26 -0
  556. package/dist/upload/finish.d.cts.map +1 -0
  557. package/dist/upload/finish.d.ts +26 -0
  558. package/dist/upload/finish.d.ts.map +1 -0
  559. package/dist/upload/finish.js +59 -0
  560. package/dist/upload/finish.js.map +1 -0
  561. package/dist/upload/large.cjs +301 -218
  562. package/dist/upload/large.cjs.map +1 -1
  563. package/dist/upload/large.d.cts +76 -9
  564. package/dist/upload/large.d.cts.map +1 -1
  565. package/dist/upload/large.d.ts +76 -9
  566. package/dist/upload/large.d.ts.map +1 -1
  567. package/dist/upload/large.js +301 -218
  568. package/dist/upload/large.js.map +1 -1
  569. package/dist/upload/options.cjs +28 -0
  570. package/dist/upload/options.cjs.map +1 -0
  571. package/dist/upload/options.d.cts +104 -0
  572. package/dist/upload/options.d.cts.map +1 -0
  573. package/dist/upload/options.d.ts +104 -0
  574. package/dist/upload/options.d.ts.map +1 -0
  575. package/dist/upload/options.js +27 -0
  576. package/dist/upload/options.js.map +1 -0
  577. package/dist/upload/resume.cjs +333 -33
  578. package/dist/upload/resume.cjs.map +1 -1
  579. package/dist/upload/resume.d.cts +82 -12
  580. package/dist/upload/resume.d.cts.map +1 -1
  581. package/dist/upload/resume.d.ts +82 -12
  582. package/dist/upload/resume.d.ts.map +1 -1
  583. package/dist/upload/resume.js +330 -33
  584. package/dist/upload/resume.js.map +1 -1
  585. package/dist/upload/retry.cjs +186 -0
  586. package/dist/upload/retry.cjs.map +1 -0
  587. package/dist/upload/retry.d.cts +127 -0
  588. package/dist/upload/retry.d.cts.map +1 -0
  589. package/dist/upload/retry.d.ts +127 -0
  590. package/dist/upload/retry.d.ts.map +1 -0
  591. package/dist/upload/retry.js +182 -0
  592. package/dist/upload/retry.js.map +1 -0
  593. package/dist/upload/single.cjs +68 -44
  594. package/dist/upload/single.cjs.map +1 -1
  595. package/dist/upload/single.d.cts +2 -1
  596. package/dist/upload/single.d.cts.map +1 -1
  597. package/dist/upload/single.d.ts +2 -1
  598. package/dist/upload/single.d.ts.map +1 -1
  599. package/dist/upload/single.js +68 -44
  600. package/dist/upload/single.js.map +1 -1
  601. package/dist/upload/stream.cjs +317 -193
  602. package/dist/upload/stream.cjs.map +1 -1
  603. package/dist/upload/stream.d.cts +3 -1
  604. package/dist/upload/stream.d.cts.map +1 -1
  605. package/dist/upload/stream.d.ts +3 -1
  606. package/dist/upload/stream.d.ts.map +1 -1
  607. package/dist/upload/stream.js +316 -192
  608. package/dist/upload/stream.js.map +1 -1
  609. package/dist/util/best-effort.cjs +42 -8
  610. package/dist/util/best-effort.cjs.map +1 -1
  611. package/dist/util/best-effort.d.cts +2 -1
  612. package/dist/util/best-effort.d.cts.map +1 -1
  613. package/dist/util/best-effort.d.ts +2 -1
  614. package/dist/util/best-effort.d.ts.map +1 -1
  615. package/dist/util/best-effort.js +43 -9
  616. package/dist/util/best-effort.js.map +1 -1
  617. package/dist/util/bytes.cjs +23 -0
  618. package/dist/util/bytes.cjs.map +1 -0
  619. package/dist/util/bytes.d.cts +15 -0
  620. package/dist/util/bytes.d.cts.map +1 -0
  621. package/dist/util/bytes.d.ts +15 -0
  622. package/dist/util/bytes.d.ts.map +1 -0
  623. package/dist/util/bytes.js +23 -0
  624. package/dist/util/bytes.js.map +1 -0
  625. package/dist/util/crypto.cjs +68 -0
  626. package/dist/util/crypto.cjs.map +1 -0
  627. package/dist/util/crypto.d.cts +26 -0
  628. package/dist/util/crypto.d.cts.map +1 -0
  629. package/dist/util/crypto.d.ts +26 -0
  630. package/dist/util/crypto.d.ts.map +1 -0
  631. package/dist/util/crypto.js +66 -0
  632. package/dist/util/crypto.js.map +1 -0
  633. package/dist/util/defaults.cjs +25 -9
  634. package/dist/util/defaults.cjs.map +1 -1
  635. package/dist/util/defaults.js +26 -11
  636. package/dist/util/defaults.js.map +1 -1
  637. package/dist/util/error-reason.cjs +41 -0
  638. package/dist/util/error-reason.cjs.map +1 -0
  639. package/dist/util/error-reason.d.cts +9 -0
  640. package/dist/util/error-reason.d.cts.map +1 -0
  641. package/dist/util/error-reason.d.ts +9 -0
  642. package/dist/util/error-reason.d.ts.map +1 -0
  643. package/dist/util/error-reason.js +41 -0
  644. package/dist/util/error-reason.js.map +1 -0
  645. package/dist/util/http.cjs +23 -0
  646. package/dist/util/http.cjs.map +1 -0
  647. package/dist/util/http.d.cts +13 -0
  648. package/dist/util/http.d.cts.map +1 -0
  649. package/dist/util/http.d.ts +13 -0
  650. package/dist/util/http.d.ts.map +1 -0
  651. package/dist/util/http.js +23 -0
  652. package/dist/util/http.js.map +1 -0
  653. package/dist/util/normalize.cjs +66 -7
  654. package/dist/util/normalize.cjs.map +1 -1
  655. package/dist/util/normalize.js +67 -10
  656. package/dist/util/normalize.js.map +1 -1
  657. package/dist/util/paginator.cjs +63 -14
  658. package/dist/util/paginator.cjs.map +1 -1
  659. package/dist/util/paginator.js +64 -16
  660. package/dist/util/paginator.js.map +1 -1
  661. package/dist/util/plan-ranges.cjs +47 -22
  662. package/dist/util/plan-ranges.cjs.map +1 -1
  663. package/dist/util/plan-ranges.js +48 -24
  664. package/dist/util/plan-ranges.js.map +1 -1
  665. package/dist/util/sha1.cjs +27 -0
  666. package/dist/util/sha1.cjs.map +1 -0
  667. package/dist/util/sha1.d.cts +17 -0
  668. package/dist/util/sha1.d.cts.map +1 -0
  669. package/dist/util/sha1.d.ts +17 -0
  670. package/dist/util/sha1.d.ts.map +1 -0
  671. package/dist/util/sha1.js +26 -0
  672. package/dist/util/sha1.js.map +1 -0
  673. package/dist/util/text-codec.cjs +29 -5
  674. package/dist/util/text-codec.cjs.map +1 -1
  675. package/dist/util/text-codec.js +30 -7
  676. package/dist/util/text-codec.js.map +1 -1
  677. package/dist/util/to-error.cjs +18 -4
  678. package/dist/util/to-error.cjs.map +1 -1
  679. package/dist/util/to-error.js +19 -5
  680. package/dist/util/to-error.js.map +1 -1
  681. package/dist/version.cjs +17 -5
  682. package/dist/version.cjs.map +1 -1
  683. package/dist/version.d.cts +3 -3
  684. package/dist/version.d.ts +3 -3
  685. package/dist/version.js +19 -6
  686. package/dist/version.js.map +1 -1
  687. package/package.json +19 -16
  688. package/dist/auth/index.cjs.map +0 -1
  689. package/dist/auth/index.js.map +0 -1
  690. package/dist/index.cjs.map +0 -1
  691. package/dist/index.js.map +0 -1
  692. package/dist/notifications/index.cjs.map +0 -1
  693. package/dist/notifications/index.js.map +0 -1
  694. package/dist/package.json.cjs +0 -9
  695. package/dist/package.json.cjs.map +0 -1
  696. package/dist/package.json.js +0 -9
  697. package/dist/package.json.js.map +0 -1
  698. package/dist/streams/index.cjs.map +0 -1
  699. package/dist/streams/index.js.map +0 -1
  700. package/dist/sync/index.cjs.map +0 -1
  701. package/dist/sync/index.js.map +0 -1
@@ -0,0 +1,190 @@
1
+ //#region src/sync/regexp-safety.ts
2
+ var MAX_REGEXP_SOURCE_LENGTH = 512;
3
+ var MAX_REGEXP_INPUT_LENGTH = 1024;
4
+ var MAX_REGEXP_UNBOUNDED_QUANTIFIERS = 1;
5
+ var MAX_REGEXP_BOUNDED_QUANTIFIER = 200;
6
+ var MAX_REGEXP_BOUNDED_QUANTIFIERS = 16;
7
+ var MAX_REGEXP_BOUNDED_QUANTIFIER_PRODUCT = 1e4;
8
+ var safeRegExpCache = /* @__PURE__ */ new WeakMap();
9
+ var validatedFilterCache = /* @__PURE__ */ new WeakSet();
10
+ /**
11
+ * Validates every RegExp filter in an include/exclude filter set.
12
+ *
13
+ * @param filters - Optional include and exclude filters to validate.
14
+ *
15
+ * @throws When a RegExp filter is too large or structurally unsafe.
16
+ */
17
+ function validateSyncFilters(filters) {
18
+ if (filters === void 0) return;
19
+ if (validatedFilterCache.has(filters)) return;
20
+ validateSyncFilterList("include", filters.include);
21
+ validateSyncFilterList("exclude", filters.exclude);
22
+ validatedFilterCache.add(filters);
23
+ }
24
+ /**
25
+ * Tests a path with a caller-provided RegExp without retaining `lastIndex` state.
26
+ *
27
+ * @param relativePath - Folder-relative path to test.
28
+ * @param pattern - Caller-provided RegExp filter.
29
+ *
30
+ * @returns True when the RegExp matches the relative path.
31
+ *
32
+ * @throws When the RegExp filter is too large or structurally unsafe.
33
+ */
34
+ function regexpMatchesSyncPath(relativePath, pattern) {
35
+ if (pathExceedsSafeRegExpInput(relativePath)) return false;
36
+ return regexpWithoutState(pattern).test(relativePath);
37
+ }
38
+ /**
39
+ * Tests whether a relative path is too long to feed to caller-provided RegExp filters.
40
+ *
41
+ * @param relativePath - Folder-relative path to test.
42
+ *
43
+ * @returns True when RegExp filters should not be evaluated for the path.
44
+ */
45
+ function pathExceedsSafeRegExpInput(relativePath) {
46
+ return relativePath.length > MAX_REGEXP_INPUT_LENGTH;
47
+ }
48
+ function validateSyncFilterList(kind, patterns) {
49
+ for (const pattern of patterns ?? []) if (typeof pattern !== "string") regexpWithoutState(pattern, kind);
50
+ }
51
+ function regexpWithoutState(pattern, kind = "pattern") {
52
+ const cached = safeRegExpCache.get(pattern);
53
+ if (cached !== void 0) return cached;
54
+ assertSafeRegExp(pattern, kind);
55
+ const compiled = new RegExp(pattern.source, pattern.flags.replace(/[gy]/g, ""));
56
+ safeRegExpCache.set(pattern, compiled);
57
+ return compiled;
58
+ }
59
+ function assertSafeRegExp(pattern, kind) {
60
+ const source = pattern.source;
61
+ if (source.length > MAX_REGEXP_SOURCE_LENGTH) throw new Error(`Sync filter RegExp is too long (${kind}: /${source}/)`);
62
+ if (!regexpSourceLooksSafe(source)) throw new Error(`Sync filter RegExp is too complex (${kind}: /${source}/)`);
63
+ }
64
+ /**
65
+ * Best-effort linear RegExp guard for filters matched synchronously on attacker-controlled paths.
66
+ *
67
+ * The accepted subset intentionally rejects constructs that are hard to bound in the JavaScript
68
+ * RegExp engine: backreferences, unterminated escapes/classes/groups, repeated unbounded
69
+ * quantifiers, bounded quantifiers above {@link MAX_REGEXP_BOUNDED_QUANTIFIER}, too many bounded
70
+ * quantifiers or too large a bounded-quantifier product, and any quantified group whose subtree
71
+ * already contains a quantifier or alternation. Group state is propagated upward so nested groups
72
+ * cannot hide a quantified or alternated subtree before an outer bounded or unbounded quantifier.
73
+ *
74
+ * @param source - RegExp source text to inspect.
75
+ *
76
+ * @returns True when the source passes the SDK's structural safety heuristic.
77
+ */
78
+ function regexpSourceLooksSafe(source) {
79
+ let escaped = false;
80
+ let inClass = false;
81
+ let unboundedQuantifiers = 0;
82
+ let boundedQuantifiers = 0;
83
+ let boundedQuantifierProduct = 1;
84
+ const groups = [];
85
+ let lastToken = null;
86
+ for (let i = 0; i < source.length; i++) {
87
+ const char = source[i] ?? "";
88
+ if (escaped) {
89
+ if (!inClass && char === "k" && source[i + 1] === "<") return false;
90
+ if (!inClass && /[1-9]/.test(char)) return false;
91
+ escaped = false;
92
+ lastToken = { type: "atom" };
93
+ continue;
94
+ }
95
+ if (char === "\\") {
96
+ escaped = true;
97
+ continue;
98
+ }
99
+ if (inClass) {
100
+ if (char === "]") inClass = false;
101
+ continue;
102
+ }
103
+ if (char === "[") {
104
+ inClass = true;
105
+ lastToken = { type: "atom" };
106
+ continue;
107
+ }
108
+ if (char === "(") {
109
+ groups.push({
110
+ hasQuantifier: false,
111
+ hasAlternation: false
112
+ });
113
+ lastToken = null;
114
+ continue;
115
+ }
116
+ if (char === ")") {
117
+ const group = groups.pop();
118
+ if (!group) return false;
119
+ const parent = groups.at(-1);
120
+ if (parent) mergeGroupState(parent, group);
121
+ lastToken = {
122
+ type: "group",
123
+ ...group
124
+ };
125
+ continue;
126
+ }
127
+ if (char === "|") {
128
+ const group = groups.at(-1);
129
+ if (group) group.hasAlternation = true;
130
+ lastToken = null;
131
+ continue;
132
+ }
133
+ const quantifier = lastToken !== null ? parseQuantifier(source, i) : null;
134
+ if (lastToken !== null && quantifier !== null) {
135
+ if (lastToken?.type === "group" && (lastToken.hasQuantifier || lastToken.hasAlternation)) return false;
136
+ if (quantifier.unbounded) {
137
+ unboundedQuantifiers++;
138
+ if (unboundedQuantifiers > MAX_REGEXP_UNBOUNDED_QUANTIFIERS) return false;
139
+ } else {
140
+ boundedQuantifiers++;
141
+ if (boundedQuantifiers > MAX_REGEXP_BOUNDED_QUANTIFIERS) return false;
142
+ if (quantifier.maxRepetitions > MAX_REGEXP_BOUNDED_QUANTIFIER) return false;
143
+ boundedQuantifierProduct *= Math.max(quantifier.maxRepetitions, 1);
144
+ if (boundedQuantifierProduct > MAX_REGEXP_BOUNDED_QUANTIFIER_PRODUCT) return false;
145
+ }
146
+ const group = groups.at(-1);
147
+ if (group) group.hasQuantifier = true;
148
+ i = quantifier.endIndex;
149
+ lastToken = null;
150
+ continue;
151
+ }
152
+ lastToken = { type: "atom" };
153
+ }
154
+ return !escaped && !inClass && groups.length === 0;
155
+ }
156
+ function mergeGroupState(target, source) {
157
+ target.hasQuantifier = target.hasQuantifier || source.hasQuantifier;
158
+ target.hasAlternation = target.hasAlternation || source.hasAlternation;
159
+ }
160
+ function parseQuantifier(source, index) {
161
+ const char = source[index];
162
+ if (char === "*" || char === "+") return {
163
+ endIndex: index,
164
+ maxRepetitions: Number.POSITIVE_INFINITY,
165
+ unbounded: true
166
+ };
167
+ if (char === "?") return {
168
+ endIndex: index,
169
+ maxRepetitions: 1,
170
+ unbounded: false
171
+ };
172
+ if (char !== "{") return null;
173
+ const end = source.indexOf("}", index + 1);
174
+ if (end === -1) return null;
175
+ const body = source.slice(index + 1, end);
176
+ const match = /^(\d+)(?:,(\d*))?$/.exec(body);
177
+ if (!match) return null;
178
+ const min = Number(match[1]);
179
+ const maxText = match[2];
180
+ const unbounded = body.includes(",") && maxText === "";
181
+ return {
182
+ endIndex: end,
183
+ maxRepetitions: unbounded ? Number.POSITIVE_INFINITY : Number(maxText ?? min),
184
+ unbounded
185
+ };
186
+ }
187
+ //#endregion
188
+ export { pathExceedsSafeRegExpInput, regexpMatchesSyncPath, validateSyncFilters };
189
+
190
+ //# sourceMappingURL=regexp-safety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regexp-safety.js","names":[],"sources":["../../src/sync/regexp-safety.ts"],"sourcesContent":["import type { SyncFilterOptions, SyncFilterPattern } from './types.ts'\n\nconst MAX_REGEXP_SOURCE_LENGTH = 512\nconst MAX_REGEXP_INPUT_LENGTH = 1024\nconst MAX_REGEXP_UNBOUNDED_QUANTIFIERS = 1\nconst MAX_REGEXP_BOUNDED_QUANTIFIER = 200\nconst MAX_REGEXP_BOUNDED_QUANTIFIERS = 16\nconst MAX_REGEXP_BOUNDED_QUANTIFIER_PRODUCT = 10_000\nconst safeRegExpCache = new WeakMap<RegExp, RegExp>()\n// Validation is memoized by object identity. Treat filter objects and their\n// include/exclude arrays as immutable after first use, otherwise new patterns\n// added later would not be revalidated through this cache.\nconst validatedFilterCache = new WeakSet<SyncFilterOptions>()\n\ninterface RegExpGroupState {\n hasQuantifier: boolean\n hasAlternation: boolean\n}\n\ntype RegExpTokenState = { type: 'atom' } | ({ type: 'group' } & RegExpGroupState)\n\ninterface RegExpQuantifier {\n endIndex: number\n maxRepetitions: number\n unbounded: boolean\n}\n\n/**\n * Validates every RegExp filter in an include/exclude filter set.\n *\n * @param filters - Optional include and exclude filters to validate.\n *\n * @throws When a RegExp filter is too large or structurally unsafe.\n */\nexport function validateSyncFilters(filters: SyncFilterOptions | undefined): void {\n if (filters === undefined) return\n if (validatedFilterCache.has(filters)) return\n\n validateSyncFilterList('include', filters.include)\n validateSyncFilterList('exclude', filters.exclude)\n validatedFilterCache.add(filters)\n}\n\n/**\n * Tests a path with a caller-provided RegExp without retaining `lastIndex` state.\n *\n * @param relativePath - Folder-relative path to test.\n * @param pattern - Caller-provided RegExp filter.\n *\n * @returns True when the RegExp matches the relative path.\n *\n * @throws When the RegExp filter is too large or structurally unsafe.\n */\nexport function regexpMatchesSyncPath(relativePath: string, pattern: RegExp): boolean {\n if (pathExceedsSafeRegExpInput(relativePath)) return false\n return regexpWithoutState(pattern).test(relativePath)\n}\n\n/**\n * Tests whether a relative path is too long to feed to caller-provided RegExp filters.\n *\n * @param relativePath - Folder-relative path to test.\n *\n * @returns True when RegExp filters should not be evaluated for the path.\n */\nexport function pathExceedsSafeRegExpInput(relativePath: string): boolean {\n return relativePath.length > MAX_REGEXP_INPUT_LENGTH\n}\n\nfunction validateSyncFilterList(\n kind: 'include' | 'exclude',\n patterns: readonly SyncFilterPattern[] | undefined,\n): void {\n for (const pattern of patterns ?? []) {\n if (typeof pattern !== 'string') {\n regexpWithoutState(pattern, kind)\n }\n }\n}\n\nfunction regexpWithoutState(pattern: RegExp, kind = 'pattern'): RegExp {\n const cached = safeRegExpCache.get(pattern)\n if (cached !== undefined) return cached\n\n assertSafeRegExp(pattern, kind)\n const compiled = new RegExp(pattern.source, pattern.flags.replace(/[gy]/g, ''))\n safeRegExpCache.set(pattern, compiled)\n return compiled\n}\n\nfunction assertSafeRegExp(pattern: RegExp, kind: string): void {\n const source = pattern.source\n if (source.length > MAX_REGEXP_SOURCE_LENGTH) {\n throw new Error(`Sync filter RegExp is too long (${kind}: /${source}/)`)\n }\n\n if (!regexpSourceLooksSafe(source)) {\n throw new Error(`Sync filter RegExp is too complex (${kind}: /${source}/)`)\n }\n}\n\n/**\n * Best-effort linear RegExp guard for filters matched synchronously on attacker-controlled paths.\n *\n * The accepted subset intentionally rejects constructs that are hard to bound in the JavaScript\n * RegExp engine: backreferences, unterminated escapes/classes/groups, repeated unbounded\n * quantifiers, bounded quantifiers above {@link MAX_REGEXP_BOUNDED_QUANTIFIER}, too many bounded\n * quantifiers or too large a bounded-quantifier product, and any quantified group whose subtree\n * already contains a quantifier or alternation. Group state is propagated upward so nested groups\n * cannot hide a quantified or alternated subtree before an outer bounded or unbounded quantifier.\n *\n * @param source - RegExp source text to inspect.\n *\n * @returns True when the source passes the SDK's structural safety heuristic.\n */\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: keep the regex safety scan linear.\nfunction regexpSourceLooksSafe(source: string): boolean {\n let escaped = false\n let inClass = false\n let unboundedQuantifiers = 0\n let boundedQuantifiers = 0\n let boundedQuantifierProduct = 1\n const groups: RegExpGroupState[] = []\n let lastToken: RegExpTokenState | null = null\n\n for (let i = 0; i < source.length; i++) {\n const char = source[i] ?? ''\n\n if (escaped) {\n if (!inClass && char === 'k' && source[i + 1] === '<') return false\n if (!inClass && /[1-9]/.test(char)) return false\n escaped = false\n lastToken = { type: 'atom' }\n continue\n }\n\n if (char === '\\\\') {\n escaped = true\n continue\n }\n\n if (inClass) {\n if (char === ']') inClass = false\n continue\n }\n\n if (char === '[') {\n inClass = true\n lastToken = { type: 'atom' }\n continue\n }\n\n if (char === '(') {\n groups.push({ hasQuantifier: false, hasAlternation: false })\n lastToken = null\n continue\n }\n\n if (char === ')') {\n const group = groups.pop()\n if (!group) return false\n const parent = groups.at(-1)\n if (parent) mergeGroupState(parent, group)\n lastToken = { type: 'group', ...group }\n continue\n }\n\n if (char === '|') {\n const group = groups.at(-1)\n if (group) group.hasAlternation = true\n lastToken = null\n continue\n }\n\n const quantifier = lastToken !== null ? parseQuantifier(source, i) : null\n if (lastToken !== null && quantifier !== null) {\n if (lastToken?.type === 'group' && (lastToken.hasQuantifier || lastToken.hasAlternation)) {\n return false\n }\n\n if (quantifier.unbounded) {\n unboundedQuantifiers++\n if (unboundedQuantifiers > MAX_REGEXP_UNBOUNDED_QUANTIFIERS) return false\n } else {\n boundedQuantifiers++\n if (boundedQuantifiers > MAX_REGEXP_BOUNDED_QUANTIFIERS) return false\n if (quantifier.maxRepetitions > MAX_REGEXP_BOUNDED_QUANTIFIER) return false\n boundedQuantifierProduct *= Math.max(quantifier.maxRepetitions, 1)\n if (boundedQuantifierProduct > MAX_REGEXP_BOUNDED_QUANTIFIER_PRODUCT) return false\n }\n\n const group = groups.at(-1)\n if (group) group.hasQuantifier = true\n\n i = quantifier.endIndex\n lastToken = null\n continue\n }\n\n lastToken = { type: 'atom' }\n }\n\n return !escaped && !inClass && groups.length === 0\n}\n\nfunction mergeGroupState(target: RegExpGroupState, source: RegExpGroupState): void {\n target.hasQuantifier = target.hasQuantifier || source.hasQuantifier\n target.hasAlternation = target.hasAlternation || source.hasAlternation\n}\n\nfunction parseQuantifier(source: string, index: number): RegExpQuantifier | null {\n const char = source[index]\n if (char === '*' || char === '+') {\n return { endIndex: index, maxRepetitions: Number.POSITIVE_INFINITY, unbounded: true }\n }\n if (char === '?') {\n return { endIndex: index, maxRepetitions: 1, unbounded: false }\n }\n if (char !== '{') return null\n\n const end = source.indexOf('}', index + 1)\n if (end === -1) return null\n\n const body = source.slice(index + 1, end)\n const match = /^(\\d+)(?:,(\\d*))?$/.exec(body)\n if (!match) return null\n\n const min = Number(match[1])\n const maxText = match[2]\n const unbounded = body.includes(',') && maxText === ''\n return {\n endIndex: end,\n maxRepetitions: unbounded ? Number.POSITIVE_INFINITY : Number(maxText ?? min),\n unbounded,\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ //#region src/sync/scan-events.ts
2
+ /**
3
+ * Emits a scanner skip event without letting observer failures abort the scan.
4
+ *
5
+ * @param filters - Scan options that may include an onSkip callback.
6
+ * @param event - Skip event to report.
7
+ */
8
+ function emitScannerSkip(filters, event) {
9
+ try {
10
+ filters?.onSkip?.(event);
11
+ } catch {}
12
+ }
13
+ /**
14
+ * Builds a consistent skip event for paths that cannot be safely tested against RegExp filters.
15
+ *
16
+ * @param relativePath - Sync-relative path that exceeded the RegExp input limit.
17
+ *
18
+ * @returns A typed scanner skip event.
19
+ */
20
+ function regexpInputTooLongSkip(relativePath) {
21
+ return {
22
+ type: "skip",
23
+ path: relativePath,
24
+ size: 0,
25
+ message: `Skipped sync path ${JSON.stringify(relativePath)}: path exceeds the RegExp filter input limit`,
26
+ reason: "path-too-long-for-regexp"
27
+ };
28
+ }
29
+ //#endregion
30
+ exports.emitScannerSkip = emitScannerSkip;
31
+ exports.regexpInputTooLongSkip = regexpInputTooLongSkip;
32
+
33
+ //# sourceMappingURL=scan-events.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-events.cjs","names":[],"sources":["../../src/sync/scan-events.ts"],"sourcesContent":["import type { SyncScanOptions, SyncSkipEvent } from './types.ts'\n\n/**\n * Emits a scanner skip event without letting observer failures abort the scan.\n *\n * @param filters - Scan options that may include an onSkip callback.\n * @param event - Skip event to report.\n */\nexport function emitScannerSkip(filters: SyncScanOptions | undefined, event: SyncSkipEvent): void {\n try {\n filters?.onSkip?.(event)\n } catch {\n // Diagnostics hooks must not change scan behavior.\n }\n}\n\n/**\n * Builds a consistent skip event for paths that cannot be safely tested against RegExp filters.\n *\n * @param relativePath - Sync-relative path that exceeded the RegExp input limit.\n *\n * @returns A typed scanner skip event.\n */\nexport function regexpInputTooLongSkip(relativePath: string): SyncSkipEvent {\n return {\n type: 'skip',\n path: relativePath,\n size: 0,\n message: `Skipped sync path ${JSON.stringify(\n relativePath,\n )}: path exceeds the RegExp filter input limit`,\n reason: 'path-too-long-for-regexp',\n }\n}\n"],"mappings":";;;;;;;AAQA,SAAgB,gBAAgB,SAAsC,OAA4B;CAChG,IAAI;EACF,SAAS,SAAS,KAAK;CACzB,QAAQ,CAER;AACF;;;;;;;;AASA,SAAgB,uBAAuB,cAAqC;CAC1E,OAAO;EACL,MAAM;EACN,MAAM;EACN,MAAM;EACN,SAAS,qBAAqB,KAAK,UACjC,YACF,EAAE;EACF,QAAQ;CACV;AACF"}
@@ -0,0 +1,17 @@
1
+ import { SyncScanOptions, SyncSkipEvent } from './types.js';
2
+ /**
3
+ * Emits a scanner skip event without letting observer failures abort the scan.
4
+ *
5
+ * @param filters - Scan options that may include an onSkip callback.
6
+ * @param event - Skip event to report.
7
+ */
8
+ export declare function emitScannerSkip(filters: SyncScanOptions | undefined, event: SyncSkipEvent): void;
9
+ /**
10
+ * Builds a consistent skip event for paths that cannot be safely tested against RegExp filters.
11
+ *
12
+ * @param relativePath - Sync-relative path that exceeded the RegExp input limit.
13
+ *
14
+ * @returns A typed scanner skip event.
15
+ */
16
+ export declare function regexpInputTooLongSkip(relativePath: string): SyncSkipEvent;
17
+ //# sourceMappingURL=scan-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-events.d.ts","sourceRoot":"","sources":["../../src/sync/scan-events.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEhE;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAMhG;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAU1E"}
@@ -0,0 +1,17 @@
1
+ import { SyncScanOptions, SyncSkipEvent } from './types.js';
2
+ /**
3
+ * Emits a scanner skip event without letting observer failures abort the scan.
4
+ *
5
+ * @param filters - Scan options that may include an onSkip callback.
6
+ * @param event - Skip event to report.
7
+ */
8
+ export declare function emitScannerSkip(filters: SyncScanOptions | undefined, event: SyncSkipEvent): void;
9
+ /**
10
+ * Builds a consistent skip event for paths that cannot be safely tested against RegExp filters.
11
+ *
12
+ * @param relativePath - Sync-relative path that exceeded the RegExp input limit.
13
+ *
14
+ * @returns A typed scanner skip event.
15
+ */
16
+ export declare function regexpInputTooLongSkip(relativePath: string): SyncSkipEvent;
17
+ //# sourceMappingURL=scan-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-events.d.ts","sourceRoot":"","sources":["../../src/sync/scan-events.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEhE;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAMhG;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAU1E"}
@@ -0,0 +1,32 @@
1
+ //#region src/sync/scan-events.ts
2
+ /**
3
+ * Emits a scanner skip event without letting observer failures abort the scan.
4
+ *
5
+ * @param filters - Scan options that may include an onSkip callback.
6
+ * @param event - Skip event to report.
7
+ */
8
+ function emitScannerSkip(filters, event) {
9
+ try {
10
+ filters?.onSkip?.(event);
11
+ } catch {}
12
+ }
13
+ /**
14
+ * Builds a consistent skip event for paths that cannot be safely tested against RegExp filters.
15
+ *
16
+ * @param relativePath - Sync-relative path that exceeded the RegExp input limit.
17
+ *
18
+ * @returns A typed scanner skip event.
19
+ */
20
+ function regexpInputTooLongSkip(relativePath) {
21
+ return {
22
+ type: "skip",
23
+ path: relativePath,
24
+ size: 0,
25
+ message: `Skipped sync path ${JSON.stringify(relativePath)}: path exceeds the RegExp filter input limit`,
26
+ reason: "path-too-long-for-regexp"
27
+ };
28
+ }
29
+ //#endregion
30
+ export { emitScannerSkip, regexpInputTooLongSkip };
31
+
32
+ //# sourceMappingURL=scan-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-events.js","names":[],"sources":["../../src/sync/scan-events.ts"],"sourcesContent":["import type { SyncScanOptions, SyncSkipEvent } from './types.ts'\n\n/**\n * Emits a scanner skip event without letting observer failures abort the scan.\n *\n * @param filters - Scan options that may include an onSkip callback.\n * @param event - Skip event to report.\n */\nexport function emitScannerSkip(filters: SyncScanOptions | undefined, event: SyncSkipEvent): void {\n try {\n filters?.onSkip?.(event)\n } catch {\n // Diagnostics hooks must not change scan behavior.\n }\n}\n\n/**\n * Builds a consistent skip event for paths that cannot be safely tested against RegExp filters.\n *\n * @param relativePath - Sync-relative path that exceeded the RegExp input limit.\n *\n * @returns A typed scanner skip event.\n */\nexport function regexpInputTooLongSkip(relativePath: string): SyncSkipEvent {\n return {\n type: 'skip',\n path: relativePath,\n size: 0,\n message: `Skipped sync path ${JSON.stringify(\n relativePath,\n )}: path exceeds the RegExp filter input limit`,\n reason: 'path-too-long-for-regexp',\n }\n}\n"],"mappings":";;;;;;;AAQA,SAAgB,gBAAgB,SAAsC,OAA4B;CAChG,IAAI;EACF,SAAS,SAAS,KAAK;CACzB,QAAQ,CAER;AACF;;;;;;;;AASA,SAAgB,uBAAuB,cAAqC;CAC1E,OAAO;EACL,MAAM;EACN,MAAM;EACN,MAAM;EACN,SAAS,qBAAqB,KAAK,UACjC,YACF,EAAE;EACF,QAAQ;CACV;AACF"}
@@ -0,0 +1,33 @@
1
+ //#region src/sync/scan-limit.ts
2
+ /** Default maximum number of entries a sync scanner may retain before failing. */
3
+ var DEFAULT_MAX_SCAN_ENTRIES = 1e6;
4
+ /**
5
+ * Resolves and validates the effective scan entry limit.
6
+ * @param options - Optional scan options carrying an override.
7
+ *
8
+ * @returns The configured or default scan entry limit.
9
+ *
10
+ * @throws When the configured limit is not a positive safe integer or Infinity.
11
+ */
12
+ function scanEntryLimit(options) {
13
+ const limit = options?.maxScanEntries ?? 1e6;
14
+ if (limit === Number.POSITIVE_INFINITY) return limit;
15
+ if (!Number.isSafeInteger(limit) || limit < 1) throw new Error("maxScanEntries must be a positive safe integer or Infinity");
16
+ return limit;
17
+ }
18
+ /**
19
+ * Throws when a scanner has retained more entries than the configured limit.
20
+ * @param count - Number of retained entries.
21
+ * @param limit - Maximum allowed retained entries.
22
+ *
23
+ * @throws When count is greater than limit.
24
+ */
25
+ function assertScanEntryLimit(count, limit) {
26
+ if (count > limit) throw new Error(`Sync scan entry limit exceeded: maxScanEntries=${limit} was exceeded after ${count} scanned entries; raising maxScanEntries increases peak scanner memory`);
27
+ }
28
+ //#endregion
29
+ exports.DEFAULT_MAX_SCAN_ENTRIES = DEFAULT_MAX_SCAN_ENTRIES;
30
+ exports.assertScanEntryLimit = assertScanEntryLimit;
31
+ exports.scanEntryLimit = scanEntryLimit;
32
+
33
+ //# sourceMappingURL=scan-limit.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-limit.cjs","names":[],"sources":["../../src/sync/scan-limit.ts"],"sourcesContent":["import type { SyncScanOptions } from './types.ts'\n\n/** Default maximum number of entries a sync scanner may retain before failing. */\nexport const DEFAULT_MAX_SCAN_ENTRIES = 1_000_000\n\n/**\n * Resolves and validates the effective scan entry limit.\n * @param options - Optional scan options carrying an override.\n *\n * @returns The configured or default scan entry limit.\n *\n * @throws When the configured limit is not a positive safe integer or Infinity.\n */\nexport function scanEntryLimit(options: SyncScanOptions | undefined): number {\n const limit = options?.maxScanEntries ?? DEFAULT_MAX_SCAN_ENTRIES\n if (limit === Number.POSITIVE_INFINITY) return limit\n if (!Number.isSafeInteger(limit) || limit < 1) {\n throw new Error('maxScanEntries must be a positive safe integer or Infinity')\n }\n return limit\n}\n\n/**\n * Throws when a scanner has retained more entries than the configured limit.\n * @param count - Number of retained entries.\n * @param limit - Maximum allowed retained entries.\n *\n * @throws When count is greater than limit.\n */\nexport function assertScanEntryLimit(count: number, limit: number): void {\n if (count > limit) {\n throw new Error(\n `Sync scan entry limit exceeded: maxScanEntries=${limit} was exceeded after ${count} scanned entries; raising maxScanEntries increases peak scanner memory`,\n )\n }\n}\n"],"mappings":";;AAGA,IAAa,2BAA2B;;;;;;;;;AAUxC,SAAgB,eAAe,SAA8C;CAC3E,MAAM,QAAQ,SAAS,kBAAA;CACvB,IAAI,UAAU,OAAO,mBAAmB,OAAO;CAC/C,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAC1C,MAAM,IAAI,MAAM,4DAA4D;CAE9E,OAAO;AACT;;;;;;;;AASA,SAAgB,qBAAqB,OAAe,OAAqB;CACvE,IAAI,QAAQ,OACV,MAAM,IAAI,MACR,kDAAkD,MAAM,sBAAsB,MAAM,uEACtF;AAEJ"}
@@ -0,0 +1,21 @@
1
+ import { SyncScanOptions } from './types.js';
2
+ /** Default maximum number of entries a sync scanner may retain before failing. */
3
+ export declare const DEFAULT_MAX_SCAN_ENTRIES = 1000000;
4
+ /**
5
+ * Resolves and validates the effective scan entry limit.
6
+ * @param options - Optional scan options carrying an override.
7
+ *
8
+ * @returns The configured or default scan entry limit.
9
+ *
10
+ * @throws When the configured limit is not a positive safe integer or Infinity.
11
+ */
12
+ export declare function scanEntryLimit(options: SyncScanOptions | undefined): number;
13
+ /**
14
+ * Throws when a scanner has retained more entries than the configured limit.
15
+ * @param count - Number of retained entries.
16
+ * @param limit - Maximum allowed retained entries.
17
+ *
18
+ * @throws When count is greater than limit.
19
+ */
20
+ export declare function assertScanEntryLimit(count: number, limit: number): void;
21
+ //# sourceMappingURL=scan-limit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-limit.d.ts","sourceRoot":"","sources":["../../src/sync/scan-limit.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,kFAAkF;AAClF,eAAO,MAAM,wBAAwB,UAAY,CAAA;AAEjD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,GAAG,MAAM,CAO3E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMvE"}
@@ -0,0 +1,21 @@
1
+ import { SyncScanOptions } from './types.js';
2
+ /** Default maximum number of entries a sync scanner may retain before failing. */
3
+ export declare const DEFAULT_MAX_SCAN_ENTRIES = 1000000;
4
+ /**
5
+ * Resolves and validates the effective scan entry limit.
6
+ * @param options - Optional scan options carrying an override.
7
+ *
8
+ * @returns The configured or default scan entry limit.
9
+ *
10
+ * @throws When the configured limit is not a positive safe integer or Infinity.
11
+ */
12
+ export declare function scanEntryLimit(options: SyncScanOptions | undefined): number;
13
+ /**
14
+ * Throws when a scanner has retained more entries than the configured limit.
15
+ * @param count - Number of retained entries.
16
+ * @param limit - Maximum allowed retained entries.
17
+ *
18
+ * @throws When count is greater than limit.
19
+ */
20
+ export declare function assertScanEntryLimit(count: number, limit: number): void;
21
+ //# sourceMappingURL=scan-limit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-limit.d.ts","sourceRoot":"","sources":["../../src/sync/scan-limit.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,kFAAkF;AAClF,eAAO,MAAM,wBAAwB,UAAY,CAAA;AAEjD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,GAAG,MAAM,CAO3E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMvE"}
@@ -0,0 +1,31 @@
1
+ //#region src/sync/scan-limit.ts
2
+ /** Default maximum number of entries a sync scanner may retain before failing. */
3
+ var DEFAULT_MAX_SCAN_ENTRIES = 1e6;
4
+ /**
5
+ * Resolves and validates the effective scan entry limit.
6
+ * @param options - Optional scan options carrying an override.
7
+ *
8
+ * @returns The configured or default scan entry limit.
9
+ *
10
+ * @throws When the configured limit is not a positive safe integer or Infinity.
11
+ */
12
+ function scanEntryLimit(options) {
13
+ const limit = options?.maxScanEntries ?? 1e6;
14
+ if (limit === Number.POSITIVE_INFINITY) return limit;
15
+ if (!Number.isSafeInteger(limit) || limit < 1) throw new Error("maxScanEntries must be a positive safe integer or Infinity");
16
+ return limit;
17
+ }
18
+ /**
19
+ * Throws when a scanner has retained more entries than the configured limit.
20
+ * @param count - Number of retained entries.
21
+ * @param limit - Maximum allowed retained entries.
22
+ *
23
+ * @throws When count is greater than limit.
24
+ */
25
+ function assertScanEntryLimit(count, limit) {
26
+ if (count > limit) throw new Error(`Sync scan entry limit exceeded: maxScanEntries=${limit} was exceeded after ${count} scanned entries; raising maxScanEntries increases peak scanner memory`);
27
+ }
28
+ //#endregion
29
+ export { DEFAULT_MAX_SCAN_ENTRIES, assertScanEntryLimit, scanEntryLimit };
30
+
31
+ //# sourceMappingURL=scan-limit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-limit.js","names":[],"sources":["../../src/sync/scan-limit.ts"],"sourcesContent":["import type { SyncScanOptions } from './types.ts'\n\n/** Default maximum number of entries a sync scanner may retain before failing. */\nexport const DEFAULT_MAX_SCAN_ENTRIES = 1_000_000\n\n/**\n * Resolves and validates the effective scan entry limit.\n * @param options - Optional scan options carrying an override.\n *\n * @returns The configured or default scan entry limit.\n *\n * @throws When the configured limit is not a positive safe integer or Infinity.\n */\nexport function scanEntryLimit(options: SyncScanOptions | undefined): number {\n const limit = options?.maxScanEntries ?? DEFAULT_MAX_SCAN_ENTRIES\n if (limit === Number.POSITIVE_INFINITY) return limit\n if (!Number.isSafeInteger(limit) || limit < 1) {\n throw new Error('maxScanEntries must be a positive safe integer or Infinity')\n }\n return limit\n}\n\n/**\n * Throws when a scanner has retained more entries than the configured limit.\n * @param count - Number of retained entries.\n * @param limit - Maximum allowed retained entries.\n *\n * @throws When count is greater than limit.\n */\nexport function assertScanEntryLimit(count: number, limit: number): void {\n if (count > limit) {\n throw new Error(\n `Sync scan entry limit exceeded: maxScanEntries=${limit} was exceeded after ${count} scanned entries; raising maxScanEntries increases peak scanner memory`,\n )\n }\n}\n"],"mappings":";;AAGA,IAAa,2BAA2B;;;;;;;;;AAUxC,SAAgB,eAAe,SAA8C;CAC3E,MAAM,QAAQ,SAAS,kBAAA;CACvB,IAAI,UAAU,OAAO,mBAAmB,OAAO;CAC/C,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAC1C,MAAM,IAAI,MAAM,4DAA4D;CAE9E,OAAO;AACT;;;;;;;;AASA,SAAgB,qBAAqB,OAAe,OAAqB;CACvE,IAAI,QAAQ,OACV,MAAM,IAAI,MACR,kDAAkD,MAAM,sBAAsB,MAAM,uEACtF;AAEJ"}