@noodleseed/one 0.96.3 → 0.97.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 (106) hide show
  1. package/README.md +2 -1
  2. package/dist/commands/author-loop.d.ts.map +1 -1
  3. package/dist/commands/author-loop.js +7 -1
  4. package/dist/commands/author-loop.js.map +1 -1
  5. package/dist/commands/catalog-data-local-authoring.d.ts.map +1 -1
  6. package/dist/commands/catalog-data-local-authoring.js +2 -2
  7. package/dist/commands/catalog-data-local-authoring.js.map +1 -1
  8. package/dist/deploy.d.ts +5 -0
  9. package/dist/deploy.d.ts.map +1 -1
  10. package/dist/deploy.js +1 -1
  11. package/dist/deploy.js.map +1 -1
  12. package/dist/dev.d.ts +13 -0
  13. package/dist/dev.d.ts.map +1 -1
  14. package/dist/dev.js +116 -7
  15. package/dist/dev.js.map +1 -1
  16. package/dist/devtools-auth-routes.d.ts +4 -0
  17. package/dist/devtools-auth-routes.d.ts.map +1 -0
  18. package/dist/devtools-auth-routes.js +205 -0
  19. package/dist/devtools-auth-routes.js.map +1 -0
  20. package/dist/devtools-auth-session-helpers.d.ts +6 -0
  21. package/dist/devtools-auth-session-helpers.d.ts.map +1 -0
  22. package/dist/devtools-auth-session-helpers.js +19 -0
  23. package/dist/devtools-auth-session-helpers.js.map +1 -0
  24. package/dist/devtools-auth-session.d.ts +35 -0
  25. package/dist/devtools-auth-session.d.ts.map +1 -0
  26. package/dist/devtools-auth-session.js +433 -0
  27. package/dist/devtools-auth-session.js.map +1 -0
  28. package/dist/devtools-auth-types.d.ts +51 -0
  29. package/dist/devtools-auth-types.d.ts.map +1 -0
  30. package/dist/devtools-auth-types.js +16 -0
  31. package/dist/devtools-auth-types.js.map +1 -0
  32. package/dist/devtools-auth-ui.d.ts +6 -0
  33. package/dist/devtools-auth-ui.d.ts.map +1 -0
  34. package/dist/devtools-auth-ui.js +127 -0
  35. package/dist/devtools-auth-ui.js.map +1 -0
  36. package/dist/devtools-delegated-credential.d.ts +10 -0
  37. package/dist/devtools-delegated-credential.d.ts.map +1 -0
  38. package/dist/devtools-delegated-credential.js +32 -0
  39. package/dist/devtools-delegated-credential.js.map +1 -0
  40. package/dist/devtools-firebase-auth.d.ts +55 -0
  41. package/dist/devtools-firebase-auth.d.ts.map +1 -0
  42. package/dist/devtools-firebase-auth.js +237 -0
  43. package/dist/devtools-firebase-auth.js.map +1 -0
  44. package/dist/devtools-harness.d.ts +5 -0
  45. package/dist/devtools-harness.d.ts.map +1 -1
  46. package/dist/devtools-harness.js +60 -21
  47. package/dist/devtools-harness.js.map +1 -1
  48. package/dist/devtools-microsoft-auth.d.ts +42 -0
  49. package/dist/devtools-microsoft-auth.d.ts.map +1 -0
  50. package/dist/devtools-microsoft-auth.js +362 -0
  51. package/dist/devtools-microsoft-auth.js.map +1 -0
  52. package/dist/devtools-microsoft-errors.d.ts +7 -0
  53. package/dist/devtools-microsoft-errors.d.ts.map +1 -0
  54. package/dist/devtools-microsoft-errors.js +60 -0
  55. package/dist/devtools-microsoft-errors.js.map +1 -0
  56. package/dist/devtools-preview.d.ts +15 -13
  57. package/dist/devtools-preview.d.ts.map +1 -1
  58. package/dist/devtools-preview.js +101 -179
  59. package/dist/devtools-preview.js.map +1 -1
  60. package/dist/devtools-rpc-forwarder.d.ts +37 -0
  61. package/dist/devtools-rpc-forwarder.d.ts.map +1 -0
  62. package/dist/devtools-rpc-forwarder.js +251 -0
  63. package/dist/devtools-rpc-forwarder.js.map +1 -0
  64. package/dist/devtools-tool-safety.d.ts +20 -0
  65. package/dist/devtools-tool-safety.d.ts.map +1 -0
  66. package/dist/devtools-tool-safety.js +43 -0
  67. package/dist/devtools-tool-safety.js.map +1 -0
  68. package/dist/preview-session.d.ts.map +1 -1
  69. package/dist/preview-session.js +5 -0
  70. package/dist/preview-session.js.map +1 -1
  71. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  72. package/node_modules/@noodle-borg/auth/dist/index.d.ts +1 -0
  73. package/node_modules/@noodle-borg/auth/dist/index.d.ts.map +1 -1
  74. package/node_modules/@noodle-borg/auth/dist/index.js +1 -0
  75. package/node_modules/@noodle-borg/auth/dist/index.js.map +1 -1
  76. package/node_modules/@noodle-borg/auth/dist/mcp-oauth-client.d.ts +56 -0
  77. package/node_modules/@noodle-borg/auth/dist/mcp-oauth-client.d.ts.map +1 -0
  78. package/node_modules/@noodle-borg/auth/dist/mcp-oauth-client.js +367 -0
  79. package/node_modules/@noodle-borg/auth/dist/mcp-oauth-client.js.map +1 -0
  80. package/node_modules/@noodle-borg/service/dist/customer-verifier-boundaries.d.ts +13 -0
  81. package/node_modules/@noodle-borg/service/dist/customer-verifier-boundaries.d.ts.map +1 -0
  82. package/node_modules/@noodle-borg/service/dist/customer-verifier-boundaries.js +71 -0
  83. package/node_modules/@noodle-borg/service/dist/customer-verifier-boundaries.js.map +1 -0
  84. package/node_modules/@noodle-borg/service/dist/customer-verifier.d.ts +1 -1
  85. package/node_modules/@noodle-borg/service/dist/customer-verifier.d.ts.map +1 -1
  86. package/node_modules/@noodle-borg/service/dist/customer-verifier.js +43 -31
  87. package/node_modules/@noodle-borg/service/dist/customer-verifier.js.map +1 -1
  88. package/node_modules/@noodle-borg/service/dist/index.d.ts +3 -1
  89. package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
  90. package/node_modules/@noodle-borg/service/dist/index.js +1 -0
  91. package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
  92. package/node_modules/@noodle-borg/service/dist/local-devtools-delegated-credentials.d.ts +20 -0
  93. package/node_modules/@noodle-borg/service/dist/local-devtools-delegated-credentials.d.ts.map +1 -0
  94. package/node_modules/@noodle-borg/service/dist/local-devtools-delegated-credentials.js +107 -0
  95. package/node_modules/@noodle-borg/service/dist/local-devtools-delegated-credentials.js.map +1 -0
  96. package/node_modules/@noodle-borg/service/dist/oauth/microsoft.d.ts +5 -0
  97. package/node_modules/@noodle-borg/service/dist/oauth/microsoft.d.ts.map +1 -1
  98. package/node_modules/@noodle-borg/service/dist/oauth/microsoft.js +48 -28
  99. package/node_modules/@noodle-borg/service/dist/oauth/microsoft.js.map +1 -1
  100. package/node_modules/@noodle-borg/service/dist/serve-options.d.ts +13 -0
  101. package/node_modules/@noodle-borg/service/dist/serve-options.d.ts.map +1 -1
  102. package/node_modules/@noodle-borg/service/dist/serve.d.ts +3 -0
  103. package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
  104. package/node_modules/@noodle-borg/service/dist/serve.js +49 -18
  105. package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
  106. package/package.json +1 -1
