@better-auth/sso 1.4.0-beta.21 → 1.4.0-beta.23
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/.turbo/turbo-build.log +10 -10
- package/dist/client.d.mts +14 -3
- package/dist/client.mjs +1 -1
- package/dist/{index-C091fIpa.d.mts → index-xXD__4zM.d.mts} +195 -19
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +302 -51
- package/package.json +4 -4
- package/src/client.ts +20 -3
- package/src/domain-verification.test.ts +550 -0
- package/src/index.ts +66 -12
- package/src/routes/domain-verification.ts +275 -0
- package/src/routes/sso.ts +133 -19
- package/src/saml.test.ts +143 -1
- package/src/types.ts +51 -3
- package/src/utils.ts +10 -0
- package/vitest.config.ts +3 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
|
|
2
|
-
> @better-auth/sso@1.4.0-beta.
|
|
2
|
+
> @better-auth/sso@1.4.0-beta.23 build /home/runner/work/better-auth/better-auth/packages/sso
|
|
3
3
|
> tsdown
|
|
4
4
|
|
|
5
|
-
[34mℹ[39m tsdown [2mv0.16.
|
|
5
|
+
[34mℹ[39m tsdown [2mv0.16.5[22m powered by rolldown [2mv1.0.0-beta.50[22m
|
|
6
6
|
[34mℹ[39m Using tsdown config: [4m/home/runner/work/better-auth/better-auth/packages/sso/tsdown.config.ts[24m
|
|
7
|
-
[34mℹ[39m entry: [34msrc/
|
|
7
|
+
[34mℹ[39m entry: [34msrc/index.ts, src/client.ts[39m
|
|
8
8
|
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
9
9
|
[34mℹ[39m Build start
|
|
10
|
-
[34mℹ[39m [2mdist/[22m[1mindex.mjs[22m [
|
|
11
|
-
[34mℹ[39m [2mdist/[22m[1mclient.mjs[22m [2m 0.15 kB[22m [2m│ gzip:
|
|
12
|
-
[34mℹ[39m [2mdist/[22m[32m[1mclient.d.mts[22m[39m [2m 0.
|
|
13
|
-
[34mℹ[39m [2mdist/[22m[32m[1mindex.d.mts[22m[39m [2m 0.
|
|
14
|
-
[34mℹ[39m [2mdist/[22m[32mindex-
|
|
15
|
-
[34mℹ[39m 5 files, total:
|
|
16
|
-
[32m✔[39m Build complete in [
|
|
10
|
+
[34mℹ[39m [2mdist/[22m[1mindex.mjs[22m [2m57.77 kB[22m [2m│ gzip: 10.35 kB[22m
|
|
11
|
+
[34mℹ[39m [2mdist/[22m[1mclient.mjs[22m [2m 0.15 kB[22m [2m│ gzip: 0.14 kB[22m
|
|
12
|
+
[34mℹ[39m [2mdist/[22m[32m[1mclient.d.mts[22m[39m [2m 0.49 kB[22m [2m│ gzip: 0.30 kB[22m
|
|
13
|
+
[34mℹ[39m [2mdist/[22m[32m[1mindex.d.mts[22m[39m [2m 0.21 kB[22m [2m│ gzip: 0.15 kB[22m
|
|
14
|
+
[34mℹ[39m [2mdist/[22m[32mindex-xXD__4zM.d.mts[39m [2m25.36 kB[22m [2m│ gzip: 3.94 kB[22m
|
|
15
|
+
[34mℹ[39m 5 files, total: 83.98 kB
|
|
16
|
+
[32m✔[39m Build complete in [32m11335ms[39m
|
package/dist/client.d.mts
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
|
-
import { t as
|
|
1
|
+
import { t as SSOPlugin } from "./index-xXD__4zM.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/client.d.ts
|
|
4
|
-
|
|
4
|
+
interface SSOClientOptions {
|
|
5
|
+
domainVerification?: {
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
} | undefined;
|
|
8
|
+
}
|
|
9
|
+
declare const ssoClient: <CO extends SSOClientOptions>(options?: CO | undefined) => {
|
|
5
10
|
id: "sso-client";
|
|
6
|
-
$InferServerPlugin:
|
|
11
|
+
$InferServerPlugin: SSOPlugin<{
|
|
12
|
+
domainVerification: {
|
|
13
|
+
enabled: CO["domainVerification"] extends {
|
|
14
|
+
enabled: true;
|
|
15
|
+
} ? true : false;
|
|
16
|
+
};
|
|
17
|
+
}>;
|
|
7
18
|
};
|
|
8
19
|
//#endregion
|
|
9
20
|
export { ssoClient };
|
package/dist/client.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { OAuth2Tokens, User } from "better-auth";
|
|
2
1
|
import * as z from "zod/v4";
|
|
2
|
+
import { OAuth2Tokens, User } from "better-auth";
|
|
3
3
|
import * as better_call0 from "better-call";
|
|
4
4
|
|
|
5
5
|
//#region src/types.d.ts
|
|
@@ -76,7 +76,7 @@ interface SAMLConfig {
|
|
|
76
76
|
additionalParams?: Record<string, any> | undefined;
|
|
77
77
|
mapping?: SAMLMapping | undefined;
|
|
78
78
|
}
|
|
79
|
-
type
|
|
79
|
+
type BaseSSOProvider = {
|
|
80
80
|
issuer: string;
|
|
81
81
|
oidcConfig?: OIDCConfig | undefined;
|
|
82
82
|
samlConfig?: SAMLConfig | undefined;
|
|
@@ -85,6 +85,11 @@ type SSOProvider = {
|
|
|
85
85
|
organizationId?: string | undefined;
|
|
86
86
|
domain: string;
|
|
87
87
|
};
|
|
88
|
+
type SSOProvider<O extends SSOOptions> = O["domainVerification"] extends {
|
|
89
|
+
enabled: true;
|
|
90
|
+
} ? {
|
|
91
|
+
domainVerified: boolean;
|
|
92
|
+
} & BaseSSOProvider : BaseSSOProvider;
|
|
88
93
|
interface SSOOptions {
|
|
89
94
|
/**
|
|
90
95
|
* custom function to provision a user when they sign in with an SSO provider.
|
|
@@ -105,7 +110,7 @@ interface SSOOptions {
|
|
|
105
110
|
/**
|
|
106
111
|
* The SSO provider
|
|
107
112
|
*/
|
|
108
|
-
provider: SSOProvider
|
|
113
|
+
provider: SSOProvider<SSOOptions>;
|
|
109
114
|
}) => Promise<void>) | undefined;
|
|
110
115
|
/**
|
|
111
116
|
* Organization provisioning options
|
|
@@ -129,7 +134,7 @@ interface SSOOptions {
|
|
|
129
134
|
/**
|
|
130
135
|
* The SSO provider
|
|
131
136
|
*/
|
|
132
|
-
provider: SSOProvider
|
|
137
|
+
provider: SSOProvider<SSOOptions>;
|
|
133
138
|
}) => Promise<"member" | "admin">;
|
|
134
139
|
} | undefined;
|
|
135
140
|
/**
|
|
@@ -165,6 +170,29 @@ interface SSOOptions {
|
|
|
165
170
|
* sign-in need to be called with with requestSignUp as true to create new users.
|
|
166
171
|
*/
|
|
167
172
|
disableImplicitSignUp?: boolean | undefined;
|
|
173
|
+
/**
|
|
174
|
+
* The model name for the SSO provider table. Defaults to "ssoProvider".
|
|
175
|
+
*/
|
|
176
|
+
modelName?: string;
|
|
177
|
+
/**
|
|
178
|
+
* Map fields
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```ts
|
|
182
|
+
* {
|
|
183
|
+
* samlConfig: "saml_config"
|
|
184
|
+
* }
|
|
185
|
+
* ```
|
|
186
|
+
*/
|
|
187
|
+
fields?: {
|
|
188
|
+
issuer?: string | undefined;
|
|
189
|
+
oidcConfig?: string | undefined;
|
|
190
|
+
samlConfig?: string | undefined;
|
|
191
|
+
userId?: string | undefined;
|
|
192
|
+
providerId?: string | undefined;
|
|
193
|
+
organizationId?: string | undefined;
|
|
194
|
+
domain?: string | undefined;
|
|
195
|
+
};
|
|
168
196
|
/**
|
|
169
197
|
* Configure the maximum number of SSO providers a user can register.
|
|
170
198
|
* You can also pass a function that returns a number.
|
|
@@ -191,8 +219,129 @@ interface SSOOptions {
|
|
|
191
219
|
* @default false
|
|
192
220
|
*/
|
|
193
221
|
trustEmailVerified?: boolean | undefined;
|
|
222
|
+
/**
|
|
223
|
+
* Enable domain verification on SSO providers
|
|
224
|
+
*
|
|
225
|
+
* When this option is enabled, new SSO providers will require the associated domain to be verified by the owner
|
|
226
|
+
* prior to allowing sign-ins.
|
|
227
|
+
*/
|
|
228
|
+
domainVerification?: {
|
|
229
|
+
/**
|
|
230
|
+
* Enables or disables the domain verification feature
|
|
231
|
+
*/
|
|
232
|
+
enabled?: boolean;
|
|
233
|
+
/**
|
|
234
|
+
* Prefix used to generate the domain verification token
|
|
235
|
+
*
|
|
236
|
+
* @default "better-auth-token-"
|
|
237
|
+
*/
|
|
238
|
+
tokenPrefix?: string;
|
|
239
|
+
};
|
|
194
240
|
}
|
|
195
241
|
//#endregion
|
|
242
|
+
//#region src/routes/domain-verification.d.ts
|
|
243
|
+
declare const requestDomainVerification: (options: SSOOptions) => better_call0.StrictEndpoint<"/sso/request-domain-verification", {
|
|
244
|
+
method: "POST";
|
|
245
|
+
body: z.ZodObject<{
|
|
246
|
+
providerId: z.ZodString;
|
|
247
|
+
}, z.core.$strip>;
|
|
248
|
+
metadata: {
|
|
249
|
+
openapi: {
|
|
250
|
+
summary: string;
|
|
251
|
+
description: string;
|
|
252
|
+
responses: {
|
|
253
|
+
"404": {
|
|
254
|
+
description: string;
|
|
255
|
+
};
|
|
256
|
+
"409": {
|
|
257
|
+
description: string;
|
|
258
|
+
};
|
|
259
|
+
"201": {
|
|
260
|
+
description: string;
|
|
261
|
+
};
|
|
262
|
+
};
|
|
263
|
+
};
|
|
264
|
+
};
|
|
265
|
+
use: ((inputContext: better_call0.MiddlewareInputContext<better_call0.MiddlewareOptions>) => Promise<{
|
|
266
|
+
session: {
|
|
267
|
+
session: Record<string, any> & {
|
|
268
|
+
id: string;
|
|
269
|
+
createdAt: Date;
|
|
270
|
+
updatedAt: Date;
|
|
271
|
+
userId: string;
|
|
272
|
+
expiresAt: Date;
|
|
273
|
+
token: string;
|
|
274
|
+
ipAddress?: string | null | undefined;
|
|
275
|
+
userAgent?: string | null | undefined;
|
|
276
|
+
};
|
|
277
|
+
user: Record<string, any> & {
|
|
278
|
+
id: string;
|
|
279
|
+
createdAt: Date;
|
|
280
|
+
updatedAt: Date;
|
|
281
|
+
email: string;
|
|
282
|
+
emailVerified: boolean;
|
|
283
|
+
name: string;
|
|
284
|
+
image?: string | null | undefined;
|
|
285
|
+
};
|
|
286
|
+
};
|
|
287
|
+
}>)[];
|
|
288
|
+
} & {
|
|
289
|
+
use: any[];
|
|
290
|
+
}, {
|
|
291
|
+
domainVerificationToken: string;
|
|
292
|
+
}>;
|
|
293
|
+
declare const verifyDomain: (options: SSOOptions) => better_call0.StrictEndpoint<"/sso/verify-domain", {
|
|
294
|
+
method: "POST";
|
|
295
|
+
body: z.ZodObject<{
|
|
296
|
+
providerId: z.ZodString;
|
|
297
|
+
}, z.core.$strip>;
|
|
298
|
+
metadata: {
|
|
299
|
+
openapi: {
|
|
300
|
+
summary: string;
|
|
301
|
+
description: string;
|
|
302
|
+
responses: {
|
|
303
|
+
"404": {
|
|
304
|
+
description: string;
|
|
305
|
+
};
|
|
306
|
+
"409": {
|
|
307
|
+
description: string;
|
|
308
|
+
};
|
|
309
|
+
"502": {
|
|
310
|
+
description: string;
|
|
311
|
+
};
|
|
312
|
+
"204": {
|
|
313
|
+
description: string;
|
|
314
|
+
};
|
|
315
|
+
};
|
|
316
|
+
};
|
|
317
|
+
};
|
|
318
|
+
use: ((inputContext: better_call0.MiddlewareInputContext<better_call0.MiddlewareOptions>) => Promise<{
|
|
319
|
+
session: {
|
|
320
|
+
session: Record<string, any> & {
|
|
321
|
+
id: string;
|
|
322
|
+
createdAt: Date;
|
|
323
|
+
updatedAt: Date;
|
|
324
|
+
userId: string;
|
|
325
|
+
expiresAt: Date;
|
|
326
|
+
token: string;
|
|
327
|
+
ipAddress?: string | null | undefined;
|
|
328
|
+
userAgent?: string | null | undefined;
|
|
329
|
+
};
|
|
330
|
+
user: Record<string, any> & {
|
|
331
|
+
id: string;
|
|
332
|
+
createdAt: Date;
|
|
333
|
+
updatedAt: Date;
|
|
334
|
+
email: string;
|
|
335
|
+
emailVerified: boolean;
|
|
336
|
+
name: string;
|
|
337
|
+
image?: string | null | undefined;
|
|
338
|
+
};
|
|
339
|
+
};
|
|
340
|
+
}>)[];
|
|
341
|
+
} & {
|
|
342
|
+
use: any[];
|
|
343
|
+
}, void>;
|
|
344
|
+
//#endregion
|
|
196
345
|
//#region src/routes/sso.d.ts
|
|
197
346
|
declare const spMetadata: () => better_call0.StrictEndpoint<"/sso/saml2/sp/metadata", {
|
|
198
347
|
method: "GET";
|
|
@@ -218,7 +367,7 @@ declare const spMetadata: () => better_call0.StrictEndpoint<"/sso/saml2/sp/metad
|
|
|
218
367
|
} & {
|
|
219
368
|
use: any[];
|
|
220
369
|
}, Response>;
|
|
221
|
-
declare const registerSSOProvider: (options
|
|
370
|
+
declare const registerSSOProvider: <O extends SSOOptions>(options: O) => better_call0.StrictEndpoint<"/sso/register", {
|
|
222
371
|
method: "POST";
|
|
223
372
|
body: z.ZodObject<{
|
|
224
373
|
providerId: z.ZodString;
|
|
@@ -341,6 +490,14 @@ declare const registerSSOProvider: (options?: SSOOptions) => better_call0.Strict
|
|
|
341
490
|
type: string;
|
|
342
491
|
description: string;
|
|
343
492
|
};
|
|
493
|
+
domainVerified: {
|
|
494
|
+
type: string;
|
|
495
|
+
description: string;
|
|
496
|
+
};
|
|
497
|
+
domainVerificationToken: {
|
|
498
|
+
type: string;
|
|
499
|
+
description: string;
|
|
500
|
+
};
|
|
344
501
|
oidcConfig: {
|
|
345
502
|
type: string;
|
|
346
503
|
properties: {
|
|
@@ -474,16 +631,12 @@ declare const registerSSOProvider: (options?: SSOOptions) => better_call0.Strict
|
|
|
474
631
|
};
|
|
475
632
|
} & {
|
|
476
633
|
use: any[];
|
|
477
|
-
}, {
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
providerId: string;
|
|
484
|
-
organizationId?: string | undefined;
|
|
485
|
-
domain: string;
|
|
486
|
-
}>;
|
|
634
|
+
}, O["domainVerification"] extends {
|
|
635
|
+
enabled: true;
|
|
636
|
+
} ? {
|
|
637
|
+
domainVerified: boolean;
|
|
638
|
+
domainVerificationToken: string;
|
|
639
|
+
} & SSOProvider<O> : SSOProvider<O>>;
|
|
487
640
|
declare const signInSSO: (options?: SSOOptions) => better_call0.StrictEndpoint<"/sign-in/sso", {
|
|
488
641
|
method: "POST";
|
|
489
642
|
body: z.ZodObject<{
|
|
@@ -588,6 +741,7 @@ declare const callbackSSO: (options?: SSOOptions) => better_call0.StrictEndpoint
|
|
|
588
741
|
error: z.ZodOptional<z.ZodString>;
|
|
589
742
|
error_description: z.ZodOptional<z.ZodString>;
|
|
590
743
|
}, z.core.$strip>;
|
|
744
|
+
allowedMediaTypes: string[];
|
|
591
745
|
metadata: {
|
|
592
746
|
isAction: boolean;
|
|
593
747
|
openapi: {
|
|
@@ -659,17 +813,39 @@ declare const acsEndpoint: (options?: SSOOptions) => better_call0.StrictEndpoint
|
|
|
659
813
|
}, never>;
|
|
660
814
|
//#endregion
|
|
661
815
|
//#region src/index.d.ts
|
|
662
|
-
type
|
|
816
|
+
type DomainVerificationEndpoints = {
|
|
817
|
+
requestDomainVerification: ReturnType<typeof requestDomainVerification>;
|
|
818
|
+
verifyDomain: ReturnType<typeof verifyDomain>;
|
|
819
|
+
};
|
|
820
|
+
type SSOEndpoints<O extends SSOOptions> = {
|
|
663
821
|
spMetadata: ReturnType<typeof spMetadata>;
|
|
664
|
-
registerSSOProvider: ReturnType<typeof registerSSOProvider
|
|
822
|
+
registerSSOProvider: ReturnType<typeof registerSSOProvider<O>>;
|
|
665
823
|
signInSSO: ReturnType<typeof signInSSO>;
|
|
666
824
|
callbackSSO: ReturnType<typeof callbackSSO>;
|
|
667
825
|
callbackSSOSAML: ReturnType<typeof callbackSSOSAML>;
|
|
668
826
|
acsEndpoint: ReturnType<typeof acsEndpoint>;
|
|
669
827
|
};
|
|
828
|
+
type SSOPlugin<O extends SSOOptions> = {
|
|
829
|
+
id: "sso";
|
|
830
|
+
endpoints: SSOEndpoints<O> & (O extends {
|
|
831
|
+
domainVerification: {
|
|
832
|
+
enabled: true;
|
|
833
|
+
};
|
|
834
|
+
} ? DomainVerificationEndpoints : {});
|
|
835
|
+
};
|
|
836
|
+
declare function sso<O extends SSOOptions & {
|
|
837
|
+
domainVerification?: {
|
|
838
|
+
enabled: true;
|
|
839
|
+
};
|
|
840
|
+
}>(options?: O | undefined): {
|
|
841
|
+
id: "sso";
|
|
842
|
+
endpoints: SSOEndpoints<O> & DomainVerificationEndpoints;
|
|
843
|
+
schema: any;
|
|
844
|
+
options: O;
|
|
845
|
+
};
|
|
670
846
|
declare function sso<O extends SSOOptions>(options?: O | undefined): {
|
|
671
847
|
id: "sso";
|
|
672
|
-
endpoints: SSOEndpoints
|
|
848
|
+
endpoints: SSOEndpoints<O>;
|
|
673
849
|
};
|
|
674
850
|
//#endregion
|
|
675
|
-
export {
|
|
851
|
+
export { SSOOptions as a, SAMLConfig as i, sso as n, SSOProvider as o, OIDCConfig as r, SSOPlugin as t };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
export { OIDCConfig, SAMLConfig, SSOOptions, SSOProvider, sso };
|
|
1
|
+
import { a as SSOOptions, i as SAMLConfig, n as sso, o as SSOProvider, r as OIDCConfig, t as SSOPlugin } from "./index-xXD__4zM.mjs";
|
|
2
|
+
export { OIDCConfig, SAMLConfig, SSOOptions, SSOPlugin, SSOProvider, sso };
|