@stackframe/stack 2.7.20 → 2.7.22

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 (250) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/admin-app-impl-CTQhv9tV.d.ts +395 -0
  3. package/dist/admin-app-impl-DpyRKp1e.d.mts +395 -0
  4. package/dist/components/credential-sign-in.js.map +1 -1
  5. package/dist/components/credential-sign-up.js.map +1 -1
  6. package/dist/components/elements/form-warning.js.map +1 -1
  7. package/dist/components/elements/maybe-full-page.js.map +1 -1
  8. package/dist/components/elements/separator-with-text.js.map +1 -1
  9. package/dist/components/elements/sidebar-layout.js.map +1 -1
  10. package/dist/components/elements/ssr-layout-effect.js.map +1 -1
  11. package/dist/components/elements/user-avatar.js.map +1 -1
  12. package/dist/components/iframe-preventer.js.map +1 -1
  13. package/dist/components/link.js.map +1 -1
  14. package/dist/components/magic-link-sign-in.js.map +1 -1
  15. package/dist/components/message-cards/known-error-message-card.js.map +1 -1
  16. package/dist/components/message-cards/message-card.js.map +1 -1
  17. package/dist/components/message-cards/predefined-message-card.js.map +1 -1
  18. package/dist/components/oauth-button-group.js.map +1 -1
  19. package/dist/components/oauth-button.js.map +1 -1
  20. package/dist/components/passkey-button.js.map +1 -1
  21. package/dist/components/profile-image-editor.js.map +1 -1
  22. package/dist/components/selected-team-switcher.d.mts +18 -6
  23. package/dist/components/selected-team-switcher.d.ts +18 -6
  24. package/dist/components/selected-team-switcher.js.map +1 -1
  25. package/dist/components/team-icon.d.mts +18 -6
  26. package/dist/components/team-icon.d.ts +18 -6
  27. package/dist/components/team-icon.js.map +1 -1
  28. package/dist/components/user-button.js.map +1 -1
  29. package/dist/components-page/account-settings.js.map +1 -1
  30. package/dist/components-page/auth-page.js.map +1 -1
  31. package/dist/components-page/email-verification.js.map +1 -1
  32. package/dist/components-page/error-page.js.map +1 -1
  33. package/dist/components-page/forgot-password.js.map +1 -1
  34. package/dist/components-page/magic-link-callback.js.map +1 -1
  35. package/dist/components-page/oauth-callback.js.map +1 -1
  36. package/dist/components-page/password-reset.js.map +1 -1
  37. package/dist/components-page/sign-in.js.map +1 -1
  38. package/dist/components-page/sign-out.js.map +1 -1
  39. package/dist/components-page/sign-up.js.map +1 -1
  40. package/dist/components-page/stack-handler.d.mts +18 -6
  41. package/dist/components-page/stack-handler.d.ts +18 -6
  42. package/dist/components-page/stack-handler.js.map +1 -1
  43. package/dist/components-page/team-creation.js.map +1 -1
  44. package/dist/components-page/team-invitation.js.map +1 -1
  45. package/dist/esm/components/credential-sign-in.js.map +1 -1
  46. package/dist/esm/components/credential-sign-up.js.map +1 -1
  47. package/dist/esm/components/elements/form-warning.js.map +1 -1
  48. package/dist/esm/components/elements/maybe-full-page.js.map +1 -1
  49. package/dist/esm/components/elements/separator-with-text.js.map +1 -1
  50. package/dist/esm/components/elements/sidebar-layout.js.map +1 -1
  51. package/dist/esm/components/elements/ssr-layout-effect.js.map +1 -1
  52. package/dist/esm/components/elements/user-avatar.js.map +1 -1
  53. package/dist/esm/components/iframe-preventer.js.map +1 -1
  54. package/dist/esm/components/link.js.map +1 -1
  55. package/dist/esm/components/magic-link-sign-in.js.map +1 -1
  56. package/dist/esm/components/message-cards/known-error-message-card.js.map +1 -1
  57. package/dist/esm/components/message-cards/message-card.js.map +1 -1
  58. package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
  59. package/dist/esm/components/oauth-button-group.js.map +1 -1
  60. package/dist/esm/components/oauth-button.js.map +1 -1
  61. package/dist/esm/components/passkey-button.js.map +1 -1
  62. package/dist/esm/components/profile-image-editor.js.map +1 -1
  63. package/dist/esm/components/selected-team-switcher.js.map +1 -1
  64. package/dist/esm/components/team-icon.js.map +1 -1
  65. package/dist/esm/components/user-button.js.map +1 -1
  66. package/dist/esm/components-page/account-settings.js.map +1 -1
  67. package/dist/esm/components-page/auth-page.js.map +1 -1
  68. package/dist/esm/components-page/email-verification.js.map +1 -1
  69. package/dist/esm/components-page/error-page.js.map +1 -1
  70. package/dist/esm/components-page/forgot-password.js.map +1 -1
  71. package/dist/esm/components-page/magic-link-callback.js.map +1 -1
  72. package/dist/esm/components-page/oauth-callback.js.map +1 -1
  73. package/dist/esm/components-page/password-reset.js.map +1 -1
  74. package/dist/esm/components-page/sign-in.js.map +1 -1
  75. package/dist/esm/components-page/sign-out.js.map +1 -1
  76. package/dist/esm/components-page/sign-up.js.map +1 -1
  77. package/dist/esm/components-page/stack-handler.js.map +1 -1
  78. package/dist/esm/components-page/team-creation.js.map +1 -1
  79. package/dist/esm/components-page/team-invitation.js.map +1 -1
  80. package/dist/esm/generated/quetzal-translations.js.map +1 -1
  81. package/dist/esm/index.js.map +1 -1
  82. package/dist/esm/lib/auth.js.map +1 -1
  83. package/dist/esm/lib/cookie.js +4 -7
  84. package/dist/esm/lib/cookie.js.map +1 -1
  85. package/dist/esm/lib/hooks.js.map +1 -1
  86. package/dist/esm/lib/stack-app/api-keys/index.js +14 -0
  87. package/dist/esm/lib/stack-app/api-keys/index.js.map +1 -0
  88. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js +291 -0
  89. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -0
  90. package/dist/esm/lib/{stack-app.js → stack-app/apps/implementations/client-app-impl.js} +39 -1111
  91. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -0
  92. package/dist/esm/lib/stack-app/apps/implementations/common.js +142 -0
  93. package/dist/esm/lib/stack-app/apps/implementations/common.js.map +1 -0
  94. package/dist/esm/lib/stack-app/apps/implementations/index.js +24 -0
  95. package/dist/esm/lib/stack-app/apps/implementations/index.js.map +1 -0
  96. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js +527 -0
  97. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -0
  98. package/dist/esm/lib/stack-app/apps/index.js +16 -0
  99. package/dist/esm/lib/stack-app/apps/index.js.map +1 -0
  100. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js +7 -0
  101. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js.map +1 -0
  102. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js +7 -0
  103. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js.map +1 -0
  104. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js +7 -0
  105. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js.map +1 -0
  106. package/dist/esm/lib/stack-app/common.js +6 -0
  107. package/dist/esm/lib/stack-app/common.js.map +1 -0
  108. package/dist/esm/lib/stack-app/connected-accounts/index.js +1 -0
  109. package/dist/esm/lib/stack-app/connected-accounts/index.js.map +1 -0
  110. package/dist/esm/lib/stack-app/contact-channels/index.js +39 -0
  111. package/dist/esm/lib/stack-app/contact-channels/index.js.map +1 -0
  112. package/dist/esm/lib/stack-app/email-templates/index.js +11 -0
  113. package/dist/esm/lib/stack-app/email-templates/index.js.map +1 -0
  114. package/dist/esm/lib/stack-app/index.js +16 -0
  115. package/dist/esm/lib/stack-app/index.js.map +1 -0
  116. package/dist/esm/lib/stack-app/permissions/index.js +20 -0
  117. package/dist/esm/lib/stack-app/permissions/index.js.map +1 -0
  118. package/dist/esm/lib/stack-app/project-configs/index.js +1 -0
  119. package/dist/esm/lib/stack-app/project-configs/index.js.map +1 -0
  120. package/dist/esm/lib/stack-app/projects/index.js +57 -0
  121. package/dist/esm/lib/stack-app/projects/index.js.map +1 -0
  122. package/dist/esm/lib/stack-app/teams/index.js +38 -0
  123. package/dist/esm/lib/stack-app/teams/index.js.map +1 -0
  124. package/dist/esm/lib/stack-app/users/index.js +47 -0
  125. package/dist/esm/lib/stack-app/users/index.js.map +1 -0
  126. package/dist/esm/lib/translations.js.map +1 -1
  127. package/dist/esm/providers/stack-provider-client.js.map +1 -1
  128. package/dist/esm/providers/stack-provider.js.map +1 -1
  129. package/dist/esm/providers/theme-provider.js.map +1 -1
  130. package/dist/esm/providers/translation-provider-client.js.map +1 -1
  131. package/dist/esm/providers/translation-provider.js.map +1 -1
  132. package/dist/esm/utils/browser-script.js.map +1 -1
  133. package/dist/esm/utils/constants.js.map +1 -1
  134. package/dist/esm/utils/url.js +4 -13
  135. package/dist/esm/utils/url.js.map +1 -1
  136. package/dist/generated/quetzal-translations.d.mts +2 -2
  137. package/dist/generated/quetzal-translations.d.ts +2 -2
  138. package/dist/generated/quetzal-translations.js.map +1 -1
  139. package/dist/{lib/stack-app.d.mts → index-C7D6Vt7X.d.mts} +139 -354
  140. package/dist/{lib/stack-app.d.ts → index-DQk7XJpU.d.ts} +139 -354
  141. package/dist/index.d.mts +17 -5
  142. package/dist/index.d.ts +17 -5
  143. package/dist/index.js.map +1 -1
  144. package/dist/lib/auth.js.map +1 -1
  145. package/dist/lib/cookie.d.mts +2 -2
  146. package/dist/lib/cookie.d.ts +2 -2
  147. package/dist/lib/cookie.js +5 -8
  148. package/dist/lib/cookie.js.map +1 -1
  149. package/dist/lib/hooks.d.mts +17 -5
  150. package/dist/lib/hooks.d.ts +17 -5
  151. package/dist/lib/hooks.js.map +1 -1
  152. package/dist/lib/stack-app/api-keys/index.d.mts +40 -0
  153. package/dist/lib/stack-app/api-keys/index.d.ts +40 -0
  154. package/dist/lib/stack-app/api-keys/index.js +39 -0
  155. package/dist/lib/stack-app/api-keys/index.js.map +1 -0
  156. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.mts +30 -0
  157. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts +30 -0
  158. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js +316 -0
  159. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -0
  160. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.mts +30 -0
  161. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts +30 -0
  162. package/dist/lib/{stack-app.js → stack-app/apps/implementations/client-app-impl.js} +77 -1154
  163. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -0
  164. package/dist/lib/stack-app/apps/implementations/common.d.mts +45 -0
  165. package/dist/lib/stack-app/apps/implementations/common.d.ts +45 -0
  166. package/dist/lib/stack-app/apps/implementations/common.js +187 -0
  167. package/dist/lib/stack-app/apps/implementations/common.js.map +1 -0
  168. package/dist/lib/stack-app/apps/implementations/index.d.mts +36 -0
  169. package/dist/lib/stack-app/apps/implementations/index.d.ts +36 -0
  170. package/dist/lib/stack-app/apps/implementations/index.js +51 -0
  171. package/dist/lib/stack-app/apps/implementations/index.js.map +1 -0
  172. package/dist/lib/stack-app/apps/implementations/server-app-impl.d.mts +30 -0
  173. package/dist/lib/stack-app/apps/implementations/server-app-impl.d.ts +30 -0
  174. package/dist/lib/stack-app/apps/implementations/server-app-impl.js +552 -0
  175. package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -0
  176. package/dist/lib/stack-app/apps/index.d.mts +23 -0
  177. package/dist/lib/stack-app/apps/index.d.ts +23 -0
  178. package/dist/lib/stack-app/apps/index.js +37 -0
  179. package/dist/lib/stack-app/apps/index.js.map +1 -0
  180. package/dist/lib/stack-app/apps/interfaces/admin-app.d.mts +23 -0
  181. package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts +23 -0
  182. package/dist/lib/stack-app/apps/interfaces/admin-app.js +32 -0
  183. package/dist/lib/stack-app/apps/interfaces/admin-app.js.map +1 -0
  184. package/dist/lib/stack-app/apps/interfaces/client-app.d.mts +23 -0
  185. package/dist/lib/stack-app/apps/interfaces/client-app.d.ts +23 -0
  186. package/dist/lib/stack-app/apps/interfaces/client-app.js +32 -0
  187. package/dist/lib/stack-app/apps/interfaces/client-app.js.map +1 -0
  188. package/dist/lib/stack-app/apps/interfaces/server-app.d.mts +23 -0
  189. package/dist/lib/stack-app/apps/interfaces/server-app.d.ts +23 -0
  190. package/dist/lib/stack-app/apps/interfaces/server-app.js +32 -0
  191. package/dist/lib/stack-app/apps/interfaces/server-app.js.map +1 -0
  192. package/dist/lib/stack-app/common.d.mts +63 -0
  193. package/dist/lib/stack-app/common.d.ts +63 -0
  194. package/dist/lib/stack-app/common.js +31 -0
  195. package/dist/lib/stack-app/common.js.map +1 -0
  196. package/dist/lib/stack-app/connected-accounts/index.d.mts +13 -0
  197. package/dist/lib/stack-app/connected-accounts/index.d.ts +13 -0
  198. package/dist/lib/stack-app/connected-accounts/index.js +19 -0
  199. package/dist/lib/stack-app/connected-accounts/index.js.map +1 -0
  200. package/dist/lib/stack-app/contact-channels/index.d.mts +38 -0
  201. package/dist/lib/stack-app/contact-channels/index.d.ts +38 -0
  202. package/dist/lib/stack-app/contact-channels/index.js +67 -0
  203. package/dist/lib/stack-app/contact-channels/index.js.map +1 -0
  204. package/dist/lib/stack-app/email-templates/index.d.mts +15 -0
  205. package/dist/lib/stack-app/email-templates/index.d.ts +15 -0
  206. package/dist/lib/stack-app/email-templates/index.js +36 -0
  207. package/dist/lib/stack-app/email-templates/index.js.map +1 -0
  208. package/dist/lib/stack-app/index.d.mts +23 -0
  209. package/dist/lib/stack-app/index.d.ts +23 -0
  210. package/dist/lib/stack-app/index.js +38 -0
  211. package/dist/lib/stack-app/index.js.map +1 -0
  212. package/dist/lib/stack-app/permissions/index.d.mts +21 -0
  213. package/dist/lib/stack-app/permissions/index.d.ts +21 -0
  214. package/dist/lib/stack-app/permissions/index.js +46 -0
  215. package/dist/lib/stack-app/permissions/index.js.map +1 -0
  216. package/dist/lib/stack-app/project-configs/index.d.mts +82 -0
  217. package/dist/lib/stack-app/project-configs/index.d.ts +82 -0
  218. package/dist/lib/stack-app/project-configs/index.js +19 -0
  219. package/dist/lib/stack-app/project-configs/index.js.map +1 -0
  220. package/dist/lib/stack-app/projects/index.d.mts +23 -0
  221. package/dist/lib/stack-app/projects/index.d.ts +23 -0
  222. package/dist/lib/stack-app/projects/index.js +83 -0
  223. package/dist/lib/stack-app/projects/index.js.map +1 -0
  224. package/dist/lib/stack-app/teams/index.d.mts +23 -0
  225. package/dist/lib/stack-app/teams/index.d.ts +23 -0
  226. package/dist/lib/stack-app/teams/index.js +66 -0
  227. package/dist/lib/stack-app/teams/index.js.map +1 -0
  228. package/dist/lib/stack-app/users/index.d.mts +23 -0
  229. package/dist/lib/stack-app/users/index.d.ts +23 -0
  230. package/dist/lib/stack-app/users/index.js +74 -0
  231. package/dist/lib/stack-app/users/index.js.map +1 -0
  232. package/dist/lib/translations.js.map +1 -1
  233. package/dist/providers/stack-provider-client.d.mts +17 -5
  234. package/dist/providers/stack-provider-client.d.ts +17 -5
  235. package/dist/providers/stack-provider-client.js.map +1 -1
  236. package/dist/providers/stack-provider.d.mts +18 -6
  237. package/dist/providers/stack-provider.d.ts +18 -6
  238. package/dist/providers/stack-provider.js.map +1 -1
  239. package/dist/providers/theme-provider.js.map +1 -1
  240. package/dist/providers/translation-provider-client.js.map +1 -1
  241. package/dist/providers/translation-provider.js.map +1 -1
  242. package/dist/utils/browser-script.js.map +1 -1
  243. package/dist/utils/constants.js.map +1 -1
  244. package/dist/utils/url.d.mts +1 -2
  245. package/dist/utils/url.d.ts +1 -2
  246. package/dist/utils/url.js +4 -14
  247. package/dist/utils/url.js.map +1 -1
  248. package/package.json +4 -4
  249. package/dist/esm/lib/stack-app.js.map +0 -1
  250. package/dist/lib/stack-app.js.map +0 -1