@@ -0,0 +1,205 @@
1
+ const FIREBASE_CALLBACK_MAX_BYTES = 192 * 1_024;
2
+ export function handleDevtoolsAuthRoute(req, res, url, session, previewOrigin, callbackPath) {
3
+ if (session === undefined || !url.pathname.startsWith('/auth/'))
4
+ return false;
5
+ if (req.method === 'GET' && url.pathname === '/auth/status') {
6
+ writeJson(res, 200, session.status());
7
+ return true;
8
+ }
9
+ if (req.method === 'POST' && url.pathname === '/auth/start') {
10
+ session
11
+ .start(url.searchParams.get('issuer') ?? undefined)
12
+ .then((authorizationUrl) => {
13
+ const status = session.status();
14
+ writeJson(res, 200, {
15
+ authorizationUrl,
16
+ issuer: status.issuer,
17
+ ...(status.method !== undefined ? { method: status.method } : {}),
18
+ ...(status.issuers !== undefined ? { issuers: status.issuers } : {}),
19
+ scopes: status.scopes,
20
+ });
21
+ })
22
+ .catch((error) => {
23
+ writeJson(res, 400, {
24
+ error: {
25
+ code: 'auth_start_failed',
26
+ message: safeMessage(error, 'Could not start sign-in'),
27
+ },
28
+ });
29
+ });
30
+ return true;
31
+ }
32
+ if (req.method === 'POST' && url.pathname === '/auth/logout') {
33
+ session.clear();
34
+ writeJson(res, 200, { ok: true });
35
+ return true;
36
+ }
37
+ if (req.method === 'GET' && url.pathname === '/auth/firebase/authorize') {
38
+ const page = session.firebaseAuthorizationPage(new URL(`${url.pathname}${url.search}`, previewOrigin));
39
+ if (page === undefined)
40
+ return false;
41
+ writeHtml(res, page.status, page.html, firebasePageCsp());
42
+ return true;
43
+ }
44
+ if (url.pathname === callbackPath && session.callbackTransport() === 'form_post') {
45
+ if (req.method !== 'POST') {
46
+ writePlain(res, 405, 'method not allowed');
47
+ return true;
48
+ }
49
+ readFirebaseCallback(req)
50
+ .then((callback) => session.completeFirebase(callback))
51
+ .then(() => writeCallback(res, true, previewOrigin, session.status()))
52
+ .catch((error) => {
53
+ if (error instanceof FirebaseCallbackRequestError) {
54
+ writePlain(res, error.status, error.message);
55
+ return;
56
+ }
57
+ writeCallback(res, false, previewOrigin, session.status());
58
+ });
59
+ return true;
60
+ }
61
+ if (url.pathname === callbackPath && session.callbackTransport() === 'query') {
62
+ if (req.method !== 'GET') {
63
+ writePlain(res, 405, 'method not allowed');
64
+ return true;
65
+ }
66
+ const callbackUrl = new URL(`${url.pathname}${url.search}`, previewOrigin).href;
67
+ session
68
+ .complete(callbackUrl)
69
+ .then(() => writeCallback(res, true, previewOrigin, session.status()))
70
+ .catch(() => writeCallback(res, false, previewOrigin, session.status()));
71
+ return true;
72
+ }
73
+ return false;
74
+ }
75
+ function writeCallback(res, ok, previewOrigin, status) {
76
+ const title = ok ? 'Signed in' : 'Sign-in failed';
77
+ const detail = ok
78
+ ? 'You can close this window and continue testing.'
79
+ : (status.message ?? 'Return to Devtools and try signing in again.');
80
+ const code = !ok && status.errorCode ? `<p class="code">${escapeHtml(status.errorCode)}</p>` : '';
81
+ const closeScript = ok ? 'setTimeout(function(){window.close();},250);' : '';
82
+ const html = '<!doctype html><html lang="en"><head><meta charset="utf-8">' +
83
+ '<meta name="viewport" content="width=device-width,initial-scale=1">' +
84
+ `<title>${title} · Noodle Seed Devtools</title>` +
85
+ '<style>body{margin:0;display:grid;min-height:100vh;place-items:center;background:#09090b;color:#f7f7f8;font:14px system-ui,sans-serif}.card{max-width:420px;padding:28px;text-align:center}h1{font-size:22px}p{color:#a1a1aa;line-height:1.6}.code{display:inline-block;margin:4px 0 0;padding:5px 8px;border:1px solid #3f3f46;border-radius:7px;color:#fca5a5;font:12px ui-monospace,monospace}</style>' +
86
+ `</head><body><main class="card"><h1>${title}</h1>${code}<p>${escapeHtml(detail)}</p></main>` +
87
+ `<script>try{if(window.opener){window.opener.postMessage({type:"noodle:auth-complete",ok:${ok ? 'true' : 'false'}},${JSON.stringify(previewOrigin)});${closeScript}}}catch(e){}</script>` +
88
+ '</body></html>';
89
+ writeHtml(res, ok ? 200 : 400, html, "default-src 'none'; style-src 'unsafe-inline'; script-src 'unsafe-inline'; frame-ancestors 'none'; base-uri 'none'; form-action 'none'");
90
+ }
91
+ function escapeHtml(value) {
92
+ return value
93
+ .replaceAll('&', '&amp;')
94
+ .replaceAll('<', '&lt;')
95
+ .replaceAll('>', '&gt;')
96
+ .replaceAll('"', '&quot;')
97
+ .replaceAll("'", '&#39;');
98
+ }
99
+ function writeJson(res, status, body) {
100
+ res.writeHead(status, {
101
+ 'content-type': 'application/json',
102
+ 'cache-control': 'no-store',
103
+ });
104
+ res.end(JSON.stringify(body));
105
+ }
106
+ function safeMessage(error, fallback) {
107
+ return error instanceof Error && error.message.length > 0
108
+ ? error.message.slice(0, 240)
109
+ : fallback;
110
+ }
111
+ class FirebaseCallbackRequestError extends Error {
112
+ status;
113
+ constructor(status, message) {
114
+ super(message);
115
+ this.status = status;
116
+ }
117
+ }
118
+ function readFirebaseCallback(req) {
119
+ const contentType = req.headers['content-type']?.split(';', 1)[0]?.trim().toLowerCase();
120
+ if (contentType !== 'application/x-www-form-urlencoded') {
121
+ return Promise.reject(new FirebaseCallbackRequestError(415, 'unsupported content type'));
122
+ }
123
+ const declared = Number(req.headers['content-length']);
124
+ if (Number.isFinite(declared) && declared > FIREBASE_CALLBACK_MAX_BYTES) {
125
+ req.resume();
126
+ return Promise.reject(new FirebaseCallbackRequestError(413, 'authorization response too large'));
127
+ }
128
+ return new Promise((resolve, reject) => {
129
+ const chunks = [];
130
+ let size = 0;
131
+ let settled = false;
132
+ req.on('data', (chunk) => {
133
+ if (settled)
134
+ return;
135
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
136
+ size += bytes.byteLength;
137
+ if (size > FIREBASE_CALLBACK_MAX_BYTES) {
138
+ settled = true;
139
+ reject(new FirebaseCallbackRequestError(413, 'authorization response too large'));
140
+ req.resume();
141
+ return;
142
+ }
143
+ chunks.push(bytes);
144
+ });
145
+ req.on('error', (error) => {
146
+ if (settled)
147
+ return;
148
+ settled = true;
149
+ reject(error);
150
+ });
151
+ req.on('end', () => {
152
+ if (settled)
153
+ return;
154
+ settled = true;
155
+ const fields = new URLSearchParams(Buffer.concat(chunks).toString('utf8'));
156
+ const state = fields.get('state') ?? '';
157
+ const idToken = fields.get('id_token') ?? undefined;
158
+ const refreshToken = fields.get('refresh_token') || undefined;
159
+ const error = fields.get('error') ?? undefined;
160
+ const expiresRaw = fields.get('expires_in');
161
+ const expiresIn = expiresRaw === null || expiresRaw === '' ? undefined : Number(expiresRaw);
162
+ resolve({
163
+ state,
164
+ ...(idToken === undefined ? {} : { idToken }),
165
+ ...(refreshToken === undefined ? {} : { refreshToken }),
166
+ ...(expiresIn === undefined ? {} : { expiresIn }),
167
+ ...(error === undefined ? {} : { error }),
168
+ });
169
+ });
170
+ });
171
+ }
172
+ function writeHtml(res, status, html, csp) {
173
+ res.writeHead(status, {
174
+ 'content-type': 'text/html; charset=utf-8',
175
+ 'content-security-policy': csp,
176
+ 'cache-control': 'no-store',
177
+ 'referrer-policy': 'no-referrer',
178
+ 'x-content-type-options': 'nosniff',
179
+ });
180
+ res.end(html);
181
+ }
182
+ function writePlain(res, status, message) {
183
+ res.writeHead(status, {
184
+ 'content-type': 'text/plain; charset=utf-8',
185
+ 'cache-control': 'no-store',
186
+ 'referrer-policy': 'no-referrer',
187
+ 'x-content-type-options': 'nosniff',
188
+ });
189
+ res.end(message);
190
+ }
191
+ function firebasePageCsp() {
192
+ return [
193
+ "default-src 'none'",
194
+ "style-src 'unsafe-inline'",
195
+ "script-src 'unsafe-inline' https://www.gstatic.com https://apis.google.com",
196
+ "connect-src 'self' https: wss:",
197
+ 'frame-src https:',
198
+ 'img-src data: https:',
199
+ "form-action 'self'",
200
+ "frame-ancestors 'none'",
201
+ "base-uri 'none'",
202
+ "object-src 'none'",
203
+ ].join('; ');
204
+ }
205
+ //# sourceMappingURL=devtools-auth-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-auth-routes.js","sourceRoot":"","sources":["../src/devtools-auth-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function safeFailure(error: unknown, fallback: string): {
2
+ readonly message: string;
3
+ readonly errorCode?: string;
4
+ };
5
+ export declare function constantTimeStringEqual(left: string, right: string): boolean;
6
+ //# sourceMappingURL=devtools-auth-session-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-auth-session-helpers.d.ts","sourceRoot":"","sources":["../src/devtools-auth-session-helpers.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CACzB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GACf;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAK3D;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAI5E"}
@@ -0,0 +1,19 @@
1
+ import { timingSafeEqual } from 'node:crypto';
2
+ import { DevtoolsAuthError } from './devtools-auth-types.js';
3
+ export function safeFailure(error, fallback) {
4
+ return {
5
+ message: safeMessage(error, fallback),
6
+ ...(error instanceof DevtoolsAuthError ? { errorCode: error.code } : {}),
7
+ };
8
+ }
9
+ export function constantTimeStringEqual(left, right) {
10
+ const leftBytes = Buffer.from(left);
11
+ const rightBytes = Buffer.from(right);
12
+ return leftBytes.length === rightBytes.length && timingSafeEqual(leftBytes, rightBytes);
13
+ }
14
+ function safeMessage(error, fallback) {
15
+ if (!(error instanceof Error) || error.message.length === 0)
16
+ return fallback;
17
+ return error.message.slice(0, 240);
18
+ }
19
+ //# sourceMappingURL=devtools-auth-session-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-auth-session-helpers.js","sourceRoot":"","sources":["../src/devtools-auth-session-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,UAAU,WAAW,CACzB,KAAc,EACd,QAAgB;IAEhB,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC;QACrC,GAAG,CAAC,KAAK,YAAY,iBAAiB,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAY,EAAE,KAAa;IACjE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,SAAS,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,QAAgB;IACnD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC7E,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { LocalDevtoolsDelegatedCredentialSink } from '@noodle-borg/service';
2
+ import { type DevtoolsAuthStatus, type DevtoolsCustomerAuth, type DevtoolsOAuthDriver } from './devtools-auth-types.js';
3
+ import { type DevtoolsFirebaseAuthorizationPage, type DevtoolsFirebaseCallback, type DevtoolsFirebaseDriver } from './devtools-firebase-auth.js';
4
+ export { DevtoolsAuthRequiredError, type DevtoolsAuthState, type DevtoolsAuthStatus, type DevtoolsCustomerAuth, type DevtoolsOAuthDriver, } from './devtools-auth-types.js';
5
+ export type { DevtoolsFirebaseCallback, DevtoolsFirebaseDriver } from './devtools-firebase-auth.js';
6
+ export type { DevtoolsMicrosoftAuthConfig } from './devtools-microsoft-auth.js';
7
+ export declare class DevtoolsAuthSession {
8
+ #private;
9
+ constructor(options: {
10
+ readonly resource: string;
11
+ readonly redirectUri: string;
12
+ readonly auth: DevtoolsCustomerAuth;
13
+ /** Focused test seam; production constructs the standards client. */
14
+ readonly driver?: DevtoolsOAuthDriver;
15
+ /** Focused multi-issuer test seam; production constructs one standards client per selected issuer. */
16
+ readonly driverFactory?: (issuer: string) => DevtoolsOAuthDriver;
17
+ /** Focused Firebase test seam; production constructs the local Firebase adapter. */
18
+ readonly firebaseDriver?: DevtoolsFirebaseDriver;
19
+ /** In-process-only bridge into the loopback runtime's ephemeral delegated credential source. */
20
+ readonly delegatedCredentialSink?: LocalDevtoolsDelegatedCredentialSink;
21
+ readonly fetchFn?: typeof fetch;
22
+ });
23
+ status(): DevtoolsAuthStatus;
24
+ start(issuer?: string): Promise<string>;
25
+ complete(callbackUrl: string): Promise<void>;
26
+ callbackTransport(): 'query' | 'form_post';
27
+ firebaseAuthorizationPage(url: URL): DevtoolsFirebaseAuthorizationPage | undefined;
28
+ completeFirebase(callback: DevtoolsFirebaseCallback): Promise<void>;
29
+ accessToken(options?: {
30
+ readonly forceRefresh?: boolean;
31
+ }): Promise<string>;
32
+ noteBearerChallenge(status: number, header: string | null): void;
33
+ clear(): void;
34
+ }
35
+ //# sourceMappingURL=devtools-auth-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-auth-session.d.ts","sourceRoot":"","sources":["../src/devtools-auth-session.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,sBAAsB,CAAC;AAEjF,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,KAAK,iCAAiC,EACtC,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAG5B,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,yBAAyB,EACzB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACpG,YAAY,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAEhF,qBAAa,mBAAmB;;gBAyBlB,OAAO,EAAE;QACnB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;QACpC,qEAAqE;QACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC;QACtC,sGAAsG;QACtG,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,mBAAmB,CAAC;QACjE,oFAAoF;QACpF,QAAQ,CAAC,cAAc,CAAC,EAAE,sBAAsB,CAAC;QACjD,gGAAgG;QAChG,QAAQ,CAAC,uBAAuB,CAAC,EAAE,oCAAoC,CAAC;QACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;KACjC;IAkDD,MAAM,IAAI,kBAAkB;IAmCtB,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+CvC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsClD,iBAAiB,IAAI,OAAO,GAAG,WAAW;IAI1C,yBAAyB,CAAC,GAAG,EAAE,GAAG,GAAG,iCAAiC,GAAG,SAAS;IAK5E,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BnE,WAAW,CAAC,OAAO,GAAE;QAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAyDrF,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAsChE,KAAK,IAAI,IAAI;CAmHd"}