@stackframe/stack-shared 2.8.8 → 2.8.11

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 (476) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/config/format.d.cts +39 -0
  3. package/dist/config/format.d.ts +14 -13
  4. package/dist/config/format.js +147 -206
  5. package/dist/config/format.js.map +1 -0
  6. package/dist/config/schema.d.cts +729 -0
  7. package/dist/config/schema.d.ts +59 -51
  8. package/dist/config/schema.js +232 -172
  9. package/dist/config/schema.js.map +1 -0
  10. package/dist/crud.d.cts +102 -0
  11. package/dist/crud.d.ts +15 -13
  12. package/dist/crud.js +83 -128
  13. package/dist/crud.js.map +1 -0
  14. package/dist/esm/config/format.js +135 -0
  15. package/dist/esm/config/format.js.map +1 -0
  16. package/dist/esm/config/schema.js +201 -0
  17. package/dist/esm/config/schema.js.map +1 -0
  18. package/dist/esm/crud.js +60 -0
  19. package/dist/esm/crud.js.map +1 -0
  20. package/dist/esm/global.d.js +1 -0
  21. package/dist/esm/global.d.js.map +1 -0
  22. package/dist/esm/helpers/password.js +17 -0
  23. package/dist/esm/helpers/password.js.map +1 -0
  24. package/dist/esm/helpers/production-mode.js +50 -0
  25. package/dist/esm/helpers/production-mode.js.map +1 -0
  26. package/dist/esm/hooks/use-async-callback.js +38 -0
  27. package/dist/esm/hooks/use-async-callback.js.map +1 -0
  28. package/dist/esm/hooks/use-async-external-store.js +23 -0
  29. package/dist/esm/hooks/use-async-external-store.js.map +1 -0
  30. package/dist/esm/hooks/use-hash.js +17 -0
  31. package/dist/esm/hooks/use-hash.js.map +1 -0
  32. package/dist/esm/hooks/use-strict-memo.js +61 -0
  33. package/dist/esm/hooks/use-strict-memo.js.map +1 -0
  34. package/dist/esm/index.js +22 -0
  35. package/dist/esm/index.js.map +1 -0
  36. package/dist/esm/interface/adminInterface.js +244 -0
  37. package/dist/esm/interface/adminInterface.js.map +1 -0
  38. package/dist/esm/interface/clientInterface.js +2041 -0
  39. package/dist/esm/interface/clientInterface.js.map +1 -0
  40. package/dist/esm/interface/crud/contact-channels.js +77 -0
  41. package/dist/esm/interface/crud/contact-channels.js.map +1 -0
  42. package/dist/esm/interface/crud/current-user.js +65 -0
  43. package/dist/esm/interface/crud/current-user.js.map +1 -0
  44. package/dist/esm/interface/crud/email-templates.js +52 -0
  45. package/dist/esm/interface/crud/email-templates.js.map +1 -0
  46. package/dist/esm/interface/crud/emails.js +20 -0
  47. package/dist/esm/interface/crud/emails.js.map +1 -0
  48. package/dist/esm/interface/crud/internal-api-keys.js +69 -0
  49. package/dist/esm/interface/crud/internal-api-keys.js.map +1 -0
  50. package/dist/esm/interface/crud/oauth.js +24 -0
  51. package/dist/esm/interface/crud/oauth.js.map +1 -0
  52. package/dist/esm/interface/crud/project-api-keys.js +93 -0
  53. package/dist/esm/interface/crud/project-api-keys.js.map +1 -0
  54. package/dist/esm/interface/crud/project-permissions.js +113 -0
  55. package/dist/esm/interface/crud/project-permissions.js.map +1 -0
  56. package/dist/esm/interface/crud/projects.js +180 -0
  57. package/dist/esm/interface/crud/projects.js.map +1 -0
  58. package/dist/esm/interface/crud/sessions.js +62 -0
  59. package/dist/esm/interface/crud/sessions.js.map +1 -0
  60. package/dist/esm/interface/crud/svix-token.js +22 -0
  61. package/dist/esm/interface/crud/svix-token.js.map +1 -0
  62. package/dist/esm/interface/crud/team-invitation-details.js +23 -0
  63. package/dist/esm/interface/crud/team-invitation-details.js.map +1 -0
  64. package/dist/esm/interface/crud/team-invitation.js +36 -0
  65. package/dist/esm/interface/crud/team-invitation.js.map +1 -0
  66. package/dist/esm/interface/crud/team-member-profiles.js +62 -0
  67. package/dist/esm/interface/crud/team-member-profiles.js.map +1 -0
  68. package/dist/esm/interface/crud/team-memberships.js +60 -0
  69. package/dist/esm/interface/crud/team-memberships.js.map +1 -0
  70. package/dist/esm/interface/crud/team-permissions.js +114 -0
  71. package/dist/esm/interface/crud/team-permissions.js.map +1 -0
  72. package/dist/esm/interface/crud/teams.js +143 -0
  73. package/dist/esm/interface/crud/teams.js.map +1 -0
  74. package/dist/esm/interface/crud/users.js +139 -0
  75. package/dist/esm/interface/crud/users.js.map +1 -0
  76. package/dist/esm/interface/serverInterface.js +485 -0
  77. package/dist/esm/interface/serverInterface.js.map +1 -0
  78. package/dist/esm/interface/webhooks.js +21 -0
  79. package/dist/esm/interface/webhooks.js.map +1 -0
  80. package/dist/esm/known-errors.js +1238 -0
  81. package/dist/esm/known-errors.js.map +1 -0
  82. package/dist/esm/schema-fields.js +484 -0
  83. package/dist/esm/schema-fields.js.map +1 -0
  84. package/dist/esm/sessions.js +168 -0
  85. package/dist/esm/sessions.js.map +1 -0
  86. package/dist/esm/utils/api-keys.js +79 -0
  87. package/dist/esm/utils/api-keys.js.map +1 -0
  88. package/dist/esm/utils/arrays.js +78 -0
  89. package/dist/esm/utils/arrays.js.map +1 -0
  90. package/dist/esm/utils/base64.js +18 -0
  91. package/dist/esm/utils/base64.js.map +1 -0
  92. package/dist/esm/utils/booleans.js +12 -0
  93. package/dist/esm/utils/booleans.js.map +1 -0
  94. package/dist/esm/utils/browser-compat.js +21 -0
  95. package/dist/esm/utils/browser-compat.js.map +1 -0
  96. package/dist/esm/utils/bytes.js +160 -0
  97. package/dist/esm/utils/bytes.js.map +1 -0
  98. package/dist/esm/utils/caches.js +167 -0
  99. package/dist/esm/utils/caches.js.map +1 -0
  100. package/dist/esm/utils/compile-time.js +11 -0
  101. package/dist/esm/utils/compile-time.js.map +1 -0
  102. package/dist/esm/utils/crypto.js +25 -0
  103. package/dist/esm/utils/crypto.js.map +1 -0
  104. package/dist/esm/utils/dates.js +64 -0
  105. package/dist/esm/utils/dates.js.map +1 -0
  106. package/dist/esm/utils/dom.js +11 -0
  107. package/dist/esm/utils/dom.js.map +1 -0
  108. package/dist/esm/utils/env.js +58 -0
  109. package/dist/esm/utils/env.js.map +1 -0
  110. package/dist/esm/utils/errors.js +174 -0
  111. package/dist/esm/utils/errors.js.map +1 -0
  112. package/dist/esm/utils/fs.js +37 -0
  113. package/dist/esm/utils/fs.js.map +1 -0
  114. package/dist/esm/utils/functions.js +12 -0
  115. package/dist/esm/utils/functions.js.map +1 -0
  116. package/dist/esm/utils/geo.js +15 -0
  117. package/dist/esm/utils/geo.js.map +1 -0
  118. package/dist/esm/utils/globals.js +18 -0
  119. package/dist/esm/utils/globals.js.map +1 -0
  120. package/dist/esm/utils/hashes.js +55 -0
  121. package/dist/esm/utils/hashes.js.map +1 -0
  122. package/dist/esm/utils/html.js +13 -0
  123. package/dist/esm/utils/html.js.map +1 -0
  124. package/dist/esm/utils/http.js +60 -0
  125. package/dist/esm/utils/http.js.map +1 -0
  126. package/dist/esm/utils/ips.js +15 -0
  127. package/dist/esm/utils/ips.js.map +1 -0
  128. package/dist/esm/utils/json.js +31 -0
  129. package/dist/esm/utils/json.js.map +1 -0
  130. package/dist/esm/utils/jwt.js +87 -0
  131. package/dist/esm/utils/jwt.js.map +1 -0
  132. package/dist/esm/utils/locks.js +57 -0
  133. package/dist/esm/utils/locks.js.map +1 -0
  134. package/dist/esm/utils/maps.js +181 -0
  135. package/dist/esm/utils/maps.js.map +1 -0
  136. package/dist/esm/utils/math.js +8 -0
  137. package/dist/esm/utils/math.js.map +1 -0
  138. package/dist/esm/utils/node-http.js +42 -0
  139. package/dist/esm/utils/node-http.js.map +1 -0
  140. package/dist/esm/utils/numbers.js +32 -0
  141. package/dist/esm/utils/numbers.js.map +1 -0
  142. package/dist/esm/utils/oauth.js +10 -0
  143. package/dist/esm/utils/oauth.js.map +1 -0
  144. package/dist/esm/utils/objects.js +177 -0
  145. package/dist/esm/utils/objects.js.map +1 -0
  146. package/dist/esm/utils/passkey.js +1 -0
  147. package/dist/esm/utils/passkey.js.map +1 -0
  148. package/dist/esm/utils/promises.js +233 -0
  149. package/dist/esm/utils/promises.js.map +1 -0
  150. package/dist/esm/utils/proxies.js +128 -0
  151. package/dist/esm/utils/proxies.js.map +1 -0
  152. package/dist/esm/utils/react.js +78 -0
  153. package/dist/esm/utils/react.js.map +1 -0
  154. package/dist/esm/utils/results.js +141 -0
  155. package/dist/esm/utils/results.js.map +1 -0
  156. package/dist/esm/utils/sentry.js +20 -0
  157. package/dist/esm/utils/sentry.js.map +1 -0
  158. package/dist/esm/utils/stores.js +195 -0
  159. package/dist/esm/utils/stores.js.map +1 -0
  160. package/dist/esm/utils/strings.js +295 -0
  161. package/dist/esm/utils/strings.js.map +1 -0
  162. package/dist/esm/utils/strings.nicify.test.js +222 -0
  163. package/dist/esm/utils/strings.nicify.test.js.map +1 -0
  164. package/dist/esm/utils/types.js +1 -0
  165. package/dist/esm/utils/types.js.map +1 -0
  166. package/dist/esm/utils/unicode.js +11 -0
  167. package/dist/esm/utils/unicode.js.map +1 -0
  168. package/dist/esm/utils/urls.js +53 -0
  169. package/dist/esm/utils/urls.js.map +1 -0
  170. package/dist/esm/utils/uuids.js +16 -0
  171. package/dist/esm/utils/uuids.js.map +1 -0
  172. package/dist/global.d.d.cts +1 -0
  173. package/dist/global.d.d.ts +1 -0
  174. package/dist/global.d.js +2 -0
  175. package/dist/global.d.js.map +1 -0
  176. package/dist/helpers/password.d.cts +11 -0
  177. package/dist/helpers/password.d.ts +11 -2
  178. package/dist/helpers/password.js +41 -11
  179. package/dist/helpers/password.js.map +1 -0
  180. package/dist/helpers/production-mode.d.cts +12 -0
  181. package/dist/helpers/production-mode.d.ts +9 -3
  182. package/dist/helpers/production-mode.js +72 -45
  183. package/dist/helpers/production-mode.js.map +1 -0
  184. package/dist/hooks/use-async-callback.d.cts +6 -0
  185. package/dist/hooks/use-async-callback.d.ts +6 -3
  186. package/dist/hooks/use-async-callback.js +72 -30
  187. package/dist/hooks/use-async-callback.js.map +1 -0
  188. package/dist/hooks/use-async-external-store.d.cts +7 -0
  189. package/dist/hooks/use-async-external-store.d.ts +5 -2
  190. package/dist/hooks/use-async-external-store.js +47 -19
  191. package/dist/hooks/use-async-external-store.js.map +1 -0
  192. package/dist/hooks/use-hash.d.cts +3 -0
  193. package/dist/hooks/use-hash.d.ts +3 -1
  194. package/dist/hooks/use-hash.js +41 -8
  195. package/dist/hooks/use-hash.js.map +1 -0
  196. package/dist/hooks/use-strict-memo.d.cts +8 -0
  197. package/dist/hooks/use-strict-memo.d.ts +3 -1
  198. package/dist/hooks/use-strict-memo.js +78 -131
  199. package/dist/hooks/use-strict-memo.js.map +1 -0
  200. package/dist/index.d.cts +30 -0
  201. package/dist/index.d.ts +30 -4
  202. package/dist/index.js +42 -4
  203. package/dist/index.js.map +1 -0
  204. package/dist/interface/adminInterface.d.cts +94 -0
  205. package/dist/interface/adminInterface.d.ts +38 -15
  206. package/dist/interface/adminInterface.js +269 -174
  207. package/dist/interface/adminInterface.js.map +1 -0
  208. package/dist/interface/clientInterface.d.cts +260 -0
  209. package/dist/interface/clientInterface.d.ts +25 -18
  210. package/dist/interface/clientInterface.js +2054 -995
  211. package/dist/interface/clientInterface.js.map +1 -0
  212. package/dist/interface/crud/contact-channels.d.cts +180 -0
  213. package/dist/interface/crud/contact-channels.d.ts +30 -25
  214. package/dist/interface/crud/contact-channels.js +101 -59
  215. package/dist/interface/crud/contact-channels.js.map +1 -0
  216. package/dist/interface/crud/current-user.d.cts +205 -0
  217. package/dist/interface/crud/current-user.d.ts +17 -12
  218. package/dist/interface/crud/current-user.js +86 -56
  219. package/dist/interface/crud/current-user.js.map +1 -0
  220. package/dist/interface/crud/email-templates.d.cts +84 -0
  221. package/dist/interface/crud/email-templates.d.ts +24 -19
  222. package/dist/interface/crud/email-templates.js +77 -37
  223. package/dist/interface/crud/email-templates.js.map +1 -0
  224. package/dist/interface/crud/emails.d.cts +69 -0
  225. package/dist/interface/crud/emails.d.ts +12 -7
  226. package/dist/interface/crud/emails.js +54 -12
  227. package/dist/interface/crud/emails.js.map +1 -0
  228. package/dist/interface/crud/internal-api-keys.d.cts +139 -0
  229. package/dist/interface/crud/internal-api-keys.d.ts +22 -17
  230. package/dist/interface/crud/internal-api-keys.js +92 -54
  231. package/dist/interface/crud/internal-api-keys.js.map +1 -0
  232. package/dist/interface/crud/oauth.d.cts +34 -0
  233. package/dist/interface/crud/oauth.d.ts +16 -11
  234. package/dist/interface/crud/oauth.js +48 -14
  235. package/dist/interface/crud/oauth.js.map +1 -0
  236. package/dist/interface/crud/project-api-keys.d.cts +196 -0
  237. package/dist/interface/crud/project-api-keys.d.ts +20 -12
  238. package/dist/interface/crud/project-api-keys.js +121 -74
  239. package/dist/interface/crud/project-api-keys.js.map +1 -0
  240. package/dist/interface/crud/project-permissions.d.cts +160 -0
  241. package/dist/interface/crud/project-permissions.d.ts +38 -33
  242. package/dist/interface/crud/project-permissions.js +148 -90
  243. package/dist/interface/crud/project-permissions.js.map +1 -0
  244. package/dist/interface/crud/projects.d.cts +627 -0
  245. package/dist/interface/crud/projects.d.ts +43 -51
  246. package/dist/interface/crud/projects.js +210 -156
  247. package/dist/interface/crud/projects.js.map +1 -0
  248. package/dist/interface/crud/sessions.d.cts +149 -0
  249. package/dist/interface/crud/sessions.d.ts +21 -16
  250. package/dist/interface/crud/sessions.js +86 -50
  251. package/dist/interface/crud/sessions.js.map +1 -0
  252. package/dist/interface/crud/svix-token.d.cts +26 -0
  253. package/dist/interface/crud/svix-token.d.ts +14 -9
  254. package/dist/interface/crud/svix-token.js +46 -12
  255. package/dist/interface/crud/svix-token.js.map +1 -0
  256. package/dist/interface/crud/team-invitation-details.d.cts +30 -0
  257. package/dist/interface/crud/team-invitation-details.d.ts +12 -7
  258. package/dist/interface/crud/team-invitation-details.js +57 -15
  259. package/dist/interface/crud/team-invitation-details.js.map +1 -0
  260. package/dist/interface/crud/team-invitation.d.cts +49 -0
  261. package/dist/interface/crud/team-invitation.d.ts +13 -8
  262. package/dist/interface/crud/team-invitation.js +69 -27
  263. package/dist/interface/crud/team-invitation.js.map +1 -0
  264. package/dist/interface/crud/team-member-profiles.d.cts +229 -0
  265. package/dist/interface/crud/team-member-profiles.d.ts +20 -15
  266. package/dist/interface/crud/team-member-profiles.js +95 -49
  267. package/dist/interface/crud/team-member-profiles.js.map +1 -0
  268. package/dist/interface/crud/team-memberships.d.cts +74 -0
  269. package/dist/interface/crud/team-memberships.d.ts +22 -17
  270. package/dist/interface/crud/team-memberships.js +85 -45
  271. package/dist/interface/crud/team-memberships.js.map +1 -0
  272. package/dist/interface/crud/team-permissions.d.cts +168 -0
  273. package/dist/interface/crud/team-permissions.d.ts +38 -33
  274. package/dist/interface/crud/team-permissions.js +149 -91
  275. package/dist/interface/crud/team-permissions.js.map +1 -0
  276. package/dist/interface/crud/teams.d.cts +298 -0
  277. package/dist/interface/crud/teams.d.ts +45 -40
  278. package/dist/interface/crud/teams.js +177 -119
  279. package/dist/interface/crud/teams.js.map +1 -0
  280. package/dist/interface/crud/users.d.cts +469 -0
  281. package/dist/interface/crud/users.d.ts +31 -26
  282. package/dist/interface/crud/users.js +172 -118
  283. package/dist/interface/crud/users.js.map +1 -0
  284. package/dist/interface/serverInterface.d.cts +128 -0
  285. package/dist/interface/serverInterface.d.ts +29 -17
  286. package/dist/interface/serverInterface.js +506 -339
  287. package/dist/interface/serverInterface.js.map +1 -0
  288. package/dist/interface/webhooks.d.cts +292 -0
  289. package/dist/interface/webhooks.d.ts +6 -3
  290. package/dist/interface/webhooks.js +45 -15
  291. package/dist/interface/webhooks.js.map +1 -0
  292. package/dist/known-errors.d.cts +447 -0
  293. package/dist/known-errors.d.ts +15 -9
  294. package/dist/known-errors.js +1104 -562
  295. package/dist/known-errors.js.map +1 -0
  296. package/dist/schema-fields.d.cts +163 -0
  297. package/dist/schema-fields.d.ts +116 -114
  298. package/dist/schema-fields.js +593 -427
  299. package/dist/schema-fields.js.map +1 -0
  300. package/dist/sessions.d.cts +109 -0
  301. package/dist/sessions.d.ts +6 -3
  302. package/dist/sessions.js +201 -172
  303. package/dist/sessions.js.map +1 -0
  304. package/dist/utils/api-keys.d.cts +24 -0
  305. package/dist/utils/api-keys.d.ts +5 -4
  306. package/dist/utils/api-keys.js +106 -66
  307. package/dist/utils/api-keys.js.map +1 -0
  308. package/dist/utils/arrays.d.cts +18 -0
  309. package/dist/utils/arrays.d.ts +15 -13
  310. package/dist/utils/arrays.js +101 -168
  311. package/dist/utils/arrays.js.map +1 -0
  312. package/dist/utils/base64.d.cts +4 -0
  313. package/dist/utils/base64.d.ts +4 -2
  314. package/dist/utils/base64.js +41 -20
  315. package/dist/utils/base64.js.map +1 -0
  316. package/dist/utils/booleans.d.cts +6 -0
  317. package/dist/utils/booleans.d.ts +6 -4
  318. package/dist/utils/booleans.js +35 -27
  319. package/dist/utils/booleans.js.map +1 -0
  320. package/dist/utils/browser-compat.d.cts +8 -0
  321. package/dist/utils/browser-compat.d.ts +3 -1
  322. package/dist/utils/browser-compat.js +45 -16
  323. package/dist/utils/browser-compat.js.map +1 -0
  324. package/dist/utils/bytes.d.cts +15 -0
  325. package/dist/utils/bytes.d.ts +15 -13
  326. package/dist/utils/bytes.js +182 -270
  327. package/dist/utils/bytes.js.map +1 -0
  328. package/dist/utils/caches.d.cts +98 -0
  329. package/dist/utils/caches.d.ts +17 -14
  330. package/dist/utils/caches.js +188 -193
  331. package/dist/utils/caches.js.map +1 -0
  332. package/dist/utils/compile-time.d.cts +8 -0
  333. package/dist/utils/compile-time.d.ts +3 -1
  334. package/dist/utils/compile-time.js +35 -10
  335. package/dist/utils/compile-time.js.map +1 -0
  336. package/dist/utils/crypto.d.cts +8 -0
  337. package/dist/utils/crypto.d.ts +4 -2
  338. package/dist/utils/crypto.js +49 -21
  339. package/dist/utils/crypto.js.map +1 -0
  340. package/dist/utils/dates.d.cts +15 -0
  341. package/dist/utils/dates.d.ts +6 -4
  342. package/dist/utils/dates.js +83 -105
  343. package/dist/utils/dates.js.map +1 -0
  344. package/dist/utils/dom.d.cts +3 -0
  345. package/dist/utils/dom.d.ts +3 -1
  346. package/dist/utils/dom.js +35 -7
  347. package/dist/utils/dom.js.map +1 -0
  348. package/dist/utils/env.d.cts +9 -0
  349. package/dist/utils/env.d.ts +6 -4
  350. package/dist/utils/env.js +70 -43
  351. package/dist/utils/env.js.map +1 -0
  352. package/dist/utils/errors.d.cts +223 -0
  353. package/dist/utils/errors.d.ts +14 -11
  354. package/dist/utils/errors.js +148 -126
  355. package/dist/utils/errors.js.map +1 -0
  356. package/dist/utils/fs.d.cts +7 -0
  357. package/dist/utils/fs.d.ts +5 -3
  358. package/dist/utils/fs.js +70 -27
  359. package/dist/utils/fs.js.map +1 -0
  360. package/dist/utils/functions.d.cts +4 -0
  361. package/dist/utils/functions.d.ts +4 -2
  362. package/dist/utils/functions.js +35 -18
  363. package/dist/utils/functions.js.map +1 -0
  364. package/dist/utils/geo.d.cts +22 -0
  365. package/dist/utils/geo.d.ts +6 -3
  366. package/dist/utils/geo.js +39 -9
  367. package/dist/utils/geo.js.map +1 -0
  368. package/dist/utils/globals.d.cts +5 -0
  369. package/dist/utils/globals.d.ts +4 -2
  370. package/dist/utils/globals.js +41 -14
  371. package/dist/utils/globals.js.map +1 -0
  372. package/dist/utils/hashes.d.cts +7 -0
  373. package/dist/utils/hashes.d.ts +7 -5
  374. package/dist/utils/hashes.js +87 -41
  375. package/dist/utils/hashes.js.map +1 -0
  376. package/dist/utils/html.d.cts +4 -0
  377. package/dist/utils/html.d.ts +4 -2
  378. package/dist/utils/html.js +36 -37
  379. package/dist/utils/html.js.map +1 -0
  380. package/dist/utils/http.d.cts +43 -0
  381. package/dist/utils/http.d.ts +6 -4
  382. package/dist/utils/http.js +83 -83
  383. package/dist/utils/http.js.map +1 -0
  384. package/dist/utils/ips.d.cts +6 -0
  385. package/dist/utils/ips.d.ts +6 -4
  386. package/dist/utils/ips.js +48 -35
  387. package/dist/utils/ips.js.map +1 -0
  388. package/dist/utils/json.d.cts +13 -0
  389. package/dist/utils/json.d.ts +9 -6
  390. package/dist/utils/json.js +54 -157
  391. package/dist/utils/json.js.map +1 -0
  392. package/dist/utils/jwt.d.cts +44 -0
  393. package/dist/utils/jwt.d.ts +14 -11
  394. package/dist/utils/jwt.js +119 -84
  395. package/dist/utils/jwt.js.map +1 -0
  396. package/dist/utils/locks.d.cts +15 -0
  397. package/dist/utils/locks.d.ts +3 -2
  398. package/dist/utils/locks.js +76 -56
  399. package/dist/utils/locks.js.map +1 -0
  400. package/dist/utils/maps.d.cts +59 -0
  401. package/dist/utils/maps.d.ts +6 -4
  402. package/dist/utils/maps.js +207 -343
  403. package/dist/utils/maps.js.map +1 -0
  404. package/dist/utils/math.d.cts +6 -0
  405. package/dist/utils/math.d.ts +3 -1
  406. package/dist/utils/math.js +31 -16
  407. package/dist/utils/math.js.map +1 -0
  408. package/dist/utils/node-http.d.cts +15 -0
  409. package/dist/utils/node-http.d.ts +5 -5
  410. package/dist/utils/node-http.js +65 -36
  411. package/dist/utils/node-http.js.map +1 -0
  412. package/dist/utils/numbers.d.cts +5 -0
  413. package/dist/utils/numbers.d.ts +5 -3
  414. package/dist/utils/numbers.js +53 -66
  415. package/dist/utils/numbers.js.map +1 -0
  416. package/dist/utils/oauth.d.cts +8 -0
  417. package/dist/utils/oauth.d.ts +8 -6
  418. package/dist/utils/oauth.js +37 -4
  419. package/dist/utils/oauth.js.map +1 -0
  420. package/dist/utils/objects.d.cts +69 -0
  421. package/dist/utils/objects.d.ts +37 -32
  422. package/dist/utils/objects.js +224 -374
  423. package/dist/utils/objects.js.map +1 -0
  424. package/dist/utils/passkey.d.cts +1 -0
  425. package/dist/utils/passkey.d.ts +1 -1
  426. package/dist/utils/passkey.js +19 -1
  427. package/dist/utils/passkey.js.map +1 -0
  428. package/dist/utils/promises.d.cts +74 -0
  429. package/dist/utils/promises.d.ts +20 -18
  430. package/dist/utils/promises.js +252 -393
  431. package/dist/utils/promises.js.map +1 -0
  432. package/dist/utils/proxies.d.cts +4 -0
  433. package/dist/utils/proxies.d.ts +4 -2
  434. package/dist/utils/proxies.js +150 -161
  435. package/dist/utils/proxies.js.map +1 -0
  436. package/dist/utils/react.d.cts +25 -0
  437. package/dist/utils/react.d.ts +9 -6
  438. package/dist/utils/react.js +88 -134
  439. package/dist/utils/react.js.map +1 -0
  440. package/dist/utils/results.d.cts +78 -0
  441. package/dist/utils/results.d.ts +10 -9
  442. package/dist/utils/results.js +143 -324
  443. package/dist/utils/results.js.map +1 -0
  444. package/dist/utils/sentry.d.cts +5 -0
  445. package/dist/utils/sentry.d.ts +5 -2
  446. package/dist/utils/sentry.js +44 -14
  447. package/dist/utils/sentry.js.map +1 -0
  448. package/dist/utils/stores.d.cts +102 -0
  449. package/dist/utils/stores.d.ts +12 -9
  450. package/dist/utils/stores.js +219 -189
  451. package/dist/utils/stores.js.map +1 -0
  452. package/dist/utils/strings.d.cts +72 -0
  453. package/dist/utils/strings.d.ts +22 -20
  454. package/dist/utils/strings.js +300 -580
  455. package/dist/utils/strings.js.map +1 -0
  456. package/dist/utils/strings.nicify.test.d.cts +2 -0
  457. package/dist/utils/strings.nicify.test.d.ts +2 -1
  458. package/dist/utils/strings.nicify.test.js +168 -158
  459. package/dist/utils/strings.nicify.test.js.map +1 -0
  460. package/dist/utils/types.d.cts +23 -0
  461. package/dist/utils/types.d.ts +8 -6
  462. package/dist/utils/types.js +19 -1
  463. package/dist/utils/types.js.map +1 -0
  464. package/dist/utils/unicode.d.cts +3 -0
  465. package/dist/utils/unicode.d.ts +3 -1
  466. package/dist/utils/unicode.js +34 -21
  467. package/dist/utils/unicode.js.map +1 -0
  468. package/dist/utils/urls.d.cts +20 -0
  469. package/dist/utils/urls.d.ts +10 -8
  470. package/dist/utils/urls.js +76 -165
  471. package/dist/utils/urls.js.map +1 -0
  472. package/dist/utils/uuids.d.cts +4 -0
  473. package/dist/utils/uuids.d.ts +4 -2
  474. package/dist/utils/uuids.js +39 -35
  475. package/dist/utils/uuids.js.map +1 -0
  476. package/package.json +5 -5
