@vymalo/opencode-oauth2 0.11.0 → 0.14.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 (57) hide show
  1. package/dist/cache.d.ts +6 -6
  2. package/dist/cache.js +100 -104
  3. package/dist/cache.js.map +1 -1
  4. package/dist/config.d.ts +107 -107
  5. package/dist/config.js +173 -182
  6. package/dist/config.js.map +1 -1
  7. package/dist/index.js +1 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib.js +1 -0
  10. package/dist/lib.js.map +1 -1
  11. package/dist/logging.d.ts +6 -6
  12. package/dist/logging.js +57 -56
  13. package/dist/logging.js.map +1 -1
  14. package/dist/model-discovery.d.ts +3 -3
  15. package/dist/model-discovery.js +61 -66
  16. package/dist/model-discovery.js.map +1 -1
  17. package/dist/model-normalization.js +84 -73
  18. package/dist/model-normalization.js.map +1 -1
  19. package/dist/oauth/browser.js +29 -25
  20. package/dist/oauth/browser.js.map +1 -1
  21. package/dist/oauth/client.d.ts +46 -46
  22. package/dist/oauth/client.js +411 -430
  23. package/dist/oauth/client.js.map +1 -1
  24. package/dist/oauth/device-code.d.ts +23 -23
  25. package/dist/oauth/device-code.js +225 -235
  26. package/dist/oauth/device-code.js.map +1 -1
  27. package/dist/oauth/discovery.d.ts +5 -5
  28. package/dist/oauth/discovery.js +34 -34
  29. package/dist/oauth/discovery.js.map +1 -1
  30. package/dist/oauth/http-utils.d.ts +27 -27
  31. package/dist/oauth/http-utils.js +96 -107
  32. package/dist/oauth/http-utils.js.map +1 -1
  33. package/dist/oauth/local-callback.d.ts +5 -5
  34. package/dist/oauth/local-callback.js +76 -74
  35. package/dist/oauth/local-callback.js.map +1 -1
  36. package/dist/oauth/pkce.d.ts +2 -2
  37. package/dist/oauth/pkce.js +9 -5
  38. package/dist/oauth/pkce.js.map +1 -1
  39. package/dist/oauth/subject-token.d.ts +15 -15
  40. package/dist/oauth/subject-token.js +68 -73
  41. package/dist/oauth/subject-token.js.map +1 -1
  42. package/dist/opencode.d.ts +15 -15
  43. package/dist/opencode.js +477 -497
  44. package/dist/opencode.js.map +1 -1
  45. package/dist/plugin.d.ts +39 -39
  46. package/dist/plugin.js +270 -277
  47. package/dist/plugin.js.map +1 -1
  48. package/dist/responses-repair.d.ts +12 -35
  49. package/dist/responses-repair.js +119 -125
  50. package/dist/responses-repair.js.map +1 -1
  51. package/dist/scheduler.d.ts +5 -5
  52. package/dist/scheduler.js +43 -45
  53. package/dist/scheduler.js.map +1 -1
  54. package/dist/types.d.ts +25 -25
  55. package/dist/types.js +1 -0
  56. package/dist/types.js.map +1 -1
  57. package/package.json +3 -3
@@ -1,9 +1,9 @@
1
1
  import type { Logger } from "./logging.js";
2
2
  import type { RawModel, TokenSet } from "./types.js";
3
3
  export interface ModelDiscoveryOptions {
4
- fetchImpl?: typeof fetch;
5
- timeoutMs?: number;
6
- logger?: Logger;
4
+ fetchImpl?: typeof fetch;
5
+ timeoutMs?: number;
6
+ logger?: Logger;
7
7
  }
8
8
  export declare function buildModelsUrl(baseURL: string): string;
9
9
  export declare function fetchModels(baseURL: string, token: TokenSet, options?: ModelDiscoveryOptions): Promise<RawModel[]>;
@@ -1,74 +1,69 @@
1
1
  import { readResponseBodyPreview, redactUrl, scrubSecrets } from "./oauth/http-utils.js";
