@thelioo/opencode-balancer 0.1.6 → 0.2.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 (203) hide show
  1. package/INSTALL.txt +49 -21
  2. package/README.md +92 -50
  3. package/dist/core/accounts.ts +404 -0
  4. package/dist/core/database.ts +67 -0
  5. package/dist/core/events.ts +75 -0
  6. package/dist/core/native-auth-suppression.ts +36 -0
  7. package/dist/core/native-connect.ts +31 -0
  8. package/dist/core/path.ts +34 -0
  9. package/dist/core/pending.ts +351 -0
  10. package/dist/core/priority.ts +193 -0
  11. package/dist/core/schema.ts +439 -0
  12. package/dist/core/time.ts +3 -0
  13. package/dist/core/types.ts +72 -0
  14. package/dist/core/usage/index.ts +23 -0
  15. package/dist/core/usage/providers/copilot.ts +243 -0
  16. package/dist/core/usage/providers/openai.ts +179 -0
  17. package/dist/core/usage/redact.ts +80 -0
  18. package/dist/core/usage/store.ts +66 -0
  19. package/dist/core/usage/types.ts +24 -0
  20. package/dist/index.js +173 -4
  21. package/dist/index.js.map +1 -1
  22. package/dist/server/auth-watcher.ts +318 -0
  23. package/dist/server/commands.ts +58 -0
  24. package/dist/server/fetch-patch.ts +162 -0
  25. package/dist/server/index.ts +134 -0
  26. package/dist/server/native.ts +49 -0
  27. package/dist/server/request-balancer.ts +67 -0
  28. package/dist/tui/actions.ts +176 -108
  29. package/dist/tui/balancer-bar-sync.ts +55 -45
  30. package/dist/tui/components/alias-dialog.tsx +71 -56
  31. package/dist/tui/components/dashboard.tsx +530 -358
  32. package/dist/tui/components/priority-screen.tsx +389 -266
  33. package/dist/tui/components/provider-model-dialog.tsx +72 -55
  34. package/dist/tui/components/rename-dialog.tsx +35 -28
  35. package/dist/tui/components/sidebar.tsx +103 -79
  36. package/dist/tui/components/status-indicator.tsx +78 -59
  37. package/dist/tui/components/usage-bar.tsx +18 -7
  38. package/dist/tui/components/usage-display.tsx +32 -16
  39. package/dist/tui/connect.ts +105 -72
  40. package/dist/tui/dashboard-keys.ts +53 -41
  41. package/dist/tui/native-model-apply.ts +45 -36
  42. package/dist/tui/priority-keys.ts +44 -36
  43. package/dist/tui/provider-models.ts +32 -25
  44. package/dist/tui/responsive.ts +10 -7
  45. package/dist/tui/selected-account-bar-sync.ts +32 -0
  46. package/dist/tui/selection-colors.ts +38 -30
  47. package/dist/tui/state.ts +61 -44
  48. package/dist/tui/status-format.ts +24 -20
  49. package/dist/tui/tui.js +165 -120
  50. package/dist/tui/tui.js.map +1 -1
  51. package/dist/tui/tui.tsx +199 -117
  52. package/dist/tui/usage-auto-refresh.ts +52 -45
  53. package/dist/tui/usage-format.ts +9 -9
  54. package/package.json +61 -52
  55. package/dist/balancer/accounts.d.ts +0 -9
  56. package/dist/balancer/accounts.js +0 -102
  57. package/dist/balancer/accounts.js.map +0 -1
  58. package/dist/balancer/auth-watcher.d.ts +0 -1
  59. package/dist/balancer/auth-watcher.js +0 -30
  60. package/dist/balancer/auth-watcher.js.map +0 -1
  61. package/dist/balancer/commands.d.ts +0 -1
  62. package/dist/balancer/commands.js +0 -94
  63. package/dist/balancer/commands.js.map +0 -1
  64. package/dist/balancer/core.d.ts +0 -6
  65. package/dist/balancer/core.js +0 -7
  66. package/dist/balancer/core.js.map +0 -1
  67. package/dist/balancer/fetch-patch.d.ts +0 -1
  68. package/dist/balancer/fetch-patch.js +0 -110
  69. package/dist/balancer/fetch-patch.js.map +0 -1
  70. package/dist/balancer/http.d.ts +0 -40
  71. package/dist/balancer/http.js +0 -199
  72. package/dist/balancer/http.js.map +0 -1
  73. package/dist/balancer/native.d.ts +0 -3
  74. package/dist/balancer/native.js +0 -16
  75. package/dist/balancer/native.js.map +0 -1
  76. package/dist/balancer/state.d.ts +0 -14
  77. package/dist/balancer/state.js +0 -16
  78. package/dist/balancer/state.js.map +0 -1
  79. package/dist/balancer/storage.d.ts +0 -8
  80. package/dist/balancer/storage.js +0 -92
  81. package/dist/balancer/storage.js.map +0 -1
  82. package/dist/balancer/types.d.ts +0 -44
  83. package/dist/balancer/types.js +0 -2
  84. package/dist/balancer/types.js.map +0 -1
  85. package/dist/core/accounts.d.ts +0 -14
  86. package/dist/core/accounts.js +0 -260
  87. package/dist/core/accounts.js.map +0 -1
  88. package/dist/core/database.d.ts +0 -4
  89. package/dist/core/database.js +0 -69
  90. package/dist/core/database.js.map +0 -1
  91. package/dist/core/events.d.ts +0 -18
  92. package/dist/core/events.js +0 -39
  93. package/dist/core/events.js.map +0 -1
  94. package/dist/core/native-auth-suppression.d.ts +0 -3
  95. package/dist/core/native-auth-suppression.js +0 -19
  96. package/dist/core/native-auth-suppression.js.map +0 -1
  97. package/dist/core/native-connect.d.ts +0 -4
  98. package/dist/core/native-connect.js +0 -19
  99. package/dist/core/native-connect.js.map +0 -1
  100. package/dist/core/path.d.ts +0 -4
  101. package/dist/core/path.js +0 -26
  102. package/dist/core/path.js.map +0 -1
  103. package/dist/core/pending.d.ts +0 -9
  104. package/dist/core/pending.js +0 -237
  105. package/dist/core/pending.js.map +0 -1
  106. package/dist/core/priority.d.ts +0 -20
  107. package/dist/core/priority.js +0 -120
  108. package/dist/core/priority.js.map +0 -1
  109. package/dist/core/schema.d.ts +0 -2
  110. package/dist/core/schema.js +0 -265
  111. package/dist/core/schema.js.map +0 -1
  112. package/dist/core/time.d.ts +0 -1
  113. package/dist/core/time.js +0 -4
  114. package/dist/core/time.js.map +0 -1
  115. package/dist/core/types.d.ts +0 -59
  116. package/dist/core/types.js +0 -2
  117. package/dist/core/types.js.map +0 -1
  118. package/dist/core/usage/index.d.ts +0 -4
  119. package/dist/core/usage/index.js +0 -16
  120. package/dist/core/usage/index.js.map +0 -1
  121. package/dist/core/usage/providers/copilot.d.ts +0 -2
  122. package/dist/core/usage/providers/copilot.js +0 -169
  123. package/dist/core/usage/providers/copilot.js.map +0 -1
  124. package/dist/core/usage/providers/openai.d.ts +0 -2
  125. package/dist/core/usage/providers/openai.js +0 -133
  126. package/dist/core/usage/providers/openai.js.map +0 -1
  127. package/dist/core/usage/redact.d.ts +0 -3
  128. package/dist/core/usage/redact.js +0 -67
  129. package/dist/core/usage/redact.js.map +0 -1
  130. package/dist/core/usage/store.d.ts +0 -4
  131. package/dist/core/usage/store.js +0 -31
  132. package/dist/core/usage/store.js.map +0 -1
  133. package/dist/core/usage/types.d.ts +0 -21
  134. package/dist/core/usage/types.js +0 -2
  135. package/dist/core/usage/types.js.map +0 -1
  136. package/dist/index.d.ts +0 -5
  137. package/dist/server/auth-watcher.d.ts +0 -31
  138. package/dist/server/auth-watcher.js +0 -227
  139. package/dist/server/auth-watcher.js.map +0 -1
  140. package/dist/server/commands.d.ts +0 -2
  141. package/dist/server/commands.js +0 -46
  142. package/dist/server/commands.js.map +0 -1
  143. package/dist/server/fetch-patch.d.ts +0 -3
  144. package/dist/server/fetch-patch.js +0 -118
  145. package/dist/server/fetch-patch.js.map +0 -1
  146. package/dist/server/index.d.ts +0 -8
  147. package/dist/server/index.js +0 -94
  148. package/dist/server/index.js.map +0 -1
  149. package/dist/server/native.d.ts +0 -6
  150. package/dist/server/native.js +0 -35
  151. package/dist/server/native.js.map +0 -1
  152. package/dist/server/request-balancer.d.ts +0 -16
  153. package/dist/server/request-balancer.js +0 -43
  154. package/dist/server/request-balancer.js.map +0 -1
  155. package/dist/tui/actions.d.ts +0 -41
  156. package/dist/tui/actions.js +0 -88
  157. package/dist/tui/actions.js.map +0 -1
  158. package/dist/tui/balancer-bar-sync.d.ts +0 -19
  159. package/dist/tui/balancer-bar-sync.js +0 -45
  160. package/dist/tui/balancer-bar-sync.js.map +0 -1
  161. package/dist/tui/components/alias-dialog.d.ts +0 -4
  162. package/dist/tui/components/dashboard.d.ts +0 -12
  163. package/dist/tui/components/priority-screen.d.ts +0 -9
  164. package/dist/tui/components/provider-model-dialog.d.ts +0 -13
  165. package/dist/tui/components/rename-dialog.d.ts +0 -4
  166. package/dist/tui/components/sidebar.d.ts +0 -10
  167. package/dist/tui/components/status-indicator.d.ts +0 -9
  168. package/dist/tui/components/usage-bar.d.ts +0 -8
  169. package/dist/tui/components/usage-display.d.ts +0 -10
  170. package/dist/tui/connect.d.ts +0 -30
  171. package/dist/tui/connect.js +0 -73
  172. package/dist/tui/connect.js.map +0 -1
  173. package/dist/tui/dashboard-keys.d.ts +0 -45
  174. package/dist/tui/dashboard-keys.js +0 -44
  175. package/dist/tui/dashboard-keys.js.map +0 -1
  176. package/dist/tui/native-model-apply.d.ts +0 -21
  177. package/dist/tui/native-model-apply.js +0 -53
  178. package/dist/tui/native-model-apply.js.map +0 -1
  179. package/dist/tui/priority-keys.d.ts +0 -40
  180. package/dist/tui/priority-keys.js +0 -38
  181. package/dist/tui/priority-keys.js.map +0 -1
  182. package/dist/tui/provider-models.d.ts +0 -19
  183. package/dist/tui/provider-models.js +0 -17
  184. package/dist/tui/provider-models.js.map +0 -1
  185. package/dist/tui/responsive.d.ts +0 -9
  186. package/dist/tui/responsive.js +0 -13
  187. package/dist/tui/responsive.js.map +0 -1
  188. package/dist/tui/selection-colors.d.ts +0 -10
  189. package/dist/tui/selection-colors.js +0 -38
  190. package/dist/tui/selection-colors.js.map +0 -1
  191. package/dist/tui/state.d.ts +0 -14
  192. package/dist/tui/state.js +0 -46
  193. package/dist/tui/state.js.map +0 -1
  194. package/dist/tui/status-format.d.ts +0 -15
  195. package/dist/tui/status-format.js +0 -17
  196. package/dist/tui/status-format.js.map +0 -1
  197. package/dist/tui/tui.d.ts +0 -7
  198. package/dist/tui/usage-auto-refresh.d.ts +0 -16
  199. package/dist/tui/usage-auto-refresh.js +0 -46
  200. package/dist/tui/usage-auto-refresh.js.map +0 -1
  201. package/dist/tui/usage-format.d.ts +0 -2
  202. package/dist/tui/usage-format.js +0 -17
  203. package/dist/tui/usage-format.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/balancer/http.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { AuthInfo } from "./types";