@@ -0,0 +1,60 @@
1
+ // src/crud.tsx
2
+ import { yupObject, yupString } from "./schema-fields";
3
+ import { filterUndefined } from "./utils/objects";
4
+ function createCrud(options) {
5
+ const docs = options.docs ?? {};
6
+ const client = {
7
+ createSchema: options.clientCreateSchema,
8
+ createDocs: docs.clientCreate,
9
+ readSchema: options.clientReadSchema,
10
+ readDocs: docs.clientRead,
11
+ listDocs: docs.clientList,
12
+ updateSchema: options.clientUpdateSchema,
13
+ updateDocs: docs.clientUpdate,
14
+ deleteSchema: options.clientDeleteSchema,
15
+ deleteDocs: docs.clientDelete
16
+ };
17
+ const serverOverrides = filterUndefined({
18
+ createSchema: options.serverCreateSchema,
19
+ createDocs: docs.serverCreate,
20
+ readSchema: options.serverReadSchema,
21
+ readDocs: docs.serverRead,
22
+ listDocs: docs.serverList,
23
+ updateSchema: options.serverUpdateSchema,
24
+ updateDocs: docs.serverUpdate,
25
+ deleteSchema: options.serverDeleteSchema,
26
+ deleteDocs: docs.serverDelete
27
+ });
28
+ const server = {
29
+ ...client,
30
+ ...serverOverrides
31
+ };
32
+ const adminOverrides = filterUndefined({
33
+ createSchema: options.adminCreateSchema,
34
+ createDocs: docs.adminCreate,
35
+ readSchema: options.adminReadSchema,
36
+ readDocs: docs.adminRead,
37
+ listDocs: docs.adminList,
38
+ updateSchema: options.adminUpdateSchema,
39
+ updateDocs: docs.adminUpdate,
40
+ deleteSchema: options.adminDeleteSchema,
41
+ deleteDocs: docs.adminDelete
42
+ });
43
+ const admin = {
44
+ ...server,
45
+ ...adminOverrides
46
+ };
47
+ return {
48
+ client,
49
+ server,
50
+ admin,
51
+ hasCreate: !!admin.createSchema,
52
+ hasRead: !!admin.readSchema,
53
+ hasUpdate: !!admin.updateSchema,
54
+ hasDelete: !!admin.deleteSchema
55
+ };
56
+ }
57
+ export {
58
+ createCrud
59
+ };
60
+ //# sourceMappingURL=crud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/crud.tsx"],"sourcesContent":["import * as yup from 'yup';\nimport { yupObject, yupString } from './schema-fields';\nimport { filterUndefined } from './utils/objects';\nimport { NullishCoalesce } from './utils/types';\n\nexport type AccessType = \"client\" | \"server\" | \"admin\";\nexport type CrudOperation = \"create\" | \"read\" | \"update\" | \"delete\";\nexport type CrudlOperation = \"create\" | \"read\" | \"update\" | \"delete\" | \"list\";\nexport type AccessTypeXCrudOperation = `${AccessType}${Capitalize<CrudOperation>}`;\nexport type AccessTypeXCrudlOperation = `${AccessType}${Capitalize<CrudlOperation>}`;\n\ndeclare module 'yup' {\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n export interface CustomSchemaMetadata {\n openapiField?: {\n description?: string,\n exampleValue?: any,\n hidden?: boolean,\n onlyShowInOperations?: Capitalize<CrudlOperation>[],\n },\n }\n}\n\ntype ShownEndpointDocumentation = {\n summary: string,\n description: string,\n tags?: string[],\n crudOperation?: Capitalize<CrudlOperation>,\n};\nexport type EndpointDocumentation =\n | ({ hidden: true } & Partial<ShownEndpointDocumentation>)\n | ({ hidden?: boolean } & ShownEndpointDocumentation);\n\n\ntype InnerCrudSchema<\n CreateSchema extends yup.AnySchema | undefined = yup.AnySchema | undefined,\n ReadSchema extends yup.AnySchema | undefined = yup.AnySchema | undefined,\n UpdateSchema extends yup.AnySchema | undefined = yup.AnySchema | undefined,\n DeleteSchema extends yup.AnySchema | undefined = yup.AnySchema | undefined,\n> = {\n createSchema: CreateSchema,\n createDocs: EndpointDocumentation | undefined,\n\n readSchema: ReadSchema,\n readDocs: EndpointDocumentation | undefined,\n listDocs: EndpointDocumentation | undefined,\n\n updateSchema: UpdateSchema,\n updateDocs: EndpointDocumentation | undefined,\n\n deleteSchema: DeleteSchema,\n deleteDocs: EndpointDocumentation | undefined,\n};\n\nexport type CrudSchema<\n ClientSchema extends InnerCrudSchema = InnerCrudSchema,\n ServerSchema extends InnerCrudSchema = InnerCrudSchema,\n AdminSchema extends InnerCrudSchema = InnerCrudSchema,\n> = {\n client: ClientSchema,\n server: ServerSchema,\n admin: AdminSchema,\n\n hasCreate: boolean,\n hasRead: boolean,\n hasUpdate: boolean,\n hasDelete: boolean,\n};\n\nexport type CrudSchemaCreationOptions = {\n [K in AccessTypeXCrudOperation as `${K}Schema`]?: yup.AnySchema\n};\n\ntype FillInOptionalsPrepareStep<O extends CrudSchemaCreationOptions> =\n & { [K in keyof Required<CrudSchemaCreationOptions>]: K extends keyof O ? O[K] : undefined };\n\ntype FillInOptionalsStep<O extends FillInOptionalsPrepareStep<CrudSchemaCreationOptions>> = {\n clientCreateSchema: NullishCoalesce<O['clientCreateSchema'], undefined>,\n clientReadSchema: NullishCoalesce<O['clientReadSchema'], undefined>,\n clientUpdateSchema: NullishCoalesce<O['clientUpdateSchema'], undefined>,\n clientDeleteSchema: NullishCoalesce<O['clientDeleteSchema'], undefined>,\n\n serverCreateSchema: NullishCoalesce<O['serverCreateSchema'], O['clientCreateSchema']>,\n serverReadSchema: NullishCoalesce<O['serverReadSchema'], O['clientReadSchema']>,\n serverUpdateSchema: NullishCoalesce<O['serverUpdateSchema'], O['clientUpdateSchema']>,\n serverDeleteSchema: NullishCoalesce<O['serverDeleteSchema'], O['clientDeleteSchema']>,\n\n adminCreateSchema: NullishCoalesce<O['adminCreateSchema'], O['serverCreateSchema']>,\n adminReadSchema: NullishCoalesce<O['adminReadSchema'], O['serverReadSchema']>,\n adminUpdateSchema: NullishCoalesce<O['adminUpdateSchema'], O['serverUpdateSchema']>,\n adminDeleteSchema: NullishCoalesce<O['adminDeleteSchema'], O['serverDeleteSchema']>,\n};\n\ntype FillInOptionals<O extends CrudSchemaCreationOptions> = FillInOptionalsStep<FillInOptionalsStep<FillInOptionalsStep<FillInOptionalsPrepareStep<O>>>>;\n\ntype CrudSchemaFromOptionsInner<O extends FillInOptionals<any>> = CrudSchema<\n InnerCrudSchema<O['clientCreateSchema'], O['clientReadSchema'], O['clientUpdateSchema'], O['clientDeleteSchema']>,\n InnerCrudSchema<O['serverCreateSchema'], O['serverReadSchema'], O['serverUpdateSchema'], O['serverDeleteSchema']>,\n InnerCrudSchema<O['adminCreateSchema'], O['adminReadSchema'], O['adminUpdateSchema'], O['adminDeleteSchema']>\n>;\n\nexport type CrudSchemaFromOptions<O extends CrudSchemaCreationOptions> = CrudSchemaFromOptionsInner<FillInOptionals<O>>;\n\ntype InnerCrudTypeOf<S extends InnerCrudSchema> =\n & (S['createSchema'] extends {} ? { Create: yup.InferType<S['createSchema']> } : {})\n & (S['readSchema'] extends {} ? { Read: yup.InferType<S['readSchema']> } : {})\n & (S['updateSchema'] extends {} ? { Update: yup.InferType<S['updateSchema']> } : {})\n & (S['deleteSchema'] extends {} ? { Delete: yup.InferType<S['deleteSchema']> } : {})\n & (S['readSchema'] extends {} ? { List: {\n items: yup.InferType<S['readSchema']>[],\n is_paginated: boolean,\n pagination?: {\n next_cursor: string | null,\n },\n }, } : {});\n\nexport type CrudTypeOf<S extends CrudSchema> = {\n Client: InnerCrudTypeOf<S['client']>,\n Server: InnerCrudTypeOf<S['server']>,\n Admin: InnerCrudTypeOf<S['admin']>,\n}\n\ntype CrudDocsCreationOptions<SO extends CrudSchemaCreationOptions> = {\n [X in AccessTypeXCrudlOperation]?: EndpointDocumentation\n};\n\nexport function createCrud<SO extends CrudSchemaCreationOptions>(options: SO & { docs?: CrudDocsCreationOptions<SO> }): CrudSchemaFromOptions<SO> {\n const docs = options.docs ?? {};\n const client = {\n createSchema: options.clientCreateSchema,\n createDocs: docs.clientCreate,\n\n readSchema: options.clientReadSchema,\n readDocs: docs.clientRead,\n listDocs: docs.clientList,\n\n updateSchema: options.clientUpdateSchema,\n updateDocs: docs.clientUpdate,\n\n deleteSchema: options.clientDeleteSchema,\n deleteDocs: docs.clientDelete,\n };\n\n const serverOverrides = filterUndefined({\n createSchema: options.serverCreateSchema,\n createDocs: docs.serverCreate,\n\n readSchema: options.serverReadSchema,\n readDocs: docs.serverRead,\n listDocs: docs.serverList,\n\n updateSchema: options.serverUpdateSchema,\n updateDocs: docs.serverUpdate,\n\n deleteSchema: options.serverDeleteSchema,\n deleteDocs: docs.serverDelete,\n });\n const server = {\n ...client,\n ...serverOverrides,\n };\n\n const adminOverrides = filterUndefined({\n createSchema: options.adminCreateSchema,\n createDocs: docs.adminCreate,\n\n readSchema: options.adminReadSchema,\n readDocs: docs.adminRead,\n listDocs: docs.adminList,\n\n updateSchema: options.adminUpdateSchema,\n updateDocs: docs.adminUpdate,\n\n deleteSchema: options.adminDeleteSchema,\n deleteDocs: docs.adminDelete,\n });\n const admin = {\n ...server,\n ...adminOverrides,\n };\n\n return {\n client: client as any,\n server: server as any,\n admin: admin as any,\n\n hasCreate: !!admin.createSchema,\n hasRead: !!admin.readSchema,\n hasUpdate: !!admin.updateSchema,\n hasDelete: !!admin.deleteSchema,\n };\n}\n\nundefined?.test(\"createCrud\", ({ expect }) => {\n // Test with empty options\n const emptyCrud = createCrud({});\n expect(emptyCrud.hasCreate).toBe(false);\n expect(emptyCrud.hasRead).toBe(false);\n expect(emptyCrud.hasUpdate).toBe(false);\n expect(emptyCrud.hasDelete).toBe(false);\n expect(emptyCrud.client.createSchema).toBeUndefined();\n expect(emptyCrud.server.createSchema).toBeUndefined();\n expect(emptyCrud.admin.createSchema).toBeUndefined();\n\n // Test with client schemas only\n const mockSchema = yupObject().shape({\n name: yupString().defined(),\n });\n\n const clientOnlyCrud = createCrud({\n clientCreateSchema: mockSchema,\n clientReadSchema: mockSchema,\n });\n expect(clientOnlyCrud.hasCreate).toBe(true);\n expect(clientOnlyCrud.hasRead).toBe(true);\n expect(clientOnlyCrud.hasUpdate).toBe(false);\n expect(clientOnlyCrud.hasDelete).toBe(false);\n expect(clientOnlyCrud.client.createSchema).toBe(mockSchema);\n expect(clientOnlyCrud.server.createSchema).toBe(mockSchema);\n expect(clientOnlyCrud.admin.createSchema).toBe(mockSchema);\n\n // Test with server overrides\n const serverSchema = yupObject().shape({\n name: yupString().defined(),\n internalField: yupString().defined(),\n });\n\n const serverOverrideCrud = createCrud({\n clientCreateSchema: mockSchema,\n serverCreateSchema: serverSchema,\n });\n expect(serverOverrideCrud.hasCreate).toBe(true);\n expect(serverOverrideCrud.client.createSchema).toBe(mockSchema);\n expect(serverOverrideCrud.server.createSchema).toBe(serverSchema);\n expect(serverOverrideCrud.admin.createSchema).toBe(serverSchema);\n\n // Test with admin overrides\n const adminSchema = yupObject().shape({\n name: yupString().defined(),\n internalField: yupString().defined(),\n adminField: yupString().defined(),\n });\n\n const fullOverrideCrud = createCrud({\n clientCreateSchema: mockSchema,\n serverCreateSchema: serverSchema,\n adminCreateSchema: adminSchema,\n });\n expect(fullOverrideCrud.hasCreate).toBe(true);\n expect(fullOverrideCrud.client.createSchema).toBe(mockSchema);\n expect(fullOverrideCrud.server.createSchema).toBe(serverSchema);\n expect(fullOverrideCrud.admin.createSchema).toBe(adminSchema);\n\n // Test with documentation\n const crudWithDocs = createCrud({\n clientCreateSchema: mockSchema,\n docs: {\n clientCreate: {\n summary: \"Create a resource\",\n description: \"Creates a new resource\",\n tags: [\"resources\"],\n },\n },\n });\n expect(crudWithDocs.client.createDocs).toEqual({\n summary: \"Create a resource\",\n description: \"Creates a new resource\",\n tags: [\"resources\"],\n });\n expect(crudWithDocs.server.createDocs).toEqual({\n summary: \"Create a resource\",\n description: \"Creates a new resource\",\n tags: [\"resources\"],\n });\n});\n"],"mappings":";AACA,SAAS,WAAW,iBAAiB;AACrC,SAAS,uBAAuB;AA4HzB,SAAS,WAAiD,SAAiF;AAChJ,QAAM,OAAO,QAAQ,QAAQ,CAAC;AAC9B,QAAM,SAAS;AAAA,IACb,cAAc,QAAQ;AAAA,IACtB,YAAY,KAAK;AAAA,IAEjB,YAAY,QAAQ;AAAA,IACpB,UAAU,KAAK;AAAA,IACf,UAAU,KAAK;AAAA,IAEf,cAAc,QAAQ;AAAA,IACtB,YAAY,KAAK;AAAA,IAEjB,cAAc,QAAQ;AAAA,IACtB,YAAY,KAAK;AAAA,EACnB;AAEA,QAAM,kBAAkB,gBAAgB;AAAA,IACtC,cAAc,QAAQ;AAAA,IACtB,YAAY,KAAK;AAAA,IAEjB,YAAY,QAAQ;AAAA,IACpB,UAAU,KAAK;AAAA,IACf,UAAU,KAAK;AAAA,IAEf,cAAc,QAAQ;AAAA,IACtB,YAAY,KAAK;AAAA,IAEjB,cAAc,QAAQ;AAAA,IACtB,YAAY,KAAK;AAAA,EACnB,CAAC;AACD,QAAM,SAAS;AAAA,IACb,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAEA,QAAM,iBAAiB,gBAAgB;AAAA,IACrC,cAAc,QAAQ;AAAA,IACtB,YAAY,KAAK;AAAA,IAEjB,YAAY,QAAQ;AAAA,IACpB,UAAU,KAAK;AAAA,IACf,UAAU,KAAK;AAAA,IAEf,cAAc,QAAQ;AAAA,IACtB,YAAY,KAAK;AAAA,IAEjB,cAAc,QAAQ;AAAA,IACtB,YAAY,KAAK;AAAA,EACnB,CAAC;AACD,QAAM,QAAQ;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IAEA,WAAW,CAAC,CAAC,MAAM;AAAA,IACnB,SAAS,CAAC,CAAC,MAAM;AAAA,IACjB,WAAW,CAAC,CAAC,MAAM;AAAA,IACnB,WAAW,CAAC,CAAC,MAAM;AAAA,EACrB;AACF;","names":[]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=global.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,17 @@
1
+ // src/helpers/password.ts
2
+ import { KnownErrors } from "..";
3
+ var minLength = 8;
4
+ var maxLength = 70;
5
+ function getPasswordError(password) {
6
+ if (password.length < minLength) {
7
+ return new KnownErrors.PasswordTooShort(minLength);
8
+ }
9
+ if (password.length > maxLength) {
10
+ return new KnownErrors.PasswordTooLong(maxLength);
11
+ }
12
+ return void 0;
13
+ }
14
+ export {
15
+ getPasswordError
16
+ };
17
+ //# sourceMappingURL=password.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/helpers/password.ts"],"sourcesContent":["import { KnownErrors } from \"..\";\n\nconst minLength = 8;\nconst maxLength = 70;\n\nexport function getPasswordError(password: string): KnownErrors[\"PasswordRequirementsNotMet\"] | undefined {\n if (password.length < minLength) {\n return new KnownErrors.PasswordTooShort(minLength);\n }\n\n if (password.length > maxLength) {\n return new KnownErrors.PasswordTooLong(maxLength);\n }\n\n return undefined;\n}\n"],"mappings":";AAAA,SAAS,mBAAmB;AAE5B,IAAM,YAAY;AAClB,IAAM,YAAY;AAEX,SAAS,iBAAiB,UAAyE;AACxG,MAAI,SAAS,SAAS,WAAW;AAC/B,WAAO,IAAI,YAAY,iBAAiB,SAAS;AAAA,EACnD;AAEA,MAAI,SAAS,SAAS,WAAW;AAC/B,WAAO,IAAI,YAAY,gBAAgB,SAAS;AAAA,EAClD;AAEA,SAAO;AACT;","names":[]}
@@ -0,0 +1,50 @@
1
+ // src/helpers/production-mode.ts
2
+ import { StackAssertionError, captureError } from "../utils/errors";
3
+ import { isLocalhost } from "../utils/urls";
4
+ function getProductionModeErrors(project) {
5
+ const errors = [];
6
+ const domainsFixUrl = `/projects/${project.id}/domains`;
7
+ if (project.config.allow_localhost) {
8
+ errors.push({
9
+ message: "Localhost is not allowed in production mode, turn off 'Allow localhost' in project settings",
10
+ relativeFixUrl: domainsFixUrl
11
+ });
12
+ }
13
+ for (const { domain } of project.config.domains) {
14
+ let url;
15
+ try {
16
+ url = new URL(domain);
17
+ } catch (e) {
18
+ captureError("production-mode-domain-not-valid", new StackAssertionError("Domain was somehow not a valid URL; we should've caught this when setting the domain in the first place", {
19
+ domain,
20
+ projectId: project
21
+ }));
22
+ errors.push({
23
+ message: "Trusted domain is not a valid URL: " + domain,
24
+ relativeFixUrl: domainsFixUrl
25
+ });
26
+ continue;
27
+ }
28
+ if (isLocalhost(url)) {
29
+ errors.push({
30
+ message: "Localhost domains are not allowed to be trusted in production mode: " + domain,
31
+ relativeFixUrl: domainsFixUrl
32
+ });
33
+ } else if (url.hostname.match(/^\d+(\.\d+)*$/)) {
34
+ errors.push({
35
+ message: "Direct IPs are not valid for trusted domains in production mode: " + domain,
36
+ relativeFixUrl: domainsFixUrl
37
+ });
38
+ } else if (url.protocol !== "https:") {
39
+ errors.push({
40
+ message: "Trusted domains should be HTTPS: " + domain,
41
+ relativeFixUrl: domainsFixUrl
42
+ });
43
+ }
44
+ }
45
+ return errors;
46
+ }
47
+ export {
48
+ getProductionModeErrors
49
+ };
50
+ //# sourceMappingURL=production-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/helpers/production-mode.ts"],"sourcesContent":["import { ProjectsCrud } from \"../interface/crud/projects\";\nimport { StackAssertionError, captureError } from \"../utils/errors\";\nimport { isLocalhost } from \"../utils/urls\";\n\nexport type ProductionModeError = {\n message: string,\n relativeFixUrl: `/${string}`,\n};\n\nexport function getProductionModeErrors(project: ProjectsCrud[\"Admin\"][\"Read\"]): ProductionModeError[] {\n const errors: ProductionModeError[] = [];\n const domainsFixUrl = `/projects/${project.id}/domains` as const;\n\n if (project.config.allow_localhost) {\n errors.push({\n message: \"Localhost is not allowed in production mode, turn off 'Allow localhost' in project settings\",\n relativeFixUrl: domainsFixUrl,\n });\n }\n\n for (const { domain } of project.config.domains) {\n let url;\n try {\n url = new URL(domain);\n } catch (e) {\n captureError(\"production-mode-domain-not-valid\", new StackAssertionError(\"Domain was somehow not a valid URL; we should've caught this when setting the domain in the first place\", {\n domain,\n projectId: project\n }));\n errors.push({\n message: \"Trusted domain is not a valid URL: \" + domain,\n relativeFixUrl: domainsFixUrl,\n });\n continue;\n }\n\n if (isLocalhost(url)) {\n errors.push({\n message: \"Localhost domains are not allowed to be trusted in production mode: \" + domain,\n relativeFixUrl: domainsFixUrl,\n });\n } else if (url.hostname.match(/^\\d+(\\.\\d+)*$/)) {\n errors.push({\n message: \"Direct IPs are not valid for trusted domains in production mode: \" + domain,\n relativeFixUrl: domainsFixUrl,\n });\n } else if (url.protocol !== \"https:\") {\n errors.push({\n message: \"Trusted domains should be HTTPS: \" + domain,\n relativeFixUrl: domainsFixUrl,\n });\n }\n }\n\n return errors;\n}\n"],"mappings":";AACA,SAAS,qBAAqB,oBAAoB;AAClD,SAAS,mBAAmB;AAOrB,SAAS,wBAAwB,SAA+D;AACrG,QAAM,SAAgC,CAAC;AACvC,QAAM,gBAAgB,aAAa,QAAQ,EAAE;AAE7C,MAAI,QAAQ,OAAO,iBAAiB;AAClC,WAAO,KAAK;AAAA,MACV,SAAS;AAAA,MACT,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,aAAW,EAAE,OAAO,KAAK,QAAQ,OAAO,SAAS;AAC/C,QAAI;AACJ,QAAI;AACF,YAAM,IAAI,IAAI,MAAM;AAAA,IACtB,SAAS,GAAG;AACV,mBAAa,oCAAoC,IAAI,oBAAoB,2GAA2G;AAAA,QAClL;AAAA,QACA,WAAW;AAAA,MACb,CAAC,CAAC;AACF,aAAO,KAAK;AAAA,QACV,SAAS,wCAAwC;AAAA,QACjD,gBAAgB;AAAA,MAClB,CAAC;AACD;AAAA,IACF;AAEA,QAAI,YAAY,GAAG,GAAG;AACpB,aAAO,KAAK;AAAA,QACV,SAAS,yEAAyE;AAAA,QAClF,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH,WAAW,IAAI,SAAS,MAAM,eAAe,GAAG;AAC9C,aAAO,KAAK;AAAA,QACV,SAAS,sEAAsE;AAAA,QAC/E,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH,WAAW,IAAI,aAAa,UAAU;AACpC,aAAO,KAAK;AAAA,QACV,SAAS,sCAAsC;AAAA,QAC/C,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
@@ -0,0 +1,38 @@
1
+ // src/hooks/use-async-callback.tsx
2
+ import React from "react";
3
+ import { captureError } from "../utils/errors";
4
+ function useAsyncCallback(callback, deps) {
5
+ const [error, setError] = React.useState(void 0);
6
+ const [loadingCount, setLoadingCount] = React.useState(0);
7
+ const cb = React.useCallback(
8
+ async (...args) => {
9
+ setLoadingCount((c) => c + 1);
10
+ try {
11
+ return await callback(...args);
12
+ } catch (e) {
13
+ setError(e);
14
+ throw e;
15
+ } finally {
16
+ setLoadingCount((c) => c - 1);
17
+ }
18
+ },
19
+ deps
20
+ );
21
+ return [cb, loadingCount > 0, error];
22
+ }
23
+ function useAsyncCallbackWithLoggedError(callback, deps) {
24
+ const [newCallback, loading] = useAsyncCallback(async (...args) => {
25
+ try {
26
+ return await callback(...args);
27
+ } catch (e) {
28
+ captureError("async-callback", e);
29
+ throw e;
30
+ }
31
+ }, deps);
32
+ return [newCallback, loading];
33
+ }
34
+ export {
35
+ useAsyncCallback,
36
+ useAsyncCallbackWithLoggedError
37
+ };
38
+ //# sourceMappingURL=use-async-callback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/use-async-callback.tsx"],"sourcesContent":["import React from \"react\";\nimport { captureError } from \"../utils/errors\";\n\nexport function useAsyncCallback<A extends any[], R>(\n callback: (...args: A) => Promise<R>,\n deps: React.DependencyList\n): [cb: (...args: A) => Promise<R>, loading: boolean, error: unknown | undefined] {\n const [error, setError] = React.useState<unknown | undefined>(undefined);\n const [loadingCount, setLoadingCount] = React.useState(0);\n\n const cb = React.useCallback(\n async (...args: A) => {\n setLoadingCount((c) => c + 1);\n try {\n return await callback(...args);\n } catch (e) {\n setError(e);\n throw e;\n } finally {\n setLoadingCount((c) => c - 1);\n }\n },\n deps,\n );\n\n return [cb, loadingCount > 0, error];\n}\n\nexport function useAsyncCallbackWithLoggedError<A extends any[], R>(\n callback: (...args: A) => Promise<R>,\n deps: React.DependencyList\n): [cb: (...args: A) => Promise<R>, loading: boolean] {\n const [newCallback, loading] = useAsyncCallback<A, R>(async (...args) => {\n try {\n return await callback(...args);\n } catch (e) {\n captureError(\"async-callback\", e);\n throw e;\n }\n }, deps);\n\n return [newCallback, loading];\n}\n"],"mappings":";AAAA,OAAO,WAAW;AAClB,SAAS,oBAAoB;AAEtB,SAAS,iBACd,UACA,MACgF;AAChF,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAA8B,MAAS;AACvE,QAAM,CAAC,cAAc,eAAe,IAAI,MAAM,SAAS,CAAC;AAExD,QAAM,KAAK,MAAM;AAAA,IACf,UAAU,SAAY;AACpB,sBAAgB,CAAC,MAAM,IAAI,CAAC;AAC5B,UAAI;AACF,eAAO,MAAM,SAAS,GAAG,IAAI;AAAA,MAC/B,SAAS,GAAG;AACV,iBAAS,CAAC;AACV,cAAM;AAAA,MACR,UAAE;AACA,wBAAgB,CAAC,MAAM,IAAI,CAAC;AAAA,MAC9B;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAEA,SAAO,CAAC,IAAI,eAAe,GAAG,KAAK;AACrC;AAEO,SAAS,gCACd,UACA,MACoD;AACpD,QAAM,CAAC,aAAa,OAAO,IAAI,iBAAuB,UAAU,SAAS;AACvE,QAAI;AACF,aAAO,MAAM,SAAS,GAAG,IAAI;AAAA,IAC/B,SAAS,GAAG;AACV,mBAAa,kBAAkB,CAAC;AAChC,YAAM;AAAA,IACR;AAAA,EACF,GAAG,IAAI;AAEP,SAAO,CAAC,aAAa,OAAO;AAC9B;","names":[]}
@@ -0,0 +1,23 @@
1
+ // src/hooks/use-async-external-store.tsx
2
+ import { useEffect, useState } from "react";
3
+ import { AsyncResult } from "../utils/results";
4
+ function useAsyncExternalStore(subscribe) {
5
+ const [isAvailable, setIsAvailable] = useState(false);
6
+ const [value, setValue] = useState();
7
+ useEffect(() => {
8
+ const unsubscribe = subscribe((value2) => {
9
+ setValue(() => value2);
10
+ setIsAvailable(() => true);
11
+ });
12
+ return unsubscribe;
13
+ }, [subscribe]);
14
+ if (isAvailable) {
15
+ return AsyncResult.ok(value);
16
+ } else {
17
+ return AsyncResult.pending();
18
+ }
19
+ }
20
+ export {
21
+ useAsyncExternalStore
22
+ };
23
+ //# sourceMappingURL=use-async-external-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/use-async-external-store.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { AsyncResult } from \"../utils/results\";\n\nexport function useAsyncExternalStore<T>(\n subscribe: (callback: (t: T) => void) => (() => void),\n): AsyncResult<T, never> & { status: \"ok\" | \"pending\" } {\n // sure, the \"sync\" in useSyncExternalStore refers to \"synchronize a store\" and not \"sync/async\", but it's too good of a name to pass up on\n\n const [isAvailable, setIsAvailable] = useState(false);\n const [value, setValue] = useState<T>();\n useEffect(() => {\n const unsubscribe = subscribe((value: T) => {\n setValue(() => value);\n setIsAvailable(() => true);\n });\n return unsubscribe;\n }, [subscribe]);\n\n if (isAvailable) {\n return AsyncResult.ok(value as T);\n } else {\n return AsyncResult.pending();\n }\n}\n"],"mappings":";AAAA,SAAS,WAAW,gBAAgB;AACpC,SAAS,mBAAmB;AAErB,SAAS,sBACd,WACsD;AAGtD,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AACpD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAY;AACtC,YAAU,MAAM;AACd,UAAM,cAAc,UAAU,CAACA,WAAa;AAC1C,eAAS,MAAMA,MAAK;AACpB,qBAAe,MAAM,IAAI;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,SAAS,CAAC;AAEd,MAAI,aAAa;AACf,WAAO,YAAY,GAAG,KAAU;AAAA,EAClC,OAAO;AACL,WAAO,YAAY,QAAQ;AAAA,EAC7B;AACF;","names":["value"]}
@@ -0,0 +1,17 @@
1
+ // src/hooks/use-hash.tsx
2
+ import { useSyncExternalStore } from "react";
3
+ import { suspendIfSsr } from "../utils/react";
4
+ var useHash = () => {
5
+ suspendIfSsr("useHash");
6
+ return useSyncExternalStore(
7
+ (onChange) => {
8
+ const interval = setInterval(() => onChange(), 10);
9
+ return () => clearInterval(interval);
10
+ },
11
+ () => window.location.hash.substring(1)
12
+ );
13
+ };
14
+ export {
15
+ useHash
16
+ };
17
+ //# sourceMappingURL=use-hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/use-hash.tsx"],"sourcesContent":["import { useSyncExternalStore } from \"react\";\nimport { suspendIfSsr } from \"../utils/react\";\n\nexport const useHash = () => {\n suspendIfSsr(\"useHash\");\n return useSyncExternalStore(\n (onChange) => {\n const interval = setInterval(() => onChange(), 10);\n return () => clearInterval(interval);\n },\n () => window.location.hash.substring(1)\n );\n};\n\n"],"mappings":";AAAA,SAAS,4BAA4B;AACrC,SAAS,oBAAoB;AAEtB,IAAM,UAAU,MAAM;AAC3B,eAAa,SAAS;AACtB,SAAO;AAAA,IACL,CAAC,aAAa;AACZ,YAAM,WAAW,YAAY,MAAM,SAAS,GAAG,EAAE;AACjD,aAAO,MAAM,cAAc,QAAQ;AAAA,IACrC;AAAA,IACA,MAAM,OAAO,SAAS,KAAK,UAAU,CAAC;AAAA,EACxC;AACF;","names":[]}
@@ -0,0 +1,61 @@
1
+ // src/hooks/use-strict-memo.tsx
2
+ import { useId, useInsertionEffect } from "react";
3
+ import { Result } from "../utils/results";
4
+ var cached = /* @__PURE__ */ new Map();
5
+ function unwrapFromInner(dependencies, inner) {
6
+ if (dependencies.length === 0 !== "isNotNestedMap" in inner) {
7
+ return Result.error(void 0);
8
+ }
9
+ if ("isNotNestedMap" in inner) {
10
+ if (dependencies.length === 0) {
11
+ return Result.ok(inner.value);
12
+ } else {
13
+ return Result.error(void 0);
14
+ }
15
+ } else {
16
+ if (dependencies.length === 0) {
17
+ return Result.error(void 0);
18
+ } else {
19
+ const [key, ...rest] = dependencies;
20
+ const newInner = inner.get(key);
21
+ if (!newInner) {
22
+ return Result.error(void 0);
23
+ }
24
+ return unwrapFromInner(rest, newInner);
25
+ }
26
+ }
27
+ }
28
+ function wrapToInner(dependencies, value) {
29
+ if (dependencies.length === 0) {
30
+ return { isNotNestedMap: true, value };
31
+ }
32
+ const [key, ...rest] = dependencies;
33
+ const inner = wrapToInner(rest, value);
34
+ const isObject = typeof key === "object" && key !== null;
35
+ const isUnregisteredSymbol = typeof key === "symbol" && Symbol.keyFor(key) === void 0;
36
+ const isWeak = isObject || isUnregisteredSymbol;
37
+ const mapType = isWeak ? WeakMap : Map;
38
+ return new mapType([[key, inner]]);
39
+ }
40
+ function useStrictMemo(callback, dependencies) {
41
+ const id = useId();
42
+ useInsertionEffect(() => {
43
+ return () => {
44
+ cached.delete(id);
45
+ };
46
+ }, [id]);
47
+ const c = cached.get(id);
48
+ if (c) {
49
+ const unwrapped = unwrapFromInner(dependencies, c);
50
+ if (unwrapped.status === "ok") {
51
+ return unwrapped.data;
52
+ }
53
+ }
54
+ const value = callback();
55
+ cached.set(id, wrapToInner(dependencies, value));
56
+ return value;
57
+ }
58
+ export {
59
+ useStrictMemo
60
+ };
61
+ //# sourceMappingURL=use-strict-memo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/use-strict-memo.tsx"],"sourcesContent":["import { useId, useInsertionEffect, useMemo } from \"react\";\nimport { Result } from \"../utils/results\";\n\ntype CacheInner = Map<unknown, CacheInner> | WeakMap<WeakKey, CacheInner> | { isNotNestedMap: true, value: any };\n\nconst cached = new Map<string, CacheInner>();\n\nfunction unwrapFromInner(dependencies: any[], inner: CacheInner): Result<any, void> {\n if ((dependencies.length === 0) !== (\"isNotNestedMap\" in inner)) {\n return Result.error(undefined);\n }\n if (\"isNotNestedMap\" in inner) {\n if (dependencies.length === 0) {\n return Result.ok(inner.value);\n } else {\n return Result.error(undefined);\n }\n } else {\n if (dependencies.length === 0) {\n return Result.error(undefined);\n } else {\n const [key, ...rest] = dependencies;\n const newInner = inner.get(key);\n if (!newInner) {\n return Result.error(undefined);\n }\n return unwrapFromInner(rest, newInner);\n }\n }\n}\nundefined?.test(\"unwrapFromInner\", ({ expect }) => {\n // Test with empty dependencies and non-nested map\n const nonNestedMap = { isNotNestedMap: true, value: \"test\" } as CacheInner;\n const result1 = unwrapFromInner([], nonNestedMap);\n expect(result1.status).toBe(\"ok\");\n if (result1.status === \"ok\") {\n expect(result1.data).toBe(\"test\");\n }\n\n // Test with non-empty dependencies and non-nested map (should error)\n expect(unwrapFromInner([\"key\"], nonNestedMap).status).toBe(\"error\");\n\n // Test with empty dependencies and nested map (should error)\n const nestedMap = new Map([[\"key\", { isNotNestedMap: true, value: \"test\" } as CacheInner]]) as CacheInner;\n expect(unwrapFromInner([], nestedMap).status).toBe(\"error\");\n\n // Test with matching dependencies and nested map\n const result2 = unwrapFromInner([\"key\"], nestedMap);\n expect(result2.status).toBe(\"ok\");\n if (result2.status === \"ok\") {\n expect(result2.data).toBe(\"test\");\n }\n\n // Test with non-matching dependencies and nested map\n expect(unwrapFromInner([\"wrongKey\"], nestedMap).status).toBe(\"error\");\n\n // Test with deeply nested map\n const deeplyNestedMap = new Map([\n [\"key1\", new Map([\n [\"key2\", { isNotNestedMap: true, value: \"nested\" } as CacheInner]\n ]) as CacheInner]\n ]) as CacheInner;\n\n const result3 = unwrapFromInner([\"key1\", \"key2\"], deeplyNestedMap);\n expect(result3.status).toBe(\"ok\");\n if (result3.status === \"ok\") {\n expect(result3.data).toBe(\"nested\");\n }\n\n // Test with partial match in deeply nested map\n expect(unwrapFromInner([\"key1\", \"wrongKey\"], deeplyNestedMap).status).toBe(\"error\");\n});\n\nfunction wrapToInner(dependencies: any[], value: any): CacheInner {\n if (dependencies.length === 0) {\n return { isNotNestedMap: true, value };\n }\n const [key, ...rest] = dependencies;\n const inner = wrapToInner(rest, value);\n\n const isObject = (typeof key === \"object\" && key !== null);\n const isUnregisteredSymbol = (typeof key === \"symbol\" && Symbol.keyFor(key) === undefined);\n const isWeak = isObject || isUnregisteredSymbol;\n const mapType = isWeak ? WeakMap : Map;\n\n return new mapType([[key, inner]]);\n}\nundefined?.test(\"wrapToInner\", ({ expect }) => {\n // Test with empty dependencies\n const emptyResult = wrapToInner([], \"test\");\n expect(emptyResult).toEqual({ isNotNestedMap: true, value: \"test\" });\n\n // Test with single string dependency\n const singleResult = wrapToInner([\"key\"], \"test\");\n expect(singleResult instanceof Map).toBe(true);\n // Need to cast to access Map methods\n const singleMap = singleResult as Map<unknown, CacheInner>;\n expect(singleMap.get(\"key\")).toEqual({ isNotNestedMap: true, value: \"test\" });\n\n // Test with multiple string dependencies\n const multiResult = wrapToInner([\"key1\", \"key2\"], \"test\");\n expect(multiResult instanceof Map).toBe(true);\n // Need to cast to access Map methods\n const multiMap = multiResult as Map<unknown, CacheInner>;\n const innerMap = multiMap.get(\"key1\") as Map<unknown, CacheInner>;\n expect(innerMap instanceof Map).toBe(true);\n expect(innerMap.get(\"key2\")).toEqual({ isNotNestedMap: true, value: \"test\" });\n\n // Test with object dependency (should use WeakMap)\n const obj = { test: true };\n const objResult = wrapToInner([obj], \"test\");\n expect(objResult instanceof WeakMap).toBe(true);\n // Need to cast to access WeakMap methods\n const objMap = objResult as WeakMap<WeakKey, CacheInner>;\n expect(objMap.get(obj)).toEqual({ isNotNestedMap: true, value: \"test\" });\n\n // Test with unregistered symbol dependency (should use WeakMap)\n const symbolObj = Symbol(\"test\");\n const symbolResult = wrapToInner([symbolObj], \"test\");\n expect(symbolResult instanceof WeakMap).toBe(true);\n // Need to cast to access WeakMap methods\n const symbolMap = symbolResult as WeakMap<WeakKey, CacheInner>;\n expect(symbolMap.get(symbolObj as unknown as object)).toEqual({ isNotNestedMap: true, value: \"test\" });\n\n // Test with registered symbol dependency (should use Map)\n const registeredSymbol = Symbol.for(\"test\");\n const registeredSymbolResult = wrapToInner([registeredSymbol], \"test\");\n expect(registeredSymbolResult instanceof Map).toBe(true);\n // Need to cast to access Map methods\n const registeredSymbolMap = registeredSymbolResult as Map<unknown, CacheInner>;\n expect(registeredSymbolMap.get(registeredSymbol)).toEqual({ isNotNestedMap: true, value: \"test\" });\n});\n\n/**\n * Like memo, but minimizes recomputation of the value at all costs (instead of useMemo which recomputes whenever the renderer feels like it).\n *\n * The most recent value will be kept from garbage collection until one of the dependencies becomes unreachable. This may be true even after the component no longer renders. Be wary of memory leaks.\n */\nexport function useStrictMemo<T>(callback: () => T, dependencies: any[]): T {\n const id = useId();\n useInsertionEffect(() => {\n return () => {\n cached.delete(id);\n };\n }, [id]);\n\n const c = cached.get(id);\n if (c) {\n const unwrapped = unwrapFromInner(dependencies, c);\n if (unwrapped.status === \"ok\") {\n return unwrapped.data;\n }\n }\n const value = callback();\n cached.set(id, wrapToInner(dependencies, value));\n return value;\n}\n"],"mappings":";AAAA,SAAS,OAAO,0BAAmC;AACnD,SAAS,cAAc;AAIvB,IAAM,SAAS,oBAAI,IAAwB;AAE3C,SAAS,gBAAgB,cAAqB,OAAsC;AAClF,MAAK,aAAa,WAAW,MAAQ,oBAAoB,OAAQ;AAC/D,WAAO,OAAO,MAAM,MAAS;AAAA,EAC/B;AACA,MAAI,oBAAoB,OAAO;AAC7B,QAAI,aAAa,WAAW,GAAG;AAC7B,aAAO,OAAO,GAAG,MAAM,KAAK;AAAA,IAC9B,OAAO;AACL,aAAO,OAAO,MAAM,MAAS;AAAA,IAC/B;AAAA,EACF,OAAO;AACL,QAAI,aAAa,WAAW,GAAG;AAC7B,aAAO,OAAO,MAAM,MAAS;AAAA,IAC/B,OAAO;AACL,YAAM,CAAC,KAAK,GAAG,IAAI,IAAI;AACvB,YAAM,WAAW,MAAM,IAAI,GAAG;AAC9B,UAAI,CAAC,UAAU;AACb,eAAO,OAAO,MAAM,MAAS;AAAA,MAC/B;AACA,aAAO,gBAAgB,MAAM,QAAQ;AAAA,IACvC;AAAA,EACF;AACF;AA4CA,SAAS,YAAY,cAAqB,OAAwB;AAChE,MAAI,aAAa,WAAW,GAAG;AAC7B,WAAO,EAAE,gBAAgB,MAAM,MAAM;AAAA,EACvC;AACA,QAAM,CAAC,KAAK,GAAG,IAAI,IAAI;AACvB,QAAM,QAAQ,YAAY,MAAM,KAAK;AAErC,QAAM,WAAY,OAAO,QAAQ,YAAY,QAAQ;AACrD,QAAM,uBAAwB,OAAO,QAAQ,YAAY,OAAO,OAAO,GAAG,MAAM;AAChF,QAAM,SAAS,YAAY;AAC3B,QAAM,UAAU,SAAS,UAAU;AAEnC,SAAO,IAAI,QAAQ,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;AACnC;AAoDO,SAAS,cAAiB,UAAmB,cAAwB;AAC1E,QAAM,KAAK,MAAM;AACjB,qBAAmB,MAAM;AACvB,WAAO,MAAM;AACX,aAAO,OAAO,EAAE;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,EAAE,CAAC;AAEP,QAAM,IAAI,OAAO,IAAI,EAAE;AACvB,MAAI,GAAG;AACL,UAAM,YAAY,gBAAgB,cAAc,CAAC;AACjD,QAAI,UAAU,WAAW,MAAM;AAC7B,aAAO,UAAU;AAAA,IACnB;AAAA,EACF;AACA,QAAM,QAAQ,SAAS;AACvB,SAAO,IAAI,IAAI,YAAY,cAAc,KAAK,CAAC;AAC/C,SAAO;AACT;","names":[]}
@@ -0,0 +1,22 @@
1
+ // src/index.ts
2
+ import {
3
+ StackAdminInterface
4
+ } from "./interface/adminInterface";
5
+ import {
6
+ StackClientInterface
7
+ } from "./interface/clientInterface";
8
+ import {
9
+ StackServerInterface
10
+ } from "./interface/serverInterface";
11
+ import {
12
+ KnownError,
13
+ KnownErrors
14
+ } from "./known-errors";
15
+ export {
16
+ KnownError,
17
+ KnownErrors,
18
+ StackAdminInterface,
19
+ StackClientInterface,
20
+ StackServerInterface
21
+ };
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export {\n StackAdminInterface\n} from \"./interface/adminInterface\";\nexport {\n StackClientInterface\n} from \"./interface/clientInterface\";\nexport {\n StackServerInterface\n} from \"./interface/serverInterface\";\nexport {\n KnownError,\n KnownErrors\n} from \"./known-errors\";\n\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OACK;AACP;AAAA,EACE;AAAA,OACK;AACP;AAAA,EACE;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;","names":[]}
@@ -0,0 +1,244 @@
1
+ // src/interface/adminInterface.ts
2
+ import { StackServerInterface } from "./serverInterface";
3
+ var StackAdminInterface = class extends StackServerInterface {
4
+ constructor(options) {
5
+ super(options);
6
+ this.options = options;
7
+ }
8
+ async sendAdminRequest(path, options, session, requestType = "admin") {
9
+ return await this.sendServerRequest(
10
+ path,
11
+ {
12
+ ...options,
13
+ headers: {
14
+ "x-stack-super-secret-admin-key": "superSecretAdminKey" in this.options ? this.options.superSecretAdminKey : "",
15
+ ...options.headers
16
+ }
17
+ },
18
+ session,
19
+ requestType
20
+ );
21
+ }
22
+ async getProject() {
23
+ const response = await this.sendAdminRequest(
24
+ "/internal/projects/current",
25
+ {
26
+ method: "GET"
27
+ },
28
+ null
29
+ );
30
+ return await response.json();
31
+ }
32
+ async updateProject(update) {
33
+ const response = await this.sendAdminRequest(
34
+ "/internal/projects/current",
35
+ {
36
+ method: "PATCH",
37
+ headers: {
38
+ "content-type": "application/json"
39
+ },
40
+ body: JSON.stringify(update)
41
+ },
42
+ null
43
+ );
44
+ return await response.json();
45
+ }
46
+ async createInternalApiKey(options) {
47
+ const response = await this.sendAdminRequest(
48
+ "/internal/api-keys",
49
+ {
50
+ method: "POST",
51
+ headers: {
52
+ "content-type": "application/json"
53
+ },
54
+ body: JSON.stringify(options)
55
+ },
56
+ null
57
+ );
58
+ return await response.json();
59
+ }
60
+ async listInternalApiKeys() {
61
+ const response = await this.sendAdminRequest("/internal/api-keys", {}, null);
62
+ const result = await response.json();
63
+ return result.items;
64
+ }
65
+ async revokeInternalApiKeyById(id) {
66
+ await this.sendAdminRequest(
67
+ `/internal/api-keys/${id}`,
68
+ {
69
+ method: "PATCH",
70
+ headers: {
71
+ "content-type": "application/json"
72
+ },
73
+ body: JSON.stringify({
74
+ revoked: true
75
+ })
76
+ },
77
+ null
78
+ );
79
+ }
80
+ async getInternalApiKey(id, session) {
81
+ const response = await this.sendAdminRequest(`/internal/api-keys/${id}`, {}, session);
82
+ return await response.json();
83
+ }
84
+ async listEmailTemplates() {
85
+ const response = await this.sendAdminRequest(`/email-templates`, {}, null);
86
+ const result = await response.json();
87
+ return result.items;
88
+ }
89
+ async updateEmailTemplate(type, data) {
90
+ const result = await this.sendAdminRequest(
91
+ `/email-templates/${type}`,
92
+ {
93
+ method: "PATCH",
94
+ headers: {
95
+ "content-type": "application/json"
96
+ },
97
+ body: JSON.stringify(data)
98
+ },
99
+ null
100
+ );
101
+ return await result.json();
102
+ }
103
+ async resetEmailTemplate(type) {
104
+ await this.sendAdminRequest(
105
+ `/email-templates/${type}`,
106
+ { method: "DELETE" },
107
+ null
108
+ );
109
+ }
110
+ // Team permission definitions methods
111
+ async listTeamPermissionDefinitions() {
112
+ const response = await this.sendAdminRequest(`/team-permission-definitions`, {}, null);
113
+ const result = await response.json();
114
+ return result.items;
115
+ }
116
+ async createTeamPermissionDefinition(data) {
117
+ const response = await this.sendAdminRequest(
118
+ "/team-permission-definitions",
119
+ {
120
+ method: "POST",
121
+ headers: {
122
+ "content-type": "application/json"
123
+ },
124
+ body: JSON.stringify(data)
125
+ },
126
+ null
127
+ );
128
+ return await response.json();
129
+ }
130
+ async updateTeamPermissionDefinition(permissionId, data) {
131
+ const response = await this.sendAdminRequest(
132
+ `/team-permission-definitions/${permissionId}`,
133
+ {
134
+ method: "PATCH",
135
+ headers: {
136
+ "content-type": "application/json"
137
+ },
138
+ body: JSON.stringify(data)
139
+ },
140
+ null
141
+ );
142
+ return await response.json();
143
+ }
144
+ async deleteTeamPermissionDefinition(permissionId) {
145
+ await this.sendAdminRequest(
146
+ `/team-permission-definitions/${permissionId}`,
147
+ { method: "DELETE" },
148
+ null
149
+ );
150
+ }
151
+ async listProjectPermissionDefinitions() {
152
+ const response = await this.sendAdminRequest(`/project-permission-definitions`, {}, null);
153
+ const result = await response.json();
154
+ return result.items;
155
+ }
156
+ async createProjectPermissionDefinition(data) {
157
+ const response = await this.sendAdminRequest(
158
+ "/project-permission-definitions",
159
+ {
160
+ method: "POST",
161
+ headers: {
162
+ "content-type": "application/json"
163
+ },
164
+ body: JSON.stringify(data)
165
+ },
166
+ null
167
+ );
168
+ return await response.json();
169
+ }
170
+ async updateProjectPermissionDefinition(permissionId, data) {
171
+ const response = await this.sendAdminRequest(
172
+ `/project-permission-definitions/${permissionId}`,
173
+ {
174
+ method: "PATCH",
175
+ headers: {
176
+ "content-type": "application/json"
177
+ },
178
+ body: JSON.stringify(data)
179
+ },
180
+ null
181
+ );
182
+ return await response.json();
183
+ }
184
+ async deleteProjectPermissionDefinition(permissionId) {
185
+ await this.sendAdminRequest(
186
+ `/project-permission-definitions/${permissionId}`,
187
+ { method: "DELETE" },
188
+ null
189
+ );
190
+ }
191
+ async getSvixToken() {
192
+ const response = await this.sendAdminRequest(
193
+ "/webhooks/svix-token",
194
+ {
195
+ method: "POST",
196
+ headers: {
197
+ "content-type": "application/json"
198
+ },
199
+ body: JSON.stringify({})
200
+ },
201
+ null
202
+ );
203
+ return await response.json();
204
+ }
205
+ async deleteProject() {
206
+ await this.sendAdminRequest(
207
+ "/internal/projects/current",
208
+ {
209
+ method: "DELETE"
210
+ },
211
+ null
212
+ );
213
+ }
214
+ async getMetrics() {
215
+ const response = await this.sendAdminRequest(
216
+ "/internal/metrics",
217
+ {
218
+ method: "GET"
219
+ },
220
+ null
221
+ );
222
+ return await response.json();
223
+ }
224
+ async sendTestEmail(data) {
225
+ const response = await this.sendAdminRequest(`/internal/send-test-email`, {
226
+ method: "POST",
227
+ headers: {
228
+ "content-type": "application/json"
229
+ },
230
+ body: JSON.stringify(data)
231
+ }, null);
232
+ return await response.json();
233
+ }
234
+ async listSentEmails() {
235
+ const response = await this.sendAdminRequest("/internal/emails", {
236
+ method: "GET"
237
+ }, null);
238
+ return await response.json();
239
+ }
240
+ };
241
+ export {
242
+ StackAdminInterface
243
+ };
244
+ //# sourceMappingURL=adminInterface.js.map