2
2
  export function buildModelsUrl(baseURL) {
3
- const url = new URL(baseURL);
4
- const path = url.pathname.replace(/\/+$/, "");
5
- if (path.endsWith("/v1")) {
6
- url.pathname = `${path}/models`;
7
- }
8
- else {
9
- url.pathname = `${path}/v1/models`;
10
- }
11
- return url.toString();
3
+ const url = new URL(baseURL);
4
+ const path = url.pathname.replace(/\/+$/, "");
5
+ if (path.endsWith("/v1")) {
6
+ url.pathname = `${path}/models`;
7
+ } else {
8
+ url.pathname = `${path}/v1/models`;
9
+ }
10
+ return url.toString();
12
11
  }
13
12
  function parseModelsResponse(payload) {
14
- const candidates = Array.isArray(payload)
15
- ? payload
16
- : payload && typeof payload === "object" && Array.isArray(payload.data)
17
- ? payload.data
18
- : [];
19
- const models = [];
20
- for (const item of candidates) {
21
- if (!item || typeof item !== "object") {
22
- continue;
23
- }
24
- const id = item.id;
25
- if (typeof id !== "string" || id.length === 0) {
26
- continue;
27
- }
28
- models.push(item);
29
- }
30
- return models;
13
+ const candidates = Array.isArray(payload) ? payload : payload && typeof payload === "object" && Array.isArray(payload.data) ? payload.data : [];
14
+ const models = [];
15
+ for (const item of candidates) {
16
+ if (!item || typeof item !== "object") {
17
+ continue;
18
+ }
19
+ const id = item.id;
20
+ if (typeof id !== "string" || id.length === 0) {
21
+ continue;
22
+ }
23
+ models.push(item);
24
+ }
25
+ return models;
31
26
  }
32
27
  export async function fetchModels(baseURL, token, options = {}) {
33
- const fetchImpl = options.fetchImpl ?? fetch;
34
- const timeoutMs = options.timeoutMs ?? 15_000;
35
- const modelsUrl = buildModelsUrl(baseURL);
36
- const controller = new AbortController();
37
- const timeout = setTimeout(() => controller.abort(), timeoutMs);
38
- try {
39
- const response = await fetchImpl(modelsUrl, {
40
- method: "GET",
41
- headers: {
42
- Accept: "application/json",
43
- Authorization: `${token.tokenType || "Bearer"} ${token.accessToken}`
44
- },
45
- signal: controller.signal
46
- });
47
- if (!response.ok) {
48
- const safeUrl = redactUrl(modelsUrl);
49
- // Log the body separately at warn-level so the structured logger's
50
- // redaction filter has a chance to scrub matching keys, and so the body
51
- // never lands inside a thrown error.message (which callers like
52
- // syncServer log verbatim).
53
- const preview = await readResponseBodyPreview(response, 500);
54
- if (preview) {
55
- options.logger?.warn("model_discovery_error_body", {
56
- modelsUrl: safeUrl,
57
- status: response.status,
58
- bodyPreview: scrubSecrets(preview)
59
- });
60
- }
61
- throw new Error(`model discovery failed (${response.status}) at ${safeUrl}`);
62
- }
63
- const payload = (await response.json());
64
- const models = parseModelsResponse(payload);
65
- if (models.length === 0) {
66
- options.logger?.warn("model_discovery_empty", { modelsUrl: redactUrl(modelsUrl) });
67
- }
68
- return models;
69
- }
70
- finally {
71
- clearTimeout(timeout);
72
- }
28
+ const fetchImpl = options.fetchImpl ?? fetch;
29
+ const timeoutMs = options.timeoutMs ?? 15e3;
30
+ const modelsUrl = buildModelsUrl(baseURL);
31
+ const controller = new AbortController();
32
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
33
+ try {
34
+ const response = await fetchImpl(modelsUrl, {
35
+ method: "GET",
36
+ headers: {
37
+ Accept: "application/json",
38
+ Authorization: `${token.tokenType || "Bearer"} ${token.accessToken}`
39
+ },
40
+ signal: controller.signal
41
+ });
42
+ if (!response.ok) {
43
+ const safeUrl = redactUrl(modelsUrl);
44
+ // Log the body separately at warn-level so the structured logger's
45
+ // redaction filter has a chance to scrub matching keys, and so the body
46
+ // never lands inside a thrown error.message (which callers like
47
+ // syncServer log verbatim).
48
+ const preview = await readResponseBodyPreview(response, 500);
49
+ if (preview) {
50
+ options.logger?.warn("model_discovery_error_body", {
51
+ modelsUrl: safeUrl,
52
+ status: response.status,
53
+ bodyPreview: scrubSecrets(preview)
54
+ });
55
+ }
56
+ throw new Error(`model discovery failed (${response.status}) at ${safeUrl}`);
57
+ }
58
+ const payload = await response.json();
59
+ const models = parseModelsResponse(payload);
60
+ if (models.length === 0) {
61
+ options.logger?.warn("model_discovery_empty", { modelsUrl: redactUrl(modelsUrl) });
62
+ }
63
+ return models;
64
+ } finally {
65
+ clearTimeout(timeout);
66
+ }
73
67
  }
