@stackframe/stack 2.5.2 → 2.5.4

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 (144) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/components/credential-sign-in-form.js +4 -14
  3. package/dist/components/credential-sign-in-form.js.map +1 -1
  4. package/dist/components/credential-sign-up-form.js +18 -20
  5. package/dist/components/credential-sign-up-form.js.map +1 -1
  6. package/dist/components/elements/maybe-full-page.js.map +1 -1
  7. package/dist/components/elements/ssr-layout-effect.d.mts +1 -0
  8. package/dist/components/elements/ssr-layout-effect.d.ts +1 -0
  9. package/dist/components/elements/ssr-layout-effect.js +8 -1
  10. package/dist/components/elements/ssr-layout-effect.js.map +1 -1
  11. package/dist/components/elements/user-avatar.d.mts +5 -3
  12. package/dist/components/elements/user-avatar.d.ts +5 -3
  13. package/dist/components/elements/user-avatar.js.map +1 -1
  14. package/dist/components/forgot-password-form.js +3 -13
  15. package/dist/components/forgot-password-form.js.map +1 -1
  16. package/dist/components/magic-link-sign-in-form.js +3 -13
  17. package/dist/components/magic-link-sign-in-form.js.map +1 -1
  18. package/dist/components/message-cards/known-error-message-card.js.map +1 -1
  19. package/dist/components/message-cards/message-card.js.map +1 -1
  20. package/dist/components/message-cards/predefined-message-card.js.map +1 -1
  21. package/dist/components/oauth-button-group.d.mts +7 -2
  22. package/dist/components/oauth-button-group.d.ts +7 -2
  23. package/dist/components/oauth-button-group.js +1 -1
  24. package/dist/components/oauth-button-group.js.map +1 -1
  25. package/dist/components/oauth-button.js +28 -26
  26. package/dist/components/oauth-button.js.map +1 -1
  27. package/dist/components/password-reset-form.js +4 -3
  28. package/dist/components/password-reset-form.js.map +1 -1
  29. package/dist/components/selected-team-switcher.d.mts +5 -3
  30. package/dist/components/selected-team-switcher.d.ts +5 -3
  31. package/dist/components/selected-team-switcher.js +12 -1
  32. package/dist/components/selected-team-switcher.js.map +1 -1
  33. package/dist/components/user-button.js.map +1 -1
  34. package/dist/components-page/account-settings.js +42 -7
  35. package/dist/components-page/account-settings.js.map +1 -1
  36. package/dist/components-page/auth-page.d.mts +9 -2
  37. package/dist/components-page/auth-page.d.ts +9 -2
  38. package/dist/components-page/auth-page.js +3 -3
  39. package/dist/components-page/auth-page.js.map +1 -1
  40. package/dist/components-page/email-verification.js +12 -2
  41. package/dist/components-page/email-verification.js.map +1 -1
  42. package/dist/components-page/error-page.js.map +1 -1
  43. package/dist/components-page/magic-link-callback.js +13 -3
  44. package/dist/components-page/magic-link-callback.js.map +1 -1
  45. package/dist/components-page/password-reset.js +2 -2
  46. package/dist/components-page/password-reset.js.map +1 -1
  47. package/dist/components-page/sign-out.js +12 -2
  48. package/dist/components-page/sign-out.js.map +1 -1
  49. package/dist/components-page/stack-handler.d.mts +5 -3
  50. package/dist/components-page/stack-handler.d.ts +5 -3
  51. package/dist/components-page/stack-handler.js +27 -10
  52. package/dist/components-page/stack-handler.js.map +1 -1
  53. package/dist/esm/components/credential-sign-in-form.js +4 -4
  54. package/dist/esm/components/credential-sign-in-form.js.map +1 -1
  55. package/dist/esm/components/credential-sign-up-form.js +18 -20
  56. package/dist/esm/components/credential-sign-up-form.js.map +1 -1
  57. package/dist/esm/components/elements/maybe-full-page.js.map +1 -1
  58. package/dist/esm/components/elements/ssr-layout-effect.js +8 -1
  59. package/dist/esm/components/elements/ssr-layout-effect.js.map +1 -1
  60. package/dist/esm/components/elements/user-avatar.js.map +1 -1
  61. package/dist/esm/components/forgot-password-form.js +3 -3
  62. package/dist/esm/components/forgot-password-form.js.map +1 -1
  63. package/dist/esm/components/magic-link-sign-in-form.js +3 -3
  64. package/dist/esm/components/magic-link-sign-in-form.js.map +1 -1
  65. package/dist/esm/components/message-cards/known-error-message-card.js.map +1 -1
  66. package/dist/esm/components/message-cards/message-card.js.map +1 -1
  67. package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
  68. package/dist/esm/components/oauth-button-group.js +1 -1
  69. package/dist/esm/components/oauth-button-group.js.map +1 -1
  70. package/dist/esm/components/oauth-button.js +29 -27
  71. package/dist/esm/components/oauth-button.js.map +1 -1
  72. package/dist/esm/components/password-reset-form.js +4 -3
  73. package/dist/esm/components/password-reset-form.js.map +1 -1
  74. package/dist/esm/components/selected-team-switcher.js +2 -1
  75. package/dist/esm/components/selected-team-switcher.js.map +1 -1
  76. package/dist/esm/components/user-button.js.map +1 -1
  77. package/dist/esm/components-page/account-settings.js +42 -7
  78. package/dist/esm/components-page/account-settings.js.map +1 -1
  79. package/dist/esm/components-page/auth-page.js +3 -3
  80. package/dist/esm/components-page/auth-page.js.map +1 -1
  81. package/dist/esm/components-page/email-verification.js +2 -2
  82. package/dist/esm/components-page/email-verification.js.map +1 -1
  83. package/dist/esm/components-page/error-page.js.map +1 -1
  84. package/dist/esm/components-page/magic-link-callback.js +3 -3
  85. package/dist/esm/components-page/magic-link-callback.js.map +1 -1
  86. package/dist/esm/components-page/password-reset.js +2 -2
  87. package/dist/esm/components-page/password-reset.js.map +1 -1
  88. package/dist/esm/components-page/sign-out.js +2 -2
  89. package/dist/esm/components-page/sign-out.js.map +1 -1
  90. package/dist/esm/components-page/stack-handler.js +27 -10
  91. package/dist/esm/components-page/stack-handler.js.map +1 -1
  92. package/dist/esm/index.js +1 -4
  93. package/dist/esm/index.js.map +1 -1
  94. package/dist/esm/lib/auth.js.map +1 -1
  95. package/dist/esm/lib/cookie.js +6 -1
  96. package/dist/esm/lib/cookie.js.map +1 -1
  97. package/dist/esm/lib/hooks.js.map +1 -1
  98. package/dist/esm/lib/stack-app.js +581 -456
  99. package/dist/esm/lib/stack-app.js.map +1 -1
  100. package/dist/esm/providers/stack-provider-client.js +3 -4
  101. package/dist/esm/providers/stack-provider-client.js.map +1 -1
  102. package/dist/esm/providers/theme-provider.js +16 -7
  103. package/dist/esm/providers/theme-provider.js.map +1 -1
  104. package/dist/esm/utils/browser-script.js +2 -2
  105. package/dist/esm/utils/browser-script.js.map +1 -1
  106. package/dist/esm/utils/email.js +2 -2
  107. package/dist/esm/utils/email.js.map +1 -1
  108. package/dist/index.d.mts +6 -4
  109. package/dist/index.d.ts +6 -4
  110. package/dist/index.js +4 -8
  111. package/dist/index.js.map +1 -1
  112. package/dist/lib/auth.js.map +1 -1
  113. package/dist/lib/cookie.js +6 -1
  114. package/dist/lib/cookie.js.map +1 -1
  115. package/dist/lib/hooks.d.mts +5 -3
  116. package/dist/lib/hooks.d.ts +5 -3
  117. package/dist/lib/hooks.js.map +1 -1
  118. package/dist/lib/stack-app.d.mts +219 -114
  119. package/dist/lib/stack-app.d.ts +219 -114
  120. package/dist/lib/stack-app.js +603 -476
  121. package/dist/lib/stack-app.js.map +1 -1
  122. package/dist/providers/stack-provider-client.d.mts +8 -6
  123. package/dist/providers/stack-provider-client.d.ts +8 -6
  124. package/dist/providers/stack-provider-client.js +4 -5
  125. package/dist/providers/stack-provider-client.js.map +1 -1
  126. package/dist/providers/stack-provider.d.mts +5 -3
  127. package/dist/providers/stack-provider.d.ts +5 -3
  128. package/dist/providers/theme-provider.d.mts +2 -1
  129. package/dist/providers/theme-provider.d.ts +2 -1
  130. package/dist/providers/theme-provider.js +15 -6
  131. package/dist/providers/theme-provider.js.map +1 -1
  132. package/dist/utils/browser-script.d.mts +3 -1
  133. package/dist/utils/browser-script.d.ts +3 -1
  134. package/dist/utils/browser-script.js +2 -2
  135. package/dist/utils/browser-script.js.map +1 -1
  136. package/dist/utils/email.js +2 -12
  137. package/dist/utils/email.js.map +1 -1
  138. package/package.json +4 -5
  139. package/dist/esm/providers/styled-components-registry.js +0 -25
  140. package/dist/esm/providers/styled-components-registry.js.map +0 -1
  141. package/dist/providers/styled-components-registry.d.mts +0 -8
  142. package/dist/providers/styled-components-registry.d.ts +0 -8
  143. package/dist/providers/styled-components-registry.js +0 -45
  144. package/dist/providers/styled-components-registry.js.map +0 -1
