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":"token-utils.js","sourceRoot":"","sources":["../../../lib/auth/token-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface AuthRateLimitConfig {
|
|
2
|
+
maxAttempts: number;
|
|
3
|
+
windowMs: number;
|
|
4
|
+
}
|
|
5
|
+
export declare function configureAuthRateLimit(newConfig: Partial<AuthRateLimitConfig>): void;
|
|
6
|
+
export declare function getAuthRateLimitConfig(): AuthRateLimitConfig;
|
|
7
|
+
export declare function canAttemptAuth(accountId: string): boolean;
|
|
8
|
+
export declare function recordAuthAttempt(accountId: string): void;
|
|
9
|
+
export declare function getAttemptsRemaining(accountId: string): number;
|
|
10
|
+
export declare function getTimeUntilReset(accountId: string): number;
|
|
11
|
+
export declare function resetAuthRateLimit(accountId: string): void;
|
|
12
|
+
export declare function resetAllAuthRateLimits(): void;
|
|
13
|
+
export declare class AuthRateLimitError extends Error {
|
|
14
|
+
readonly accountId: string;
|
|
15
|
+
readonly attemptsRemaining: number;
|
|
16
|
+
readonly resetAfterMs: number;
|
|
17
|
+
constructor(accountId: string, attemptsRemaining: number, resetAfterMs: number);
|
|
18
|
+
}
|
|
19
|
+
export declare function checkAuthRateLimit(accountId: string): void;
|
|
20
|
+
//# sourceMappingURL=auth-rate-limit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-rate-limit.d.ts","sourceRoot":"","sources":["../../lib/auth-rate-limit.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAcD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAEpF;AAED,wBAAgB,sBAAsB,IAAI,mBAAmB,CAE5D;AAWD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAYzD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAYzD;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAY9D;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAmB3D;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAG1D;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED,qBAAa,kBAAmB,SAAQ,KAAK;aAE3B,SAAS,EAAE,MAAM;aACjB,iBAAiB,EAAE,MAAM;aACzB,YAAY,EAAE,MAAM;gBAFpB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,MAAM;CAMrC;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAQ1D"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
const DEFAULT_CONFIG = {
|
|
2
|
+
maxAttempts: 5,
|
|
3
|
+
windowMs: 60_000,
|
|
4
|
+
};
|
|
5
|
+
const attemptsByAccount = new Map();
|
|
6
|
+
let config = { ...DEFAULT_CONFIG };
|
|
7
|
+
export function configureAuthRateLimit(newConfig) {
|
|
8
|
+
config = { ...config, ...newConfig };
|
|
9
|
+
}
|
|
10
|
+
export function getAuthRateLimitConfig() {
|
|
11
|
+
return { ...config };
|
|
12
|
+
}
|
|
13
|
+
function getAccountKey(accountId) {
|
|
14
|
+
return accountId.toLowerCase().trim();
|
|
15
|
+
}
|
|
16
|
+
function pruneOldAttempts(record, now) {
|
|
17
|
+
const cutoff = now - config.windowMs;
|
|
18
|
+
record.timestamps = record.timestamps.filter((ts) => ts > cutoff);
|
|
19
|
+
}
|
|
20
|
+
export function canAttemptAuth(accountId) {
|
|
21
|
+
const key = getAccountKey(accountId);
|
|
22
|
+
const record = attemptsByAccount.get(key);
|
|
23
|
+
if (!record) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
const now = Date.now();
|
|
27
|
+
pruneOldAttempts(record, now);
|
|
28
|
+
return record.timestamps.length < config.maxAttempts;
|
|
29
|
+
}
|
|
30
|
+
export function recordAuthAttempt(accountId) {
|
|
31
|
+
const key = getAccountKey(accountId);
|
|
32
|
+
const now = Date.now();
|
|
33
|
+
let record = attemptsByAccount.get(key);
|
|
34
|
+
if (!record) {
|
|
35
|
+
record = { timestamps: [] };
|
|
36
|
+
attemptsByAccount.set(key, record);
|
|
37
|
+
}
|
|
38
|
+
pruneOldAttempts(record, now);
|
|
39
|
+
record.timestamps.push(now);
|
|
40
|
+
}
|
|
41
|
+
export function getAttemptsRemaining(accountId) {
|
|
42
|
+
const key = getAccountKey(accountId);
|
|
43
|
+
const record = attemptsByAccount.get(key);
|
|
44
|
+
if (!record) {
|
|
45
|
+
return config.maxAttempts;
|
|
46
|
+
}
|
|
47
|
+
const now = Date.now();
|
|
48
|
+
pruneOldAttempts(record, now);
|
|
49
|
+
return Math.max(0, config.maxAttempts - record.timestamps.length);
|
|
50
|
+
}
|
|
51
|
+
export function getTimeUntilReset(accountId) {
|
|
52
|
+
const key = getAccountKey(accountId);
|
|
53
|
+
const record = attemptsByAccount.get(key);
|
|
54
|
+
if (!record || record.timestamps.length === 0) {
|
|
55
|
+
return 0;
|
|
56
|
+
}
|
|
57
|
+
const now = Date.now();
|
|
58
|
+
pruneOldAttempts(record, now);
|
|
59
|
+
if (record.timestamps.length === 0) {
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
const oldestAttempt = Math.min(...record.timestamps);
|
|
63
|
+
const resetTime = oldestAttempt + config.windowMs;
|
|
64
|
+
return Math.max(0, resetTime - now);
|
|
65
|
+
}
|
|
66
|
+
export function resetAuthRateLimit(accountId) {
|
|
67
|
+
const key = getAccountKey(accountId);
|
|
68
|
+
attemptsByAccount.delete(key);
|
|
69
|
+
}
|
|
70
|
+
export function resetAllAuthRateLimits() {
|
|
71
|
+
attemptsByAccount.clear();
|
|
72
|
+
}
|
|
73
|
+
export class AuthRateLimitError extends Error {
|
|
74
|
+
accountId;
|
|
75
|
+
attemptsRemaining;
|
|
76
|
+
resetAfterMs;
|
|
77
|
+
constructor(accountId, attemptsRemaining, resetAfterMs) {
|
|
78
|
+
const resetSeconds = Math.ceil(resetAfterMs / 1000);
|
|
79
|
+
super(`Auth rate limit exceeded for account. Retry after ${resetSeconds}s`);
|
|
80
|
+
this.accountId = accountId;
|
|
81
|
+
this.attemptsRemaining = attemptsRemaining;
|
|
82
|
+
this.resetAfterMs = resetAfterMs;
|
|
83
|
+
this.name = "AuthRateLimitError";
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export function checkAuthRateLimit(accountId) {
|
|
87
|
+
if (!canAttemptAuth(accountId)) {
|
|
88
|
+
throw new AuthRateLimitError(accountId, getAttemptsRemaining(accountId), getTimeUntilReset(accountId));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=auth-rate-limit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-rate-limit.js","sourceRoot":"","sources":["../../lib/auth-rate-limit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface UpdateCheckResult {
|
|
2
|
+
hasUpdate: boolean;
|
|
3
|
+
currentVersion: string;
|
|
4
|
+
latestVersion: string | null;
|
|
5
|
+
updateCommand: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function checkForUpdates(force?: boolean): Promise<UpdateCheckResult>;
|
|
8
|
+
export declare function checkAndNotify(showToast?: (message: string, variant: "info" | "warning") => Promise<void>): Promise<void>;
|
|
9
|
+
export declare function clearUpdateCache(): void;
|
|
10
|
+
//# sourceMappingURL=auto-update-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-update-checker.d.ts","sourceRoot":"","sources":["../../lib/auto-update-checker.ts"],"names":[],"mappings":"AA6FA,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,eAAe,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA+B/E;AAED,wBAAsB,cAAc,CAClC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,GAC1E,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAQvC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { createLogger } from "./logger.js";
|
|
5
|
+
const log = createLogger("update-checker");
|
|
6
|
+
const PACKAGE_NAME = "oc-codex-multi-auth";
|
|
7
|
+
const NPM_REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}/latest`;
|
|
8
|
+
const CACHE_DIR = join(homedir(), ".opencode", "cache");
|
|
9
|
+
const CACHE_FILE = join(CACHE_DIR, "update-check-cache.json");
|
|
10
|
+
const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
11
|
+
function getCurrentVersion() {
|
|
12
|
+
try {
|
|
13
|
+
const packageJsonPath = join(import.meta.dirname ?? __dirname, "..", "package.json");
|
|
14
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
|
|
15
|
+
return packageJson.version;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return "0.0.0";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function loadCache() {
|
|
22
|
+
try {
|
|
23
|
+
if (!existsSync(CACHE_FILE))
|
|
24
|
+
return null;
|
|
25
|
+
const content = readFileSync(CACHE_FILE, "utf8");
|
|
26
|
+
return JSON.parse(content);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function saveCache(cache) {
|
|
33
|
+
try {
|
|
34
|
+
if (!existsSync(CACHE_DIR)) {
|
|
35
|
+
mkdirSync(CACHE_DIR, { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2), "utf8");
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
log.warn("Failed to save update cache", { error: error.message });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function compareVersions(current, latest) {
|
|
44
|
+
const currentParts = current.split(".").map((p) => parseInt(p, 10) || 0);
|
|
45
|
+
const latestParts = latest.split(".").map((p) => parseInt(p, 10) || 0);
|
|
46
|
+
for (let i = 0; i < Math.max(currentParts.length, latestParts.length); i++) {
|
|
47
|
+
const c = currentParts[i] ?? 0;
|
|
48
|
+
const l = latestParts[i] ?? 0;
|
|
49
|
+
if (l > c)
|
|
50
|
+
return 1;
|
|
51
|
+
if (l < c)
|
|
52
|
+
return -1;
|
|
53
|
+
}
|
|
54
|
+
return 0;
|
|
55
|
+
}
|
|
56
|
+
async function fetchLatestVersion() {
|
|
57
|
+
try {
|
|
58
|
+
const controller = new AbortController();
|
|
59
|
+
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
60
|
+
const response = await fetch(NPM_REGISTRY_URL, {
|
|
61
|
+
signal: controller.signal,
|
|
62
|
+
headers: { Accept: "application/json" },
|
|
63
|
+
});
|
|
64
|
+
clearTimeout(timeout);
|
|
65
|
+
if (!response.ok) {
|
|
66
|
+
log.debug("Failed to fetch npm registry", { status: response.status });
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
const data = (await response.json());
|
|
70
|
+
return data.version ?? null;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
log.debug("Failed to check for updates", { error: error.message });
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export async function checkForUpdates(force = false) {
|
|
78
|
+
const currentVersion = getCurrentVersion();
|
|
79
|
+
const cache = loadCache();
|
|
80
|
+
const now = Date.now();
|
|
81
|
+
if (!force && cache && now - cache.lastCheck < CHECK_INTERVAL_MS) {
|
|
82
|
+
const hasUpdate = cache.latestVersion ? compareVersions(currentVersion, cache.latestVersion) > 0 : false;
|
|
83
|
+
return {
|
|
84
|
+
hasUpdate,
|
|
85
|
+
currentVersion,
|
|
86
|
+
latestVersion: cache.latestVersion,
|
|
87
|
+
updateCommand: `npm update -g ${PACKAGE_NAME}`,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const latestVersion = await fetchLatestVersion();
|
|
91
|
+
saveCache({
|
|
92
|
+
lastCheck: now,
|
|
93
|
+
latestVersion,
|
|
94
|
+
currentVersion,
|
|
95
|
+
});
|
|
96
|
+
const hasUpdate = latestVersion ? compareVersions(currentVersion, latestVersion) > 0 : false;
|
|
97
|
+
return {
|
|
98
|
+
hasUpdate,
|
|
99
|
+
currentVersion,
|
|
100
|
+
latestVersion,
|
|
101
|
+
updateCommand: `npm update -g ${PACKAGE_NAME}`,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
export async function checkAndNotify(showToast) {
|
|
105
|
+
try {
|
|
106
|
+
const result = await checkForUpdates();
|
|
107
|
+
if (result.hasUpdate && result.latestVersion) {
|
|
108
|
+
const message = `Update available: ${PACKAGE_NAME} v${result.latestVersion} (current: v${result.currentVersion})`;
|
|
109
|
+
log.info(message);
|
|
110
|
+
if (showToast) {
|
|
111
|
+
await showToast(`Plugin update available: v${result.latestVersion}. Run: ${result.updateCommand}`, "info");
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
log.debug("Update check failed", { error: error.message });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export function clearUpdateCache() {
|
|
120
|
+
try {
|
|
121
|
+
if (existsSync(CACHE_FILE)) {
|
|
122
|
+
writeFileSync(CACHE_FILE, "{}", "utf8");
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
// Ignore errors
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=auto-update-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-update-checker.js","sourceRoot":"","sources":["../../lib/auto-update-checker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface CircuitBreakerConfig {
|
|
2
|
+
failureThreshold: number;
|
|
3
|
+
failureWindowMs: number;
|
|
4
|
+
resetTimeoutMs: number;
|
|
5
|
+
halfOpenMaxAttempts: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const DEFAULT_CIRCUIT_BREAKER_CONFIG: CircuitBreakerConfig;
|
|
8
|
+
export type CircuitState = "closed" | "open" | "half-open";
|
|
9
|
+
export declare class CircuitOpenError extends Error {
|
|
10
|
+
constructor(message?: string);
|
|
11
|
+
}
|
|
12
|
+
export declare class CircuitBreaker {
|
|
13
|
+
private state;
|
|
14
|
+
private failures;
|
|
15
|
+
private lastStateChange;
|
|
16
|
+
private halfOpenAttempts;
|
|
17
|
+
private config;
|
|
18
|
+
constructor(config?: Partial<CircuitBreakerConfig>);
|
|
19
|
+
canExecute(): boolean;
|
|
20
|
+
recordSuccess(): void;
|
|
21
|
+
recordFailure(): void;
|
|
22
|
+
getState(): CircuitState;
|
|
23
|
+
reset(): void;
|
|
24
|
+
getFailureCount(): number;
|
|
25
|
+
getTimeUntilReset(): number;
|
|
26
|
+
private pruneFailures;
|
|
27
|
+
private transitionToOpen;
|
|
28
|
+
private transitionToHalfOpen;
|
|
29
|
+
private resetToClosed;
|
|
30
|
+
}
|
|
31
|
+
export declare function getCircuitBreaker(key: string, config?: Partial<CircuitBreakerConfig>): CircuitBreaker;
|
|
32
|
+
export declare function resetAllCircuitBreakers(): void;
|
|
33
|
+
export declare function clearCircuitBreakers(): void;
|
|
34
|
+
//# sourceMappingURL=circuit-breaker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../lib/circuit-breaker.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,8BAA8B,EAAE,oBAK5C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,qBAAa,gBAAiB,SAAQ,KAAK;gBAC9B,OAAO,SAAoB;CAIvC;AAED,qBAAa,cAAc;IAC1B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAItD,UAAU,IAAI,OAAO;IAsBrB,aAAa,IAAI,IAAI;IAYrB,aAAa,IAAI,IAAI;IAerB,QAAQ,IAAI,YAAY;IAIxB,KAAK,IAAI,IAAI;IAIb,eAAe,IAAI,MAAM;IAKzB,iBAAiB,IAAI,MAAM;IAM3B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,aAAa;CAMrB;AAKD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,cAAc,CAYrG;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAI9C;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
export const DEFAULT_CIRCUIT_BREAKER_CONFIG = {
|
|
2
|
+
failureThreshold: 3,
|
|
3
|
+
failureWindowMs: 60_000,
|
|
4
|
+
resetTimeoutMs: 30_000,
|
|
5
|
+
halfOpenMaxAttempts: 1,
|
|
6
|
+
};
|
|
7
|
+
export class CircuitOpenError extends Error {
|
|
8
|
+
constructor(message = "Circuit is open") {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = "CircuitOpenError";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class CircuitBreaker {
|
|
14
|
+
state = "closed";
|
|
15
|
+
failures = [];
|
|
16
|
+
lastStateChange = Date.now();
|
|
17
|
+
halfOpenAttempts = 0;
|
|
18
|
+
config;
|
|
19
|
+
constructor(config = {}) {
|
|
20
|
+
this.config = { ...DEFAULT_CIRCUIT_BREAKER_CONFIG, ...config };
|
|
21
|
+
}
|
|
22
|
+
canExecute() {
|
|
23
|
+
const now = Date.now();
|
|
24
|
+
if (this.state === "open") {
|
|
25
|
+
if (now - this.lastStateChange >= this.config.resetTimeoutMs) {
|
|
26
|
+
this.transitionToHalfOpen(now);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
throw new CircuitOpenError();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (this.state === "half-open") {
|
|
33
|
+
if (this.halfOpenAttempts >= this.config.halfOpenMaxAttempts) {
|
|
34
|
+
throw new CircuitOpenError("Circuit is half-open");
|
|
35
|
+
}
|
|
36
|
+
this.halfOpenAttempts += 1;
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
recordSuccess() {
|
|
42
|
+
const now = Date.now();
|
|
43
|
+
if (this.state === "half-open") {
|
|
44
|
+
this.resetToClosed(now);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (this.state === "closed") {
|
|
48
|
+
this.pruneFailures(now);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
recordFailure() {
|
|
52
|
+
const now = Date.now();
|
|
53
|
+
this.pruneFailures(now);
|
|
54
|
+
this.failures.push(now);
|
|
55
|
+
if (this.state === "half-open") {
|
|
56
|
+
this.transitionToOpen(now);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (this.state === "closed" && this.failures.length >= this.config.failureThreshold) {
|
|
60
|
+
this.transitionToOpen(now);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
getState() {
|
|
64
|
+
return this.state;
|
|
65
|
+
}
|
|
66
|
+
reset() {
|
|
67
|
+
this.resetToClosed(Date.now());
|
|
68
|
+
}
|
|
69
|
+
getFailureCount() {
|
|
70
|
+
this.pruneFailures(Date.now());
|
|
71
|
+
return this.failures.length;
|
|
72
|
+
}
|
|
73
|
+
getTimeUntilReset() {
|
|
74
|
+
if (this.state !== "open")
|
|
75
|
+
return 0;
|
|
76
|
+
const elapsed = Date.now() - this.lastStateChange;
|
|
77
|
+
return Math.max(0, this.config.resetTimeoutMs - elapsed);
|
|
78
|
+
}
|
|
79
|
+
pruneFailures(now) {
|
|
80
|
+
const cutoff = now - this.config.failureWindowMs;
|
|
81
|
+
this.failures = this.failures.filter((timestamp) => timestamp >= cutoff);
|
|
82
|
+
}
|
|
83
|
+
transitionToOpen(now) {
|
|
84
|
+
this.state = "open";
|
|
85
|
+
this.lastStateChange = now;
|
|
86
|
+
this.halfOpenAttempts = 0;
|
|
87
|
+
}
|
|
88
|
+
transitionToHalfOpen(now) {
|
|
89
|
+
this.state = "half-open";
|
|
90
|
+
this.lastStateChange = now;
|
|
91
|
+
this.halfOpenAttempts = 0;
|
|
92
|
+
}
|
|
93
|
+
resetToClosed(now) {
|
|
94
|
+
this.state = "closed";
|
|
95
|
+
this.lastStateChange = now;
|
|
96
|
+
this.halfOpenAttempts = 0;
|
|
97
|
+
this.failures = [];
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const MAX_CIRCUIT_BREAKERS = 100;
|
|
101
|
+
const circuitBreakers = new Map();
|
|
102
|
+
export function getCircuitBreaker(key, config) {
|
|
103
|
+
let breaker = circuitBreakers.get(key);
|
|
104
|
+
if (!breaker) {
|
|
105
|
+
if (circuitBreakers.size >= MAX_CIRCUIT_BREAKERS) {
|
|
106
|
+
const firstKey = circuitBreakers.keys().next().value;
|
|
107
|
+
// istanbul ignore next -- defensive: firstKey always exists when size >= MAX_CIRCUIT_BREAKERS
|
|
108
|
+
if (firstKey)
|
|
109
|
+
circuitBreakers.delete(firstKey);
|
|
110
|
+
}
|
|
111
|
+
breaker = new CircuitBreaker(config);
|
|
112
|
+
circuitBreakers.set(key, breaker);
|
|
113
|
+
}
|
|
114
|
+
return breaker;
|
|
115
|
+
}
|
|
116
|
+
export function resetAllCircuitBreakers() {
|
|
117
|
+
for (const breaker of circuitBreakers.values()) {
|
|
118
|
+
breaker.reset();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export function clearCircuitBreakers() {
|
|
122
|
+
circuitBreakers.clear();
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=circuit-breaker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../lib/circuit-breaker.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,8BAA8B,GAAyB;IACnE,gBAAgB,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM;IACvB,cAAc,EAAE,MAAM;IACtB,mBAAmB,EAAE,CAAC;CACtB,CAAC;AAIF,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAC1C,YAAY,OAAO,GAAG,iBAAiB;QACtC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IAChC,CAAC;CACD;AAED,MAAM,OAAO,cAAc;IAClB,KAAK,GAAiB,QAAQ,CAAC;IAC/B,QAAQ,GAAa,EAAE,CAAC;IACxB,eAAe,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;IACrC,gBAAgB,GAAW,CAAC,CAAC;IAC7B,MAAM,CAAuB;IAErC,YAAY,SAAwC,EAAE;QACrD,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,8BAA8B,EAAE,GAAG,MAAM,EAAE,CAAC;IAChE,CAAC;IAED,UAAU;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC3B,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC9D,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACP,MAAM,IAAI,gBAAgB,EAAE,CAAC;YAC9B,CAAC;QACF,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAChC,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAC9D,MAAM,IAAI,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED,aAAa;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO;QACR,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACF,CAAC;IAED,aAAa;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAExB,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO;QACR,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACrF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,eAAe;QACd,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,iBAAiB;QAChB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;QAClD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,CAAC;IAC1D,CAAC;IAEO,aAAa,CAAC,GAAW;QAChC,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;IAC1E,CAAC;IAEO,gBAAgB,CAAC,GAAW;QACnC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACpB,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC3B,CAAC;IAEO,oBAAoB,CAAC,GAAW;QACvC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC3B,CAAC;IAEO,aAAa,CAAC,GAAW;QAChC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACpB,CAAC;CACD;AAED,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,eAAe,GAAG,IAAI,GAAG,EAA0B,CAAC;AAE1D,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,MAAsC;IACpF,IAAI,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,IAAI,eAAe,CAAC,IAAI,IAAI,oBAAoB,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACrD,8FAA8F;YAC9F,IAAI,QAAQ;gBAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QACrC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,uBAAuB;IACtC,KAAK,MAAM,OAAO,IAAI,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;QAChD,OAAO,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,oBAAoB;IACnC,eAAe,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { AccountIdSource } from "./types.js";
|
|
2
|
+
import { isTTY, type AccountStatus } from "./ui/auth-menu.js";
|
|
3
|
+
/**
|
|
4
|
+
* Detect if running in OpenCode Desktop/TUI mode where readline prompts don't work.
|
|
5
|
+
* In TUI mode, stdin/stdout are controlled by the TUI renderer, so readline breaks.
|
|
6
|
+
* Exported for testing purposes.
|
|
7
|
+
*/
|
|
8
|
+
export declare function isNonInteractiveMode(): boolean;
|
|
9
|
+
export declare function promptAddAnotherAccount(currentCount: number): Promise<boolean>;
|
|
10
|
+
export type LoginMode = "add" | "fresh" | "manage" | "check" | "deep-check" | "verify-flagged" | "cancel";
|
|
11
|
+
export interface ExistingAccountInfo {
|
|
12
|
+
accountId?: string;
|
|
13
|
+
accountLabel?: string;
|
|
14
|
+
email?: string;
|
|
15
|
+
index: number;
|
|
16
|
+
addedAt?: number;
|
|
17
|
+
lastUsed?: number;
|
|
18
|
+
status?: AccountStatus;
|
|
19
|
+
isCurrentAccount?: boolean;
|
|
20
|
+
enabled?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface LoginMenuOptions {
|
|
23
|
+
flaggedCount?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface LoginMenuResult {
|
|
26
|
+
mode: LoginMode;
|
|
27
|
+
deleteAccountIndex?: number;
|
|
28
|
+
refreshAccountIndex?: number;
|
|
29
|
+
toggleAccountIndex?: number;
|
|
30
|
+
deleteAll?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export declare function promptLoginMode(existingAccounts: ExistingAccountInfo[], options?: LoginMenuOptions): Promise<LoginMenuResult>;
|
|
33
|
+
export interface AccountSelectionCandidate {
|
|
34
|
+
accountId: string;
|
|
35
|
+
label: string;
|
|
36
|
+
source?: AccountIdSource;
|
|
37
|
+
isDefault?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface AccountSelectionOptions {
|
|
40
|
+
defaultIndex?: number;
|
|
41
|
+
title?: string;
|
|
42
|
+
}
|
|
43
|
+
export declare function promptAccountSelection(candidates: AccountSelectionCandidate[], options?: AccountSelectionOptions): Promise<AccountSelectionCandidate | null>;
|
|
44
|
+
export { isTTY };
|
|
45
|
+
export type { AccountStatus };
|
|
46
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../lib/cli.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAGN,KAAK,EACL,KAAK,aAAa,EAClB,MAAM,mBAAmB,CAAC;AAE3B;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAQ9C;AAED,wBAAsB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcpF;AAED,MAAM,MAAM,SAAS,GAClB,KAAK,GACL,OAAO,GACP,QAAQ,GACR,OAAO,GACP,YAAY,GACZ,gBAAgB,GAChB,QAAQ,CAAC;AAEZ,MAAM,WAAW,mBAAmB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AA0DD,wBAAsB,eAAe,CACpC,gBAAgB,EAAE,mBAAmB,EAAE,EACvC,OAAO,GAAE,gBAAqB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAoD1B;AAED,MAAM,WAAW,yBAAyB;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,sBAAsB,CAC3C,UAAU,EAAE,yBAAyB,EAAE,EACvC,OAAO,GAAE,uBAA4B,GACnC,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAyC3C;AAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,YAAY,EAAE,aAAa,EAAE,CAAC"}
|