68
+
74
69
  //# sourceMappingURL=model-discovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-discovery.js","sourceRoot":"","sources":["../src/model-discovery.ts"],"names":[],"mappings":"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"}
1
+ {"mappings":"AACA,SAAS,yBAAyB,WAAW,oBAAoB;AASjE,OAAO,SAAS,eAAe,SAAyB;CACtD,MAAM,MAAM,IAAI,IAAI,OAAO;CAC3B,MAAM,OAAO,IAAI,SAAS,QAAQ,QAAQ,EAAE;CAE5C,IAAI,KAAK,SAAS,KAAK,GAAG;EACxB,IAAI,WAAW,GAAG,KAAK;CACzB,OAAO;EACL,IAAI,WAAW,GAAG,KAAK;CACzB;CAEA,OAAO,IAAI,SAAS;AACtB;AAEA,SAAS,oBAAoB,SAA8B;CACzD,MAAM,aAAwB,MAAM,QAAQ,OAAO,IAC/C,UACA,WAAW,OAAO,YAAY,YAAY,MAAM,QAAS,QAA+B,IAAI,IACzF,QAAgC,OACjC,CAAC;CAEP,MAAM,SAAqB,CAAC;CAE5B,KAAK,MAAM,QAAQ,YAAY;EAC7B,IAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;GACrC;EACF;EAEA,MAAM,KAAM,KAA0B;EACtC,IAAI,OAAO,OAAO,YAAY,GAAG,WAAW,GAAG;GAC7C;EACF;EAEA,OAAO,KAAK,IAAgB;CAC9B;CAEA,OAAO;AACT;AAEA,OAAO,eAAe,YACpB,SACA,OACA,UAAiC,CAAC,GACb;CACrB,MAAM,YAAY,QAAQ,aAAa;CACvC,MAAM,YAAY,QAAQ,aAAa;CACvC,MAAM,YAAY,eAAe,OAAO;CAExC,MAAM,aAAa,IAAI,gBAAgB;CACvC,MAAM,UAAU,iBAAiB,WAAW,MAAM,GAAG,SAAS;CAE9D,IAAI;EACF,MAAM,WAAW,MAAM,UAAU,WAAW;GAC1C,QAAQ;GACR,SAAS;IACP,QAAQ;IACR,eAAe,GAAG,MAAM,aAAa,SAAS,GAAG,MAAM;GACzD;GACA,QAAQ,WAAW;EACrB,CAAC;EAED,IAAI,CAAC,SAAS,IAAI;GAChB,MAAM,UAAU,UAAU,SAAS;;;;;GAKnC,MAAM,UAAU,MAAM,wBAAwB,UAAU,GAAG;GAC3D,IAAI,SAAS;IACX,QAAQ,QAAQ,KAAK,8BAA8B;KACjD,WAAW;KACX,QAAQ,SAAS;KACjB,aAAa,aAAa,OAAO;IACnC,CAAC;GACH;GACA,MAAM,IAAI,MAAM,2BAA2B,SAAS,OAAO,OAAO,SAAS;EAC7E;EAEA,MAAM,UAAW,MAAM,SAAS,KAAK;EACrC,MAAM,SAAS,oBAAoB,OAAO;EAE1C,IAAI,OAAO,WAAW,GAAG;GACvB,QAAQ,QAAQ,KAAK,yBAAyB,EAAE,WAAW,UAAU,SAAS,EAAE,CAAC;EACnF;EAEA,OAAO;CACT,UAAU;EACR,aAAa,OAAO;CACtB;AACF","names":[],"sources":["../src/model-discovery.ts"],"version":3,"file":"model-discovery.js","sourceRoot":""}
@@ -1,86 +1,97 @@
1
1
  const TOKEN_OVERRIDES = {
2
- ai: "AI",
3
- api: "API",
4
- cpu: "CPU",
5
- gpu: "GPU",
6
- glm: "GLM",
7
- gpt: "GPT",
8
- llm: "LLM",
9
- nlp: "NLP",
10
- ocr: "OCR",
11
- tts: "TTS",
12
- stt: "STT"
2
+ ai: "AI",
3
+ api: "API",
4
+ cpu: "CPU",
5
+ gpu: "GPU",
6
+ glm: "GLM",
7
+ gpt: "GPT",
8
+ llm: "LLM",
9
+ nlp: "NLP",
10
+ ocr: "OCR",
11
+ tts: "TTS",
12
+ stt: "STT"
13
13
  };