@@ -1,10 +1,12 @@
1
- import { KnownErrors, ServerUserJson, OAuthProviderConfigJson } from '@stackframe/stack-shared';
2
- import { StandardProvider, UserUpdateJson, TeamCustomizableJson, UserJson, PermissionDefinitionJson, ProjectJson, ProductionModeError, TeamJson, EmailConfigJson, DomainConfigJson, ClientProjectJson } from '@stackframe/stack-shared/dist/interface/clientInterface';
3
- import { ReadonlyJson } from '@stackframe/stack-shared/dist/utils/json';
4
- import { ProjectUpdateOptions, ApiKeySetCreateOptions } from '@stackframe/stack-shared/dist/interface/adminInterface';
5
- import { ServerUserUpdateJson, ServerTeamCustomizableJson, ServerPermissionDefinitionCustomizableJson, ServerPermissionDefinitionJson, EmailTemplateType } from '@stackframe/stack-shared/dist/interface/serverInterface';
6
- import { ListEmailTemplatesCrud, EmailTemplateCrud } from '@stackframe/stack-shared/dist/interface/crud/email-templates';
1
+ import { KnownErrors } from '@stackframe/stack-shared';
2
+ import { ProductionModeError } from '@stackframe/stack-shared/dist/helpers/production-mode';
3
+ import { StandardProvider } from '@stackframe/stack-shared/dist/interface/clientInterface';
4
+ import { ApiKeysCrud } from '@stackframe/stack-shared/dist/interface/crud/api-keys';
5
+ import { CurrentUserCrud } from '@stackframe/stack-shared/dist/interface/crud/current-user';
6
+ import { EmailTemplateType } from '@stackframe/stack-shared/dist/interface/crud/email-templates';
7
+ import { TeamPermissionDefinitionsCrud } from '@stackframe/stack-shared/dist/interface/crud/team-permissions';
7
8
  import { InternalSession } from '@stackframe/stack-shared/dist/sessions';
