gemi 0.183.1 → 0.184.0

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 (37) hide show
  1. package/dist/auth/AuthController.d.ts.map +1 -1
  2. package/dist/auth/oauth/GitHubOAuthProvider.d.ts +60 -0
  3. package/dist/auth/oauth/GitHubOAuthProvider.d.ts.map +1 -0
  4. package/dist/auth/oauth/GoogleOAuthProvider.d.ts +18 -3
  5. package/dist/auth/oauth/GoogleOAuthProvider.d.ts.map +1 -1
  6. package/dist/auth/oauth/InstagramOAuthProvider.d.ts +12 -1
  7. package/dist/auth/oauth/InstagramOAuthProvider.d.ts.map +1 -1
  8. package/dist/auth/oauth/OAuthProvider.d.ts +23 -0
  9. package/dist/auth/oauth/OAuthProvider.d.ts.map +1 -1
  10. package/dist/auth/oauth/XOAuthProvider.d.ts +12 -1
  11. package/dist/auth/oauth/XOAuthProvider.d.ts.map +1 -1
  12. package/dist/auth/oauth/client.d.ts +69 -0
  13. package/dist/auth/oauth/client.d.ts.map +1 -0
  14. package/dist/auth/oauth/oauthState.d.ts +7 -1
  15. package/dist/auth/oauth/oauthState.d.ts.map +1 -1
  16. package/dist/auth/oauth/providers.d.ts +3 -2
  17. package/dist/auth/oauth/providers.d.ts.map +1 -1
  18. package/dist/{chunk-0hr6k996.js → chunk-eyehyb9v.js} +1 -1
  19. package/dist/{chunk-f54p1qc9.js → chunk-g06f1xf3.js} +2 -2
  20. package/dist/{chunk-f54p1qc9.js.map → chunk-g06f1xf3.js.map} +6 -6
  21. package/dist/{chunk-ynrqt4gq.js → chunk-neh2zrp0.js} +1 -1
  22. package/dist/{chunk-hbhrhspx.js → chunk-nhyx0gec.js} +2 -2
  23. package/dist/{chunk-hbhrhspx.js.map → chunk-nhyx0gec.js.map} +1 -1
  24. package/dist/{chunk-fhw4phyh.js → chunk-yantbc9e.js} +1 -1
  25. package/dist/facades/index.js +1 -1
  26. package/dist/http/index.js +1 -1
  27. package/dist/i18n/index.js +1 -1
  28. package/dist/kernel/index.js +1 -1
  29. package/dist/server/index.js +1 -1
  30. package/dist/services/index.d.ts +3 -0
  31. package/dist/services/index.d.ts.map +1 -1
  32. package/dist/services/index.js +13 -13
  33. package/dist/services/index.js.map +8 -6
  34. package/package.json +1 -1
  35. /package/dist/{chunk-0hr6k996.js.map → chunk-eyehyb9v.js.map} +0 -0
  36. /package/dist/{chunk-ynrqt4gq.js.map → chunk-neh2zrp0.js.map} +0 -0
  37. /package/dist/{chunk-fhw4phyh.js.map → chunk-yantbc9e.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"AuthController.d.ts","sourceRoot":"","sources":["../../auth/AuthController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuthController.d.ts","sourceRoot":"","sources":["../../auth/AuthController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { HttpRequest } from "../../http/HttpRequest";
2
+ import { type OAuthClientResolver, type ResolvedOAuthClient } from "./client";
3
+ import { type OAuthAuthorizationContext, type OAuthCallbackContext, OAuthProvider, type OAuthProfile } from "./OAuthProvider";
4
+ export interface GitHubOAuthProviderConfig {
5
+ /** The OAuth app's client id. Default `process.env.GITHUB_CLIENT_ID`. */
6
+ clientId: string;
7
+ /** The OAuth app's client secret. Default `process.env.GITHUB_CLIENT_SECRET`. */
8
+ clientSecret: string;
9
+ /**
10
+ * The callback path, on `HOST_NAME` (or the origin `resolve` answers): the
11
+ * `redirect_uri` of both the authorization URL and the code exchange.
12
+ * Default `/auth/oauth/github/callback`.
13
+ */
14
+ redirectPath: string;
15
+ /** Default `read:user user:email`: the profile, and the addresses to find the verified primary one. */
16
+ scope: string;
17
+ /**
18
+ * Extra parameters for GitHub's authorization URL, such as
19
+ * `{ allow_signup: "false" }` or `{ prompt: "select_account" }`. They cannot
20
+ * replace `state`, the PKCE challenge, `redirect_uri` or `client_id`.
21
+ */
22
+ authorizationParams: Record<string, string>;
23
+ /**
24
+ * The client and callback origin per request (#1140):
25
+ * `({ req, origin }) => ({ clientId, clientSecret, origin })`. What it
26
+ * leaves out comes from the options above; `null` turns the provider off
27
+ * for the request.
28
+ */
29
+ resolve?: OAuthClientResolver;
30
+ }
31
+ /**
32
+ * "Sign in with GitHub", through a GitHub OAuth app.
33
+ *
34
+ * ```ts
35
+ * oauthProviders: { github: new GitHubOAuthProvider() }
36
+ * ```
37
+ *
38
+ * The account's identity (`providerId`) is its numeric GitHub user id, as a
39
+ * string, never the login, which its owner can change and someone else can
40
+ * then take. The email is the account's **primary, verified** address from
41
+ * `GET /user/emails` (the `user:email` scope), reported with
42
+ * `emailVerified: true`. Without one (no verified primary address, or the
43
+ * scope was not granted) the profile's public email is returned, if any, as
44
+ * unverified, which the callback does not sign into an existing user by.
45
+ */
46
+ export declare class GitHubOAuthProvider extends OAuthProvider {
47
+ config: GitHubOAuthProviderConfig;
48
+ constructor(config?: Partial<GitHubOAuthProviderConfig>);
49
+ /** The app origin (`HOST_NAME`, else `APP_URL`) + `redirectPath`, the same for the authorization and the exchange. */
50
+ redirectUri(): string;
51
+ protected clientFor(req: HttpRequest<any, any> | null): Promise<ResolvedOAuthClient>;
52
+ private staticClient;
53
+ /** Synchronous without `resolve`. */
54
+ getRedirectUrl(req?: HttpRequest, ctx?: OAuthAuthorizationContext): string | Promise<string>;
55
+ private authorizationUrl;
56
+ onCallback(req: HttpRequest, ctx?: OAuthCallbackContext): Promise<OAuthProfile>;
57
+ /** The primary address from `GET /user/emails` when it is verified, else `undefined`. */
58
+ private primaryVerifiedEmail;
59
+ }
60
+ //# sourceMappingURL=GitHubOAuthProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubOAuthProvider.d.ts","sourceRoot":"","sources":["../../../auth/oauth/GitHubOAuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAsB,MAAM,UAAU,CAAC;AAClG,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EAEzB,aAAa,EACb,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,yBAAyB;IACxC,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,uGAAuG;IACvG,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C;;;;;OAKG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAiBD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,MAAM,EAAE,yBAAyB,CAAC;gBAEtB,MAAM,GAAE,OAAO,CAAC,yBAAyB,CAAM;IAY3D,sHAAsH;IACtH,WAAW;cAIQ,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI;IAY9D,OAAO,CAAC,YAAY;IAQpB,qCAAqC;IACrC,cAAc,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,yBAAyB,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ5F,OAAO,CAAC,gBAAgB;IAkBlB,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC;IAqErF,yFAAyF;YAC3E,oBAAoB;CAanC"}
@@ -1,12 +1,14 @@
1
1
  import type { HttpRequest } from "../../http/HttpRequest";
2
2
  import { type OAuthAuthorizationContext, type OAuthCallbackContext, OAuthProvider, type OAuthProfile } from "./OAuthProvider";
3
+ import { type OAuthClientResolver, type ResolvedOAuthClient } from "./client";
3
4
  type Config = {
4
5
  clientId: string;
5
6
  scope: string;
6
7
  clientSecret: string;
7
8
  /**
8
- * The callback path, on `HOST_NAME`. Used for the `redirect_uri` of both the
9
- * authorization URL and the token exchange, which Google requires to match.
9
+ * The callback path, on `HOST_NAME` (or the origin `resolve` answers). Used
10
+ * for the `redirect_uri` of both the authorization URL and the token
11
+ * exchange, which Google requires to match.
10
12
  */
11
13
  redirectPath: string;
12
14
  /**
@@ -15,13 +17,26 @@ type Config = {
15
17
  * replace `state`, the PKCE challenge, `redirect_uri` or `client_id`.
16
18
  */
17
19
  authorizationParams: Record<string, string>;
20
+ /**
21
+ * The client and callback origin per request (#1140), for an app that
22
+ * serves several hosts with a Google client each:
23
+ * `({ req, origin }) => ({ clientId, clientSecret, origin })`. What it
24
+ * leaves out comes from the options above; `null` turns the provider off
25
+ * for the request. Without it, every request uses the static client and
26
+ * `HOST_NAME`.
27
+ */
28
+ resolve?: OAuthClientResolver;
18
29
  };
19
30
  export declare class GoogleOAuthProvider extends OAuthProvider {
20
31
  config: Config;
21
32
  constructor(config?: Partial<Config>);
22
33
  /** The app origin (`HOST_NAME`, else `APP_URL`) + `redirectPath`, the same for the authorization and the exchange. */
23
34
  redirectUri(): string;
24
- getRedirectUrl(_req?: HttpRequest, ctx?: OAuthAuthorizationContext): string;
35
+ protected clientFor(req: HttpRequest<any, any> | null): Promise<ResolvedOAuthClient>;
36
+ /** Synchronous without `resolve`, as it has always been. */
37
+ getRedirectUrl(req?: HttpRequest, ctx?: OAuthAuthorizationContext): string | Promise<string>;
38
+ private staticClient;
39
+ private authorizationUrl;
25
40
  onCallback(req: HttpRequest, ctx?: OAuthCallbackContext): Promise<OAuthProfile>;
26
41
  }
27
42
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"GoogleOAuthProvider.d.ts","sourceRoot":"","sources":["../../../auth/oauth/GoogleOAuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EAEzB,aAAa,EACb,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAGzB,KAAK,MAAM,GAAG;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C,CAAC;AAgBF,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,MAAM,EAAE,MAAM,CAAC;gBACH,MAAM,GAAE,OAAO,CAAC,MAAM,CAAM;IAKxC,sHAAsH;IACtH,WAAW;IAIX,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,yBAAyB;IAuB5D,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC;CAwDtF"}
1
+ {"version":3,"file":"GoogleOAuthProvider.d.ts","sourceRoot":"","sources":["../../../auth/oauth/GoogleOAuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EAEzB,aAAa,EACb,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAsB,MAAM,UAAU,CAAC;AAElG,KAAK,MAAM,GAAG;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B,CAAC;AAgBF,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,MAAM,EAAE,MAAM,CAAC;gBACH,MAAM,GAAE,OAAO,CAAC,MAAM,CAAM;IAKxC,sHAAsH;IACtH,WAAW;cAIQ,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI;IAY9D,4DAA4D;IAC5D,cAAc,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,yBAAyB,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAU5F,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,gBAAgB;IAuBlB,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC;CA0DtF"}
@@ -1,6 +1,7 @@
1
1
  import type { HttpRequest } from "../../http/HttpRequest";
2
2
  import { type InstagramEndpoints } from "./instagram";
3
3
  import { type OAuthAuthorizationContext, OAuthProvider, type OAuthProfile } from "./OAuthProvider";
4
+ import { type OAuthClientResolver, type ResolvedOAuthClient } from "./client";
4
5
  export interface InstagramOAuthProviderConfig extends InstagramEndpoints {
5
6
  /** The Instagram app id. Default `process.env.INSTAGRAM_CLIENT_ID`. */
6
7
  clientId: string;
@@ -15,6 +16,13 @@ export interface InstagramOAuthProviderConfig extends InstagramEndpoints {
15
16
  redirectPath: string;
16
17
  /** Extra authorization URL parameters, e.g. `{ enable_fb_login: "false" }` or `{ force_reauth: "true" }`. */
17
18
  authorizationParams: Record<string, string>;
19
+ /**
20
+ * The app and callback origin per request (#1140):
21
+ * `({ req, origin }) => ({ clientId, clientSecret, origin })`. What it
22
+ * leaves out comes from the options above; `null` turns the provider off
23
+ * for the request.
24
+ */
25
+ resolve?: OAuthClientResolver;
18
26
  }
19
27
  /**
20
28
  * "Sign in with Instagram", through the Instagram API with Instagram Login.
@@ -40,7 +48,10 @@ export declare class InstagramOAuthProvider extends OAuthProvider {
40
48
  constructor(config?: Partial<InstagramOAuthProviderConfig>);
41
49
  /** The app origin (`HOST_NAME`, else `APP_URL`) + `redirectPath`, the same for the authorization and the exchange. */
42
50
  redirectUri(): string;
43
- getRedirectUrl(_req?: HttpRequest, ctx?: OAuthAuthorizationContext): string;
51
+ protected clientFor(req: HttpRequest<any, any> | null): Promise<ResolvedOAuthClient>;
52
+ private staticClient;
53
+ getRedirectUrl(req?: HttpRequest, ctx?: OAuthAuthorizationContext): string | Promise<string>;
54
+ private authorizationUrl;
44
55
  onCallback(req: HttpRequest): Promise<OAuthProfile>;
45
56
  }
46
57
  //# sourceMappingURL=InstagramOAuthProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InstagramOAuthProvider.d.ts","sourceRoot":"","sources":["../../../auth/oauth/InstagramOAuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAGL,KAAK,kBAAkB,EAKxB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,yBAAyB,EAE9B,aAAa,EACb,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,4BAA6B,SAAQ,kBAAkB;IACtE,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,6GAA6G;IAC7G,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,sBAAuB,SAAQ,aAAa;IAC9C,uBAAuB,UAAQ;IAE/B,WAAW,UAAS;IAE7B,MAAM,EAAE,4BAA4B,CAAC;gBAEzB,MAAM,GAAE,OAAO,CAAC,4BAA4B,CAAM;IAY9D,sHAAsH;IACtH,WAAW;IAIX,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,yBAAyB;IAgB5D,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAkC1D"}
1
+ {"version":3,"file":"InstagramOAuthProvider.d.ts","sourceRoot":"","sources":["../../../auth/oauth/InstagramOAuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAGL,KAAK,kBAAkB,EAKxB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,yBAAyB,EAE9B,aAAa,EACb,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAsB,MAAM,UAAU,CAAC;AAElG,MAAM,WAAW,4BAA6B,SAAQ,kBAAkB;IACtE,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,6GAA6G;IAC7G,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C;;;;;OAKG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,sBAAuB,SAAQ,aAAa;IAC9C,uBAAuB,UAAQ;IAE/B,WAAW,UAAS;IAE7B,MAAM,EAAE,4BAA4B,CAAC;gBAEzB,MAAM,GAAE,OAAO,CAAC,4BAA4B,CAAM;IAY9D,sHAAsH;IACtH,WAAW;cAIQ,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI;IAY9D,OAAO,CAAC,YAAY;IAQpB,cAAc,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,yBAAyB,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ5F,OAAO,CAAC,gBAAgB;IAgBlB,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAoC1D"}
@@ -1,4 +1,5 @@
1
1
  import { HttpRequest } from "../../http/HttpRequest";
2
+ import type { ResolvedOAuthClient } from "./client";
2
3
  /**
3
4
  * What `oauthRedirect` hands `getRedirectUrl`: the round trip's `state` and
4
5
  * PKCE challenge, which gemi has already stored for the callback to check.
@@ -83,6 +84,28 @@ export declare abstract class OAuthProvider {
83
84
  * email. `createUsers = false` still refuses them with `signup_disabled`.
84
85
  */
85
86
  createUsersWithoutEmail?: boolean;
87
+ /**
88
+ * The client this provider uses for `req`, for a provider whose client or
89
+ * callback origin depends on the request (#1140). The built-in providers
90
+ * answer from their `resolve` option, else their static config. `null`:
91
+ * the provider is not offered on this request, so its routes answer 404 and
92
+ * `Auth.oauthProviders()` leaves it out. `undefined` (the default): the
93
+ * provider has no per-request client, and is always offered.
94
+ *
95
+ * `req` is `null` outside a request, where a per-request client cannot be
96
+ * resolved.
97
+ */
98
+ protected clientFor(_req: HttpRequest<any, any> | null): Promise<ResolvedOAuthClient | null | undefined>;
99
+ /** Whether this provider is offered on `req`: `clientFor` does not answer `null`. */
100
+ isAvailable(req: HttpRequest<any, any> | null): Promise<boolean>;
101
+ /**
102
+ * The `redirect_uri` this provider sends for `req`, when it has one to
103
+ * report. `oauthRedirect` keeps it with the round trip's state, and
104
+ * `oauthCallback` refuses a callback for which it answers otherwise
105
+ * (`redirect_mismatch`): the code is then exchanged by the client, and with
106
+ * the `redirect_uri`, that asked for it.
107
+ */
108
+ redirectUriFor(req: HttpRequest<any, any>): Promise<string | undefined>;
86
109
  /**
87
110
  * The provider's authorization URL. Put `ctx.state` on it unchanged — a
88
111
  * callback whose `state` does not match is refused — and `ctx.codeChallenge`
@@ -1 +1 @@
1
- {"version":3,"file":"OAuthProvider.d.ts","sourceRoot":"","sources":["../../../auth/oauth/OAuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,IAAI,EAAE,MAAM,CAAC;gBACD,IAAI,EAAE,MAAM,EAAE,OAAO,SAAmC;CAKrE;AAED,8BAAsB,aAAa;IACjC;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,OAAO,CAAQ;IAE7B;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,OAAO,CAAQ;IAE7B;;;;;;;;;;;OAWG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAS;IAE1C;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CACrB,GAAG,EAAE,WAAW,EAChB,GAAG,CAAC,EAAE,yBAAyB,GAC9B,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC;CACzF"}
1
+ {"version":3,"file":"OAuthProvider.d.ts","sourceRoot":"","sources":["../../../auth/oauth/OAuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,IAAI,EAAE,MAAM,CAAC;gBACD,IAAI,EAAE,MAAM,EAAE,OAAO,SAAmC;CAKrE;AAED,8BAAsB,aAAa;IACjC;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,OAAO,CAAQ;IAE7B;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,OAAO,CAAQ;IAE7B;;;;;;;;;;;OAWG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAS;IAE1C;;;;;;;;;;OAUG;IACH,SAAS,CAAC,SAAS,CACjB,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,GACjC,OAAO,CAAC,mBAAmB,GAAG,IAAI,GAAG,SAAS,CAAC;IAIlD,qFAAqF;IAC/E,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAItE;;;;;;OAMG;IACG,cAAc,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI7E;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CACrB,GAAG,EAAE,WAAW,EAChB,GAAG,CAAC,EAAE,yBAAyB,GAC9B,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC;CACzF"}
@@ -1,24 +1,35 @@
1
1
  import { type TOAuth2Scope, TwitterApi } from "twitter-api-v2";
2
2
  import { HttpRequest } from "../../http/HttpRequest";
3
3
  import { type OAuthAuthorizationContext, type OAuthCallbackContext, OAuthProvider, type OAuthProfile } from "./OAuthProvider";
4
+ import { type OAuthClientResolver, type ResolvedOAuthClient } from "./client";
4
5
  type Config = {
5
6
  clientId: string;
6
7
  scope: TOAuth2Scope[];
7
8
  clientSecret: string;
8
9
  redirectPath: string;
10
+ /**
11
+ * The client and callback origin per request (#1140):
12
+ * `({ req, origin }) => ({ clientId, clientSecret, origin })`. What it
13
+ * leaves out comes from the options above; `null` turns the provider off
14
+ * for the request.
15
+ */
16
+ resolve?: OAuthClientResolver;
9
17
  };
10
18
  export declare class XOAuthProvider extends OAuthProvider {
11
19
  config: Config;
12
20
  client: TwitterApi;
13
21
  constructor(config?: Partial<Config>);
14
22
  redirectUri(): string;
23
+ protected clientFor(req: HttpRequest<any, any> | null): Promise<ResolvedOAuthClient>;
24
+ private staticClient;
15
25
  /**
16
26
  * Built here rather than with `generateOAuth2AuthLink`, which mints its own
17
27
  * state and verifier: the round trip's are gemi's, kept in a cookie so that
18
28
  * any process can finish it. They used to be kept in a `Map` on this
19
29
  * instance, which a callback reaching another process could not find.
20
30
  */
21
- getRedirectUrl(_req?: HttpRequest, ctx?: OAuthAuthorizationContext): string;
31
+ getRedirectUrl(req?: HttpRequest, ctx?: OAuthAuthorizationContext): string | Promise<string>;
32
+ private authorizationUrl;
22
33
  onCallback(req: HttpRequest, ctx?: OAuthCallbackContext): Promise<OAuthProfile>;
23
34
  }
24
35
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"XOAuthProvider.d.ts","sourceRoot":"","sources":["../../../auth/oauth/XOAuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EAEzB,aAAa,EACb,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAGzB,KAAK,MAAM,GAAG;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AASF,qBAAa,cAAe,SAAQ,aAAa;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;gBAEP,MAAM,GAAE,OAAO,CAAC,MAAM,CAAM;IASxC,WAAW;IAIX;;;;;OAKG;IACH,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,yBAAyB;IAoB5D,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC;CAwBtF"}
1
+ {"version":3,"file":"XOAuthProvider.d.ts","sourceRoot":"","sources":["../../../auth/oauth/XOAuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EAEzB,aAAa,EACb,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAsB,MAAM,UAAU,CAAC;AAElG,KAAK,MAAM,GAAG;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B,CAAC;AASF,qBAAa,cAAe,SAAQ,aAAa;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;gBAEP,MAAM,GAAE,OAAO,CAAC,MAAM,CAAM;IASxC,WAAW;cAIQ,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI;IAY9D,OAAO,CAAC,YAAY;IAQpB;;;;;OAKG;IACH,cAAc,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,yBAAyB,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW5F,OAAO,CAAC,gBAAgB;IAiBlB,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC;CA8BtF"}
@@ -0,0 +1,69 @@
1
+ import type { HttpRequest } from "../../http/HttpRequest";
2
+ /**
3
+ * What a provider's `resolve` is asked with (#1140): the request that starts
4
+ * or finishes the sign-in, and the origin its client addressed.
5
+ */
6
+ export interface OAuthClientContext {
7
+ req: HttpRequest<any, any>;
8
+ /**
9
+ * The request's public origin, `https://acme.example.com`: the one
10
+ * `route.domains` routes by, so behind a `trustProxy` proxy it is the
11
+ * forwarded host, not the one the proxy reached the app on. Without
12
+ * `route.domains`, the request URL's host, with the scheme of
13
+ * `X-Forwarded-Proto` when one is sent.
14
+ */
15
+ origin: string;
16
+ }
17
+ /**
18
+ * A provider's client for one request. Anything left out comes from the
19
+ * provider's static config: `clientId` and `clientSecret` from its options (or
20
+ * the environment), `origin` from `HOST_NAME` / `APP_URL`.
21
+ */
22
+ export interface OAuthClient {
23
+ clientId?: string;
24
+ clientSecret?: string;
25
+ /**
26
+ * The origin the provider sends the browser back to: the `redirect_uri` is
27
+ * this + `redirectPath`. Pass `ctx.origin` to bring the user back to the host
28
+ * they started on, which the round trip's cookie needs (it is host-only).
29
+ */
30
+ origin?: string;
31
+ }
32
+ /**
33
+ * Picks a provider's client per request. `null` (or `undefined`) means the
34
+ * provider is not offered on this request: its routes answer 404 and
35
+ * `Auth.oauthProviders()` leaves it out, as with an `enabled` that is off.
36
+ */
37
+ export type OAuthClientResolver = (ctx: OAuthClientContext) => OAuthClient | null | undefined | Promise<OAuthClient | null | undefined>;
38
+ /** The client a built-in provider uses for one request. */
39
+ export interface ResolvedOAuthClient {
40
+ clientId: string;
41
+ clientSecret: string;
42
+ /** Origin + `redirectPath`, the same for the authorization and the exchange. */
43
+ redirectUri: string;
44
+ }
45
+ /**
46
+ * The origin the client addressed, through the proxy in front if there is
47
+ * one: `route.domains`' resolver when the app has one, else the request URL's
48
+ * host with `X-Forwarded-Proto`'s scheme (TLS is nearly always terminated
49
+ * before the app, and a forged scheme only spoils the forger's own links).
50
+ */
51
+ export declare function requestPublicOrigin(request: Request): string;
52
+ /**
53
+ * The client `provider` uses for `req`: its static one when it has no
54
+ * `resolve`, else what `resolve` answers over it, asked once per request
55
+ * (the availability check, the authorization URL and the exchange share it).
56
+ * `null` when `resolve` answers that the provider is not offered, or when
57
+ * there is no request to ask it with.
58
+ */
59
+ export declare function resolveOAuthClient(provider: object, req: HttpRequest<any, any> | null | undefined, args: {
60
+ name: string;
61
+ resolve?: OAuthClientResolver;
62
+ clientId: string;
63
+ clientSecret: string;
64
+ redirectPath: string;
65
+ /** The static `redirect_uri`, the provider's `redirectUri()`. */
66
+ staticRedirectUri: () => string;
67
+ staticOrigin: () => string;
68
+ }): Promise<ResolvedOAuthClient | null>;
69
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../auth/oauth/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3B;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAChC,GAAG,EAAE,kBAAkB,KACpB,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE9E,2DAA2D;AAC3D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAe5D;AAgBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,EAC7C,IAAI,EAAE;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,YAAY,EAAE,MAAM,MAAM,CAAC;CAC5B,GACA,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAiCrC"}
@@ -48,9 +48,15 @@ export interface OAuthStatePayload {
48
48
  subject?: string;
49
49
  /** A same-origin path to return to after the callback. */
50
50
  returnTo?: string;
51
+ /**
52
+ * The `redirect_uri` the authorization URL carried, when the provider
53
+ * reports one (#1140). The callback is refused if the provider answers
54
+ * another for it.
55
+ */
56
+ redirectUri?: string;
51
57
  }
52
58
  /** A fresh `state` and PKCE pair. */
53
- export declare function createOAuthState(provider: string, now?: number, extra?: Pick<OAuthStatePayload, "subject" | "returnTo">): {
59
+ export declare function createOAuthState(provider: string, now?: number, extra?: Pick<OAuthStatePayload, "subject" | "returnTo" | "redirectUri">): {
54
60
  state: string;
55
61
  codeVerifier: string;
56
62
  codeChallenge: string;
@@ -1 +1 @@
1
- {"version":3,"file":"oauthState.d.ts","sourceRoot":"","sources":["../../../auth/oauth/oauthState.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,eAAO,MAAM,uBAAuB,QAAU,CAAC;AAK/C;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,GAAE,MAAoB,GAAG,MAAM,CAGxF;AAED,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAiBD,qCAAqC;AACrC,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,GAAG,SAAa,EAChB,KAAK,GAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,UAAU,CAAM;;;;;EAe5D;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAGjE;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,GAAG,IAAI,CA0BzF;AAyBD,iBAAiB;AACjB,wBAAgB,wBAAwB,SAEvC;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GACxC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,GAAG,eAAe,GAAG,eAAe,CAAA;CAAE,CAAC;AAE/E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,eAAe,CAgBlB"}
1
+ {"version":3,"file":"oauthState.d.ts","sourceRoot":"","sources":["../../../auth/oauth/oauthState.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,eAAO,MAAM,uBAAuB,QAAU,CAAC;AAK/C;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,GAAE,MAAoB,GAAG,MAAM,CAGxF;AAED,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAiBD,qCAAqC;AACrC,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,GAAG,SAAa,EAChB,KAAK,GAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,UAAU,GAAG,aAAa,CAAM;;;;;EAgB5E;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAGjE;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,GAAG,IAAI,CA2BzF;AAyBD,iBAAiB;AACjB,wBAAgB,wBAAwB,SAEvC;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GACxC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,GAAG,eAAe,GAAG,eAAe,CAAA;CAAE,CAAC;AAE/E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,eAAe,CAgBlB"}
@@ -3,8 +3,9 @@ import { type OAuthProviderEntry } from "../config";
3
3
  import type { OAuthProvider } from "./OAuthProvider";
4
4
  /**
5
5
  * The sign-in provider `name` names in `auth.oauthProviders`, or `null` when
6
- * there is none, its `feature` is off for this request (#885), or its
7
- * `enabled` answers false for it (#1135).
6
+ * there is none, its `feature` is off for this request (#885), its
7
+ * `enabled` answers false for it (#1135), or the provider itself is not
8
+ * offered on it (its `resolve` answers `null`, #1140).
8
9
  *
9
10
  * An `enabled` function is asked with `req`, else the ambient request. With
10
11
  * no request at all it answers off, as a feature read outside one does.
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../auth/oauth/providers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAoC,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACtF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAWrD;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAuB,GACnD,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAS/B;AAED,qFAAqF;AACrF,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,GAAG,GAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAuB,GACnD,OAAO,CAAC,MAAM,EAAE,CAAC,CAMnB"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../auth/oauth/providers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAoC,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACtF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAWrD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAuB,GACnD,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAa/B;AAED,qFAAqF;AACrF,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,GAAG,GAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAuB,GACnD,OAAO,CAAC,MAAM,EAAE,CAAC,CAMnB"}