@vandenberghinc/volt 1.2.6 → 1.2.8

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 (472) hide show
  1. package/.libris/config.json +82 -0
  2. package/backend/dist/cjs/backend/src/blacklist.d.ts +12 -0
  3. package/backend/dist/cjs/backend/src/blacklist.js +78 -0
  4. package/backend/dist/cjs/backend/src/cli.d.ts +2 -0
  5. package/backend/dist/cjs/backend/src/cli.js +198 -0
  6. package/backend/dist/cjs/backend/src/database/collection.d.ts +1765 -0
  7. package/backend/dist/cjs/backend/src/database/collection.js +3301 -0
  8. package/backend/dist/cjs/backend/src/database/database.d.ts +92 -0
  9. package/backend/dist/cjs/backend/src/database/database.js +170 -0
  10. package/backend/dist/cjs/backend/src/database/document.d.ts +1 -0
  11. package/backend/dist/cjs/backend/src/database/document.js +15 -0
  12. package/backend/dist/cjs/backend/src/database/filters/filters.d.ts +6 -0
  13. package/backend/dist/cjs/backend/src/database/filters/filters.js +15 -0
  14. package/backend/dist/cjs/backend/src/database/filters/strict_filter.d.ts +223 -0
  15. package/backend/dist/cjs/backend/src/database/filters/strict_filter.js +15 -0
  16. package/backend/dist/cjs/backend/src/database/filters/strict_filter_test.d.ts +1 -0
  17. package/backend/dist/cjs/backend/src/database/filters/strict_filter_test.js +443 -0
  18. package/backend/dist/cjs/backend/src/database/filters/strict_filter_test_v0.d.ts +1 -0
  19. package/backend/dist/cjs/backend/src/database/filters/strict_filter_test_v0.js +15 -0
  20. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v0.d.ts +50 -0
  21. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v0.js +15 -0
  22. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v1.d.ts +76 -0
  23. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v1.js +15 -0
  24. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v2.d.ts +75 -0
  25. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v2.js +15 -0
  26. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v3.d.ts +219 -0
  27. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v3.js +15 -0
  28. package/backend/dist/cjs/backend/src/database/filters/strict_update_filter.d.ts +165 -0
  29. package/backend/dist/cjs/backend/src/database/filters/strict_update_filter.js +15 -0
  30. package/backend/dist/cjs/backend/src/database/filters/strict_update_filter_test.d.ts +5 -0
  31. package/backend/dist/cjs/backend/src/database/filters/strict_update_filter_test.js +355 -0
  32. package/backend/dist/cjs/backend/src/database/flatten.d.ts +78 -0
  33. package/backend/dist/cjs/backend/src/database/flatten.js +53 -0
  34. package/backend/dist/cjs/backend/src/database/flatten_test.d.ts +1 -0
  35. package/backend/dist/cjs/backend/src/database/flatten_test.js +175 -0
  36. package/backend/dist/cjs/backend/src/database/quota/quoata_v2.d.ts +533 -0
  37. package/backend/dist/cjs/backend/src/database/quota/quoata_v2.js +1046 -0
  38. package/backend/dist/cjs/backend/src/database/quota/quota.d.ts +551 -0
  39. package/backend/dist/cjs/backend/src/database/quota/quota.js +1108 -0
  40. package/backend/dist/cjs/backend/src/database/quota/quota_v1.d.ts +534 -0
  41. package/backend/dist/cjs/backend/src/database/quota/quota_v1.js +1087 -0
  42. package/backend/dist/cjs/backend/src/database/quota/safe_int.d.ts +412 -0
  43. package/backend/dist/cjs/backend/src/database/quota/safe_int.js +745 -0
  44. package/backend/dist/cjs/backend/src/endpoint.d.ts +346 -0
  45. package/backend/dist/cjs/backend/src/endpoint.js +468 -0
  46. package/backend/dist/cjs/backend/src/errors/index.d.ts +7 -0
  47. package/backend/dist/cjs/backend/src/errors/index.js +25 -0
  48. package/backend/dist/cjs/backend/src/errors/internal_external.d.ts +52 -0
  49. package/backend/dist/cjs/backend/src/errors/internal_external.js +95 -0
  50. package/backend/dist/cjs/backend/src/errors/invalid_usage_error.d.ts +41 -0
  51. package/backend/dist/cjs/backend/src/errors/invalid_usage_error.js +47 -0
  52. package/backend/dist/cjs/backend/src/errors/system_error.d.ts +261 -0
  53. package/backend/dist/cjs/backend/src/errors/system_error.js +436 -0
  54. package/backend/dist/cjs/backend/src/events.d.ts +97 -0
  55. package/backend/dist/cjs/backend/src/events.js +15 -0
  56. package/backend/dist/cjs/backend/src/frontend.d.ts +13 -0
  57. package/backend/dist/cjs/backend/src/frontend.js +56 -0
  58. package/backend/dist/cjs/backend/src/image_endpoint.d.ts +44 -0
  59. package/backend/dist/cjs/backend/src/image_endpoint.js +185 -0
  60. package/backend/dist/cjs/backend/src/index.d.ts +23 -0
  61. package/backend/dist/cjs/backend/src/index.js +70 -0
  62. package/backend/dist/cjs/backend/src/logger.d.ts +5 -0
  63. package/backend/dist/cjs/backend/src/logger.js +15 -0
  64. package/backend/dist/cjs/backend/src/meta.d.ts +112 -0
  65. package/backend/dist/cjs/backend/src/meta.js +181 -0
  66. package/backend/dist/cjs/backend/src/payments/paddle.d.ts +329 -0
  67. package/backend/dist/cjs/backend/src/payments/paddle.js +1996 -0
  68. package/backend/dist/cjs/backend/src/payments/stripe/checkout.d.ts +113 -0
  69. package/backend/dist/cjs/backend/src/payments/stripe/checkout.js +295 -0
  70. package/backend/dist/cjs/backend/src/payments/stripe/customers.d.ts +17 -0
  71. package/backend/dist/cjs/backend/src/payments/stripe/customers.js +164 -0
  72. package/backend/dist/cjs/backend/src/payments/stripe/error.d.ts +74 -0
  73. package/backend/dist/cjs/backend/src/payments/stripe/error.js +64 -0
  74. package/backend/dist/cjs/backend/src/payments/stripe/events.d.ts +155 -0
  75. package/backend/dist/cjs/backend/src/payments/stripe/events.js +15 -0
  76. package/backend/dist/cjs/backend/src/payments/stripe/meters.d.ts +105 -0
  77. package/backend/dist/cjs/backend/src/payments/stripe/meters.js +230 -0
  78. package/backend/dist/cjs/backend/src/payments/stripe/payment_methods.d.ts +58 -0
  79. package/backend/dist/cjs/backend/src/payments/stripe/payment_methods.js +109 -0
  80. package/backend/dist/cjs/backend/src/payments/stripe/products.d.ts +519 -0
  81. package/backend/dist/cjs/backend/src/payments/stripe/products.js +650 -0
  82. package/backend/dist/cjs/backend/src/payments/stripe/stripe.d.ts +215 -0
  83. package/backend/dist/cjs/backend/src/payments/stripe/stripe.js +468 -0
  84. package/backend/dist/cjs/backend/src/payments/stripe/subscriptions.d.ts +172 -0
  85. package/backend/dist/cjs/backend/src/payments/stripe/subscriptions.js +557 -0
  86. package/backend/dist/cjs/backend/src/payments/stripe/utils.d.ts +63 -0
  87. package/backend/dist/cjs/backend/src/payments/stripe/utils.js +118 -0
  88. package/backend/dist/cjs/backend/src/payments/stripe/webhooks.d.ts +105 -0
  89. package/backend/dist/cjs/backend/src/payments/stripe/webhooks.js +627 -0
  90. package/backend/dist/cjs/backend/src/plugins/browser.d.ts +1 -0
  91. package/backend/dist/cjs/backend/src/plugins/browser.js +15 -0
  92. package/backend/dist/cjs/backend/src/plugins/communication.d.ts +70 -0
  93. package/backend/dist/cjs/backend/src/plugins/communication.js +196 -0
  94. package/backend/dist/cjs/backend/src/plugins/mail/mail.d.ts +255 -0
  95. package/backend/dist/cjs/backend/src/plugins/mail/mail.js +381 -0
  96. package/backend/dist/cjs/backend/src/plugins/mail/ui.d.ts +297 -0
  97. package/backend/dist/cjs/backend/src/plugins/mail/ui.js +1370 -0
  98. package/backend/dist/cjs/backend/src/plugins/pdf.d.ts +1 -0
  99. package/backend/dist/cjs/backend/src/plugins/pdf.js +1456 -0
  100. package/backend/dist/cjs/backend/src/plugins/thread_monitor.d.ts +18 -0
  101. package/backend/dist/cjs/backend/src/plugins/thread_monitor.js +116 -0
  102. package/backend/dist/cjs/backend/src/rate_limit.d.ts +148 -0
  103. package/backend/dist/cjs/backend/src/rate_limit.js +543 -0
  104. package/backend/dist/cjs/backend/src/route.d.ts +39 -0
  105. package/backend/dist/cjs/backend/src/route.js +172 -0
  106. package/backend/dist/cjs/backend/src/server.d.ts +502 -0
  107. package/backend/dist/cjs/backend/src/server.js +1710 -0
  108. package/backend/dist/cjs/backend/src/server.old.d.ts +594 -0
  109. package/backend/dist/cjs/backend/src/server.old.js +2058 -0
  110. package/backend/dist/cjs/backend/src/splash_screen.d.ts +93 -0
  111. package/backend/dist/cjs/backend/src/splash_screen.js +119 -0
  112. package/backend/dist/cjs/backend/src/status.d.ts +89 -0
  113. package/backend/dist/cjs/backend/src/status.js +211 -0
  114. package/backend/dist/cjs/backend/src/stream.d.ts +494 -0
  115. package/backend/dist/cjs/backend/src/stream.js +1370 -0
  116. package/backend/dist/cjs/backend/src/users.d.ts +926 -0
  117. package/backend/dist/cjs/backend/src/users.js +2223 -0
  118. package/backend/dist/cjs/backend/src/utils.d.ts +22 -0
  119. package/backend/dist/cjs/backend/src/utils.js +626 -0
  120. package/backend/dist/cjs/backend/src/view.d.ts +115 -0
  121. package/backend/dist/cjs/backend/src/view.js +519 -0
  122. package/backend/dist/cjs/backend/src/vinc.d.ts +6 -0
  123. package/backend/dist/cjs/backend/src/vinc.js +40 -0
  124. package/backend/dist/cjs/backend/src/volt.d.ts +24 -0
  125. package/backend/dist/cjs/backend/src/volt.js +72 -0
  126. package/backend/dist/cjs/frontend/src/modules/request.d.ts +70 -0
  127. package/backend/dist/cjs/frontend/src/modules/request.js +99 -0
  128. package/backend/dist/cjs/package.json +1 -0
  129. package/backend/dist/esm/backend/src/blacklist.d.ts +12 -0
  130. package/backend/dist/esm/backend/src/blacklist.js +52 -0
  131. package/backend/dist/esm/backend/src/cli.d.ts +2 -0
  132. package/backend/dist/esm/backend/src/cli.js +211 -0
  133. package/backend/dist/esm/backend/src/database/collection.d.ts +1765 -0
  134. package/backend/dist/esm/backend/src/database/collection.js +3779 -0
  135. package/backend/dist/esm/backend/src/database/database.d.ts +92 -0
  136. package/backend/dist/esm/backend/src/database/database.js +214 -0
  137. package/backend/dist/esm/backend/src/database/document.d.ts +1 -0
  138. package/backend/dist/esm/backend/src/database/document.js +558 -0
  139. package/backend/dist/esm/backend/src/database/filters/filters.d.ts +6 -0
  140. package/backend/dist/esm/backend/src/database/filters/filters.js +1 -0
  141. package/backend/dist/esm/backend/src/database/filters/strict_filter.d.ts +223 -0
  142. package/backend/dist/esm/backend/src/database/filters/strict_filter.js +3 -0
  143. package/backend/dist/esm/backend/src/database/filters/strict_filter_test.d.ts +1 -0
  144. package/backend/dist/esm/backend/src/database/filters/strict_filter_test.js +505 -0
  145. package/backend/dist/esm/backend/src/database/filters/strict_filter_test_v0.d.ts +1 -0
  146. package/backend/dist/esm/backend/src/database/filters/strict_filter_test_v0.js +712 -0
  147. package/backend/dist/esm/backend/src/database/filters/strict_filter_v0.d.ts +50 -0
  148. package/backend/dist/esm/backend/src/database/filters/strict_filter_v0.js +5 -0
  149. package/backend/dist/esm/backend/src/database/filters/strict_filter_v1.d.ts +76 -0
  150. package/backend/dist/esm/backend/src/database/filters/strict_filter_v1.js +44 -0
  151. package/backend/dist/esm/backend/src/database/filters/strict_filter_v2.d.ts +75 -0
  152. package/backend/dist/esm/backend/src/database/filters/strict_filter_v2.js +5 -0
  153. package/backend/dist/esm/backend/src/database/filters/strict_filter_v3.d.ts +219 -0
  154. package/backend/dist/esm/backend/src/database/filters/strict_filter_v3.js +1 -0
  155. package/backend/dist/esm/backend/src/database/filters/strict_update_filter.d.ts +165 -0
  156. package/backend/dist/esm/backend/src/database/filters/strict_update_filter.js +5 -0
  157. package/backend/dist/esm/backend/src/database/filters/strict_update_filter_test.d.ts +5 -0
  158. package/backend/dist/esm/backend/src/database/filters/strict_update_filter_test.js +415 -0
  159. package/backend/dist/esm/backend/src/database/flatten.d.ts +78 -0
  160. package/backend/dist/esm/backend/src/database/flatten.js +22 -0
  161. package/backend/dist/esm/backend/src/database/flatten_test.d.ts +1 -0
  162. package/backend/dist/esm/backend/src/database/flatten_test.js +174 -0
  163. package/backend/dist/esm/backend/src/database/quota/quoata_v2.d.ts +533 -0
  164. package/backend/dist/esm/backend/src/database/quota/quoata_v2.js +1155 -0
  165. package/backend/dist/esm/backend/src/database/quota/quota.d.ts +551 -0
  166. package/backend/dist/esm/backend/src/database/quota/quota.js +1219 -0
  167. package/backend/dist/esm/backend/src/database/quota/quota_v1.d.ts +534 -0
  168. package/backend/dist/esm/backend/src/database/quota/quota_v1.js +1242 -0
  169. package/backend/dist/esm/backend/src/database/quota/safe_int.d.ts +412 -0
  170. package/backend/dist/esm/backend/src/database/quota/safe_int.js +810 -0
  171. package/backend/dist/esm/backend/src/endpoint.d.ts +346 -0
  172. package/backend/dist/esm/backend/src/endpoint.js +479 -0
  173. package/backend/dist/esm/backend/src/errors/index.d.ts +7 -0
  174. package/backend/dist/esm/backend/src/errors/index.js +7 -0
  175. package/backend/dist/esm/backend/src/errors/internal_external.d.ts +52 -0
  176. package/backend/dist/esm/backend/src/errors/internal_external.js +86 -0
  177. package/backend/dist/esm/backend/src/errors/invalid_usage_error.d.ts +41 -0
  178. package/backend/dist/esm/backend/src/errors/invalid_usage_error.js +33 -0
  179. package/backend/dist/esm/backend/src/errors/system_error.d.ts +261 -0
  180. package/backend/dist/esm/backend/src/errors/system_error.js +444 -0
  181. package/backend/dist/esm/backend/src/events.d.ts +97 -0
  182. package/backend/dist/esm/backend/src/events.js +5 -0
  183. package/backend/dist/esm/backend/src/frontend.d.ts +13 -0
  184. package/backend/dist/esm/backend/src/frontend.js +23 -0
  185. package/backend/dist/esm/backend/src/image_endpoint.d.ts +44 -0
  186. package/backend/dist/esm/backend/src/image_endpoint.js +196 -0
  187. package/backend/dist/esm/backend/src/index.d.ts +23 -0
  188. package/backend/dist/esm/backend/src/index.js +26 -0
  189. package/backend/dist/esm/backend/src/logger.d.ts +5 -0
  190. package/backend/dist/esm/backend/src/logger.js +8 -0
  191. package/backend/dist/esm/backend/src/meta.d.ts +112 -0
  192. package/backend/dist/esm/backend/src/meta.js +152 -0
  193. package/backend/dist/esm/backend/src/payments/paddle.d.ts +329 -0
  194. package/backend/dist/esm/backend/src/payments/paddle.js +2276 -0
  195. package/backend/dist/esm/backend/src/payments/stripe/checkout.d.ts +113 -0
  196. package/backend/dist/esm/backend/src/payments/stripe/checkout.js +356 -0
  197. package/backend/dist/esm/backend/src/payments/stripe/customers.d.ts +17 -0
  198. package/backend/dist/esm/backend/src/payments/stripe/customers.js +193 -0
  199. package/backend/dist/esm/backend/src/payments/stripe/error.d.ts +74 -0
  200. package/backend/dist/esm/backend/src/payments/stripe/error.js +51 -0
  201. package/backend/dist/esm/backend/src/payments/stripe/events.d.ts +155 -0
  202. package/backend/dist/esm/backend/src/payments/stripe/events.js +5 -0
  203. package/backend/dist/esm/backend/src/payments/stripe/meters.d.ts +105 -0
  204. package/backend/dist/esm/backend/src/payments/stripe/meters.js +318 -0
  205. package/backend/dist/esm/backend/src/payments/stripe/payment_methods.d.ts +58 -0
  206. package/backend/dist/esm/backend/src/payments/stripe/payment_methods.js +135 -0
  207. package/backend/dist/esm/backend/src/payments/stripe/products.d.ts +519 -0
  208. package/backend/dist/esm/backend/src/payments/stripe/products.js +896 -0
  209. package/backend/dist/esm/backend/src/payments/stripe/stripe.d.ts +215 -0
  210. package/backend/dist/esm/backend/src/payments/stripe/stripe.js +464 -0
  211. package/backend/dist/esm/backend/src/payments/stripe/subscriptions.d.ts +172 -0
  212. package/backend/dist/esm/backend/src/payments/stripe/subscriptions.js +754 -0
  213. package/backend/dist/esm/backend/src/payments/stripe/utils.d.ts +63 -0
  214. package/backend/dist/esm/backend/src/payments/stripe/utils.js +131 -0
  215. package/backend/dist/esm/backend/src/payments/stripe/webhooks.d.ts +105 -0
  216. package/backend/dist/esm/backend/src/payments/stripe/webhooks.js +752 -0
  217. package/backend/dist/esm/backend/src/plugins/browser.d.ts +1 -0
  218. package/backend/dist/esm/backend/src/plugins/browser.js +170 -0
  219. package/backend/dist/esm/backend/src/plugins/communication.d.ts +70 -0
  220. package/backend/dist/esm/backend/src/plugins/communication.js +169 -0
  221. package/backend/dist/esm/backend/src/plugins/mail/mail.d.ts +255 -0
  222. package/backend/dist/esm/backend/src/plugins/mail/mail.js +396 -0
  223. package/backend/dist/esm/backend/src/plugins/mail/ui.d.ts +297 -0
  224. package/backend/dist/esm/backend/src/plugins/mail/ui.js +1400 -0
  225. package/backend/dist/esm/backend/src/plugins/pdf.d.ts +1 -0
  226. package/backend/dist/esm/backend/src/plugins/pdf.js +1694 -0
  227. package/backend/dist/esm/backend/src/plugins/thread_monitor.d.ts +18 -0
  228. package/backend/dist/esm/backend/src/plugins/thread_monitor.js +120 -0
  229. package/backend/dist/esm/backend/src/rate_limit.d.ts +148 -0
  230. package/backend/dist/esm/backend/src/rate_limit.js +667 -0
  231. package/backend/dist/esm/backend/src/route.d.ts +39 -0
  232. package/backend/dist/esm/backend/src/route.js +222 -0
  233. package/backend/dist/esm/backend/src/server.d.ts +502 -0
  234. package/backend/dist/esm/backend/src/server.js +2031 -0
  235. package/backend/dist/esm/backend/src/server.old.d.ts +594 -0
  236. package/backend/dist/esm/backend/src/server.old.js +2630 -0
  237. package/backend/dist/esm/backend/src/splash_screen.d.ts +93 -0
  238. package/backend/dist/esm/backend/src/splash_screen.js +156 -0
  239. package/backend/dist/esm/backend/src/status.d.ts +89 -0
  240. package/backend/dist/esm/backend/src/status.js +213 -0
  241. package/backend/dist/esm/backend/src/stream.d.ts +494 -0
  242. package/backend/dist/esm/backend/src/stream.js +1611 -0
  243. package/backend/dist/esm/backend/src/users.d.ts +926 -0
  244. package/backend/dist/esm/backend/src/users.js +2423 -0
  245. package/backend/dist/esm/backend/src/utils.d.ts +22 -0
  246. package/backend/dist/esm/backend/src/utils.js +463 -0
  247. package/backend/dist/esm/backend/src/view.d.ts +115 -0
  248. package/backend/dist/esm/backend/src/view.js +584 -0
  249. package/backend/dist/esm/backend/src/vinc.d.ts +6 -0
  250. package/backend/dist/esm/backend/src/vinc.js +6 -0
  251. package/backend/dist/esm/backend/src/volt.d.ts +24 -0
  252. package/backend/dist/esm/backend/src/volt.js +27 -0
  253. package/backend/dist/esm/frontend/src/modules/request.d.ts +70 -0
  254. package/backend/dist/esm/frontend/src/modules/request.js +117 -0
  255. package/backend/old/file_watcher.ts +359 -0
  256. package/backend/old/request.deprc.js +626 -0
  257. package/backend/old/response.deprc.js +354 -0
  258. package/frontend/dist/backend/src/database/collection.d.ts +1765 -0
  259. package/frontend/dist/backend/src/database/collection.js +3779 -0
  260. package/frontend/dist/backend/src/database/database.d.ts +92 -0
  261. package/frontend/dist/backend/src/database/database.js +214 -0
  262. package/frontend/dist/backend/src/database/filters/filters.d.ts +6 -0
  263. package/frontend/dist/backend/src/database/filters/filters.js +1 -0
  264. package/frontend/dist/backend/src/database/filters/strict_filter.d.ts +223 -0
  265. package/frontend/dist/backend/src/database/filters/strict_filter.js +3 -0
  266. package/frontend/dist/backend/src/database/filters/strict_update_filter.d.ts +165 -0
  267. package/frontend/dist/backend/src/database/filters/strict_update_filter.js +5 -0
  268. package/frontend/dist/backend/src/database/flatten.d.ts +78 -0
  269. package/frontend/dist/backend/src/database/flatten.js +22 -0
  270. package/frontend/dist/backend/src/endpoint.d.ts +346 -0
  271. package/frontend/dist/backend/src/endpoint.js +479 -0
  272. package/frontend/dist/backend/src/errors/index.d.ts +7 -0
  273. package/frontend/dist/backend/src/errors/index.js +7 -0
  274. package/frontend/dist/backend/src/errors/internal_external.d.ts +52 -0
  275. package/frontend/dist/backend/src/errors/internal_external.js +86 -0
  276. package/frontend/dist/backend/src/errors/invalid_usage_error.d.ts +41 -0
  277. package/frontend/dist/backend/src/errors/invalid_usage_error.js +33 -0
  278. package/frontend/dist/backend/src/errors/system_error.d.ts +261 -0
  279. package/frontend/dist/backend/src/errors/system_error.js +444 -0
  280. package/frontend/dist/backend/src/events.d.ts +97 -0
  281. package/frontend/dist/backend/src/events.js +5 -0
  282. package/frontend/dist/backend/src/frontend.d.ts +13 -0
  283. package/frontend/dist/backend/src/frontend.js +23 -0
  284. package/frontend/dist/backend/src/image_endpoint.d.ts +44 -0
  285. package/frontend/dist/backend/src/image_endpoint.js +196 -0
  286. package/frontend/dist/backend/src/meta.d.ts +112 -0
  287. package/frontend/dist/backend/src/meta.js +152 -0
  288. package/frontend/dist/backend/src/payments/paddle.d.ts +329 -0
  289. package/frontend/dist/backend/src/payments/paddle.js +2276 -0
  290. package/frontend/dist/backend/src/payments/stripe/checkout.d.ts +113 -0
  291. package/frontend/dist/backend/src/payments/stripe/checkout.js +356 -0
  292. package/frontend/dist/backend/src/payments/stripe/customers.d.ts +17 -0
  293. package/frontend/dist/backend/src/payments/stripe/customers.js +193 -0
  294. package/frontend/dist/backend/src/payments/stripe/error.d.ts +74 -0
  295. package/frontend/dist/backend/src/payments/stripe/error.js +51 -0
  296. package/frontend/dist/backend/src/payments/stripe/events.d.ts +155 -0
  297. package/frontend/dist/backend/src/payments/stripe/events.js +5 -0
  298. package/frontend/dist/backend/src/payments/stripe/meters.d.ts +105 -0
  299. package/frontend/dist/backend/src/payments/stripe/meters.js +318 -0
  300. package/frontend/dist/backend/src/payments/stripe/payment_methods.d.ts +58 -0
  301. package/frontend/dist/backend/src/payments/stripe/payment_methods.js +135 -0
  302. package/frontend/dist/backend/src/payments/stripe/products.d.ts +519 -0
  303. package/frontend/dist/backend/src/payments/stripe/products.js +896 -0
  304. package/frontend/dist/backend/src/payments/stripe/stripe.d.ts +215 -0
  305. package/frontend/dist/backend/src/payments/stripe/stripe.js +464 -0
  306. package/frontend/dist/backend/src/payments/stripe/subscriptions.d.ts +172 -0
  307. package/frontend/dist/backend/src/payments/stripe/subscriptions.js +754 -0
  308. package/frontend/dist/backend/src/payments/stripe/utils.d.ts +63 -0
  309. package/frontend/dist/backend/src/payments/stripe/utils.js +131 -0
  310. package/frontend/dist/backend/src/payments/stripe/webhooks.d.ts +105 -0
  311. package/frontend/dist/backend/src/payments/stripe/webhooks.js +752 -0
  312. package/frontend/dist/backend/src/plugins/mail/mail.d.ts +255 -0
  313. package/frontend/dist/backend/src/plugins/mail/mail.js +396 -0
  314. package/frontend/dist/backend/src/plugins/mail/ui.d.ts +297 -0
  315. package/frontend/dist/backend/src/plugins/mail/ui.js +1400 -0
  316. package/frontend/dist/backend/src/rate_limit.d.ts +148 -0
  317. package/frontend/dist/backend/src/rate_limit.js +667 -0
  318. package/frontend/dist/backend/src/route.d.ts +39 -0
  319. package/frontend/dist/backend/src/route.js +222 -0
  320. package/frontend/dist/backend/src/server.d.ts +502 -0
  321. package/frontend/dist/backend/src/server.js +2031 -0
  322. package/frontend/dist/backend/src/splash_screen.d.ts +93 -0
  323. package/frontend/dist/backend/src/splash_screen.js +156 -0
  324. package/frontend/dist/backend/src/status.d.ts +89 -0
  325. package/frontend/dist/backend/src/status.js +213 -0
  326. package/frontend/dist/backend/src/stream.d.ts +494 -0
  327. package/frontend/dist/backend/src/stream.js +1611 -0
  328. package/frontend/dist/backend/src/users.d.ts +926 -0
  329. package/frontend/dist/backend/src/users.js +2423 -0
  330. package/frontend/dist/backend/src/utils.d.ts +22 -0
  331. package/frontend/dist/backend/src/utils.js +463 -0
  332. package/frontend/dist/backend/src/view.d.ts +115 -0
  333. package/frontend/dist/backend/src/view.js +584 -0
  334. package/frontend/dist/frontend/src/css/adyen.css +92 -0
  335. package/frontend/dist/frontend/src/css/volt.css +75 -0
  336. package/frontend/dist/frontend/src/elements/base.d.ts +3743 -0
  337. package/frontend/dist/frontend/src/elements/base.js +12151 -0
  338. package/frontend/dist/frontend/src/elements/module.d.ts +95 -0
  339. package/frontend/dist/frontend/src/elements/module.js +216 -0
  340. package/frontend/dist/frontend/src/elements/register_element.d.ts +3 -0
  341. package/frontend/dist/frontend/src/elements/register_element.js +22 -0
  342. package/frontend/dist/frontend/src/elements/resize_query_manager.d.ts +0 -0
  343. package/frontend/dist/frontend/src/elements/resize_query_manager.js +150 -0
  344. package/frontend/dist/frontend/src/elements/types.d.ts +52 -0
  345. package/frontend/dist/frontend/src/elements/types.js +5 -0
  346. package/frontend/dist/frontend/src/index.d.ts +21 -0
  347. package/frontend/dist/frontend/src/index.js +29 -0
  348. package/frontend/dist/frontend/src/modules/attachment.d.ts +126 -0
  349. package/frontend/dist/frontend/src/modules/attachment.js +306 -0
  350. package/frontend/dist/frontend/src/modules/auth.d.ts +44 -0
  351. package/frontend/dist/frontend/src/modules/auth.js +80 -0
  352. package/frontend/dist/frontend/src/modules/color.d.ts +160 -0
  353. package/frontend/dist/frontend/src/modules/color.js +316 -0
  354. package/frontend/dist/frontend/src/modules/compression.d.ts +39 -0
  355. package/frontend/dist/frontend/src/modules/compression.js +102 -0
  356. package/frontend/dist/frontend/src/modules/cookies.d.ts +44 -0
  357. package/frontend/dist/frontend/src/modules/cookies.js +143 -0
  358. package/frontend/dist/frontend/src/modules/events.d.ts +31 -0
  359. package/frontend/dist/frontend/src/modules/events.js +79 -0
  360. package/frontend/dist/frontend/src/modules/google.d.ts +23 -0
  361. package/frontend/dist/frontend/src/modules/google.js +52 -0
  362. package/frontend/dist/frontend/src/modules/meta.d.ts +14 -0
  363. package/frontend/dist/frontend/src/modules/meta.js +48 -0
  364. package/frontend/dist/frontend/src/modules/paddle.d.ts +1207 -0
  365. package/frontend/dist/frontend/src/modules/paddle.js +2594 -0
  366. package/frontend/dist/frontend/src/modules/request.d.ts +70 -0
  367. package/frontend/dist/frontend/src/modules/request.js +117 -0
  368. package/frontend/dist/frontend/src/modules/settings.d.ts +3 -0
  369. package/frontend/dist/frontend/src/modules/settings.js +5 -0
  370. package/frontend/dist/frontend/src/modules/statics.d.ts +21 -0
  371. package/frontend/dist/frontend/src/modules/statics.js +43 -0
  372. package/frontend/dist/frontend/src/modules/stripe/cart.d.ts +112 -0
  373. package/frontend/dist/frontend/src/modules/stripe/cart.js +321 -0
  374. package/frontend/dist/frontend/src/modules/stripe/checkout.d.ts +7 -0
  375. package/frontend/dist/frontend/src/modules/stripe/checkout.js +37 -0
  376. package/frontend/dist/frontend/src/modules/stripe/index.m.d.ts +6 -0
  377. package/frontend/dist/frontend/src/modules/stripe/index.m.js +6 -0
  378. package/frontend/dist/frontend/src/modules/stripe/payments.d.ts +58 -0
  379. package/frontend/dist/frontend/src/modules/stripe/payments.js +92 -0
  380. package/frontend/dist/frontend/src/modules/support.d.ts +30 -0
  381. package/frontend/dist/frontend/src/modules/support.js +53 -0
  382. package/frontend/dist/frontend/src/modules/theme.d.ts +133 -0
  383. package/frontend/dist/frontend/src/modules/theme.js +406 -0
  384. package/frontend/dist/frontend/src/modules/themes.d.ts +12 -0
  385. package/frontend/dist/frontend/src/modules/themes.js +22 -0
  386. package/frontend/dist/frontend/src/modules/user.d.ts +164 -0
  387. package/frontend/dist/frontend/src/modules/user.js +270 -0
  388. package/frontend/dist/frontend/src/modules/utils.d.ts +176 -0
  389. package/frontend/dist/frontend/src/modules/utils.js +569 -0
  390. package/frontend/dist/frontend/src/types/gradient.d.ts +29 -0
  391. package/frontend/dist/frontend/src/types/gradient.js +79 -0
  392. package/frontend/dist/frontend/src/ui/border_button.d.ts +94 -0
  393. package/frontend/dist/frontend/src/ui/border_button.js +228 -0
  394. package/frontend/dist/frontend/src/ui/button.d.ts +241 -0
  395. package/frontend/dist/frontend/src/ui/button.js +682 -0
  396. package/frontend/dist/frontend/src/ui/canvas.d.ts +138 -0
  397. package/frontend/dist/frontend/src/ui/canvas.js +444 -0
  398. package/frontend/dist/frontend/src/ui/checkbox.d.ts +74 -0
  399. package/frontend/dist/frontend/src/ui/checkbox.js +321 -0
  400. package/frontend/dist/frontend/src/ui/code.d.ts +235 -0
  401. package/frontend/dist/frontend/src/ui/code.js +1007 -0
  402. package/frontend/dist/frontend/src/ui/context_menu.d.ts +36 -0
  403. package/frontend/dist/frontend/src/ui/context_menu.js +205 -0
  404. package/frontend/dist/frontend/src/ui/css.d.ts +16 -0
  405. package/frontend/dist/frontend/src/ui/css.js +48 -0
  406. package/frontend/dist/frontend/src/ui/divider.d.ts +15 -0
  407. package/frontend/dist/frontend/src/ui/divider.js +78 -0
  408. package/frontend/dist/frontend/src/ui/dropdown.d.ts +176 -0
  409. package/frontend/dist/frontend/src/ui/dropdown.js +481 -0
  410. package/frontend/dist/frontend/src/ui/for_each.d.ts +37 -0
  411. package/frontend/dist/frontend/src/ui/for_each.js +92 -0
  412. package/frontend/dist/frontend/src/ui/form.d.ts +34 -0
  413. package/frontend/dist/frontend/src/ui/form.js +233 -0
  414. package/frontend/dist/frontend/src/ui/frame_modes.d.ts +37 -0
  415. package/frontend/dist/frontend/src/ui/frame_modes.js +108 -0
  416. package/frontend/dist/frontend/src/ui/google_map.d.ts +24 -0
  417. package/frontend/dist/frontend/src/ui/google_map.js +106 -0
  418. package/frontend/dist/frontend/src/ui/gradient.d.ts +25 -0
  419. package/frontend/dist/frontend/src/ui/gradient.js +131 -0
  420. package/frontend/dist/frontend/src/ui/image.d.ts +111 -0
  421. package/frontend/dist/frontend/src/ui/image.js +576 -0
  422. package/frontend/dist/frontend/src/ui/input.d.ts +392 -0
  423. package/frontend/dist/frontend/src/ui/input.js +1201 -0
  424. package/frontend/dist/frontend/src/ui/link.d.ts +25 -0
  425. package/frontend/dist/frontend/src/ui/link.js +140 -0
  426. package/frontend/dist/frontend/src/ui/list.d.ts +37 -0
  427. package/frontend/dist/frontend/src/ui/list.js +170 -0
  428. package/frontend/dist/frontend/src/ui/loader_button.d.ts +80 -0
  429. package/frontend/dist/frontend/src/ui/loader_button.js +193 -0
  430. package/frontend/dist/frontend/src/ui/loaders.d.ts +57 -0
  431. package/frontend/dist/frontend/src/ui/loaders.js +157 -0
  432. package/frontend/dist/frontend/src/ui/popup.d.ts +94 -0
  433. package/frontend/dist/frontend/src/ui/popup.js +510 -0
  434. package/frontend/dist/frontend/src/ui/pseudo.d.ts +44 -0
  435. package/frontend/dist/frontend/src/ui/pseudo.js +154 -0
  436. package/frontend/dist/frontend/src/ui/scroller.d.ts +105 -0
  437. package/frontend/dist/frontend/src/ui/scroller.js +1253 -0
  438. package/frontend/dist/frontend/src/ui/slider.d.ts +45 -0
  439. package/frontend/dist/frontend/src/ui/slider.js +217 -0
  440. package/frontend/dist/frontend/src/ui/spacer.d.ts +15 -0
  441. package/frontend/dist/frontend/src/ui/spacer.js +78 -0
  442. package/frontend/dist/frontend/src/ui/span.d.ts +15 -0
  443. package/frontend/dist/frontend/src/ui/span.js +73 -0
  444. package/frontend/dist/frontend/src/ui/stack.d.ts +66 -0
  445. package/frontend/dist/frontend/src/ui/stack.js +335 -0
  446. package/frontend/dist/frontend/src/ui/steps.d.ts +131 -0
  447. package/frontend/dist/frontend/src/ui/steps.js +308 -0
  448. package/frontend/dist/frontend/src/ui/style.d.ts +17 -0
  449. package/frontend/dist/frontend/src/ui/style.js +73 -0
  450. package/frontend/dist/frontend/src/ui/switch.d.ts +69 -0
  451. package/frontend/dist/frontend/src/ui/switch.js +357 -0
  452. package/frontend/dist/frontend/src/ui/table.d.ts +100 -0
  453. package/frontend/dist/frontend/src/ui/table.js +405 -0
  454. package/frontend/dist/frontend/src/ui/tabs.d.ts +111 -0
  455. package/frontend/dist/frontend/src/ui/tabs.js +424 -0
  456. package/frontend/dist/frontend/src/ui/text.d.ts +15 -0
  457. package/frontend/dist/frontend/src/ui/text.js +83 -0
  458. package/frontend/dist/frontend/src/ui/title.d.ts +91 -0
  459. package/frontend/dist/frontend/src/ui/title.js +272 -0
  460. package/frontend/dist/frontend/src/ui/ui.d.ts +35 -0
  461. package/frontend/dist/frontend/src/ui/ui.js +38 -0
  462. package/frontend/dist/frontend/src/ui/view.d.ts +15 -0
  463. package/frontend/dist/frontend/src/ui/view.js +88 -0
  464. package/frontend/dist/frontend/src/volt.d.ts +20 -0
  465. package/frontend/dist/frontend/src/volt.js +27 -0
  466. package/frontend/examples/theme/theme.ts +58 -0
  467. package/frontend/tools/bundle_d_ts.js +71 -0
  468. package/frontend/tools/convert_to_jsdoc_input.txt +9452 -0
  469. package/frontend/tools/convert_to_jsdoc_output.txt +7626 -0
  470. package/frontend/tools/convert_to_jsdoc_tmp.js +345 -0
  471. package/frontend/tools/scan_mixed_imports.js +69 -0
  472. package/package.json +1 -5
