@agent-native/dispatch 0.40.31 → 0.40.34

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 (63) hide show
  1. package/CHANGELOG.md +28 -18
  2. package/dist/actions/connect-external-agent.d.ts.map +1 -1
  3. package/dist/actions/connect-external-agent.js +2 -9
  4. package/dist/actions/connect-external-agent.js.map +1 -1
  5. package/dist/actions/list-dispatch-usage-metrics.js +1 -1
  6. package/dist/actions/list-dispatch-usage-metrics.js.map +1 -1
  7. package/dist/actions/provider-api-register.d.ts +11 -11
  8. package/dist/actions/provider-api-register.js +2 -14
  9. package/dist/actions/provider-api-register.js.map +1 -1
  10. package/dist/db/index.d.ts.map +1 -1
  11. package/dist/db/index.js +4 -9
  12. package/dist/db/index.js.map +1 -1
  13. package/dist/server/lib/admin-config.d.ts.map +1 -1
  14. package/dist/server/lib/admin-config.js +3 -1
  15. package/dist/server/lib/admin-config.js.map +1 -1
  16. package/dist/server/lib/app-creation-store.d.ts.map +1 -1
  17. package/dist/server/lib/app-creation-store.js +2 -11
  18. package/dist/server/lib/app-creation-store.js.map +1 -1
  19. package/dist/server/lib/community-apps.js +1 -1
  20. package/dist/server/lib/community-apps.js.map +1 -1
  21. package/dist/server/lib/mcp-access-store.d.ts.map +1 -1
  22. package/dist/server/lib/mcp-access-store.js +2 -10
  23. package/dist/server/lib/mcp-access-store.js.map +1 -1
  24. package/dist/server/lib/thread-debug-store.d.ts.map +1 -1
  25. package/dist/server/lib/thread-debug-store.js +2 -6
  26. package/dist/server/lib/thread-debug-store.js.map +1 -1
  27. package/dist/server/lib/usage-metrics-store.d.ts.map +1 -1
  28. package/dist/server/lib/usage-metrics-store.js +2 -11
  29. package/dist/server/lib/usage-metrics-store.js.map +1 -1
  30. package/dist/server/lib/vault-store.d.ts.map +1 -1
  31. package/dist/server/lib/vault-store.js +2 -9
  32. package/dist/server/lib/vault-store.js.map +1 -1
  33. package/dist/server/lib/workspace-app-action-auth.d.ts.map +1 -1
  34. package/dist/server/lib/workspace-app-action-auth.js +7 -2
  35. package/dist/server/lib/workspace-app-action-auth.js.map +1 -1
  36. package/dist/server/plugins/agent-chat.js +1 -1
  37. package/dist/server/plugins/agent-chat.js.map +1 -1
  38. package/package.json +3 -3
  39. package/src/actions/connect-external-agent.spec.ts +25 -11
  40. package/src/actions/connect-external-agent.ts +2 -9
  41. package/src/actions/index.spec.ts +3 -0
  42. package/src/actions/list-dispatch-usage-metrics.ts +1 -1
  43. package/src/actions/provider-api-register.spec.ts +15 -9
  44. package/src/actions/provider-api-register.ts +5 -13
  45. package/src/db/index.spec.ts +74 -0
  46. package/src/db/index.ts +4 -9
  47. package/src/server/lib/admin-config.spec.ts +51 -0
  48. package/src/server/lib/admin-config.ts +2 -1
  49. package/src/server/lib/app-creation-store.spec.ts +27 -5
  50. package/src/server/lib/app-creation-store.ts +2 -10
  51. package/src/server/lib/community-apps.ts +1 -1
  52. package/src/server/lib/mcp-access-store.spec.ts +39 -12
  53. package/src/server/lib/mcp-access-store.ts +3 -10
  54. package/src/server/lib/thread-debug-store.spec.ts +64 -0
  55. package/src/server/lib/thread-debug-store.ts +2 -9
  56. package/src/server/lib/usage-metrics-store.spec.ts +64 -0
  57. package/src/server/lib/usage-metrics-store.ts +2 -17
  58. package/src/server/lib/vault-store.spec.ts +26 -9
  59. package/src/server/lib/vault-store.ts +3 -10
  60. package/src/server/lib/workspace-app-action-auth.spec.ts +37 -6
  61. package/src/server/lib/workspace-app-action-auth.ts +12 -2
  62. package/src/server/plugins/agent-chat.spec.ts +14 -0
  63. package/src/server/plugins/agent-chat.ts +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @agent-native/dispatch
2
2
 
3
+ ## 0.40.34
4
+
5
+ ### Patch Changes
6
+
7
+ - Release all public npm packages with a patch version bump.
8
+ - Updated dependencies
9
+ - Updated dependencies [05d1481]
10
+ - @agent-native/toolkit@0.214.0
11
+
12
+ ## 0.40.33
13
+
14
+ ### Patch Changes
15
+
16
+ - e9efe95: Keep the curated QR catalog pinned to the current template files.
17
+ - Release all public npm packages with a patch version bump.
18
+ - Updated dependencies
19
+ - @agent-native/toolkit@0.213.1
20
+
21
+ ## 0.40.32
22
+
23
+ ### Patch Changes
24
+
25
+ - Release all public npm packages with a patch version bump.
26
+ - b58658d: Allow organization owners to opt in to current-member A2A delegation with capped member permissions and durable audit provenance. Improve app discovery and Dispatch routing for connected analytics and customer credit questions.
27
+ - Updated dependencies
28
+ - Updated dependencies [b58658d]
29
+ - @agent-native/toolkit@0.213.0
30
+
3
31
  ## 0.40.31
