@noodleseed/one 0.96.2 → 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 (112) 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/dist/project-scaffold-templates.js +1 -1
  72. package/dist/project-scaffold-templates.js.map +1 -1
  73. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +1 -1
  74. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
  75. package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +1 -1
  76. package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js.map +1 -1
  77. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  78. package/node_modules/@noodle-borg/auth/dist/index.d.ts +1 -0
  79. package/node_modules/@noodle-borg/auth/dist/index.d.ts.map +1 -1
  80. package/node_modules/@noodle-borg/auth/dist/index.js +1 -0
  81. package/node_modules/@noodle-borg/auth/dist/index.js.map +1 -1
  82. package/node_modules/@noodle-borg/auth/dist/mcp-oauth-client.d.ts +56 -0
  83. package/node_modules/@noodle-borg/auth/dist/mcp-oauth-client.d.ts.map +1 -0
  84. package/node_modules/@noodle-borg/auth/dist/mcp-oauth-client.js +367 -0
  85. package/node_modules/@noodle-borg/auth/dist/mcp-oauth-client.js.map +1 -0
  86. package/node_modules/@noodle-borg/service/dist/customer-verifier-boundaries.d.ts +13 -0
  87. package/node_modules/@noodle-borg/service/dist/customer-verifier-boundaries.d.ts.map +1 -0
  88. package/node_modules/@noodle-borg/service/dist/customer-verifier-boundaries.js +71 -0
  89. package/node_modules/@noodle-borg/service/dist/customer-verifier-boundaries.js.map +1 -0
  90. package/node_modules/@noodle-borg/service/dist/customer-verifier.d.ts +1 -1
  91. package/node_modules/@noodle-borg/service/dist/customer-verifier.d.ts.map +1 -1
  92. package/node_modules/@noodle-borg/service/dist/customer-verifier.js +43 -31
  93. package/node_modules/@noodle-borg/service/dist/customer-verifier.js.map +1 -1
  94. package/node_modules/@noodle-borg/service/dist/index.d.ts +3 -1
  95. package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
  96. package/node_modules/@noodle-borg/service/dist/index.js +1 -0
  97. package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
  98. package/node_modules/@noodle-borg/service/dist/local-devtools-delegated-credentials.d.ts +20 -0
  99. package/node_modules/@noodle-borg/service/dist/local-devtools-delegated-credentials.d.ts.map +1 -0
  100. package/node_modules/@noodle-borg/service/dist/local-devtools-delegated-credentials.js +107 -0
  101. package/node_modules/@noodle-borg/service/dist/local-devtools-delegated-credentials.js.map +1 -0
  102. package/node_modules/@noodle-borg/service/dist/oauth/microsoft.d.ts +5 -0
  103. package/node_modules/@noodle-borg/service/dist/oauth/microsoft.d.ts.map +1 -1
  104. package/node_modules/@noodle-borg/service/dist/oauth/microsoft.js +48 -28
  105. package/node_modules/@noodle-borg/service/dist/oauth/microsoft.js.map +1 -1
  106. package/node_modules/@noodle-borg/service/dist/serve-options.d.ts +13 -0
  107. package/node_modules/@noodle-borg/service/dist/serve-options.d.ts.map +1 -1
  108. package/node_modules/@noodle-borg/service/dist/serve.d.ts +3 -0
  109. package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
  110. package/node_modules/@noodle-borg/service/dist/serve.js +49 -18
  111. package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
  112. 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"}