@stackframe/stack 2.4.23 → 2.4.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.
- package/CHANGELOG.md +18 -0
- package/dist/components/magic-link-sign-in.js +1 -1
- package/dist/components/magic-link-sign-in.js.map +1 -1
- package/dist/components/selected-team-switcher.d.mts +8 -0
- package/dist/components/selected-team-switcher.d.ts +8 -0
- package/dist/components/selected-team-switcher.js +75 -0
- package/dist/components/selected-team-switcher.js.map +1 -0
- package/dist/components-page/stack-handler.js +1 -1
- package/dist/components-page/stack-handler.js.map +1 -1
- package/dist/esm/components/magic-link-sign-in.js +1 -1
- package/dist/esm/components/magic-link-sign-in.js.map +1 -1
- package/dist/esm/components/selected-team-switcher.js +63 -0
- package/dist/esm/components/selected-team-switcher.js.map +1 -0
- package/dist/esm/components-page/stack-handler.js +1 -1
- package/dist/esm/components-page/stack-handler.js.map +1 -1
- package/dist/esm/index.js +22 -16
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/hooks.js.map +1 -1
- package/dist/esm/lib/stack-app.js +285 -282
- package/dist/esm/lib/stack-app.js.map +1 -1
- package/dist/esm/providers/stack-provider.js +1 -1
- package/dist/esm/providers/stack-provider.js.map +1 -1
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/hooks.d.mts +3 -3
- package/dist/lib/hooks.d.ts +3 -3
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/stack-app.d.mts +100 -81
- package/dist/lib/stack-app.d.ts +100 -81
- package/dist/lib/stack-app.js +283 -280
- package/dist/lib/stack-app.js.map +1 -1
- package/dist/providers/stack-provider.js +1 -1
- package/dist/providers/stack-provider.js.map +1 -1
- package/package.json +3 -3
package/dist/lib/stack-app.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ServerUserJson, OAuthProviderConfigJson
|
|
2
|
-
import { StandardProvider,
|
|
1
|
+
import { KnownErrors, ServerUserJson, OAuthProviderConfigJson } from '@stackframe/stack-shared';
|
|
2
|
+
import { StandardProvider, UserUpdateJson, UserJson, ProjectJson, ProductionModeError, TeamJson, EmailConfigJson, DomainConfigJson, ClientProjectJson } from '@stackframe/stack-shared/dist/interface/clientInterface';
|
|
3
3
|
import { ReadonlyJson } from '@stackframe/stack-shared/dist/utils/json';
|
|
4
4
|
import { ProjectUpdateOptions, ApiKeySetCreateOptions } from '@stackframe/stack-shared/dist/interface/adminInterface';
|
|
5
5
|
import { ServerUserUpdateJson, ServerTeamCustomizableJson, ServerPermissionDefinitionCustomizableJson, ServerPermissionDefinitionJson, EmailTemplateType } from '@stackframe/stack-shared/dist/interface/serverInterface';
|
|
@@ -36,6 +36,7 @@ type OAuthScopesOnSignIn = {
|
|
|
36
36
|
[key in StandardProvider]: string[];
|
|
37
37
|
};
|
|
38
38
|
type ProjectCurrentUser<ProjectId> = ProjectId extends "internal" ? CurrentInternalUser : CurrentUser;
|
|
39
|
+
type ProjectCurrentServerUser<ProjectId> = ProjectId extends "internal" ? CurrentInternalServerUser : CurrentServerUser;
|
|
39
40
|
type StackClientAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = {
|
|
40
41
|
baseUrl?: string;
|
|
41
42
|
projectId?: ProjectId;
|
|
@@ -68,10 +69,10 @@ type Session = {
|
|
|
68
69
|
/**
|
|
69
70
|
* Contains everything related to the current user session.
|
|
70
71
|
*/
|
|
71
|
-
type Auth
|
|
72
|
+
type Auth = {
|
|
72
73
|
readonly _internalSession: InternalSession;
|
|
73
74
|
readonly currentSession: Session;
|
|
74
|
-
signOut(
|
|
75
|
+
signOut(): Promise<void>;
|
|
75
76
|
/**
|
|
76
77
|
* Returns headers for sending authenticated HTTP requests to external servers. Most commonly used in cross-origin
|
|
77
78
|
* requests. Similar to `getAuthJson`, but specifically for HTTP requests.
|
|
@@ -143,26 +144,12 @@ type Auth<T, C> = {
|
|
|
143
144
|
accessToken: string | null;
|
|
144
145
|
refreshToken: string | null;
|
|
145
146
|
}>;
|
|
146
|
-
update(this: T, user: C): Promise<void>;
|
|
147
|
-
updateSelectedTeam(this: T, team: Team | null): Promise<void>;
|
|
148
|
-
sendVerificationEmail(this: T): Promise<KnownErrors["EmailAlreadyVerified"] | void>;
|
|
149
|
-
updatePassword(this: T, options: {
|
|
150
|
-
oldPassword: string;
|
|
151
|
-
newPassword: string;
|
|
152
|
-
}): Promise<KnownErrors["PasswordMismatch"] | KnownErrors["PasswordRequirementsNotMet"] | void>;
|
|
153
147
|
};
|
|
154
|
-
type
|
|
155
|
-
createProject(this: T, newProject: ProjectUpdateOptions & {
|
|
156
|
-
displayName: string;
|
|
157
|
-
}): Promise<Project>;
|
|
158
|
-
listOwnedProjects(this: T): Promise<Project[]>;
|
|
159
|
-
useOwnedProjects(this: T): Project[];
|
|
160
|
-
onOwnedProjectsChange(this: T, callback: (projects: Project[]) => void): void;
|
|
161
|
-
};
|
|
162
|
-
type User = ({
|
|
148
|
+
type User = {
|
|
163
149
|
readonly projectId: string;
|
|
164
150
|
readonly id: string;
|
|
165
151
|
readonly displayName: string | null;
|
|
152
|
+
setDisplayName(displayName: string): Promise<void>;
|
|
166
153
|
/**
|
|
167
154
|
* The user's email address.
|
|
168
155
|
*
|
|
@@ -170,71 +157,87 @@ type User = ({
|
|
|
170
157
|
*/
|
|
171
158
|
readonly primaryEmail: string | null;
|
|
172
159
|
readonly primaryEmailVerified: boolean;
|
|
160
|
+
sendVerificationEmail(): Promise<KnownErrors["EmailAlreadyVerified"] | void>;
|
|
173
161
|
readonly profileImageUrl: string | null;
|
|
174
162
|
readonly signedUpAt: Date;
|
|
175
163
|
readonly clientMetadata: ReadonlyJson;
|
|
176
|
-
|
|
177
|
-
|
|
164
|
+
setClientMetadata(metadata: ReadonlyJson): Promise<void>;
|
|
165
|
+
/**
|
|
166
|
+
* Whether the primary e-mail can be used for authentication.
|
|
167
|
+
*/
|
|
178
168
|
readonly authWithEmail: boolean;
|
|
169
|
+
/**
|
|
170
|
+
* Whether the user has a password set.
|
|
171
|
+
*/
|
|
172
|
+
readonly hasPassword: boolean;
|
|
179
173
|
readonly oauthProviders: readonly string[];
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
174
|
+
updatePassword(options: {
|
|
175
|
+
oldPassword: string;
|
|
176
|
+
newPassword: string;
|
|
177
|
+
}): Promise<KnownErrors["PasswordMismatch"] | KnownErrors["PasswordRequirementsNotMet"] | void>;
|
|
178
|
+
/**
|
|
179
|
+
* A shorthand method to update multiple fields of the user at once.
|
|
180
|
+
*/
|
|
181
|
+
update(update: UserUpdateJson): Promise<void>;
|
|
182
|
+
hasPermission(scope: Team, permissionId: string): Promise<boolean>;
|
|
183
|
+
readonly selectedTeam: Team | null;
|
|
184
|
+
setSelectedTeam(team: Team | null): Promise<void>;
|
|
185
|
+
getConnectedAccount(id: StandardProvider, options: {
|
|
187
186
|
or: 'redirect';
|
|
188
187
|
scopes?: string[];
|
|
189
188
|
}): Promise<OAuthConnection>;
|
|
190
|
-
|
|
191
|
-
or?: 'redirect';
|
|
189
|
+
getConnectedAccount(id: StandardProvider, options?: {
|
|
190
|
+
or?: 'redirect' | 'throw' | 'return-null';
|
|
192
191
|
scopes?: string[];
|
|
193
192
|
}): Promise<OAuthConnection | null>;
|
|
194
|
-
|
|
195
|
-
scopes?: string[];
|
|
196
|
-
}): OAuthConnection | null;
|
|
197
|
-
useConnection(id: StandardProvider, options: {
|
|
193
|
+
useConnectedAccount(id: StandardProvider, options: {
|
|
198
194
|
or: 'redirect';
|
|
199
195
|
scopes?: string[];
|
|
200
196
|
}): OAuthConnection;
|
|
201
|
-
|
|
202
|
-
or?: 'redirect';
|
|
197
|
+
useConnectedAccount(id: StandardProvider, options?: {
|
|
198
|
+
or?: 'redirect' | 'throw' | 'return-null';
|
|
203
199
|
scopes?: string[];
|
|
204
200
|
}): OAuthConnection | null;
|
|
205
|
-
|
|
206
|
-
} & AsyncStoreProperty<"team", [id: string], Team | null, false> & AsyncStoreProperty<"teams", [], Team[], true> &
|
|
201
|
+
toClientJson(): UserJson;
|
|
202
|
+
} & AsyncStoreProperty<"team", [id: string], Team | null, false> & AsyncStoreProperty<"teams", [], Team[], true> & AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: {
|
|
207
203
|
direct?: boolean;
|
|
208
|
-
}], Permission | null, false
|
|
204
|
+
}], Permission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: {
|
|
209
205
|
direct?: boolean;
|
|
210
|
-
}], Permission[], true
|
|
211
|
-
type
|
|
212
|
-
|
|
206
|
+
}], Permission[], true>;
|
|
207
|
+
type InternalUserExtra = {
|
|
208
|
+
createProject(newProject: ProjectUpdateOptions & {
|
|
209
|
+
displayName: string;
|
|
210
|
+
}): Promise<Project>;
|
|
211
|
+
} & AsyncStoreProperty<"ownedProjects", [], Project[], true>;
|
|
212
|
+
type CurrentUser = Auth & User;
|
|
213
|
+
type CurrentInternalUser = CurrentUser & InternalUserExtra;
|
|
213
214
|
/**
|
|
214
215
|
* A user including sensitive fields that should only be used on the server, never sent to the client
|
|
215
216
|
* (such as sensitive information and serverMetadata).
|
|
216
217
|
*/
|
|
217
|
-
type ServerUser =
|
|
218
|
+
type ServerUser = {
|
|
219
|
+
setPrimaryEmail(email: string, options?: {
|
|
220
|
+
verified?: boolean | undefined;
|
|
221
|
+
}): Promise<void>;
|
|
218
222
|
readonly serverMetadata: ReadonlyJson;
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
223
|
+
setServerMetadata(metadata: ReadonlyJson): Promise<void>;
|
|
224
|
+
updatePassword(options: {
|
|
225
|
+
oldPassword?: string;
|
|
226
|
+
newPassword: string;
|
|
227
|
+
}): Promise<KnownErrors["PasswordMismatch"] | KnownErrors["PasswordRequirementsNotMet"] | void>;
|
|
228
|
+
update(user: Partial<ServerUserUpdateJson>): Promise<void>;
|
|
229
|
+
delete(): Promise<void>;
|
|
225
230
|
grantPermission(scope: Team, permissionId: string): Promise<void>;
|
|
226
231
|
revokePermission(scope: Team, permissionId: string): Promise<void>;
|
|
227
232
|
hasPermission(scope: Team, permissionId: string): Promise<boolean>;
|
|
228
|
-
|
|
229
|
-
} & AsyncStoreProperty<"team", [id: string], ServerTeam | null, false> & AsyncStoreProperty<"teams", [], ServerTeam[], true> &
|
|
233
|
+
toServerJson(): ServerUserJson;
|
|
234
|
+
} & AsyncStoreProperty<"team", [id: string], ServerTeam | null, false> & AsyncStoreProperty<"teams", [], ServerTeam[], true> & AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: {
|
|
230
235
|
direct?: boolean;
|
|
231
|
-
}], ServerPermission | null, false
|
|
236
|
+
}], ServerPermission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: {
|
|
232
237
|
direct?: boolean;
|
|
233
|
-
}], ServerPermission[], true
|
|
234
|
-
type CurrentServerUser = Auth
|
|
235
|
-
|
|
236
|
-
};
|
|
237
|
-
type CurrentInternalServerUser = CurrentServerUser & InternalAuth<CurrentServerUser>;
|
|
238
|
+
}], ServerPermission[], true> & User;
|
|
239
|
+
type CurrentServerUser = Auth & ServerUser;
|
|
240
|
+
type CurrentInternalServerUser = CurrentServerUser & InternalUserExtra;
|
|
238
241
|
type Project = {
|
|
239
242
|
readonly id: string;
|
|
240
243
|
readonly displayName: string;
|
|
@@ -260,7 +263,7 @@ type Team = {
|
|
|
260
263
|
id: string;
|
|
261
264
|
displayName: string;
|
|
262
265
|
createdAt: Date;
|
|
263
|
-
toJson(
|
|
266
|
+
toJson(): TeamJson;
|
|
264
267
|
};
|
|
265
268
|
type ServerTeam = Team & {
|
|
266
269
|
listMembers(): Promise<ServerTeamMember[]>;
|
|
@@ -276,7 +279,7 @@ type TeamMember = {
|
|
|
276
279
|
displayName: string | null;
|
|
277
280
|
};
|
|
278
281
|
type ServerTeamMember = TeamMember & {
|
|
279
|
-
|
|
282
|
+
user: ServerUser;
|
|
280
283
|
};
|
|
281
284
|
type Permission = {
|
|
282
285
|
id: string;
|
|
@@ -331,14 +334,14 @@ type ApiKeySet = ApiKeySetBase & {
|
|
|
331
334
|
type EmailConfig = EmailConfigJson;
|
|
332
335
|
type DomainConfig = DomainConfigJson;
|
|
333
336
|
type OAuthProviderConfig = OAuthProviderConfigJson;
|
|
334
|
-
type GetUserOptions = {
|
|
337
|
+
type GetUserOptions<HasTokenStore> = {
|
|
335
338
|
or?: 'redirect' | 'throw' | 'return-null';
|
|
336
339
|
tokenStore?: TokenStoreInit;
|
|
337
|
-
}
|
|
340
|
+
} & (HasTokenStore extends false ? {
|
|
341
|
+
tokenStore: TokenStoreInit;
|
|
342
|
+
} : {});
|
|
338
343
|
type AsyncStoreProperty<Name extends string, Args extends any[], Value, IsMultiple extends boolean> = {
|
|
339
344
|
[key in `${IsMultiple extends true ? "list" : "get"}${Capitalize<Name>}`]: (...args: Args) => Promise<Value>;
|
|
340
|
-
} & {
|
|
341
|
-
[key in `on${Capitalize<Name>}Change`]: (...tupleArgs: [...args: Args, callback: (value: Value) => void]) => void;
|
|
342
345
|
} & {
|
|
343
346
|
[key in `use${Capitalize<Name>}`]: (...args: Args) => Value;
|
|
344
347
|
};
|
|
@@ -371,36 +374,34 @@ type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId extends s
|
|
|
371
374
|
verifyPasswordResetCode(code: string): Promise<KnownErrors["PasswordResetCodeError"] | void>;
|
|
372
375
|
verifyEmail(code: string): Promise<KnownErrors["EmailVerificationError"] | void>;
|
|
373
376
|
signInWithMagicLink(code: string): Promise<KnownErrors["MagicLinkError"] | void>;
|
|
374
|
-
[stackAppInternalsSymbol]: {
|
|
375
|
-
toClientJson(): StackClientAppJson<HasTokenStore, ProjectId>;
|
|
376
|
-
setCurrentUser(userJsonPromise: Promise<UserJson | null>): void;
|
|
377
|
-
};
|
|
378
|
-
} & AsyncStoreProperty<"project", [], ClientProjectJson, false> & {
|
|
379
|
-
[K in `redirectTo${Capitalize<keyof Omit<HandlerUrls, 'handler' | 'oauthCallback'>>}`]: (options?: RedirectToOptions) => Promise<void>;
|
|
380
|
-
} & (HasTokenStore extends false ? {} : {
|
|
381
377
|
redirectToOAuthCallback(): Promise<void>;
|
|
382
|
-
useUser(options: GetUserOptions & {
|
|
378
|
+
useUser(options: GetUserOptions<HasTokenStore> & {
|
|
383
379
|
or: 'redirect';
|
|
384
380
|
}): ProjectCurrentUser<ProjectId>;
|
|
385
|
-
useUser(options: GetUserOptions & {
|
|
381
|
+
useUser(options: GetUserOptions<HasTokenStore> & {
|
|
386
382
|
or: 'throw';
|
|
387
383
|
}): ProjectCurrentUser<ProjectId>;
|
|
388
|
-
useUser(options?: GetUserOptions): ProjectCurrentUser<ProjectId> | null;
|
|
389
|
-
getUser(options: GetUserOptions & {
|
|
384
|
+
useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentUser<ProjectId> | null;
|
|
385
|
+
getUser(options: GetUserOptions<HasTokenStore> & {
|
|
390
386
|
or: 'redirect';
|
|
391
387
|
}): Promise<ProjectCurrentUser<ProjectId>>;
|
|
392
|
-
getUser(options: GetUserOptions & {
|
|
388
|
+
getUser(options: GetUserOptions<HasTokenStore> & {
|
|
393
389
|
or: 'throw';
|
|
394
390
|
}): Promise<ProjectCurrentUser<ProjectId>>;
|
|
395
|
-
getUser(options?: GetUserOptions): Promise<ProjectCurrentUser<ProjectId> | null>;
|
|
396
|
-
|
|
397
|
-
|
|
391
|
+
getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentUser<ProjectId> | null>;
|
|
392
|
+
[stackAppInternalsSymbol]: {
|
|
393
|
+
toClientJson(): StackClientAppJson<HasTokenStore, ProjectId>;
|
|
394
|
+
setCurrentUser(userJsonPromise: Promise<UserJson | null>): void;
|
|
395
|
+
};
|
|
396
|
+
} & AsyncStoreProperty<"project", [], ClientProjectJson, false> & {
|
|
397
|
+
[K in `redirectTo${Capitalize<keyof Omit<HandlerUrls, 'handler' | 'oauthCallback'>>}`]: (options?: RedirectToOptions) => Promise<void>;
|
|
398
|
+
});
|
|
398
399
|
declare const StackClientApp: StackClientAppConstructor;
|
|
399
400
|
type StackServerAppConstructor = {
|
|
400
401
|
new <TokenStoreType extends string, HasTokenStore extends (TokenStoreType extends {} ? true : boolean), ProjectId extends string>(options: StackServerAppConstructorOptions<HasTokenStore, ProjectId>): StackServerApp<HasTokenStore, ProjectId>;
|
|
401
402
|
new (options: StackServerAppConstructorOptions<boolean, string>): StackServerApp<boolean, string>;
|
|
402
403
|
};
|
|
403
|
-
type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (
|
|
404
|
+
type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = ({
|
|
404
405
|
createTeam(data: ServerTeamCustomizableJson): Promise<ServerTeam>;
|
|
405
406
|
createPermissionDefinition(data: ServerPermissionDefinitionCustomizableJson): Promise<ServerPermission>;
|
|
406
407
|
updatePermissionDefinition(permissionId: string, data: Partial<ServerPermissionDefinitionCustomizableJson>): Promise<void>;
|
|
@@ -411,7 +412,25 @@ type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends s
|
|
|
411
412
|
listEmailTemplates(): Promise<ListEmailTemplatesCrud['Server']['Read']>;
|
|
412
413
|
updateEmailTemplate(type: EmailTemplateType, data: EmailTemplateCrud['Server']['Update']): Promise<void>;
|
|
413
414
|
resetEmailTemplate(type: EmailTemplateType): Promise<void>;
|
|
414
|
-
|
|
415
|
+
/**
|
|
416
|
+
* @deprecated use `getUser()` instead
|
|
417
|
+
*/
|
|
418
|
+
getServerUser(): Promise<ProjectCurrentServerUser<ProjectId> | null>;
|
|
419
|
+
useUser(options: GetUserOptions<HasTokenStore> & {
|
|
420
|
+
or: 'redirect';
|
|
421
|
+
}): ProjectCurrentServerUser<ProjectId>;
|
|
422
|
+
useUser(options: GetUserOptions<HasTokenStore> & {
|
|
423
|
+
or: 'throw';
|
|
424
|
+
}): ProjectCurrentServerUser<ProjectId>;
|
|
425
|
+
useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentServerUser<ProjectId> | null;
|
|
426
|
+
getUser(options: GetUserOptions<HasTokenStore> & {
|
|
427
|
+
or: 'redirect';
|
|
428
|
+
}): Promise<ProjectCurrentServerUser<ProjectId>>;
|
|
429
|
+
getUser(options: GetUserOptions<HasTokenStore> & {
|
|
430
|
+
or: 'throw';
|
|
431
|
+
}): Promise<ProjectCurrentServerUser<ProjectId>>;
|
|
432
|
+
getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentServerUser<ProjectId> | null>;
|
|
433
|
+
} & StackClientApp<HasTokenStore, ProjectId> & AsyncStoreProperty<"users", [], ServerUser[], true> & AsyncStoreProperty<"team", [id: string], ServerTeam | null, false> & AsyncStoreProperty<"teams", [], ServerTeam[], true>);
|
|
415
434
|
declare const StackServerApp: StackServerAppConstructor;
|
|
416
435
|
type StackAdminAppConstructor = {
|
|
417
436
|
new <HasTokenStore extends boolean, ProjectId extends string>(options: StackAdminAppConstructorOptions<HasTokenStore, ProjectId>): StackAdminApp<HasTokenStore, ProjectId>;
|