@@ -0,0 +1,291 @@
1
+ // src/lib/stack-app/apps/implementations/admin-app-impl.ts
2
+ import { StackAdminInterface } from "@stackframe/stack-shared";
3
+ import { getProductionModeErrors } from "@stackframe/stack-shared/dist/helpers/production-mode";
4
+ import { StackAssertionError, throwErr } from "@stackframe/stack-shared/dist/utils/errors";
5
+ import { pick } from "@stackframe/stack-shared/dist/utils/objects";
6
+ import { Result } from "@stackframe/stack-shared/dist/utils/results";
7
+ import { useMemo } from "react";
8
+ import { apiKeyCreateOptionsToCrud } from "../../api-keys";
9
+ import { stackAppInternalsSymbol } from "../../common";
10
+ import { adminEmailTemplateUpdateOptionsToCrud } from "../../email-templates";
11
+ import { adminTeamPermissionDefinitionCreateOptionsToCrud, adminTeamPermissionDefinitionUpdateOptionsToCrud } from "../../permissions";
12
+ import { adminProjectUpdateOptionsToCrud } from "../../projects";
13
+ import { clientVersion, createCache, getBaseUrl, getDefaultProjectId, getDefaultPublishableClientKey, getDefaultSecretServerKey, getDefaultSuperSecretAdminKey } from "./common";
14
+ import { useAsyncCache } from "./common";
15
+ import { _StackServerAppImplIncomplete } from "./server-app-impl";
16
+ var _StackAdminAppImplIncomplete = class extends _StackServerAppImplIncomplete {
17
+ constructor(options) {
18
+ super({
19
+ interface: new StackAdminInterface({
20
+ getBaseUrl: () => getBaseUrl(options.baseUrl),
21
+ projectId: options.projectId ?? getDefaultProjectId(),
22
+ clientVersion,
23
+ ..."projectOwnerSession" in options ? {
24
+ projectOwnerSession: options.projectOwnerSession
25
+ } : {
26
+ publishableClientKey: options.publishableClientKey ?? getDefaultPublishableClientKey(),
27
+ secretServerKey: options.secretServerKey ?? getDefaultSecretServerKey(),
28
+ superSecretAdminKey: options.superSecretAdminKey ?? getDefaultSuperSecretAdminKey()
29
+ }
30
+ }),
31
+ baseUrl: options.baseUrl,
32
+ projectId: options.projectId,
33
+ tokenStore: options.tokenStore,
34
+ urls: options.urls,
35
+ oauthScopesOnSignIn: options.oauthScopesOnSignIn,
36
+ redirectMethod: options.redirectMethod
37
+ });
38
+ this._adminProjectCache = createCache(async () => {
39
+ return await this._interface.getProject();
40
+ });
41
+ this._apiKeysCache = createCache(async () => {
42
+ return await this._interface.listApiKeys();
43
+ });
44
+ this._adminEmailTemplatesCache = createCache(async () => {
45
+ return await this._interface.listEmailTemplates();
46
+ });
47
+ this._adminTeamPermissionDefinitionsCache = createCache(async () => {
48
+ return await this._interface.listPermissionDefinitions();
49
+ });
50
+ this._svixTokenCache = createCache(async () => {
51
+ return await this._interface.getSvixToken();
52
+ });
53
+ this._metricsCache = createCache(async () => {
54
+ return await this._interface.getMetrics();
55
+ });
56
+ }
57
+ _adminOwnedProjectFromCrud(data, onRefresh) {
58
+ if (this._tokenStoreInit !== null) {
59
+ throw new StackAssertionError("Owned apps must always have tokenStore === null \u2014 did you not create this project with app._createOwnedApp()?");
60
+ ;
61
+ }
62
+ return {
63
+ ...this._adminProjectFromCrud(data, onRefresh),
64
+ app: this
65
+ };
66
+ }
67
+ _adminProjectFromCrud(data, onRefresh) {
68
+ if (data.id !== this.projectId) {
69
+ throw new StackAssertionError(`The project ID of the provided project JSON (${data.id}) does not match the project ID of the app (${this.projectId})!`);
70
+ }
71
+ const app = this;
72
+ return {
73
+ id: data.id,
74
+ displayName: data.display_name,
75
+ description: data.description,
76
+ createdAt: new Date(data.created_at_millis),
77
+ userCount: data.user_count,
78
+ isProductionMode: data.is_production_mode,
79
+ config: {
80
+ id: data.config.id,
81
+ signUpEnabled: data.config.sign_up_enabled,
82
+ credentialEnabled: data.config.credential_enabled,
83
+ magicLinkEnabled: data.config.magic_link_enabled,
84
+ passkeyEnabled: data.config.passkey_enabled,
85
+ clientTeamCreationEnabled: data.config.client_team_creation_enabled,
86
+ clientUserDeletionEnabled: data.config.client_user_deletion_enabled,
87
+ allowLocalhost: data.config.allow_localhost,
88
+ oauthProviders: data.config.oauth_providers.map((p) => p.type === "shared" ? {
89
+ id: p.id,
90
+ enabled: p.enabled,
91
+ type: "shared"
92
+ } : {
93
+ id: p.id,
94
+ enabled: p.enabled,
95
+ type: "standard",
96
+ clientId: p.client_id ?? throwErr("Client ID is missing"),
97
+ clientSecret: p.client_secret ?? throwErr("Client secret is missing"),
98
+ facebookConfigId: p.facebook_config_id,
99
+ microsoftTenantId: p.microsoft_tenant_id
100
+ }),
101
+ emailConfig: data.config.email_config.type === "shared" ? {
102
+ type: "shared"
103
+ } : {
104
+ type: "standard",
105
+ host: data.config.email_config.host ?? throwErr("Email host is missing"),
106
+ port: data.config.email_config.port ?? throwErr("Email port is missing"),
107
+ username: data.config.email_config.username ?? throwErr("Email username is missing"),
108
+ password: data.config.email_config.password ?? throwErr("Email password is missing"),
109
+ senderName: data.config.email_config.sender_name ?? throwErr("Email sender name is missing"),
110
+ senderEmail: data.config.email_config.sender_email ?? throwErr("Email sender email is missing")
111
+ },
112
+ domains: data.config.domains.map((d) => ({
113
+ domain: d.domain,
114
+ handlerPath: d.handler_path
115
+ })),
116
+ createTeamOnSignUp: data.config.create_team_on_sign_up,
117
+ teamCreatorDefaultPermissions: data.config.team_creator_default_permissions,
118
+ teamMemberDefaultPermissions: data.config.team_member_default_permissions
119
+ },
120
+ async update(update) {
121
+ await app._interface.updateProject(adminProjectUpdateOptionsToCrud(update));
122
+ await onRefresh();
123
+ },
124
+ async delete() {
125
+ await app._interface.deleteProject();
126
+ },
127
+ async getProductionModeErrors() {
128
+ return getProductionModeErrors(data);
129
+ },
130
+ useProductionModeErrors() {
131
+ return getProductionModeErrors(data);
132
+ }
133
+ };
134
+ }
135
+ _adminEmailTemplateFromCrud(data) {
136
+ return {
137
+ type: data.type,
138
+ subject: data.subject,
139
+ content: data.content,
140
+ isDefault: data.is_default
141
+ };
142
+ }
143
+ async getProject() {
144
+ return this._adminProjectFromCrud(
145
+ Result.orThrow(await this._adminProjectCache.getOrWait([], "write-only")),
146
+ () => this._refreshProject()
147
+ );
148
+ }
149
+ useProject() {
150
+ const crud = useAsyncCache(this._adminProjectCache, [], "useProjectAdmin()");
151
+ return useMemo(() => this._adminProjectFromCrud(
152
+ crud,
153
+ () => this._refreshProject()
154
+ ), [crud]);
155
+ }
156
+ _createApiKeyBaseFromCrud(data) {
157
+ const app = this;
158
+ return {
159
+ id: data.id,
160
+ description: data.description,
161
+ expiresAt: new Date(data.expires_at_millis),
162
+ manuallyRevokedAt: data.manually_revoked_at_millis ? new Date(data.manually_revoked_at_millis) : null,
163
+ createdAt: new Date(data.created_at_millis),
164
+ isValid() {
165
+ return this.whyInvalid() === null;
166
+ },
167
+ whyInvalid() {
168
+ if (this.expiresAt.getTime() < Date.now()) return "expired";
169
+ if (this.manuallyRevokedAt) return "manually-revoked";
170
+ return null;
171
+ },
172
+ async revoke() {
173
+ const res = await app._interface.revokeApiKeyById(data.id);
174
+ await app._refreshApiKeys();
175
+ return res;
176
+ }
177
+ };
178
+ }
179
+ _createApiKeyFromCrud(data) {
180
+ return {
181
+ ...this._createApiKeyBaseFromCrud(data),
182
+ publishableClientKey: data.publishable_client_key ? { lastFour: data.publishable_client_key.last_four } : null,
183
+ secretServerKey: data.secret_server_key ? { lastFour: data.secret_server_key.last_four } : null,
184
+ superSecretAdminKey: data.super_secret_admin_key ? { lastFour: data.super_secret_admin_key.last_four } : null
185
+ };
186
+ }
187
+ _createApiKeyFirstViewFromCrud(data) {
188
+ return {
189
+ ...this._createApiKeyBaseFromCrud(data),
190
+ publishableClientKey: data.publishable_client_key,
191
+ secretServerKey: data.secret_server_key,
192
+ superSecretAdminKey: data.super_secret_admin_key
193
+ };
194
+ }
195
+ async listApiKeys() {
196
+ const crud = Result.orThrow(await this._apiKeysCache.getOrWait([], "write-only"));
197
+ return crud.map((j) => this._createApiKeyFromCrud(j));
198
+ }
199
+ useApiKeys() {
200
+ const crud = useAsyncCache(this._apiKeysCache, [], "useApiKeys()");
201
+ return useMemo(() => {
202
+ return crud.map((j) => this._createApiKeyFromCrud(j));
203
+ }, [crud]);
204
+ }
205
+ async createApiKey(options) {
206
+ const crud = await this._interface.createApiKey(apiKeyCreateOptionsToCrud(options));
207
+ await this._refreshApiKeys();
208
+ return this._createApiKeyFirstViewFromCrud(crud);
209
+ }
210
+ useEmailTemplates() {
211
+ const crud = useAsyncCache(this._adminEmailTemplatesCache, [], "useEmailTemplates()");
212
+ return useMemo(() => {
213
+ return crud.map((j) => this._adminEmailTemplateFromCrud(j));
214
+ }, [crud]);
215
+ }
216
+ async listEmailTemplates() {
217
+ const crud = Result.orThrow(await this._adminEmailTemplatesCache.getOrWait([], "write-only"));
218
+ return crud.map((j) => this._adminEmailTemplateFromCrud(j));
219
+ }
220
+ async updateEmailTemplate(type, data) {
221
+ await this._interface.updateEmailTemplate(type, adminEmailTemplateUpdateOptionsToCrud(data));
222
+ await this._adminEmailTemplatesCache.refresh([]);
223
+ }
224
+ async resetEmailTemplate(type) {
225
+ await this._interface.resetEmailTemplate(type);
226
+ await this._adminEmailTemplatesCache.refresh([]);
227
+ }
228
+ async createTeamPermissionDefinition(data) {
229
+ const crud = await this._interface.createPermissionDefinition(adminTeamPermissionDefinitionCreateOptionsToCrud(data));
230
+ await this._adminTeamPermissionDefinitionsCache.refresh([]);
231
+ return this._serverTeamPermissionDefinitionFromCrud(crud);
232
+ }
233
+ async updateTeamPermissionDefinition(permissionId, data) {
234
+ await this._interface.updatePermissionDefinition(permissionId, adminTeamPermissionDefinitionUpdateOptionsToCrud(data));
235
+ await this._adminTeamPermissionDefinitionsCache.refresh([]);
236
+ }
237
+ async deleteTeamPermissionDefinition(permissionId) {
238
+ await this._interface.deletePermissionDefinition(permissionId);
239
+ await this._adminTeamPermissionDefinitionsCache.refresh([]);
240
+ }
241
+ async listTeamPermissionDefinitions() {
242
+ const crud = Result.orThrow(await this._adminTeamPermissionDefinitionsCache.getOrWait([], "write-only"));
243
+ return crud.map((p) => this._serverTeamPermissionDefinitionFromCrud(p));
244
+ }
245
+ useTeamPermissionDefinitions() {
246
+ const crud = useAsyncCache(this._adminTeamPermissionDefinitionsCache, [], "usePermissions()");
247
+ return useMemo(() => {
248
+ return crud.map((p) => this._serverTeamPermissionDefinitionFromCrud(p));
249
+ }, [crud]);
250
+ }
251
+ useSvixToken() {
252
+ const crud = useAsyncCache(this._svixTokenCache, [], "useSvixToken()");
253
+ return crud.token;
254
+ }
255
+ async _refreshProject() {
256
+ await Promise.all([
257
+ super._refreshProject(),
258
+ this._adminProjectCache.refresh([])
259
+ ]);
260
+ }
261
+ async _refreshApiKeys() {
262
+ await this._apiKeysCache.refresh([]);
263
+ }
264
+ get [stackAppInternalsSymbol]() {
265
+ return {
266
+ ...super[stackAppInternalsSymbol],
267
+ useMetrics: () => {
268
+ return useAsyncCache(this._metricsCache, [], "useMetrics()");
269
+ }
270
+ };
271
+ }
272
+ async sendTestEmail(options) {
273
+ const response = await this._interface.sendTestEmail({
274
+ recipient_email: options.recipientEmail,
275
+ email_config: {
276
+ ...pick(options.emailConfig, ["host", "port", "username", "password"]),
277
+ sender_email: options.emailConfig.senderEmail,
278
+ sender_name: options.emailConfig.senderName
279
+ }
280
+ });
281
+ if (response.success) {
282
+ return Result.ok(void 0);
283
+ } else {
284
+ return Result.error({ errorMessage: response.error_message ?? throwErr("Email test error not specified") });
285
+ }
286
+ }
287
+ };
288
+ export {
289
+ _StackAdminAppImplIncomplete
290
+ };
291
+ //# sourceMappingURL=admin-app-impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/lib/stack-app/apps/implementations/admin-app-impl.ts"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\nimport { StackAdminInterface } from \"@stackframe/stack-shared\";\nimport { getProductionModeErrors } from \"@stackframe/stack-shared/dist/helpers/production-mode\";\nimport { ApiKeyCreateCrudResponse } from \"@stackframe/stack-shared/dist/interface/adminInterface\";\nimport { ApiKeysCrud } from \"@stackframe/stack-shared/dist/interface/crud/api-keys\";\nimport { EmailTemplateCrud, EmailTemplateType } from \"@stackframe/stack-shared/dist/interface/crud/email-templates\";\nimport { InternalProjectsCrud } from \"@stackframe/stack-shared/dist/interface/crud/projects\";\nimport { StackAssertionError, throwErr } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { pick } from \"@stackframe/stack-shared/dist/utils/objects\";\nimport { Result } from \"@stackframe/stack-shared/dist/utils/results\";\nimport { useMemo } from \"react\";\nimport { ApiKey, ApiKeyBase, ApiKeyBaseCrudRead, ApiKeyCreateOptions, ApiKeyFirstView, apiKeyCreateOptionsToCrud } from \"../../api-keys\";\nimport { EmailConfig, stackAppInternalsSymbol } from \"../../common\";\nimport { AdminEmailTemplate, AdminEmailTemplateUpdateOptions, adminEmailTemplateUpdateOptionsToCrud } from \"../../email-templates\";\nimport { AdminTeamPermission, AdminTeamPermissionDefinition, AdminTeamPermissionDefinitionCreateOptions, AdminTeamPermissionDefinitionUpdateOptions, adminTeamPermissionDefinitionCreateOptionsToCrud, adminTeamPermissionDefinitionUpdateOptionsToCrud } from \"../../permissions\";\nimport { AdminOwnedProject, AdminProject, AdminProjectUpdateOptions, adminProjectUpdateOptionsToCrud } from \"../../projects\";\nimport { StackAdminApp, StackAdminAppConstructorOptions } from \"../interfaces/admin-app\";\nimport { clientVersion, createCache, getBaseUrl, getDefaultProjectId, getDefaultPublishableClientKey, getDefaultSecretServerKey, getDefaultSuperSecretAdminKey } from \"./common\";\nimport { useAsyncCache } from \"./common\";\nimport { _StackServerAppImplIncomplete } from \"./server-app-impl\";\n\n\nexport class _StackAdminAppImplIncomplete<HasTokenStore extends boolean, ProjectId extends string> extends _StackServerAppImplIncomplete<HasTokenStore, ProjectId>\n{\n declare protected _interface: StackAdminInterface;\n\n private readonly _adminProjectCache = createCache(async () => {\n return await this._interface.getProject();\n });\n private readonly _apiKeysCache = createCache(async () => {\n return await this._interface.listApiKeys();\n });\n private readonly _adminEmailTemplatesCache = createCache(async () => {\n return await this._interface.listEmailTemplates();\n });\n private readonly _adminTeamPermissionDefinitionsCache = createCache(async () => {\n return await this._interface.listPermissionDefinitions();\n });\n private readonly _svixTokenCache = createCache(async () => {\n return await this._interface.getSvixToken();\n });\n private readonly _metricsCache = createCache(async () => {\n return await this._interface.getMetrics();\n });\n\n constructor(options: StackAdminAppConstructorOptions<HasTokenStore, ProjectId>) {\n super({\n interface: new StackAdminInterface({\n getBaseUrl: () => getBaseUrl(options.baseUrl),\n projectId: options.projectId ?? getDefaultProjectId(),\n clientVersion,\n ...\"projectOwnerSession\" in options ? {\n projectOwnerSession: options.projectOwnerSession,\n } : {\n publishableClientKey: options.publishableClientKey ?? getDefaultPublishableClientKey(),\n secretServerKey: options.secretServerKey ?? getDefaultSecretServerKey(),\n superSecretAdminKey: options.superSecretAdminKey ?? getDefaultSuperSecretAdminKey(),\n },\n }),\n baseUrl: options.baseUrl,\n projectId: options.projectId,\n tokenStore: options.tokenStore,\n urls: options.urls,\n oauthScopesOnSignIn: options.oauthScopesOnSignIn,\n redirectMethod: options.redirectMethod,\n });\n }\n\n _adminOwnedProjectFromCrud(data: InternalProjectsCrud['Admin']['Read'], onRefresh: () => Promise<void>): AdminOwnedProject {\n if (this._tokenStoreInit !== null) {\n throw new StackAssertionError(\"Owned apps must always have tokenStore === null — did you not create this project with app._createOwnedApp()?\");;\n }\n return {\n ...this._adminProjectFromCrud(data, onRefresh),\n app: this as StackAdminApp<false>,\n };\n }\n\n _adminProjectFromCrud(data: InternalProjectsCrud['Admin']['Read'], onRefresh: () => Promise<void>): AdminProject {\n if (data.id !== this.projectId) {\n throw new StackAssertionError(`The project ID of the provided project JSON (${data.id}) does not match the project ID of the app (${this.projectId})!`);\n }\n\n const app = this;\n return {\n id: data.id,\n displayName: data.display_name,\n description: data.description,\n createdAt: new Date(data.created_at_millis),\n userCount: data.user_count,\n isProductionMode: data.is_production_mode,\n config: {\n id: data.config.id,\n signUpEnabled: data.config.sign_up_enabled,\n credentialEnabled: data.config.credential_enabled,\n magicLinkEnabled: data.config.magic_link_enabled,\n passkeyEnabled: data.config.passkey_enabled,\n clientTeamCreationEnabled: data.config.client_team_creation_enabled,\n clientUserDeletionEnabled: data.config.client_user_deletion_enabled,\n allowLocalhost: data.config.allow_localhost,\n oauthProviders: data.config.oauth_providers.map((p) => ((p.type === 'shared' ? {\n id: p.id,\n enabled: p.enabled,\n type: 'shared',\n } as const : {\n id: p.id,\n enabled: p.enabled,\n type: 'standard',\n clientId: p.client_id ?? throwErr(\"Client ID is missing\"),\n clientSecret: p.client_secret ?? throwErr(\"Client secret is missing\"),\n facebookConfigId: p.facebook_config_id,\n microsoftTenantId: p.microsoft_tenant_id,\n } as const))),\n emailConfig: data.config.email_config.type === 'shared' ? {\n type: 'shared'\n } : {\n type: 'standard',\n host: data.config.email_config.host ?? throwErr(\"Email host is missing\"),\n port: data.config.email_config.port ?? throwErr(\"Email port is missing\"),\n username: data.config.email_config.username ?? throwErr(\"Email username is missing\"),\n password: data.config.email_config.password ?? throwErr(\"Email password is missing\"),\n senderName: data.config.email_config.sender_name ?? throwErr(\"Email sender name is missing\"),\n senderEmail: data.config.email_config.sender_email ?? throwErr(\"Email sender email is missing\"),\n },\n domains: data.config.domains.map((d) => ({\n domain: d.domain,\n handlerPath: d.handler_path,\n })),\n createTeamOnSignUp: data.config.create_team_on_sign_up,\n teamCreatorDefaultPermissions: data.config.team_creator_default_permissions,\n teamMemberDefaultPermissions: data.config.team_member_default_permissions,\n },\n\n async update(update: AdminProjectUpdateOptions) {\n await app._interface.updateProject(adminProjectUpdateOptionsToCrud(update));\n await onRefresh();\n },\n async delete() {\n await app._interface.deleteProject();\n },\n async getProductionModeErrors() {\n return getProductionModeErrors(data);\n },\n useProductionModeErrors() {\n return getProductionModeErrors(data);\n },\n };\n }\n\n _adminEmailTemplateFromCrud(data: EmailTemplateCrud['Admin']['Read']): AdminEmailTemplate {\n return {\n type: data.type,\n subject: data.subject,\n content: data.content,\n isDefault: data.is_default,\n };\n }\n\n override async getProject(): Promise<AdminProject> {\n return this._adminProjectFromCrud(\n Result.orThrow(await this._adminProjectCache.getOrWait([], \"write-only\")),\n () => this._refreshProject()\n );\n }\n\n override useProject(): AdminProject {\n const crud = useAsyncCache(this._adminProjectCache, [], \"useProjectAdmin()\");\n return useMemo(() => this._adminProjectFromCrud(\n crud,\n () => this._refreshProject()\n ), [crud]);\n }\n\n protected _createApiKeyBaseFromCrud(data: ApiKeyBaseCrudRead): ApiKeyBase {\n const app = this;\n return {\n id: data.id,\n description: data.description,\n expiresAt: new Date(data.expires_at_millis),\n manuallyRevokedAt: data.manually_revoked_at_millis ? new Date(data.manually_revoked_at_millis) : null,\n createdAt: new Date(data.created_at_millis),\n isValid() {\n return this.whyInvalid() === null;\n },\n whyInvalid() {\n if (this.expiresAt.getTime() < Date.now()) return \"expired\";\n if (this.manuallyRevokedAt) return \"manually-revoked\";\n return null;\n },\n async revoke() {\n const res = await app._interface.revokeApiKeyById(data.id);\n await app._refreshApiKeys();\n return res;\n }\n };\n }\n\n protected _createApiKeyFromCrud(data: ApiKeysCrud[\"Admin\"][\"Read\"]): ApiKey {\n return {\n ...this._createApiKeyBaseFromCrud(data),\n publishableClientKey: data.publishable_client_key ? { lastFour: data.publishable_client_key.last_four } : null,\n secretServerKey: data.secret_server_key ? { lastFour: data.secret_server_key.last_four } : null,\n superSecretAdminKey: data.super_secret_admin_key ? { lastFour: data.super_secret_admin_key.last_four } : null,\n };\n }\n\n protected _createApiKeyFirstViewFromCrud(data: ApiKeyCreateCrudResponse): ApiKeyFirstView {\n return {\n ...this._createApiKeyBaseFromCrud(data),\n publishableClientKey: data.publishable_client_key,\n secretServerKey: data.secret_server_key,\n superSecretAdminKey: data.super_secret_admin_key,\n };\n }\n\n async listApiKeys(): Promise<ApiKey[]> {\n const crud = Result.orThrow(await this._apiKeysCache.getOrWait([], \"write-only\"));\n return crud.map((j) => this._createApiKeyFromCrud(j));\n }\n\n useApiKeys(): ApiKey[] {\n const crud = useAsyncCache(this._apiKeysCache, [], \"useApiKeys()\");\n return useMemo(() => {\n return crud.map((j) => this._createApiKeyFromCrud(j));\n }, [crud]);\n }\n\n async createApiKey(options: ApiKeyCreateOptions): Promise<ApiKeyFirstView> {\n const crud = await this._interface.createApiKey(apiKeyCreateOptionsToCrud(options));\n await this._refreshApiKeys();\n return this._createApiKeyFirstViewFromCrud(crud);\n }\n\n useEmailTemplates(): AdminEmailTemplate[] {\n const crud = useAsyncCache(this._adminEmailTemplatesCache, [], \"useEmailTemplates()\");\n return useMemo(() => {\n return crud.map((j) => this._adminEmailTemplateFromCrud(j));\n }, [crud]);\n }\n async listEmailTemplates(): Promise<AdminEmailTemplate[]> {\n const crud = Result.orThrow(await this._adminEmailTemplatesCache.getOrWait([], \"write-only\"));\n return crud.map((j) => this._adminEmailTemplateFromCrud(j));\n }\n\n async updateEmailTemplate(type: EmailTemplateType, data: AdminEmailTemplateUpdateOptions): Promise<void> {\n await this._interface.updateEmailTemplate(type, adminEmailTemplateUpdateOptionsToCrud(data));\n await this._adminEmailTemplatesCache.refresh([]);\n }\n\n async resetEmailTemplate(type: EmailTemplateType) {\n await this._interface.resetEmailTemplate(type);\n await this._adminEmailTemplatesCache.refresh([]);\n }\n\n async createTeamPermissionDefinition(data: AdminTeamPermissionDefinitionCreateOptions): Promise<AdminTeamPermission>{\n const crud = await this._interface.createPermissionDefinition(adminTeamPermissionDefinitionCreateOptionsToCrud(data));\n await this._adminTeamPermissionDefinitionsCache.refresh([]);\n return this._serverTeamPermissionDefinitionFromCrud(crud);\n }\n\n async updateTeamPermissionDefinition(permissionId: string, data: AdminTeamPermissionDefinitionUpdateOptions) {\n await this._interface.updatePermissionDefinition(permissionId, adminTeamPermissionDefinitionUpdateOptionsToCrud(data));\n await this._adminTeamPermissionDefinitionsCache.refresh([]);\n }\n\n async deleteTeamPermissionDefinition(permissionId: string): Promise<void> {\n await this._interface.deletePermissionDefinition(permissionId);\n await this._adminTeamPermissionDefinitionsCache.refresh([]);\n }\n\n async listTeamPermissionDefinitions(): Promise<AdminTeamPermissionDefinition[]> {\n const crud = Result.orThrow(await this._adminTeamPermissionDefinitionsCache.getOrWait([], \"write-only\"));\n return crud.map((p) => this._serverTeamPermissionDefinitionFromCrud(p));\n }\n\n useTeamPermissionDefinitions(): AdminTeamPermissionDefinition[] {\n const crud = useAsyncCache(this._adminTeamPermissionDefinitionsCache, [], \"usePermissions()\");\n return useMemo(() => {\n return crud.map((p) => this._serverTeamPermissionDefinitionFromCrud(p));\n }, [crud]);\n }\n useSvixToken(): string {\n const crud = useAsyncCache(this._svixTokenCache, [], \"useSvixToken()\");\n return crud.token;\n }\n\n protected override async _refreshProject() {\n await Promise.all([\n super._refreshProject(),\n this._adminProjectCache.refresh([]),\n ]);\n }\n\n protected async _refreshApiKeys() {\n await this._apiKeysCache.refresh([]);\n }\n\n get [stackAppInternalsSymbol]() {\n return {\n ...super[stackAppInternalsSymbol],\n useMetrics: (): any => {\n return useAsyncCache(this._metricsCache, [], \"useMetrics()\");\n }\n };\n }\n\n async sendTestEmail(options: {\n recipientEmail: string,\n emailConfig: EmailConfig,\n }): Promise<Result<undefined, { errorMessage: string }>> {\n const response = await this._interface.sendTestEmail({\n recipient_email: options.recipientEmail,\n email_config: {\n ...(pick(options.emailConfig, ['host', 'port', 'username', 'password'])),\n sender_email: options.emailConfig.senderEmail,\n sender_name: options.emailConfig.senderName,\n },\n });\n\n if (response.success) {\n return Result.ok(undefined);\n } else {\n return Result.error({ errorMessage: response.error_message ?? throwErr(\"Email test error not specified\") });\n }\n }\n}\n"],"mappings":"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","names":[]}