9
+ import { ReadonlyJson } from '@stackframe/stack-shared/dist/utils/json';
8
10
 
9
11
  type RequestLike = {
10
12
  headers: {
@@ -44,6 +46,12 @@ type StackClientAppConstructorOptions<HasTokenStore extends boolean, ProjectId e
44
46
  urls?: Partial<HandlerUrls>;
45
47
  oauthScopesOnSignIn?: Partial<OAuthScopesOnSignIn>;
46
48
  tokenStore: TokenStoreInit<HasTokenStore>;
49
+ /**
50
+ * By default, the Stack app will automatically prefetch some data from Stack's server when this app is first
51
+ * constructed. This improves the performance of your app, but will create network requests that are unnecessary if
52
+ * the app is never used or disposed of immediately. To disable this behavior, set this option to true.
53
+ */
54
+ noAutomaticPrefetch?: boolean;
47
55
  };
48
56
  type StackServerAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = StackClientAppConstructorOptions<HasTokenStore, ProjectId> & {
49
57
  secretServerKey?: string;
@@ -57,9 +65,6 @@ type StackClientAppJson<HasTokenStore extends boolean, ProjectId extends string>
57
65
  uniqueIdentifier: string;
58
66
  };
59
67
  declare const stackAppInternalsSymbol: unique symbol;
60
- type RedirectToOptions = {
61
- replace?: boolean;
62
- };
63
68
  type Session = {
64
69
  getTokens(): Promise<{
65
70
  accessToken: string | null;
@@ -160,29 +165,31 @@ type User = {
160
165
  sendVerificationEmail(): Promise<KnownErrors["EmailAlreadyVerified"] | void>;
161
166
  readonly profileImageUrl: string | null;
162
167
  readonly signedUpAt: Date;
163
- readonly clientMetadata: ReadonlyJson;
164
- setClientMetadata(metadata: ReadonlyJson): Promise<void>;
168
+ readonly clientMetadata: any;
169
+ setClientMetadata(metadata: any): Promise<void>;
165
170
  /**
166
171
  * Whether the primary e-mail can be used for authentication.
167
172
  */
168
- readonly authWithEmail: boolean;
173
+ readonly emailAuthEnabled: boolean;
169
174
  /**
170
175
  * Whether the user has a password set.
171
176
  */
172
177
  readonly hasPassword: boolean;
173
- readonly oauthProviders: readonly string[];
178
+ readonly oauthProviders: readonly {
179
+ id: string;
180
+ }[];
174
181
  updatePassword(options: {
175
182
  oldPassword: string;
176
183
  newPassword: string;
177
- }): Promise<KnownErrors["PasswordMismatch"] | KnownErrors["PasswordRequirementsNotMet"] | void>;
184
+ }): Promise<KnownErrors["PasswordConfirmationMismatch"] | KnownErrors["PasswordRequirementsNotMet"] | void>;
178
185
  /**
179
186
  * A shorthand method to update multiple fields of the user at once.
180
187
  */
181
- update(update: UserUpdateJson): Promise<void>;
188
+ update(update: UserUpdateOptions): Promise<void>;
182
189
  hasPermission(scope: Team, permissionId: string): Promise<boolean>;
183
190
  readonly selectedTeam: Team | null;
184
191
  setSelectedTeam(team: Team | null): Promise<void>;
185
- createTeam(data: TeamCustomizableJson): Promise<Team>;
192
+ createTeam(data: TeamCreateOptions): Promise<Team>;
186
193
  getConnectedAccount(id: StandardProvider, options: {
187
194
  or: 'redirect';
188
195
  scopes?: string[];
@@ -199,19 +206,24 @@ type User = {
199
206
  or?: 'redirect' | 'throw' | 'return-null';
200
207
  scopes?: string[];
201
208
  }): OAuthConnection | null;
202
- toClientJson(): UserJson;
209
+ toClientJson(): CurrentUserCrud["Client"]["Read"];
203
210
  } & AsyncStoreProperty<"team", [id: string], Team | null, false> & AsyncStoreProperty<"teams", [], Team[], true> & AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: {
204
- direct?: boolean;
205
- }], Permission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: {
206
- direct?: boolean;
207
- }], Permission[], true>;
211
+ recursive?: boolean;
212
+ }], TeamPermission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: {
213
+ recursive?: boolean;
214
+ }], TeamPermission[], true>;
208
215
  type InternalUserExtra = {
209
- createProject(newProject: ProjectUpdateOptions & {
216
+ createProject(newProject: AdminProjectUpdateOptions & {
210
217
  displayName: string;
211
- }): Promise<Project>;
212
- } & AsyncStoreProperty<"ownedProjects", [], Project[], true>;
218
+ }): Promise<AdminProject>;
219
+ } & AsyncStoreProperty<"ownedProjects", [], AdminOwnedProject[], true>;
213
220
  type CurrentUser = Auth & User;