14
14
  function titleCase(token) {
15
- if (token.length === 0) {
16
- return token;
17
- }
18
- return token[0].toUpperCase() + token.slice(1).toLowerCase();
15
+ if (token.length === 0) {
16
+ return token;
17
+ }
18
+ return token[0].toUpperCase() + token.slice(1).toLowerCase();
19
19
  }
20
20
  function normalizeToken(token) {
21
- const lower = token.toLowerCase();
22
- if (TOKEN_OVERRIDES[lower]) {
23
- return TOKEN_OVERRIDES[lower];
24
- }
25
- if (/^\d+$/.test(token)) {
26
- return token;
27
- }
28
- if (/^\d+[a-z]$/i.test(token)) {
29
- const suffix = token.at(-1)?.toLowerCase() ?? "";
30
- if (["b", "k", "m", "g", "t"].includes(suffix)) {
31
- return `${token.slice(0, -1)}${suffix.toUpperCase()}`;
32
- }
33
- return `${token.slice(0, -1)}${suffix}`;
34
- }
35
- if (/^[a-z]+\d+[a-z0-9]*$/i.test(token)) {
36
- return token[0].toUpperCase() + token.slice(1).toLowerCase();
37
- }
38
- if (/^\d+[a-z]+$/i.test(token)) {
39
- return `${token.match(/^\d+/)?.[0] ?? ""}${token.replace(/^\d+/, "").toLowerCase()}`;
40
- }
41
- return titleCase(token);
21
+ const lower = token.toLowerCase();
22
+ if (TOKEN_OVERRIDES[lower]) {
23
+ return TOKEN_OVERRIDES[lower];
24
+ }
25
+ if (/^\d+$/.test(token)) {
26
+ return token;
27
+ }
28
+ if (/^\d+[a-z]$/i.test(token)) {
29
+ const suffix = token.at(-1)?.toLowerCase() ?? "";
30
+ if ([
31
+ "b",
32
+ "k",
33
+ "m",
34
+ "g",
35
+ "t"
36
+ ].includes(suffix)) {
37
+ return `${token.slice(0, -1)}${suffix.toUpperCase()}`;
38
+ }
39
+ return `${token.slice(0, -1)}${suffix}`;
40
+ }
41
+ if (/^[a-z]+\d+[a-z0-9]*$/i.test(token)) {
42
+ return token[0].toUpperCase() + token.slice(1).toLowerCase();
43
+ }
44
+ if (/^\d+[a-z]+$/i.test(token)) {
45
+ return `${token.match(/^\d+/)?.[0] ?? ""}${token.replace(/^\d+/, "").toLowerCase()}`;
46
+ }
47
+ return titleCase(token);
42
48
  }
