camstack 1.2.32 → 1.2.33

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.js CHANGED
@@ -38,7 +38,7 @@ async function runServe(args) {
38
38
  ...typeof values.data === "string" ? { data: values.data } : {}
39
39
  };
40
40
  Object.assign(process.env, buildServeEnv(opts));
41
- await import("./launcher-OBXOIIQJ.js");
41
+ await import("./launcher-LXP37XH2.js");
42
42
  }
43
43
 
44
44
  // src/commands/agent.ts
@@ -83,7 +83,7 @@ async function runAgent(args) {
83
83
  ...typeof values.port === "string" ? { port: values.port } : {}
84
84
  };
85
85
  Object.assign(process.env, buildAgentEnv(opts));
86
- await import("./launcher-OBXOIIQJ.js");
86
+ await import("./launcher-LXP37XH2.js");
87
87
  }
88
88
 
89
89
  // src/commands/setup.ts
@@ -396972,6 +396972,7 @@ var require_trpc_context = __commonJS({
396972
396972
  return null;
396973
396973
  }
396974
396974
  const credential = (0, trpc_error_principal_js_1.readCredentialIdentity)(payload);
396975
+ const principal = (0, types_1.classifyBearerPrincipal)(payload);
396975
396976
  return {
396976
396977
  id: payload.userId ?? payload.keyId ?? "unknown",
396977
396978
  username: payload.username ?? "unknown",
@@ -396992,12 +396993,21 @@ var require_trpc_context = __commonJS({
396992
396993
  // user's scopes expects the change to APPLY, and the live session
396993
396994
  // kept gating on the old set until re-login (2026-08-15: a user
396994
396995
  // granted the whole fleet kept seeing zero cameras). For non-admin
396995
- // JWT principals the store's current scopes win when readable
396996
+ // SESSION principals the store's current scopes win when readable
396996
396997
  // (memoized — see above); the JWT's copy is the fallback when the
396997
396998
  // user-management cap is unreachable, so a store hiccup never
396998
396999
  // locks anybody out mid-request.
397000
+ //
397001
+ // `session` ONLY, and that word is the whole fix. An ACCOUNT-LINK token
397002
+ // is governed by the grant the operator consented to, not by the linking
397003
+ // user's record: it always carries `isAdmin: false` (`oauth-grants.ts`
397004
+ // → `baseClaims`) and its owner is normally an admin, whose record is
397005
+ // deliberately unscoped — so the refresh replaced a six-scope Home
397006
+ // Assistant grant with `[]` and the hub refused the component's first
397007
+ // call with `Have: (none)` (2026-08-19). The user store knows nothing
397008
+ // about a link and must not get a vote on one.
396999
397009
  ...payload.scopes !== void 0 ? { scopes: (0, types_1.normalizeTokenScopes)(payload.scopes) } : {},
397000
- ...!payload.isAdmin ? await (async () => {
397010
+ ...!payload.isAdmin && principal.kind === "session" ? await (async () => {
397001
397011
  const fresh = await refreshScopesFromStore(payload.userId ?? payload.keyId ?? "unknown", addonRegistry);
397002
397012
  return fresh !== null ? { scopes: fresh } : {};
397003
397013
  })() : {},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "camstack",
3
- "version": "1.2.32",
3
+ "version": "1.2.33",
4
4
  "description": "CLI tool for managing and running CamStack server",
5
5
  "keywords": [
6
6
  "camstack",