214
221
  type CurrentInternalUser = CurrentUser & InternalUserExtra;
222
+ type UserUpdateOptions = {
223
+ displayName?: string;
224
+ clientMetadata?: ReadonlyJson;
225
+ selectedTeamId?: string | null;
226
+ };
215
227
  /**
216
228
  * A user including sensitive fields that should only be used on the server, never sent to the client
217
229
  * (such as sensitive information and serverMetadata).
@@ -220,96 +232,122 @@ type ServerUser = {
220
232
  setPrimaryEmail(email: string, options?: {
221
233
  verified?: boolean | undefined;
222
234
  }): Promise<void>;
223
- readonly serverMetadata: ReadonlyJson;
224
- setServerMetadata(metadata: ReadonlyJson): Promise<void>;
235
+ readonly serverMetadata: any;
236
+ setServerMetadata(metadata: any): Promise<void>;
225
237
  updatePassword(options: {
226
238
  oldPassword?: string;
227
239
  newPassword: string;
228
- }): Promise<KnownErrors["PasswordMismatch"] | KnownErrors["PasswordRequirementsNotMet"] | void>;
229
- update(user: Partial<ServerUserUpdateJson>): Promise<void>;
240
+ }): Promise<KnownErrors["PasswordConfirmationMismatch"] | KnownErrors["PasswordRequirementsNotMet"] | void>;
241
+ update(user: ServerUserUpdateOptions): Promise<void>;
230
242
  delete(): Promise<void>;
231
243
  grantPermission(scope: Team, permissionId: string): Promise<void>;
232
244
  revokePermission(scope: Team, permissionId: string): Promise<void>;
233
245
  hasPermission(scope: Team, permissionId: string): Promise<boolean>;
234
- toServerJson(): ServerUserJson;
235
246
  } & AsyncStoreProperty<"team", [id: string], ServerTeam | null, false> & AsyncStoreProperty<"teams", [], ServerTeam[], true> & AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: {
236
247
  direct?: boolean;
237
- }], ServerPermission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: {
248
+ }], AdminTeamPermission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: {
238
249
  direct?: boolean;
239
- }], ServerPermission[], true> & User;
250
+ }], AdminTeamPermission[], true> & User;
240
251
  type CurrentServerUser = Auth & ServerUser;
241
252
  type CurrentInternalServerUser = CurrentServerUser & InternalUserExtra;
253
+ type ServerUserUpdateOptions = {
254
+ primaryEmail?: string;
255
+ primaryEmailVerified?: boolean;
256
+ primaryEmailAuthEnabled?: boolean;
257
+ serverMetadata?: ReadonlyJson;
258
+ password?: string;
259
+ } & UserUpdateOptions;
242
260
  type Project = {
261
+ readonly id: string;
262
+ readonly config: ProjectConfig;
263
+ };
264
+ type AdminProject = {
243
265
  readonly id: string;
244
266
  readonly displayName: string;
245
- readonly description?: string;
267
+ readonly description: string | null;
246
268
  readonly createdAt: Date;
247
269
  readonly userCount: number;
248
270
  readonly isProductionMode: boolean;
249
- readonly evaluatedConfig: {
250
- readonly id: string;
251
- readonly allowLocalhost: boolean;
252
- readonly credentialEnabled: boolean;
253
- readonly magicLinkEnabled: boolean;
254
- readonly oauthProviders: OAuthProviderConfig[];
255
- readonly emailConfig?: EmailConfig;
256
- readonly domains: DomainConfig[];
257
- readonly createTeamOnSignUp: boolean;
258
- readonly teamCreatorDefaultPermissions: PermissionDefinitionJson[];
259
- readonly teamMemberDefaultPermissions: PermissionDefinitionJson[];
260
- };
261
- update(this: Project, update: ProjectUpdateOptions): Promise<void>;
262
- toJson(this: Project): ProjectJson;
263
- getProductionModeErrors(this: Project): ProductionModeError[];
271
+ readonly config: AdminProjectConfig;
272
+ update(this: AdminProject, update: AdminProjectUpdateOptions): Promise<void>;
273
+ getProductionModeErrors(this: AdminProject): Promise<ProductionModeError[]>;
274
+ useProductionModeErrors(this: AdminProject): ProductionModeError[];
275
+ } & Project;
276
+ type AdminOwnedProject = {
277
+ readonly app: StackAdminApp<false>;
278
+ } & AdminProject;
279
+ type AdminProjectUpdateOptions = {
280
+ displayName?: string;
281
+ description?: string;
282
+ isProductionMode?: boolean;
283
+ config?: AdminProjectConfigUpdateOptions;
264
284
  };
265
- type Team = {
266
- id: string;
285
+ type AdminProjectCreateOptions = Omit<AdminProjectUpdateOptions, 'displayName'> & {
267
286
  displayName: string;
268
- profileImageUrl?: string;
269
- createdAt: Date;
270
- toJson(): TeamJson;
271
- };
272
- type ServerTeam = Team & {
273
- listMembers(): Promise<ServerTeamMember[]>;
274
- useMembers(): ServerTeamMember[];
275
- update(update: Partial<ServerTeamCustomizableJson>): Promise<void>;
276
- delete(): Promise<void>;
277
- addUser(userId: string): Promise<void>;
278
- removeUser(userId: string): Promise<void>;
279
287
  };
280
- type TeamMember = {
281
- userId: string;
282
- teamId: string;
283
- displayName: string | null;
288
+ type ProjectConfig = {
289
+ readonly credentialEnabled: boolean;
290
+ readonly magicLinkEnabled: boolean;
291
+ readonly oauthProviders: OAuthProviderConfig[];
284
292
  };
285
- type ServerTeamMember = TeamMember & {
286
- user: ServerUser;
293
+ type OAuthProviderConfig = {
294
+ readonly id: string;
287
295
  };
288
- type Permission = {
289
- id: string;
290
- } & ({
291
- type: "global";
296
+ type AdminProjectConfig = {
297
+ readonly credentialEnabled: boolean;
298
+ readonly magicLinkEnabled: boolean;
299
+ readonly allowLocalhost: boolean;
300
+ readonly oauthProviders: AdminOAuthProviderConfig[];
301
+ readonly emailConfig?: AdminEmailConfig;
302
+ readonly domains: AdminDomainConfig[];
303
+ readonly createTeamOnSignUp: boolean;
304
+ readonly teamCreatorDefaultPermissions: AdminTeamPermission[];
305
+ readonly teamMemberDefaultPermissions: AdminTeamPermission[];
306
+ } & OAuthProviderConfig;
307
+ type AdminEmailConfig = ({
308
+ type: "standard";
309
+ senderName: string;
310
+ senderEmail: string;
311
+ host: string;
312
+ port: number;
313
+ username: string;
314
+ password: string;
292
315
  } | {
293
- type: "team";
294
- teamId: string;
316
+ type: "shared";
295
317
  });
296
- type ServerPermission = Permission & {
297
- readonly __databaseUniqueId: string;
298
- readonly description?: string;
299
- readonly containPermissionIds: string[];
318
+ type AdminDomainConfig = {
319
+ domain: string;
320
+ handlerPath: string;
300
321
  };
301
- type Connection = {
322
+ type AdminOAuthProviderConfig = {
302
323
  id: string;
324
+ enabled: boolean;
325
+ } & ({
326
+ type: 'shared';
327
+ } | {
328
+ type: 'standard';
329
+ clientId: string;
330
+ clientSecret: string;
331
+ }) & OAuthProviderConfig;
332
+ type AdminProjectConfigUpdateOptions = {
333
+ domains?: {
334
+ domain: string;
335
+ handlerPath: string;
336
+ }[];
337
+ oauthProviders?: AdminOAuthProviderConfig[];
338
+ credentialEnabled?: boolean;
339
+ magicLinkEnabled?: boolean;
340
+ allowLocalhost?: boolean;
341
+ createTeamOnSignUp?: boolean;
342
+ emailConfig?: AdminEmailConfig;
343
+ teamCreatorDefaultPermissions?: {
344
+ id: string;
345
+ }[];
346
+ teamMemberDefaultPermissions?: {
347
+ id: string;
348
+ }[];
303
349
  };
304
- type OAuthConnection = Connection & {
305
- getAccessToken(): Promise<{
306
- accessToken: string;
307
- }>;
308
- useAccessToken(): {
309
- accessToken: string;
310
- };
311
- };
312
- type ApiKeySetBase = {
350
+ type ApiKeyBase = {
313
351
  id: string;
314
352
  description: string;
315
353
  expiresAt: Date;
@@ -319,12 +357,13 @@ type ApiKeySetBase = {
319
357
  whyInvalid(): "expired" | "manually-revoked" | null;
320
358
  revoke(): Promise<void>;
321
359
  };
322
- type ApiKeySetFirstView = ApiKeySetBase & {
360
+ type ApiKeyBaseCrudRead = Pick<ApiKeysCrud["Admin"]["Read"], "id" | "created_at_millis" | "description" | "expires_at_millis" | "manually_revoked_at_millis">;
361
+ type ApiKeyFirstView = {
323
362
  publishableClientKey?: string;
324
363
  secretServerKey?: string;
325
364
  superSecretAdminKey?: string;
326
- };
327
- type ApiKeySet = ApiKeySetBase & {
365
+ } & ApiKeyBase;
366
+ type ApiKey = {
328
367
  publishableClientKey: null | {
329
368
  lastFour: string;
330
369
  };
@@ -334,21 +373,71 @@ type ApiKeySet = ApiKeySetBase & {
334
373
  superSecretAdminKey: null | {
335
374
  lastFour: string;
336
375
  };
376
+ } & ApiKeyBase;
377
+ type ApiKeyCreateOptions = {
378
+ description: string;
379
+ expiresAt: Date;
380
+ hasPublishableClientKey: boolean;
381
+ hasSecretServerKey: boolean;
382
+ hasSuperSecretAdminKey: boolean;
383
+ };
384
+ type Team = {
385
+ id: string;
386
+ displayName: string;
387
+ profileImageUrl: string | null;
337
388
  };
338
- type EmailConfig = EmailConfigJson;
339
- type DomainConfig = DomainConfigJson;
340
- type OAuthProviderConfig = OAuthProviderConfigJson;
389
+ type TeamCreateOptions = {
390
+ displayName: string;
391
+ profileImageUrl?: string;
392
+ };
393
+ type ServerTeam = {
394
+ createdAt: Date;
395
+ listUsers(): Promise<ServerUser[]>;
396
+ useUsers(): ServerUser[];
397
+ update(update: ServerTeamUpdateOptions): Promise<void>;
398
+ delete(): Promise<void>;
399
+ addUser(userId: string): Promise<void>;
400
+ removeUser(userId: string): Promise<void>;
401
+ } & Team;
402
+ type ServerTeamCreateOptions = TeamCreateOptions;
403
+ type ServerTeamUpdateOptions = {
404
+ displayName?: string;
405
+ profileImageUrl?: string | null;
406
+ };
407
+ type TeamPermission = {
408
+ id: string;
409
+ };
410
+ type AdminTeamPermission = TeamPermission;
411
+ type AdminTeamPermissionDefinition = {
412
+ id: string;
413
+ description?: string;
414
+ containedPermissionIds: string[];
415
+ };
416
+ type AdminTeamPermissionDefinitionCreateOptions = {
417
+ id: string;
418
+ description?: string;
419
+ containedPermissionIds: string[];
420
+ };
421
+ declare function serverTeamPermissionDefinitionCreateOptionsToCrud(options: AdminTeamPermissionDefinitionCreateOptions): TeamPermissionDefinitionsCrud["Admin"]["Create"];
422
+ type AdminTeamPermissionDefinitionUpdateOptions = Partial<AdminTeamPermissionDefinitionCreateOptions>;
423
+ declare function serverTeamPermissionDefinitionUpdateOptionsToCrud(options: AdminTeamPermissionDefinitionUpdateOptions): TeamPermissionDefinitionsCrud["Admin"]["Update"];
424
+ type Connection = {
425
+ id: string;
426
+ };
427
+ type OAuthConnection = {
428
+ getAccessToken(): Promise<{
429
+ accessToken: string;
430
+ }>;
431
+ useAccessToken(): {
432
+ accessToken: string;
433
+ };
434
+ } & Connection;
341
435
  type GetUserOptions<HasTokenStore> = {
342
436
  or?: 'redirect' | 'throw' | 'return-null';
343
437
  tokenStore?: TokenStoreInit;
344
438
  } & (HasTokenStore extends false ? {
345
439
  tokenStore: TokenStoreInit;
346
440
  } : {});
347
- type AsyncStoreProperty<Name extends string, Args extends any[], Value, IsMultiple extends boolean> = {
348
- [key in `${IsMultiple extends true ? "list" : "get"}${Capitalize<Name>}`]: (...args: Args) => Promise<Value>;
349
- } & {
350
- [key in `use${Capitalize<Name>}`]: (...args: Args) => Value;
351
- };
352
441
  type StackClientAppConstructor = {
353
442
  new <TokenStoreType extends string, HasTokenStore extends (TokenStoreType extends {} ? true : boolean), ProjectId extends string>(options: StackClientAppConstructorOptions<HasTokenStore, ProjectId>): StackClientApp<HasTokenStore, ProjectId>;
354
443
  new (options: StackClientAppConstructorOptions<boolean, string>): StackClientApp<boolean, string>;
@@ -395,9 +484,9 @@ type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId extends s
395
484
  getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentUser<ProjectId> | null>;
396
485
  [stackAppInternalsSymbol]: {
397
486
  toClientJson(): StackClientAppJson<HasTokenStore, ProjectId>;
398
- setCurrentUser(userJsonPromise: Promise<UserJson | null>): void;
487
+ setCurrentUser(userJsonPromise: Promise<CurrentUserCrud['Client']['Read'] | null>): void;
399
488
  };
400
- } & AsyncStoreProperty<"project", [], ClientProjectJson, false> & {
489
+ } & AsyncStoreProperty<"project", [], Project, false> & {
401
490
  [K in `redirectTo${Capitalize<keyof Omit<HandlerUrls, 'handler' | 'oauthCallback'>>}`]: (options?: RedirectToOptions) => Promise<void>;
402
491
  });
403
492
  declare const StackClientApp: StackClientAppConstructor;
@@ -406,16 +495,7 @@ type StackServerAppConstructor = {
406
495
  new (options: StackServerAppConstructorOptions<boolean, string>): StackServerApp<boolean, string>;
407
496
  };
408
497
  type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = ({
409
- createTeam(data: ServerTeamCustomizableJson): Promise<ServerTeam>;
410
- createPermissionDefinition(data: ServerPermissionDefinitionCustomizableJson): Promise<ServerPermission>;
411
- updatePermissionDefinition(permissionId: string, data: Partial<ServerPermissionDefinitionCustomizableJson>): Promise<void>;
412
- deletePermissionDefinition(permissionId: string): Promise<void>;
413
- listPermissionDefinitions(): Promise<ServerPermissionDefinitionJson[]>;
414
- usePermissionDefinitions(): ServerPermissionDefinitionJson[];
415
- useEmailTemplates(): ListEmailTemplatesCrud['Server']['Read'];
416
- listEmailTemplates(): Promise<ListEmailTemplatesCrud['Server']['Read']>;
417
- updateEmailTemplate(type: EmailTemplateType, data: EmailTemplateCrud['Server']['Update']): Promise<void>;
418
- resetEmailTemplate(type: EmailTemplateType): Promise<void>;
498
+ createTeam(data: ServerTeamCreateOptions): Promise<ServerTeam>;
419
499
  /**
420
500
  * @deprecated use `getUser()` instead
421
501
  */