43
49
  export function normalizeModelId(modelId, overrides) {
44
- if (overrides?.[modelId]) {
45
- return overrides[modelId];
46
- }
47
- const normalizedTokens = modelId
48
- .split(/[-_/:]+/g)
49
- .map((token) => token.trim())
50
- .filter((token) => token.length > 0)
51
- .map((token) => normalizeToken(token));
52
- if (normalizedTokens.length === 0) {
53
- return modelId;
54
- }
55
- return normalizedTokens.join(" ");
50
+ if (overrides?.[modelId]) {
51
+ return overrides[modelId];
52
+ }
53
+ const normalizedTokens = modelId.split(/[-_/:]+/g).map((token) => token.trim()).filter((token) => token.length > 0).map((token) => normalizeToken(token));
54
+ if (normalizedTokens.length === 0) {
55
+ return modelId;
56
+ }
57
+ return normalizedTokens.join(" ");
56
58
  }
57
59
  export function normalizeModelList(models, overrides) {
58
- return models.map((model) => ({
59
- id: model.id,
60
- displayName: normalizeModelId(model.id, overrides)
61
- }));
60
+ return models.map((model) => ({
61
+ id: model.id,
62
+ displayName: normalizeModelId(model.id, overrides)
63
+ }));
62
64
  }
63
65
  export function diffModels(previous, next) {
64
- const previousMap = new Map(previous.map((model) => [model.id, model.displayName]));
65
- const nextMap = new Map(next.map((model) => [model.id, model.displayName]));
66
- const added = [];
67
- const removed = [];
68
- const renamed = [];
69
- for (const [id, displayName] of nextMap.entries()) {
70
- if (!previousMap.has(id)) {
71
- added.push(id);
72
- continue;
73
- }
74
- const previousName = previousMap.get(id);
75
- if (previousName && previousName !== displayName) {
76
- renamed.push({ id, before: previousName, after: displayName });
77
- }
78
- }
79
- for (const id of previousMap.keys()) {
80
- if (!nextMap.has(id)) {
81
- removed.push(id);
82
- }
83
- }
84
- return { added, removed, renamed };
66
+ const previousMap = new Map(previous.map((model) => [model.id, model.displayName]));
67
+ const nextMap = new Map(next.map((model) => [model.id, model.displayName]));
68
+ const added = [];
69
+ const removed = [];
70
+ const renamed = [];
71
+ for (const [id, displayName] of nextMap.entries()) {
72
+ if (!previousMap.has(id)) {
73
+ added.push(id);
74
+ continue;
75
+ }
76
+ const previousName = previousMap.get(id);
77
+ if (previousName && previousName !== displayName) {
78
+ renamed.push({
79
+ id,
80
+ before: previousName,
81
+ after: displayName
82
+ });
83
+ }
84
+ }
85
+ for (const id of previousMap.keys()) {
86
+ if (!nextMap.has(id)) {
87
+ removed.push(id);
88
+ }
89
+ }
90
+ return {
91
+ added,
92
+ removed,
93
+ renamed
94
+ };
85
95
  }
96
+
86
97
  //# sourceMappingURL=model-normalization.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-normalization.js","sourceRoot":"","sources":["../src/model-normalization.ts"],"names":[],"mappings":"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"}
