@useorgx/openclaw-plugin 0.3.0 → 0.3.1

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 (62) hide show
  1. package/README.md +48 -1
  2. package/dashboard/dist/assets/index-BjqNjHpY.css +1 -0
  3. package/dashboard/dist/assets/index-DCLkU4AM.js +57 -0
  4. package/dashboard/dist/index.html +2 -2
  5. package/dist/adapters/outbox.d.ts +8 -0
  6. package/dist/adapters/outbox.d.ts.map +1 -0
  7. package/dist/adapters/outbox.js +6 -0
  8. package/dist/adapters/outbox.js.map +1 -0
  9. package/dist/agent-context-store.d.ts +24 -0
  10. package/dist/agent-context-store.d.ts.map +1 -0
  11. package/dist/agent-context-store.js +110 -0
  12. package/dist/agent-context-store.js.map +1 -0
  13. package/dist/agent-run-store.d.ts +31 -0
  14. package/dist/agent-run-store.d.ts.map +1 -0
  15. package/dist/agent-run-store.js +158 -0
  16. package/dist/agent-run-store.js.map +1 -0
  17. package/dist/api.d.ts +4 -139
  18. package/dist/api.d.ts.map +1 -1
  19. package/dist/api.js +4 -347
  20. package/dist/api.js.map +1 -1
  21. package/dist/auth-store.d.ts.map +1 -1
  22. package/dist/auth-store.js +27 -1
  23. package/dist/auth-store.js.map +1 -1
  24. package/dist/byok-store.d.ts +11 -0
  25. package/dist/byok-store.d.ts.map +1 -0
  26. package/dist/byok-store.js +94 -0
  27. package/dist/byok-store.js.map +1 -0
  28. package/dist/contracts/client.d.ts +154 -0
  29. package/dist/contracts/client.d.ts.map +1 -0
  30. package/dist/contracts/client.js +422 -0
  31. package/dist/contracts/client.js.map +1 -0
  32. package/dist/contracts/types.d.ts +430 -0
  33. package/dist/contracts/types.d.ts.map +1 -0
  34. package/dist/contracts/types.js +8 -0
  35. package/dist/contracts/types.js.map +1 -0
  36. package/dist/http-handler.d.ts +10 -1
  37. package/dist/http-handler.d.ts.map +1 -1
  38. package/dist/http-handler.js +2256 -98
  39. package/dist/http-handler.js.map +1 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +348 -24
  42. package/dist/index.js.map +1 -1
  43. package/dist/local-openclaw.d.ts.map +1 -1
  44. package/dist/local-openclaw.js +57 -15
  45. package/dist/local-openclaw.js.map +1 -1
  46. package/dist/openclaw.plugin.json +3 -3
  47. package/dist/outbox.d.ts +7 -0
  48. package/dist/outbox.d.ts.map +1 -1
  49. package/dist/outbox.js +94 -6
  50. package/dist/outbox.js.map +1 -1
  51. package/dist/snapshot-store.d.ts +10 -0
  52. package/dist/snapshot-store.d.ts.map +1 -0
  53. package/dist/snapshot-store.js +64 -0
  54. package/dist/snapshot-store.js.map +1 -0
  55. package/dist/types.d.ts +5 -410
  56. package/dist/types.d.ts.map +1 -1
  57. package/dist/types.js +5 -4
  58. package/dist/types.js.map +1 -1
  59. package/openclaw.plugin.json +3 -3
  60. package/package.json +13 -3
  61. package/dashboard/dist/assets/index-BrAP-X_H.css +0 -1
  62. package/dashboard/dist/assets/index-cOk6qwh-.js +0 -56
package/dist/api.js CHANGED
@@ -1,351 +1,8 @@
1
1
  /**
2
- * OrgX API Client
2
+ * Public API client entrypoint.
3
3
  *
4
- * Communicates with the OrgX server for org snapshots, memory sync,
5
- * quality gates, model routing, and entity CRUD.
6
- *
7
- * Uses native fetch — no external dependencies.
4
+ * Kept stable because consumers import `@useorgx/openclaw-plugin/api`.
5
+ * The implementation lives under `src/contracts/client.ts`.
8
6
  */
