@wairon/cli 5.1.1-dev.65 → 5.1.1-dev.67

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/dist/cli/index.js CHANGED
@@ -65,7 +65,7 @@ var init_defaults = __esm({
65
65
  copilot: ".github/prompts",
66
66
  codex: ".codex/agents"
67
67
  };
68
- WAIRON_VERSION = "5.1.1-dev.65";
68
+ WAIRON_VERSION = "5.1.1-dev.67";
69
69
  GITHUB_REPO = "SYW-Apps/Waffle-AIron";
70
70
  SUPPORTED_ALIASES = ["wai"];
71
71
  SCAN_EXCLUDE_DIRS = /* @__PURE__ */ new Set([
@@ -37582,13 +37582,29 @@ function storeInstallGlobalPackArchive(archive, name) {
37582
37582
  descriptor.tier = "instance";
37583
37583
  return descriptor;
37584
37584
  }
37585
+ function declaredName2(loadRef, baseRoot, scope) {
37586
+ const d = probe(loadRef, baseRoot, scope, loadRef);
37587
+ return d.error ? void 0 : d.name;
37588
+ }
37589
+ function pickByName(candidates, name, fileOf, manifestOf) {
37590
+ const byFile = candidates.find((c) => stem(fileOf(c)) === name || path53.basename(fileOf(c)) === name);
37591
+ if (byFile !== void 0) return byFile;
37592
+ const byManifest = candidates.filter((c) => manifestOf(c) === name);
37593
+ if (byManifest.length > 1) {
37594
+ throw new Error(
37595
+ `Pack name "${name}" is ambiguous: ${byManifest.map((c) => `"${fileOf(c)}"`).join(", ")} all declare it. Remove one by its file name instead.`
37596
+ );
37597
+ }
37598
+ return byManifest[0];
37599
+ }
37585
37600
  function storeRemoveGlobalPack(name) {
37586
37601
  assertName(name);
37587
37602
  const dir = hostCore.globalPacksDir();
37588
- const match = hostCore.discoverPacks(dir).find((ref) => stem(ref) === name || path53.basename(ref) === name);
37603
+ const manifestOf = (ref) => declaredName2(ref, path53.dirname(ref), "global");
37604
+ const match = pickByName(hostCore.discoverPacks(dir), name, path53.basename, manifestOf);
37589
37605
  if (!match) {
37590
37606
  const inImage = hostCore.discoverPacks(imagePacksDir()).some(
37591
- (ref) => stem(ref) === name || path53.basename(ref) === name
37607
+ (ref) => stem(ref) === name || path53.basename(ref) === name || manifestOf(ref) === name
37592
37608
  );
37593
37609
  throw new Error(
37594
37610
  inImage ? `Pack "${name}" is an immutable image-layer pack (WAIRON_IMAGE_PACKS_DIR) and cannot be removed at runtime; rebuild the extension image without it.` : `No server-global instance pack named "${name}".`
@@ -37650,7 +37666,12 @@ function boundProject2(cfg, project2) {
37650
37666
  }
37651
37667
  function findPackRegistration(config, name) {
37652
37668
  const relRef = `.wai/packs/${name}.yaml`;
37653
- return (config?.extensions?.packs ?? []).find((entry) => typeof entry === "string" ? entry === relRef || stem(entry) === name || path53.basename(entry) === name : entry.name === name);
37669
+ const entries = config?.extensions?.packs ?? [];
37670
+ const direct = entries.find((entry) => typeof entry === "string" ? entry === relRef || stem(entry) === name || path53.basename(entry) === name : entry.name === name);
37671
+ if (direct !== void 0) return direct;
37672
+ const root = getProjectRoot();
37673
+ const refs = entries.filter((entry) => typeof entry === "string");
37674
+ return pickByName(refs, name, (ref) => ref, (ref) => declaredName2(ref, root, "project"));
37654
37675
  }
37655
37676
  function listGlobalPacks(cfg, credential) {
37656
37677
  requireCap(cfg, credential, "project:admin", "instance", "", "Forbidden \u2014 managing server-global packs requires instance-level project:admin");
@@ -42453,6 +42474,10 @@ function removeUnit(cfg, sessionId, unitId, disposition) {
42453
42474
  }
42454
42475
  const units = listOrganizationUnits(cfg.dataDir);
42455
42476
  const subtree = subtreeUnitIds2(units, unitId);
42477
+ const kind = disposition?.kind;
42478
+ if (kind !== "migrate" && kind !== "alternative" && kind !== "absorb" && kind !== "cascade") {
42479
+ throw new Error("A disposition kind is required: migrate, alternative, absorb or cascade");
42480
+ }
42456
42481
  if (disposition.kind === "cascade") {
42457
42482
  for (const placement of listProjectPlacements(cfg.dataDir)) {
42458
42483
  if (subtree.has(placement.unitId)) {
@@ -45242,85 +45267,71 @@ details.adv summary { cursor:pointer; color:var(--dim); font-size:12px; margin-b
45242
45267
  </body>
45243
45268
  </html>`;
45244
45269
  }
45245
- function loginWithPassword(cfg, body, res, secureCookie) {
45246
- const sessionId = signInWithPassword(cfg, String(body?.user ?? ""), String(body?.password ?? ""));
45247
- res.writeHead(200, {
45248
- "content-type": "application/json",
45249
- "set-cookie": setSessionCookie(sessionId, secureCookie)
45250
- });
45251
- res.end(JSON.stringify({ ok: true }));
45270
+ function loginWithPassword(cfg, user, password) {
45271
+ return signInWithPassword(cfg, user, password);
45252
45272
  }
45253
- function adminListUsers(cfg, sessionId, url, res) {
45254
- const project2 = url.searchParams.get("project") ?? void 0;
45255
- sendJson(res, 200, { users: listUsers3(cfg, sessionId, project2) });
45273
+ function adminListUsers(cfg, sessionId, project2) {
45274
+ return listUsers3(cfg, sessionId, project2);
45256
45275
  }
45257
- function adminUpsertUser(cfg, sessionId, body, res) {
45258
- sendJson(res, 200, upsertUser3(cfg, sessionId, body));
45276
+ function adminUpsertUser(cfg, sessionId, record2) {
45277
+ return upsertUser3(cfg, sessionId, record2);
45259
45278
  }
45260
- function adminSetUserStatus(cfg, sessionId, body, res) {
45261
- sendJson(res, 200, setUserStatus3(cfg, sessionId, String(body?.userId ?? ""), String(body?.status ?? "")));
45279
+ function adminSetUserStatus(cfg, sessionId, userId, status2) {
45280
+ return setUserStatus3(cfg, sessionId, userId, status2);
45262
45281
  }
45263
- function adminCreateShareLink(cfg, sessionId, body, res) {
45264
- sendJson(res, 201, createShareLink(cfg, sessionId, body ?? {}));
45282
+ function adminCreateShareLink(cfg, sessionId, input) {
45283
+ return createShareLink(cfg, sessionId, input);
45265
45284
  }
45266
- function adminListShareLinks(cfg, sessionId, url, res) {
45267
- sendJson(res, 200, { links: listShareLinks(cfg, sessionId, url.searchParams.get("projectId") ?? "") });
45285
+ function adminListShareLinks(cfg, sessionId, projectId) {
45286
+ return listShareLinks(cfg, sessionId, projectId);
45268
45287
  }
45269
- function adminRefreshShareSnapshot(cfg, sessionId, body, res) {
45270
- sendJson(res, 200, refreshSnapshot(cfg, sessionId, String(body?.linkId ?? "")));
45288
+ function adminRefreshShareSnapshot(cfg, sessionId, linkId) {
45289
+ return refreshSnapshot(cfg, sessionId, linkId);
45271
45290
  }
45272
- function adminUpdateShareLink(cfg, sessionId, body, res) {
45273
- sendJson(res, 200, updateShareLink(cfg, sessionId, String(body?.linkId ?? ""), body?.changes ?? {}));
45291
+ function adminUpdateShareLink(cfg, sessionId, linkId, changes) {
45292
+ return updateShareLink(cfg, sessionId, linkId, changes);
45274
45293
  }
45275
- function adminRemoveShareLink(cfg, sessionId, body, res) {
45276
- removeShareLink(cfg, sessionId, String(body?.linkId ?? ""));
45277
- sendJson(res, 200, { ok: true });
45294
+ function adminRemoveShareLink(cfg, sessionId, linkId) {
45295
+ removeShareLink(cfg, sessionId, linkId);
45278
45296
  }
45279
- function adminGetShareAccessLog(cfg, sessionId, url, res) {
45280
- const limit = Number(url.searchParams.get("limit") ?? "100") || 100;
45281
- sendJson(res, 200, { entries: getShareAccessLog(cfg, sessionId, url.searchParams.get("linkId") ?? "", limit) });
45297
+ function adminGetShareAccessLog(cfg, sessionId, linkId, limit) {
45298
+ return getShareAccessLog(cfg, sessionId, linkId, limit);
45282
45299
  }
45283
- function adminListProviders(cfg, sessionId, res) {
45284
- sendJson(res, 200, { providers: listIdentityProviders(cfg, sessionId) });
45300
+ function adminListProviders(cfg, sessionId) {
45301
+ return listIdentityProviders(cfg, sessionId);
45285
45302
  }
45286
- function adminUpsertProvider(cfg, sessionId, body, res) {
45287
- sendJson(res, 200, upsertIdentityProvider(cfg, sessionId, body));
45303
+ function adminUpsertProvider(cfg, sessionId, config) {
45304
+ return upsertIdentityProvider(cfg, sessionId, config);
45288
45305
  }
45289
- function adminRemoveProvider(cfg, sessionId, body, res) {
45290
- removeIdentityProvider(cfg, sessionId, String(body?.id ?? ""));
45291
- sendJson(res, 200, { ok: true });
45306
+ function adminRemoveProvider(cfg, sessionId, id) {
45307
+ removeIdentityProvider(cfg, sessionId, id);
45292
45308
  }
45293
- function mintAgentToken(cfg, sessionId, body, res) {
45294
- const token = mintProjectToken(cfg, sessionId, String(body?.projectId ?? ""), body?.write === true);
45295
- sendJson(res, 201, { token });
45309
+ function mintAgentToken(cfg, sessionId, projectId, write) {
45310
+ return mintProjectToken(cfg, sessionId, projectId, write);
45296
45311
  }
45297
- function revokeAgentToken(cfg, sessionId, body, res) {
45298
- revokeProjectToken(cfg, sessionId, String(body?.id ?? ""));
45299
- sendJson(res, 200, { ok: true });
45312
+ function revokeAgentToken(cfg, sessionId, tokenId) {
45313
+ revokeProjectToken(cfg, sessionId, tokenId);
45300
45314
  }
45301
- function listAgentTokens(cfg, sessionId, res) {
45302
- sendJson(res, 200, { tokens: listMyTokens(cfg, sessionId) });
45315
+ function listAgentTokens(cfg, sessionId) {
45316
+ return listMyTokens(cfg, sessionId);
45303
45317
  }
45304
- function adminListOrgUnits(cfg, sessionId, res) {
45305
- sendJson(res, 200, { units: listOrganizationUnits2(cfg, sessionId) });
45318
+ function adminListOrgUnits(cfg, sessionId) {
45319
+ return listOrganizationUnits2(cfg, sessionId);
45306
45320
  }
45307
- function adminListSecretRefs(cfg, sessionId, res) {
45308
- sendJson(res, 200, { refs: listSecretRefs(cfg, sessionId) });
45321
+ function adminListSecretRefs(cfg, sessionId) {
45322
+ return listSecretRefs(cfg, sessionId);
45309
45323
  }
45310
- function adminSetSecret(cfg, sessionId, body, res) {
45311
- setSecret3(cfg, sessionId, String(body?.key ?? ""), String(body?.value ?? ""));
45312
- sendJson(res, 200, { ok: true });
45324
+ function adminSetSecret(cfg, sessionId, key, value) {
45325
+ setSecret3(cfg, sessionId, key, value);
45313
45326
  }
45314
- function adminUpsertOrgUnit(cfg, sessionId, body, res) {
45315
- sendJson(res, 200, upsertOrganizationUnit(cfg, sessionId, body));
45327
+ function adminUpsertOrgUnit(cfg, sessionId, record2) {
45328
+ return upsertOrganizationUnit(cfg, sessionId, record2);
45316
45329
  }
45317
- function adminPlaceProject(cfg, sessionId, body, res) {
45318
- placeProject3(cfg, sessionId, String(body?.projectId ?? ""), String(body?.unitId ?? ""));
45319
- sendJson(res, 200, { ok: true });
45330
+ function adminPlaceProject(cfg, sessionId, projectId, unitId) {
45331
+ placeProject3(cfg, sessionId, projectId, unitId);
45320
45332
  }
45321
- function adminRemoveUnit(cfg, sessionId, body, res) {
45322
- removeUnit(cfg, sessionId, String(body?.unitId ?? ""), body?.disposition ?? {});
45323
- sendJson(res, 200, { ok: true });
45333
+ function adminRemoveUnit(cfg, sessionId, unitId, disposition) {
45334
+ removeUnit(cfg, sessionId, unitId, disposition);
45324
45335
  }
45325
45336
  function bodyScope(body) {
45326
45337
  return {
@@ -45328,69 +45339,44 @@ function bodyScope(body) {
45328
45339
  scopeId: body?.scopeId !== void 0 ? String(body.scopeId) : void 0
45329
45340
  };
45330
45341
  }
45331
- function adminListRoles(cfg, sessionId, res) {
45332
- sendJson(res, 200, { roles: listRoles3(cfg, sessionId) });
45333
- }
45334
- function adminCreateRole(cfg, sessionId, body, res) {
45335
- sendJson(res, 200, createRole3(cfg, sessionId, body));
45336
- }
45337
- function adminUpdateRole(cfg, sessionId, body, res) {
45338
- sendJson(res, 200, updateRole3(cfg, sessionId, body));
45339
- }
45340
- function adminDeleteRole(cfg, sessionId, body, res) {
45341
- deleteRole3(cfg, sessionId, String(body?.id ?? ""));
45342
- sendJson(res, 200, { ok: true });
45343
- }
45344
- function adminBindRole(cfg, sessionId, body, res) {
45345
- const scope = bodyScope(body);
45346
- sendJson(res, 200, bindRole2(cfg, sessionId, String(body?.userId ?? ""), String(body?.roleId ?? ""), scope.scopeKind, scope.scopeId));
45347
- }
45348
- function adminUnbindRole(cfg, sessionId, body, res) {
45349
- const scope = bodyScope(body);
45350
- sendJson(res, 200, unbindRole2(cfg, sessionId, String(body?.userId ?? ""), String(body?.roleId ?? ""), scope.scopeKind, scope.scopeId));
45351
- }
45352
- function adminListAssignments(cfg, sessionId, url, res) {
45353
- const q2 = (name) => url.searchParams.get(name) ?? void 0;
45354
- sendJson(res, 200, {
45355
- assignments: listAssignments3(
45356
- cfg,
45357
- sessionId,
45358
- q2("scopeKind"),
45359
- q2("scopeId"),
45360
- q2("subjectKind"),
45361
- q2("subjectId")
45362
- )
45363
- });
45342
+ function adminListRoles(cfg, sessionId) {
45343
+ return listRoles3(cfg, sessionId);
45364
45344
  }
45365
- function adminSetAssignment(cfg, sessionId, body, res) {
45366
- sendJson(res, 200, setAssignment3(cfg, sessionId, body));
45367
- }
45368
- function adminRemoveAssignment(cfg, sessionId, body, res) {
45369
- removeAssignment3(cfg, sessionId, String(body?.id ?? ""));
45370
- sendJson(res, 200, { ok: true });
45371
- }
45372
- function projectList(cfg, sessionId, res) {
45373
- sendJson(res, 200, { projects: listProjects2(cfg, sessionId) });
45374
- }
45375
- function projectCreate(cfg, sessionId, body, res) {
45376
- sendJson(
45377
- res,
45378
- 201,
45379
- createProject2(
45380
- cfg,
45381
- sessionId,
45382
- String(body?.id ?? ""),
45383
- String(body?.unitId ?? ""),
45384
- body?.profileSelection
45385
- )
45386
- );
45345
+ function adminCreateRole(cfg, sessionId, role) {
45346
+ return createRole3(cfg, sessionId, role);
45347
+ }
45348
+ function adminUpdateRole(cfg, sessionId, role) {
45349
+ return updateRole3(cfg, sessionId, role);
45350
+ }
45351
+ function adminDeleteRole(cfg, sessionId, roleId) {
45352
+ deleteRole3(cfg, sessionId, roleId);
45353
+ }
45354
+ function adminBindRole(cfg, sessionId, userId, roleId, scopeKind, scopeId) {
45355
+ return bindRole2(cfg, sessionId, userId, roleId, scopeKind, scopeId);
45356
+ }
45357
+ function adminUnbindRole(cfg, sessionId, userId, roleId, scopeKind, scopeId) {
45358
+ return unbindRole2(cfg, sessionId, userId, roleId, scopeKind, scopeId);
45359
+ }
45360
+ function adminListAssignments(cfg, sessionId, scopeKind, scopeId, subjectKind, subjectId) {
45361
+ return listAssignments3(cfg, sessionId, scopeKind, scopeId, subjectKind, subjectId);
45362
+ }
45363
+ function adminSetAssignment(cfg, sessionId, assignment) {
45364
+ return setAssignment3(cfg, sessionId, assignment);
45365
+ }
45366
+ function adminRemoveAssignment(cfg, sessionId, assignmentId) {
45367
+ removeAssignment3(cfg, sessionId, assignmentId);
45368
+ }
45369
+ function projectList(cfg, sessionId) {
45370
+ return listProjects2(cfg, sessionId);
45387
45371
  }
45388
- function projectLock(cfg, sessionId, body, res) {
45389
- sendJson(res, 200, lockProject3(cfg, sessionId, String(body?.projectId ?? "")));
45372
+ function projectCreate(cfg, sessionId, id, unitId, profileSelection) {
45373
+ return createProject2(cfg, sessionId, id, unitId, profileSelection);
45390
45374
  }
45391
- function projectDestroy(cfg, sessionId, body, res) {
45392
- destroyProject2(cfg, sessionId, String(body?.id ?? ""));
45393
- sendJson(res, 200, { ok: true });
45375
+ function projectLock(cfg, sessionId, projectId) {
45376
+ return lockProject3(cfg, sessionId, projectId);
45377
+ }
45378
+ function projectDestroy(cfg, sessionId, id) {
45379
+ destroyProject2(cfg, sessionId, id);
45394
45380
  }
45395
45381
  var q = (url, name) => url.searchParams.get(name) ?? void 0;
45396
45382
  function archiveBody(body) {
@@ -45402,159 +45388,107 @@ function packNameOverride(req) {
45402
45388
  const v = Array.isArray(h) ? h[0] : h;
45403
45389
  return v && v.trim() ? v.trim() : void 0;
45404
45390
  }
45405
- function opsListGlobalPacks(cfg, sessionId, res) {
45406
- sendJson(res, 200, { packs: listGlobalPacks2(cfg, sessionId) });
45391
+ function opsListGlobalPacks(cfg, sessionId) {
45392
+ return listGlobalPacks2(cfg, sessionId);
45407
45393
  }
45408
- function opsInstallGlobalPack(cfg, sessionId, body, res) {
45409
- sendJson(res, 200, installGlobalPack2(cfg, sessionId, String(body?.name ?? ""), String(body?.content ?? "")));
45394
+ function opsInstallGlobalPack(cfg, sessionId, name, content) {
45395
+ return installGlobalPack2(cfg, sessionId, name, content);
45410
45396
  }
45411
- function opsRemoveGlobalPack(cfg, sessionId, body, res) {
45412
- removeGlobalPack2(cfg, sessionId, String(body?.name ?? ""));
45413
- sendJson(res, 200, { ok: true });
45397
+ function opsRemoveGlobalPack(cfg, sessionId, name) {
45398
+ removeGlobalPack2(cfg, sessionId, name);
45414
45399
  }
45415
- function opsListProjectPacks(cfg, sessionId, url, res) {
45416
- sendJson(res, 200, { packs: listProjectPacks2(cfg, sessionId, q(url, "projectId") ?? "") });
45400
+ function opsListProjectPacks(cfg, sessionId, project2) {
45401
+ return listProjectPacks2(cfg, sessionId, project2);
45417
45402
  }
45418
- function opsInstallProjectPack(cfg, sessionId, body, res) {
45419
- sendJson(res, 200, installProjectPack2(cfg, sessionId, String(body?.projectId ?? ""), String(body?.name ?? ""), String(body?.content ?? "")));
45403
+ function opsInstallProjectPack(cfg, sessionId, project2, name, content) {
45404
+ return installProjectPack2(cfg, sessionId, project2, name, content);
45420
45405
  }
45421
- function opsRemoveProjectPack(cfg, sessionId, body, res) {
45422
- removeProjectPack2(cfg, sessionId, String(body?.projectId ?? ""), String(body?.name ?? ""));
45423
- sendJson(res, 200, { ok: true });
45406
+ function opsRemoveProjectPack(cfg, sessionId, project2, name) {
45407
+ removeProjectPack2(cfg, sessionId, project2, name);
45424
45408
  }
45425
- function opsInstallGlobalPackArchive(cfg, sessionId, req, body, res) {
45426
- sendJson(res, 200, installGlobalPackArchive2(cfg, sessionId, archiveBody(body), packNameOverride(req)));
45409
+ function opsInstallGlobalPackArchive(cfg, sessionId, archive, name) {
45410
+ return installGlobalPackArchive2(cfg, sessionId, archive, name);
45427
45411
  }
45428
- function opsInstallProjectPackArchive(cfg, sessionId, req, url, body, res) {
45429
- sendJson(res, 200, installProjectPackArchive2(cfg, sessionId, q(url, "projectId") ?? "", archiveBody(body), packNameOverride(req)));
45412
+ function opsInstallProjectPackArchive(cfg, sessionId, project2, archive, name) {
45413
+ return installProjectPackArchive2(cfg, sessionId, project2, archive, name);
45430
45414
  }
45431
- function opsExportProjectTree(cfg, sessionId, url, res) {
45432
- const result = exportProjectTree2(
45433
- cfg,
45434
- sessionId,
45435
- q(url, "projectId") ?? "",
45436
- void 0,
45437
- q(url, "includeDerived") === "1",
45438
- q(url, "allowPartial") === "1"
45439
- );
45440
- res.writeHead(200, {
45441
- "content-type": "application/zip",
45442
- "content-disposition": `attachment; filename="${result.suggestedFileName}"`
45443
- });
45444
- res.end(Buffer.from(result.archive));
45445
- }
45446
- function opsImportProjectTree(cfg, sessionId, url, body, res) {
45447
- sendJson(
45448
- res,
45449
- 200,
45450
- importProjectTree2(
45451
- cfg,
45452
- sessionId,
45453
- q(url, "projectId") ?? "",
45454
- archiveBody(body),
45455
- void 0,
45456
- q(url, "replace") === "1"
45457
- )
45458
- );
45415
+ function opsExportProjectTree(cfg, sessionId, project2, subproject, includeDerived, allowPartial) {
45416
+ return exportProjectTree2(cfg, sessionId, project2, subproject, includeDerived, allowPartial);
45459
45417
  }
45460
- function opsListAvailableProfiles(cfg, sessionId, res) {
45461
- sendJson(res, 200, { profiles: listAvailableProfiles2(cfg, sessionId) });
45418
+ function opsImportProjectTree(cfg, sessionId, project2, archive, subproject, replaceExisting) {
45419
+ return importProjectTree2(cfg, sessionId, project2, archive, subproject, replaceExisting);
45462
45420
  }
45463
- function opsListAdoptableProjectPacks(cfg, sessionId, url, res) {
45464
- sendJson(res, 200, { packs: listAdoptableProjectPacks2(cfg, sessionId, q(url, "projectId") ?? "") });
45421
+ function opsListAvailableProfiles(cfg, sessionId) {
45422
+ return listAvailableProfiles2(cfg, sessionId);
45465
45423
  }
45466
- function opsAdoptProjectPack(cfg, sessionId, body, res) {
45467
- sendJson(res, 200, adoptProjectPack2(cfg, sessionId, String(body?.projectId ?? ""), String(body?.name ?? "")));
45424
+ function opsListAdoptableProjectPacks(cfg, sessionId, project2) {
45425
+ return listAdoptableProjectPacks2(cfg, sessionId, project2);
45468
45426
  }
45469
- function opsGetPackPolicy(cfg, sessionId, res) {
45470
- sendJson(res, 200, getPackPolicy2(cfg, sessionId));
45427
+ function opsAdoptProjectPack(cfg, sessionId, project2, name) {
45428
+ return adoptProjectPack2(cfg, sessionId, project2, name);
45471
45429
  }
45472
- function opsSetPackPolicy(cfg, sessionId, body, res) {
45473
- sendJson(res, 200, setPackPolicy2(cfg, sessionId, body));
45430
+ function opsGetPackPolicy(cfg, sessionId) {
45431
+ return getPackPolicy2(cfg, sessionId);
45474
45432
  }
45475
- function opsPolicyEvaluate(cfg, sessionId, url, res) {
45476
- sendJson(res, 200, evaluateProjectPolicy2(cfg, sessionId, q(url, "projectId") ?? ""));
45433
+ function opsSetPackPolicy(cfg, sessionId, policy) {
45434
+ return setPackPolicy2(cfg, sessionId, policy);
45477
45435
  }
45478
- function opsPolicyReconcile(cfg, sessionId, body, res) {
45479
- sendJson(res, 200, reconcileProjectPolicy2(cfg, sessionId, String(body?.projectId ?? "")));
45436
+ function opsPolicyEvaluate(cfg, sessionId, projectId) {
45437
+ return evaluateProjectPolicy2(cfg, sessionId, projectId);
45480
45438
  }
45481
- function opsGetProjectConfig(cfg, sessionId, url, res) {
45482
- sendJson(res, 200, getProjectConfig2(cfg, sessionId, q(url, "projectId") ?? ""));
45439
+ function opsPolicyReconcile(cfg, sessionId, projectId) {
45440
+ return reconcileProjectPolicy2(cfg, sessionId, projectId);
45483
45441
  }
45484
- function opsSetProjectConfig(cfg, sessionId, body, res) {
45485
- sendJson(res, 200, setProjectType3(cfg, sessionId, String(body?.projectId ?? ""), String(body?.projectType ?? "")));
45442
+ function opsGetProjectConfig(cfg, sessionId, projectId) {
45443
+ return getProjectConfig2(cfg, sessionId, projectId);
45486
45444
  }
45487
- function opsListProjectProfiles(cfg, sessionId, url, res) {
45488
- sendJson(res, 200, { profiles: listProjectProfiles2(cfg, sessionId, q(url, "projectId") ?? "") });
45445
+ function opsSetProjectConfig(cfg, sessionId, projectId, projectType) {
45446
+ return setProjectType3(cfg, sessionId, projectId, projectType);
45489
45447
  }
45490
- function opsListProducers(cfg, sessionId, url, res) {
45491
- sendJson(res, 200, { producers: listProducers2(cfg, sessionId, q(url, "projectId") ?? "") });
45448
+ function opsListProjectProfiles(cfg, sessionId, project2) {
45449
+ return listProjectProfiles2(cfg, sessionId, project2);
45492
45450
  }
45493
- function opsConfigureProducer(cfg, sessionId, body, res) {
45494
- configureProducer2(cfg, sessionId, String(body?.projectId ?? ""), String(body?.target ?? ""), String(body?.parentPageId ?? ""));
45495
- sendJson(res, 200, { ok: true });
45451
+ function opsListProducers(cfg, sessionId, project2) {
45452
+ return listProducers2(cfg, sessionId, project2);
45496
45453
  }
45497
- function opsRemoveProducer(cfg, sessionId, body, res) {
45498
- removeProducer2(cfg, sessionId, String(body?.projectId ?? ""), String(body?.target ?? ""));
45499
- sendJson(res, 200, { ok: true });
45454
+ function opsConfigureProducer(cfg, sessionId, project2, target, parentPageId) {
45455
+ configureProducer2(cfg, sessionId, project2, target, parentPageId);
45500
45456
  }
45501
- async function opsRunProducer(cfg, sessionId, body, res) {
45502
- await produceProducer2(cfg, sessionId, String(body?.projectId ?? ""), String(body?.target ?? ""));
45503
- sendJson(res, 200, { ok: true });
45457
+ function opsRemoveProducer(cfg, sessionId, project2, target) {
45458
+ removeProducer2(cfg, sessionId, project2, target);
45504
45459
  }
45505
- function opsGitStatus(cfg, sessionId, url, res) {
45506
- sendJson(res, 200, getGitBinding2(cfg, sessionId, q(url, "projectId") ?? ""));
45460
+ async function opsRunProducer(cfg, sessionId, project2, target) {
45461
+ await produceProducer2(cfg, sessionId, project2, target);
45507
45462
  }
45508
- function opsGitBind(cfg, sessionId, body, res) {
45509
- const pat = body?.pat ? String(body.pat) : void 0;
45510
- sendJson(res, 200, enableGit2(cfg, sessionId, String(body?.projectId ?? ""), String(body?.remote ?? ""), String(body?.branch ?? ""), pat));
45463
+ function opsGitStatus(cfg, sessionId, project2) {
45464
+ return getGitBinding2(cfg, sessionId, project2);
45511
45465
  }
45512
- function opsGitUnbind(cfg, sessionId, body, res) {
45513
- disableGit2(cfg, sessionId, String(body?.projectId ?? ""));
45514
- sendJson(res, 200, { ok: true });
45466
+ function opsGitBind(cfg, sessionId, project2, remote, branch, pat) {
45467
+ return enableGit2(cfg, sessionId, project2, remote, branch, pat);
45515
45468
  }
45516
- function opsGitSync(cfg, sessionId, body, res) {
45517
- syncGit2(cfg, sessionId, String(body?.projectId ?? ""));
45518
- sendJson(res, 200, { ok: true });
45469
+ function opsGitUnbind(cfg, sessionId, project2) {
45470
+ disableGit2(cfg, sessionId, project2);
45519
45471
  }
45520
- function opsGitCommit(cfg, sessionId, body, res) {
45521
- sendJson(
45522
- res,
45523
- 200,
45524
- commitProject2(
45525
- cfg,
45526
- sessionId,
45527
- String(body?.projectId ?? ""),
45528
- typeof body?.subsystem === "string" && body.subsystem ? body.subsystem : void 0,
45529
- typeof body?.message === "string" && body.message ? body.message : void 0
45530
- )
45531
- );
45472
+ function opsGitSync(cfg, sessionId, project2) {
45473
+ syncGit2(cfg, sessionId, project2);
45532
45474
  }
45533
- function opsGitSyncConfig(cfg, sessionId, body, res) {
45534
- configureGitSync2(
45535
- cfg,
45536
- sessionId,
45537
- String(body?.projectId ?? ""),
45538
- typeof body?.periodicSyncMinutes === "number" ? body.periodicSyncMinutes : void 0,
45539
- typeof body?.skipIfClean === "boolean" ? body.skipIfClean : void 0
45540
- );
45541
- sendJson(res, 200, { ok: true });
45475
+ function opsGitCommit(cfg, sessionId, project2, subsystem, message) {
45476
+ return commitProject2(cfg, sessionId, project2, subsystem, message);
45542
45477
  }
45543
- function opsListGitBacking(cfg, sessionId, res) {
45544
- sendJson(res, 200, { bindings: listBackingBindings2(cfg, sessionId) });
45478
+ function opsGitSyncConfig(cfg, sessionId, project2, periodicSyncMinutes, skipIfClean) {
45479
+ configureGitSync2(cfg, sessionId, project2, periodicSyncMinutes, skipIfClean);
45545
45480
  }
45546
- function opsBindGitBacking(cfg, sessionId, body, res) {
45547
- const pat = body?.pat ? String(body.pat) : void 0;
45548
- const binding = { ...body ?? {} };
45549
- delete binding.pat;
45550
- sendJson(res, 200, bindBackingScope(cfg, sessionId, binding, pat));
45481
+ function opsListGitBacking(cfg, sessionId) {
45482
+ return listBackingBindings2(cfg, sessionId);
45551
45483
  }
45552
- function opsUnbindGitBacking(cfg, sessionId, body, res) {
45553
- unbindBackingScope(cfg, sessionId, String(body?.id ?? ""));
45554
- sendJson(res, 200, { ok: true });
45484
+ function opsBindGitBacking(cfg, sessionId, binding, pat) {
45485
+ return bindBackingScope(cfg, sessionId, binding, pat);
45555
45486
  }
45556
- function opsSyncGitBacking(cfg, sessionId, body, res) {
45557
- sendJson(res, 200, { published: syncBackingScope(cfg, sessionId, String(body?.id ?? "")) });
45487
+ function opsUnbindGitBacking(cfg, sessionId, bindingId) {
45488
+ unbindBackingScope(cfg, sessionId, bindingId);
45489
+ }
45490
+ function opsSyncGitBacking(cfg, sessionId, bindingId) {
45491
+ return syncBackingScope(cfg, sessionId, bindingId);
45558
45492
  }
45559
45493
  function auditQueryFrom(url) {
45560
45494
  const query = {};
@@ -45578,17 +45512,17 @@ function auditQueryFrom(url) {
45578
45512
  if (limit !== void 0) query.limit = Number(limit);
45579
45513
  return query;
45580
45514
  }
45581
- function opsAuditQuery(cfg, sessionId, url, res) {
45582
- sendJson(res, 200, { events: queryAuditEvents3(cfg, sessionId, auditQueryFrom(url)) });
45515
+ function opsAuditQuery(cfg, sessionId, query) {
45516
+ return queryAuditEvents3(cfg, sessionId, query);
45583
45517
  }
45584
- function opsAuditCount(cfg, sessionId, url, res) {
45585
- sendJson(res, 200, { count: countAuditEvents3(cfg, sessionId, auditQueryFrom(url)) });
45518
+ function opsAuditCount(cfg, sessionId, query) {
45519
+ return countAuditEvents3(cfg, sessionId, query);
45586
45520
  }
45587
- function opsGetExposure(cfg, sessionId, res) {
45588
- sendJson(res, 200, getExposurePolicy2(cfg, sessionId));
45521
+ function opsGetExposure(cfg, sessionId) {
45522
+ return getExposurePolicy2(cfg, sessionId);
45589
45523
  }
45590
- function opsSetExposure(cfg, sessionId, body, res) {
45591
- sendJson(res, 200, setExposurePolicy2(cfg, sessionId, body));
45524
+ function opsSetExposure(cfg, sessionId, policy) {
45525
+ return setExposurePolicy2(cfg, sessionId, policy);
45592
45526
  }
45593
45527
  async function handleWebRequest(cfg, req, res, body, url, ctx) {
45594
45528
  const parts = url.pathname.split("/").filter(Boolean).map(decodeURIComponent);
@@ -45635,7 +45569,13 @@ async function handleWebRequest(cfg, req, res, body, url, ctx) {
45635
45569
  return sendJson(res, 200, getLoginOptions(cfg));
45636
45570
  }
45637
45571
  if (req.method === "POST" && parts.length === 2 && parts[1] === "login") {
45638
- return loginWithPassword(cfg, body, res, ctx.secureCookie);
45572
+ const loginSessionId = loginWithPassword(cfg, String(body?.user ?? ""), String(body?.password ?? ""));
45573
+ res.writeHead(200, {
45574
+ "content-type": "application/json",
45575
+ "set-cookie": setSessionCookie(loginSessionId, ctx.secureCookie)
45576
+ });
45577
+ res.end(JSON.stringify({ ok: true }));
45578
+ return;
45639
45579
  }
45640
45580
  if (req.method === "POST" && parts.length === 2 && parts[1] === "logout") {
45641
45581
  signOut(cfg, sessionId);
@@ -45678,223 +45618,310 @@ async function handleWebRequest(cfg, req, res, body, url, ctx) {
45678
45618
  return;
45679
45619
  }
45680
45620
  if (req.method === "GET" && parts.length === 2 && parts[1] === "tokens") {
45681
- return listAgentTokens(cfg, sessionId, res);
45621
+ return sendJson(res, 200, { tokens: listAgentTokens(cfg, sessionId) });
45682
45622
  }
45683
45623
  if (req.method === "POST" && parts.length === 2 && parts[1] === "tokens") {
45684
- return mintAgentToken(cfg, sessionId, body, res);
45624
+ const token = mintAgentToken(cfg, sessionId, String(body?.projectId ?? ""), body?.write === true);
45625
+ return sendJson(res, 201, { token });
45685
45626
  }
45686
45627
  if (req.method === "POST" && parts.length === 3 && parts[1] === "tokens" && parts[2] === "revoke") {
45687
- return revokeAgentToken(cfg, sessionId, body, res);
45628
+ revokeAgentToken(cfg, sessionId, String(body?.id ?? ""));
45629
+ return sendJson(res, 200, { ok: true });
45688
45630
  }
45689
45631
  if (parts.length >= 2 && parts[1] === "projects") {
45690
45632
  if (req.method === "GET" && parts.length === 2) {
45691
- return projectList(cfg, sessionId, res);
45633
+ return sendJson(res, 200, { projects: projectList(cfg, sessionId) });
45692
45634
  }
45693
45635
  if (req.method === "POST" && parts.length === 2) {
45694
- return projectCreate(cfg, sessionId, body, res);
45636
+ return sendJson(
45637
+ res,
45638
+ 201,
45639
+ projectCreate(
45640
+ cfg,
45641
+ sessionId,
45642
+ String(body?.id ?? ""),
45643
+ String(body?.unitId ?? ""),
45644
+ body?.profileSelection
45645
+ )
45646
+ );
45695
45647
  }
45696
45648
  if (req.method === "POST" && parts.length === 3 && parts[2] === "lock") {
45697
- return projectLock(cfg, sessionId, body, res);
45649
+ return sendJson(res, 200, projectLock(cfg, sessionId, String(body?.projectId ?? "")));
45698
45650
  }
45699
45651
  if (req.method === "POST" && parts.length === 3 && parts[2] === "destroy") {
45700
- return projectDestroy(cfg, sessionId, body, res);
45652
+ projectDestroy(cfg, sessionId, String(body?.id ?? ""));
45653
+ return sendJson(res, 200, { ok: true });
45701
45654
  }
45702
45655
  if (req.method === "GET" && parts.length === 3 && parts[2] === "packs") {
45703
- return opsListProjectPacks(cfg, sessionId, url, res);
45656
+ return sendJson(res, 200, { packs: opsListProjectPacks(cfg, sessionId, q(url, "projectId") ?? "") });
45704
45657
  }
45705
45658
  if (req.method === "POST" && parts.length === 3 && parts[2] === "packs") {
45706
- return opsInstallProjectPack(cfg, sessionId, body, res);
45659
+ return sendJson(res, 200, opsInstallProjectPack(cfg, sessionId, String(body?.projectId ?? ""), String(body?.name ?? ""), String(body?.content ?? "")));
45707
45660
  }
45708
45661
  if (req.method === "POST" && parts.length === 4 && parts[2] === "packs" && parts[3] === "upload") {
45709
- return opsInstallProjectPackArchive(cfg, sessionId, req, url, body, res);
45662
+ return sendJson(res, 200, opsInstallProjectPackArchive(cfg, sessionId, q(url, "projectId") ?? "", archiveBody(body), packNameOverride(req)));
45710
45663
  }
45711
45664
  if (req.method === "POST" && parts.length === 4 && parts[2] === "packs" && parts[3] === "remove") {
45712
- return opsRemoveProjectPack(cfg, sessionId, body, res);
45665
+ opsRemoveProjectPack(cfg, sessionId, String(body?.projectId ?? ""), String(body?.name ?? ""));
45666
+ return sendJson(res, 200, { ok: true });
45713
45667
  }
45714
45668
  if (req.method === "GET" && parts.length === 4 && parts[2] === "packs" && parts[3] === "adoptable") {
45715
- return opsListAdoptableProjectPacks(cfg, sessionId, url, res);
45669
+ return sendJson(res, 200, { packs: opsListAdoptableProjectPacks(cfg, sessionId, q(url, "projectId") ?? "") });
45716
45670
  }
45717
45671
  if (req.method === "POST" && parts.length === 4 && parts[2] === "packs" && parts[3] === "adopt") {
45718
- return opsAdoptProjectPack(cfg, sessionId, body, res);
45672
+ return sendJson(res, 200, opsAdoptProjectPack(cfg, sessionId, String(body?.projectId ?? ""), String(body?.name ?? "")));
45719
45673
  }
45720
45674
  if (req.method === "GET" && parts.length === 4 && parts[2] === "tree" && parts[3] === "export") {
45721
- return opsExportProjectTree(cfg, sessionId, url, res);
45675
+ const result = opsExportProjectTree(
45676
+ cfg,
45677
+ sessionId,
45678
+ q(url, "projectId") ?? "",
45679
+ void 0,
45680
+ q(url, "includeDerived") === "1",
45681
+ q(url, "allowPartial") === "1"
45682
+ );
45683
+ res.writeHead(200, {
45684
+ "content-type": "application/zip",
45685
+ "content-disposition": `attachment; filename="${result.suggestedFileName}"`
45686
+ });
45687
+ res.end(Buffer.from(result.archive));
45688
+ return;
45722
45689
  }
45723
45690
  if (req.method === "POST" && parts.length === 4 && parts[2] === "tree" && parts[3] === "import") {
45724
- return opsImportProjectTree(cfg, sessionId, url, body, res);
45691
+ return sendJson(
45692
+ res,
45693
+ 200,
45694
+ opsImportProjectTree(
45695
+ cfg,
45696
+ sessionId,
45697
+ q(url, "projectId") ?? "",
45698
+ archiveBody(body),
45699
+ void 0,
45700
+ q(url, "replace") === "1"
45701
+ )
45702
+ );
45725
45703
  }
45726
45704
  if (req.method === "GET" && parts.length === 3 && parts[2] === "config") {
45727
- return opsGetProjectConfig(cfg, sessionId, url, res);
45705
+ return sendJson(res, 200, opsGetProjectConfig(cfg, sessionId, q(url, "projectId") ?? ""));
45728
45706
  }
45729
45707
  if (req.method === "POST" && parts.length === 3 && parts[2] === "config") {
45730
- return opsSetProjectConfig(cfg, sessionId, body, res);
45708
+ return sendJson(res, 200, opsSetProjectConfig(cfg, sessionId, String(body?.projectId ?? ""), String(body?.projectType ?? "")));
45731
45709
  }
45732
45710
  if (req.method === "GET" && parts.length === 3 && parts[2] === "profiles") {
45733
- return opsListProjectProfiles(cfg, sessionId, url, res);
45711
+ return sendJson(res, 200, { profiles: opsListProjectProfiles(cfg, sessionId, q(url, "projectId") ?? "") });
45734
45712
  }
45735
45713
  if (req.method === "GET" && parts.length === 3 && parts[2] === "policy") {
45736
- return opsPolicyEvaluate(cfg, sessionId, url, res);
45714
+ return sendJson(res, 200, opsPolicyEvaluate(cfg, sessionId, q(url, "projectId") ?? ""));
45737
45715
  }
45738
45716
  if (req.method === "POST" && parts.length === 4 && parts[2] === "policy" && parts[3] === "reconcile") {
45739
- return opsPolicyReconcile(cfg, sessionId, body, res);
45717
+ return sendJson(res, 200, opsPolicyReconcile(cfg, sessionId, String(body?.projectId ?? "")));
45740
45718
  }
45741
45719
  if (req.method === "GET" && parts.length === 3 && parts[2] === "producers") {
45742
- return opsListProducers(cfg, sessionId, url, res);
45720
+ return sendJson(res, 200, { producers: opsListProducers(cfg, sessionId, q(url, "projectId") ?? "") });
45743
45721
  }
45744
45722
  if (req.method === "POST" && parts.length === 3 && parts[2] === "producers") {
45745
- return opsConfigureProducer(cfg, sessionId, body, res);
45723
+ opsConfigureProducer(cfg, sessionId, String(body?.projectId ?? ""), String(body?.target ?? ""), String(body?.parentPageId ?? ""));
45724
+ return sendJson(res, 200, { ok: true });
45746
45725
  }
45747
45726
  if (req.method === "POST" && parts.length === 4 && parts[2] === "producers" && parts[3] === "remove") {
45748
- return opsRemoveProducer(cfg, sessionId, body, res);
45727
+ opsRemoveProducer(cfg, sessionId, String(body?.projectId ?? ""), String(body?.target ?? ""));
45728
+ return sendJson(res, 200, { ok: true });
45749
45729
  }
45750
45730
  if (req.method === "POST" && parts.length === 4 && parts[2] === "producers" && parts[3] === "run") {
45751
- return opsRunProducer(cfg, sessionId, body, res);
45731
+ await opsRunProducer(cfg, sessionId, String(body?.projectId ?? ""), String(body?.target ?? ""));
45732
+ return sendJson(res, 200, { ok: true });
45752
45733
  }
45753
45734
  if (req.method === "GET" && parts.length === 3 && parts[2] === "git") {
45754
- return opsGitStatus(cfg, sessionId, url, res);
45735
+ return sendJson(res, 200, opsGitStatus(cfg, sessionId, q(url, "projectId") ?? ""));
45755
45736
  }
45756
45737
  if (req.method === "POST" && parts.length === 3 && parts[2] === "git") {
45757
- return opsGitBind(cfg, sessionId, body, res);
45738
+ const pat = body?.pat ? String(body.pat) : void 0;
45739
+ return sendJson(res, 200, opsGitBind(cfg, sessionId, String(body?.projectId ?? ""), String(body?.remote ?? ""), String(body?.branch ?? ""), pat));
45758
45740
  }
45759
45741
  if (req.method === "POST" && parts.length === 4 && parts[2] === "git" && parts[3] === "disconnect") {
45760
- return opsGitUnbind(cfg, sessionId, body, res);
45742
+ opsGitUnbind(cfg, sessionId, String(body?.projectId ?? ""));
45743
+ return sendJson(res, 200, { ok: true });
45761
45744
  }
45762
45745
  if (req.method === "POST" && parts.length === 4 && parts[2] === "git" && parts[3] === "sync") {
45763
- return opsGitSync(cfg, sessionId, body, res);
45746
+ opsGitSync(cfg, sessionId, String(body?.projectId ?? ""));
45747
+ return sendJson(res, 200, { ok: true });
45764
45748
  }
45765
45749
  if (req.method === "POST" && parts.length === 4 && parts[2] === "git" && parts[3] === "commit") {
45766
- return opsGitCommit(cfg, sessionId, body, res);
45750
+ return sendJson(
45751
+ res,
45752
+ 200,
45753
+ opsGitCommit(
45754
+ cfg,
45755
+ sessionId,
45756
+ String(body?.projectId ?? ""),
45757
+ typeof body?.subsystem === "string" && body.subsystem ? body.subsystem : void 0,
45758
+ typeof body?.message === "string" && body.message ? body.message : void 0
45759
+ )
45760
+ );
45767
45761
  }
45768
45762
  if (req.method === "POST" && parts.length === 4 && parts[2] === "git" && parts[3] === "sync-config") {
45769
- return opsGitSyncConfig(cfg, sessionId, body, res);
45763
+ opsGitSyncConfig(
45764
+ cfg,
45765
+ sessionId,
45766
+ String(body?.projectId ?? ""),
45767
+ typeof body?.periodicSyncMinutes === "number" ? body.periodicSyncMinutes : void 0,
45768
+ typeof body?.skipIfClean === "boolean" ? body.skipIfClean : void 0
45769
+ );
45770
+ return sendJson(res, 200, { ok: true });
45770
45771
  }
45771
45772
  }
45772
45773
  if (parts.length >= 2 && parts[1] === "admin") {
45773
45774
  if (req.method === "GET" && parts.length === 3 && parts[2] === "users") {
45774
- return adminListUsers(cfg, sessionId, url, res);
45775
+ const project2 = url.searchParams.get("project") ?? void 0;
45776
+ return sendJson(res, 200, { users: adminListUsers(cfg, sessionId, project2) });
45775
45777
  }
45776
45778
  if (req.method === "POST" && parts.length === 4 && parts[2] === "users" && parts[3] === "status") {
45777
- return adminSetUserStatus(cfg, sessionId, body, res);
45779
+ return sendJson(res, 200, adminSetUserStatus(cfg, sessionId, String(body?.userId ?? ""), String(body?.status ?? "")));
45778
45780
  }
45779
45781
  if (req.method === "POST" && parts.length === 3 && parts[2] === "users") {
45780
- return adminUpsertUser(cfg, sessionId, body, res);
45782
+ return sendJson(res, 200, adminUpsertUser(cfg, sessionId, body));
45781
45783
  }
45782
45784
  if (req.method === "GET" && parts.length === 3 && parts[2] === "providers") {
45783
- return adminListProviders(cfg, sessionId, res);
45785
+ return sendJson(res, 200, { providers: adminListProviders(cfg, sessionId) });
45784
45786
  }
45785
45787
  if (req.method === "POST" && parts.length === 4 && parts[2] === "providers" && parts[3] === "remove") {
45786
- return adminRemoveProvider(cfg, sessionId, body, res);
45788
+ adminRemoveProvider(cfg, sessionId, String(body?.id ?? ""));
45789
+ return sendJson(res, 200, { ok: true });
45787
45790
  }
45788
45791
  if (req.method === "POST" && parts.length === 3 && parts[2] === "providers") {
45789
- return adminUpsertProvider(cfg, sessionId, body, res);
45792
+ return sendJson(res, 200, adminUpsertProvider(cfg, sessionId, body));
45790
45793
  }
45791
45794
  if (req.method === "GET" && parts.length === 4 && parts[2] === "org" && parts[3] === "units") {
45792
- return adminListOrgUnits(cfg, sessionId, res);
45795
+ return sendJson(res, 200, { units: adminListOrgUnits(cfg, sessionId) });
45793
45796
  }
45794
45797
  if (req.method === "GET" && parts.length === 3 && parts[2] === "secrets") {
45795
- return adminListSecretRefs(cfg, sessionId, res);
45798
+ return sendJson(res, 200, { refs: adminListSecretRefs(cfg, sessionId) });
45796
45799
  }
45797
45800
  if (req.method === "POST" && parts.length === 3 && parts[2] === "secrets") {
45798
- return adminSetSecret(cfg, sessionId, body, res);
45801
+ adminSetSecret(cfg, sessionId, String(body?.key ?? ""), String(body?.value ?? ""));
45802
+ return sendJson(res, 200, { ok: true });
45799
45803
  }
45800
45804
  if (req.method === "POST" && parts.length === 4 && parts[2] === "org" && parts[3] === "units") {
45801
- return adminUpsertOrgUnit(cfg, sessionId, body, res);
45805
+ return sendJson(res, 200, adminUpsertOrgUnit(cfg, sessionId, body));
45802
45806
  }
45803
45807
  if (req.method === "POST" && parts.length === 5 && parts[2] === "org" && parts[3] === "units" && parts[4] === "remove") {
45804
- return adminRemoveUnit(cfg, sessionId, body, res);
45808
+ adminRemoveUnit(cfg, sessionId, String(body?.unitId ?? ""), body?.disposition ?? {});
45809
+ return sendJson(res, 200, { ok: true });
45805
45810
  }
45806
45811
  if (req.method === "POST" && parts.length === 4 && parts[2] === "org" && parts[3] === "placements") {
45807
- return adminPlaceProject(cfg, sessionId, body, res);
45812
+ adminPlaceProject(cfg, sessionId, String(body?.projectId ?? ""), String(body?.unitId ?? ""));
45813
+ return sendJson(res, 200, { ok: true });
45808
45814
  }
45809
45815
  if (req.method === "GET" && parts.length === 3 && parts[2] === "roles") {
45810
- return adminListRoles(cfg, sessionId, res);
45816
+ return sendJson(res, 200, { roles: adminListRoles(cfg, sessionId) });
45811
45817
  }
45812
45818
  if (req.method === "POST" && parts.length === 3 && parts[2] === "roles") {
45813
- return adminCreateRole(cfg, sessionId, body, res);
45819
+ return sendJson(res, 200, adminCreateRole(cfg, sessionId, body));
45814
45820
  }
45815
45821
  if (req.method === "POST" && parts.length === 4 && parts[2] === "roles" && parts[3] === "update") {
45816
- return adminUpdateRole(cfg, sessionId, body, res);
45822
+ return sendJson(res, 200, adminUpdateRole(cfg, sessionId, body));
45817
45823
  }
45818
45824
  if (req.method === "POST" && parts.length === 4 && parts[2] === "roles" && parts[3] === "remove") {
45819
- return adminDeleteRole(cfg, sessionId, body, res);
45825
+ adminDeleteRole(cfg, sessionId, String(body?.id ?? ""));
45826
+ return sendJson(res, 200, { ok: true });
45820
45827
  }
45821
45828
  if (req.method === "POST" && parts.length === 4 && parts[2] === "roles" && parts[3] === "bind") {
45822
- return adminBindRole(cfg, sessionId, body, res);
45829
+ const scope = bodyScope(body);
45830
+ return sendJson(res, 200, adminBindRole(cfg, sessionId, String(body?.userId ?? ""), String(body?.roleId ?? ""), scope.scopeKind, scope.scopeId));
45823
45831
  }
45824
45832
  if (req.method === "POST" && parts.length === 4 && parts[2] === "roles" && parts[3] === "unbind") {
45825
- return adminUnbindRole(cfg, sessionId, body, res);
45833
+ const scope = bodyScope(body);
45834
+ return sendJson(res, 200, adminUnbindRole(cfg, sessionId, String(body?.userId ?? ""), String(body?.roleId ?? ""), scope.scopeKind, scope.scopeId));
45826
45835
  }
45827
45836
  if (req.method === "GET" && parts.length === 3 && parts[2] === "permissions") {
45828
- return adminListAssignments(cfg, sessionId, url, res);
45837
+ const q2 = (name) => url.searchParams.get(name) ?? void 0;
45838
+ return sendJson(res, 200, {
45839
+ assignments: adminListAssignments(
45840
+ cfg,
45841
+ sessionId,
45842
+ q2("scopeKind"),
45843
+ q2("scopeId"),
45844
+ q2("subjectKind"),
45845
+ q2("subjectId")
45846
+ )
45847
+ });
45829
45848
  }
45830
45849
  if (req.method === "POST" && parts.length === 3 && parts[2] === "permissions") {
45831
- return adminSetAssignment(cfg, sessionId, body, res);
45850
+ return sendJson(res, 200, adminSetAssignment(cfg, sessionId, body));
45832
45851
  }
45833
45852
  if (req.method === "POST" && parts.length === 4 && parts[2] === "permissions" && parts[3] === "remove") {
45834
- return adminRemoveAssignment(cfg, sessionId, body, res);
45853
+ adminRemoveAssignment(cfg, sessionId, String(body?.id ?? ""));
45854
+ return sendJson(res, 200, { ok: true });
45835
45855
  }
45836
45856
  if (req.method === "GET" && parts.length === 3 && parts[2] === "packs") {
45837
- return opsListGlobalPacks(cfg, sessionId, res);
45857
+ return sendJson(res, 200, { packs: opsListGlobalPacks(cfg, sessionId) });
45838
45858
  }
45839
45859
  if (req.method === "POST" && parts.length === 3 && parts[2] === "packs") {
45840
- return opsInstallGlobalPack(cfg, sessionId, body, res);
45860
+ return sendJson(res, 200, opsInstallGlobalPack(cfg, sessionId, String(body?.name ?? ""), String(body?.content ?? "")));
45841
45861
  }
45842
45862
  if (req.method === "POST" && parts.length === 4 && parts[2] === "packs" && parts[3] === "upload") {
45843
- return opsInstallGlobalPackArchive(cfg, sessionId, req, body, res);
45863
+ return sendJson(res, 200, opsInstallGlobalPackArchive(cfg, sessionId, archiveBody(body), packNameOverride(req)));
45844
45864
  }
45845
45865
  if (req.method === "POST" && parts.length === 4 && parts[2] === "packs" && parts[3] === "remove") {
45846
- return opsRemoveGlobalPack(cfg, sessionId, body, res);
45866
+ opsRemoveGlobalPack(cfg, sessionId, String(body?.name ?? ""));
45867
+ return sendJson(res, 200, { ok: true });
45847
45868
  }
45848
45869
  if (req.method === "GET" && parts.length === 3 && parts[2] === "profiles") {
45849
- return opsListAvailableProfiles(cfg, sessionId, res);
45870
+ return sendJson(res, 200, { profiles: opsListAvailableProfiles(cfg, sessionId) });
45850
45871
  }
45851
45872
  if (req.method === "GET" && parts.length === 3 && parts[2] === "policy") {
45852
- return opsGetPackPolicy(cfg, sessionId, res);
45873
+ return sendJson(res, 200, opsGetPackPolicy(cfg, sessionId));
45853
45874
  }
45854
45875
  if (req.method === "POST" && parts.length === 3 && parts[2] === "policy") {
45855
- return opsSetPackPolicy(cfg, sessionId, body, res);
45876
+ return sendJson(res, 200, opsSetPackPolicy(cfg, sessionId, body));
45856
45877
  }
45857
45878
  if (req.method === "GET" && parts.length === 3 && parts[2] === "audit") {
45858
- return opsAuditQuery(cfg, sessionId, url, res);
45879
+ return sendJson(res, 200, { events: opsAuditQuery(cfg, sessionId, auditQueryFrom(url)) });
45859
45880
  }
45860
45881
  if (req.method === "GET" && parts.length === 4 && parts[2] === "audit" && parts[3] === "count") {
45861
- return opsAuditCount(cfg, sessionId, url, res);
45882
+ return sendJson(res, 200, { count: opsAuditCount(cfg, sessionId, auditQueryFrom(url)) });
45862
45883
  }
45863
45884
  if (req.method === "GET" && parts.length === 3 && parts[2] === "exposure") {
45864
- return opsGetExposure(cfg, sessionId, res);
45885
+ return sendJson(res, 200, opsGetExposure(cfg, sessionId));
45865
45886
  }
45866
45887
  if (req.method === "POST" && parts.length === 3 && parts[2] === "exposure") {
45867
- return opsSetExposure(cfg, sessionId, body, res);
45888
+ return sendJson(res, 200, opsSetExposure(cfg, sessionId, body));
45868
45889
  }
45869
45890
  if (req.method === "GET" && parts.length === 3 && parts[2] === "git-backing") {
45870
- return opsListGitBacking(cfg, sessionId, res);
45891
+ return sendJson(res, 200, { bindings: opsListGitBacking(cfg, sessionId) });
45871
45892
  }
45872
45893
  if (req.method === "POST" && parts.length === 3 && parts[2] === "git-backing") {
45873
- return opsBindGitBacking(cfg, sessionId, body, res);
45894
+ const pat = body?.pat ? String(body.pat) : void 0;
45895
+ const binding = { ...body ?? {} };
45896
+ delete binding.pat;
45897
+ return sendJson(res, 200, opsBindGitBacking(cfg, sessionId, binding, pat));
45874
45898
  }
45875
45899
  if (req.method === "POST" && parts.length === 4 && parts[2] === "git-backing" && parts[3] === "remove") {
45876
- return opsUnbindGitBacking(cfg, sessionId, body, res);
45900
+ opsUnbindGitBacking(cfg, sessionId, String(body?.id ?? ""));
45901
+ return sendJson(res, 200, { ok: true });
45877
45902
  }
45878
45903
  if (req.method === "POST" && parts.length === 4 && parts[2] === "git-backing" && parts[3] === "sync") {
45879
- return opsSyncGitBacking(cfg, sessionId, body, res);
45904
+ return sendJson(res, 200, { published: opsSyncGitBacking(cfg, sessionId, String(body?.id ?? "")) });
45880
45905
  }
45881
45906
  if (req.method === "POST" && parts.length === 3 && parts[2] === "share") {
45882
- return adminCreateShareLink(cfg, sessionId, body, res);
45907
+ return sendJson(res, 201, adminCreateShareLink(cfg, sessionId, body ?? {}));
45883
45908
  }
45884
45909
  if (req.method === "GET" && parts.length === 3 && parts[2] === "share") {
45885
- return adminListShareLinks(cfg, sessionId, url, res);
45910
+ return sendJson(res, 200, { links: adminListShareLinks(cfg, sessionId, url.searchParams.get("projectId") ?? "") });
45886
45911
  }
45887
45912
  if (req.method === "POST" && parts.length === 4 && parts[2] === "share" && parts[3] === "refresh") {
45888
- return adminRefreshShareSnapshot(cfg, sessionId, body, res);
45913
+ return sendJson(res, 200, adminRefreshShareSnapshot(cfg, sessionId, String(body?.linkId ?? "")));
45889
45914
  }
45890
45915
  if (req.method === "POST" && parts.length === 4 && parts[2] === "share" && parts[3] === "update") {
45891
- return adminUpdateShareLink(cfg, sessionId, body, res);
45916
+ return sendJson(res, 200, adminUpdateShareLink(cfg, sessionId, String(body?.linkId ?? ""), body?.changes ?? {}));
45892
45917
  }
45893
45918
  if (req.method === "POST" && parts.length === 4 && parts[2] === "share" && parts[3] === "remove") {
45894
- return adminRemoveShareLink(cfg, sessionId, body, res);
45919
+ adminRemoveShareLink(cfg, sessionId, String(body?.linkId ?? ""));
45920
+ return sendJson(res, 200, { ok: true });
45895
45921
  }
45896
45922
  if (req.method === "GET" && parts.length === 4 && parts[2] === "share" && parts[3] === "access") {
45897
- return adminGetShareAccessLog(cfg, sessionId, url, res);
45923
+ const limit = Number(url.searchParams.get("limit") ?? "100") || 100;
45924
+ return sendJson(res, 200, { entries: adminGetShareAccessLog(cfg, sessionId, url.searchParams.get("linkId") ?? "", limit) });
45898
45925
  }
45899
45926
  if (req.method === "GET" && parts.length === 3 && parts[2] === "landscape") {
45900
45927
  return sendJson(res, 200, generateLandscape(cfg, sessionId));
@@ -46833,6 +46860,7 @@ var WEB_MUTATION_PATHS = /* @__PURE__ */ new Set([
46833
46860
  "/web/projects/git/sync",
46834
46861
  "/web/projects/git/commit",
46835
46862
  "/web/projects/git/sync-config",
46863
+ "/web/projects/config",
46836
46864
  "/web/tokens",
46837
46865
  "/web/tokens/revoke",
46838
46866
  "/web/projects",