1
+ {"mappings":"AAEA,MAAM,kBAA0C;CAC9C,IAAI;CACJ,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;AACP;AAEA,SAAS,UAAU,OAAuB;CACxC,IAAI,MAAM,WAAW,GAAG;EACtB,OAAO;CACT;CACA,OAAO,MAAM,EAAE,CAAC,YAAY,IAAI,MAAM,MAAM,CAAC,CAAC,CAAC,YAAY;AAC7D;AAEA,SAAS,eAAe,OAAuB;CAC7C,MAAM,QAAQ,MAAM,YAAY;CAEhC,IAAI,gBAAgB,QAAQ;EAC1B,OAAO,gBAAgB;CACzB;CAEA,IAAI,QAAQ,KAAK,KAAK,GAAG;EACvB,OAAO;CACT;CAEA,IAAI,cAAc,KAAK,KAAK,GAAG;EAC7B,MAAM,SAAS,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,KAAK;EAC9C,IAAI;GAAC;GAAK;GAAK;GAAK;GAAK;EAAG,CAAC,CAAC,SAAS,MAAM,GAAG;GAC9C,OAAO,GAAG,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,OAAO,YAAY;EACpD;EAEA,OAAO,GAAG,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI;CACjC;CAEA,IAAI,wBAAwB,KAAK,KAAK,GAAG;EACvC,OAAO,MAAM,EAAE,CAAC,YAAY,IAAI,MAAM,MAAM,CAAC,CAAC,CAAC,YAAY;CAC7D;CAEA,IAAI,eAAe,KAAK,KAAK,GAAG;EAC9B,OAAO,GAAG,MAAM,MAAM,MAAM,CAAC,GAAG,MAAM,KAAK,MAAM,QAAQ,QAAQ,EAAE,CAAC,CAAC,YAAY;CACnF;CAEA,OAAO,UAAU,KAAK;AACxB;AAEA,OAAO,SAAS,iBAAiB,SAAiB,WAA4C;CAC5F,IAAI,YAAY,UAAU;EACxB,OAAO,UAAU;CACnB;CAEA,MAAM,mBAAmB,QACtB,MAAM,UAAU,CAAC,CACjB,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC,CAC5B,QAAQ,UAAU,MAAM,SAAS,CAAC,CAAC,CACnC,KAAK,UAAU,eAAe,KAAK,CAAC;CAEvC,IAAI,iBAAiB,WAAW,GAAG;EACjC,OAAO;CACT;CAEA,OAAO,iBAAiB,KAAK,GAAG;AAClC;AAEA,OAAO,SAAS,mBACd,QACA,WACmB;CACnB,OAAO,OAAO,KAAK,WAAW;EAC5B,IAAI,MAAM;EACV,aAAa,iBAAiB,MAAM,IAAI,SAAS;CACnD,EAAE;AACJ;AAEA,OAAO,SAAS,WAAW,UAA6B,MAAoC;CAC1F,MAAM,cAAc,IAAI,IAAI,SAAS,KAAK,UAAU,CAAC,MAAM,IAAI,MAAM,WAAW,CAAC,CAAC;CAClF,MAAM,UAAU,IAAI,IAAI,KAAK,KAAK,UAAU,CAAC,MAAM,IAAI,MAAM,WAAW,CAAC,CAAC;CAE1E,MAAM,QAAkB,CAAC;CACzB,MAAM,UAAoB,CAAC;CAC3B,MAAM,UAID,CAAC;CAEN,KAAK,MAAM,CAAC,IAAI,gBAAgB,QAAQ,QAAQ,GAAG;EACjD,IAAI,CAAC,YAAY,IAAI,EAAE,GAAG;GACxB,MAAM,KAAK,EAAE;GACb;EACF;EAEA,MAAM,eAAe,YAAY,IAAI,EAAE;EACvC,IAAI,gBAAgB,iBAAiB,aAAa;GAChD,QAAQ,KAAK;IAAE;IAAI,QAAQ;IAAc,OAAO;GAAY,CAAC;EAC/D;CACF;CAEA,KAAK,MAAM,MAAM,YAAY,KAAK,GAAG;EACnC,IAAI,CAAC,QAAQ,IAAI,EAAE,GAAG;GACpB,QAAQ,KAAK,EAAE;EACjB;CACF;CAEA,OAAO;EAAE;EAAO;EAAS;CAAQ;AACnC","names":[],"sources":["../src/model-normalization.ts"],"version":3,"file":"model-normalization.js","sourceRoot":""}
@@ -1,29 +1,33 @@
1
1
  import { spawn } from "node:child_process";
