@itssimplereally/opencode-kimicode-auth 0.1.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 +22 -0
- package/README.md +87 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/src/constants.d.ts +69 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +207 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/kimi/oauth.d.ts +64 -0
- package/dist/src/kimi/oauth.d.ts.map +1 -0
- package/dist/src/kimi/oauth.js +130 -0
- package/dist/src/kimi/oauth.js.map +1 -0
- package/dist/src/plugin/accounts.d.ts +167 -0
- package/dist/src/plugin/accounts.d.ts.map +1 -0
- package/dist/src/plugin/accounts.js +843 -0
- package/dist/src/plugin/accounts.js.map +1 -0
- package/dist/src/plugin/auth.d.ts +13 -0
- package/dist/src/plugin/auth.d.ts.map +1 -0
- package/dist/src/plugin/auth.js +26 -0
- package/dist/src/plugin/auth.js.map +1 -0
- package/dist/src/plugin/cache.d.ts +14 -0
- package/dist/src/plugin/cache.d.ts.map +1 -0
- package/dist/src/plugin/cache.js +56 -0
- package/dist/src/plugin/cache.js.map +1 -0
- package/dist/src/plugin/cli.d.ts +21 -0
- package/dist/src/plugin/cli.d.ts.map +1 -0
- package/dist/src/plugin/cli.js +98 -0
- package/dist/src/plugin/cli.js.map +1 -0
- package/dist/src/plugin/config/index.d.ts +16 -0
- package/dist/src/plugin/config/index.d.ts.map +1 -0
- package/dist/src/plugin/config/index.js +16 -0
- package/dist/src/plugin/config/index.js.map +1 -0
- package/dist/src/plugin/config/loader.d.ts +36 -0
- package/dist/src/plugin/config/loader.d.ts.map +1 -0
- package/dist/src/plugin/config/loader.js +182 -0
- package/dist/src/plugin/config/loader.js.map +1 -0
- package/dist/src/plugin/config/models.d.ts +18 -0
- package/dist/src/plugin/config/models.d.ts.map +1 -0
- package/dist/src/plugin/config/models.js +26 -0
- package/dist/src/plugin/config/models.js.map +1 -0
- package/dist/src/plugin/config/schema.d.ts +107 -0
- package/dist/src/plugin/config/schema.d.ts.map +1 -0
- package/dist/src/plugin/config/schema.js +282 -0
- package/dist/src/plugin/config/schema.js.map +1 -0
- package/dist/src/plugin/config/updater.d.ts +55 -0
- package/dist/src/plugin/config/updater.d.ts.map +1 -0
- package/dist/src/plugin/config/updater.js +154 -0
- package/dist/src/plugin/config/updater.js.map +1 -0
- package/dist/src/plugin/debug.d.ts +92 -0
- package/dist/src/plugin/debug.d.ts.map +1 -0
- package/dist/src/plugin/debug.js +406 -0
- package/dist/src/plugin/debug.js.map +1 -0
- package/dist/src/plugin/errors.d.ts +28 -0
- package/dist/src/plugin/errors.d.ts.map +1 -0
- package/dist/src/plugin/errors.js +42 -0
- package/dist/src/plugin/errors.js.map +1 -0
- package/dist/src/plugin/fingerprint.d.ts +41 -0
- package/dist/src/plugin/fingerprint.d.ts.map +1 -0
- package/dist/src/plugin/fingerprint.js +94 -0
- package/dist/src/plugin/fingerprint.js.map +1 -0
- package/dist/src/plugin/logger.d.ts +54 -0
- package/dist/src/plugin/logger.d.ts.map +1 -0
- package/dist/src/plugin/logger.js +120 -0
- package/dist/src/plugin/logger.js.map +1 -0
- package/dist/src/plugin/recovery/constants.d.ts +26 -0
- package/dist/src/plugin/recovery/constants.d.ts.map +1 -0
- package/dist/src/plugin/recovery/constants.js +47 -0
- package/dist/src/plugin/recovery/constants.js.map +1 -0
- package/dist/src/plugin/recovery/index.d.ts +16 -0
- package/dist/src/plugin/recovery/index.d.ts.map +1 -0
- package/dist/src/plugin/recovery/index.js +16 -0
- package/dist/src/plugin/recovery/index.js.map +1 -0
- package/dist/src/plugin/recovery/storage.d.ts +24 -0
- package/dist/src/plugin/recovery/storage.d.ts.map +1 -0
- package/dist/src/plugin/recovery/storage.js +354 -0
- package/dist/src/plugin/recovery/storage.js.map +1 -0
- package/dist/src/plugin/recovery/types.d.ts +116 -0
- package/dist/src/plugin/recovery/types.d.ts.map +1 -0
- package/dist/src/plugin/recovery/types.js +6 -0
- package/dist/src/plugin/recovery/types.js.map +1 -0
- package/dist/src/plugin/recovery.d.ts +63 -0
- package/dist/src/plugin/recovery.d.ts.map +1 -0
- package/dist/src/plugin/recovery.js +331 -0
- package/dist/src/plugin/recovery.js.map +1 -0
- package/dist/src/plugin/refresh-queue.d.ts +101 -0
- package/dist/src/plugin/refresh-queue.d.ts.map +1 -0
- package/dist/src/plugin/refresh-queue.js +248 -0
- package/dist/src/plugin/refresh-queue.js.map +1 -0
- package/dist/src/plugin/rotation.d.ts +169 -0
- package/dist/src/plugin/rotation.d.ts.map +1 -0
- package/dist/src/plugin/rotation.js +328 -0
- package/dist/src/plugin/rotation.js.map +1 -0
- package/dist/src/plugin/storage.d.ts +90 -0
- package/dist/src/plugin/storage.d.ts.map +1 -0
- package/dist/src/plugin/storage.js +450 -0
- package/dist/src/plugin/storage.js.map +1 -0
- package/dist/src/plugin/token.d.ts +19 -0
- package/dist/src/plugin/token.d.ts.map +1 -0
- package/dist/src/plugin/token.js +112 -0
- package/dist/src/plugin/token.js.map +1 -0
- package/dist/src/plugin/types.d.ts +97 -0
- package/dist/src/plugin/types.d.ts.map +1 -0
- package/dist/src/plugin/types.js +1 -0
- package/dist/src/plugin/types.js.map +1 -0
- package/dist/src/plugin/version.d.ts +14 -0
- package/dist/src/plugin/version.d.ts.map +1 -0
- package/dist/src/plugin/version.js +20 -0
- package/dist/src/plugin/version.js.map +1 -0
- package/dist/src/plugin.d.ts +5 -0
- package/dist/src/plugin.d.ts.map +1 -0
- package/dist/src/plugin.js +1077 -0
- package/dist/src/plugin.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { type AccountStorageV4, type AccountMetadataV3, type RateLimitStateV3, type ModelFamily, type HeaderStyle, type CooldownReason } from "./storage";
|
|
2
|
+
import type { OAuthAuthDetails, RefreshParts } from "./types";
|
|
3
|
+
import type { AccountSelectionStrategy } from "./config/schema";
|
|
4
|
+
import { type Fingerprint, type FingerprintVersion } from "./fingerprint";
|
|
5
|
+
/** Quota group identifier for soft quota checks (local definition — Kimi has no external quota module). */
|
|
6
|
+
type QuotaGroup = string;
|
|
7
|
+
/** Summary of a quota group's remaining capacity. */
|
|
8
|
+
interface QuotaGroupSummary {
|
|
9
|
+
remainingFraction?: number;
|
|
10
|
+
resetTime?: string;
|
|
11
|
+
modelCount: number;
|
|
12
|
+
}
|
|
13
|
+
export type { ModelFamily, HeaderStyle, CooldownReason } from "./storage";
|
|
14
|
+
export type { AccountSelectionStrategy } from "./config/schema";
|
|
15
|
+
export type RateLimitReason = "QUOTA_EXHAUSTED" | "RATE_LIMIT_EXCEEDED" | "MODEL_CAPACITY_EXHAUSTED" | "SERVER_ERROR" | "UNKNOWN";
|
|
16
|
+
export interface RateLimitBackoffResult {
|
|
17
|
+
backoffMs: number;
|
|
18
|
+
reason: RateLimitReason;
|
|
19
|
+
}
|
|
20
|
+
export declare function parseRateLimitReason(reason: string | undefined, message: string | undefined, status?: number): RateLimitReason;
|
|
21
|
+
export declare function calculateBackoffMs(reason: RateLimitReason, consecutiveFailures: number, retryAfterMs?: number | null): number;
|
|
22
|
+
export type BaseQuotaKey = "kimi";
|
|
23
|
+
export type QuotaKey = BaseQuotaKey | `${BaseQuotaKey}:${string}`;
|
|
24
|
+
export interface ManagedAccount {
|
|
25
|
+
index: number;
|
|
26
|
+
email?: string;
|
|
27
|
+
addedAt: number;
|
|
28
|
+
lastUsed: number;
|
|
29
|
+
parts: RefreshParts;
|
|
30
|
+
access?: string;
|
|
31
|
+
expires?: number;
|
|
32
|
+
enabled: boolean;
|
|
33
|
+
rateLimitResetTimes: RateLimitStateV3;
|
|
34
|
+
lastSwitchReason?: "rate-limit" | "initial" | "rotation";
|
|
35
|
+
coolingDownUntil?: number;
|
|
36
|
+
cooldownReason?: CooldownReason;
|
|
37
|
+
touchedForQuota: Record<string, number>;
|
|
38
|
+
consecutiveFailures?: number;
|
|
39
|
+
/** Timestamp of last failure for TTL-based reset of consecutiveFailures */
|
|
40
|
+
lastFailureTime?: number;
|
|
41
|
+
/** Per-account device fingerprint for rate limit mitigation */
|
|
42
|
+
fingerprint?: import("./fingerprint").Fingerprint;
|
|
43
|
+
/** History of previous fingerprints for this account */
|
|
44
|
+
fingerprintHistory?: FingerprintVersion[];
|
|
45
|
+
/** Cached quota data from last checkAccountsQuota() call */
|
|
46
|
+
cachedQuota?: Partial<Record<QuotaGroup, QuotaGroupSummary>>;
|
|
47
|
+
cachedQuotaUpdatedAt?: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Resolve the quota group for soft quota checks.
|
|
51
|
+
*
|
|
52
|
+
* When a model string is available, we use it directly as the quota group.
|
|
53
|
+
* When model is null/undefined, we fall back to "kimi" as the default group.
|
|
54
|
+
*
|
|
55
|
+
* @param _family - The model family ("kimi")
|
|
56
|
+
* @param model - Optional model string for precise resolution
|
|
57
|
+
* @returns The QuotaGroup to use for soft quota checks
|
|
58
|
+
*/
|
|
59
|
+
export declare function resolveQuotaGroup(_family: ModelFamily, model?: string | null): QuotaGroup;
|
|
60
|
+
export declare function computeSoftQuotaCacheTtlMs(ttlConfig: "auto" | number, refreshIntervalMinutes: number): number;
|
|
61
|
+
/**
|
|
62
|
+
* In-memory multi-account manager with sticky account selection.
|
|
63
|
+
*
|
|
64
|
+
* Uses the same account until it hits a rate limit (429), then switches.
|
|
65
|
+
* Rate limits are tracked per quota key ("kimi" base or "kimi:<model>").
|
|
66
|
+
*
|
|
67
|
+
* Source of truth for the pool is `kimicode-accounts.json`.
|
|
68
|
+
*/
|
|
69
|
+
export declare class AccountManager {
|
|
70
|
+
private accounts;
|
|
71
|
+
private cursor;
|
|
72
|
+
private currentAccountIndexByFamily;
|
|
73
|
+
private sessionOffsetApplied;
|
|
74
|
+
private lastToastAccountIndex;
|
|
75
|
+
private lastToastTime;
|
|
76
|
+
private savePending;
|
|
77
|
+
private saveTimeout;
|
|
78
|
+
private savePromiseResolvers;
|
|
79
|
+
static loadFromDisk(authFallback?: OAuthAuthDetails): Promise<AccountManager>;
|
|
80
|
+
constructor(authFallback?: OAuthAuthDetails, stored?: AccountStorageV4 | null);
|
|
81
|
+
getAccountCount(): number;
|
|
82
|
+
getTotalAccountCount(): number;
|
|
83
|
+
getEnabledAccounts(): ManagedAccount[];
|
|
84
|
+
getAccountsSnapshot(): ManagedAccount[];
|
|
85
|
+
getCurrentAccountForFamily(family: ModelFamily): ManagedAccount | null;
|
|
86
|
+
markSwitched(account: ManagedAccount, reason: "rate-limit" | "initial" | "rotation", family: ModelFamily): void;
|
|
87
|
+
/**
|
|
88
|
+
* Check if we should show an account switch toast.
|
|
89
|
+
* Debounces repeated toasts for the same account.
|
|
90
|
+
*/
|
|
91
|
+
shouldShowAccountToast(accountIndex: number, debounceMs?: number): boolean;
|
|
92
|
+
markToastShown(accountIndex: number): void;
|
|
93
|
+
getCurrentOrNextForFamily(family: ModelFamily, model?: string | null, strategy?: AccountSelectionStrategy, headerStyle?: HeaderStyle, pidOffsetEnabled?: boolean, softQuotaThresholdPercent?: number, softQuotaCacheTtlMs?: number): ManagedAccount | null;
|
|
94
|
+
getNextForFamily(family: ModelFamily, model?: string | null, headerStyle?: HeaderStyle, softQuotaThresholdPercent?: number, softQuotaCacheTtlMs?: number): ManagedAccount | null;
|
|
95
|
+
markRateLimited(account: ManagedAccount, retryAfterMs: number, family: ModelFamily, headerStyle?: HeaderStyle, model?: string | null): void;
|
|
96
|
+
/**
|
|
97
|
+
* Mark an account as used after a successful API request.
|
|
98
|
+
* This updates the lastUsed timestamp for freshness calculations.
|
|
99
|
+
* Should be called AFTER request completion, not during account selection.
|
|
100
|
+
*/
|
|
101
|
+
markAccountUsed(accountIndex: number): void;
|
|
102
|
+
markRateLimitedWithReason(account: ManagedAccount, family: ModelFamily, headerStyle: HeaderStyle, model: string | null | undefined, reason: RateLimitReason, retryAfterMs?: number | null, failureTtlMs?: number): number;
|
|
103
|
+
markRequestSuccess(account: ManagedAccount): void;
|
|
104
|
+
clearAllRateLimitsForFamily(family: ModelFamily, model?: string | null): void;
|
|
105
|
+
shouldTryOptimisticReset(family: ModelFamily, model?: string | null): boolean;
|
|
106
|
+
markAccountCoolingDown(account: ManagedAccount, cooldownMs: number, reason: CooldownReason): void;
|
|
107
|
+
isAccountCoolingDown(account: ManagedAccount): boolean;
|
|
108
|
+
clearAccountCooldown(account: ManagedAccount): void;
|
|
109
|
+
getAccountCooldownReason(account: ManagedAccount): CooldownReason | undefined;
|
|
110
|
+
markTouchedForQuota(account: ManagedAccount, quotaKey: string): void;
|
|
111
|
+
isFreshForQuota(account: ManagedAccount, quotaKey: string): boolean;
|
|
112
|
+
getFreshAccountsForQuota(quotaKey: string, family: ModelFamily, model?: string | null): ManagedAccount[];
|
|
113
|
+
isRateLimitedForHeaderStyle(account: ManagedAccount, family: ModelFamily, headerStyle: HeaderStyle, model?: string | null): boolean;
|
|
114
|
+
getAvailableHeaderStyle(account: ManagedAccount, family: ModelFamily, model?: string | null): HeaderStyle | null;
|
|
115
|
+
/**
|
|
116
|
+
* Check if any OTHER account has quota available for the given family/model.
|
|
117
|
+
*
|
|
118
|
+
* @param currentAccountIndex - Index of the current account (will be excluded from check)
|
|
119
|
+
* @param family - Model family ("kimi")
|
|
120
|
+
* @param model - Optional model name for model-specific rate limits
|
|
121
|
+
* @returns true if any other enabled, non-cooling-down account has quota available
|
|
122
|
+
*/
|
|
123
|
+
hasOtherAccountWithQuotaAvailable(currentAccountIndex: number, family: ModelFamily, model?: string | null): boolean;
|
|
124
|
+
setAccountEnabled(accountIndex: number, enabled: boolean): boolean;
|
|
125
|
+
removeAccountByIndex(accountIndex: number): boolean;
|
|
126
|
+
removeAccount(account: ManagedAccount): boolean;
|
|
127
|
+
updateFromAuth(account: ManagedAccount, auth: OAuthAuthDetails): void;
|
|
128
|
+
toAuthDetails(account: ManagedAccount): OAuthAuthDetails;
|
|
129
|
+
getMinWaitTimeForFamily(family: ModelFamily, model?: string | null, _headerStyle?: HeaderStyle, _strict?: boolean): number;
|
|
130
|
+
getAccounts(): ManagedAccount[];
|
|
131
|
+
saveToDisk(): Promise<void>;
|
|
132
|
+
requestSaveToDisk(): void;
|
|
133
|
+
flushSaveToDisk(): Promise<void>;
|
|
134
|
+
private executeSave;
|
|
135
|
+
/**
|
|
136
|
+
* Regenerate fingerprint for an account, saving the old one to history.
|
|
137
|
+
* @param accountIndex - Index of the account to regenerate fingerprint for
|
|
138
|
+
* @returns The new fingerprint, or null if account not found
|
|
139
|
+
*/
|
|
140
|
+
regenerateAccountFingerprint(accountIndex: number): Fingerprint | null;
|
|
141
|
+
/**
|
|
142
|
+
* Restore a fingerprint from history for an account.
|
|
143
|
+
* @param accountIndex - Index of the account
|
|
144
|
+
* @param historyIndex - Index in the fingerprint history to restore from (0 = most recent)
|
|
145
|
+
* @returns The restored fingerprint, or null if account/history not found
|
|
146
|
+
*/
|
|
147
|
+
restoreAccountFingerprint(accountIndex: number, historyIndex: number): Fingerprint | null;
|
|
148
|
+
/**
|
|
149
|
+
* Get fingerprint history for an account.
|
|
150
|
+
* @param accountIndex - Index of the account
|
|
151
|
+
* @returns Array of fingerprint versions, or empty array if not found
|
|
152
|
+
*/
|
|
153
|
+
getAccountFingerprintHistory(accountIndex: number): FingerprintVersion[];
|
|
154
|
+
updateQuotaCache(accountIndex: number, quotaGroups: Partial<Record<QuotaGroup, QuotaGroupSummary>>): void;
|
|
155
|
+
isAccountOverSoftQuota(account: ManagedAccount, family: ModelFamily, thresholdPercent: number, cacheTtlMs: number, model?: string | null): boolean;
|
|
156
|
+
getAccountsForQuotaCheck(): AccountMetadataV3[];
|
|
157
|
+
getOldestQuotaCacheAge(): number | null;
|
|
158
|
+
areAllAccountsOverSoftQuota(family: ModelFamily, thresholdPercent: number, cacheTtlMs: number, model?: string | null): boolean;
|
|
159
|
+
/**
|
|
160
|
+
* Get minimum wait time until any account's soft quota resets.
|
|
161
|
+
* Returns 0 if any account is available (not over threshold).
|
|
162
|
+
* Returns the minimum resetTime across all over-threshold accounts.
|
|
163
|
+
* Returns null if no resetTime data is available.
|
|
164
|
+
*/
|
|
165
|
+
getMinWaitTimeForSoftQuota(family: ModelFamily, thresholdPercent: number, cacheTtlMs: number, model?: string | null): number | null;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=accounts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../src/plugin/accounts.ts"],"names":[],"mappings":"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"}
|