4
32
 
5
33
  ### Patch Changes
@@ -1285,22 +1313,4 @@
1285
1313
 
1286
1314
  - 0b0085f: Fix workspace app sign-in continuation and mounted-app launches.
1287
1315
 
1288
- ## 0.29.3
1289
-
1290
- ### Patch Changes
1291
-
1292
- - 8cab236: Speed up workspace app opens in Dispatch by reusing the app catalog cache and deferring granted-app discovery until needed.
1293
-
1294
- ## 0.29.2
1295
-
1296
- ### Patch Changes
1297
-
1298
- - 66b2a1c: Navigate workspace apps in the top window when Dispatch runs in Builder or an iframe.
1299
-
1300
- ## 0.29.1
1301
-
1302
- ### Patch Changes
1303
-
1304
- - 96ecc13: Use compact app search and pin labels that stay on one line.
1305
-
1306
1316
  For the full list of releases, see the [changelog archive](./changelog/archive/CHANGELOG.md).
@@ -1 +1 @@
1
- {"version":3,"file":"connect-external-agent.d.ts","sourceRoot":"","sources":["../../src/actions/connect-external-agent.ts"],"names":[],"mappings":";;;;;;YA4FqB,SAAS"}
1
+ {"version":3,"file":"connect-external-agent.d.ts","sourceRoot":"","sources":["../../src/actions/connect-external-agent.ts"],"names":[],"mappings":";;;;;;YAqFqB,SAAS"}
@@ -1,6 +1,6 @@
1
1
  import { defineAction, fail } from "@agent-native/core/action";
2
- import { getDbExec } from "@agent-native/core/db";
3
2
  import { resourcePutIfAbsent, sharedResourceOwner, } from "@agent-native/core/resources/store";
3
+ import { readOrgMemberRole } from "@agent-native/core/server";
4
4
  import { z } from "zod";
5
5
  import { normalizeConnectUrl } from "../lib/connect-apps.js";
6
6
  import { currentOrgId, currentOwnerEmail, } from "../server/lib/dispatch-store.js";
@@ -19,14 +19,7 @@ async function assertCanManageSharedAgent() {
19
19
  });
20
20
  }
21
21
  const actor = currentOwnerEmail().trim().toLowerCase();
