@stackframe/js 2.7.22 → 2.7.25

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 (65) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +2 -2
  3. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js +6 -10
  4. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
  5. package/dist/esm/lib/stack-app/apps/implementations/common.js +1 -1
  6. package/dist/esm/lib/stack-app/apps/implementations/common.js.map +1 -1
  7. package/dist/esm/lib/stack-app/users/index.js.map +1 -1
  8. package/dist/index.d.mts +746 -23
  9. package/dist/index.d.ts +746 -23
  10. package/dist/lib/stack-app/apps/implementations/client-app-impl.js +5 -9
  11. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
  12. package/dist/lib/stack-app/apps/implementations/common.js +1 -1
  13. package/dist/lib/stack-app/apps/implementations/common.js.map +1 -1
  14. package/dist/lib/stack-app/users/index.js.map +1 -1
  15. package/package.json +2 -2
  16. package/dist/admin-app-impl-Co__PI-r.d.ts +0 -357
  17. package/dist/admin-app-impl-s-tPjfRz.d.mts +0 -357
  18. package/dist/index-COYzPcGI.d.mts +0 -526
  19. package/dist/index-CueS5Qbi.d.ts +0 -526
  20. package/dist/lib/auth.d.mts +0 -33
  21. package/dist/lib/auth.d.ts +0 -33
  22. package/dist/lib/cookie.d.mts +0 -33
  23. package/dist/lib/cookie.d.ts +0 -33
  24. package/dist/lib/stack-app/api-keys/index.d.mts +0 -40
  25. package/dist/lib/stack-app/api-keys/index.d.ts +0 -40
  26. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.mts +0 -30
  27. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts +0 -30
  28. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.mts +0 -30
  29. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts +0 -30
  30. package/dist/lib/stack-app/apps/implementations/common.d.mts +0 -44
  31. package/dist/lib/stack-app/apps/implementations/common.d.ts +0 -44
  32. package/dist/lib/stack-app/apps/implementations/index.d.mts +0 -36
  33. package/dist/lib/stack-app/apps/implementations/index.d.ts +0 -36
  34. package/dist/lib/stack-app/apps/implementations/server-app-impl.d.mts +0 -30
  35. package/dist/lib/stack-app/apps/implementations/server-app-impl.d.ts +0 -30
  36. package/dist/lib/stack-app/apps/index.d.mts +0 -23
  37. package/dist/lib/stack-app/apps/index.d.ts +0 -23
  38. package/dist/lib/stack-app/apps/interfaces/admin-app.d.mts +0 -23
  39. package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts +0 -23
  40. package/dist/lib/stack-app/apps/interfaces/client-app.d.mts +0 -23
  41. package/dist/lib/stack-app/apps/interfaces/client-app.d.ts +0 -23
  42. package/dist/lib/stack-app/apps/interfaces/server-app.d.mts +0 -23
  43. package/dist/lib/stack-app/apps/interfaces/server-app.d.ts +0 -23
  44. package/dist/lib/stack-app/common.d.mts +0 -61
  45. package/dist/lib/stack-app/common.d.ts +0 -61
  46. package/dist/lib/stack-app/connected-accounts/index.d.mts +0 -10
  47. package/dist/lib/stack-app/connected-accounts/index.d.ts +0 -10
  48. package/dist/lib/stack-app/contact-channels/index.d.mts +0 -38
  49. package/dist/lib/stack-app/contact-channels/index.d.ts +0 -38
  50. package/dist/lib/stack-app/email-templates/index.d.mts +0 -15
  51. package/dist/lib/stack-app/email-templates/index.d.ts +0 -15
  52. package/dist/lib/stack-app/index.d.mts +0 -23
  53. package/dist/lib/stack-app/index.d.ts +0 -23
  54. package/dist/lib/stack-app/permissions/index.d.mts +0 -21
  55. package/dist/lib/stack-app/permissions/index.d.ts +0 -21
  56. package/dist/lib/stack-app/project-configs/index.d.mts +0 -82
  57. package/dist/lib/stack-app/project-configs/index.d.ts +0 -82
  58. package/dist/lib/stack-app/projects/index.d.mts +0 -23
  59. package/dist/lib/stack-app/projects/index.d.ts +0 -23
  60. package/dist/lib/stack-app/teams/index.d.mts +0 -23
  61. package/dist/lib/stack-app/teams/index.d.ts +0 -23
  62. package/dist/lib/stack-app/users/index.d.mts +0 -23
  63. package/dist/lib/stack-app/users/index.d.ts +0 -23
  64. package/dist/utils/url.d.mts +0 -3
  65. package/dist/utils/url.d.ts +0 -3
