oidc-spa 10.2.11 → 10.2.13

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 (33) hide show
  1. package/README.md +0 -24
  2. package/core/createOidc.js +4 -3
  3. package/core/createOidc.js.map +1 -1
  4. package/core/loginOrGoToAuthServer.js +18 -0
  5. package/core/loginOrGoToAuthServer.js.map +1 -1
  6. package/esm/core/createOidc.mjs +4 -3
  7. package/esm/core/createOidc.mjs.map +1 -1
  8. package/esm/core/loginOrGoToAuthServer.mjs +18 -0
  9. package/esm/core/loginOrGoToAuthServer.mjs.map +1 -1
  10. package/esm/tanstack-start/react/createOidcSpaUtils.mjs +26 -55
  11. package/esm/tanstack-start/react/createOidcSpaUtils.mjs.map +1 -1
  12. package/esm/tools/isNetworkError.d.ts +15 -0
  13. package/esm/tools/isNetworkError.mjs +18 -0
  14. package/esm/tools/isNetworkError.mjs.map +1 -0
  15. package/esm/vendor/build-runtime/babel.d.ts +5 -4
  16. package/esm/vendor/build-runtime/babel.mjs +4 -4
  17. package/esm/vite-plugin/handleTanstackStartBootstrapEnv.d.ts +11 -0
  18. package/esm/vite-plugin/handleTanstackStartBootstrapEnv.mjs +372 -0
  19. package/esm/vite-plugin/handleTanstackStartBootstrapEnv.mjs.map +1 -0
  20. package/esm/vite-plugin/vite-plugin.mjs +18 -2
  21. package/esm/vite-plugin/vite-plugin.mjs.map +1 -1
  22. package/package.json +1 -1
  23. package/src/core/createOidc.ts +3 -2
  24. package/src/core/loginOrGoToAuthServer.ts +19 -0
  25. package/src/tanstack-start/react/createOidcSpaUtils.ts +29 -87
  26. package/src/tanstack-start/react/publicEnv.d.ts +3 -0
  27. package/src/tools/isNetworkError.ts +17 -0
  28. package/src/vendor/build-runtime/babel.ts +13 -4
  29. package/src/vite-plugin/handleTanstackStartBootstrapEnv.ts +440 -0
  30. package/src/vite-plugin/vite-plugin.ts +20 -2
  31. package/tools/isNetworkError.d.ts +15 -0
  32. package/tools/isNetworkError.js +21 -0
  33. package/tools/isNetworkError.js.map +1 -0
