oc-codex-multi-auth 6.0.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.
- package/LICENSE +21 -0
- package/README.md +162 -0
- package/assets/opencode-logo-ornate-dark.svg +18 -0
- package/assets/readme-hero.svg +31 -0
- package/config/README.md +96 -0
- package/config/minimal-opencode.json +13 -0
- package/config/opencode-legacy.json +871 -0
- package/config/opencode-modern.json +358 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5008 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/accounts/rate-limits.d.ts +22 -0
- package/dist/lib/accounts/rate-limits.d.ts.map +1 -0
- package/dist/lib/accounts/rate-limits.js +63 -0
- package/dist/lib/accounts/rate-limits.js.map +1 -0
- package/dist/lib/accounts.d.ts +134 -0
- package/dist/lib/accounts.d.ts.map +1 -0
- package/dist/lib/accounts.js +795 -0
- package/dist/lib/accounts.js.map +1 -0
- package/dist/lib/audit.d.ts +45 -0
- package/dist/lib/audit.d.ts.map +1 -0
- package/dist/lib/audit.js +154 -0
- package/dist/lib/audit.js.map +1 -0
- package/dist/lib/auth/auth.d.ts +51 -0
- package/dist/lib/auth/auth.d.ts.map +1 -0
- package/dist/lib/auth/auth.js +191 -0
- package/dist/lib/auth/auth.js.map +1 -0
- package/dist/lib/auth/browser.d.ts +17 -0
- package/dist/lib/auth/browser.d.ts.map +1 -0
- package/dist/lib/auth/browser.js +90 -0
- package/dist/lib/auth/browser.js.map +1 -0
- package/dist/lib/auth/device-code.d.ts +28 -0
- package/dist/lib/auth/device-code.d.ts.map +1 -0
- package/dist/lib/auth/device-code.js +215 -0
- package/dist/lib/auth/device-code.js.map +1 -0
- package/dist/lib/auth/login-runner.d.ts +55 -0
- package/dist/lib/auth/login-runner.d.ts.map +1 -0
- package/dist/lib/auth/login-runner.js +631 -0
- package/dist/lib/auth/login-runner.js.map +1 -0
- package/dist/lib/auth/server.d.ts +10 -0
- package/dist/lib/auth/server.d.ts.map +1 -0
- package/dist/lib/auth/server.js +98 -0
- package/dist/lib/auth/server.js.map +1 -0
- package/dist/lib/auth/token-utils.d.ts +60 -0
- package/dist/lib/auth/token-utils.d.ts.map +1 -0
- package/dist/lib/auth/token-utils.js +416 -0
- package/dist/lib/auth/token-utils.js.map +1 -0
- package/dist/lib/auth-rate-limit.d.ts +20 -0
- package/dist/lib/auth-rate-limit.d.ts.map +1 -0
- package/dist/lib/auth-rate-limit.js +91 -0
- package/dist/lib/auth-rate-limit.js.map +1 -0
- package/dist/lib/auto-update-checker.d.ts +10 -0
- package/dist/lib/auto-update-checker.d.ts.map +1 -0
- package/dist/lib/auto-update-checker.js +129 -0
- package/dist/lib/auto-update-checker.js.map +1 -0
- package/dist/lib/circuit-breaker.d.ts +34 -0
- package/dist/lib/circuit-breaker.d.ts.map +1 -0
- package/dist/lib/circuit-breaker.js +124 -0
- package/dist/lib/circuit-breaker.js.map +1 -0
- package/dist/lib/cli.d.ts +46 -0
- package/dist/lib/cli.d.ts.map +1 -0
- package/dist/lib/cli.js +192 -0
- package/dist/lib/cli.js.map +1 -0
- package/dist/lib/config.d.ts +42 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +314 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/constants.d.ts +90 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +90 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/context-overflow.d.ts +27 -0
- package/dist/lib/context-overflow.d.ts.map +1 -0
- package/dist/lib/context-overflow.js +124 -0
- package/dist/lib/context-overflow.js.map +1 -0
- package/dist/lib/errors.d.ts +113 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +103 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/health.d.ts +33 -0
- package/dist/lib/health.d.ts.map +1 -0
- package/dist/lib/health.js +70 -0
- package/dist/lib/health.js.map +1 -0
- package/dist/lib/index.d.ts +20 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +20 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/logger.d.ts +40 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +337 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/oauth-success.html +712 -0
- package/dist/lib/parallel-probe.d.ts +28 -0
- package/dist/lib/parallel-probe.d.ts.map +1 -0
- package/dist/lib/parallel-probe.js +97 -0
- package/dist/lib/parallel-probe.js.map +1 -0
- package/dist/lib/proactive-refresh.d.ts +67 -0
- package/dist/lib/proactive-refresh.d.ts.map +1 -0
- package/dist/lib/proactive-refresh.js +161 -0
- package/dist/lib/proactive-refresh.js.map +1 -0
- package/dist/lib/prompts/codex-opencode-bridge.d.ts +20 -0
- package/dist/lib/prompts/codex-opencode-bridge.d.ts.map +1 -0
- package/dist/lib/prompts/codex-opencode-bridge.js +126 -0
- package/dist/lib/prompts/codex-opencode-bridge.js.map +1 -0
- package/dist/lib/prompts/codex.d.ts +41 -0
- package/dist/lib/prompts/codex.d.ts.map +1 -0
- package/dist/lib/prompts/codex.js +400 -0
- package/dist/lib/prompts/codex.js.map +1 -0
- package/dist/lib/prompts/opencode-codex.d.ts +25 -0
- package/dist/lib/prompts/opencode-codex.d.ts.map +1 -0
- package/dist/lib/prompts/opencode-codex.js +223 -0
- package/dist/lib/prompts/opencode-codex.js.map +1 -0
- package/dist/lib/recovery/constants.d.ts +12 -0
- package/dist/lib/recovery/constants.d.ts.map +1 -0
- package/dist/lib/recovery/constants.js +25 -0
- package/dist/lib/recovery/constants.js.map +1 -0
- package/dist/lib/recovery/index.d.ts +12 -0
- package/dist/lib/recovery/index.d.ts.map +1 -0
- package/dist/lib/recovery/index.js +12 -0
- package/dist/lib/recovery/index.js.map +1 -0
- package/dist/lib/recovery/storage.d.ts +24 -0
- package/dist/lib/recovery/storage.d.ts.map +1 -0
- package/dist/lib/recovery/storage.js +362 -0
- package/dist/lib/recovery/storage.js.map +1 -0
- package/dist/lib/recovery/types.d.ts +116 -0
- package/dist/lib/recovery/types.d.ts.map +1 -0
- package/dist/lib/recovery/types.js +7 -0
- package/dist/lib/recovery/types.js.map +1 -0
- package/dist/lib/recovery.d.ts +31 -0
- package/dist/lib/recovery.d.ts.map +1 -0
- package/dist/lib/recovery.js +313 -0
- package/dist/lib/recovery.js.map +1 -0
- package/dist/lib/refresh-queue.d.ts +131 -0
- package/dist/lib/refresh-queue.d.ts.map +1 -0
- package/dist/lib/refresh-queue.js +297 -0
- package/dist/lib/refresh-queue.js.map +1 -0
- package/dist/lib/request/fetch-helpers.d.ts +142 -0
- package/dist/lib/request/fetch-helpers.d.ts.map +1 -0
- package/dist/lib/request/fetch-helpers.js +749 -0
- package/dist/lib/request/fetch-helpers.js.map +1 -0
- package/dist/lib/request/helpers/input-utils.d.ts +7 -0
- package/dist/lib/request/helpers/input-utils.d.ts.map +1 -0
- package/dist/lib/request/helpers/input-utils.js +214 -0
- package/dist/lib/request/helpers/input-utils.js.map +1 -0
- package/dist/lib/request/helpers/model-map.d.ts +22 -0
- package/dist/lib/request/helpers/model-map.d.ts.map +1 -0
- package/dist/lib/request/helpers/model-map.js +183 -0
- package/dist/lib/request/helpers/model-map.js.map +1 -0
- package/dist/lib/request/helpers/tool-utils.d.ts +29 -0
- package/dist/lib/request/helpers/tool-utils.d.ts.map +1 -0
- package/dist/lib/request/helpers/tool-utils.js +117 -0
- package/dist/lib/request/helpers/tool-utils.js.map +1 -0
- package/dist/lib/request/rate-limit-backoff.d.ts +17 -0
- package/dist/lib/request/rate-limit-backoff.d.ts.map +1 -0
- package/dist/lib/request/rate-limit-backoff.js +83 -0
- package/dist/lib/request/rate-limit-backoff.js.map +1 -0
- package/dist/lib/request/request-transformer.d.ts +107 -0
- package/dist/lib/request/request-transformer.d.ts.map +1 -0
- package/dist/lib/request/request-transformer.js +930 -0
- package/dist/lib/request/request-transformer.js.map +1 -0
- package/dist/lib/request/response-handler.d.ts +23 -0
- package/dist/lib/request/response-handler.d.ts.map +1 -0
- package/dist/lib/request/response-handler.js +245 -0
- package/dist/lib/request/response-handler.js.map +1 -0
- package/dist/lib/request/retry-budget.d.ts +19 -0
- package/dist/lib/request/retry-budget.d.ts.map +1 -0
- package/dist/lib/request/retry-budget.js +99 -0
- package/dist/lib/request/retry-budget.js.map +1 -0
- package/dist/lib/rotation.d.ts +130 -0
- package/dist/lib/rotation.d.ts.map +1 -0
- package/dist/lib/rotation.js +301 -0
- package/dist/lib/rotation.js.map +1 -0
- package/dist/lib/runtime-contracts.d.ts +16 -0
- package/dist/lib/runtime-contracts.d.ts.map +1 -0
- package/dist/lib/runtime-contracts.js +24 -0
- package/dist/lib/runtime-contracts.js.map +1 -0
- package/dist/lib/schemas.d.ts +457 -0
- package/dist/lib/schemas.d.ts.map +1 -0
- package/dist/lib/schemas.js +283 -0
- package/dist/lib/schemas.js.map +1 -0
- package/dist/lib/shutdown.d.ts +7 -0
- package/dist/lib/shutdown.d.ts.map +1 -0
- package/dist/lib/shutdown.js +43 -0
- package/dist/lib/shutdown.js.map +1 -0
- package/dist/lib/storage/migrations.d.ts +65 -0
- package/dist/lib/storage/migrations.d.ts.map +1 -0
- package/dist/lib/storage/migrations.js +44 -0
- package/dist/lib/storage/migrations.js.map +1 -0
- package/dist/lib/storage/paths.d.ts +16 -0
- package/dist/lib/storage/paths.d.ts.map +1 -0
- package/dist/lib/storage/paths.js +92 -0
- package/dist/lib/storage/paths.js.map +1 -0
- package/dist/lib/storage.d.ts +157 -0
- package/dist/lib/storage.d.ts.map +1 -0
- package/dist/lib/storage.js +1169 -0
- package/dist/lib/storage.js.map +1 -0
- package/dist/lib/table-formatter.d.ts +32 -0
- package/dist/lib/table-formatter.d.ts.map +1 -0
- package/dist/lib/table-formatter.js +44 -0
- package/dist/lib/table-formatter.js.map +1 -0
- package/dist/lib/types.d.ts +131 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/ui/ansi.d.ts +22 -0
- package/dist/lib/ui/ansi.d.ts.map +1 -0
- package/dist/lib/ui/ansi.js +38 -0
- package/dist/lib/ui/ansi.js.map +1 -0
- package/dist/lib/ui/auth-menu.d.ts +39 -0
- package/dist/lib/ui/auth-menu.d.ts.map +1 -0
- package/dist/lib/ui/auth-menu.js +186 -0
- package/dist/lib/ui/auth-menu.js.map +1 -0
- package/dist/lib/ui/beginner.d.ts +62 -0
- package/dist/lib/ui/beginner.d.ts.map +1 -0
- package/dist/lib/ui/beginner.js +259 -0
- package/dist/lib/ui/beginner.js.map +1 -0
- package/dist/lib/ui/confirm.d.ts +2 -0
- package/dist/lib/ui/confirm.d.ts.map +1 -0
- package/dist/lib/ui/confirm.js +21 -0
- package/dist/lib/ui/confirm.js.map +1 -0
- package/dist/lib/ui/format.d.ts +9 -0
- package/dist/lib/ui/format.d.ts.map +1 -0
- package/dist/lib/ui/format.js +49 -0
- package/dist/lib/ui/format.js.map +1 -0
- package/dist/lib/ui/runtime.d.ts +11 -0
- package/dist/lib/ui/runtime.d.ts.map +1 -0
- package/dist/lib/ui/runtime.js +31 -0
- package/dist/lib/ui/runtime.js.map +1 -0
- package/dist/lib/ui/select.d.ts +20 -0
- package/dist/lib/ui/select.d.ts.map +1 -0
- package/dist/lib/ui/select.js +343 -0
- package/dist/lib/ui/select.js.map +1 -0
- package/dist/lib/ui/theme.d.ts +34 -0
- package/dist/lib/ui/theme.d.ts.map +1 -0
- package/dist/lib/ui/theme.js +84 -0
- package/dist/lib/ui/theme.js.map +1 -0
- package/dist/lib/utils.d.ts +29 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +54 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +113 -0
- package/scripts/audit-dev-allowlist.js +114 -0
- package/scripts/copy-oauth-success.js +37 -0
- package/scripts/install-oc-codex-multi-auth-core.js +381 -0
- package/scripts/install-oc-codex-multi-auth.js +15 -0
- package/scripts/test-all-models.sh +260 -0
- package/scripts/validate-model-map.sh +97 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../lib/auth/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { TokenResult } from "../types.js";
|
|
2
|
+
export interface DeviceCodeSession {
|
|
3
|
+
verificationUrl: string;
|
|
4
|
+
userCode: string;
|
|
5
|
+
deviceAuthId: string;
|
|
6
|
+
intervalSeconds: number;
|
|
7
|
+
}
|
|
8
|
+
type DeviceCodeReadyResult = {
|
|
9
|
+
type: "ready";
|
|
10
|
+
session: DeviceCodeSession;
|
|
11
|
+
};
|
|
12
|
+
type DeviceCodeFailureResult = {
|
|
13
|
+
type: "failed";
|
|
14
|
+
failure: Extract<TokenResult, {
|
|
15
|
+
type: "failed";
|
|
16
|
+
}>;
|
|
17
|
+
};
|
|
18
|
+
export declare function buildDeviceCodeInstructions(session: DeviceCodeSession): string;
|
|
19
|
+
export declare function createDeviceCodeSession(options?: {
|
|
20
|
+
authBaseUrl?: string;
|
|
21
|
+
clientId?: string;
|
|
22
|
+
}): Promise<DeviceCodeReadyResult | DeviceCodeFailureResult>;
|
|
23
|
+
export declare function completeDeviceCodeSession(session: DeviceCodeSession, options?: {
|
|
24
|
+
authBaseUrl?: string;
|
|
25
|
+
maxWaitMs?: number;
|
|
26
|
+
}): Promise<TokenResult>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=device-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-code.d.ts","sourceRoot":"","sources":["../../../lib/auth/device-code.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C,MAAM,WAAW,iBAAiB;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACxB;AAED,KAAK,qBAAqB,GAAG;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,iBAAiB,CAAC;CAC3B,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;CAClD,CAAC;AAoHF,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAM9E;AAED,wBAAsB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,qBAAqB,GAAG,uBAAuB,CAAC,CAsE3D;AAED,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE;IACT,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,GACC,OAAO,CAAC,WAAW,CAAC,CAuEtB"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { setTimeout as sleep } from "node:timers/promises";
|
|
2
|
+
import { logError } from "../logger.js";
|
|
3
|
+
import { AUTHORIZE_URL, CLIENT_ID, exchangeAuthorizationCode } from "./auth.js";
|
|
4
|
+
const DEFAULT_DEVICE_CODE_MAX_WAIT_MS = 15 * 60 * 1000;
|
|
5
|
+
const DEFAULT_DEVICE_CODE_INTERVAL_SECONDS = 5;
|
|
6
|
+
const DEVICE_CODE_LOG_BODY_LIMIT = 120;
|
|
7
|
+
function isRecord(value) {
|
|
8
|
+
return typeof value === "object" && value !== null;
|
|
9
|
+
}
|
|
10
|
+
function getAuthOrigin(authBaseUrl = AUTHORIZE_URL) {
|
|
11
|
+
return new URL(authBaseUrl).origin;
|
|
12
|
+
}
|
|
13
|
+
function getDeviceAuthApiBase(authBaseUrl) {
|
|
14
|
+
return `${getAuthOrigin(authBaseUrl)}/api/accounts/deviceauth`;
|
|
15
|
+
}
|
|
16
|
+
function getDeviceVerificationUrl(authBaseUrl) {
|
|
17
|
+
return `${getAuthOrigin(authBaseUrl)}/codex/device`;
|
|
18
|
+
}
|
|
19
|
+
function getDeviceRedirectUri(authBaseUrl) {
|
|
20
|
+
return `${getAuthOrigin(authBaseUrl)}/deviceauth/callback`;
|
|
21
|
+
}
|
|
22
|
+
function getErrorMessage(status, bodyText, fallback) {
|
|
23
|
+
const trimmed = bodyText.trim();
|
|
24
|
+
if (!trimmed) {
|
|
25
|
+
return fallback;
|
|
26
|
+
}
|
|
27
|
+
return `${fallback} (${status}): ${trimmed}`;
|
|
28
|
+
}
|
|
29
|
+
// Auth-server error bodies can echo identifiers like device_auth_id, so logs keep
|
|
30
|
+
// only a short prefix while the user-facing message still gets the full response.
|
|
31
|
+
function getRedactedErrorBody(bodyText) {
|
|
32
|
+
const trimmed = bodyText.trim();
|
|
33
|
+
if (!trimmed) {
|
|
34
|
+
return "<empty>";
|
|
35
|
+
}
|
|
36
|
+
if (trimmed.length <= DEVICE_CODE_LOG_BODY_LIMIT) {
|
|
37
|
+
return trimmed;
|
|
38
|
+
}
|
|
39
|
+
return `${trimmed.slice(0, DEVICE_CODE_LOG_BODY_LIMIT)}...`;
|
|
40
|
+
}
|
|
41
|
+
function parseIntervalSeconds(value) {
|
|
42
|
+
if (typeof value === "number" && Number.isFinite(value) && value > 0) {
|
|
43
|
+
return Math.max(1, Math.floor(value));
|
|
44
|
+
}
|
|
45
|
+
if (typeof value === "string") {
|
|
46
|
+
const parsed = Number.parseInt(value.trim(), 10);
|
|
47
|
+
if (Number.isFinite(parsed) && parsed > 0) {
|
|
48
|
+
return Math.max(1, parsed);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return DEFAULT_DEVICE_CODE_INTERVAL_SECONDS;
|
|
52
|
+
}
|
|
53
|
+
function parseDeviceCodeRequestResponse(raw) {
|
|
54
|
+
if (!isRecord(raw))
|
|
55
|
+
return null;
|
|
56
|
+
const deviceAuthId = typeof raw.device_auth_id === "string" && raw.device_auth_id.trim()
|
|
57
|
+
? raw.device_auth_id.trim()
|
|
58
|
+
: undefined;
|
|
59
|
+
const userCode = typeof raw.user_code === "string" && raw.user_code.trim()
|
|
60
|
+
? raw.user_code.trim()
|
|
61
|
+
: typeof raw.usercode === "string" && raw.usercode.trim()
|
|
62
|
+
? raw.usercode.trim()
|
|
63
|
+
: undefined;
|
|
64
|
+
if (!deviceAuthId || !userCode) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
deviceAuthId,
|
|
69
|
+
userCode,
|
|
70
|
+
intervalSeconds: parseIntervalSeconds(raw.interval),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function parseDeviceCodePollResponse(raw) {
|
|
74
|
+
if (!isRecord(raw))
|
|
75
|
+
return null;
|
|
76
|
+
const authorizationCode = typeof raw.authorization_code === "string" && raw.authorization_code.trim()
|
|
77
|
+
? raw.authorization_code.trim()
|
|
78
|
+
: undefined;
|
|
79
|
+
const codeVerifier = typeof raw.code_verifier === "string" && raw.code_verifier.trim()
|
|
80
|
+
? raw.code_verifier.trim()
|
|
81
|
+
: undefined;
|
|
82
|
+
if (!authorizationCode || !codeVerifier) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
authorizationCode,
|
|
87
|
+
codeVerifier,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export function buildDeviceCodeInstructions(session) {
|
|
91
|
+
return [
|
|
92
|
+
`Open this link and sign in: ${session.verificationUrl}`,
|
|
93
|
+
`Enter this one-time code: ${session.userCode}`,
|
|
94
|
+
"This code expires in about 15 minutes.",
|
|
95
|
+
].join("\n");
|
|
96
|
+
}
|
|
97
|
+
export async function createDeviceCodeSession(options) {
|
|
98
|
+
const authBaseUrl = options?.authBaseUrl ?? AUTHORIZE_URL;
|
|
99
|
+
const clientId = options?.clientId ?? CLIENT_ID;
|
|
100
|
+
try {
|
|
101
|
+
const response = await fetch(`${getDeviceAuthApiBase(authBaseUrl)}/usercode`, {
|
|
102
|
+
method: "POST",
|
|
103
|
+
headers: { "Content-Type": "application/json" },
|
|
104
|
+
body: JSON.stringify({ client_id: clientId }),
|
|
105
|
+
});
|
|
106
|
+
if (!response.ok) {
|
|
107
|
+
const bodyText = await response.text().catch(() => "");
|
|
108
|
+
const message = response.status === 404
|
|
109
|
+
? "Device code login is not enabled for this auth server. Retry with browser login or manual URL paste."
|
|
110
|
+
: getErrorMessage(response.status, bodyText, "Device code login could not be started");
|
|
111
|
+
logError(`device-code usercode request failed: ${response.status} ${getRedactedErrorBody(bodyText)}`);
|
|
112
|
+
return {
|
|
113
|
+
type: "failed",
|
|
114
|
+
failure: {
|
|
115
|
+
type: "failed",
|
|
116
|
+
reason: "http_error",
|
|
117
|
+
statusCode: response.status,
|
|
118
|
+
message,
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
const rawJson = (await response.json());
|
|
123
|
+
const parsed = parseDeviceCodeRequestResponse(rawJson);
|
|
124
|
+
if (!parsed) {
|
|
125
|
+
logError("device-code usercode response validation failed", rawJson);
|
|
126
|
+
return {
|
|
127
|
+
type: "failed",
|
|
128
|
+
failure: {
|
|
129
|
+
type: "failed",
|
|
130
|
+
reason: "invalid_response",
|
|
131
|
+
message: "Device code login returned an invalid response",
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
type: "ready",
|
|
137
|
+
session: {
|
|
138
|
+
verificationUrl: getDeviceVerificationUrl(authBaseUrl),
|
|
139
|
+
userCode: parsed.userCode,
|
|
140
|
+
deviceAuthId: parsed.deviceAuthId,
|
|
141
|
+
intervalSeconds: parsed.intervalSeconds,
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
const err = error;
|
|
147
|
+
logError("device-code usercode request error", err);
|
|
148
|
+
return {
|
|
149
|
+
type: "failed",
|
|
150
|
+
failure: {
|
|
151
|
+
type: "failed",
|
|
152
|
+
reason: "network_error",
|
|
153
|
+
message: err?.message,
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
export async function completeDeviceCodeSession(session, options) {
|
|
159
|
+
const authBaseUrl = options?.authBaseUrl ?? AUTHORIZE_URL;
|
|
160
|
+
const maxWaitMs = options?.maxWaitMs ?? DEFAULT_DEVICE_CODE_MAX_WAIT_MS;
|
|
161
|
+
const pollUrl = `${getDeviceAuthApiBase(authBaseUrl)}/token`;
|
|
162
|
+
const startedAt = Date.now();
|
|
163
|
+
try {
|
|
164
|
+
while (Date.now() - startedAt < maxWaitMs) {
|
|
165
|
+
const response = await fetch(pollUrl, {
|
|
166
|
+
method: "POST",
|
|
167
|
+
headers: { "Content-Type": "application/json" },
|
|
168
|
+
body: JSON.stringify({
|
|
169
|
+
device_auth_id: session.deviceAuthId,
|
|
170
|
+
user_code: session.userCode,
|
|
171
|
+
}),
|
|
172
|
+
});
|
|
173
|
+
if (response.ok) {
|
|
174
|
+
const rawJson = (await response.json());
|
|
175
|
+
const parsed = parseDeviceCodePollResponse(rawJson);
|
|
176
|
+
if (!parsed) {
|
|
177
|
+
logError("device-code token poll response validation failed", rawJson);
|
|
178
|
+
return {
|
|
179
|
+
type: "failed",
|
|
180
|
+
reason: "invalid_response",
|
|
181
|
+
message: "Device code login returned an invalid authorization payload",
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
return await exchangeAuthorizationCode(parsed.authorizationCode, parsed.codeVerifier, getDeviceRedirectUri(authBaseUrl));
|
|
185
|
+
}
|
|
186
|
+
if (response.status === 403 || response.status === 404) {
|
|
187
|
+
await sleep(session.intervalSeconds * 1000);
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
const bodyText = await response.text().catch(() => "");
|
|
191
|
+
logError(`device-code token poll failed: ${response.status} ${getRedactedErrorBody(bodyText)}`);
|
|
192
|
+
return {
|
|
193
|
+
type: "failed",
|
|
194
|
+
reason: "http_error",
|
|
195
|
+
statusCode: response.status,
|
|
196
|
+
message: getErrorMessage(response.status, bodyText, "Device code authorization failed"),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
type: "failed",
|
|
201
|
+
reason: "unknown",
|
|
202
|
+
message: "Device code authorization timed out after 15 minutes",
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
const err = error;
|
|
207
|
+
logError("device-code token poll error", err);
|
|
208
|
+
return {
|
|
209
|
+
type: "failed",
|
|
210
|
+
reason: "network_error",
|
|
211
|
+
message: err?.message,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=device-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-code.js","sourceRoot":"","sources":["../../../lib/auth/device-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { AccountIdSource, TokenResult } from "../types.js";
|
|
2
|
+
type TokenSuccess = Extract<TokenResult, {
|
|
3
|
+
type: "success";
|
|
4
|
+
}>;
|
|
5
|
+
export type TokenSuccessWithAccount = TokenSuccess & {
|
|
6
|
+
accountIdOverride?: string;
|
|
7
|
+
organizationIdOverride?: string;
|
|
8
|
+
accountIdSource?: AccountIdSource;
|
|
9
|
+
accountLabel?: string;
|
|
10
|
+
};
|
|
11
|
+
export type AccountSelectionResult = {
|
|
12
|
+
primary: TokenSuccessWithAccount;
|
|
13
|
+
variantsForPersistence: TokenSuccessWithAccount[];
|
|
14
|
+
};
|
|
15
|
+
export type PersistAccountSelections = (results: TokenSuccessWithAccount[], replaceAll: boolean) => Promise<void>;
|
|
16
|
+
export type AccountSelectionFallbacks = Pick<TokenSuccessWithAccount, "accountIdOverride" | "accountIdSource" | "organizationIdOverride" | "accountLabel">;
|
|
17
|
+
export declare function resolveAccountSelection(tokens: TokenSuccess): AccountSelectionResult;
|
|
18
|
+
export declare function applyAccountSelectionFallbacks(selection: AccountSelectionResult, fallbacks: AccountSelectionFallbacks): AccountSelectionResult;
|
|
19
|
+
/**
|
|
20
|
+
* Persists the already-resolved selection through the caller's
|
|
21
|
+
* `persistSelections` callback. Windows filesystem safety remains delegated to
|
|
22
|
+
* that callback, so callers should use `persistAccountPool` or
|
|
23
|
+
* `withAccountStorageTransaction` to keep the rename retry and serialized
|
|
24
|
+
* read-modify-write behavior covered by `test/login-runner.test.ts`.
|
|
25
|
+
* Callback failures are rethrown with a redacted message so callers can log the
|
|
26
|
+
* wrapper safely without leaking token-file paths or account identifiers.
|
|
27
|
+
*/
|
|
28
|
+
export declare function persistResolvedAccountSelection(selection: AccountSelectionResult, options?: {
|
|
29
|
+
persistSelections?: PersistAccountSelections;
|
|
30
|
+
replaceAll?: boolean;
|
|
31
|
+
}): Promise<AccountSelectionResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Finalizes a resolved selection by delegating persistence to the caller's
|
|
34
|
+
* `persistSelections` callback. Windows lock-retry and read-modify-write
|
|
35
|
+
* serialization remain the callback's responsibility, so callers should route
|
|
36
|
+
* through `persistAccountPool` or `withAccountStorageTransaction` to preserve
|
|
37
|
+
* the guarantees covered by `test/login-runner.test.ts`.
|
|
38
|
+
* Persistence callback failures are redacted inside
|
|
39
|
+
* `persistResolvedAccountSelection()` before they propagate back to callers.
|
|
40
|
+
*/
|
|
41
|
+
export declare function resolveAndPersistAccountSelection(tokens: TokenSuccess, options?: {
|
|
42
|
+
fallbacks?: AccountSelectionFallbacks;
|
|
43
|
+
persistSelections?: PersistAccountSelections;
|
|
44
|
+
replaceAll?: boolean;
|
|
45
|
+
}): Promise<AccountSelectionResult>;
|
|
46
|
+
/**
|
|
47
|
+
* Persists login results through the shared storage transaction so overlapping
|
|
48
|
+
* login retries serialize their read-modify-write cycle instead of racing stale
|
|
49
|
+
* snapshots. `withAccountStorageTransaction` also routes the final rename
|
|
50
|
+
* through the Windows lock retry path in `lib/storage.ts`; see
|
|
51
|
+
* `test/login-runner.test.ts` for the concurrent persist regression coverage.
|
|
52
|
+
*/
|
|
53
|
+
export declare function persistAccountPool(results: TokenSuccessWithAccount[], replaceAll?: boolean): Promise<void>;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=login-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-runner.d.ts","sourceRoot":"","sources":["../../../lib/auth/login-runner.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEhE,KAAK,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAE9D,MAAM,MAAM,uBAAuB,GAAG,YAAY,GAAG;IACpD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACpC,OAAO,EAAE,uBAAuB,CAAC;IACjC,sBAAsB,EAAE,uBAAuB,EAAE,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CACtC,OAAO,EAAE,uBAAuB,EAAE,EAClC,UAAU,EAAE,OAAO,KACf,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAC3C,uBAAuB,EACvB,mBAAmB,GAAG,iBAAiB,GAAG,wBAAwB,GAAG,cAAc,CACnF,CAAC;AAqBF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,YAAY,GAAG,sBAAsB,CA8DpF;AAED,wBAAgB,8BAA8B,CAC7C,SAAS,EAAE,sBAAsB,EACjC,SAAS,EAAE,yBAAyB,GAClC,sBAAsB,CAsCxB;AAED;;;;;;;;GAQG;AACH,wBAAsB,+BAA+B,CACpD,SAAS,EAAE,sBAAsB,EACjC,OAAO,CAAC,EAAE;IACT,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB,GACC,OAAO,CAAC,sBAAsB,CAAC,CAgBjC;AAED;;;;;;;;GAQG;AACH,wBAAsB,iCAAiC,CACtD,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE;IACT,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB,GACC,OAAO,CAAC,sBAAsB,CAAC,CAMjC;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACvC,OAAO,EAAE,uBAAuB,EAAE,EAClC,UAAU,GAAE,OAAe,GACzB,OAAO,CAAC,IAAI,CAAC,CAskBf"}
|