@@ -434,15 +514,40 @@ type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends s
434
514
  or: 'throw';
435
515
  }): Promise<ProjectCurrentServerUser<ProjectId>>;
436
516
  getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentServerUser<ProjectId> | null>;
437
- } & StackClientApp<HasTokenStore, ProjectId> & AsyncStoreProperty<"users", [], ServerUser[], true> & AsyncStoreProperty<"team", [id: string], ServerTeam | null, false> & AsyncStoreProperty<"teams", [], ServerTeam[], true>);
517
+ } & AsyncStoreProperty<"users", [], ServerUser[], true> & AsyncStoreProperty<"team", [id: string], ServerTeam | null, false> & AsyncStoreProperty<"teams", [], ServerTeam[], true> & StackClientApp<HasTokenStore, ProjectId>);
438
518
  declare const StackServerApp: StackServerAppConstructor;
439
519
  type StackAdminAppConstructor = {
440
520
  new <HasTokenStore extends boolean, ProjectId extends string>(options: StackAdminAppConstructorOptions<HasTokenStore, ProjectId>): StackAdminApp<HasTokenStore, ProjectId>;
441
521
  new (options: StackAdminAppConstructorOptions<boolean, string>): StackAdminApp<boolean, string>;
442
522
  };
443
- type StackAdminApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (StackServerApp<HasTokenStore, ProjectId> & AsyncStoreProperty<"projectAdmin", [], Project, false> & AsyncStoreProperty<"apiKeySets", [], ApiKeySet[], true> & {
444
- createApiKeySet(options: ApiKeySetCreateOptions): Promise<ApiKeySetFirstView>;
445
- });
523
+ type StackAdminApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (AsyncStoreProperty<"project", [], AdminProject, false> & AsyncStoreProperty<"apiKeys", [], ApiKey[], true> & AsyncStoreProperty<"teamPermissionDefinitions", [], AdminTeamPermissionDefinition[], true> & {
524
+ useEmailTemplates(): AdminEmailTemplate[];
525
+ listEmailTemplates(): Promise<AdminEmailTemplate[]>;
526
+ updateEmailTemplate(type: EmailTemplateType, data: AdminEmailTemplateUpdateOptions): Promise<void>;
527
+ resetEmailTemplate(type: EmailTemplateType): Promise<void>;
528
+ createApiKey(options: ApiKeyCreateOptions): Promise<ApiKeyFirstView>;
529
+ createTeamPermissionDefinition(data: AdminTeamPermissionDefinitionCreateOptions): Promise<AdminTeamPermission>;
530
+ updateTeamPermissionDefinition(permissionId: string, data: AdminTeamPermissionDefinitionUpdateOptions): Promise<void>;
531
+ deleteTeamPermissionDefinition(permissionId: string): Promise<void>;
532
+ } & StackServerApp<HasTokenStore, ProjectId>);
446
533
  declare const StackAdminApp: StackAdminAppConstructor;