@@ -0,0 +1,372 @@
1
+ import { promises as fs } from "node:fs";
2
+ import * as path from "node:path";
3
+ import { babelParser, babelTraverse } from "../vendor/build-runtime/babel.mjs";
4
+ /** The manifest contains names only; values are read by the server at request time. */
5
+ export function createHandleTanstackStartBootstrapEnv(params) {
6
+ const { resolvedConfig } = params;
7
+ const virtualId = "virtual:oidc-spa/tanstack-start-public-env";
8
+ const resolvedId = `\0${virtualId}`;
9
+ const adapterId = "oidc-spa/react-tanstack-start";
10
+ let scanPromise;
11
+ const isSourceFile = (id) => /\.[cm]?[jt]sx?$/.test(id) && !/\.d\.[cm]?ts$/.test(id);
12
+ const scan = async (context) => {
13
+ const sources = new Map();
14
+ const excludedDirectories = new Set([
15
+ "node_modules",
16
+ "dist",
17
+ "build",
18
+ "coverage",
19
+ "public",
20
+ path.resolve(resolvedConfig.root, resolvedConfig.build.outDir),
21
+ path.resolve(resolvedConfig.cacheDir)
22
+ ]);
23
+ // Scan before generating the virtual module, including lazy routes. Collecting
24
+ // names in transform() would make authorization depend on module load order.
25
+ const discover = async (directory) => {
26
+ context.addWatchFile(directory);
27
+ const entries = await fs.readdir(directory, { withFileTypes: true });
28
+ const files = await Promise.all(entries.map(async (entry) => {
29
+ const id = path.join(directory, entry.name);
30
+ if (entry.name.startsWith(".") ||
31
+ excludedDirectories.has(entry.name) ||
32
+ excludedDirectories.has(id)) {
33
+ return [];
34
+ }
35
+ if (entry.isDirectory())
36
+ return discover(id);
37
+ return entry.isFile() && isSourceFile(id) ? [id] : [];
38
+ }));
39
+ return files.flat();
40
+ };
41
+ const pending = await discover(resolvedConfig.root);
42
+ for (let i = 0; i < pending.length; i++) {
43
+ const id = pending[i];
44
+ if (sources.has(id))
45
+ continue;
46
+ context.addWatchFile(id);
47
+ const code = await fs.readFile(id, "utf8");
48
+ const ast = babelParser.parse(code, {
49
+ sourceType: "unambiguous",
50
+ plugins: [
51
+ "typescript",
52
+ ...(/\.[cm]?ts$/.test(id) ? [] : ["jsx"]),
53
+ "decorators-legacy"
54
+ ]
55
+ });
56
+ let program;
57
+ babelTraverse(ast, {
58
+ Program(p) {
59
+ program = p;
60
+ p.stop();
61
+ }
62
+ });
63
+ const source = { program, imports: new Map() };
64
+ sources.set(id, source);
65
+ for (const statement of program.get("body")) {
66
+ if (!statement.isImportDeclaration() &&
67
+ !statement.isExportNamedDeclaration() &&
68
+ !statement.isExportAllDeclaration())
69
+ continue;
70
+ const specifier = statement.node.source?.value;
71
+ if (!specifier || specifier === adapterId)
72
+ continue;
73
+ const resolved = await context.resolve(specifier, id, { skipSelf: true });
74
+ if (!resolved || resolved.external)
75
+ continue;
76
+ const dependencyId = resolved.id.split("?")[0];
77
+ if (!path.isAbsolute(dependencyId) ||
78
+ dependencyId.includes(`${path.sep}node_modules${path.sep}`) ||
79
+ !isSourceFile(dependencyId))
80
+ continue;
81
+ source.imports.set(specifier, dependencyId);
82
+ pending.push(dependencyId);
83
+ }
84
+ }
85
+ const names = new Set();
86
+ const fail = (id, p, reason) => {
87
+ const loc = p.node.loc?.start;
88
+ throw new Error(`oidc-spa: Cannot determine public bootstrap environment variables in ${id}${loc ? `:${loc.line}:${loc.column + 1}` : ""}. ${reason}`);
89
+ };
90
+ const propertyName = (p) => {
91
+ if (!p.isMemberExpression() && !p.isOptionalMemberExpression() && !p.isObjectProperty())
92
+ return undefined;
93
+ const key = (p.isObjectProperty() ? p.get("key") : p.get("property"));
94
+ if (key.isStringLiteral())
95
+ return key.node.value;
96
+ if (!p.node.computed && key.isIdentifier())
97
+ return key.node.name;
98
+ return undefined;
99
+ };
100
+ const unwrap = (p) => {
101
+ while (p.isTSAsExpression() ||
102
+ p.isTSSatisfiesExpression() ||
103
+ p.isTSNonNullExpression() ||
104
+ p.isParenthesizedExpression())
105
+ p = p.get("expression");
106
+ return p;
107
+ };
108
+ const memberOrigin = (origin, name) => {
109
+ if (origin === "namespace" && name === "oidcSpa")
110
+ return "builder";
111
+ if (origin === "utils" && name === "bootstrapOidc")
112
+ return "bootstrap";
113
+ return undefined;
114
+ };
115
+ const exportedOrigin = (id, name, seen) => {
116
+ if (id === adapterId)
117
+ return name === "oidcSpa" ? "builder" : undefined;
118
+ const source = sources.get(id);
119
+ if (!source)
120
+ return undefined;
121
+ for (const statement of source.program.get("body")) {
122
+ if (seen.has(statement.node))
123
+ continue;
124
+ if (statement.isExportDefaultDeclaration() && name === "default")
125
+ return origin(statement.get("declaration"), id, seen);
126
+ if (statement.isExportAllDeclaration()) {
127
+ const result = exportedOrigin(source.imports.get(statement.node.source.value) ?? "", name, new Set([...seen, statement.node]));
128
+ if (result)
129
+ return result;
130
+ }
131
+ if (!statement.isExportNamedDeclaration())
132
+ continue;
133
+ const declaration = statement.get("declaration");
134
+ if (declaration.node &&
135
+ source.program.scope.getBinding(name)?.path.findParent(p => p === statement)) {
136
+ return bindingOrigin(source.program.scope.getBinding(name).path, name, id, seen);
137
+ }
138
+ for (const specifier of statement.get("specifiers")) {
139
+ if (!specifier.isExportSpecifier())
140
+ continue;
141
+ const exported = specifier.node.exported;
142
+ if ((exported.type === "Identifier" ? exported.name : exported.value) !== name)
143
+ continue;
144
+ if (!statement.node.source)
145
+ return origin(specifier.get("local"), id, seen);
146
+ return exportedOrigin(statement.node.source.value === adapterId
147
+ ? adapterId
148
+ : source.imports.get(statement.node.source.value) ?? "", specifier.node.local.name, new Set([...seen, statement.node]));
149
+ }
150
+ }
151
+ return undefined;
152
+ };
153
+ const bindingOrigin = (p, name, id, seen) => {
154
+ if (seen.has(p.node))
155
+ return undefined;
156
+ seen = new Set([...seen, p.node]);
157
+ if (p.isImportSpecifier() ||
158
+ p.isImportDefaultSpecifier() ||
159
+ p.isImportNamespaceSpecifier()) {
160
+ const declaration = p.parentPath;
161
+ if (!declaration?.isImportDeclaration())
162
+ return undefined;
163
+ const specifier = declaration.node.source.value;
164
+ if (p.isImportNamespaceSpecifier())
165
+ return specifier === adapterId ? "namespace" : undefined;
166
+ const imported = p.isImportSpecifier() ? p.node.imported : undefined;
167
+ return exportedOrigin(specifier === adapterId ? adapterId : sources.get(id)?.imports.get(specifier) ?? "", imported
168
+ ? imported.type === "Identifier"
169
+ ? imported.name
170
+ : imported.value
171
+ : "default", seen);
172
+ }
173
+ if (!p.isVariableDeclarator())
174
+ return undefined;
175
+ const valueOrigin = origin(p.get("init"), id, seen);
176
+ const pattern = p.get("id");
177
+ if (pattern.isIdentifier())
178
+ return valueOrigin;
179
+ if (!pattern.isObjectPattern())
180
+ return undefined;
181
+ for (const property of pattern.get("properties")) {
182
+ if (property.isObjectProperty() && property.get("value").isIdentifier({ name }))
183
+ return memberOrigin(valueOrigin, propertyName(property));
184
+ }
185
+ return undefined;
186
+ };
187
+ const origin = (input, id, seen = new Set()) => {
188
+ const p = unwrap(input);
189
+ if (!p.node)
190
+ return undefined;
191
+ if (p.isIdentifier()) {
192
+ const binding = p.scope.getBinding(p.node.name);
193
+ return binding?.constant
194
+ ? bindingOrigin(binding.path, p.node.name, id, seen)
195
+ : undefined;
196
+ }
197
+ if (p.isMemberExpression() || p.isOptionalMemberExpression())
198
+ return memberOrigin(origin(p.get("object"), id, seen), propertyName(p));
199
+ if (!p.isCallExpression())
200
+ return undefined;
201
+ const callee = p.get("callee");
202
+ if (!callee.isMemberExpression() || origin(callee.get("object"), id, seen) !== "builder")
203
+ return undefined;
204
+ const method = propertyName(callee);
205
+ if (method === "createUtils")
206
+ return "utils";
207
+ if ([
208
+ "withAutoLogin",
209
+ "withExpectedDecodedIdTokenShape",
210
+ "withAccessTokenValidation"
211
+ ].includes(method ?? ""))
212
+ return "builder";
213
+ return undefined;
214
+ };
215
+ for (const [id, source] of sources) {
216
+ source.program.traverse({
217
+ CallExpression(call) {
218
+ if (origin(call.get("callee"), id) !== "bootstrap")
219
+ return;
220
+ let callback = call.get("arguments")[0];
221
+ if (!callback)
222
+ fail(id, call, "bootstrapOidc requires an argument.");
223
+ callback = unwrap(callback);
224
+ const seenCallbacks = new Set();
225
+ while (callback.isIdentifier()) {
226
+ const binding = callback.scope.getBinding(callback.node.name);
227
+ if (!binding?.constant || seenCallbacks.has(binding.path.node))
228
+ break;
229
+ seenCallbacks.add(binding.path.node);
230
+ if (binding.path.isFunctionDeclaration()) {
231
+ callback = binding.path;
232
+ break;
233
+ }
234
+ if (!binding.path.isVariableDeclarator())
235
+ break;
236
+ callback = unwrap(binding.path.get("init"));
237
+ }
238
+ // Direct configuration objects do not receive the env proxy.
239
+ if (callback.isObjectExpression())
240
+ return;
241
+ if (!callback.isFunction())
242
+ fail(id, callback, "Use an inline callback or a locally declared callback so its environment accesses can be analyzed.");
243
+ if (callback.node.async || callback.node.generator)
244
+ fail(id, callback, "The bootstrap callback must be synchronous.");
245
+ const visited = new Set();
246
+ const followPattern = (pattern, kind) => {
247
+ if (pattern.isIdentifier()) {
248
+ const binding = pattern.scope.getBinding(pattern.node.name);
249
+ if (!binding || !binding.constant)
250
+ fail(id, pattern, "Do not reassign the bootstrap environment bindings.");
251
+ if (visited.has(binding))
252
+ return;
253
+ visited.add(binding);
254
+ binding.referencePaths.forEach(reference => followReference(reference, kind));
255
+ return;
256
+ }
257
+ if (!pattern.isObjectPattern())
258
+ fail(id, pattern, "Use named properties when destructuring the bootstrap environment; rest and default bindings are unsupported.");
259
+ for (const property of pattern.get("properties")) {
260
+ if (!property.isObjectProperty())
261
+ fail(id, property, "Do not spread the bootstrap environment.");
262
+ const name = propertyName(property);
263
+ if (name === undefined)
264
+ fail(id, property, "Environment variable names must be literal properties.");
265
+ if (kind === "env") {
266
+ names.add(name);
267
+ continue;
268
+ }
269
+ if (name !== (kind === "argument" ? "process" : "env"))
270
+ fail(id, property, "Only process.env is available in the bootstrap environment.");
271
+ followPattern(property.get("value"), kind === "argument" ? "process" : "env");
272
+ }
273
+ };
274
+ const followReference = (reference, kind) => {
275
+ let parent = reference.parentPath;
276
+ while (parent &&
277
+ (parent.isTSAsExpression() ||
278
+ parent.isTSSatisfiesExpression() ||
279
+ parent.isTSNonNullExpression() ||
280
+ parent.isParenthesizedExpression())) {
281
+ reference = parent;
282
+ parent = reference.parentPath;
283
+ }
284
+ if (!parent)
285
+ return;
286
+ if (parent.isMemberExpression() || parent.isOptionalMemberExpression()) {
287
+ if (parent.get("object") !== reference)
288
+ fail(id, reference, "The bootstrap environment cannot be used as a property key.");
289
+ const name = propertyName(parent);
290
+ if (name === undefined)
291
+ fail(id, parent, "Use process.env.NAME or process.env[\"NAME\"]; computed environment variable names cannot be authorized safely.");
292
+ if (kind === "env") {
293
+ const use = parent.parentPath;
294
+ if ((use?.isAssignmentExpression() && use.get("left") === parent) ||
295
+ use?.isUpdateExpression() ||
296
+ use?.isUnaryExpression({ operator: "delete" }))
297
+ fail(id, parent, "Do not mutate the bootstrap environment.");
298
+ names.add(name);
299
+ return;
300
+ }
301
+ if (name !== (kind === "argument" ? "process" : "env"))
302
+ fail(id, parent, "Only process.env is available in the bootstrap environment.");
303
+ followReference(parent, kind === "argument" ? "process" : "env");
304
+ return;
305
+ }
306
+ if (parent.isVariableDeclarator() && parent.get("init") === reference) {
307
+ followPattern(parent.get("id"), kind);
308
+ return;
309
+ }
310
+ if (kind === "env" &&
311
+ parent.isBinaryExpression({ operator: "in" }) &&
312
+ parent.get("right") === reference) {
313
+ const name = parent.get("left");
314
+ if (!name.isStringLiteral())
315
+ fail(id, name, "Use a string literal for environment membership checks.");
316
+ names.add(name.node.value);
317
+ return;
318
+ }
319
+ if (parent.isTSTypeQuery())
320
+ return;
321
+ fail(id, reference, "Do not pass, spread, or return the bootstrap environment object. Read its literal named variables inside the callback instead.");
322
+ };
323
+ const parameter = callback.get("params")[0];
324
+ if (parameter)
325
+ followPattern(parameter, "argument");
326
+ }
327
+ });
328
+ }
329
+ return [...names].sort();
330
+ };
331
+ return {
332
+ resolveId: (id) => (id === virtualId ? resolvedId : null),
333
+ buildStart: async (context) => {
334
+ // Each build (including watch rebuilds) gets its own complete snapshot.
335
+ scanPromise = scan(context);
336
+ await scanPromise;
337
+ },
338
+ load: async (id, context) => {
339
+ if (id !== resolvedId)
340
+ return null;
341
+ const names = await (scanPromise ?? (scanPromise = scan(context)));
342
+ return `export const publicEnvNames = new Set(${JSON.stringify(names)});\n`;
343
+ },
344
+ configureServer: (server) => {
345
+ const onSourceChange = (id) => {
346
+ if (!isSourceFile(id) || id.includes(`${path.sep}node_modules${path.sep}`))
347
+ return;
348
+ scanPromise = undefined;
349
+ // The virtual module has no real filename for Vite to invalidate.
350
+ // Revoke removed names as well as discovering newly added names.
351
+ for (const environment of Object.values(server.environments)) {
352
+ const module = environment.moduleGraph.getModuleById(resolvedId);
353
+ if (!module)
354
+ continue;
355
+ environment.moduleGraph.invalidateModule(module);
356
+ environment.hot.send({ type: "full-reload" });
357
+ }
358
+ };
359
+ server.watcher
360
+ .on("add", onSourceChange)
361
+ .on("change", onSourceChange)
362
+ .on("unlink", onSourceChange);
363
+ server.httpServer?.once("close", () => {
364
+ server.watcher
365
+ .off("add", onSourceChange)
366
+ .off("change", onSourceChange)
367
+ .off("unlink", onSourceChange);
368
+ });
369
+ }
370
+ };
371
+ }
372
+ //# sourceMappingURL=handleTanstackStartBootstrapEnv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleTanstackStartBootstrapEnv.mjs","sourceRoot":"","sources":["../../src/vite-plugin/handleTanstackStartBootstrapEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAiB,MAAM,+BAA+B,CAAC;AAE1F,uFAAuF;AACvF,MAAM,UAAU,qCAAqC,CAAC,MAA0C;IAC5F,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;IAClC,MAAM,SAAS,GAAG,4CAA4C,CAAC;IAC/D,MAAM,UAAU,GAAG,KAAK,SAAS,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,+BAA+B,CAAC;IAClD,IAAI,WAA0C,CAAC;IAE/C,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE7F,MAAM,IAAI,GAAG,KAAK,EAAE,OAAwD,EAAE,EAAE;QAK5E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;YAChC,cAAc;YACd,MAAM;YACN,OAAO;YACP,UAAU;YACV,QAAQ;YACR,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;YAC9D,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC;SACxC,CAAC,CAAC;QAEH,+EAA+E;QAC/E,6EAA6E;QAC7E,MAAM,QAAQ,GAAG,KAAK,EAAE,SAAiB,EAAqB,EAAE;YAC5D,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACrE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAC,KAAK,EAAC,EAAE;gBACtB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5C,IACI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAC1B,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBACnC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,EAC7B,CAAC;oBACC,OAAO,EAAE,CAAC;gBACd,CAAC;gBACD,IAAI,KAAK,CAAC,WAAW,EAAE;oBAAE,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC7C,OAAO,KAAK,CAAC,MAAM,EAAE,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,CAAC,CAAC,CACL,CAAC;YACF,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACxB,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS;YAC9B,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC3C,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE;gBAChC,UAAU,EAAE,aAAa;gBACzB,OAAO,EAAE;oBACL,YAAY;oBACZ,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAc,CAAC,CAAC;oBAClD,mBAAmB;iBACtB;aACJ,CAAC,CAAC;YACH,IAAI,OAAkB,CAAC;YACvB,aAAa,CAAC,GAAG,EAAE;gBACf,OAAO,CAAC,CAAC;oBACL,OAAO,GAAG,CAAC,CAAC;oBACZ,CAAC,CAAC,IAAI,EAAE,CAAC;gBACb,CAAC;aACJ,CAAC,CAAC;YACH,MAAM,MAAM,GAAW,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACxB,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAe,EAAE,CAAC;gBACxD,IACI,CAAC,SAAS,CAAC,mBAAmB,EAAE;oBAChC,CAAC,SAAS,CAAC,wBAAwB,EAAE;oBACrC,CAAC,SAAS,CAAC,sBAAsB,EAAE;oBAEnC,SAAS;gBACb,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;gBAC/C,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,SAAS;oBAAE,SAAS;gBACpD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1E,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;oBAAE,SAAS;gBAC7C,MAAM,YAAY,GAAG,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/C,IACI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;oBAC9B,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,eAAe,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC3D,CAAC,YAAY,CAAC,YAAY,CAAC;oBAE3B,SAAS;gBACb,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBAC5C,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,MAAM,IAAI,GAAuD,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE;YAC/E,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;YAC9B,MAAM,IAAI,KAAK,CACX,wEAAwE,EAAE,GACtE,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAC7C,KAAK,MAAM,EAAE,CAChB,CAAC;QACN,CAAC,CAAC;QACF,MAAM,YAAY,GAAG,CAAC,CAAW,EAAsB,EAAE;YACrD,IAAI,CAAC,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB,EAAE;gBACnF,OAAO,SAAS,CAAC;YACrB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAa,CAAC;YAClF,IAAI,GAAG,CAAC,eAAe,EAAE;gBAAE,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YACjD,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,YAAY,EAAE;gBAAE,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YACjE,OAAO,SAAS,CAAC;QACrB,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,CAAW,EAAY,EAAE;YACrC,OACI,CAAC,CAAC,gBAAgB,EAAE;gBACpB,CAAC,CAAC,uBAAuB,EAAE;gBAC3B,CAAC,CAAC,qBAAqB,EAAE;gBACzB,CAAC,CAAC,yBAAyB,EAAE;gBAE7B,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAa,CAAC;YACxC,OAAO,CAAC,CAAC;QACb,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,CACjB,MAA0B,EAC1B,IAAwB,EACN,EAAE;YACpB,IAAI,MAAM,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YACnE,IAAI,MAAM,KAAK,OAAO,IAAI,IAAI,KAAK,eAAe;gBAAE,OAAO,WAAW,CAAC;YACvE,OAAO,SAAS,CAAC;QACrB,CAAC,CAAC;QACF,MAAM,cAAc,GAAG,CAAC,EAAU,EAAE,IAAY,EAAE,IAAiB,EAAsB,EAAE;YACvF,IAAI,EAAE,KAAK,SAAS;gBAAE,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACxE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM;gBAAE,OAAO,SAAS,CAAC;YAC9B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAe,EAAE,CAAC;gBAC/D,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACvC,IAAI,SAAS,CAAC,0BAA0B,EAAE,IAAI,IAAI,KAAK,SAAS;oBAC5D,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC1D,IAAI,SAAS,CAAC,sBAAsB,EAAE,EAAE,CAAC;oBACrC,MAAM,MAAM,GAAG,cAAc,CACzB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EACrD,IAAI,EACJ,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CACrC,CAAC;oBACF,IAAI,MAAM;wBAAE,OAAO,MAAM,CAAC;gBAC9B,CAAC;gBACD,IAAI,CAAC,SAAS,CAAC,wBAAwB,EAAE;oBAAE,SAAS;gBACpD,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBACjD,IACI,WAAW,CAAC,IAAI;oBAChB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,EAC9E,CAAC;oBACC,OAAO,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBACtF,CAAC;gBACD,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;oBAClD,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE;wBAAE,SAAS;oBAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;oBACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI;wBAC1E,SAAS;oBACb,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM;wBAAE,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;oBAC5E,OAAO,cAAc,CACjB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS;wBACrC,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAC3D,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EACzB,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CACrC,CAAC;gBACN,CAAC;YACL,CAAC;YACD,OAAO,SAAS,CAAC;QACrB,CAAC,CAAC;QACF,MAAM,aAAa,GAAG,CAClB,CAAW,EACX,IAAY,EACZ,EAAU,EACV,IAAiB,EACC,EAAE;YACpB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YACvC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAClC,IACI,CAAC,CAAC,iBAAiB,EAAE;gBACrB,CAAC,CAAC,wBAAwB,EAAE;gBAC5B,CAAC,CAAC,0BAA0B,EAAE,EAChC,CAAC;gBACC,MAAM,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC;gBACjC,IAAI,CAAC,WAAW,EAAE,mBAAmB,EAAE;oBAAE,OAAO,SAAS,CAAC;gBAC1D,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAChD,IAAI,CAAC,CAAC,0BAA0B,EAAE;oBAC9B,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC7D,MAAM,QAAQ,GAAG,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;gBACrE,OAAO,cAAc,CACjB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EACnF,QAAQ;oBACJ,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;wBAC5B,CAAC,CAAC,QAAQ,CAAC,IAAI;wBACf,CAAC,CAAC,QAAQ,CAAC,KAAK;oBACpB,CAAC,CAAC,SAAS,EACf,IAAI,CACP,CAAC;YACN,CAAC;YACD,IAAI,CAAC,CAAC,CAAC,oBAAoB,EAAE;gBAAE,OAAO,SAAS,CAAC;YAChD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAa,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAChE,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,OAAO,CAAC,YAAY,EAAE;gBAAE,OAAO,WAAW,CAAC;YAC/C,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;gBAAE,OAAO,SAAS,CAAC;YACjD,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/C,IAAI,QAAQ,CAAC,gBAAgB,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;oBAC3E,OAAO,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,SAAS,CAAC;QACrB,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,KAAe,EAAE,EAAU,EAAE,OAAO,IAAI,GAAG,EAAU,EAAsB,EAAE;YACzF,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC,CAAC,CAAC,IAAI;gBAAE,OAAO,SAAS,CAAC;YAC9B,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC;gBACnB,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChD,OAAO,OAAO,EAAE,QAAQ;oBACpB,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC;oBACpD,CAAC,CAAC,SAAS,CAAC;YACpB,CAAC;YACD,IAAI,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,0BAA0B,EAAE;gBACxD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAa,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YACxF,IAAI,CAAC,CAAC,CAAC,gBAAgB,EAAE;gBAAE,OAAO,SAAS,CAAC;YAC5C,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,SAAS;gBACpF,OAAO,SAAS,CAAC;YACrB,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,MAAM,KAAK,aAAa;gBAAE,OAAO,OAAO,CAAC;YAC7C,IACI;gBACI,eAAe;gBACf,iCAAiC;gBACjC,2BAA2B;aAC9B,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;gBAExB,OAAO,SAAS,CAAC;YACrB,OAAO,SAAS,CAAC;QACrB,CAAC,CAAC;QAEF,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACjC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACpB,cAAc,CAAC,IAAI;oBACf,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,KAAK,WAAW;wBAAE,OAAO;oBAC3D,IAAI,QAAQ,GAAa,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClD,IAAI,CAAC,QAAQ;wBAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,qCAAqC,CAAC,CAAC;oBACrE,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC5B,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;oBACxC,OAAO,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;wBAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC9D,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;4BAAE,MAAM;wBACtE,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACrC,IAAI,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;4BACvC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;4BACxB,MAAM;wBACV,CAAC;wBACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE;4BAAE,MAAM;wBAChD,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAa,CAAC,CAAC;oBAC5D,CAAC;oBACD,6DAA6D;oBAC7D,IAAI,QAAQ,CAAC,kBAAkB,EAAE;wBAAE,OAAO;oBAC1C,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;wBACtB,IAAI,CACA,EAAE,EACF,QAAQ,EACR,oGAAoG,CACvG,CAAC;oBACN,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS;wBAC9C,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,6CAA6C,CAAC,CAAC;oBAGtE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;oBAClC,MAAM,aAAa,GAAG,CAAC,OAAiB,EAAE,IAAe,EAAQ,EAAE;wBAC/D,IAAI,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;4BACzB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BAC5D,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ;gCAC7B,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,qDAAqD,CAAC,CAAC;4BAC7E,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;gCAAE,OAAO;4BACjC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;4BACrB,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CACvC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CACnC,CAAC;4BACF,OAAO;wBACX,CAAC;wBACD,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;4BAC1B,IAAI,CACA,EAAE,EACF,OAAO,EACP,+GAA+G,CAClH,CAAC;wBACN,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;4BAC/C,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;gCAC5B,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,0CAA0C,CAAC,CAAC;4BACnE,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;4BACpC,IAAI,IAAI,KAAK,SAAS;gCAClB,IAAI,CACA,EAAE,EACF,QAAQ,EACR,wDAAwD,CAC3D,CAAC;4BACN,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gCACjB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gCAChB,SAAS;4BACb,CAAC;4BACD,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;gCAClD,IAAI,CACA,EAAE,EACF,QAAQ,EACR,6DAA6D,CAChE,CAAC;4BACN,aAAa,CACT,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EACrB,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAC1C,CAAC;wBACN,CAAC;oBACL,CAAC,CAAC;oBACF,MAAM,eAAe,GAAG,CAAC,SAAmB,EAAE,IAAe,EAAQ,EAAE;wBACnE,IAAI,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC;wBAClC,OACI,MAAM;4BACN,CAAC,MAAM,CAAC,gBAAgB,EAAE;gCACtB,MAAM,CAAC,uBAAuB,EAAE;gCAChC,MAAM,CAAC,qBAAqB,EAAE;gCAC9B,MAAM,CAAC,yBAAyB,EAAE,CAAC,EACzC,CAAC;4BACC,SAAS,GAAG,MAAM,CAAC;4BACnB,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC;wBAClC,CAAC;wBACD,IAAI,CAAC,MAAM;4BAAE,OAAO;wBACpB,IAAI,MAAM,CAAC,kBAAkB,EAAE,IAAI,MAAM,CAAC,0BAA0B,EAAE,EAAE,CAAC;4BACrE,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS;gCAClC,IAAI,CACA,EAAE,EACF,SAAS,EACT,6DAA6D,CAChE,CAAC;4BACN,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;4BAClC,IAAI,IAAI,KAAK,SAAS;gCAClB,IAAI,CACA,EAAE,EACF,MAAM,EACN,+GAA+G,CAClH,CAAC;4BACN,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gCACjB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;gCAC9B,IACI,CAAC,GAAG,EAAE,sBAAsB,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;oCAC7D,GAAG,EAAE,kBAAkB,EAAE;oCACzB,GAAG,EAAE,iBAAiB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;oCAE9C,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,0CAA0C,CAAC,CAAC;gCACjE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gCAChB,OAAO;4BACX,CAAC;4BACD,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;gCAClD,IAAI,CACA,EAAE,EACF,MAAM,EACN,6DAA6D,CAChE,CAAC;4BACN,eAAe,CAAC,MAAM,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;4BACjE,OAAO;wBACX,CAAC;wBACD,IAAI,MAAM,CAAC,oBAAoB,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;4BACpE,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;4BACtC,OAAO;wBACX,CAAC;wBACD,IACI,IAAI,KAAK,KAAK;4BACd,MAAM,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;4BAC7C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,SAAS,EACnC,CAAC;4BACC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;4BAChC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gCACvB,IAAI,CACA,EAAE,EACF,IAAI,EACJ,yDAAyD,CAC5D,CAAC;4BACN,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BAC3B,OAAO;wBACX,CAAC;wBACD,IAAI,MAAM,CAAC,aAAa,EAAE;4BAAE,OAAO;wBACnC,IAAI,CACA,EAAE,EACF,SAAS,EACT,gIAAgI,CACnI,CAAC;oBACN,CAAC,CAAC;oBACF,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5C,IAAI,SAAS;wBAAE,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACxD,CAAC;aACJ,CAAC,CAAC;QACP,CAAC;QACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC;IAEF,OAAO;QACH,SAAS,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QACjE,UAAU,EAAE,KAAK,EAAE,OAAwD,EAAE,EAAE;YAC3E,wEAAwE;YACxE,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,WAAW,CAAC;QACtB,CAAC;QACD,IAAI,EAAE,KAAK,EAAE,EAAU,EAAE,OAAwD,EAAE,EAAE;YACjF,IAAI,EAAE,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;YACnC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,KAAX,WAAW,GAAK,IAAI,CAAC,OAAO,CAAC,EAAC,CAAC;YACpD,OAAO,yCAAyC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QAChF,CAAC;QACD,eAAe,EAAE,CAAC,MAAqB,EAAE,EAAE;YACvC,MAAM,cAAc,GAAG,CAAC,EAAU,EAAE,EAAE;gBAClC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,eAAe,IAAI,CAAC,GAAG,EAAE,CAAC;oBAAE,OAAO;gBACnF,WAAW,GAAG,SAAS,CAAC;gBACxB,kEAAkE;gBAClE,iEAAiE;gBACjE,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC3D,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;oBACjE,IAAI,CAAC,MAAM;wBAAE,SAAS;oBACtB,WAAW,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;oBACjD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;gBAClD,CAAC;YACL,CAAC,CAAC;YACF,MAAM,CAAC,OAAO;iBACT,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC;iBACzB,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC;iBAC5B,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAClC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;gBAClC,MAAM,CAAC,OAAO;qBACT,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC;qBAC1B,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC;qBAC7B,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;QACP,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -5,6 +5,7 @@ import { manageOptimizedDeps } from "./manageOptimizedDeps.mjs";
5
5
  import { transformCreateFileRoute } from "./transformTanstackRouterCreateFileRoute.mjs";