9
- const REQUEST_TIMEOUT_MS = 10_000;
10
- const USER_AGENT = "OrgX-Clawdbot-Plugin/1.0";
11
- const DECISION_MUTATION_CONCURRENCY = 6;
12
- export class OrgXClient {
13
- apiKey;
14
- baseUrl;
15
- userId;
16
- constructor(apiKey, baseUrl, userId) {
17
- this.apiKey = apiKey;
18
- this.baseUrl = baseUrl.replace(/\/+$/, "");
19
- this.userId = userId || "";
20
- }
21
- setCredentials(input) {
22
- if (typeof input.apiKey === "string") {
23
- this.apiKey = input.apiKey;
24
- }
25
- if (typeof input.userId === "string") {
26
- this.userId = input.userId;
27
- }
28
- if (typeof input.baseUrl === "string" && input.baseUrl.trim().length > 0) {
29
- this.baseUrl = input.baseUrl.replace(/\/+$/, "");
30
- }
31
- }
32
- getBaseUrl() {
33
- return this.baseUrl;
34
- }
35
- // ===========================================================================
36
- // HTTP helpers
37
- // ===========================================================================
38
- async request(method, path, body) {
39
- const url = `${this.baseUrl}${path}`;
40
- const controller = new AbortController();
41
- const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
42
- try {
43
- const headers = {
44
- "Content-Type": "application/json",
45
- "User-Agent": USER_AGENT,
46
- Authorization: `Bearer ${this.apiKey}`,
47
- };
48
- if (this.userId) {
49
- headers["X-Orgx-User-Id"] = this.userId;
50
- }
51
- const response = await fetch(url, {
52
- method,
53
- headers,
54
- body: body ? JSON.stringify(body) : undefined,
55
- signal: controller.signal,
56
- });
57
- if (!response.ok) {
58
- const text = await response.text().catch(() => "");
59
- let detail = "";
60
- if (text) {
61
- try {
62
- const parsed = JSON.parse(text);
63
- const msg = parsed.message ?? parsed.error;
64
- detail = typeof msg === "string" ? msg : text.slice(0, 200);
65
- }
66
- catch {
67
- detail = text.slice(0, 200);
68
- }
69
- }
70
- throw new Error(`${response.status} ${response.statusText}${detail ? `: ${detail}` : ""}`);
71
- }
72
- const contentType = response.headers.get("content-type") ?? "";
73
- if (contentType.includes("application/json")) {
74
- return (await response.json());
75
- }
76
- return (await response.text());
77
- }
78
- catch (err) {
79
- if (err instanceof DOMException && err.name === "AbortError") {
80
- throw new Error(`OrgX API ${method} ${path} timed out after ${REQUEST_TIMEOUT_MS}ms`);
81
- }
82
- throw err;
83
- }
84
- finally {
85
- clearTimeout(timeout);
86
- }
87
- }
88
- get(path) {
89
- return this.request("GET", path);
90
- }
91
- post(path, body) {
92
- return this.request("POST", path, body);
93
- }
94
- patch(path, body) {
95
- return this.request("PATCH", path, body);
96
- }
97
- buildQuery(params) {
98
- const entries = Object.entries(params).filter(([, value]) => value !== undefined && value !== null);
99
- if (entries.length === 0)
100
- return "";
101
- const search = new URLSearchParams();
102
- for (const [key, value] of entries) {
103
- search.set(key, String(value));
104
- }
105
- return `?${search.toString()}`;
106
- }
107
- // ===========================================================================
108
- // Org Snapshot
109
- // ===========================================================================
110
- async getOrgSnapshot() {
111
- // Use the sync endpoint with POST (empty body = pull only)
112
- const resp = await this.post("/api/client/sync", {});
113
- const data = resp.data;
114
- // Transform SyncResponse to OrgSnapshot format
115
- return {
116
- initiatives: data.initiatives.map(i => ({
117
- id: i.id,
118
- title: i.title,
119
- status: i.status,
120
- })),
121
- agents: [], // Not returned by sync endpoint
122
- activeTasks: data.activeTasks.map(t => ({
123
- id: t.id,
124
- title: t.title,
125
- status: t.status,
126
- domain: t.domain,
127
- modelTier: t.modelTier,
128
- })),
129
- pendingDecisions: data.pendingDecisions.map(d => ({
130
- id: d.id,
131
- title: d.title,
132
- urgency: d.urgency,
133
- })),
134
- syncedAt: data.syncedAt,
135
- };
136
- }
137
- // ===========================================================================
138
- // Memory Sync
139
- // ===========================================================================
140
- async syncMemory(payload) {
141
- const response = await this.post("/api/client/sync", payload);
142
- if (response &&
143
- typeof response === "object" &&
144
- "data" in response &&
145
- response.data) {
146
- return response.data;
147
- }
148
- return response;
149
- }
150
- async delegationPreflight(payload) {
151
- return this.post("/api/client/delegation/preflight", payload);
152
- }
153
- // ===========================================================================
154
- // Spawn Guard (Quality Gate + Model Routing)
155
- // ===========================================================================
156
- async checkSpawnGuard(domain, taskId) {
157
- return this.post("/api/client/spawn", {
158
- domain,
159
- taskId,
160
- });
161
- }
162
- // ===========================================================================
163
- // Quality Scores
164
- // ===========================================================================
165
- async recordQuality(score) {
166
- return this.post("/api/client/quality", score);
167
- }
168
- // ===========================================================================
169
- // Entity CRUD
170
- // Uses /api/entities with type in body (NOT per-type REST paths)
171
- // ===========================================================================
172
- /**
173
- * Create an OrgX entity.
174
- * POST /api/entities { type, title, summary, status, initiative_id, ... }
175
- */
176
- async createEntity(type, data) {
177
- const resp = await this.post("/api/entities", {
178
- type,
179
- ...data,
180
- });
181
- return resp.data ?? resp;
182
- }
183
- /**
184
- * Update an OrgX entity.
185
- * PATCH /api/entities { type, id, ...updates }
186
- */
187
- async updateEntity(type, id, updates) {
188
- const resp = await this.patch("/api/entities", {
189
- type,
190
- id,
191
- ...updates,
192
- });
193
- return resp.data ?? resp;
194
- }
195
- /**
196
- * List OrgX entities.
197
- * GET /api/entities?type={type}&status={status}&limit={n}
198
- */
199
- async listEntities(type, filters) {
200
- const params = new URLSearchParams({ type });
201
- if (filters?.status)
202
- params.set("status", filters.status);
203
- if (filters?.limit)
204
- params.set("limit", String(filters.limit));
205
- if (filters?.initiative_id)
206
- params.set("initiative_id", String(filters.initiative_id));
207
- return this.get(`/api/entities?${params.toString()}`);
208
- }
209
- // ===========================================================================
210
- // Reporting Control Plane
211
- // ===========================================================================
212
- async emitActivity(payload) {
213
- const response = await this.post("/api/client/live/activity", payload);
214
- if (response &&
215
- typeof response === "object" &&
216
- "data" in response &&
217
- response.data) {
218
- return response.data;
219
- }
220
- return response;
221
- }
222
- async applyChangeset(payload) {
223
- const response = await this.post("/api/client/live/changesets/apply", payload);
224
- if (response &&
225
- typeof response === "object" &&
226
- "data" in response &&
227
- response.data) {
228
- return response.data;
229
- }
230
- return response;
231
- }
232
- // ===========================================================================
233
- // Live Sessions + Activity + Handoffs
234
- // ===========================================================================
235
- async getLiveSessions(params) {
236
- const query = this.buildQuery({
237
- limit: params?.limit,
238
- initiative: params?.initiative ?? null,
239
- });
240
- return this.get(`/api/client/live/sessions${query}`);
241
- }
242
- async getLiveActivity(params) {
243
- const query = this.buildQuery({
244
- limit: params?.limit,
245
- run: params?.run ?? null,
246
- since: params?.since ?? null,
247
- });
248
- return this.get(`/api/client/live/activity${query}`);
249
- }
250
- async getLiveAgents(params) {
251
- const query = this.buildQuery({
252
- initiative: params?.initiative ?? null,
253
- include_idle: params?.includeIdle ?? undefined,
254
- });
255
- return this.get(`/api/client/live/agents${query}`);
256
- }
257
- async getLiveInitiatives(params) {
258
- const query = this.buildQuery({
259
- id: params?.id ?? null,
260
- limit: params?.limit ?? null,
261
- });
262
- return this.get(`/api/client/live/initiatives${query}`);
263
- }
264
- async getHandoffs() {
265
- return this.get(`/api/client/handoffs`);
266
- }
267
- async runAction(runId, action, payload) {
268
- const encodedRunId = encodeURIComponent(runId);
269
- const encodedAction = encodeURIComponent(action);
270
- return this.post(`/api/client/runs/${encodedRunId}/actions/${encodedAction}`, payload ?? {});
271
- }
272
- async listRunCheckpoints(runId) {
273
- const encodedRunId = encodeURIComponent(runId);
274
- return this.get(`/api/client/runs/${encodedRunId}/checkpoints`);
275
- }
276
- async createRunCheckpoint(runId, payload) {
277
- const encodedRunId = encodeURIComponent(runId);
278
- return this.post(`/api/client/runs/${encodedRunId}/checkpoints`, payload ?? {});
279
- }
280
- async restoreRunCheckpoint(runId, request) {
281
- const encodedRunId = encodeURIComponent(runId);
282
- const encodedCheckpointId = encodeURIComponent(request.checkpointId);
283
- return this.post(`/api/client/runs/${encodedRunId}/checkpoints/${encodedCheckpointId}/restore`, { reason: request.reason });
284
- }
285
- async getLiveDecisions(params) {
286
- const response = await this.listEntities("decision", {
287
- status: params?.status,
288
- limit: params?.limit,
289
- });
290
- const decisions = Array.isArray(response.data) ? response.data : [];
291
- return {
292
- decisions,
293
- total: response.pagination?.total ?? decisions.length,
294
- };
295
- }
296
- async decideDecision(id, action, note) {
297
- const resolvedStatus = action === "approve" ? "approved" : "rejected";
298
- const resolvedAt = new Date().toISOString();
299
- try {
300
- return await this.updateEntity("decision", id, {
301
- status: resolvedStatus,
302
- resolution: resolvedStatus,
303
- resolved_at: resolvedAt,
304
- decided_at: resolvedAt,
305
- decided_by: this.userId || undefined,
306
- note: note ?? undefined,
307
- });
308
- }
309
- catch {
310
- // Fallback for backends that only support generic "resolved" status.
311
- return this.updateEntity("decision", id, {
312
- status: "resolved",
313
- decision_status: resolvedStatus,
314
- resolution: resolvedStatus,
315
- resolved_at: resolvedAt,
316
- decided_at: resolvedAt,
317
- note: note ?? undefined,
318
- });
319
- }
320
- }
321
- async bulkDecideDecisions(ids, action, note) {
322
- const uniqueIds = Array.from(new Set(ids.filter(Boolean)));
323
- const results = new Array(uniqueIds.length);
324
- let cursor = 0;
325
- const worker = async () => {
326
- while (true) {
327
- const index = cursor;
328
- cursor += 1;
329
- if (index >= uniqueIds.length) {
330
- return;
331
- }
332
- const id = uniqueIds[index];
333
- try {
334
- const entity = await this.decideDecision(id, action, note);
335
- results[index] = { id, ok: true, entity };
336
- }
337
- catch (err) {
338
- results[index] = {
339
- id,
340
- ok: false,
341
- error: err instanceof Error ? err.message : String(err),
342
- };
343
- }
344
- }
345
- };
346
- const concurrency = Math.min(DECISION_MUTATION_CONCURRENCY, Math.max(1, uniqueIds.length));
347
- await Promise.all(Array.from({ length: concurrency }, () => worker()));
348
- return results;
349
- }
350
- }
7
+ export * from "./contracts/client.js";
351
8
  //# sourceMappingURL=api.js.map
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,uBAAuB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-store.d.ts","sourceRoot":"","sources":["../src/auth-store.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,iBAAiB,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAyBD,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,iBAAiB,IAAI,mBAAmB,GAAG,IAAI,CAW9D;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,WAAW,CAAC,GAC1D,mBAAmB,CA0BrB;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC;AAcD,wBAAgB,yBAAyB,IAAI,MAAM,CAwBlD;AAGD,wBAAgB,aAAa,IAAI,mBAAmB,GAAG,IAAI,CAE1D;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,WAAW,CAAC,GAC1D,mBAAmB,CAErB;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
1
+ {"version":3,"file":"auth-store.d.ts","sourceRoot":"","sources":["../src/auth-store.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,iBAAiB,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AA6BD,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,iBAAiB,IAAI,mBAAmB,GAAG,IAAI,CAgC9D;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,WAAW,CAAC,GAC1D,mBAAmB,CA6BrB;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC;AAcD,wBAAgB,yBAAyB,IAAI,MAAM,CAwBlD;AAGD,wBAAgB,aAAa,IAAI,mBAAmB,GAAG,IAAI,CAE1D;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,WAAW,CAAC,GAC1D,mBAAmB,CAErB;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
@@ -5,6 +5,9 @@ import { randomUUID } from 'node:crypto';
5
5
  const AUTH_DIR = join(homedir(), '.config', 'useorgx', 'openclaw-plugin');
6
6
  const AUTH_FILE = join(AUTH_DIR, 'auth.json');
7
7
  const INSTALLATION_FILE = join(AUTH_DIR, 'installation.json');
8
+ function isUserScopedApiKey(apiKey) {
9
+ return apiKey.trim().toLowerCase().startsWith('oxk_');
10
+ }
8
11
  function ensureAuthDir() {
9
12
  mkdirSync(AUTH_DIR, { recursive: true, mode: 0o700 });
10
13
  try {
@@ -33,6 +36,26 @@ export function readPersistedAuth() {
33
36
  if (!parsed || typeof parsed.apiKey !== 'string' || parsed.apiKey.trim().length === 0) {
34
37
  return null;
35
38
  }
39
+ if (isUserScopedApiKey(parsed.apiKey) &&
40
+ typeof parsed.userId === 'string' &&
41
+ parsed.userId.trim().length > 0) {
42
+ const sanitized = {
43
+ ...parsed,
44
+ userId: null,
45
+ updatedAt: new Date().toISOString(),
46
+ };
47
+ writeFileSync(AUTH_FILE, JSON.stringify(sanitized, null, 2), {
48
+ mode: 0o600,
49
+ encoding: 'utf8',
50
+ });
51
+ try {
52
+ chmodSync(AUTH_FILE, 0o600);
53
+ }
54
+ catch {
55
+ // best effort
56
+ }
57
+ return sanitized;
58
+ }
36
59
  return parsed;
37
60
  }
38
61
  catch {
@@ -43,11 +66,14 @@ export function writePersistedAuth(input) {
43
66
  ensureAuthDir();
44
67
  const now = new Date().toISOString();
45
68
  const existing = readPersistedAuth();
69
+ const normalizedUserId = isUserScopedApiKey(input.apiKey)
70
+ ? null
71
+ : input.userId ?? null;
46
72
  const next = {
47
73
  apiKey: input.apiKey,
48
74
  source: input.source,
49
75
  installationId: input.installationId,
50
- userId: input.userId ?? null,
76
+ userId: normalizedUserId,
51
77
  workspaceName: input.workspaceName ?? null,
52
78
  keyPrefix: input.keyPrefix ?? null,
53
79
  createdAt: existing?.createdAt ?? now,
@@ -1 +1 @@
1
- {"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../src/auth-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../src/auth-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface ByokKeysRecord {
2
+ openaiApiKey: string | null;
3
+ anthropicApiKey: string | null;
4
+ openrouterApiKey: string | null;
5
+ createdAt: string;
6
+ updatedAt: string;
7
+ }
8
+ export declare function readByokKeys(): ByokKeysRecord | null;
9
+ export declare function writeByokKeys(input: Partial<ByokKeysRecord>): ByokKeysRecord;
10
+ export declare function clearByokKeys(): void;
11
+ //# sourceMappingURL=byok-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"byok-store.d.ts","sourceRoot":"","sources":["../src/byok-store.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AA0BD,wBAAgB,YAAY,IAAI,cAAc,GAAG,IAAI,CAuBpD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CA+B5E;AAED,wBAAgB,aAAa,IAAI,IAAI,CAMpC"}
@@ -0,0 +1,94 @@
1
+ import { chmodSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ const CONFIG_DIR = join(homedir(), ".config", "useorgx", "openclaw-plugin");
5
+ const BYOK_FILE = join(CONFIG_DIR, "byok.json");
6
+ function ensureConfigDir() {
7
+ mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
8
+ try {
9
+ chmodSync(CONFIG_DIR, 0o700);
10
+ }
11
+ catch {
12
+ // best effort
13
+ }
14
+ }
15
+ function parseJson(value) {
16
+ try {
17
+ return JSON.parse(value);
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ function normalizeKey(value) {
24
+ if (typeof value !== "string")
25
+ return null;
26
+ const trimmed = value.trim();
27
+ if (!trimmed)
28
+ return null;
29
+ return trimmed;
30
+ }
31
+ export function readByokKeys() {
32
+ try {
33
+ if (!existsSync(BYOK_FILE))
34
+ return null;
35
+ const parsed = parseJson(readFileSync(BYOK_FILE, "utf8"));
36
+ if (!parsed || typeof parsed !== "object")
37
+ return null;
38
+ const createdAt = typeof parsed.createdAt === "string" && parsed.createdAt.trim().length > 0
39
+ ? parsed.createdAt
40
+ : new Date().toISOString();
41
+ const updatedAt = typeof parsed.updatedAt === "string" && parsed.updatedAt.trim().length > 0
42
+ ? parsed.updatedAt
43
+ : createdAt;
44
+ return {
45
+ openaiApiKey: normalizeKey(parsed.openaiApiKey) ?? null,
46
+ anthropicApiKey: normalizeKey(parsed.anthropicApiKey) ?? null,
47
+ openrouterApiKey: normalizeKey(parsed.openrouterApiKey) ?? null,
48
+ createdAt,
49
+ updatedAt,
50
+ };
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ }
56
+ export function writeByokKeys(input) {
57
+ ensureConfigDir();
58
+ const now = new Date().toISOString();
59
+ const existing = readByokKeys();
60
+ const has = (key) => Object.prototype.hasOwnProperty.call(input, key);
61
+ const next = {
62
+ openaiApiKey: has("openaiApiKey")
63
+ ? normalizeKey(input.openaiApiKey)
64
+ : existing?.openaiApiKey ?? null,
65
+ anthropicApiKey: has("anthropicApiKey")
66
+ ? normalizeKey(input.anthropicApiKey)
67
+ : existing?.anthropicApiKey ?? null,
68
+ openrouterApiKey: has("openrouterApiKey")
69
+ ? normalizeKey(input.openrouterApiKey)
70
+ : existing?.openrouterApiKey ?? null,
71
+ createdAt: existing?.createdAt ?? now,
72
+ updatedAt: now,
73
+ };
74
+ writeFileSync(BYOK_FILE, JSON.stringify(next, null, 2), {
75
+ mode: 0o600,
76
+ encoding: "utf8",
77
+ });
78
+ try {
79
+ chmodSync(BYOK_FILE, 0o600);
80
+ }
81
+ catch {
82
+ // best effort
83
+ }
84
+ return next;
85
+ }
86
+ export function clearByokKeys() {
87
+ try {
88
+ rmSync(BYOK_FILE, { force: true });
89
+ }
90
+ catch {
91
+ // best effort
92
+ }
93
+ }
94
+ //# sourceMappingURL=byok-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"byok-store.js","sourceRoot":"","sources":["../src/byok-store.ts"],"names":[],"mappings":"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"}