22
- const result = await getDbExec().execute({
23
- sql: `SELECT role FROM org_members
24
- WHERE org_id = ? AND LOWER(email) = ?
25
- AND federation_removal_pending_at IS NULL
26
- LIMIT 1`,
27
- args: [orgId, actor],
28
- });
29
- const role = result.rows[0]?.role;
22
+ const role = await readOrgMemberRole(orgId, actor);
30
23
  if (role !== "owner" && role !== "admin") {
31
24
  fail("Only organization owners and admins can connect agents.", {
32
25
  statusCode: 403,
@@ -1 +1 @@
1
- {"version":3,"file":"connect-external-agent.js","sourceRoot":"","sources":["../../src/actions/connect-external-agent.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineAction, fail } from \"@agent-native/core/action\";\nimport { getDbExec } from \"@agent-native/core/db\";\nimport {\n resourcePutIfAbsent,\n sharedResourceOwner,\n} from \"@agent-native/core/resources/store\";\nimport { z } from \"zod\";\n\nimport { normalizeConnectUrl } from \"../lib/connect-apps.js\";\nimport {\n currentOrgId,\n currentOwnerEmail,\n} from \"../server/lib/dispatch-store.js\";\n\nfunction slugify(value: string): string {\n return (\n value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\") || \"agent\"\n );\n}\n\nasync function assertCanManageSharedAgent() {\n const orgId = currentOrgId();\n if (!orgId) {\n fail(\"An active organization is required to connect an agent.\", {\n statusCode: 403,\n });\n }\n const actor = currentOwnerEmail().trim().toLowerCase();\n const result = await getDbExec().execute({\n sql: `SELECT role FROM org_members\n WHERE org_id = ? AND LOWER(email) = ?\n AND federation_removal_pending_at IS NULL\n LIMIT 1`,\n args: [orgId, actor],\n });\n const role = result.rows[0]?.role;\n if (role !== \"owner\" && role !== \"admin\") {\n fail(\"Only organization owners and admins can connect agents.\", {\n statusCode: 403,\n });\n }\n}\n\nexport default defineAction({\n description:\n \"Connect an existing HTTPS/A2A agent to Dispatch. This stores only its public endpoint and metadata; authentication remains in the normal A2A/MCP connection flow.\",\n schema: z.object({\n url: z.string().min(1).describe(\"HTTPS agent endpoint\"),\n name: z.string().max(160).optional().describe(\"Agent name\"),\n description: z.string().max(500).optional().describe(\"Short description\"),\n scope: z\n .enum([\"shared\", \"personal\"])\n .default(\"shared\")\n .describe(\"Share with the workspace or keep the connection personal\"),\n }),\n run: async ({ url, name, description, scope }) => {\n const parsed = normalizeConnectUrl(url);\n if (!parsed)\n fail(\"Use an HTTPS URL without credentials or private addresses.\");\n\n if (scope === \"shared\") await assertCanManageSharedAgent();\n const agentName = name?.trim() || parsed.hostname.replace(/^www\\./, \"\");\n const id = slugify(agentName);\n const path = `remote-agents/${id}.json`;\n const owner =\n scope === \"shared\"\n ? sharedResourceOwner(currentOrgId())\n : currentOwnerEmail();\n\n const manifest = {\n id,\n name: agentName,\n ...(description?.trim() ? { description: description.trim() } : {}),\n url: parsed.toString(),\n };\n const resource = await resourcePutIfAbsent(\n owner,\n path,\n JSON.stringify(manifest, null, 2),\n \"application/json\",\n );\n if (!resource) {\n fail(\n `An external agent already exists at ${path}. Rename it before connecting again.`,\n { statusCode: 409 },\n );\n }\n\n return { status: \"created\" as const, resource, agent: manifest, scope };\n },\n});\n"]}
1
+ {"version":3,"file":"connect-external-agent.js","sourceRoot":"","sources":["../../src/actions/connect-external-agent.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineAction, fail } from \"@agent-native/core/action\";\nimport {\n resourcePutIfAbsent,\n sharedResourceOwner,\n} from \"@agent-native/core/resources/store\";\nimport { readOrgMemberRole } from \"@agent-native/core/server\";\nimport { z } from \"zod\";\n\nimport { normalizeConnectUrl } from \"../lib/connect-apps.js\";\nimport {\n currentOrgId,\n currentOwnerEmail,\n} from \"../server/lib/dispatch-store.js\";\n\nfunction slugify(value: string): string {\n return (\n value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\") || \"agent\"\n );\n}\n\nasync function assertCanManageSharedAgent() {\n const orgId = currentOrgId();\n if (!orgId) {\n fail(\"An active organization is required to connect an agent.\", {\n statusCode: 403,\n });\n }\n const actor = currentOwnerEmail().trim().toLowerCase();\n const role = await readOrgMemberRole(orgId, actor);\n if (role !== \"owner\" && role !== \"admin\") {\n fail(\"Only organization owners and admins can connect agents.\", {\n statusCode: 403,\n });\n }\n}\n\nexport default defineAction({\n description:\n \"Connect an existing HTTPS/A2A agent to Dispatch. This stores only its public endpoint and metadata; authentication remains in the normal A2A/MCP connection flow.\",\n schema: z.object({\n url: z.string().min(1).describe(\"HTTPS agent endpoint\"),\n name: z.string().max(160).optional().describe(\"Agent name\"),\n description: z.string().max(500).optional().describe(\"Short description\"),\n scope: z\n .enum([\"shared\", \"personal\"])\n .default(\"shared\")\n .describe(\"Share with the workspace or keep the connection personal\"),\n }),\n run: async ({ url, name, description, scope }) => {\n const parsed = normalizeConnectUrl(url);\n if (!parsed)\n fail(\"Use an HTTPS URL without credentials or private addresses.\");\n\n if (scope === \"shared\") await assertCanManageSharedAgent();\n const agentName = name?.trim() || parsed.hostname.replace(/^www\\./, \"\");\n const id = slugify(agentName);\n const path = `remote-agents/${id}.json`;\n const owner =\n scope === \"shared\"\n ? sharedResourceOwner(currentOrgId())\n : currentOwnerEmail();\n\n const manifest = {\n id,\n name: agentName,\n ...(description?.trim() ? { description: description.trim() } : {}),\n url: parsed.toString(),\n };\n const resource = await resourcePutIfAbsent(\n owner,\n path,\n JSON.stringify(manifest, null, 2),\n \"application/json\",\n );\n if (!resource) {\n fail(\n `An external agent already exists at ${path}. Rename it before connecting again.`,\n { statusCode: 409 },\n );\n }\n\n return { status: \"created\" as const, resource, agent: manifest, scope };\n },\n});\n"]}
@@ -2,7 +2,7 @@ import { defineAction } from "@agent-native/core/action";
2
2
  import { z } from "zod";
3
3
  import { listDispatchUsageMetrics } from "../server/lib/usage-metrics-store.js";
4
4
  export default defineAction({
5
- description: "Get personal, workspace, or owner-authorized app adoption metrics for Dispatch, including LLM usage, spend or Builder.io credit spend, active users, tracked app actions, app attribution, prompt previews, and recent activity. billing.unit is unknown when historical usage lacks engine metadata or mixes billing sources; monthlyByUser credits are null in that case. Workspace results also include monthlyByUser credit rows and workspaceAppCreationsByUserMonth rows from the shared token_usage and Dispatch audit tables. App scope is aggregate-only and returns daily/weekly active users plus tracked action counts for the selected app.",
5
+ description: "Get personal or workspace-member agent usage and spend, or aggregate app adoption metrics for Dispatch. Workspace results do not include customer/account/company usage or product data; use the relevant workspace app for those. Results may include active users, tracked app actions, app attribution, prompt previews, and recent activity. billing.unit is unknown when historical usage lacks engine metadata or mixes billing sources; monthlyByUser credits are null in that case. Workspace results also include monthlyByUser credit rows and workspaceAppCreationsByUserMonth rows from the shared token_usage and Dispatch audit tables. App scope is aggregate-only and returns daily/weekly active users plus tracked action counts for the selected app.",
6
6
  schema: z.object({
7
7
  sinceDays: z.coerce
8
8
  .number()
@@ -1 +1 @@
1
- {"version":3,"file":"list-dispatch-usage-metrics.js","sourceRoot":"","sources":["../../src/actions/list-dispatch-usage-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,0nBAA0nB;IAC5nB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,SAAS,EAAE,CAAC,CAAC,MAAM;aAChB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,GAAG,CAAC;aACR,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CAAC,0CAA0C,CAAC;QACvD,KAAK,EAAE,CAAC;aACL,IAAI,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;aAChC,OAAO,CAAC,WAAW,CAAC;aACpB,QAAQ,CACP,wFAAwF,CACzF;QACH,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,yDAAyD,CAAC;QACtE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CACP,+GAA+G,CAChH;KACJ,CAAC;IACF,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;IACvB,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE;QACX,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACvB;IACD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC;CACpD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { listDispatchUsageMetrics } from \"../server/lib/usage-metrics-store.js\";\n\nexport default defineAction({\n description:\n \"Get personal, workspace, or owner-authorized app adoption metrics for Dispatch, including LLM usage, spend or Builder.io credit spend, active users, tracked app actions, app attribution, prompt previews, and recent activity. billing.unit is unknown when historical usage lacks engine metadata or mixes billing sources; monthlyByUser credits are null in that case. Workspace results also include monthlyByUser credit rows and workspaceAppCreationsByUserMonth rows from the shared token_usage and Dispatch audit tables. App scope is aggregate-only and returns daily/weekly active users plus tracked action counts for the selected app.\",\n schema: z.object({\n sinceDays: z.coerce\n .number()\n .int()\n .min(1)\n .max(365)\n .default(30)\n .describe(\"Lookback window in days. Defaults to 30.\"),\n scope: z\n .enum([\"me\", \"workspace\", \"app\"])\n .default(\"workspace\")\n .describe(\n \"Whether to inspect your account, the whole workspace, or one app's aggregate adoption.\",\n ),\n userEmail: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\"Optional workspace member email to filter all usage to.\"),\n appId: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\n \"Workspace app id for scope=app. The app owner or an organization owner/admin can view its aggregate adoption.\",\n ),\n }),\n http: { method: \"GET\" },\n readOnly: true,\n parallelSafe: true,\n publicAgent: {\n expose: true,\n readOnly: true,\n requiresAuth: true,\n isConsequential: false,\n },\n run: async (args) => listDispatchUsageMetrics(args),\n});\n"]}
1
+ {"version":3,"file":"list-dispatch-usage-metrics.js","sourceRoot":"","sources":["../../src/actions/list-dispatch-usage-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,0uBAA0uB;IAC5uB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,SAAS,EAAE,CAAC,CAAC,MAAM;aAChB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,GAAG,CAAC;aACR,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CAAC,0CAA0C,CAAC;QACvD,KAAK,EAAE,CAAC;aACL,IAAI,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;aAChC,OAAO,CAAC,WAAW,CAAC;aACpB,QAAQ,CACP,wFAAwF,CACzF;QACH,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,yDAAyD,CAAC;QACtE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CACP,+GAA+G,CAChH;KACJ,CAAC;IACF,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;IACvB,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE;QACX,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACvB;IACD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC;CACpD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { listDispatchUsageMetrics } from \"../server/lib/usage-metrics-store.js\";\n\nexport default defineAction({\n description:\n \"Get personal or workspace-member agent usage and spend, or aggregate app adoption metrics for Dispatch. Workspace results do not include customer/account/company usage or product data; use the relevant workspace app for those. Results may include active users, tracked app actions, app attribution, prompt previews, and recent activity. billing.unit is unknown when historical usage lacks engine metadata or mixes billing sources; monthlyByUser credits are null in that case. Workspace results also include monthlyByUser credit rows and workspaceAppCreationsByUserMonth rows from the shared token_usage and Dispatch audit tables. App scope is aggregate-only and returns daily/weekly active users plus tracked action counts for the selected app.\",\n schema: z.object({\n sinceDays: z.coerce\n .number()\n .int()\n .min(1)\n .max(365)\n .default(30)\n .describe(\"Lookback window in days. Defaults to 30.\"),\n scope: z\n .enum([\"me\", \"workspace\", \"app\"])\n .default(\"workspace\")\n .describe(\n \"Whether to inspect your account, the whole workspace, or one app's aggregate adoption.\",\n ),\n userEmail: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\"Optional workspace member email to filter all usage to.\"),\n appId: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\n \"Workspace app id for scope=app. The app owner or an organization owner/admin can view its aggregate adoption.\",\n ),\n }),\n http: { method: \"GET\" },\n readOnly: true,\n parallelSafe: true,\n publicAgent: {\n expose: true,\n readOnly: true,\n requiresAuth: true,\n isConsequential: false,\n },\n run: async (args) => listDispatchUsageMetrics(args),\n});\n"]}
@@ -47,7 +47,8 @@ declare const _default: import("node_modules/@agent-native/core/dist").ActionDef
47
47
  notes?: string | undefined;
48
48
  scope?: "org" | "user" | undefined;
49
49
  }, {
50
- provider?: undefined;
50
+ message?: undefined;
51
+ found?: undefined;
51
52
  providers: {
52
53
  id: string;
53
54
  label: string;
@@ -58,13 +59,13 @@ declare const _default: import("node_modules/@agent-native/core/dist").ActionDef
58
59
  updatedAt: number;
59
60
  }[];
60
61
  count: number;
61
- found?: undefined;
62
+ provider?: undefined;
62
63
  deleted?: undefined;
63
64
  registered?: undefined;
64
65
  id?: undefined;
65
66
  label?: undefined;
66
- message?: undefined;
67
67
  } | {
68
+ message?: undefined;
68
69
  providers?: undefined;
69
70
  count?: undefined;
70
71
  found: boolean;
@@ -73,32 +74,31 @@ declare const _default: import("node_modules/@agent-native/core/dist").ActionDef
73
74
  registered?: undefined;
74
75
  id?: undefined;
75
76
  label?: undefined;
76
- message?: undefined;
77
77
  } | {
78
- provider?: undefined;
78
+ message?: undefined;
79
79
  providers?: undefined;
80
80
  count?: undefined;
81
+ provider?: undefined;
81
82
  found: boolean;
82
83
  id: string;
83
84
  deleted?: undefined;
84
85
  registered?: undefined;
85
86
  label?: undefined;
86
- message?: undefined;
87
87
  } | {
88
- provider?: undefined;
88
+ message?: undefined;
89
+ found?: undefined;
89
90
  providers?: undefined;
90
91
  count?: undefined;
91
- found?: undefined;
92
+ provider?: undefined;
92
93
  deleted: boolean;
93
94
  id: string;
94
95
  registered?: undefined;
95
96
  label?: undefined;
96
- message?: undefined;
97
97
  } | {
98
- provider?: undefined;
98
+ found?: undefined;
99
99
  providers?: undefined;
100
100
  count?: undefined;
101
- found?: undefined;
101
+ provider?: undefined;
102
102
  deleted?: undefined;
103
103
  registered: boolean;
104
104
  id: string;
@@ -1,20 +1,8 @@
1
- import { getDbExec } from "@agent-native/core/db";
2
1
  import { createCustomProviderRegistrationAction } from "@agent-native/core/provider-api/actions/custom-provider-registration";
3
- import { getCredentialContext } from "@agent-native/core/server";
2
+ import { getCredentialContext, readOrgMemberRole, } from "@agent-native/core/server";
4
3
  async function resolveCallerOrgRole(orgId, email) {
5
4
  try {
6
- const client = getDbExec();
7
- const { rows } = await client.execute({
8
- sql: `SELECT role FROM org_members
9
- WHERE org_id = ? AND LOWER(email) = ?
10
- AND federation_removal_pending_at IS NULL
11
- LIMIT 1`,
12
- args: [orgId, email.toLowerCase()],
13
- });
14
- if (rows.length === 0)
15
- return null;
16
- const role = rows[0].role;
17
- return typeof role === "string" && role ? role : null;
5
+ return await readOrgMemberRole(orgId, email);
18
6
  }
19
7
  catch {
20
8
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"provider-api-register.js","sourceRoot":"","sources":["../../src/actions/provider-api-register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,sCAAsC,EAAE,MAAM,sEAAsE,CAAC;AAC9H,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,KAAK,UAAU,oBAAoB,CACjC,KAAa,EACb,KAAa;IAEb,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;YACpC,GAAG,EAAE;;;oBAGS;YACd,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;SACnC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,IAAI,GAAI,IAAI,CAAC,CAAC,CAAwB,CAAC,IAAI,CAAC;QAClD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,eAAe,sCAAsC,CAAC;IACpD,WAAW,EAAE;;;;;;;;2GAQ4F;IACzG,UAAU,EAAE,oBAAoB;IAChC,cAAc,EAAE,oBAAoB;CACrC,CAAC,CAAC","sourcesContent":["import { getDbExec } from \"@agent-native/core/db\";\nimport { createCustomProviderRegistrationAction } from \"@agent-native/core/provider-api/actions/custom-provider-registration\";\nimport { getCredentialContext } from \"@agent-native/core/server\";\n\nasync function resolveCallerOrgRole(\n orgId: string,\n email: string,\n): Promise<string | null> {\n try {\n const client = getDbExec();\n const { rows } = await client.execute({\n sql: `SELECT role FROM org_members\n WHERE org_id = ? AND LOWER(email) = ?\n AND federation_removal_pending_at IS NULL\n LIMIT 1`,\n args: [orgId, email.toLowerCase()],\n });\n if (rows.length === 0) return null;\n const role = (rows[0] as { role?: unknown }).role;\n return typeof role === \"string\" && role ? role : null;\n } catch {\n return null;\n }\n}\n\nexport default createCustomProviderRegistrationAction({\n description: `Register or update a custom API provider so the agent can call it via provider-api-request and look up its docs via provider-api-docs.\n\nIMPORTANT — credentials:\n- This action stores only credential KEY NAMES, never secret values.\n- If the required API key is not yet saved, instruct the user to add it via app Settings → Keys, or use the create-vault-secret action, before calling this action.\n- Supported auth kinds: none, bearer, basic, api-key-header.\n google-service-account and oauth-bearer are NOT supported for custom providers.\n\nAfter registration the provider appears in provider-api-catalog and can be used with provider-api-request.`,\n getContext: getCredentialContext,\n resolveOrgRole: resolveCallerOrgRole,\n});\n"]}
1
+ {"version":3,"file":"provider-api-register.js","sourceRoot":"","sources":["../../src/actions/provider-api-register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sCAAsC,EAAE,MAAM,sEAAsE,CAAC;AAC9H,OAAO,EACL,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAEnC,KAAK,UAAU,oBAAoB,CACjC,KAAa,EACb,KAAa;IAEb,IAAI,CAAC;QACH,OAAO,MAAM,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,eAAe,sCAAsC,CAAC;IACpD,WAAW,EAAE;;;;;;;;2GAQ4F;IACzG,UAAU,EAAE,oBAAoB;IAChC,cAAc,EAAE,oBAAoB;CACrC,CAAC,CAAC","sourcesContent":["import { createCustomProviderRegistrationAction } from \"@agent-native/core/provider-api/actions/custom-provider-registration\";\nimport {\n getCredentialContext,\n readOrgMemberRole,\n} from \"@agent-native/core/server\";\n\nasync function resolveCallerOrgRole(\n orgId: string,\n email: string,\n): Promise<string | null> {\n try {\n return await readOrgMemberRole(orgId, email);\n } catch {\n return null;\n }\n}\n\nexport default createCustomProviderRegistrationAction({\n description: `Register or update a custom API provider so the agent can call it via provider-api-request and look up its docs via provider-api-docs.\n\nIMPORTANT — credentials:\n- This action stores only credential KEY NAMES, never secret values.\n- If the required API key is not yet saved, instruct the user to add it via app Settings → Keys, or use the create-vault-secret action, before calling this action.\n- Supported auth kinds: none, bearer, basic, api-key-header.\n google-service-account and oauth-bearer are NOT supported for custom providers.\n\nAfter registration the provider appears in provider-api-catalog and can be used with provider-api-request.`,\n getContext: getCredentialContext,\n resolveOrgRole: resolveCallerOrgRole,\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,KAAK,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,EAAE,OAAO,MAAM,CAAC,CAAC;AAEpE,eAAO,MAAM,KAAK,EAA0B,MAAM,gBAAgB,CAAC;AA6BnE,wBAAgB,EAAE,qBAEjB;AAED,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,KAAK,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,EAAE,OAAO,MAAM,CAAC,CAAC;AAEpE,eAAO,MAAM,KAAK,EAA0B,MAAM,gBAAgB,CAAC;AAuBnE,wBAAgB,EAAE,qBAEjB;AAED,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC"}
package/dist/db/index.js CHANGED
@@ -1,4 +1,5 @@
1
- import { createGetDb, getDbExec } from "@agent-native/core/db";
1
+ import { createGetDb } from "@agent-native/core/db";
2
+ import { readOrgMemberRole } from "@agent-native/core/server";
2
3
  import { registerShareableResource } from "@agent-native/core/sharing";
3
4
  import * as schema from "./schema.js";
4
5
  export const getDb = createGetDb(schema);
@@ -17,14 +18,8 @@ registerShareableResource({
17
18
  if (!ctx.userEmail || !ctx.orgId || resource?.orgId !== ctx.orgId) {
18
19
  return false;
19
20
  }
20
- const result = await getDbExec().execute({
21
- sql: `SELECT 1 FROM org_members
22
- WHERE org_id = ? AND LOWER(email) = LOWER(?)
23
- AND federation_removal_pending_at IS NULL
24
- AND role IN ('owner', 'admin') LIMIT 1`,
25
- args: [ctx.orgId, ctx.userEmail],
26
- });
27
- return result.rows.length > 0;
21
+ const role = await readOrgMemberRole(ctx.orgId, ctx.userEmail);
22
+ return role === "owner" || role === "admin";
28
23
  },
29
24
  });
30
25
  export function db() {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAGvE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAItC,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAA2B,CAAC;AAEnE,yBAAyB,CAAC;IACxB,IAAI,EAAE,eAAe;IACrB,aAAa,EAAE,MAAM,CAAC,aAAa;IACnC,WAAW,EAAE,MAAM,CAAC,kBAAkB;IACtC,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,MAAM;IACnB,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5B,OAAO,QAAQ,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;IAChE,KAAK;IACL,WAAW,EAAE,KAAK;IAClB,6BAA6B,EAAE,IAAI;IACnC,mBAAmB,EAAE,IAAI;IACzB,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE;QACvC,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,QAAQ,EAAE,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;YAClE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,OAAO,CAAC;YACvC,GAAG,EAAE;;;qDAG0C;YAC/C,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC;SACjC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAChC,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,EAAE;IAChB,OAAO,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC","sourcesContent":["import { createGetDb, getDbExec } from \"@agent-native/core/db\";\nimport { registerShareableResource } from \"@agent-native/core/sharing\";\nimport type { PgDatabase, PgQueryResultHKT } from \"drizzle-orm/pg-core\";\n\nimport * as schema from \"./schema.js\";\n\ntype DispatchDatabase = PgDatabase<PgQueryResultHKT, typeof schema>;\n\nexport const getDb = createGetDb(schema) as () => DispatchDatabase;\n\nregisterShareableResource({\n type: \"workspace-app\",\n resourceTable: schema.workspaceApps,\n sharesTable: schema.workspaceAppShares,\n displayName: \"Workspace app\",\n titleColumn: \"name\",\n getResourcePath: (resource) =>\n typeof resource?.path === \"string\" ? resource.path : undefined,\n getDb,\n allowPublic: false,\n requireOrgMemberForUserShares: true,\n supportsGroupShares: true,\n canManageAccess: async (resource, ctx) => {\n if (!ctx.userEmail || !ctx.orgId || resource?.orgId !== ctx.orgId) {\n return false;\n }\n const result = await getDbExec().execute({\n sql: `SELECT 1 FROM org_members\n WHERE org_id = ? AND LOWER(email) = LOWER(?)\n AND federation_removal_pending_at IS NULL\n AND role IN ('owner', 'admin') LIMIT 1`,\n args: [ctx.orgId, ctx.userEmail],\n });\n return result.rows.length > 0;\n },\n});\n\nexport function db() {\n return getDb();\n}\n\nexport { schema };\nexport * from \"./schema.js\";\nexport * from \"./migrations.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAGvE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAItC,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAA2B,CAAC;AAEnE,yBAAyB,CAAC;IACxB,IAAI,EAAE,eAAe;IACrB,aAAa,EAAE,MAAM,CAAC,aAAa;IACnC,WAAW,EAAE,MAAM,CAAC,kBAAkB;IACtC,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,MAAM;IACnB,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5B,OAAO,QAAQ,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;IAChE,KAAK;IACL,WAAW,EAAE,KAAK;IAClB,6BAA6B,EAAE,IAAI;IACnC,mBAAmB,EAAE,IAAI;IACzB,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE;QACvC,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,QAAQ,EAAE,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;YAClE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/D,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,CAAC;IAC9C,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,EAAE;IAChB,OAAO,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC","sourcesContent":["import { createGetDb } from \"@agent-native/core/db\";\nimport { readOrgMemberRole } from \"@agent-native/core/server\";\nimport { registerShareableResource } from \"@agent-native/core/sharing\";\nimport type { PgDatabase, PgQueryResultHKT } from \"drizzle-orm/pg-core\";\n\nimport * as schema from \"./schema.js\";\n\ntype DispatchDatabase = PgDatabase<PgQueryResultHKT, typeof schema>;\n\nexport const getDb = createGetDb(schema) as () => DispatchDatabase;\n\nregisterShareableResource({\n type: \"workspace-app\",\n resourceTable: schema.workspaceApps,\n sharesTable: schema.workspaceAppShares,\n displayName: \"Workspace app\",\n titleColumn: \"name\",\n getResourcePath: (resource) =>\n typeof resource?.path === \"string\" ? resource.path : undefined,\n getDb,\n allowPublic: false,\n requireOrgMemberForUserShares: true,\n supportsGroupShares: true,\n canManageAccess: async (resource, ctx) => {\n if (!ctx.userEmail || !ctx.orgId || resource?.orgId !== ctx.orgId) {\n return false;\n }\n const role = await readOrgMemberRole(ctx.orgId, ctx.userEmail);\n return role === \"owner\" || role === \"admin\";\n },\n});\n\nexport function db() {\n return getDb();\n}\n\nexport { schema };\nexport * from \"./schema.js\";\nexport * from \"./migrations.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"admin-config.d.ts","sourceRoot":"","sources":["../../../src/server/lib/admin-config.ts"],"names":[],"mappings":"AAEA,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CASjE;AAED,wBAAgB,4BAA4B,IAAI,MAAM,GAAG,IAAI,CAE5D"}
1
+ {"version":3,"file":"admin-config.d.ts","sourceRoot":"","sources":["../../../src/server/lib/admin-config.ts"],"names":[],"mappings":"AAEA,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAUjE;AAED,wBAAgB,4BAA4B,IAAI,MAAM,GAAG,IAAI,CAE5D"}
@@ -1,8 +1,10 @@
1
- import { getAppConfig } from "@agent-native/core/server";
1
+ import { getAppConfig, getRequestContext } from "@agent-native/core/server";
2
2
  export function isDispatchEnvironmentAdmin(email) {
3
3
  const normalized = email.trim().toLowerCase();
4
4
  if (!normalized)
5
5
  return false;
6
+ if (getRequestContext()?.a2aIdentityAssurance === "org-member")
7
+ return false;
6
8
  const config = getAppConfig().dispatch;
7
9
  return [
8
10
  ...config.adminEmails,
@@ -1 +1 @@
1
- {"version":3,"file":"admin-config.js","sourceRoot":"","sources":["../../../src/server/lib/admin-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,MAAM,UAAU,0BAA0B,CAAC,KAAa;IACtD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9B,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC,QAAQ,CAAC;IACvC,OAAO;QACL,GAAG,MAAM,CAAC,WAAW;QACrB,GAAG,MAAM,CAAC,oBAAoB;QAC9B,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,OAAO,YAAY,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACnE,CAAC","sourcesContent":["import { getAppConfig } from \"@agent-native/core/server\";\n\nexport function isDispatchEnvironmentAdmin(email: string): boolean {\n const normalized = email.trim().toLowerCase();\n if (!normalized) return false;\n const config = getAppConfig().dispatch;\n return [\n ...config.adminEmails,\n ...config.workspaceOwnerEmails,\n ...(config.defaultOwnerEmail ? [config.defaultOwnerEmail] : []),\n ].some((candidate) => candidate.trim().toLowerCase() === normalized);\n}\n\nexport function getDispatchDefaultOwnerEmail(): string | null {\n return getAppConfig().dispatch.defaultOwnerEmail?.trim() || null;\n}\n"]}
1
+ {"version":3,"file":"admin-config.js","sourceRoot":"","sources":["../../../src/server/lib/admin-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,UAAU,0BAA0B,CAAC,KAAa;IACtD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9B,IAAI,iBAAiB,EAAE,EAAE,oBAAoB,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IAC7E,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC,QAAQ,CAAC;IACvC,OAAO;QACL,GAAG,MAAM,CAAC,WAAW;QACrB,GAAG,MAAM,CAAC,oBAAoB;QAC9B,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,OAAO,YAAY,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACnE,CAAC","sourcesContent":["import { getAppConfig, getRequestContext } from \"@agent-native/core/server\";\n\nexport function isDispatchEnvironmentAdmin(email: string): boolean {\n const normalized = email.trim().toLowerCase();\n if (!normalized) return false;\n if (getRequestContext()?.a2aIdentityAssurance === \"org-member\") return false;\n const config = getAppConfig().dispatch;\n return [\n ...config.adminEmails,\n ...config.workspaceOwnerEmails,\n ...(config.defaultOwnerEmail ? [config.defaultOwnerEmail] : []),\n ].some((candidate) => candidate.trim().toLowerCase() === normalized);\n}\n\nexport function getDispatchDefaultOwnerEmail(): string | null {\n return getAppConfig().dispatch.defaultOwnerEmail?.trim() || null;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"app-creation-store.d.ts","sourceRoot":"","sources":["../../../src/server/lib/app-creation-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-creation-store.d.ts","sourceRoot":"","sources":["../../../src/server/lib/app-creation-store.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ import { describeErrorWithCauses } from "@agent-native/core/agent/engine/error-d
8
8
  import { getDbExec } from "@agent-native/core/db";
9
9
  import { and, eq, inArray } from "@agent-native/core/db/schema";
10
10
  import { getOrgA2ASecret, getOrgDomain, isWorkspaceAppAccessAllowed, workspaceApps, } from "@agent-native/core/org";
11
- import { CredentialStoreUnavailableError, FeatureNotConfiguredError, createBuilderProject, getBuilderBranchProjectId, getConfiguredAppBasePath, getRequestContext, inferWorkspaceAppRootHomePath, isIntegrationCallerRequest, readConfiguredWorkspaceAppHomePath, resolveAppRuntimeUrl, resolveVercelDeploymentProtectionHeaders, normalizeBuilderAgentAttachments, runBuilderAgent, } from "@agent-native/core/server";
11
+ import { CredentialStoreUnavailableError, FeatureNotConfiguredError, createBuilderProject, getBuilderBranchProjectId, getConfiguredAppBasePath, getRequestContext, inferWorkspaceAppRootHomePath, isIntegrationCallerRequest, readConfiguredWorkspaceAppHomePath, readOrgMemberRole, resolveAppRuntimeUrl, resolveVercelDeploymentProtectionHeaders, normalizeBuilderAgentAttachments, runBuilderAgent, } from "@agent-native/core/server";
12
12
  import { getOrgSetting } from "@agent-native/core/settings";
13
13
  import { getSetting, mutateSetting, putSetting, } from "@agent-native/core/settings";
14
14
  import { BUILDER_CONNECT_PROVIDER, BUILDER_CONNECT_PROVIDER_LABEL, assertValidWorkspaceAppId, connectRequiredResult, normalizeWorkspaceAppHomePath, parseAgentProfileMetadata, } from "@agent-native/core/shared";
@@ -2153,19 +2153,10 @@ function isSyntheticIntegrationOwner(ownerEmail) {
2153
2153
  }
2154
2154
  async function requestOwnerRole() {
2155
2155
  const orgId = currentOrgId();
2156
- const ownerEmail = currentOwnerEmail();
2157
2156
  if (!orgId)
2158
2157
  return null;
2159
2158
  try {
2160
- const { rows } = await getDbExec().execute({
2161
- sql: `SELECT role FROM org_members
2162
- WHERE org_id = ? AND LOWER(email) = ?
2163
- AND federation_removal_pending_at IS NULL
2164
- LIMIT 1`,
2165
- args: [orgId, ownerEmail.toLowerCase()],
2166
- });
2167
- const role = rows[0]?.role;
2168
- return typeof role === "string" ? role : null;
2159
+ return await readOrgMemberRole(orgId, currentOwnerEmail());
2169
2160
  }
2170
2161
  catch (error) {
2171
2162
  throw new AppCreationOwnerRoleUnavailableError(error);