6
6
  import { getProjectType } from "./projectType.mjs";
7
7
  import { createHandleTanstackStartClientOutput } from "./handleTanstackStartClientOutput.mjs";
8
+ import { createHandleTanstackStartBootstrapEnv } from "./handleTanstackStartBootstrapEnv.mjs";
8
9
  export function oidcSpa(params = {}) {
9
10
  let load_handleClientEntrypoint = undefined;
10
11
  let resolveId_handleTanstackStartClientOutput = undefined;
@@ -15,6 +16,7 @@ export function oidcSpa(params = {}) {
15
16
  let load_handleServerEntrypoint = undefined;
16
17
  let projectType = undefined;
17
18
  let isBuild = false;
19
+ let bootstrapEnvHandler;
18
20
  const plugin = {
19
21
  name: "oidc-spa",
20
22
  enforce: "pre",
@@ -34,6 +36,9 @@ export function oidcSpa(params = {}) {
34
36
  projectType = getProjectType({
35
37
  pluginNames: resolvedConfig.plugins.map(({ name }) => name)
36
38
  });
39
+ if (projectType === "tanstack-start") {
40
+ bootstrapEnvHandler = createHandleTanstackStartBootstrapEnv({ resolvedConfig });
41
+ }
37
42
  const clientEntrypointHandler = createHandleClientEntrypoint({
38
43
  oidcSpaVitePluginParams: params,
39
44
  resolvedConfig,
@@ -73,12 +78,23 @@ export function oidcSpa(params = {}) {
73
78
  return transformed;
74
79
  },
75
80
  resolveId(id) {
76
- return resolveId_handleTanstackStartClientOutput?.(id) ?? null;
81
+ return (bootstrapEnvHandler?.resolveId(id) ??
82
+ resolveId_handleTanstackStartClientOutput?.(id) ??
83
+ null);
77
84
  },
78
- buildStart() {
85
+ async buildStart() {
86
+ await bootstrapEnvHandler?.buildStart(this);
79
87
  buildStart_handleTanstackStartClientOutput?.call(this);
80
88
  },
89
+ configureServer(server) {
90
+ bootstrapEnvHandler?.configureServer(server);
91
+ },
81
92
  async load(id) {
93
+ {
94
+ const r = await bootstrapEnvHandler?.load(id, this);
95
+ if (r !== null && r !== undefined)
96
+ return r;
97
+ }
82
98
  {
83
99
  const r = load_handleTanstackStartClientOutput?.(id) ?? null;
84
100
  if (r !== null) {
@@ -1 +1 @@
1
- {"version":3,"file":"vite-plugin.mjs","sourceRoot":"","sources":["../../src/vite-plugin/vite-plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vite-plugin.mjs","sourceRoot":"","sources":["../../src/vite-plugin/vite-plugin.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oidc-spa",
3
- "version": "10.2.11",
3
+ "version": "10.2.13",
4
4
  "description": "OpenID Connect / OAuth2 solution for client-first Web Applications",
5
5
  "repository": {
6
6
  "type": "git",
@@ -40,6 +40,7 @@ import {
40
40
  } from "./ongoingLoginOrRefreshProcesses";
41
41
  import { createGetIsNewBrowserSession } from "./isNewBrowserSession";
42
42
  import { getIsOnline } from "../tools/getIsOnline";
43
+ import { isNetworkError } from "../tools/isNetworkError";
43
44
  import { isKeycloak } from "../keycloak/isKeycloak";
44
45
  import { INFINITY_TIME } from "../tools/INFINITY_TIME";
45
46
  import { getRootRelativeOriginalLocationHref_earlyInit } from "./earlyInit_rootRelativeOriginalLocationHref";
@@ -990,7 +991,7 @@ export async function createOidc_nonMemoized<
990
991
  } catch (error) {
991
992
  assert(error instanceof Error, "741947");
992
993
 
993
- if (error.message === "Failed to fetch") {
994
+ if (isNetworkError(error)) {
994
995
  return (
995
996
  await import("./diagnostic")
996
997
  ).createFailedToFetchTokenEndpointInitializationError({
@@ -1196,7 +1197,7 @@ export async function createOidc_nonMemoized<
1196
1197
  } catch (error) {
1197
1198
  assert(error instanceof Error, "433344");
1198
1199
 
1199
- if (error.message === "Failed to fetch") {
1200
+ if (isNetworkError(error)) {
1200
1201
  return (
1201
1202
  await import("./diagnostic")
1202
1203
  ).createFailedToFetchTokenEndpointInitializationError({
@@ -8,6 +8,8 @@ import { createStatefulEvt } from "../tools/StatefulEvt";
8
8
  import { Deferred } from "../tools/Deferred";
9
9
  import { addOrUpdateSearchParam, getAllSearchParams } from "../tools/urlSearchParams";
10
10
  import { getIsOnline } from "../tools/getIsOnline";
11
+ import { isNetworkError } from "../tools/isNetworkError";
12
+ import { OidcInitializationError } from "./OidcInitializationError";
11
13
  import { setStateDataCookieIfEnabled } from "./StateDataCookie";
12
14
 
13
15
  const globalContext = {
@@ -356,6 +358,23 @@ export function createLoginOrGoToAuthServer(params: {
356
358
  error => {
357
359
  assert(error instanceof Error, "393430");
358
360
 
361
+ // Reaching the auth server can fail for reasons that are not a defect of
362
+ // this library: the network dropped mid-redirect, or the browser refused
363
+ // the request outright. Firefox's Local Network Access, for one, blocks a
364
+ // public page from reaching an auth server that resolves to a private or
365
+ // CGNAT address, which is what a VPN split-DNS setup hands out. Reporting
366
+ // those as "please report a bug" sends users chasing the wrong thing.
367
+ if (isNetworkError(error)) {
368
+ throw new OidcInitializationError({
369
+ isAuthServerLikelyDown: getIsOnline().isOnline,
370
+ messageOrCause: [
371
+ `Could not reach the authorization server: ${error.message}.`,
372
+ "The server may be down, or the browser may have blocked the request",
373
+ "(check the console for a CSP, CORS or Local Network Access message)."
374
+ ].join(" ")
375
+ });
376
+ }
377
+
359
378
  assert(
360
379
  false,
361
380
  `This is a bug in oidc-spa (loginOrGoToAuthServer), please report: ${error.message}`