2
- export declare function setNativeAuth(client: any, providerID: string, auth: AuthInfo): Promise<void>;
3
- export declare function showToast(client: any, message: string, variant?: "info" | "success" | "warning" | "error"): Promise<void>;
@@ -1,16 +0,0 @@
1
- import { now, state } from "./state";
2
- export async function setNativeAuth(client, providerID, auth) {
3
- state.suppressAuthCaptureUntil.set(providerID, now() + 2_000);
4
- await client.auth
5
- .set({
6
- path: { id: providerID },
7
- body: auth,
8
- })
9
- .catch(() => undefined);
10
- }
11
- export async function showToast(client, message, variant = "info") {
12
- await client.tui
13
- .showToast({ body: { message, variant, duration: 15_000 } })
14
- .catch(() => undefined);
15
- }
16
- //# sourceMappingURL=native.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/balancer/native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGrC,MAAM,CAAC,KAAK,UAAU,aAAa,CAC/B,MAAW,EACX,UAAkB,EAClB,IAAc;IAEd,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;IAC9D,MAAM,MAAM,CAAC,IAAI;SACZ,GAAG,CAAC;QACD,IAAI,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE;QACxB,IAAI,EAAE,IAAI;KACb,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC3B,MAAW,EACX,OAAe,EACf,UAAoD,MAAM;IAE1D,MAAM,MAAM,CAAC,GAAG;SACX,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;SAC3D,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC"}
@@ -1,14 +0,0 @@
1
- import type { AuthInfo, PendingRequest } from "./types";
2
- export declare const INTERNAL_REQUEST_HEADER = "x-opencode-balancer-request";
3
- export declare const BALANCER_ALIAS_INPUT = "__opencode_balancer_alias";
4
- export declare const BALANCER_METADATA_KEY = "opencodeBalancerCommand";
5
- export declare const RETRYABLE_STATUS: Set<number>;
6
- export declare const state: {
7
- fetchPatched: boolean;
8
- pendingRequests: Map<string, PendingRequest>;
9
- pendingOauthAlias: Map<string, string>;
10
- suppressAuthCaptureUntil: Map<string, number>;
11
- lastAuthSnapshot: Record<string, AuthInfo>;
12
- watchStarted: boolean;
13
- };
14
- export declare function now(): number;
@@ -1,16 +0,0 @@
1
- export const INTERNAL_REQUEST_HEADER = "x-opencode-balancer-request";
2
- export const BALANCER_ALIAS_INPUT = "__opencode_balancer_alias";
3
- export const BALANCER_METADATA_KEY = "opencodeBalancerCommand";
4
- export const RETRYABLE_STATUS = new Set([429, 500, 502, 503, 504, 529]);
5
- export const state = {
6
- fetchPatched: false,
7
- pendingRequests: new Map(),
8
- pendingOauthAlias: new Map(),
9
- suppressAuthCaptureUntil: new Map(),
10
- lastAuthSnapshot: {},
11
- watchStarted: false,
12
- };
13
- export function now() {
14
- return Date.now();
15
- }
16
- //# sourceMappingURL=state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/balancer/state.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG,6BAA6B,CAAC;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAChE,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,KAAK,GAAG;IACjB,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,IAAI,GAAG,EAA0B;IAClD,iBAAiB,EAAE,IAAI,GAAG,EAAkB;IAC5C,wBAAwB,EAAE,IAAI,GAAG,EAAkB;IACnD,gBAAgB,EAAE,EAA8B;IAChD,YAAY,EAAE,KAAK;CACtB,CAAC;AAEF,MAAM,UAAU,GAAG;IACf,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;AACtB,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { AuthInfo, Store } from "./types";
2
- export declare function storePath(): string;
3
- export declare function authPath(): string;
4
- export declare function readStore(): Promise<Store>;
5
- export declare function writeStore(store: Store): Promise<void>;
6
- export declare function readNativeAuth(): Promise<Record<string, AuthInfo>>;
7
- export declare function isAuthInfo(value: unknown): value is AuthInfo;
8
- export declare function captureAuth(providerID: string, auth: AuthInfo, source: NonNullable<Store["lastCaptured"]>["source"]): Promise<Store>;
@@ -1,92 +0,0 @@
1
- import { now } from "./state";
2
- function joinPath(...parts) {
3
- return parts
4
- .filter(Boolean)
5
- .join("/")
6
- .replace(/\/+/g, "/");
7
- }
8
- function homeDir() {
9
- return Bun.env.HOME || "/";
10
- }
11
- function xdgConfigHome() {
12
- return Bun.env.XDG_CONFIG_HOME || joinPath(homeDir(), ".config");
13
- }
14
- function xdgDataHome() {
15
- return Bun.env.XDG_DATA_HOME || joinPath(homeDir(), ".local", "share");
16
- }
17
- function configDir() {
18
- return Bun.env.OPENCODE_CONFIG_DIR || joinPath(xdgConfigHome(), "opencode");
19
- }
20
- function dataDir() {
21
- return joinPath(xdgDataHome(), "opencode");
22
- }
23
- export function storePath() {
24
- return joinPath(configDir(), "balancer-accounts.json");
25
- }
26
- export function authPath() {
27
- return joinPath(dataDir(), "auth.json");
28
- }
29
- function emptyStore() {
30
- return { version: 1, providers: {} };
31
- }
32
- async function readJsonFile(path, fallback) {
33
- try {
34
- const file = Bun.file(path);
35
- if (!(await file.exists()))
36
- return fallback;
37
- return JSON.parse(await file.text());
38
- }
39
- catch {
40
- return fallback;
41
- }
42
- }
43
- async function writeJsonFile(path, value) {
44
- await Bun.write(path, `${JSON.stringify(value, null, 2)}\n`, {
45
- mode: 0o600,
46
- });
47
- }
48
- export async function readStore() {
49
- const parsed = await readJsonFile(storePath(), emptyStore());
50
- if (parsed.version !== 1 || !parsed.providers)
51
- return emptyStore();
52
- return parsed;
53
- }
54
- export async function writeStore(store) {
55
- await writeJsonFile(storePath(), store);
56
- }
57
- export async function readNativeAuth() {
58
- if (Bun.env.OPENCODE_AUTH_CONTENT) {
59
- try {
60
- return JSON.parse(Bun.env.OPENCODE_AUTH_CONTENT);
61
- }
62
- catch {
63
- return {};
64
- }
65
- }
66
- return readJsonFile(authPath(), {});
67
- }
68
- export function isAuthInfo(value) {
69
- if (!value || typeof value !== "object")
70
- return false;
71
- const type = value.type;
72
- if (type === "api")
73
- return typeof value.key === "string";
74
- if (type === "oauth") {
75
- const item = value;
76
- return (typeof item.refresh === "string" &&
77
- typeof item.access === "string" &&
78
- typeof item.expires === "number");
79
- }
80
- if (type === "wellknown") {
81
- const item = value;
82
- return typeof item.key === "string" && typeof item.token === "string";
83
- }
84
- return false;
85
- }
86
- export async function captureAuth(providerID, auth, source) {
87
- const store = await readStore();
88
- store.lastCaptured = { providerID, auth, capturedAt: now(), source };
89
- await writeStore(store);
90
- return store;
91
- }
92
- //# sourceMappingURL=storage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/balancer/storage.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- export type AuthInfo = {
2
- type: "api";
3
- key: string;
4
- metadata?: Record<string, string>;
5
- } | {
6
- type: "oauth";
7
- refresh: string;
8
- access: string;
9
- expires: number;
10
- accountId?: string;
11
- enterpriseUrl?: string;
12
- } | {
13
- type: "wellknown";
14
- key: string;
15
- token: string;
16
- };
17
- export type Account = {
18
- alias: string;
19
- providerID: string;
20
- auth: AuthInfo;
21
- createdAt: number;
22
- updatedAt: number;
23
- lastUsedAt?: number;
24
- rateLimitedUntil?: number;
25
- failures?: number;
26
- };
27
- export type ProviderState = {
28
- active?: string;
29
- accounts: Record<string, Account>;
30
- };
31
- export type Store = {
32
- version: 1;
33
- providers: Record<string, ProviderState>;
34
- lastCaptured?: {
35
- providerID: string;
36
- auth: AuthInfo;
37
- capturedAt: number;
38
- source: "auth-file" | "http" | "oauth-callback";
39
- };
40
- };
41
- export type PendingRequest = {
42
- providerID: string;
43
- account?: Account;
44
- };
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/balancer/types.ts"],"names":[],"mappings":""}
@@ -1,14 +0,0 @@
1
- import type { Database } from "bun:sqlite";
2
- import type { Account, AuthInfo, SelectedModel } from "./types";
3
- export declare function normalizeAlias(alias: string): string;
4
- export declare function saveAccount(db: Database, providerID: string, aliasInput: string, auth: AuthInfo): Account;
5
- export declare function updateAccountAuth(db: Database, providerID: string, aliasInput: string, auth: AuthInfo): Account | undefined;
6
- export declare function renameAccount(db: Database, providerID: string, fromAliasInput: string, toAliasInput: string): Account;
7
- export declare function getAccount(db: Database, providerID: string, alias: string): Account | undefined;
8
- export declare function listAccounts(db: Database, providerID?: string): Account[];
9
- export declare function setActiveAccount(db: Database, providerID: string, alias: string): Account;
10
- export declare function removeAccount(db: Database, providerID: string, alias: string): boolean;
11
- export declare function getActiveAccount(db: Database, providerID: string): Account | undefined;
12
- export declare function getSelectedAccount(db: Database): Account | undefined;
13
- export declare function setSelectedModel(db: Database, providerID: string, modelID: string): SelectedModel;
14
- export declare function getSelectedModel(db: Database, providerID: string): SelectedModel | undefined;
@@ -1,260 +0,0 @@
1
- import { now } from "./time";
2
- const authTypes = ["api", "oauth", "wellknown"];
3
- export function normalizeAlias(alias) {
4
- return alias
5
- .trim()
6
- .toLowerCase()
7
- .replace(/[^a-z0-9._-]+/g, "-")
8
- .replace(/^-+|-+$/g, "");
9
- }
10
- function accountRowID(row) {
11
- return `${row.provider_id}/${row.alias}`;
12
- }
13
- function isAuthType(value) {
14
- return authTypes.includes(value);
15
- }
16
- function parseAccountAuth(row) {
17
- const id = accountRowID(row);
18
- let auth;
19
- try {
20
- auth = JSON.parse(row.auth_json);
21
- }
22
- catch {
23
- throw new Error(`Invalid account row for ${id}: auth_json is invalid`);
24
- }
25
- if (!auth || typeof auth !== "object" || !("type" in auth) || typeof auth.type !== "string") {
26
- throw new Error(`Invalid account row for ${id}: auth_json type is invalid`);
27
- }
28
- if (!isAuthType(auth.type)) {
29
- throw new Error(`Invalid account row for ${id}: auth_json type ${auth.type} is invalid`);
30
- }
31
- return auth;
32
- }
33
- function validateAccountAuthType(row) {
34
- if (!isAuthType(row.auth_type)) {
35
- throw new Error(`Invalid account row for ${accountRowID(row)}: auth_type ${row.auth_type} is invalid`);
36
- }
37
- return row.auth_type;
38
- }
39
- function validateDisabled(row) {
40
- if (row.disabled !== 0 && row.disabled !== 1) {
41
- throw new Error(`Invalid account row for ${accountRowID(row)}: disabled ${row.disabled} is invalid`);
42
- }
43
- return Boolean(row.disabled);
44
- }
45
- function accountFromRow(row) {
46
- const auth = parseAccountAuth(row);
47
- const authType = validateAccountAuthType(row);
48
- if (auth.type !== authType) {
49
- throw new Error(`Invalid account row for ${accountRowID(row)}: auth_type ${authType} does not match auth_json type ${auth.type}`);
50
- }
51
- return {
52
- providerID: row.provider_id,
53
- alias: row.alias,
54
- auth,
55
- authType,
56
- createdAt: row.created_at,
57
- updatedAt: row.updated_at,
58
- lastUsedAt: row.last_used_at ?? undefined,
59
- rateLimitedUntil: row.rate_limited_until ?? undefined,
60
- failures: row.failures,
61
- disabled: validateDisabled(row),
62
- };
63
- }
64
- function setActiveAlias(db, providerID, alias) {
65
- db.query(`INSERT INTO provider_state (provider_id, active_alias, updated_at, metadata_json)
66
- VALUES (?, ?, ?, '{}')
67
- ON CONFLICT(provider_id) DO UPDATE SET
68
- active_alias = excluded.active_alias,
69
- updated_at = excluded.updated_at`).run(providerID, alias, now());
70
- db.query(`INSERT INTO settings (key, value) VALUES ('selected_provider_id', ?)
71
- ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run(providerID);
72
- }
73
- function parseMetadataJson(value) {
74
- if (!value)
75
- return {};
76
- try {
77
- const metadata = JSON.parse(value);
78
- return metadata && typeof metadata === "object" && !Array.isArray(metadata) ? metadata : {};
79
- }
80
- catch {
81
- return {};
82
- }
83
- }
84
- export function saveAccount(db, providerID, aliasInput, auth) {
85
- const alias = normalizeAlias(aliasInput);
86
- if (!alias)
87
- throw new Error("Invalid alias");
88
- const save = db.transaction(() => {
89
- const timestamp = now();
90
- db.query(`INSERT INTO accounts (
91
- provider_id,
92
- alias,
93
- auth_json,
94
- auth_type,
95
- created_at,
96
- updated_at,
97
- failures,
98
- disabled
99
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
100
- ON CONFLICT(provider_id, alias) DO UPDATE SET
101
- auth_json = excluded.auth_json,
102
- auth_type = excluded.auth_type,
103
- updated_at = excluded.updated_at`).run(providerID, alias, JSON.stringify(auth), auth.type, timestamp, timestamp, 0, 0);
104
- setActiveAlias(db, providerID, alias);
105
- const account = getAccount(db, providerID, alias);
106
- if (!account)
107
- throw new Error(`Account not found: ${providerID}/${alias}`);
108
- return account;
109
- });
110
- return save();
111
- }
112
- export function updateAccountAuth(db, providerID, aliasInput, auth) {
113
- const alias = normalizeAlias(aliasInput);
114
- if (!alias)
115
- throw new Error("Invalid alias");
116
- db.query(`UPDATE accounts
117
- SET auth_json = ?,
118
- auth_type = ?,
119
- updated_at = ?
120
- WHERE provider_id = ? AND alias = ?`).run(JSON.stringify(auth), auth.type, now(), providerID, alias);
121
- return getAccount(db, providerID, alias);
122
- }
123
- export function renameAccount(db, providerID, fromAliasInput, toAliasInput) {
124
- const fromAlias = normalizeAlias(fromAliasInput);
125
- const toAlias = normalizeAlias(toAliasInput);
126
- if (!fromAlias || !toAlias)
127
- throw new Error("Invalid alias");
128
- if (fromAlias === toAlias) {
129
- const account = getAccount(db, providerID, fromAlias);
130
- if (!account)
131
- throw new Error(`Account not found: ${providerID}/${fromAlias}`);
132
- return account;
133
- }
134
- const rename = db.transaction(() => {
135
- const existing = getAccount(db, providerID, fromAlias);
136
- if (!existing)
137
- throw new Error(`Account not found: ${providerID}/${fromAlias}`);
138
- if (getAccount(db, providerID, toAlias))
139
- throw new Error(`Account already exists: ${providerID}/${toAlias}`);
140
- db.query(`UPDATE accounts
141
- SET alias = ?, updated_at = ?
142
- WHERE provider_id = ? AND alias = ?`).run(toAlias, now(), providerID, fromAlias);
143
- db.query(`UPDATE usage_snapshots
144
- SET alias = ?
145
- WHERE provider_id = ? AND alias = ?`).run(toAlias, providerID, fromAlias);
146
- const active = db
147
- .query("SELECT active_alias FROM provider_state WHERE provider_id = ?")
148
- .get(providerID);
149
- if (active?.active_alias === fromAlias)
150
- setActiveAlias(db, providerID, toAlias);
151
- const account = getAccount(db, providerID, toAlias);
152
- if (!account)
153
- throw new Error(`Account not found: ${providerID}/${toAlias}`);
154
- return account;
155
- });
156
- return rename();
157
- }
158
- export function getAccount(db, providerID, alias) {
159
- const normalizedAlias = normalizeAlias(alias);
160
- const row = db
161
- .query(`SELECT provider_id, alias, auth_json, auth_type, created_at, updated_at,
162
- last_used_at, rate_limited_until, failures, disabled
163
- FROM accounts
164
- WHERE provider_id = ? AND alias = ?`)
165
- .get(providerID, normalizedAlias);
166
- return row ? accountFromRow(row) : undefined;
167
- }
168
- export function listAccounts(db, providerID) {
169
- const sql = `SELECT provider_id, alias, auth_json, auth_type, created_at, updated_at,
170
- last_used_at, rate_limited_until, failures, disabled
171
- FROM accounts`;
172
- const rows = providerID
173
- ? db
174
- .query(`${sql} WHERE provider_id = ? ORDER BY alias`)
175
- .all(providerID)
176
- : db.query(`${sql} ORDER BY provider_id, alias`).all();
177
- return rows.map(accountFromRow);
178
- }
179
- export function setActiveAccount(db, providerID, alias) {
180
- const normalizedAlias = normalizeAlias(alias);
181
- const account = getAccount(db, providerID, normalizedAlias);
182
- if (!account)
183
- throw new Error(`Account not found: ${providerID}/${normalizedAlias}`);
184
- setActiveAlias(db, providerID, normalizedAlias);
185
- return account;
186
- }
187
- export function removeAccount(db, providerID, alias) {
188
- const normalizedAlias = normalizeAlias(alias);
189
- const remove = db.transaction(() => {
190
- const existing = getAccount(db, providerID, normalizedAlias);
191
- if (!existing)
192
- return false;
193
- db.query("DELETE FROM accounts WHERE provider_id = ? AND alias = ?").run(providerID, normalizedAlias);
194
- db.query("DELETE FROM usage_snapshots WHERE provider_id = ? AND alias = ?").run(providerID, normalizedAlias);
195
- const active = db
196
- .query("SELECT active_alias FROM provider_state WHERE provider_id = ?")
197
- .get(providerID);
198
- if (active?.active_alias === normalizedAlias) {
199
- const next = db
200
- .query("SELECT alias FROM accounts WHERE provider_id = ? ORDER BY alias LIMIT 1")
201
- .get(providerID);
202
- db.query(`UPDATE provider_state
203
- SET active_alias = ?, updated_at = ?
204
- WHERE provider_id = ?`).run(next?.alias ?? null, now(), providerID);
205
- }
206
- return true;
207
- });
208
- return remove();
209
- }
210
- export function getActiveAccount(db, providerID) {
211
- const row = db
212
- .query("SELECT active_alias FROM provider_state WHERE provider_id = ?")
213
- .get(providerID);
214
- if (!row?.active_alias)
215
- return undefined;
216
- return getAccount(db, providerID, row.active_alias);
217
- }
218
- export function getSelectedAccount(db) {
219
- const selectedProvider = db
220
- .query("SELECT value FROM settings WHERE key = 'selected_provider_id'")
221
- .get();
222
- if (selectedProvider?.value) {
223
- const active = getActiveAccount(db, selectedProvider.value);
224
- if (active)
225
- return active;
226
- }
227
- const row = db
228
- .query(`SELECT provider_id, active_alias
229
- FROM provider_state
230
- WHERE active_alias IS NOT NULL
231
- ORDER BY updated_at DESC, provider_id
232
- LIMIT 1`)
233
- .get();
234
- if (!row?.active_alias)
235
- return undefined;
236
- return getAccount(db, row.provider_id, row.active_alias);
237
- }
238
- export function setSelectedModel(db, providerID, modelID) {
239
- const row = db
240
- .query("SELECT metadata_json FROM provider_state WHERE provider_id = ?")
241
- .get(providerID);
242
- const metadata = parseMetadataJson(row?.metadata_json);
243
- metadata.selected_model_id = modelID;
244
- db.query(`INSERT INTO provider_state (provider_id, active_alias, updated_at, metadata_json)
245
- VALUES (?, NULL, ?, ?)
246
- ON CONFLICT(provider_id) DO UPDATE SET
247
- updated_at = excluded.updated_at,
248
- metadata_json = excluded.metadata_json`).run(providerID, now(), JSON.stringify(metadata));
249
- return { providerID, modelID };
250
- }
251
- export function getSelectedModel(db, providerID) {
252
- const row = db
253
- .query("SELECT metadata_json FROM provider_state WHERE provider_id = ?")
254
- .get(providerID);
255
- const modelID = parseMetadataJson(row?.metadata_json).selected_model_id;
256
- if (typeof modelID !== "string" || modelID.length === 0)
257
- return undefined;
258
- return { providerID, modelID };
259
- }
260
- //# sourceMappingURL=accounts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/core/accounts.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import { Database } from "bun:sqlite";
2
- export declare function secureDatabaseFiles(path: string): void;
3
- export declare function openBalancerDatabase(path: string): Database;
4
- export declare function closeBalancerDatabase(path: string): void;
@@ -1,69 +0,0 @@
1
- import { chmodSync, mkdirSync } from "node:fs";
2
- import { dirname } from "node:path";
3
- import { Database } from "bun:sqlite";
4
- const databases = new Map();
5
- function isMissingFileError(error) {
6
- return error.code === "ENOENT";
7
- }
8
- function isClosedDatabaseError(error) {
9
- return error instanceof Error && /closed/i.test(error.message);
10
- }
11
- function cachedDatabaseIsOpen(database) {
12
- try {
13
- database.exec("SELECT 1;");
14
- return true;
15
- }
16
- catch (error) {
17
- if (isClosedDatabaseError(error))
18
- return false;
19
- throw error;
20
- }
21
- }
22
- export function secureDatabaseFiles(path) {
23
- for (const file of [path, `${path}-wal`, `${path}-shm`]) {
24
- try {
25
- chmodSync(file, 0o600);
26
- }
27
- catch (error) {
28
- if (!isMissingFileError(error))
29
- throw error;
30
- }
31
- }
32
- }
33
- export function openBalancerDatabase(path) {
34
- const existing = databases.get(path);
35
- if (existing) {
36
- if (cachedDatabaseIsOpen(existing))
37
- return existing;
38
- databases.delete(path);
39
- }
40
- mkdirSync(dirname(path), { recursive: true });
41
- const database = new Database(path);
42
- try {
43
- database.exec("PRAGMA journal_mode = WAL; PRAGMA foreign_keys = ON;");
44
- secureDatabaseFiles(path);
45
- databases.set(path, database);
46
- return database;
47
- }
48
- catch (error) {
49
- try {
50
- database.close();
51
- }
52
- catch { }
53
- throw error;
54
- }
55
- }
56
- export function closeBalancerDatabase(path) {
57
- const existing = databases.get(path);
58
- if (!existing)
59
- return;
60
- databases.delete(path);
61
- try {
62
- existing.close();
63
- }
64
- catch (error) {
65
- if (!isClosedDatabaseError(error))
66
- throw error;
67
- }
68
- }
69
- //# sourceMappingURL=database.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/core/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;AAE9C,SAAS,kBAAkB,CAAC,KAAc;IACtC,OAAQ,KAA2B,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC1D,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAkB;IAC5C,IAAI,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,qBAAqB,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/C,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC;YACD,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;QAChD,CAAC;IACL,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,QAAQ,EAAE,CAAC;QACX,IAAI,oBAAoB,CAAC,QAAQ,CAAC;YAAE,OAAO,QAAQ,CAAC;QACpD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACtE,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,CAAC;YACD,QAAQ,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAC9C,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ;QAAE,OAAO;IAEtB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC;QACD,QAAQ,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;IACnD,CAAC;AACL,CAAC"}
@@ -1,18 +0,0 @@
1
- import type { Database } from "bun:sqlite";
2
- import type { BalancerEvent, BalancerEventType } from "./types";
3
- export declare function appendEvent(db: Database, input: {
4
- type: BalancerEventType;
5
- providerID?: string;
6
- alias?: string;
7
- message: string;
8
- metadata?: Record<string, string>;
9
- }): BalancerEvent;
10
- export declare function listEvents(db: Database, limit?: number): {
11
- id: string;
12
- type: BalancerEventType;
13
- providerID: string | undefined;
14
- alias: string | undefined;
15
- message: string;
16
- createdAt: number;
17
- metadata: Record<string, string>;
18
- }[];