@ultrst-armada/kloks 1.4.2 → 1.4.4
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/package.json +8 -20
- package/packages/audio-midi/dist/index.d.ts +23 -14
- package/packages/audio-midi/dist/index.js +170 -45
- package/packages/audio-midi/kloks.manifest.json +8 -8
- package/packages/audio-midi/package.json +1 -1
- package/packages/backend/dist/{WebSocketTransport-CxUzUfwl.d.ts → WebSocketTransport-CHmkJ0tj.d.ts} +109 -2
- package/packages/backend/dist/auth/index.js +6 -6
- package/packages/backend/dist/chunk-5336MTXD.js +597 -0
- package/packages/backend/dist/{chunk-T3NYNBDC.js → chunk-5E6JRFUH.js} +201 -3
- package/packages/backend/dist/{chunk-XTWHEZWS.js → chunk-7B24ZWB3.js} +16 -1
- package/packages/backend/dist/{chunk-DZ4ZGIZM.js → chunk-JXUSBKJ2.js} +91 -654
- package/packages/backend/dist/{chunk-FO6WYLW4.js → chunk-KI3LHMUN.js} +133 -46
- package/packages/backend/dist/{chunk-4ZFXEFOE.js → chunk-MPYASJ5A.js} +2 -87
- package/packages/backend/dist/{chunk-KX3OTBQ3.js → chunk-OZDYAEH4.js} +0 -114
- package/packages/backend/dist/chunk-TY32TUNI.js +376 -0
- package/packages/backend/dist/chunk-VDROUXFT.js +116 -0
- package/packages/backend/dist/chunk-ZDH4XI7W.js +140 -0
- package/packages/backend/dist/client/index.d.ts +2 -3
- package/packages/backend/dist/connectivity/index.d.ts +18 -6
- package/packages/backend/dist/connectivity/index.js +3 -7
- package/packages/backend/dist/index.d.ts +3 -6
- package/packages/backend/dist/index.js +101 -91
- package/packages/backend/dist/krnl-services.d.ts +84 -7
- package/packages/backend/dist/krnl-services.js +40 -12
- package/packages/backend/dist/services/index.d.ts +4 -6
- package/packages/backend/dist/services/index.js +2 -2
- package/packages/backend/dist/srkl/index.js +6 -4
- package/packages/backend/dist/storage/index.js +7 -7
- package/packages/backend/dist/workspace/index.js +2 -2
- package/packages/backend/kloks.manifest.json +47 -45
- package/packages/backend/package.json +3 -8
- package/packages/client/package.json +1 -1
- package/packages/contracts/dist/index.js +5 -10
- package/packages/contracts/package.json +1 -1
- package/packages/functions/dist/index.d.ts +12 -1
- package/packages/functions/dist/index.js +132 -24
- package/packages/functions/package.json +1 -1
- package/packages/orchestrations/dist/index.d.ts +33 -31
- package/packages/orchestrations/dist/index.js +81 -203
- package/packages/orchestrations/kloks.manifest.json +10 -2
- package/packages/orchestrations/package.json +2 -2
- package/packages/services/dist/index.d.ts +51 -1
- package/packages/services/dist/index.js +249 -51
- package/packages/services/kloks.manifest.json +69 -33
- package/packages/services/package.json +1 -1
- package/packages/state-graph/dist/{BaseGraph-BvkSYOTw.d.ts → BaseGraph-Bd5F1NMP.d.ts} +1 -1
- package/packages/state-graph/dist/{BaseNode-DTcd3K1B.d.ts → BaseNode-DKpGXMy8.d.ts} +6 -0
- package/packages/state-graph/dist/{CompatibilityMatrix-Dj-tCWUA.d.ts → CompatibilityMatrix-TiEJ3j3_.d.ts} +1 -1
- package/packages/state-graph/dist/domain/index.d.ts +3 -3
- package/packages/state-graph/dist/domain/index.js +0 -1
- package/packages/state-graph/dist/index.d.ts +40 -8
- package/packages/state-graph/dist/index.js +193 -44
- package/packages/state-graph/dist/rules/index.d.ts +3 -3
- package/packages/state-graph/dist/rules/index.js +0 -1
- package/packages/state-graph/dist/spatial/index.d.ts +4 -4
- package/packages/state-graph/dist/spatial/index.js +0 -1
- package/packages/state-graph/dist/state/index.js +1 -3
- package/packages/state-graph/dist/store/index.d.ts +4 -4
- package/packages/state-graph/dist/store/index.js +0 -1
- package/packages/state-graph/dist/{types-VDoc4FIc.d.ts → types-D5kQSa65.d.ts} +2 -2
- package/packages/state-graph/kloks.manifest.json +26 -10
- package/packages/state-graph/package.json +2 -8
- package/packages/backend/dist/IdempotencyManager-B5MjK871.d.ts +0 -16
- package/packages/backend/dist/chunk-25Y7AVTP.js +0 -55
- package/packages/backend/dist/chunk-3EPY34R6.js +0 -67
- package/packages/backend/dist/chunk-7KNGX522.js +0 -220
- package/packages/backend/dist/chunk-FZKBTF34.js +0 -15
- package/packages/backend/dist/chunk-QGHDJGYS.js +0 -92
- package/packages/backend/dist/chunk-UPFKBBQI.js +0 -138
- package/packages/backend/dist/chunk-VQEFULWT.js +0 -88
- package/packages/backend/dist/execution/index.d.ts +0 -124
- package/packages/backend/dist/execution/index.js +0 -20
- package/packages/backend/dist/types-BERZJ93O.d.ts +0 -110
- package/packages/state-graph/dist/chunk-3RG5ZIWI.js +0 -10
- package/packages/state-graph/dist/chunk-Q5I42UX7.js +0 -0
- package/packages/state-graph/dist/chunk-ZTHBPV24.js +0 -267
- package/packages/state-graph/dist/execution/index.d.ts +0 -152
- package/packages/state-graph/dist/execution/index.js +0 -16
- /package/packages/state-graph/dist/{chunk-SHIBCPGQ.js → chunk-EW4ACSZB.js} +0 -0
|
@@ -1,22 +1,33 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
2
|
+
getSrklAccounts,
|
|
3
|
+
srklListBackblazeBuckets
|
|
4
|
+
} from "./chunk-VDROUXFT.js";
|
|
5
5
|
import {
|
|
6
6
|
StorageAdapterFactory
|
|
7
7
|
} from "./chunk-J2J24JVC.js";
|
|
8
8
|
import {
|
|
9
|
+
b2ListBuckets
|
|
10
|
+
} from "./chunk-4QEMALXF.js";
|
|
11
|
+
import {
|
|
12
|
+
createWorkspace,
|
|
13
|
+
deleteWorkspace,
|
|
14
|
+
findUserWorkspace,
|
|
9
15
|
formatCanonicalWorkspaceFolderName,
|
|
10
|
-
|
|
11
|
-
|
|
16
|
+
getWorkspaces,
|
|
17
|
+
queryUnifiedDb,
|
|
18
|
+
sanitizeWorkspaceName,
|
|
19
|
+
updateWorkspace
|
|
20
|
+
} from "./chunk-JXUSBKJ2.js";
|
|
12
21
|
import {
|
|
13
22
|
RateLimiter,
|
|
14
|
-
SessionManager
|
|
15
|
-
|
|
23
|
+
SessionManager,
|
|
24
|
+
loginSystemUser,
|
|
25
|
+
resolveUserFromToken
|
|
26
|
+
} from "./chunk-ZDH4XI7W.js";
|
|
16
27
|
import {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
} from "./chunk-
|
|
28
|
+
createService,
|
|
29
|
+
createServiceDefinition
|
|
30
|
+
} from "./chunk-TY32TUNI.js";
|
|
20
31
|
|
|
21
32
|
// src/krnl-services.ts
|
|
22
33
|
var AuthServiceDefinition = createServiceDefinition({
|
|
@@ -35,6 +46,16 @@ var AuthServiceDefinition = createServiceDefinition({
|
|
|
35
46
|
return sm.createSession(input.userId, input.role ?? "user");
|
|
36
47
|
}
|
|
37
48
|
},
|
|
49
|
+
login: {
|
|
50
|
+
id: "AuthService.login",
|
|
51
|
+
name: "login",
|
|
52
|
+
handler: async (input) => loginSystemUser(input.email, input.password, Boolean(input.isAdmin), (sql, params) => queryUnifiedDb(sql, params, input.env))
|
|
53
|
+
},
|
|
54
|
+
resolveUser: {
|
|
55
|
+
id: "AuthService.resolveUser",
|
|
56
|
+
name: "resolveUser",
|
|
57
|
+
handler: async (input) => resolveUserFromToken(input.tokenOrUserId, (sql, params) => queryUnifiedDb(sql, params, input.env))
|
|
58
|
+
},
|
|
38
59
|
checkRateLimit: {
|
|
39
60
|
id: "AuthService.checkRateLimit",
|
|
40
61
|
name: "checkRateLimit",
|
|
@@ -65,6 +86,11 @@ var StorageServiceDefinition = createServiceDefinition({
|
|
|
65
86
|
name: "StorageService",
|
|
66
87
|
version: "1.0.0",
|
|
67
88
|
operations: {
|
|
89
|
+
listBackblazeBuckets: {
|
|
90
|
+
id: "StorageService.listBackblazeBuckets",
|
|
91
|
+
name: "listBackblazeBuckets",
|
|
92
|
+
handler: async (input) => b2ListBuckets(input.keyId, input.applicationKey)
|
|
93
|
+
},
|
|
68
94
|
resolveAdapterType: {
|
|
69
95
|
id: "StorageService.resolveAdapterType",
|
|
70
96
|
name: "resolveAdapterType",
|
|
@@ -101,6 +127,31 @@ var WorkspaceServiceDefinition = createServiceDefinition({
|
|
|
101
127
|
name: "WorkspaceService",
|
|
102
128
|
version: "1.0.0",
|
|
103
129
|
operations: {
|
|
130
|
+
listWorkspaces: {
|
|
131
|
+
id: "WorkspaceService.listWorkspaces",
|
|
132
|
+
name: "listWorkspaces",
|
|
133
|
+
handler: async (input) => getWorkspaces(input.userId, input.env)
|
|
134
|
+
},
|
|
135
|
+
findWorkspace: {
|
|
136
|
+
id: "WorkspaceService.findWorkspace",
|
|
137
|
+
name: "findWorkspace",
|
|
138
|
+
handler: async (input) => findUserWorkspace(input.workspaceId, input.env)
|
|
139
|
+
},
|
|
140
|
+
createWorkspace: {
|
|
141
|
+
id: "WorkspaceService.createWorkspace",
|
|
142
|
+
name: "createWorkspace",
|
|
143
|
+
handler: async (input) => createWorkspace(input.userId, input.workspace, input.env)
|
|
144
|
+
},
|
|
145
|
+
updateWorkspace: {
|
|
146
|
+
id: "WorkspaceService.updateWorkspace",
|
|
147
|
+
name: "updateWorkspace",
|
|
148
|
+
handler: async (input) => updateWorkspace(input.userId, input.params, input.env)
|
|
149
|
+
},
|
|
150
|
+
deleteWorkspace: {
|
|
151
|
+
id: "WorkspaceService.deleteWorkspace",
|
|
152
|
+
name: "deleteWorkspace",
|
|
153
|
+
handler: async (input) => deleteWorkspace(input.userId, input.workspaceId, input.env)
|
|
154
|
+
},
|
|
104
155
|
validateWorkspaceConfig: {
|
|
105
156
|
id: "WorkspaceService.validateWorkspaceConfig",
|
|
106
157
|
name: "validateWorkspaceConfig",
|
|
@@ -165,39 +216,6 @@ var ControlPlaneServiceFacade = {
|
|
|
165
216
|
return controlPlaneServiceInstance.call(op, input);
|
|
166
217
|
}
|
|
167
218
|
};
|
|
168
|
-
var ExecutionServiceDefinition = createServiceDefinition({
|
|
169
|
-
id: "kloks.backend.execution",
|
|
170
|
-
name: "ExecutionService",
|
|
171
|
-
version: "1.0.0",
|
|
172
|
-
operations: {
|
|
173
|
-
createWorkerBoundary: {
|
|
174
|
-
id: "ExecutionService.createWorkerBoundary",
|
|
175
|
-
name: "createWorkerBoundary",
|
|
176
|
-
handler: async (input) => {
|
|
177
|
-
const facade = new ExecutableBackendFacade(input.name);
|
|
178
|
-
const worker = new WorkerExecutionBoundary(`${input.name}Worker`, facade);
|
|
179
|
-
return {
|
|
180
|
-
facadeName: facade.name,
|
|
181
|
-
workerReady: Boolean(worker)
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
var executionServiceInstance = createService(ExecutionServiceDefinition);
|
|
188
|
-
var ExecutionServiceFacade = {
|
|
189
|
-
id: ExecutionServiceDefinition.id,
|
|
190
|
-
name: ExecutionServiceDefinition.name,
|
|
191
|
-
version: ExecutionServiceDefinition.version,
|
|
192
|
-
runtime: "server",
|
|
193
|
-
deployment: "local",
|
|
194
|
-
definition: ExecutionServiceDefinition,
|
|
195
|
-
createInstance: () => createService(ExecutionServiceDefinition),
|
|
196
|
-
execute: async (op, input) => {
|
|
197
|
-
await executionServiceInstance.start();
|
|
198
|
-
return executionServiceInstance.call(op, input);
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
219
|
var DatabaseServiceDefinition = createServiceDefinition({
|
|
202
220
|
id: "kloks.backend.database",
|
|
203
221
|
name: "DatabaseService",
|
|
@@ -259,6 +277,61 @@ var GeminiServiceFacade = {
|
|
|
259
277
|
return geminiServiceInstance.call(op, input);
|
|
260
278
|
}
|
|
261
279
|
};
|
|
280
|
+
var krnlAuthServiceDefinition = AuthServiceDefinition;
|
|
281
|
+
var krnlAuthServiceFacade = AuthServiceFacade;
|
|
282
|
+
var krnlStorageServiceDefinition = StorageServiceDefinition;
|
|
283
|
+
var krnlStorageServiceFacade = StorageServiceFacade;
|
|
284
|
+
var krnlWorkspaceServiceDefinition = WorkspaceServiceDefinition;
|
|
285
|
+
var krnlWorkspaceServiceFacade = WorkspaceServiceFacade;
|
|
286
|
+
var krnlControlPlaneServiceDefinition = ControlPlaneServiceDefinition;
|
|
287
|
+
var krnlControlPlaneServiceFacade = ControlPlaneServiceFacade;
|
|
288
|
+
var krnlDatabaseServiceDefinition = DatabaseServiceDefinition;
|
|
289
|
+
var krnlDatabaseServiceFacade = DatabaseServiceFacade;
|
|
290
|
+
var krnlGeminiServiceDefinition = GeminiServiceDefinition;
|
|
291
|
+
var krnlGeminiServiceFacade = GeminiServiceFacade;
|
|
292
|
+
var SrklServiceDefinition = createServiceDefinition({
|
|
293
|
+
id: "kloks.backend.srkl",
|
|
294
|
+
name: "SrklService",
|
|
295
|
+
version: "1.0.0",
|
|
296
|
+
operations: {
|
|
297
|
+
getAccounts: {
|
|
298
|
+
id: "SrklService.getAccounts",
|
|
299
|
+
name: "getAccounts",
|
|
300
|
+
handler: async (input) => getSrklAccounts(input.userId, input.service, (sql, params) => queryUnifiedDb(sql, params, input.env))
|
|
301
|
+
},
|
|
302
|
+
listBackblazeBuckets: {
|
|
303
|
+
id: "SrklService.listBackblazeBuckets",
|
|
304
|
+
name: "listBackblazeBuckets",
|
|
305
|
+
handler: async (input) => {
|
|
306
|
+
let keyId = input.keyId;
|
|
307
|
+
let applicationKey = input.applicationKey;
|
|
308
|
+
if ((!keyId || !applicationKey) && input.accountId && input.userId) {
|
|
309
|
+
const accounts = await getSrklAccounts(input.userId, "backblaze", (sql, params) => queryUnifiedDb(sql, params, input.env));
|
|
310
|
+
const account = accounts.accounts.find((item) => item.id === input.accountId);
|
|
311
|
+
keyId = account?.credentials?.keyId || account?.credentials?.b2KeyId;
|
|
312
|
+
applicationKey = account?.credentials?.applicationKey || account?.credentials?.b2ApplicationKey;
|
|
313
|
+
}
|
|
314
|
+
return srklListBackblazeBuckets(keyId, applicationKey, void 0, void 0, input.userId, (sql, params) => queryUnifiedDb(sql, params, input.env));
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
var srklServiceInstance = createService(SrklServiceDefinition);
|
|
320
|
+
var SrklServiceFacade = {
|
|
321
|
+
id: SrklServiceDefinition.id,
|
|
322
|
+
name: SrklServiceDefinition.name,
|
|
323
|
+
version: SrklServiceDefinition.version,
|
|
324
|
+
runtime: "server",
|
|
325
|
+
deployment: "remote",
|
|
326
|
+
definition: SrklServiceDefinition,
|
|
327
|
+
createInstance: () => createService(SrklServiceDefinition),
|
|
328
|
+
execute: async (op, input) => {
|
|
329
|
+
await srklServiceInstance.start();
|
|
330
|
+
return srklServiceInstance.call(op, input);
|
|
331
|
+
}
|
|
332
|
+
};
|
|
333
|
+
var krnlSrklServiceDefinition = SrklServiceDefinition;
|
|
334
|
+
var krnlSrklServiceFacade = SrklServiceFacade;
|
|
262
335
|
|
|
263
336
|
export {
|
|
264
337
|
AuthServiceDefinition,
|
|
@@ -269,10 +342,24 @@ export {
|
|
|
269
342
|
WorkspaceServiceFacade,
|
|
270
343
|
ControlPlaneServiceDefinition,
|
|
271
344
|
ControlPlaneServiceFacade,
|
|
272
|
-
ExecutionServiceDefinition,
|
|
273
|
-
ExecutionServiceFacade,
|
|
274
345
|
DatabaseServiceDefinition,
|
|
275
346
|
DatabaseServiceFacade,
|
|
276
347
|
GeminiServiceDefinition,
|
|
277
|
-
GeminiServiceFacade
|
|
348
|
+
GeminiServiceFacade,
|
|
349
|
+
krnlAuthServiceDefinition,
|
|
350
|
+
krnlAuthServiceFacade,
|
|
351
|
+
krnlStorageServiceDefinition,
|
|
352
|
+
krnlStorageServiceFacade,
|
|
353
|
+
krnlWorkspaceServiceDefinition,
|
|
354
|
+
krnlWorkspaceServiceFacade,
|
|
355
|
+
krnlControlPlaneServiceDefinition,
|
|
356
|
+
krnlControlPlaneServiceFacade,
|
|
357
|
+
krnlDatabaseServiceDefinition,
|
|
358
|
+
krnlDatabaseServiceFacade,
|
|
359
|
+
krnlGeminiServiceDefinition,
|
|
360
|
+
krnlGeminiServiceFacade,
|
|
361
|
+
SrklServiceDefinition,
|
|
362
|
+
SrklServiceFacade,
|
|
363
|
+
krnlSrklServiceDefinition,
|
|
364
|
+
krnlSrklServiceFacade
|
|
278
365
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
RateLimiter,
|
|
3
3
|
SessionManager
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ZDH4XI7W.js";
|
|
5
5
|
|
|
6
6
|
// src/auth/PasswordHasher.ts
|
|
7
7
|
var bcrypt = null;
|
|
@@ -172,94 +172,9 @@ var AdminGuard = class _AdminGuard extends SkipoBase2 {
|
|
|
172
172
|
}
|
|
173
173
|
};
|
|
174
174
|
|
|
175
|
-
// src/auth/UnifiedAuthCore.ts
|
|
176
|
-
import bcrypt2 from "bcryptjs";
|
|
177
|
-
async function loginSystemUser(email, rawPass, isAdmin, queryDb) {
|
|
178
|
-
const normEmail = (email || "").trim().toLowerCase();
|
|
179
|
-
const password = (rawPass || "").trim();
|
|
180
|
-
if (!normEmail || !password) {
|
|
181
|
-
return { success: false, status: 400, error: "Email and password are required" };
|
|
182
|
-
}
|
|
183
|
-
try {
|
|
184
|
-
if (isAdmin) {
|
|
185
|
-
const credRes = await queryDb(`SELECT * FROM "ultrst-credentials" WHERE id = 'system' LIMIT 1`, []);
|
|
186
|
-
if (credRes.rows.length > 0) {
|
|
187
|
-
const cred = credRes.rows[0];
|
|
188
|
-
const matchEmail = (cred.admin_email || "").toLowerCase() === normEmail;
|
|
189
|
-
const matchPass = cred.admin_password === password || cred.admin_password && bcrypt2.compareSync(password, cred.admin_password);
|
|
190
|
-
if (matchEmail && matchPass) {
|
|
191
|
-
return {
|
|
192
|
-
success: true,
|
|
193
|
-
status: 200,
|
|
194
|
-
token: `adm_${Date.now()}_${Math.random().toString(36).slice(2)}`,
|
|
195
|
-
user: { id: "admin_sys", email: cred.admin_email, username: "System Admin", name: "System Admin", role: "admin", status: "ACTIVE" }
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
const uRes = await queryDb(`SELECT * FROM "ultrst-users" WHERE LOWER(email) = $1 LIMIT 1`, [normEmail]);
|
|
201
|
-
if (uRes.rows.length === 0) {
|
|
202
|
-
return { success: false, status: 401, error: "Invalid email or password" };
|
|
203
|
-
}
|
|
204
|
-
const user = uRes.rows[0];
|
|
205
|
-
const hash = user.password_hash || "";
|
|
206
|
-
let isMatch = false;
|
|
207
|
-
if (hash.startsWith("$2a$") || hash.startsWith("$2b$")) {
|
|
208
|
-
isMatch = bcrypt2.compareSync(password, hash);
|
|
209
|
-
} else {
|
|
210
|
-
isMatch = hash === password;
|
|
211
|
-
}
|
|
212
|
-
if (!isMatch) {
|
|
213
|
-
return { success: false, status: 401, error: "Invalid email or password" };
|
|
214
|
-
}
|
|
215
|
-
if (isAdmin && user.role !== "admin") {
|
|
216
|
-
return { success: false, status: 403, error: "Insufficient administrative privileges" };
|
|
217
|
-
}
|
|
218
|
-
return {
|
|
219
|
-
success: true,
|
|
220
|
-
status: 200,
|
|
221
|
-
token: `usr_${Date.now()}_${Math.random().toString(36).slice(2)}`,
|
|
222
|
-
user: {
|
|
223
|
-
id: user.id,
|
|
224
|
-
email: user.email,
|
|
225
|
-
username: user.username || user.name || user.email.split("@")[0],
|
|
226
|
-
name: user.name || user.username || "Ecosystem User",
|
|
227
|
-
role: user.role || "user",
|
|
228
|
-
status: user.status || "ACTIVE",
|
|
229
|
-
appProfiles: typeof user.app_profiles === "string" ? JSON.parse(user.app_profiles) : user.app_profiles || {}
|
|
230
|
-
}
|
|
231
|
-
};
|
|
232
|
-
} catch (err) {
|
|
233
|
-
return { success: false, status: 500, error: err.message };
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
async function resolveUserFromToken(tokenOrUserId, queryDb) {
|
|
237
|
-
if (!tokenOrUserId) return null;
|
|
238
|
-
let targetId = tokenOrUserId;
|
|
239
|
-
if (targetId.startsWith("Bearer ")) targetId = targetId.slice(7).trim();
|
|
240
|
-
if (targetId.startsWith("sess::")) {
|
|
241
|
-
const parts = targetId.split("::");
|
|
242
|
-
if (parts[1]) targetId = parts[1];
|
|
243
|
-
}
|
|
244
|
-
const res = await queryDb(`SELECT * FROM "ultrst-users" WHERE id = $1 OR LOWER(email) = LOWER($1) LIMIT 1`, [targetId]);
|
|
245
|
-
if (res.rows.length === 0) return null;
|
|
246
|
-
const u = res.rows[0];
|
|
247
|
-
return {
|
|
248
|
-
id: u.id,
|
|
249
|
-
email: u.email,
|
|
250
|
-
username: u.username || u.name || u.email.split("@")[0],
|
|
251
|
-
name: u.name || u.username || "Ecosystem User",
|
|
252
|
-
role: u.role || "user",
|
|
253
|
-
status: u.status || "ACTIVE",
|
|
254
|
-
appProfiles: typeof u.app_profiles === "string" ? JSON.parse(u.app_profiles) : u.app_profiles || {}
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
|
|
258
175
|
export {
|
|
259
176
|
PasswordHasher,
|
|
260
177
|
BaseAccountProvider,
|
|
261
178
|
LocalAccountProvider,
|
|
262
|
-
AdminGuard
|
|
263
|
-
loginSystemUser,
|
|
264
|
-
resolveUserFromToken
|
|
179
|
+
AdminGuard
|
|
265
180
|
};
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
b2ListBuckets
|
|
3
|
-
} from "./chunk-4QEMALXF.js";
|
|
4
|
-
|
|
5
1
|
// src/srkl/SrklClient.ts
|
|
6
2
|
var CANONICAL_SRKL_URL = "https://srkl-engine.vercel.app";
|
|
7
3
|
var SrklClient = class {
|
|
@@ -144,113 +140,6 @@ function createSrklClient(options = {}) {
|
|
|
144
140
|
return new SrklClient(options);
|
|
145
141
|
}
|
|
146
142
|
|
|
147
|
-
// src/srkl/SrklDiscoveryService.ts
|
|
148
|
-
var cachedSrklUrl = null;
|
|
149
|
-
async function getPrimarySrklDeploymentUrl(queryDb) {
|
|
150
|
-
if (cachedSrklUrl && Date.now() < cachedSrklUrl.expiresAt) return cachedSrklUrl.url;
|
|
151
|
-
if (queryDb) {
|
|
152
|
-
try {
|
|
153
|
-
const res = await queryDb(
|
|
154
|
-
`SELECT url FROM "ultrst-srkl-deployments" WHERE is_active = true ORDER BY is_primary DESC, priority DESC, created_at ASC LIMIT 1`,
|
|
155
|
-
[]
|
|
156
|
-
);
|
|
157
|
-
if (res.rows.length > 0 && res.rows[0].url) {
|
|
158
|
-
const url = res.rows[0].url.trim().replace(/\/+$/, "");
|
|
159
|
-
cachedSrklUrl = { url, expiresAt: Date.now() + 10 * 60 * 1e3 };
|
|
160
|
-
return url;
|
|
161
|
-
}
|
|
162
|
-
} catch {
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
const fallback = "https://srkl-engine.vercel.app";
|
|
166
|
-
cachedSrklUrl = { url: fallback, expiresAt: Date.now() + 10 * 60 * 1e3 };
|
|
167
|
-
return fallback;
|
|
168
|
-
}
|
|
169
|
-
async function getSrklAccounts(userId, service2, queryDb) {
|
|
170
|
-
const srklUrl = await getPrimarySrklDeploymentUrl(queryDb);
|
|
171
|
-
const accounts = [];
|
|
172
|
-
const seenKeys = /* @__PURE__ */ new Set();
|
|
173
|
-
if (queryDb && userId) {
|
|
174
|
-
try {
|
|
175
|
-
const uRes = await queryDb(`SELECT app_profiles FROM "ultrst-users" WHERE id = $1 LIMIT 1`, [userId]);
|
|
176
|
-
if (uRes.rows.length > 0) {
|
|
177
|
-
const p = typeof uRes.rows[0].app_profiles === "string" ? JSON.parse(uRes.rows[0].app_profiles) : uRes.rows[0].app_profiles || {};
|
|
178
|
-
const pool = [
|
|
179
|
-
...p.srkl?.storage_connections || [],
|
|
180
|
-
...p.depm?.storage_connections || [],
|
|
181
|
-
...p.qwnsr?.storage_connections || [],
|
|
182
|
-
...p.loky?.storage_connections || []
|
|
183
|
-
];
|
|
184
|
-
for (const conn of pool) {
|
|
185
|
-
if (service2 && !conn.provider?.toLowerCase().includes(service2.toLowerCase())) continue;
|
|
186
|
-
const kId = (conn.b2KeyId || conn.keyId || conn.accessKeyId || "").trim();
|
|
187
|
-
const key = kId ? `key:${kId}` : `id:${conn.id}`;
|
|
188
|
-
if (!seenKeys.has(key)) {
|
|
189
|
-
seenKeys.add(key);
|
|
190
|
-
accounts.push({
|
|
191
|
-
id: conn.id,
|
|
192
|
-
name: conn.label || conn.id,
|
|
193
|
-
provider: conn.provider,
|
|
194
|
-
serviceId: conn.provider,
|
|
195
|
-
credentials: {
|
|
196
|
-
keyId: conn.b2KeyId || conn.keyId,
|
|
197
|
-
applicationKey: conn.b2ApplicationKey || conn.appKey,
|
|
198
|
-
bucketName: conn.b2BucketName || conn.bucketName,
|
|
199
|
-
region: conn.b2Region || conn.region,
|
|
200
|
-
endpoint: conn.b2Endpoint || conn.endpoint
|
|
201
|
-
}
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
} catch {
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
try {
|
|
210
|
-
const res = await fetch(`${srklUrl}/api/ecosystem/services`, {
|
|
211
|
-
headers: { "x-user-id": userId, Accept: "application/json" },
|
|
212
|
-
signal: AbortSignal.timeout(5e3)
|
|
213
|
-
});
|
|
214
|
-
if (res.ok) {
|
|
215
|
-
const data = await res.json();
|
|
216
|
-
const list = Array.isArray(data.services) ? data.services : [];
|
|
217
|
-
for (const item of list) {
|
|
218
|
-
const sId = String(item.serviceId || item.id || "").toLowerCase();
|
|
219
|
-
if (service2 && !sId.includes(service2.toLowerCase())) continue;
|
|
220
|
-
const kId = (item.credentials?.keyId || item.credentials?.b2KeyId || "").trim();
|
|
221
|
-
const key = kId ? `key:${kId}` : `id:${item.id}`;
|
|
222
|
-
if (!seenKeys.has(key)) {
|
|
223
|
-
seenKeys.add(key);
|
|
224
|
-
accounts.push(item);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
} catch {
|
|
229
|
-
}
|
|
230
|
-
return { success: true, deploymentUrl: srklUrl, count: accounts.length, accounts };
|
|
231
|
-
}
|
|
232
|
-
async function srklListBackblazeBuckets(keyId, applicationKey, _bucketId, _bucketName, userId, queryDb) {
|
|
233
|
-
let resolvedKeyId = (keyId || "").trim();
|
|
234
|
-
let resolvedAppKey = (applicationKey || "").trim();
|
|
235
|
-
if ((!resolvedKeyId || !resolvedAppKey) && userId && queryDb) {
|
|
236
|
-
const accountsRes = await getSrklAccounts(userId, "backblaze", queryDb);
|
|
237
|
-
const matched = accountsRes.accounts.find((a) => (a.credentials?.keyId || a.credentials?.b2KeyId) === resolvedKeyId) || accountsRes.accounts[0];
|
|
238
|
-
if (matched) {
|
|
239
|
-
resolvedKeyId = matched.credentials?.keyId || matched.credentials?.b2KeyId || resolvedKeyId;
|
|
240
|
-
resolvedAppKey = matched.credentials?.applicationKey || matched.credentials?.b2ApplicationKey || resolvedAppKey;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
if (!resolvedKeyId || !resolvedAppKey) {
|
|
244
|
-
return { success: false, buckets: [], error: "Backblaze B2 Key ID and Application Key are required" };
|
|
245
|
-
}
|
|
246
|
-
try {
|
|
247
|
-
const buckets = await b2ListBuckets(resolvedKeyId, resolvedAppKey);
|
|
248
|
-
return { success: true, buckets };
|
|
249
|
-
} catch (err) {
|
|
250
|
-
return { success: false, buckets: [], error: err.message };
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
143
|
// src/srkl/useSrklServices.ts
|
|
255
144
|
import { useState, useEffect, useCallback, useMemo, useRef } from "react";
|
|
256
145
|
function useSrklServices(options) {
|
|
@@ -627,9 +516,6 @@ export {
|
|
|
627
516
|
CANONICAL_SRKL_URL,
|
|
628
517
|
SrklClient,
|
|
629
518
|
createSrklClient,
|
|
630
|
-
getPrimarySrklDeploymentUrl,
|
|
631
|
-
getSrklAccounts,
|
|
632
|
-
srklListBackblazeBuckets,
|
|
633
519
|
useSrklServices,
|
|
634
520
|
hexToBytes,
|
|
635
521
|
decryptVaultBufferInBrowser,
|