2
2
  export async function openExternalUrl(url) {
3
- await new Promise((resolve, reject) => {
4
- let command;
5
- let args;
6
- if (process.platform === "darwin") {
7
- command = "open";
8
- args = [url];
9
- }
10
- else if (process.platform === "win32") {
11
- command = "cmd";
12
- args = ["/c", "start", "", url];
13
- }
14
- else {
15
- command = "xdg-open";
16
- args = [url];
17
- }
18
- const child = spawn(command, args, {
19
- stdio: "ignore",
20
- detached: true
21
- });
22
- child.once("error", reject);
23
- child.once("spawn", () => {
24
- child.unref();
25
- resolve();
26
- });
27
- });
3
+ await new Promise((resolve, reject) => {
4
+ let command;
5
+ let args;
6
+ if (process.platform === "darwin") {
7
+ command = "open";
8
+ args = [url];
9
+ } else if (process.platform === "win32") {
10
+ command = "cmd";
11
+ args = [
12
+ "/c",
13
+ "start",
14
+ "",
15
+ url
16
+ ];
17
+ } else {
18
+ command = "xdg-open";
19
+ args = [url];
20
+ }
21
+ const child = spawn(command, args, {
22
+ stdio: "ignore",
23
+ detached: true
24
+ });
25
+ child.once("error", reject);
26
+ child.once("spawn", () => {
27
+ child.unref();
28
+ resolve();
29
+ });
30
+ });
28
31
  }
32
+
29
33
  //# sourceMappingURL=browser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/oauth/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW;IAC/C,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,IAAI,OAAe,CAAC;QACpB,IAAI,IAAc,CAAC;QAEnB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,GAAG,MAAM,CAAC;YACjB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACxC,OAAO,GAAG,KAAK,CAAC;YAChB,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,UAAU,CAAC;YACrB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"mappings":"AAAA,SAAS,aAAa;AAEtB,OAAO,eAAe,gBAAgB,KAA4B;CAChE,MAAM,IAAI,SAAe,SAAS,WAAW;EAC3C,IAAI;EACJ,IAAI;EAEJ,IAAI,QAAQ,aAAa,UAAU;GACjC,UAAU;GACV,OAAO,CAAC,GAAG;EACb,OAAO,IAAI,QAAQ,aAAa,SAAS;GACvC,UAAU;GACV,OAAO;IAAC;IAAM;IAAS;IAAI;GAAG;EAChC,OAAO;GACL,UAAU;GACV,OAAO,CAAC,GAAG;EACb;EAEA,MAAM,QAAQ,MAAM,SAAS,MAAM;GACjC,OAAO;GACP,UAAU;EACZ,CAAC;EAED,MAAM,KAAK,SAAS,MAAM;EAC1B,MAAM,KAAK,eAAe;GACxB,MAAM,MAAM;GACZ,QAAQ;EACV,CAAC;CACH,CAAC;AACH","names":[],"sources":["../../src/oauth/browser.ts"],"version":3,"file":"browser.js","sourceRoot":""}
@@ -2,55 +2,55 @@ import type { OAuthServerConfig } from "../config.js";
2
2
  import type { Logger } from "../logging.js";
3
3
  import type { TokenSet } from "../types.js";
4
4
  interface OAuthClientOptions {
5
- fetchImpl?: typeof fetch;
6
- logger: Logger;
7
- timeoutMs: number;
8
- onAuthorizationUrl?: (url: string) => Promise<void> | void;
9
- tokenExpirySkewMs?: number;
5
+ fetchImpl?: typeof fetch;
6
+ logger: Logger;
7
+ timeoutMs: number;
8
+ onAuthorizationUrl?: (url: string) => Promise<void> | void;
9
+ tokenExpirySkewMs?: number;
10
10
  }
