@@ -19151,6 +19151,7 @@ var require_pattern = __commonJS({
1915119151 "use strict";
1915219152 Object.defineProperty(exports2, "__esModule", { value: true });
1915319153 var code_1 = require_code2();
19154+ var util_1 = require_util();
1915419155 var codegen_1 = require_codegen();
1915519156 var error2 = {
1915619157 message: ({ schemaCode }) => (0, codegen_1.str)`must match pattern "${schemaCode}"`,
@@ -19163,10 +19164,18 @@ var require_pattern = __commonJS({
1916319164 $data: true,
1916419165 error: error2,
1916519166 code(cxt) {
19166- const { data, $data, schema, schemaCode, it } = cxt;
19167+ const { gen, data, $data, schema, schemaCode, it } = cxt;
1916719168 const u = it.opts.unicodeRegExp ? "u" : "";
19168- const regExp = $data ? (0, codegen_1._)`(new RegExp(${schemaCode}, ${u}))` : (0, code_1.usePattern)(cxt, schema);
19169- cxt.fail$data((0, codegen_1._)`!${regExp}.test(${data})`);
19169+ if ($data) {
19170+ const { regExp } = it.opts.code;
19171+ const regExpCode = regExp.code === "new RegExp" ? (0, codegen_1._)`new RegExp` : (0, util_1.useFunc)(gen, regExp);
19172+ const valid = gen.let("valid");
19173+ gen.try(() => gen.assign(valid, (0, codegen_1._)`${regExpCode}(${schemaCode}, ${u}).test(${data})`), () => gen.assign(valid, false));
19174+ cxt.fail$data((0, codegen_1._)`!${valid}`);
19175+ } else {
19176+ const regExp = (0, code_1.usePattern)(cxt, schema);
19177+ cxt.fail$data((0, codegen_1._)`!${regExp}.test(${data})`);
19178+ }
1917019179 }
1917119180 };
1917219181 exports2.default = def;
@@ -25040,6 +25049,7 @@ var require_pattern2 = __commonJS({
2504025049 "use strict";
2504125050 Object.defineProperty(exports2, "__esModule", { value: true });
2504225051 var code_1 = require_code4();
25052+ var util_1 = require_util2();
2504325053 var codegen_1 = require_codegen2();
2504425054 var error2 = {
2504525055 message: ({ schemaCode }) => (0, codegen_1.str)`must match pattern "${schemaCode}"`,
@@ -25052,10 +25062,18 @@ var require_pattern2 = __commonJS({
2505225062 $data: true,
2505325063 error: error2,
2505425064 code(cxt) {
25055- const { data, $data, schema, schemaCode, it } = cxt;
25065+ const { gen, data, $data, schema, schemaCode, it } = cxt;
2505625066 const u = it.opts.unicodeRegExp ? "u" : "";
25057- const regExp = $data ? (0, codegen_1._)`(new RegExp(${schemaCode}, ${u}))` : (0, code_1.usePattern)(cxt, schema);
25058- cxt.fail$data((0, codegen_1._)`!${regExp}.test(${data})`);
25067+ if ($data) {
25068+ const { regExp } = it.opts.code;
25069+ const regExpCode = regExp.code === "new RegExp" ? (0, codegen_1._)`new RegExp` : (0, util_1.useFunc)(gen, regExp);
25070+ const valid = gen.let("valid");
25071+ gen.try(() => gen.assign(valid, (0, codegen_1._)`${regExpCode}(${schemaCode}, ${u}).test(${data})`), () => gen.assign(valid, false));
25072+ cxt.fail$data((0, codegen_1._)`!${valid}`);
25073+ } else {
25074+ const regExp = (0, code_1.usePattern)(cxt, schema);
25075+ cxt.fail$data((0, codegen_1._)`!${regExp}.test(${data})`);
25076+ }
2505925077 }
2506025078 };
2506125079 exports2.default = def;
@@ -29235,22 +29253,45 @@ async function auth(provider, options) {
2923529253 }
2923629254}
2923729255async function authInternal(provider, { serverUrl, authorizationCode, scope, resourceMetadataUrl, fetchFn }) {
29256+ const cachedState = await provider.discoveryState?.();
2923829257 let resourceMetadata;
2923929258 let authorizationServerUrl;
29240- try {
29241- resourceMetadata = await discoverOAuthProtectedResourceMetadata(serverUrl, { resourceMetadataUrl }, fetchFn);
29242- if (resourceMetadata.authorization_servers && resourceMetadata.authorization_servers.length > 0) {
29243- authorizationServerUrl = resourceMetadata.authorization_servers[0];
29259+ let metadata;
29260+ let effectiveResourceMetadataUrl = resourceMetadataUrl;
29261+ if (!effectiveResourceMetadataUrl && cachedState?.resourceMetadataUrl) {
29262+ effectiveResourceMetadataUrl = new URL(cachedState.resourceMetadataUrl);
29263+ }
29264+ if (cachedState?.authorizationServerUrl) {
29265+ authorizationServerUrl = cachedState.authorizationServerUrl;
29266+ resourceMetadata = cachedState.resourceMetadata;
29267+ metadata = cachedState.authorizationServerMetadata ?? await discoverAuthorizationServerMetadata(authorizationServerUrl, { fetchFn });
29268+ if (!resourceMetadata) {
29269+ try {
29270+ resourceMetadata = await discoverOAuthProtectedResourceMetadata(serverUrl, { resourceMetadataUrl: effectiveResourceMetadataUrl }, fetchFn);
29271+ } catch {
29272+ }
2924429273 }
29245- } catch {
29246- }
29247- if (!authorizationServerUrl) {
29248- authorizationServerUrl = new URL("/", serverUrl);
29274+ if (metadata !== cachedState.authorizationServerMetadata || resourceMetadata !== cachedState.resourceMetadata) {
29275+ await provider.saveDiscoveryState?.({
29276+ authorizationServerUrl: String(authorizationServerUrl),
29277+ resourceMetadataUrl: effectiveResourceMetadataUrl?.toString(),
29278+ resourceMetadata,
29279+ authorizationServerMetadata: metadata
29280+ });
29281+ }
29282+ } else {
29283+ const serverInfo = await discoverOAuthServerInfo(serverUrl, { resourceMetadataUrl: effectiveResourceMetadataUrl, fetchFn });
29284+ authorizationServerUrl = serverInfo.authorizationServerUrl;
29285+ metadata = serverInfo.authorizationServerMetadata;
29286+ resourceMetadata = serverInfo.resourceMetadata;
29287+ await provider.saveDiscoveryState?.({
29288+ authorizationServerUrl: String(authorizationServerUrl),
29289+ resourceMetadataUrl: effectiveResourceMetadataUrl?.toString(),
29290+ resourceMetadata,
29291+ authorizationServerMetadata: metadata
29292+ });
2924929293 }
2925029294 const resource = await selectResourceURL(serverUrl, provider, resourceMetadata);
29251- const metadata = await discoverAuthorizationServerMetadata(authorizationServerUrl, {
29252- fetchFn
29253- });
2925429295 let clientInformation = await Promise.resolve(provider.clientInformation());
2925529296 if (!clientInformation) {
2925629297 if (authorizationCode !== void 0) {
@@ -29505,6 +29546,26 @@ async function discoverAuthorizationServerMetadata(authorizationServerUrl, { fet
2950529546 }
2950629547 return void 0;
2950729548}
29549+ async function discoverOAuthServerInfo(serverUrl, opts) {
29550+ let resourceMetadata;
29551+ let authorizationServerUrl;
29552+ try {
29553+ resourceMetadata = await discoverOAuthProtectedResourceMetadata(serverUrl, { resourceMetadataUrl: opts?.resourceMetadataUrl }, opts?.fetchFn);
29554+ if (resourceMetadata.authorization_servers && resourceMetadata.authorization_servers.length > 0) {
29555+ authorizationServerUrl = resourceMetadata.authorization_servers[0];
29556+ }
29557+ } catch {
29558+ }
29559+ if (!authorizationServerUrl) {
29560+ authorizationServerUrl = String(new URL("/", serverUrl));
29561+ }
29562+ const authorizationServerMetadata = await discoverAuthorizationServerMetadata(authorizationServerUrl, { fetchFn: opts?.fetchFn });
29563+ return {
29564+ authorizationServerUrl,
29565+ authorizationServerMetadata,
29566+ resourceMetadata
29567+ };
29568+ }
2950829569async function startAuthorization(authorizationServerUrl, { metadata, clientInformation, redirectUrl, scope, state, resource }) {
2950929570 let authorizationUrl;
2951029571 if (metadata) {
0 commit comments