package/dist/index.d.mts CHANGED
@@ -1,23 +1,746 @@
1
- export { f as AdminOwnedProject, r as AdminProject, _ as AdminProjectCreateOptions, g as AdminProjectUpdateOptions, A as Auth, y as CurrentInternalServerUser, u as CurrentInternalUser, x as CurrentServerUser, C as CurrentUser, E as EditableTeamMemberProfile, P as Project, o as ServerListUsersOptions, m as ServerTeam, p as ServerTeamCreateOptions, N as ServerTeamMemberProfile, Q as ServerTeamUpdateOptions, k as ServerTeamUser, j as ServerUser, s as Session, X as StackAdminApp, Y as StackAdminAppConstructor, q as StackAdminAppConstructorOptions, a as StackClientApp, a0 as StackClientAppConstructor, S as StackClientAppConstructorOptions, h as StackClientAppJson, V as StackServerApp, W as StackServerAppConstructor, i as StackServerAppConstructorOptions, c as Team, L as TeamCreateOptions, b as TeamInvitation, G as TeamMemberProfile, J as TeamUpdateOptions, T as TeamUser, t as User } from './index-COYzPcGI.mjs';
2
- export { AdminDomainConfig, AdminEmailConfig, AdminOAuthProviderConfig, AdminProjectConfig, AdminProjectConfigUpdateOptions, OAuthProviderConfig, ProjectConfig } from './lib/stack-app/project-configs/index.mjs';
3
- export { ApiKey, ApiKeyBase, ApiKeyBaseCrudRead, ApiKeyCreateOptions, ApiKeyFirstView } from './lib/stack-app/api-keys/index.mjs';
4
- export { GetUserOptions, HandlerUrls, OAuthScopesOnSignIn, stackAppInternalsSymbol } from './lib/stack-app/common.mjs';
5
- export { Connection, OAuthConnection } from './lib/stack-app/connected-accounts/index.mjs';
6
- export { ContactChannel } from './lib/stack-app/contact-channels/index.mjs';
7
- export { AdminTeamPermission, AdminTeamPermissionDefinition, AdminTeamPermissionDefinitionCreateOptions, AdminTeamPermissionDefinitionUpdateOptions, TeamPermission } from './lib/stack-app/permissions/index.mjs';
8
- import '@stackframe/stack-shared';
9
- import '@stackframe/stack-shared/dist/interface/crud/current-user';
10
- import '@stackframe/stack-shared/dist/utils/results';
11
- import '@stackframe/stack-shared/dist/helpers/production-mode';
12
- import '@stackframe/stack-shared/dist/interface/crud/projects';
13
- import '@stackframe/stack-shared/dist/interface/crud/email-templates';
14
- import '@stackframe/stack-shared/dist/sessions';
15
- import './lib/stack-app/email-templates/index.mjs';
16
- import '@stackframe/stack-shared/dist/interface/crud/teams';
17
- import '@stackframe/stack-shared/dist/utils/json';
18
- import '@stackframe/stack-shared/dist/interface/crud/users';
19
- import '@stackframe/stack-shared/dist/utils/oauth';
20
- import '@stackframe/stack-shared/dist/interface/crud/team-permissions';
21
- import '@stackframe/stack-shared/dist/interface/adminInterface';
22
- import '@stackframe/stack-shared/dist/interface/crud/api-keys';
23
- import '@stackframe/stack-shared/dist/interface/crud/contact-channels';
1
+ import { KnownErrors } from '@stackframe/stack-shared';
2
+ import { CurrentUserCrud } from '@stackframe/stack-shared/dist/interface/crud/current-user';
3
+ import { Result } from '@stackframe/stack-shared/dist/utils/results';
4
+ import { ProviderType } from '@stackframe/stack-shared/dist/utils/oauth';
5
+ import { ProductionModeError } from '@stackframe/stack-shared/dist/helpers/production-mode';
6
+ import { EmailTemplateType } from '@stackframe/stack-shared/dist/interface/crud/email-templates';
7
+ import { InternalSession } from '@stackframe/stack-shared/dist/sessions';
8
+ import { ApiKeysCrud } from '@stackframe/stack-shared/dist/interface/crud/api-keys';
9
+ import { ReadonlyJson } from '@stackframe/stack-shared/dist/utils/json';
10
+
11
+ type RedirectToOptions = {
12
+ replace?: boolean;
13
+ noRedirectBack?: boolean;
14
+ };
15
+ type AsyncStoreProperty<Name extends string, Args extends any[], Value, IsMultiple extends boolean> = {
16
+ [key in `${IsMultiple extends true ? "list" : "get"}${Capitalize<Name>}`]: (...args: Args) => Promise<Value>;
17
+ };
18
+ type EmailConfig = {
19
+ host: string;
20
+ port: number;
21
+ username: string;
22
+ password: string;
23
+ senderEmail: string;
24
+ senderName: string;
25
+ };
26
+ type RedirectMethod = "window" | "none" | {
27
+ useNavigate: () => (to: string) => void;
28
+ navigate?: (to: string) => void;
29
+ };
30
+ type GetUserOptions<HasTokenStore> = {
31
+ or?: 'redirect' | 'throw' | 'return-null';
32
+ tokenStore?: TokenStoreInit;
33
+ } & (HasTokenStore extends false ? {
34
+ tokenStore: TokenStoreInit;
35
+ } : {});
36
+ type RequestLike = {
37
+ headers: {
38
+ get: (name: string) => string | null;
39
+ };
40
+ };
41
+ type TokenStoreInit<HasTokenStore extends boolean = boolean> = HasTokenStore extends true ? ("cookie" | "nextjs-cookie" | "memory" | RequestLike | {
42
+ accessToken: string;
43
+ refreshToken: string;
44
+ }) : HasTokenStore extends false ? null : TokenStoreInit<true> | TokenStoreInit<false>;
45
+ type HandlerUrls = {
46
+ handler: string;
47
+ signIn: string;
48
+ signUp: string;
49
+ afterSignIn: string;
50
+ afterSignUp: string;
51
+ signOut: string;
52
+ afterSignOut: string;
53
+ emailVerification: string;
54
+ passwordReset: string;
55
+ forgotPassword: string;
56
+ home: string;
57
+ oauthCallback: string;
58
+ magicLinkCallback: string;
59
+ accountSettings: string;
60
+ teamInvitation: string;
61
+ error: string;
62
+ };
63
+ type OAuthScopesOnSignIn = {
64
+ [key in ProviderType]: string[];
65
+ };
66
+ /** @internal */
67
+ declare const stackAppInternalsSymbol: unique symbol;
68
+
69
+ type ApiKeyBase = {
70
+ id: string;
71
+ description: string;
72
+ expiresAt: Date;
73
+ manuallyRevokedAt: Date | null;
74
+ createdAt: Date;
75
+ isValid(): boolean;
76
+ whyInvalid(): "expired" | "manually-revoked" | null;
77
+ revoke(): Promise<void>;
78
+ };
79
+ type ApiKeyBaseCrudRead = Pick<ApiKeysCrud["Admin"]["Read"], "id" | "created_at_millis" | "description" | "expires_at_millis" | "manually_revoked_at_millis">;
80
+ type ApiKeyFirstView = {
81
+ publishableClientKey?: string;
82
+ secretServerKey?: string;
83
+ superSecretAdminKey?: string;
84
+ } & ApiKeyBase;
85
+ type ApiKey = {
86
+ publishableClientKey: null | {
87
+ lastFour: string;
88
+ };
89
+ secretServerKey: null | {
90
+ lastFour: string;
91
+ };
92
+ superSecretAdminKey: null | {
93
+ lastFour: string;
94
+ };
95
+ } & ApiKeyBase;
96
+ type ApiKeyCreateOptions = {
97
+ description: string;
98
+ expiresAt: Date;
99
+ hasPublishableClientKey: boolean;
100
+ hasSecretServerKey: boolean;
101
+ hasSuperSecretAdminKey: boolean;
102
+ };
103
+
104
+ type AdminEmailTemplate = {
105
+ type: EmailTemplateType;
106
+ subject: string;
107
+ content: any;
108
+ isDefault: boolean;
109
+ };
110
+ type AdminEmailTemplateUpdateOptions = {
111
+ subject?: string;
112
+ content?: any;
113
+ };
114
+
115
+ type TeamPermission = {
116
+ id: string;
117
+ };
118
+ type AdminTeamPermission = TeamPermission;
119
+ type AdminTeamPermissionDefinition = {
120
+ id: string;
121
+ description?: string;
122
+ containedPermissionIds: string[];
123
+ };
124
+ type AdminTeamPermissionDefinitionCreateOptions = {
125
+ id: string;
126
+ description?: string;
127
+ containedPermissionIds: string[];
128
+ };
129
+ type AdminTeamPermissionDefinitionUpdateOptions = Partial<AdminTeamPermissionDefinitionCreateOptions>;
130
+
131
+ type Connection = {
132
+ id: string;
133
+ };
134
+ type OAuthConnection = {
135
+ getAccessToken(): Promise<{
136
+ accessToken: string;
137
+ }>;
138
+ } & Connection;
139
+
140
+ type ContactChannel = {
141
+ id: string;
142
+ value: string;
143
+ type: 'email';
144
+ isPrimary: boolean;
145
+ isVerified: boolean;
146
+ usedForAuth: boolean;
147
+ sendVerificationEmail(): Promise<void>;
148
+ update(data: ContactChannelUpdateOptions): Promise<void>;
149
+ delete(): Promise<void>;
150
+ };
151
+ type ContactChannelCreateOptions = {
152
+ value: string;
153
+ type: 'email';
154
+ usedForAuth: boolean;
155
+ };
156
+ type ContactChannelUpdateOptions = {
157
+ usedForAuth?: boolean;
158
+ value?: string;
159
+ isPrimary?: boolean;
160
+ };
161
+ type ServerContactChannel = ContactChannel & {
162
+ update(data: ServerContactChannelUpdateOptions): Promise<void>;
163
+ };
164
+ type ServerContactChannelUpdateOptions = ContactChannelUpdateOptions & {
165
+ isVerified?: boolean;
166
+ };
167
+ type ServerContactChannelCreateOptions = ContactChannelCreateOptions & {
168
+ isVerified?: boolean;
169
+ };
170
+
171
+ type Session = {
172
+ getTokens(): Promise<{
173
+ accessToken: string | null;
174
+ refreshToken: string | null;
175
+ }>;
176
+ };
177
+ /**
178
+ * Contains everything related to the current user session.
179
+ */
180
+ type Auth = {
181
+ readonly _internalSession: InternalSession;
182
+ readonly currentSession: Session;
183
+ signOut(options?: {
184
+ redirectUrl?: URL | string;
185
+ }): Promise<void>;
186
+ /**
187
+ * Returns headers for sending authenticated HTTP requests to external servers. Most commonly used in cross-origin
188
+ * requests. Similar to `getAuthJson`, but specifically for HTTP requests.
189
+ *
190
+ * If you are using `tokenStore: "cookie"`, you don't need this for same-origin requests. However, most
191
+ * browsers now disable third-party cookies by default, so we must pass authentication tokens by header instead
192
+ * if the client and server are on different origins.
193
+ *
194
+ * This function returns a header object that can be used with `fetch` or other HTTP request libraries to send
195
+ * authenticated requests.
196
+ *
197
+ * On the server, you can then pass in the `Request` object to the `tokenStore` option
198
+ * of your Stack app. Please note that CORS does not allow most headers by default, so you
199
+ * must include `x-stack-auth` in the [`Access-Control-Allow-Headers` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)
200
+ * of the CORS preflight response.
201
+ *
202
+ * If you are not using HTTP (and hence cannot set headers), you will need to use the `getAuthJson()` function
203
+ * instead.
204
+ *
205
+ * Example:
206
+ *
207
+ * ```ts
208
+ * // client
209
+ * const res = await fetch("https://api.example.com", {
210
+ * headers: {
211
+ * ...await stackApp.getAuthHeaders()
212
+ * // you can also add your own headers here
213
+ * },
214
+ * });
215
+ *
216
+ * // server
217
+ * function handleRequest(req: Request) {
218
+ * const user = await stackServerApp.getUser({ tokenStore: req });
219
+ * return new Response("Welcome, " + user.displayName);
220
+ * }
221
+ * ```
222
+ */
223
+ getAuthHeaders(): Promise<{
224
+ "x-stack-auth": string;
225
+ }>;
226
+ /**
227
+ * Creates a JSON-serializable object containing the information to authenticate a user on an external server.
228
+ * Similar to `getAuthHeaders`, but returns an object that can be sent over any protocol instead of just
229
+ * HTTP headers.
230
+ *
231
+ * While `getAuthHeaders` is the recommended way to send authentication tokens over HTTP, your app may use
232
+ * a different protocol, for example WebSockets or gRPC. This function returns a token object that can be JSON-serialized and sent to the server in any way you like.
233
+ *
234
+ * On the server, you can pass in this token object into the `tokenStore` option to fetch user details.
235
+ *
236
+ * Example:
237
+ *
238
+ * ```ts
239
+ * // client
240
+ * const res = await rpcCall(rpcEndpoint, {
241
+ * data: {
242
+ * auth: await stackApp.getAuthJson(),
243
+ * },
244
+ * });
245
+ *
246
+ * // server
247
+ * function handleRequest(data) {
248
+ * const user = await stackServerApp.getUser({ tokenStore: data.auth });
249
+ * return new Response("Welcome, " + user.displayName);
250
+ * }
251
+ * ```
252
+ */
253
+ getAuthJson(): Promise<{
254
+ accessToken: string | null;
255
+ refreshToken: string | null;
256
+ }>;
257
+ registerPasskey(options?: {
258
+ hostname?: string;
259
+ }): Promise<Result<undefined, KnownErrors["PasskeyRegistrationFailed"] | KnownErrors["PasskeyWebAuthnError"]>>;
260
+ };
261
+ /**
262
+ * ```
263
+ * +----------+-------------+-------------------+
264
+ * | \ | !Server | Server |
265
+ * +----------+-------------+-------------------+
266
+ * | !Session | User | ServerUser |
267
+ * | Session | CurrentUser | CurrentServerUser |
268
+ * +----------+-------------+-------------------+
269
+ * ```
270
+ *
271
+ * The fields on each of these types are available iff:
272
+ * BaseUser: true
273
+ * Auth: Session
274
+ * ServerBaseUser: Server
275
+ * UserExtra: Session OR Server
276
+ *
277
+ * The types are defined as follows (in the typescript manner):
278
+ * User = BaseUser
279
+ * CurrentUser = BaseUser & Auth & UserExtra
280
+ * ServerUser = BaseUser & ServerBaseUser & UserExtra
281
+ * CurrentServerUser = BaseUser & ServerBaseUser & Auth & UserExtra
282
+ **/
283
+ type BaseUser = {
284
+ readonly id: string;
285
+ readonly displayName: string | null;
286
+ /**
287
+ * The user's email address.
288
+ *
289
+ * Note: This might NOT be unique across multiple users, so always use `id` for unique identification.
290
+ */
291
+ readonly primaryEmail: string | null;
292
+ readonly primaryEmailVerified: boolean;
293
+ readonly profileImageUrl: string | null;
294
+ readonly signedUpAt: Date;
295
+ readonly clientMetadata: any;
296
+ readonly clientReadOnlyMetadata: any;
297
+ /**
298
+ * Whether the user has a password set.
299
+ */
300
+ readonly hasPassword: boolean;
301
+ readonly otpAuthEnabled: boolean;
302
+ readonly passkeyAuthEnabled: boolean;
303
+ readonly isMultiFactorRequired: boolean;
304
+ toClientJson(): CurrentUserCrud["Client"]["Read"];
305
+ /**
306
+ * @deprecated, use contact channel's usedForAuth instead
307
+ */
308
+ readonly emailAuthEnabled: boolean;
309
+ /**
310
+ * @deprecated
311
+ */
312
+ readonly oauthProviders: readonly {
313
+ id: string;
314
+ }[];
315
+ };
316
+ type UserExtra = {
317
+ setDisplayName(displayName: string): Promise<void>;
318
+ /** @deprecated Use contact channel's sendVerificationEmail instead */
319
+ sendVerificationEmail(): Promise<KnownErrors["EmailAlreadyVerified"] | void>;
320
+ setClientMetadata(metadata: any): Promise<void>;
321
+ updatePassword(options: {
322
+ oldPassword: string;
323
+ newPassword: string;
324
+ }): Promise<KnownErrors["PasswordConfirmationMismatch"] | KnownErrors["PasswordRequirementsNotMet"] | void>;
325
+ setPassword(options: {
326
+ password: string;
327
+ }): Promise<KnownErrors["PasswordRequirementsNotMet"] | void>;
328
+ /**
329
+ * A shorthand method to update multiple fields of the user at once.
330
+ */
331
+ update(update: UserUpdateOptions): Promise<void>;
332
+ listContactChannels(): Promise<ContactChannel[]>;
333
+ createContactChannel(data: ContactChannelCreateOptions): Promise<ContactChannel>;
334
+ delete(): Promise<void>;
335
+ getConnectedAccount(id: ProviderType, options: {
336
+ or: 'redirect';
337
+ scopes?: string[];
338
+ }): Promise<OAuthConnection>;
339
+ getConnectedAccount(id: ProviderType, options?: {
340
+ or?: 'redirect' | 'throw' | 'return-null';
341
+ scopes?: string[];
342
+ }): Promise<OAuthConnection | null>;
343
+ hasPermission(scope: Team, permissionId: string): Promise<boolean>;
344
+ readonly selectedTeam: Team | null;
345
+ setSelectedTeam(team: Team | null): Promise<void>;
346
+ createTeam(data: TeamCreateOptions): Promise<Team>;
347
+ leaveTeam(team: Team): Promise<void>;
348
+ getTeamProfile(team: Team): Promise<EditableTeamMemberProfile>;
349
+ } & AsyncStoreProperty<"team", [id: string], Team | null, false> & AsyncStoreProperty<"teams", [], Team[], true> & AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: {
350
+ recursive?: boolean;
351
+ }], TeamPermission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: {
352
+ recursive?: boolean;
353
+ }], TeamPermission[], true>;
354
+ type InternalUserExtra = {
355
+ createProject(newProject: AdminProjectUpdateOptions & {
356
+ displayName: string;
357
+ }): Promise<AdminOwnedProject>;
358
+ } & AsyncStoreProperty<"ownedProjects", [], AdminOwnedProject[], true>;
359
+ type User = BaseUser;
360
+ type CurrentUser = BaseUser & Auth & UserExtra;
361
+ type CurrentInternalUser = CurrentUser & InternalUserExtra;
362
+ type ProjectCurrentUser<ProjectId> = ProjectId extends "internal" ? CurrentInternalUser : CurrentUser;
363
+ type UserUpdateOptions = {
364
+ displayName?: string;
365
+ clientMetadata?: ReadonlyJson;
366
+ selectedTeamId?: string | null;
367
+ totpMultiFactorSecret?: Uint8Array | null;
368
+ profileImageUrl?: string | null;
369
+ otpAuthEnabled?: boolean;
370
+ passkeyAuthEnabled?: boolean;
371
+ };
372
+ type ServerBaseUser = {
373
+ setPrimaryEmail(email: string | null, options?: {
374
+ verified?: boolean | undefined;
375
+ }): Promise<void>;
376
+ readonly lastActiveAt: Date;
377
+ readonly serverMetadata: any;
378
+ setServerMetadata(metadata: any): Promise<void>;
379
+ setClientReadOnlyMetadata(metadata: any): Promise<void>;
380
+ createTeam(data: Omit<ServerTeamCreateOptions, "creatorUserId">): Promise<ServerTeam>;
381
+ listContactChannels(): Promise<ServerContactChannel[]>;
382
+ createContactChannel(data: ServerContactChannelCreateOptions): Promise<ServerContactChannel>;
383
+ update(user: ServerUserUpdateOptions): Promise<void>;
384
+ grantPermission(scope: Team, permissionId: string): Promise<void>;
385
+ revokePermission(scope: Team, permissionId: string): Promise<void>;
386
+ /**
387
+ * Creates a new session object with a refresh token for this user. Can be used to impersonate them.
388
+ */
389
+ createSession(options?: {
390
+ expiresInMillis?: number;
391
+ }): Promise<Session>;
392
+ } & AsyncStoreProperty<"team", [id: string], ServerTeam | null, false> & AsyncStoreProperty<"teams", [], ServerTeam[], true> & AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: {
393
+ direct?: boolean;
394
+ }], AdminTeamPermission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: {
395
+ direct?: boolean;
396
+ }], AdminTeamPermission[], true>;
397
+ /**
398
+ * A user including sensitive fields that should only be used on the server, never sent to the client
399
+ * (such as sensitive information and serverMetadata).
400
+ */
401
+ type ServerUser = ServerBaseUser & BaseUser & UserExtra;
402
+ type CurrentServerUser = Auth & ServerUser;
403
+ type CurrentInternalServerUser = CurrentServerUser & InternalUserExtra;
404
+ type ProjectCurrentServerUser<ProjectId> = ProjectId extends "internal" ? CurrentInternalServerUser : CurrentServerUser;
405
+ type ServerUserUpdateOptions = {
406
+ primaryEmail?: string | null;
407
+ primaryEmailVerified?: boolean;
408
+ primaryEmailAuthEnabled?: boolean;
409
+ clientReadOnlyMetadata?: ReadonlyJson;
410
+ serverMetadata?: ReadonlyJson;
411
+ password?: string;
412
+ } & UserUpdateOptions;
413
+ type ServerUserCreateOptions = {
414
+ primaryEmail?: string | null;
415
+ primaryEmailAuthEnabled?: boolean;
416
+ password?: string;
417
+ otpAuthEnabled?: boolean;
418
+ displayName?: string;
419
+ primaryEmailVerified?: boolean;
420
+ clientMetadata?: any;
421
+ clientReadOnlyMetadata?: any;
422
+ serverMetadata?: any;
423
+ };
424
+
425
+ type TeamMemberProfile = {
426
+ displayName: string | null;
427
+ profileImageUrl: string | null;
428
+ };
429
+ type TeamMemberProfileUpdateOptions = {
430
+ displayName?: string;
431
+ profileImageUrl?: string | null;
432
+ };
433
+ type EditableTeamMemberProfile = TeamMemberProfile & {
434
+ update(update: TeamMemberProfileUpdateOptions): Promise<void>;
435
+ };
436
+ type TeamUser = {
437
+ id: string;
438
+ teamProfile: TeamMemberProfile;
439
+ };
440
+ type TeamInvitation = {
441
+ id: string;
442
+ recipientEmail: string | null;
443
+ expiresAt: Date;
444
+ revoke(): Promise<void>;
445
+ };
446
+ type Team = {
447
+ id: string;
448
+ displayName: string;
449
+ profileImageUrl: string | null;
450
+ clientMetadata: any;
451
+ clientReadOnlyMetadata: any;
452
+ inviteUser(options: {
453
+ email: string;
454
+ callbackUrl?: string;
455
+ }): Promise<void>;
456
+ listUsers(): Promise<TeamUser[]>;
457
+ listInvitations(): Promise<TeamInvitation[]>;
458
+ update(update: TeamUpdateOptions): Promise<void>;
459
+ delete(): Promise<void>;
460
+ };
461
+ type TeamUpdateOptions = {
462
+ displayName?: string;
463
+ profileImageUrl?: string | null;
464
+ clientMetadata?: ReadonlyJson;
465
+ };
466
+ type TeamCreateOptions = {
467
+ displayName: string;
468
+ profileImageUrl?: string;
469
+ };
470
+ type ServerTeamMemberProfile = TeamMemberProfile;
471
+ type ServerTeamUser = ServerUser & {
472
+ teamProfile: ServerTeamMemberProfile;
473
+ };
474
+ type ServerTeam = {
475
+ createdAt: Date;
476
+ serverMetadata: any;
477
+ listUsers(): Promise<ServerTeamUser[]>;
478
+ update(update: ServerTeamUpdateOptions): Promise<void>;
479
+ delete(): Promise<void>;
480
+ addUser(userId: string): Promise<void>;
481
+ inviteUser(options: {
482
+ email: string;
483
+ callbackUrl?: string;
484
+ }): Promise<void>;
485
+ removeUser(userId: string): Promise<void>;
486
+ } & Team;
487
+ type ServerListUsersOptions = {
488
+ cursor?: string;
489
+ limit?: number;
490
+ orderBy?: 'signedUpAt';
491
+ desc?: boolean;
492
+ query?: string;
493
+ };
494
+ type ServerTeamCreateOptions = TeamCreateOptions & {
495
+ creatorUserId?: string;
496
+ };
497
+ type ServerTeamUpdateOptions = TeamUpdateOptions & {
498
+ clientReadOnlyMetadata?: ReadonlyJson;
499
+ serverMetadata?: ReadonlyJson;
500
+ };
501
+
502
+ type StackServerAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = StackClientAppConstructorOptions<HasTokenStore, ProjectId> & {
503
+ secretServerKey?: string;
504
+ };
505
+ type StackServerAppConstructor = {
506
+ new <TokenStoreType extends string, HasTokenStore extends (TokenStoreType extends {} ? true : boolean), ProjectId extends string>(options: StackServerAppConstructorOptions<HasTokenStore, ProjectId>): StackServerApp<HasTokenStore, ProjectId>;
507
+ new (options: StackServerAppConstructorOptions<boolean, string>): StackServerApp<boolean, string>;
508
+ };
509
+ type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = ({
510
+ createTeam(data: ServerTeamCreateOptions): Promise<ServerTeam>;
511
+ /**
512
+ * @deprecated use `getUser()` instead
513
+ */
514
+ getServerUser(): Promise<ProjectCurrentServerUser<ProjectId> | null>;
515
+ createUser(options: ServerUserCreateOptions): Promise<ServerUser>;
516
+ getUser(options: GetUserOptions<HasTokenStore> & {
517
+ or: 'redirect';
518
+ }): Promise<ProjectCurrentServerUser<ProjectId>>;
519
+ getUser(options: GetUserOptions<HasTokenStore> & {
520
+ or: 'throw';
521
+ }): Promise<ProjectCurrentServerUser<ProjectId>>;
522
+ getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentServerUser<ProjectId> | null>;
523
+ listUsers(options?: ServerListUsersOptions): Promise<ServerUser[] & {
524
+ nextCursor: string | null;
525
+ }>;
526
+ } & AsyncStoreProperty<"user", [id: string], ServerUser | null, false> & Omit<AsyncStoreProperty<"users", [], ServerUser[], true>, "listUsers" | "useUsers"> & AsyncStoreProperty<"team", [id: string], ServerTeam | null, false> & AsyncStoreProperty<"teams", [], ServerTeam[], true> & StackClientApp<HasTokenStore, ProjectId>);
527
+ declare const StackServerApp: StackServerAppConstructor;
528
+
529
+ type StackAdminAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = ((StackServerAppConstructorOptions<HasTokenStore, ProjectId> & {
530
+ superSecretAdminKey?: string;
531
+ }) | (Omit<StackServerAppConstructorOptions<HasTokenStore, ProjectId>, "publishableClientKey" | "secretServerKey"> & {
532
+ projectOwnerSession: InternalSession;
533
+ }));
534
+ type StackAdminAppConstructor = {
535
+ new <HasTokenStore extends boolean, ProjectId extends string>(options: StackAdminAppConstructorOptions<HasTokenStore, ProjectId>): StackAdminApp<HasTokenStore, ProjectId>;
536
+ new (options: StackAdminAppConstructorOptions<boolean, string>): StackAdminApp<boolean, string>;
537
+ };
538
+ type StackAdminApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (AsyncStoreProperty<"project", [], AdminProject, false> & AsyncStoreProperty<"apiKeys", [], ApiKey[], true> & AsyncStoreProperty<"teamPermissionDefinitions", [], AdminTeamPermissionDefinition[], true> & {
539
+ listEmailTemplates(): Promise<AdminEmailTemplate[]>;
540
+ updateEmailTemplate(type: EmailTemplateType, data: AdminEmailTemplateUpdateOptions): Promise<void>;
541
+ resetEmailTemplate(type: EmailTemplateType): Promise<void>;
542
+ createApiKey(options: ApiKeyCreateOptions): Promise<ApiKeyFirstView>;
543
+ createTeamPermissionDefinition(data: AdminTeamPermissionDefinitionCreateOptions): Promise<AdminTeamPermission>;
544
+ updateTeamPermissionDefinition(permissionId: string, data: AdminTeamPermissionDefinitionUpdateOptions): Promise<void>;
545
+ deleteTeamPermissionDefinition(permissionId: string): Promise<void>;
546
+ sendTestEmail(options: {
547
+ recipientEmail: string;
548
+ emailConfig: EmailConfig;
549
+ }): Promise<Result<undefined, {
550
+ errorMessage: string;
551
+ }>>;
552
+ } & StackServerApp<HasTokenStore, ProjectId>);
553
+ declare const StackAdminApp: StackAdminAppConstructor;
554
+
555
+ type ProjectConfig = {
556
+ readonly signUpEnabled: boolean;
557
+ readonly credentialEnabled: boolean;
558
+ readonly magicLinkEnabled: boolean;
559
+ readonly passkeyEnabled: boolean;
560
+ readonly clientTeamCreationEnabled: boolean;
561
+ readonly clientUserDeletionEnabled: boolean;
562
+ readonly oauthProviders: OAuthProviderConfig[];
563
+ };
564
+ type OAuthProviderConfig = {
565
+ readonly id: string;
566
+ };
567
+ type AdminProjectConfig = {
568
+ readonly id: string;
569
+ readonly signUpEnabled: boolean;
570
+ readonly credentialEnabled: boolean;
571
+ readonly magicLinkEnabled: boolean;
572
+ readonly passkeyEnabled: boolean;
573
+ readonly clientTeamCreationEnabled: boolean;
574
+ readonly clientUserDeletionEnabled: boolean;
575
+ readonly allowLocalhost: boolean;
576
+ readonly oauthProviders: AdminOAuthProviderConfig[];
577
+ readonly emailConfig?: AdminEmailConfig;
578
+ readonly domains: AdminDomainConfig[];
579
+ readonly createTeamOnSignUp: boolean;
580
+ readonly teamCreatorDefaultPermissions: AdminTeamPermission[];
581
+ readonly teamMemberDefaultPermissions: AdminTeamPermission[];
582
+ };
583
+ type AdminEmailConfig = ({
584
+ type: "standard";
585
+ senderName: string;
586
+ senderEmail: string;
587
+ host: string;
588
+ port: number;
589
+ username: string;
590
+ password: string;
591
+ } | {
592
+ type: "shared";
593
+ });
594
+ type AdminDomainConfig = {
595
+ domain: string;
596
+ handlerPath: string;
597
+ };
598
+ type AdminOAuthProviderConfig = {
599
+ id: string;
600
+ enabled: boolean;
601
+ } & ({
602
+ type: 'shared';
603
+ } | {
604
+ type: 'standard';
605
+ clientId: string;
606
+ clientSecret: string;
607
+ facebookConfigId?: string;
608
+ microsoftTenantId?: string;
609
+ }) & OAuthProviderConfig;
610
+ type AdminProjectConfigUpdateOptions = {
611
+ domains?: {
612
+ domain: string;
613
+ handlerPath: string;
614
+ }[];
615
+ oauthProviders?: AdminOAuthProviderConfig[];
616
+ signUpEnabled?: boolean;
617
+ credentialEnabled?: boolean;
618
+ magicLinkEnabled?: boolean;
619
+ passkeyEnabled?: boolean;
620
+ clientTeamCreationEnabled?: boolean;
621
+ clientUserDeletionEnabled?: boolean;
622
+ allowLocalhost?: boolean;
623
+ createTeamOnSignUp?: boolean;
624
+ emailConfig?: AdminEmailConfig;
625
+ teamCreatorDefaultPermissions?: {
626
+ id: string;
627
+ }[];
628
+ teamMemberDefaultPermissions?: {
629
+ id: string;
630
+ }[];
631
+ };
632
+
633
+ type Project = {
634
+ readonly id: string;
635
+ readonly displayName: string;
636
+ readonly config: ProjectConfig;
637
+ };
638
+ type AdminProject = {
639
+ readonly id: string;
640
+ readonly displayName: string;
641
+ readonly description: string | null;
642
+ readonly createdAt: Date;
643
+ readonly userCount: number;
644
+ readonly isProductionMode: boolean;
645
+ readonly config: AdminProjectConfig;
646
+ update(this: AdminProject, update: AdminProjectUpdateOptions): Promise<void>;
647
+ delete(this: AdminProject): Promise<void>;
648
+ getProductionModeErrors(this: AdminProject): Promise<ProductionModeError[]>;
649
+ useProductionModeErrors(this: AdminProject): ProductionModeError[];
650
+ } & Project;
651
+ type AdminOwnedProject = {
652
+ readonly app: StackAdminApp<false>;
653
+ } & AdminProject;
654
+ type AdminProjectUpdateOptions = {
655
+ displayName?: string;
656
+ description?: string;
657
+ isProductionMode?: boolean;
658
+ config?: AdminProjectConfigUpdateOptions;
659
+ };
660
+ type AdminProjectCreateOptions = Omit<AdminProjectUpdateOptions, 'displayName'> & {
661
+ displayName: string;
662
+ };
663
+
664
+ type StackClientAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = {
665
+ baseUrl?: string | {
666
+ browser: string;
667
+ server: string;
668
+ };
669
+ projectId?: ProjectId;
670
+ publishableClientKey?: string;
671
+ urls?: Partial<HandlerUrls>;
672
+ oauthScopesOnSignIn?: Partial<OAuthScopesOnSignIn>;
673
+ tokenStore: TokenStoreInit<HasTokenStore>;
674
+ redirectMethod?: RedirectMethod;
675
+ /**
676
+ * By default, the Stack app will automatically prefetch some data from Stack's server when this app is first
677
+ * constructed. This improves the performance of your app, but will create network requests that are unnecessary if
678
+ * the app is never used or disposed of immediately. To disable this behavior, set this option to true.
679
+ */
680
+ noAutomaticPrefetch?: boolean;
681
+ };
682
+ type StackClientAppJson<HasTokenStore extends boolean, ProjectId extends string> = StackClientAppConstructorOptions<HasTokenStore, ProjectId> & {
683
+ uniqueIdentifier: string;
684
+ };
685
+ type StackClientAppConstructor = {
686
+ new <TokenStoreType extends string, HasTokenStore extends (TokenStoreType extends {} ? true : boolean), ProjectId extends string>(options: StackClientAppConstructorOptions<HasTokenStore, ProjectId>): StackClientApp<HasTokenStore, ProjectId>;
687
+ new (options: StackClientAppConstructorOptions<boolean, string>): StackClientApp<boolean, string>;
688
+ [stackAppInternalsSymbol]: {
689
+ fromClientJson<HasTokenStore extends boolean, ProjectId extends string>(json: StackClientAppJson<HasTokenStore, ProjectId>): StackClientApp<HasTokenStore, ProjectId>;
690
+ };
691
+ };
692
+ type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = ({
693
+ readonly projectId: ProjectId;
694
+ readonly urls: Readonly<HandlerUrls>;
695
+ signInWithOAuth(provider: string): Promise<void>;
696
+ signInWithCredential(options: {
697
+ email: string;
698
+ password: string;
699
+ noRedirect?: boolean;
700
+ }): Promise<Result<undefined, KnownErrors["EmailPasswordMismatch"] | KnownErrors["InvalidTotpCode"]>>;
701
+ signUpWithCredential(options: {
702
+ email: string;
703
+ password: string;
704
+ noRedirect?: boolean;
705
+ verificationCallbackUrl?: string;
706
+ }): Promise<Result<undefined, KnownErrors["UserEmailAlreadyExists"] | KnownErrors["PasswordRequirementsNotMet"]>>;
707
+ signInWithPasskey(): Promise<Result<undefined, KnownErrors["PasskeyAuthenticationFailed"] | KnownErrors["InvalidTotpCode"] | KnownErrors["PasskeyWebAuthnError"]>>;
708
+ callOAuthCallback(): Promise<boolean>;
709
+ sendForgotPasswordEmail(email: string, options?: {
710
+ callbackUrl?: string;
711
+ }): Promise<Result<undefined, KnownErrors["UserNotFound"]>>;
712
+ sendMagicLinkEmail(email: string, options?: {
713
+ callbackUrl?: string;
714
+ }): Promise<Result<{
715
+ nonce: string;
716
+ }, KnownErrors["RedirectUrlNotWhitelisted"]>>;
717
+ resetPassword(options: {
718
+ code: string;
719
+ password: string;
720
+ }): Promise<Result<undefined, KnownErrors["VerificationCodeError"]>>;
721
+ verifyPasswordResetCode(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"]>>;
722
+ verifyTeamInvitationCode(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"]>>;
723
+ acceptTeamInvitation(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"]>>;
724
+ getTeamInvitationDetails(code: string): Promise<Result<{
725
+ teamDisplayName: string;
726
+ }, KnownErrors["VerificationCodeError"]>>;
727
+ verifyEmail(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"]>>;
728
+ signInWithMagicLink(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"] | KnownErrors["InvalidTotpCode"]>>;
729
+ redirectToOAuthCallback(): Promise<void>;
730
+ getUser(options: GetUserOptions<HasTokenStore> & {
731
+ or: 'redirect';
732
+ }): Promise<ProjectCurrentUser<ProjectId>>;
733
+ getUser(options: GetUserOptions<HasTokenStore> & {
734
+ or: 'throw';
735
+ }): Promise<ProjectCurrentUser<ProjectId>>;
736
+ getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentUser<ProjectId> | null>;
737
+ [stackAppInternalsSymbol]: {
738
+ toClientJson(): StackClientAppJson<HasTokenStore, ProjectId>;
739
+ setCurrentUser(userJsonPromise: Promise<CurrentUserCrud['Client']['Read'] | null>): void;
740
+ };
741
+ } & AsyncStoreProperty<"project", [], Project, false> & {
742
+ [K in `redirectTo${Capitalize<keyof Omit<HandlerUrls, 'handler' | 'oauthCallback'>>}`]: (options?: RedirectToOptions) => Promise<void>;
743
+ });
744
+ declare const StackClientApp: StackClientAppConstructor;
745
+
746
+ 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 Auth, type Connection, type ContactChannel, type CurrentInternalServerUser, type CurrentInternalUser, type CurrentServerUser, type CurrentUser, type EditableTeamMemberProfile, type GetUserOptions, type HandlerUrls, type OAuthConnection, type OAuthProviderConfig, type OAuthScopesOnSignIn, type Project, type ProjectConfig, type ServerListUsersOptions, type ServerTeam, type ServerTeamCreateOptions, type ServerTeamMemberProfile, type ServerTeamUpdateOptions, type ServerTeamUser, type ServerUser, type Session, StackAdminApp, type StackAdminAppConstructor, type StackAdminAppConstructorOptions, StackClientApp, type StackClientAppConstructor, type StackClientAppConstructorOptions, type StackClientAppJson, StackServerApp, type StackServerAppConstructor, type StackServerAppConstructorOptions, type Team, type TeamCreateOptions, type TeamInvitation, type TeamMemberProfile, type TeamPermission, type TeamUpdateOptions, type TeamUser, type User, stackAppInternalsSymbol };