11
11
  export declare function toTokenSet(payload: Record<string, unknown>, options?: {
12
- fallbackRefreshToken?: string;
13
- requireRefreshToken?: boolean;
12
+ fallbackRefreshToken?: string;
13
+ requireRefreshToken?: boolean;
14
14
  }): TokenSet;
15
15
  export declare class OAuthClient {
16
- private readonly server;
17
- private readonly fetchImpl;
18
- private readonly logger;
19
- private readonly timeoutMs;
20
- private readonly onAuthorizationUrl?;
21
- private readonly tokenExpirySkewMs;
22
- constructor(server: OAuthServerConfig, options: OAuthClientOptions);
23
- private isTokenValid;
24
- /**
25
- * POST to a token endpoint with an AbortController-backed timeout. Without
26
- * this, a stalled IdP would block the warmup path indefinitely (the plugin
27
- * runs token requests at config-hook time for cached/client_credentials
28
- * paths).
29
- */
30
- private postWithTimeout;
31
- ensureToken(current?: TokenSet, options?: {
32
- interactive?: boolean;
33
- }): Promise<TokenSet>;
34
- private loginClientCredentials;
35
- private loginJwtBearer;
36
- private loginTokenExchange;
37
- /**
38
- * Shared driver for jwt_bearer and token_exchange. Both grants:
39
- * - resolve a platform-supplied JWT from `subjectTokenSource`
40
- * - POST it to the token endpoint with grant-specific form fields
41
- * - get back an access token (refresh token is NOT expected for either)
42
- */
43
- private postFederatedGrant;
44
- /**
45
- * Resolve endpoints for the configured flow. Skips OIDC discovery entirely
46
- * when the explicit endpoints needed for the flow are all present in config
47
- * — discovery is unavailable on RFC 8414-only servers and on Keycloak
48
- * realms where the well-known doc is locked down.
49
- */
50
- private resolveEndpoints;
51
- private hasExplicitEndpointsForFlow;
52
- private refreshToken;
53
- private loginDeviceCode;
54
- private loginInteractive;
16
+ private readonly server;
17
+ private readonly fetchImpl;
18
+ private readonly logger;
19
+ private readonly timeoutMs;
20
+ private readonly onAuthorizationUrl?;
21
+ private readonly tokenExpirySkewMs;
22
+ constructor(server: OAuthServerConfig, options: OAuthClientOptions);
23
+ private isTokenValid;
24
+ /**
25
+ * POST to a token endpoint with an AbortController-backed timeout. Without
26
+ * this, a stalled IdP would block the warmup path indefinitely (the plugin
27
+ * runs token requests at config-hook time for cached/client_credentials
28
+ * paths).
29
+ */
30
+ private postWithTimeout;
31
+ ensureToken(current?: TokenSet, options?: {
32
+ interactive?: boolean;
33
+ }): Promise<TokenSet>;
34
+ private loginClientCredentials;
35
+ private loginJwtBearer;
36
+ private loginTokenExchange;
37
+ /**
38
+ * Shared driver for jwt_bearer and token_exchange. Both grants:
39
+ * - resolve a platform-supplied JWT from `subjectTokenSource`
40
+ * - POST it to the token endpoint with grant-specific form fields
41
+ * - get back an access token (refresh token is NOT expected for either)
42
+ */
43
+ private postFederatedGrant;
44
+ /**
45
+ * Resolve endpoints for the configured flow. Skips OIDC discovery entirely
46
+ * when the explicit endpoints needed for the flow are all present in config
47
+ * — discovery is unavailable on RFC 8414-only servers and on Keycloak
48
+ * realms where the well-known doc is locked down.
49
+ */
50
+ private resolveEndpoints;
51
+ private hasExplicitEndpointsForFlow;
52
+ private refreshToken;
53
+ private loginDeviceCode;
54
+ private loginInteractive;
55
55
  }
56
56
  export {};