534
+ type AdminEmailTemplate = {
535
+ type: EmailTemplateType;
536
+ subject: string;
537
+ content: any;
538
+ isDefault: boolean;
539
+ };
540
+ type AdminEmailTemplateUpdateOptions = {
541
+ subject?: string;
542
+ content?: any;
543
+ };
544
+ type RedirectToOptions = {
545
+ replace?: boolean;
546
+ };
547
+ type AsyncStoreProperty<Name extends string, Args extends any[], Value, IsMultiple extends boolean> = {
548
+ [key in `${IsMultiple extends true ? "list" : "get"}${Capitalize<Name>}`]: (...args: Args) => Promise<Value>;
549
+ } & {
550
+ [key in `use${Capitalize<Name>}`]: (...args: Args) => Value;
551
+ };
447
552
 
448
- export { type ApiKeySet, type ApiKeySetBase, type ApiKeySetFirstView, type Connection, type CurrentInternalServerUser, type CurrentInternalUser, type CurrentServerUser, type CurrentUser, type DomainConfig, type EmailConfig, type GetUserOptions, type HandlerUrls, type OAuthConnection, type OAuthProviderConfig, type OAuthScopesOnSignIn, type Permission, type Project, type ServerPermission, type ServerTeam, type ServerTeamMember, type ServerUser, StackAdminApp, type StackAdminAppConstructorOptions, StackClientApp, type StackClientAppConstructorOptions, type StackClientAppJson, StackServerApp, type StackServerAppConstructorOptions, type Team, type TeamMember, type TokenStoreInit, type User, stackAppInternalsSymbol };
553
+ export { type AdminDomainConfig, type AdminEmailConfig, type AdminOAuthProviderConfig, type AdminOwnedProject, type AdminProject, type AdminProjectConfig, type AdminProjectConfigUpdateOptions, type AdminProjectCreateOptions, type AdminProjectUpdateOptions, type AdminTeamPermission, type AdminTeamPermissionDefinition, type AdminTeamPermissionDefinitionCreateOptions, type AdminTeamPermissionDefinitionUpdateOptions, type ApiKey, type ApiKeyBase, type ApiKeyBaseCrudRead, type ApiKeyCreateOptions, type ApiKeyFirstView, type Connection, type CurrentInternalServerUser, type CurrentInternalUser, type CurrentServerUser, type CurrentUser, type GetUserOptions, type HandlerUrls, type OAuthConnection, type OAuthProviderConfig, type OAuthScopesOnSignIn, type Project, type ProjectConfig, type ServerTeam, type ServerTeamCreateOptions, type ServerTeamUpdateOptions, type ServerUser, StackAdminApp, type StackAdminAppConstructorOptions, StackClientApp, type StackClientAppConstructorOptions, type StackClientAppJson, StackServerApp, type StackServerAppConstructorOptions, type Team, type TeamCreateOptions, type TeamPermission, type TokenStoreInit, type User, serverTeamPermissionDefinitionCreateOptionsToCrud, serverTeamPermissionDefinitionUpdateOptionsToCrud, stackAppInternalsSymbol };