@@ -0,0 +1,113 @@
1
+ /**
2
+ * @author Daan van den Bergh
3
+ * @copyright © 2026 - 2026 Daan van den Bergh. All rights reserved
4
+ */
5
+ import Stripe from "stripe";
6
+ import { type InitializedOneTimeProduct, type InitializedProduct, type InitializedSubscriptionPlan, type InitializedMeterProduct, SubscriptionPlanId, ProductId } from "./products.js";
7
+ import { Server } from "../../server.js";
8
+ /**
9
+ * A checkout line item input accepted by our API.
10
+ */
11
+ export interface CreateCheckoutLineItem {
12
+ /** Product reference: initialized product/plan object OR an id string. */
13
+ product: InitializedOneTimeProduct | InitializedSubscriptionPlan | ProductId | SubscriptionPlanId;
14
+ /** Quantity to purchase/subscribe with. */
15
+ quantity: number;
16
+ }
17
+ /**
18
+ * Options for creating a Stripe Checkout Session.
19
+ */
20
+ export interface CreateCheckoutSessionOpts {
21
+ /**
22
+ * The internal user id, used to resolve/ensure Stripe customer.
23
+ * The `uid` may be undefined for one-time payment checkouts, but must be defined for subscription checkouts since a Stripe Customer is required. In that case, the user must be authenticated and not "anonymous".
24
+ */
25
+ uid: string | undefined;
26
+ /**
27
+ * A caller-provided idempotency key for initialize/start.
28
+ * Re-using the same session_id makes `start_checkout_session` idempotent across retries.
29
+ */
30
+ session_id: string;
31
+ /** Items to purchase/subscribe to. */
32
+ line_items: CreateCheckoutLineItem[];
33
+ /** All initialized products, used to resolve string ids to objects. */
34
+ all_products: InitializedProduct[];
35
+ /** Where Stripe should redirect after successful payment. */
36
+ success_url: string;
37
+ /** Where Stripe should redirect when the customer cancels. */
38
+ cancel_url: string;
39
+ /** Optional: require tax id collection (useful for B2B in EU). */
40
+ tax_id_collection_enabled?: boolean;
41
+ /** The allowed hosts for redirect URLs. */
42
+ allowed_hosts: undefined | string[];
43
+ }
44
+ /**
45
+ * A minimal response payload for a created Checkout Session.
46
+ */
47
+ export interface CreatedCheckoutSession {
48
+ /** The Stripe Checkout Session id. */
49
+ id: string;
50
+ /** The hosted Checkout URL (only for hosted sessions). */
51
+ url: string;
52
+ /** The Checkout mode used. */
53
+ mode: "payment" | "subscription";
54
+ /** Currency used for the session. */
55
+ currency: string;
56
+ }
57
+ /**
58
+ * Options for creating a metered Stripe Subscription (MeterProduct).
59
+ *
60
+ * This is intentionally separate from Checkout because Stripe Checkout is not always
61
+ * a good fit for usage-based billing flows where you want to subscribe a customer
62
+ * immediately and bill later based on meter events.
63
+ */
64
+ export interface CreateMeterSubscriptionOpts {
65
+ /** The internal user id, used to resolve/ensure Stripe customer. */
66
+ uid: string;
67
+ /**
68
+ * A caller-provided idempotency key.
69
+ * Re-using the same subscription_id makes `create_meter_subscription` idempotent across retries.
70
+ */
71
+ subscription_id: string;
72
+ /** The meter product reference: initialized object OR an id string. */
73
+ meter_product: InitializedMeterProduct | string;
74
+ /** All initialized products, used to resolve string ids to objects. */
75
+ all_products: InitializedProduct[];
76
+ }
77
+ /**
78
+ * A minimal response payload for a created metered subscription.
79
+ */
80
+ export interface CreatedMeterSubscription {
81
+ /** The Stripe Subscription id. */
82
+ id: string;
83
+ /**
84
+ * The Stripe Subscription status.
85
+ * Note: We only return "active" or "trialing" for success; "incomplete" can be returned when action is required.
86
+ */
87
+ status: Stripe.Subscription.Status;
88
+ /**
89
+ * When action is required, Stripe returns a PaymentIntent client_secret.
90
+ * This is safe to return to the client to complete SCA/3DS flows.
91
+ */
92
+ latest_invoice_payment_intent_client_secret?: string;
93
+ /** The subscribed meter product id (our internal product id). */
94
+ product_id: string;
95
+ /** The Stripe price id used by the subscription item. */
96
+ stripe_price_id: string;
97
+ }
98
+ /**
99
+ * Create a new session id to ensure idempotency for checkout session creation.
100
+ */
101
+ export declare function create_checkout_session_id(uid: string | undefined): string;
102
+ /**
103
+ * Start a Stripe Checkout Session for the provided items.
104
+ *
105
+ * Stripe docs:
106
+ * - Create session: https://docs.stripe.com/api/checkout/sessions/create
107
+ * - Mixed cart (subscription + one-time): https://docs.stripe.com/payments/checkout/how-checkout-works
108
+ * - Stripe Tax for Checkout: https://docs.stripe.com/tax/checkout
109
+ *
110
+ * @warning Only one subscription plan per checkout session is supported, due to later subscription cancellation restrictions.
111
+ * @warning If subscription mode is used, subscription-level settings (`billing_anchor`, `trial_days`) must be unambiguous.
112
+ */
113
+ export declare function start_checkout_session(client: Stripe, server: Server, opts: CreateCheckoutSessionOpts): Promise<CreatedCheckoutSession>;
@@ -0,0 +1,295 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var stdin_exports = {};
29
+ __export(stdin_exports, {
30
+ create_checkout_session_id: () => create_checkout_session_id,
31
+ start_checkout_session: () => start_checkout_session
32
+ });
33
+ module.exports = __toCommonJS(stdin_exports);
34
+ var vlib = __toESM(require("@vandenberghinc/vlib"));
35
+ var import_products = require("./products.js");
36
+ var import_customers = require("./customers.js");
37
+ var import_error = require("./error.js");
38
+ var import_utils = require("./utils.js");
39
+ var import_collection = require("../../database/collection.js");
40
+ var import_subscriptions = require("./subscriptions.js");
41
+ function resolve_checkout_item_product(opts) {
42
+ const { product_ref, all_products } = opts;
43
+ if (typeof product_ref !== "string") {
44
+ return product_ref;
45
+ }
46
+ (0, import_utils.public_assert)((0, import_utils.is_non_empty_string)(product_ref), "checkout_invalid_product_ref", "Invalid product reference.", { product_ref_type: typeof product_ref });
47
+ const ref_id = product_ref.trim();
48
+ for (const product of all_products) {
49
+ if (product.type === "one_time" && product.id === ref_id) {
50
+ return product;
51
+ }
52
+ }
53
+ const matching_plans = [];
54
+ for (const product of all_products) {
55
+ if (product.type !== "subscription") {
56
+ continue;
57
+ }
58
+ for (const plan2 of product.plans) {
59
+ if (plan2.id === ref_id) {
60
+ matching_plans.push(plan2);
61
+ }
62
+ }
63
+ if (product.id === ref_id) {
64
+ throw new import_error.ExternalStripeError("checkout_subscription_plan_ambiguous", "Subscription product id is ambiguous. Please specify a subscription plan id.", { ref_id });
65
+ }
66
+ }
67
+ (0, import_utils.public_assert)(matching_plans.length === 1, matching_plans.length === 0 ? "checkout_invalid_product_ref" : "checkout_subscription_plan_ambiguous", matching_plans.length === 0 ? "Unknown product reference." : "Ambiguous subscription plan reference. Plan id must be unique across products.", { ref_id, matches: matching_plans.length });
68
+ const plan = matching_plans[0];
69
+ (0, import_utils.assert)(plan !== void 0, "checkout_invalid_product_ref", "Missing plan after plan resolution.", { ref_id });
70
+ return plan;
71
+ }
72
+ function create_checkout_session_db(server) {
73
+ return server.db.collection({
74
+ name: "Volt.Stripe.CheckoutSessions",
75
+ indexes: [
76
+ {
77
+ keys: { session_id: 1 },
78
+ unique: true
79
+ },
80
+ {
81
+ keys: { uid: 1 },
82
+ unique: false
83
+ // since it might be undefined/anonymous
84
+ }
85
+ ],
86
+ ttl: {
87
+ milliseconds: 1e3 * 60 * 60 * 24,
88
+ // 24 hours
89
+ sliding: false
90
+ },
91
+ // Ensure its not unique so we retrieve the cached collection if already created.
92
+ unique: false
93
+ });
94
+ }
95
+ function assert_https_url(raw, field, allowed_hosts) {
96
+ (0, import_utils.public_assert)((0, import_utils.is_non_empty_string)(raw), "invalid_argument", `Property '${field}' must be provided.`);
97
+ let url;
98
+ try {
99
+ url = new URL(raw);
100
+ } catch {
101
+ throw new import_error.ExternalStripeError("invalid_argument", `Property '${field}' must be a valid absolute URL.`, { field });
102
+ }
103
+ (0, import_utils.public_assert)(url.protocol === "https:", "invalid_argument", `Property '${field}' must use https.`, { field });
104
+ (0, import_utils.public_assert)(allowed_hosts === void 0 || allowed_hosts.includes(url.host), "invalid_argument", `Property '${field}' must use an allowed host.`, { field, host: url.host });
105
+ }
106
+ function create_checkout_session_id(uid) {
107
+ return (0, import_utils.generate_random_idempotency_key)(`checkout_${uid ?? "anonymous"}`, 255);
108
+ }
109
+ async function start_checkout_session(client, server, opts) {
110
+ (0, import_utils.public_assert)((0, import_utils.is_non_empty_string)(opts.session_id), "invalid_argument", "Property 'session_id' must be a non-empty string when provided.");
111
+ (0, import_utils.public_assert)(Array.isArray(opts.line_items) && opts.line_items.length > 0, "invalid_argument", "Property 'line_items' must be a non-empty array.");
112
+ (0, import_utils.public_assert)(opts.line_items.length <= 50, "invalid_argument", "Too many line items.", { count: opts.line_items.length });
113
+ (0, import_utils.assert)(Array.isArray(opts.all_products), "invalid_argument", "Property 'all_products' must be an array.");
114
+ assert_https_url(opts.success_url, "success_url", opts.allowed_hosts);
115
+ assert_https_url(opts.cancel_url, "cancel_url", opts.allowed_hosts);
116
+ const resolved_items = opts.line_items.map((item, index) => {
117
+ (0, import_utils.public_assert)(Number.isInteger(item.quantity) && item.quantity >= 1, "checkout_invalid_quantity", "Quantity must be an integer >= 1.", { index, quantity: item.quantity });
118
+ const resolved_product = resolve_checkout_item_product({
119
+ product_ref: item.product,
120
+ all_products: opts.all_products
121
+ });
122
+ if (resolved_product.type === "one_time" && resolved_product.quantity_rules) {
123
+ if (resolved_product.quantity_rules.min !== void 0) {
124
+ (0, import_utils.public_assert)(item.quantity >= resolved_product.quantity_rules.min, "checkout_invalid_quantity", "Quantity is below the minimum allowed.", { product_id: resolved_product.id, quantity: item.quantity, min: resolved_product.quantity_rules.min });
125
+ }
126
+ if (resolved_product.quantity_rules.max !== void 0) {
127
+ (0, import_utils.public_assert)(item.quantity <= resolved_product.quantity_rules.max, "checkout_invalid_quantity", "Quantity is above the maximum allowed.", { product_id: resolved_product.id, quantity: item.quantity, max: resolved_product.quantity_rules.max });
128
+ }
129
+ }
130
+ if (resolved_product.type === "subscription_plan") {
131
+ (0, import_utils.public_assert)(item.quantity === 1, "checkout_invalid_quantity", "Quantity must be 1 for subscription plans.", { plan_id: resolved_product.id, quantity: item.quantity });
132
+ }
133
+ return {
134
+ product: resolved_product,
135
+ quantity: item.quantity
136
+ };
137
+ });
138
+ let subscription_plan_count = 0;
139
+ let selected_plan_id;
140
+ let selected_subscription_id;
141
+ for (const item of resolved_items) {
142
+ if (item.product.type !== "subscription_plan") {
143
+ continue;
144
+ }
145
+ subscription_plan_count += 1;
146
+ selected_plan_id = item.product.id;
147
+ selected_subscription_id = item.product.subscription_id;
148
+ (0, import_utils.public_assert)(subscription_plan_count === 1, "checkout_subscription_plan_ambiguous", "Only one subscription plan can be purchased per checkout session.", {
149
+ selected_plan_id,
150
+ selected_subscription_id,
151
+ subscription_plan_count
152
+ });
153
+ (0, import_utils.public_assert)(opts.uid != null && opts.uid !== "anonymous", "invalid_uid", "You must be authenticated to purchase a subscription, sign in or sign up and try again.", { uid: opts.uid });
154
+ const is_already_subscribed = await (0, import_subscriptions.is_user_subscribed_to)(client, server, {
155
+ uid: opts.uid,
156
+ plan: item.product,
157
+ all_products: opts.all_products,
158
+ customer_id: void 0
159
+ });
160
+ (0, import_utils.public_assert)(!is_already_subscribed, "checkout_already_subscribed", "You are already subscribed to this plan.", { uid: opts.uid, plan_id: item.product.id, subscription_id: item.product.subscription_id });
161
+ }
162
+ const has_subscription_item = resolved_items.some((item) => item.product.type === "subscription_plan");
163
+ const mode = has_subscription_item ? "subscription" : "payment";
164
+ const currencies = /* @__PURE__ */ new Set();
165
+ for (const item of resolved_items) {
166
+ if (item.product.type === "subscription_plan") {
167
+ const parent_subscription = (0, import_products.resolve_plan_to_parent_subscription)({
168
+ plan: item.product,
169
+ all_products: opts.all_products
170
+ });
171
+ currencies.add(parent_subscription.currency);
172
+ } else {
173
+ currencies.add(item.product.currency);
174
+ }
175
+ }
176
+ (0, import_utils.public_assert)(currencies.size === 1, "checkout_mixed_currency", "All checkout items must use the same currency.", { currencies: Array.from(currencies.values()) });
177
+ const currency = Array.from(currencies.values())[0];
178
+ (0, import_utils.assert)(currency !== void 0, "checkout_mixed_currency", "Missing currency after currency validation.");
179
+ let stripe_customer_id;
180
+ if (mode === "subscription" || opts.uid) {
181
+ (0, import_utils.public_assert)(opts.uid != null && opts.uid !== "anonymous", "invalid_uid", "You must be authenticated to purchase a subscription, sign in or sign up and try again.", { uid: opts.uid });
182
+ (0, import_utils.public_assert)((0, import_utils.is_non_empty_string)(opts.uid), "invalid_argument", "Property 'uid' must be a non-empty string.");
183
+ stripe_customer_id = await (0, import_customers.ensure_stripe_customer)(client, server, opts.uid);
184
+ }
185
+ const stripe_line_items = resolved_items.map((item) => {
186
+ (0, import_utils.public_assert)((0, import_utils.is_non_empty_string)(item.product.stripe_price_id), "invalid_product", "Product is missing a Stripe price id.", { product_id: item.product.id, type: item.product.type });
187
+ return {
188
+ price: item.product.stripe_price_id,
189
+ quantity: item.quantity
190
+ };
191
+ });
192
+ let subscription_data;
193
+ if (mode === "subscription") {
194
+ const trial_days_values = /* @__PURE__ */ new Set();
195
+ const billing_anchor_values = /* @__PURE__ */ new Set();
196
+ for (const item of resolved_items) {
197
+ if (item.product.type !== "subscription_plan") {
198
+ continue;
199
+ }
200
+ const parent_subscription = (0, import_products.resolve_plan_to_parent_subscription)({
201
+ plan: item.product,
202
+ all_products: opts.all_products
203
+ });
204
+ if (parent_subscription.trial_days !== void 0) {
205
+ trial_days_values.add(parent_subscription.trial_days);
206
+ }
207
+ const anchor = parent_subscription.billing_anchor ?? "immediately";
208
+ billing_anchor_values.add(anchor);
209
+ }
210
+ (0, import_utils.public_assert)(trial_days_values.size <= 1, "invalid_product", "Conflicting 'trial_days' across subscription products in the same checkout.", { trial_days_values: Array.from(trial_days_values.values()) });
211
+ (0, import_utils.public_assert)(billing_anchor_values.size <= 1, "invalid_product", "Conflicting 'billing_anchor' across subscription products in the same checkout.", { billing_anchor_values: Array.from(billing_anchor_values.values()) });
212
+ const trial_days = Array.from(trial_days_values.values())[0];
213
+ const billing_anchor = Array.from(billing_anchor_values.values())[0] ?? "immediately";
214
+ subscription_data = {};
215
+ if (trial_days !== void 0) {
216
+ subscription_data.trial_period_days = trial_days;
217
+ }
218
+ if (billing_anchor === "first_of_month") {
219
+ const now = /* @__PURE__ */ new Date();
220
+ const trial_end_reference = trial_days !== void 0 ? (0, import_utils.add_days_utc)(now, trial_days) : now;
221
+ const anchor_date = (0, import_utils.first_day_of_next_month_utc)(trial_end_reference);
222
+ subscription_data.billing_cycle_anchor = (0, import_utils.to_unix_seconds)(anchor_date);
223
+ subscription_data.proration_behavior = "none";
224
+ } else if (billing_anchor === "immediately") {
225
+ } else {
226
+ throw new import_error.InternalStripeError("invalid_product", "Unsupported billing_anchor value.", { billing_anchor });
227
+ }
228
+ if (opts.uid) {
229
+ subscription_data.metadata = {
230
+ __volt_uid: opts.uid
231
+ };
232
+ }
233
+ }
234
+ const create_params = {
235
+ // Docs: https://docs.stripe.com/api/checkout/sessions/create
236
+ mode,
237
+ ...stripe_customer_id ? { customer: stripe_customer_id } : {},
238
+ success_url: opts.success_url,
239
+ cancel_url: opts.cancel_url,
240
+ line_items: stripe_line_items,
241
+ customer_update: {
242
+ address: "auto",
243
+ name: "auto",
244
+ shipping: "auto"
245
+ },
246
+ // Stripe Tax: collect address automatically for tax calculation.
247
+ // Docs: https://docs.stripe.com/tax/checkout
248
+ automatic_tax: { enabled: true },
249
+ // Optional: tax id collection is helpful for B2B scenarios (e.g. VAT).
250
+ ...opts.tax_id_collection_enabled === true ? { tax_id_collection: { enabled: true } } : {},
251
+ // Attach safe session metadata (not secrets).
252
+ metadata: {
253
+ ...opts.uid ? { __volt_uid: opts.uid } : {},
254
+ __volt_mode: mode
255
+ },
256
+ // Include subscription configuration only in subscription mode.
257
+ ...subscription_data ? { subscription_data } : {}
258
+ };
259
+ const checkout_session_db = create_checkout_session_db(server);
260
+ const loaded_session = await checkout_session_db.load({ session_id: opts.session_id }, { throw: false, retry: 3 });
261
+ let pinned_session;
262
+ if (loaded_session instanceof import_collection.Collection.NotFoundError) {
263
+ const record = {
264
+ uid: opts.uid,
265
+ session_id: opts.session_id,
266
+ currency,
267
+ create_params
268
+ };
269
+ await checkout_session_db.set({ session_id: opts.session_id }, record, { throw: true, retry: 3 });
270
+ pinned_session = record;
271
+ } else if (loaded_session instanceof Error) {
272
+ throw new import_error.InternalStripeError("checkout_create_error", "Failed to access checkout session record.", { uid: opts.uid, session_id: opts.session_id }, loaded_session);
273
+ } else {
274
+ if (loaded_session.currency !== currency || !vlib.Object.deep_eq(loaded_session.create_params, create_params)) {
275
+ throw new import_error.ExternalStripeError("checkout_create_error", "A checkout session with the same session_id already exists with different parameters. Please use a unique session_id for each distinct checkout session.", { uid: opts.uid, session_id: opts.session_id });
276
+ }
277
+ pinned_session = loaded_session;
278
+ }
279
+ const session = await (0, import_utils.stripe_api_call)(() => client.checkout.sessions.create(pinned_session.create_params, {
280
+ idempotencyKey: (0, import_utils.stable_idempotency_key)(`checkout.sessions.create:${pinned_session.session_id}`, 255)
281
+ }), { operation: "checkout.sessions.create" });
282
+ (0, import_utils.public_assert)((0, import_utils.is_non_empty_string)(session.url), "checkout_create_error", "Stripe did not return a checkout URL.", { session_id: session.id, mode: session.mode });
283
+ const session_mode = session.mode === "subscription" ? "subscription" : "payment";
284
+ return {
285
+ id: session.id,
286
+ url: session.url,
287
+ mode: session_mode,
288
+ currency: pinned_session.currency
289
+ };
290
+ }
291
+ // Annotate the CommonJS export names for ESM import in node:
292
+ 0 && (module.exports = {
293
+ create_checkout_session_id,
294
+ start_checkout_session
295
+ });
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @author Daan van den Bergh
3
+ * @copyright © 2026 - 2026 Daan van den Bergh. All rights reserved
4
+ */
5
+ import Stripe from "stripe";
6
+ import { Server } from "../../server.js";
7
+ /**
8
+ * Ensure a Stripe customer exists for the given `uid`.
9
+ * @returns The Stripe customer ID. If a customer already exists for the `uid`, it is returned. Otherwise, a new customer is created and its ID is returned.
10
+ */
11
+ export declare function ensure_stripe_customer(client: Stripe, server: Server, uid: string): Promise<string>;
12
+ /**
13
+ * Delete a Stripe customer by their `uid`.
14
+ * This operation is best-effort and idempotent: if no Stripe customer exists for the `uid`, it returns without error.
15
+ * @see https://docs.stripe.com/api/customers/delete
16
+ */
17
+ export declare function delete_stripe_customer(client: Stripe, server: Server, uid: string): Promise<void>;
@@ -0,0 +1,164 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var stdin_exports = {};
29
+ __export(stdin_exports, {
30
+ delete_stripe_customer: () => delete_stripe_customer,
31
+ ensure_stripe_customer: () => ensure_stripe_customer
32
+ });
33
+ module.exports = __toCommonJS(stdin_exports);
34
+ var vlib = __toESM(require("@vandenberghinc/vlib"));
35
+ var import_error = require("./error.js");
36
+ var import_utils = require("./utils.js");
37
+ var import_collection = require("../../database/collection.js");
38
+ const stripe_customer_cache = new vlib.Cache({
39
+ max_size: 1e5,
40
+ ttl: {
41
+ sliding: false,
42
+ duration: 60 * 60 * 1e3
43
+ // 1 hour
44
+ }
45
+ });
46
+ const stripe_customer_uid_metadata_key = "__volt_uid";
47
+ function escape_stripe_search_value(value) {
48
+ return value.replaceAll("\\", "\\\\").replaceAll("'", "\\'");
49
+ }
50
+ function assert_uid(uid) {
51
+ if (typeof uid !== "string" || uid.length < 16 || uid.length > 128) {
52
+ throw new import_error.InternalStripeError("invalid_uid", "Invalid uid for Stripe customer mapping.", { uid_length: typeof uid === "string" ? uid.length : null });
53
+ }
54
+ if (/[\u0000-\u001F\u007F]/.test(uid)) {
55
+ throw new import_error.InternalStripeError("invalid_uid", "uid contains control characters.", {});
56
+ }
57
+ }
58
+ function create_customer_db(server) {
59
+ return server.db.collection({
60
+ name: "Volt.Stripe.Customers",
61
+ indexes: [
62
+ {
63
+ keys: { customer_id: 1 },
64
+ unique: true
65
+ },
66
+ {
67
+ keys: { uid: 1 },
68
+ unique: true
69
+ }
70
+ ],
71
+ // Ensure its not unique so we retrieve the cached collection if already created.
72
+ unique: false
73
+ });
74
+ }
75
+ async function find_stripe_customer_id(client, uid) {
76
+ assert_uid(uid);
77
+ const escaped_uid = escape_stripe_search_value(uid);
78
+ const query = `metadata['${stripe_customer_uid_metadata_key}']:'${escaped_uid}'`;
79
+ const search_result = await (0, import_utils.stripe_api_call)(() => client.customers.search({
80
+ query,
81
+ limit: 1
82
+ }), { uid, query });
83
+ const customer = search_result.data[0];
84
+ if (!customer) {
85
+ return null;
86
+ }
87
+ return customer.id;
88
+ }
89
+ async function ensure_stripe_customer(client, server, uid) {
90
+ assert_uid(uid);
91
+ const cached_customer_id = stripe_customer_cache.get(uid);
92
+ if (cached_customer_id) {
93
+ return cached_customer_id;
94
+ }
95
+ const db = create_customer_db(server);
96
+ let customer_id;
97
+ const record = await db.load({ uid }, {
98
+ throw: false,
99
+ projection: { customer_id: 1 },
100
+ retry: 3
101
+ });
102
+ if (!(record instanceof Error)) {
103
+ customer_id = record.customer_id;
104
+ } else if (record instanceof import_collection.Collection.NotFoundError) {
105
+ const existing_customer_id = await find_stripe_customer_id(client, uid);
106
+ if (existing_customer_id) {
107
+ customer_id = existing_customer_id;
108
+ } else {
109
+ const created_customer = await (0, import_utils.stripe_api_call)(() => client.customers.create({
110
+ metadata: {
111
+ [stripe_customer_uid_metadata_key]: uid
112
+ }
113
+ }, {
114
+ // Prevent duplicates across concurrent calls / processes.
115
+ idempotencyKey: (0, import_utils.stable_idempotency_key)(`customer_create_uid:${uid}`)
116
+ }), { uid, metadata_key: stripe_customer_uid_metadata_key });
117
+ customer_id = created_customer.id;
118
+ }
119
+ await db.set({ uid }, { customer_id }, {
120
+ upsert: true,
121
+ retry: 3
122
+ });
123
+ const final_record = await db.load({ uid }, {
124
+ throw: false,
125
+ projection: { customer_id: 1 },
126
+ retry: 3
127
+ });
128
+ if (final_record instanceof Error) {
129
+ throw new import_error.InternalStripeError("customer_not_found", "Failed to load Stripe customer from database after creation.", { uid, cause: final_record });
130
+ }
131
+ customer_id = final_record.customer_id;
132
+ } else {
133
+ throw new import_error.InternalStripeError("customer_not_found", "Failed to load Stripe customer from database.", { uid, cause: record });
134
+ }
135
+ stripe_customer_cache.set(uid, customer_id);
136
+ return customer_id;
137
+ }
138
+ async function delete_stripe_customer(client, server, uid) {
139
+ assert_uid(uid);
140
+ stripe_customer_cache.delete(uid);
141
+ const db = create_customer_db(server);
142
+ const record = await db.load({ uid }, {
143
+ throw: false,
144
+ projection: { customer_id: 1 }
145
+ });
146
+ if (record instanceof import_collection.Collection.NotFoundError) {
147
+ return;
148
+ } else if (record instanceof Error) {
149
+ throw new import_error.InternalStripeError("customer_not_found", "Failed to load Stripe customer from database.", { uid, cause: record });
150
+ }
151
+ if (!record.customer_id) {
152
+ return;
153
+ }
154
+ const deleted_customer = await (0, import_utils.stripe_api_call)(() => client.customers.del(record.customer_id), { uid, customer_id: record.customer_id });
155
+ if (deleted_customer.deleted !== true) {
156
+ throw new import_error.InternalStripeError("customer_delete_error", "Stripe customer delete did not return a deleted confirmation.", { uid, customer_id: record.customer_id });
157
+ }
158
+ await db.delete({ uid });
159
+ }
160
+ // Annotate the CommonJS export names for ESM import in node:
161
+ 0 && (module.exports = {
162
+ delete_stripe_customer,
163
+ ensure_stripe_customer
164
+ });
@@ -0,0 +1,74 @@
1
+ /**
2
+ * @author Daan van den Bergh
3
+ * @copyright © 2026 - 2026 Daan van den Bergh. All rights reserved
4
+ */
5
+ import { ExternalError, InternalError } from "../../errors/internal_external.js";
6
+ /** The available stripe error code. */
7
+ export type StripeErrorCode = (
8
+ /** An error code indicating an invalid uid for Stripe customer mapping. */
9
+ "invalid_uid"
10
+ /** An error code indicating a failure to delete a Stripe customer. */
11
+ | "customer_delete_error"
12
+ /** An error code indicating a Stripe customer was not found. */
13
+ | "customer_not_found"
14
+ /** Invalid argument error code. */
15
+ | "invalid_argument"
16
+ /** Error code for an invalid product. */
17
+ | "invalid_product"
18
+ /** An error code indicating a generic Stripe API failure. */
19
+ | "api_error"
20
+ /** An error code indicating a failure during checkout session creation. */
21
+ | "checkout_create_error"
22
+ /** An error code indicating an invalid product reference during checkout session creation. */
23
+ | "checkout_invalid_product_ref"
24
+ /** An error code indicating a mixed currency error during checkout session creation. */
25
+ | "checkout_mixed_currency"
26
+ /** An error code indicating an ambiguous subscription plan reference during checkout session creation. */
27
+ | "checkout_subscription_plan_ambiguous"
28
+ /** An error code indicating an invalid quantity during checkout session creation. */
29
+ | "checkout_invalid_quantity"
30
+ /** An error code indicating the user is already subscribed to the plan. */
31
+ | "checkout_already_subscribed"
32
+ /** An error code indicating a subscription is not active and can not be billed. */
33
+ | "subscription_not_active"
34
+ /** An error code indicating a failure during subscription creation. */
35
+ | "subscription_create_error"
36
+ /** An error code indicating a subscription payment action is required. */
37
+ | "subscription_payment_action_required"
38
+ /** An error code indicating a missing payment method. */
39
+ | "payment_method_missing"
40
+ /** An error code indicating a subscription resolution error */
41
+ | "subscription_resolution_error"
42
+ /** An error code indicating a missing webhook endpoint secret. */
43
+ | "webhook_endpoint_secret_missing"
44
+ /** An error code indicating a failure to load webhook endpoint configuration. */
45
+ | "webhook_endpoint_load_error"
46
+ /** An error code indicating a mismatch between the webhook event's app id and the expected app id. */
47
+ | "webhook_endpoint_app_id_mismatch");
48
+ /**
49
+ * Custom error class to attach safe context while preserving the original cause.
50
+ * Internal errors thrown in REST API calls will be presented to the user as
51
+ * a generic internal server errog. Therefore the code, message and context
52
+ * are never shown to the user.
53
+ */
54
+ export declare class InternalStripeError extends InternalError {
55
+ /** Stable error code for programmatic handling (never include secrets). */
56
+ readonly error_code: StripeErrorCode;
57
+ /** Optional safe context for debugging (never include secrets). */
58
+ readonly context?: Record<string, unknown>;
59
+ /** Constructs a StripeWrapperError. */
60
+ constructor(code: StripeErrorCode, message: string, context?: Record<string, unknown>, cause?: unknown);
61
+ }
62
+ /**
63
+ * Custom error class to attach safe context while preserving the original cause.
64
+ * External errors thrown in REST API calls will be presented to the user with the message and code,
65
+ * but context is never shown to the user.
66
+ */
67
+ export declare class ExternalStripeError extends ExternalError {
68
+ /** Stable error code for programmatic handling (never include secrets). */
69
+ readonly error_code: StripeErrorCode;
70
+ /** Optional safe context for debugging (never include secrets). */
71
+ readonly context?: Record<string, unknown>;
72
+ /** Constructs a StripeWrapperError. */
73
+ constructor(code: StripeErrorCode, message: string, context?: Record<string, unknown>, cause?: unknown);
74
+ }