@vm0/cli 9.272.2 → 9.272.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/{agent-3BC6HRAH.js → agent-WHCB5LBI.js} +6 -6
  2. package/{banking-BGG4CTYC.js → banking-QQJ53RSH.js} +4 -4
  3. package/{browser-7ZKWZ25F.js → browser-VKQNCNZE.js} +4 -4
  4. package/{chat-ASIO2UNP.js → chat-2CNJDHG4.js} +5 -5
  5. package/{chunk-PQ4CD7RN.js → chunk-2D4YK5MB.js} +6 -13
  6. package/chunk-2D4YK5MB.js.map +1 -0
  7. package/{chunk-WT4XFF6J.js → chunk-3HY2CRST.js} +2 -2
  8. package/{chunk-QJ72KGPE.js → chunk-AUDRFSYX.js} +19 -8
  9. package/chunk-AUDRFSYX.js.map +1 -0
  10. package/{chunk-VC3L2KE5.js → chunk-D4ANSWSQ.js} +2 -2
  11. package/{chunk-ARZ3T4EQ.js → chunk-E2TNZ6KL.js} +10 -23
  12. package/chunk-E2TNZ6KL.js.map +1 -0
  13. package/{chunk-TR6VFKGF.js → chunk-EPILBSJH.js} +6 -5
  14. package/{chunk-TR6VFKGF.js.map → chunk-EPILBSJH.js.map} +1 -1
  15. package/{chunk-SPO5XOGW.js → chunk-UUUKI456.js} +2 -2
  16. package/{chunk-27OAK2SW.js → chunk-V2OXQR2E.js} +10 -15
  17. package/chunk-V2OXQR2E.js.map +1 -0
  18. package/{chunk-MQJZRVW7.js → chunk-WGVEJFVX.js} +2 -2
  19. package/{chunk-47FARGTI.js → chunk-XVSBA2JI.js} +2 -2
  20. package/{chunk-G6KGJKAW.js → chunk-ZKPN75IX.js} +2 -2
  21. package/{computer-use-FVXQNWAO.js → computer-use-3VOJVVH7.js} +4 -4
  22. package/{connector-DTLRN26U.js → connector-ZPYH7Q6I.js} +7 -7
  23. package/{credit-Q2WDZHEQ.js → credit-QBW4I5C3.js} +5 -5
  24. package/{developer-support-GMZWXNJF.js → developer-support-4EFXRSG4.js} +4 -4
  25. package/{doctor-QK7DHCV5.js → doctor-YGWF4N5T.js} +5 -5
  26. package/{feishu-DCZXVEG4.js → feishu-A3W4XZGC.js} +4 -4
  27. package/{finance-TUZLZQ5Y.js → finance-POICUIKY.js} +4 -4
  28. package/{generate-6WNJAOD6.js → generate-OV3SOSWK.js} +6 -12
  29. package/generate-OV3SOSWK.js.map +1 -0
  30. package/{github-3KJXPQCD.js → github-KECDQE5Q.js} +4 -4
  31. package/{goal-IW3QTWBE.js → goal-QKE7NN2E.js} +4 -4
  32. package/{host-K4BQZFLE.js → host-G6JQ2BTU.js} +4 -4
  33. package/{logs-ZDSWYWMK.js → logs-ML5BY6VI.js} +7 -7
  34. package/{mail-IYTBVZQ5.js → mail-ULGY34UR.js} +6 -6
  35. package/{maps-I3PEZPLI.js → maps-OSYIW553.js} +4 -4
  36. package/{model-XCI7DOUT.js → model-4XIEMRSR.js} +5 -5
  37. package/{model-provider-KG2DRGBY.js → model-provider-UCQKRUIA.js} +5 -5
  38. package/{org-KPS2EYJ4.js → org-TLJESWDY.js} +4 -4
  39. package/package.json +1 -1
  40. package/{people-search-HCCCOGGP.js → people-search-WDRUPL2D.js} +4 -4
  41. package/{phone-UD4ECJSS.js → phone-4KPMQYDP.js} +4 -4
  42. package/{preference-UITTUZAS.js → preference-XNAZC7A3.js} +4 -4
  43. package/{resource-ON4LOTWT.js → resource-E4VU7FB6.js} +5 -5
  44. package/{scrape-NO4CJHDH.js → scrape-ZQO2AZRB.js} +4 -4
  45. package/{search-QSGR2M7W.js → search-RG6NGY4G.js} +7 -7
  46. package/{secret-Q2GRI46G.js → secret-ZC64A2XQ.js} +4 -4
  47. package/{slack-5GGNKYBL.js → slack-5LDVRRSP.js} +4 -4
  48. package/{teams-65GZ4FQ2.js → teams-TA52QAPO.js} +4 -4
  49. package/{telegram-KDXMZVXI.js → telegram-U6MXDWRO.js} +4 -4
  50. package/{upgrade-FMX34FFZ.js → upgrade-JVD5ZIRG.js} +3 -3
  51. package/{variable-HL3T5I7I.js → variable-HUJF7TOR.js} +4 -4
  52. package/{video-WHMOMLFT.js → video-K5WQQ5M2.js} +3 -3
  53. package/{weather-LY6KAOR3.js → weather-LPT4D6IC.js} +4 -4
  54. package/{web-ILRG7OTB.js → web-4OPKONZT.js} +4 -4
  55. package/{web-search-RNT6EIZ4.js → web-search-XIKMYMHD.js} +4 -4
  56. package/{whoami-ZUXKKIU7.js → whoami-QMQUFVQY.js} +6 -6
  57. package/{workflow-4KR2I3KE.js → workflow-6QRHXG7L.js} +5 -5
  58. package/zero.js +43 -43
  59. package/chunk-27OAK2SW.js.map +0 -1
  60. package/chunk-ARZ3T4EQ.js.map +0 -1
  61. package/chunk-PQ4CD7RN.js.map +0 -1
  62. package/chunk-QJ72KGPE.js.map +0 -1
  63. package/generate-6WNJAOD6.js.map +0 -1
  64. /package/{agent-3BC6HRAH.js.map → agent-WHCB5LBI.js.map} +0 -0
  65. /package/{banking-BGG4CTYC.js.map → banking-QQJ53RSH.js.map} +0 -0
  66. /package/{browser-7ZKWZ25F.js.map → browser-VKQNCNZE.js.map} +0 -0
  67. /package/{chat-ASIO2UNP.js.map → chat-2CNJDHG4.js.map} +0 -0
  68. /package/{chunk-WT4XFF6J.js.map → chunk-3HY2CRST.js.map} +0 -0
  69. /package/{chunk-VC3L2KE5.js.map → chunk-D4ANSWSQ.js.map} +0 -0
  70. /package/{chunk-SPO5XOGW.js.map → chunk-UUUKI456.js.map} +0 -0
  71. /package/{chunk-MQJZRVW7.js.map → chunk-WGVEJFVX.js.map} +0 -0
  72. /package/{chunk-47FARGTI.js.map → chunk-XVSBA2JI.js.map} +0 -0
  73. /package/{chunk-G6KGJKAW.js.map → chunk-ZKPN75IX.js.map} +0 -0
  74. /package/{computer-use-FVXQNWAO.js.map → computer-use-3VOJVVH7.js.map} +0 -0
  75. /package/{connector-DTLRN26U.js.map → connector-ZPYH7Q6I.js.map} +0 -0
  76. /package/{credit-Q2WDZHEQ.js.map → credit-QBW4I5C3.js.map} +0 -0
  77. /package/{developer-support-GMZWXNJF.js.map → developer-support-4EFXRSG4.js.map} +0 -0
  78. /package/{doctor-QK7DHCV5.js.map → doctor-YGWF4N5T.js.map} +0 -0
  79. /package/{feishu-DCZXVEG4.js.map → feishu-A3W4XZGC.js.map} +0 -0
  80. /package/{finance-TUZLZQ5Y.js.map → finance-POICUIKY.js.map} +0 -0
  81. /package/{github-3KJXPQCD.js.map → github-KECDQE5Q.js.map} +0 -0
  82. /package/{goal-IW3QTWBE.js.map → goal-QKE7NN2E.js.map} +0 -0
  83. /package/{host-K4BQZFLE.js.map → host-G6JQ2BTU.js.map} +0 -0
  84. /package/{logs-ZDSWYWMK.js.map → logs-ML5BY6VI.js.map} +0 -0
  85. /package/{mail-IYTBVZQ5.js.map → mail-ULGY34UR.js.map} +0 -0
  86. /package/{maps-I3PEZPLI.js.map → maps-OSYIW553.js.map} +0 -0
  87. /package/{model-XCI7DOUT.js.map → model-4XIEMRSR.js.map} +0 -0
  88. /package/{model-provider-KG2DRGBY.js.map → model-provider-UCQKRUIA.js.map} +0 -0
  89. /package/{org-KPS2EYJ4.js.map → org-TLJESWDY.js.map} +0 -0
  90. /package/{people-search-HCCCOGGP.js.map → people-search-WDRUPL2D.js.map} +0 -0
  91. /package/{phone-UD4ECJSS.js.map → phone-4KPMQYDP.js.map} +0 -0
  92. /package/{preference-UITTUZAS.js.map → preference-XNAZC7A3.js.map} +0 -0
  93. /package/{resource-ON4LOTWT.js.map → resource-E4VU7FB6.js.map} +0 -0
  94. /package/{scrape-NO4CJHDH.js.map → scrape-ZQO2AZRB.js.map} +0 -0
  95. /package/{search-QSGR2M7W.js.map → search-RG6NGY4G.js.map} +0 -0
  96. /package/{secret-Q2GRI46G.js.map → secret-ZC64A2XQ.js.map} +0 -0
  97. /package/{slack-5GGNKYBL.js.map → slack-5LDVRRSP.js.map} +0 -0
  98. /package/{teams-65GZ4FQ2.js.map → teams-TA52QAPO.js.map} +0 -0
  99. /package/{telegram-KDXMZVXI.js.map → telegram-U6MXDWRO.js.map} +0 -0
  100. /package/{upgrade-FMX34FFZ.js.map → upgrade-JVD5ZIRG.js.map} +0 -0
  101. /package/{variable-HL3T5I7I.js.map → variable-HUJF7TOR.js.map} +0 -0
  102. /package/{video-WHMOMLFT.js.map → video-K5WQQ5M2.js.map} +0 -0
  103. /package/{weather-LY6KAOR3.js.map → weather-LPT4D6IC.js.map} +0 -0
  104. /package/{web-ILRG7OTB.js.map → web-4OPKONZT.js.map} +0 -0
  105. /package/{web-search-RNT6EIZ4.js.map → web-search-XIKMYMHD.js.map} +0 -0
  106. /package/{whoami-ZUXKKIU7.js.map → whoami-QMQUFVQY.js.map} +0 -0
  107. /package/{workflow-4KR2I3KE.js.map → workflow-6QRHXG7L.js.map} +0 -0
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  getApiUrl
6
- } from "./chunk-WT4XFF6J.js";
6
+ } from "./chunk-3HY2CRST.js";
7
7
  import {
8
8
  init_esm_shims
9
9
  } from "./chunk-GPYQ24DR.js";
@@ -42,4 +42,4 @@ export {
42
42
  toPlatformUrl,
43
43
  getPlatformOrigin
44
44
  };
45
- //# sourceMappingURL=chunk-VC3L2KE5.js.map
45
+ //# sourceMappingURL=chunk-D4ANSWSQ.js.map
@@ -4,7 +4,7 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  UNKNOWN_PERMISSION_GRANT,
6
6
  getZeroConnectorCatalogPermissions
7
- } from "./chunk-QJ72KGPE.js";
7
+ } from "./chunk-AUDRFSYX.js";
8
8
  import {
9
9
  init_esm_shims
10
10
  } from "./chunk-GPYQ24DR.js";
@@ -77,9 +77,6 @@ function createFirewallMetadataPolicyResolver(metadata, overlay) {
77
77
  }
78
78
 
79
79
  // ../../packages/connectors/src/firewall-metadata/policy.ts
80
- function metadataConnectorSlug(metadata) {
81
- return metadata.connectorRef ?? metadata.type;
82
- }
83
80
  function expandFirewallMetadataDefaultPolicy(metadata) {
84
81
  const resolver = createFirewallMetadataPolicyResolver(metadata);
85
82
  const policies = {};
@@ -99,12 +96,11 @@ function findFirewallMetadataPermission(metadata, name) {
99
96
  function resolveFirewallMetadataPolicies(stored, metadata) {
100
97
  let resolved = stored;
101
98
  for (const detail of metadata) {
102
- const connectorSlug = metadataConnectorSlug(detail);
103
99
  const defaults = expandFirewallMetadataDefaultPolicy(detail);
104
- const existing = resolved?.[connectorSlug];
100
+ const existing = resolved?.[detail.connectorSlug];
105
101
  resolved = {
106
102
  ...resolved,
107
- [connectorSlug]: {
103
+ [detail.connectorSlug]: {
108
104
  policies: { ...defaults.policies, ...existing?.policies },
109
105
  ...existing?.unknownPolicy !== void 0 ? { unknownPolicy: existing.unknownPolicy } : { unknownPolicy: defaults.unknownPolicy }
110
106
  }
@@ -115,16 +111,16 @@ function resolveFirewallMetadataPolicies(stored, metadata) {
115
111
  function permissionGrantsToFirewallPolicies(grants) {
116
112
  const policies = {};
117
113
  for (const grant of grants) {
118
- const current = policies[grant.connectorRef] ?? { policies: {} };
114
+ const current = policies[grant.connectorSlug] ?? { policies: {} };
119
115
  if (grant.permission === UNKNOWN_PERMISSION_GRANT) {
120
- policies[grant.connectorRef] = {
116
+ policies[grant.connectorSlug] = {
121
117
  ...current,
122
118
  unknownPolicy: grant.action
123
119
  };
124
120
  continue;
125
121
  }
126
122
  current.policies[grant.permission] = grant.action;
127
- policies[grant.connectorRef] = current;
123
+ policies[grant.connectorSlug] = current;
128
124
  }
129
125
  return Object.keys(policies).length > 0 ? policies : null;
130
126
  }
@@ -185,9 +181,7 @@ async function loadConnectorPermissionInfos(args) {
185
181
  );
186
182
  const resolvedPolicies = resolveFirewallMetadataPolicies(
187
183
  args.storedPolicies,
188
- defaultPolicyMetadata.map(({ connectorSlug, ...metadata }) => {
189
- return { ...metadata, connectorRef: connectorSlug };
190
- })
184
+ defaultPolicyMetadata
191
185
  );
192
186
  return args.displayConnectorSlugs.map((connectorSlug) => {
193
187
  return connectorPermissionInfo({
@@ -198,17 +192,10 @@ async function loadConnectorPermissionInfos(args) {
198
192
  });
199
193
  }
200
194
  function connectorPermissionGrantsToFirewallPolicies(grants) {
201
- return permissionGrantsToFirewallPolicies(
202
- grants.map(({ connectorSlug, ...grant }) => {
203
- return { ...grant, connectorRef: connectorSlug };
204
- })
205
- );
195
+ return permissionGrantsToFirewallPolicies(grants);
206
196
  }
207
197
  function hasConnectorFirewallMetadataPermission(metadata, permission) {
208
- return findFirewallMetadataPermission(
209
- { ...metadata, connectorRef: metadata.connectorSlug },
210
- permission
211
- ) !== null;
198
+ return findFirewallMetadataPermission(metadata, permission) !== null;
212
199
  }
213
200
 
214
201
  export {
@@ -216,4 +203,4 @@ export {
216
203
  connectorPermissionGrantsToFirewallPolicies,
217
204
  hasConnectorFirewallMetadataPermission
218
205
  };
219
- //# sourceMappingURL=chunk-ARZ3T4EQ.js.map
206
+ //# sourceMappingURL=chunk-E2TNZ6KL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/zero/shared/firewall-permissions.ts","../../../packages/connectors/src/firewall-metadata/policy.ts","../../../packages/connectors/src/firewall-metadata/policy-resolver.ts"],"sourcesContent":["import {\n findFirewallMetadataPermission,\n permissionGrantsToFirewallPolicies,\n resolveFirewallMetadataPolicies,\n} from \"@vm0/connectors/firewall-metadata/policy\";\nimport type {\n FirewallPolicies,\n FirewallPolicyValue,\n} from \"@vm0/connectors/firewall-types\";\nimport { getZeroConnectorCatalogPermissions } from \"../../../lib/api\";\nimport type { ZeroUserPermissionGrant } from \"../../../lib/api/domains/zero-agents\";\nimport type { ZeroConnectorCatalogPermissionDetail } from \"../../../lib/api/domains/zero-connectors\";\n\nexport interface ConnectorPermissionInfo {\n readonly connectorSlug: string;\n readonly hasPermissions: boolean;\n readonly hasPolicyEntry: boolean;\n readonly permissions: readonly ZeroConnectorCatalogPermissionDetail[\"permissions\"][number][];\n readonly policies: Readonly<Record<string, FirewallPolicyValue>> | null;\n readonly unknownPolicy: FirewallPolicyValue;\n readonly allowed: number;\n readonly total: number;\n}\n\ntype PermissionMetadataBySlug = Map<\n string,\n ZeroConnectorCatalogPermissionDetail | null\n>;\n\nasync function loadPermissionMetadataBySlug(\n connectorSlugs: readonly string[],\n): Promise<PermissionMetadataBySlug> {\n const uniqueConnectorSlugs = [...new Set(connectorSlugs)];\n const entries = await Promise.all(\n uniqueConnectorSlugs.map(async (connectorSlug) => {\n return [\n connectorSlug,\n await getZeroConnectorCatalogPermissions(connectorSlug),\n ] as const;\n }),\n );\n return new Map(entries);\n}\n\nfunction connectorPermissionInfo(args: {\n readonly connectorSlug: string;\n readonly metadata: ZeroConnectorCatalogPermissionDetail | null;\n readonly resolvedPolicies: FirewallPolicies | null;\n}): ConnectorPermissionInfo {\n if (!args.metadata) {\n return {\n connectorSlug: args.connectorSlug,\n hasPermissions: false,\n hasPolicyEntry: false,\n permissions: [],\n policies: null,\n unknownPolicy: \"allow\",\n allowed: 0,\n total: 0,\n };\n }\n\n const connectorPolicy = args.resolvedPolicies?.[args.metadata.connectorSlug];\n const policies =\n connectorPolicy && Object.keys(connectorPolicy.policies).length > 0\n ? connectorPolicy.policies\n : null;\n const total = args.metadata.permissions.length;\n const allowed = policies\n ? args.metadata.permissions.filter((permission) => {\n return policies[permission.name] === \"allow\";\n }).length\n : 0;\n\n return {\n connectorSlug: args.connectorSlug,\n hasPermissions: true,\n hasPolicyEntry: connectorPolicy !== undefined,\n permissions: args.metadata.permissions,\n policies,\n unknownPolicy: connectorPolicy?.unknownPolicy ?? \"allow\",\n allowed,\n total,\n };\n}\n\nexport async function loadConnectorPermissionInfos(args: {\n readonly displayConnectorSlugs: readonly string[];\n readonly defaultPolicyConnectorSlugs: readonly string[];\n readonly storedPolicies: FirewallPolicies | null;\n}): Promise<ConnectorPermissionInfo[]> {\n const metadataBySlug = await loadPermissionMetadataBySlug([\n ...args.displayConnectorSlugs,\n ...args.defaultPolicyConnectorSlugs,\n ]);\n const defaultPolicyMetadata = args.defaultPolicyConnectorSlugs.flatMap(\n (connectorSlug) => {\n const metadata = metadataBySlug.get(connectorSlug);\n return metadata ? [metadata] : [];\n },\n );\n const resolvedPolicies = resolveFirewallMetadataPolicies(\n args.storedPolicies,\n defaultPolicyMetadata,\n );\n\n return args.displayConnectorSlugs.map((connectorSlug) => {\n return connectorPermissionInfo({\n connectorSlug,\n metadata: metadataBySlug.get(connectorSlug) ?? null,\n resolvedPolicies,\n });\n });\n}\n\nexport function connectorPermissionGrantsToFirewallPolicies(\n grants: readonly ZeroUserPermissionGrant[],\n): FirewallPolicies | null {\n return permissionGrantsToFirewallPolicies(grants);\n}\n\nexport function hasConnectorFirewallMetadataPermission(\n metadata: ZeroConnectorCatalogPermissionDetail,\n permission: string,\n): boolean {\n return findFirewallMetadataPermission(metadata, permission) !== null;\n}\n","import {\n UNKNOWN_PERMISSION_GRANT,\n type FirewallPolicies,\n type FirewallPolicy,\n type FirewallPolicyValue,\n} from \"../firewall-types\";\nimport { createFirewallMetadataPolicyResolver } from \"./policy-resolver\";\n\nexport type {\n FirewallMetadataPolicyListState,\n FirewallMetadataPolicyOverlay,\n FirewallMetadataPolicyResolver,\n} from \"./policy-resolver\";\n\nexport interface FirewallPermissionPolicyMetadataPermission {\n readonly name: string;\n readonly description?: string;\n}\n\nexport interface FirewallPermissionPolicyCategoryMetadata {\n readonly categories: Readonly<Record<string, string>>;\n readonly displayOrder: readonly string[];\n}\n\nexport type FirewallPermissionPolicyDefaultOverrides = Readonly<\n Partial<Record<FirewallPolicyValue, readonly string[]>>\n>;\n\nexport interface FirewallPermissionPolicyDefaultMetadata {\n readonly permissionDefault: FirewallPolicyValue;\n readonly permissionOverrides?: FirewallPermissionPolicyDefaultOverrides;\n readonly unknownPolicy: FirewallPolicyValue;\n}\n\ninterface FirewallPermissionPolicyMetadataBase {\n readonly label: string;\n readonly permissionCount: number;\n readonly permissions: readonly FirewallPermissionPolicyMetadataPermission[];\n readonly categories?: FirewallPermissionPolicyCategoryMetadata | null;\n readonly defaultPolicy: FirewallPermissionPolicyDefaultMetadata;\n}\n\nexport interface FirewallPermissionPolicyMetadata extends FirewallPermissionPolicyMetadataBase {\n readonly connectorSlug: string;\n}\n\nexport interface FirewallMetadataPermissionGroup<T extends { name: string }> {\n readonly category: string;\n readonly permissions: T[];\n}\n\nexport type FirewallPermissionGrantAction = Extract<\n FirewallPolicyValue,\n \"allow\" | \"deny\"\n>;\n\nexport interface FirewallPermissionGrant {\n readonly connectorSlug: string;\n readonly permission: string;\n readonly action: FirewallPermissionGrantAction;\n}\n\nexport { createFirewallMetadataPolicyResolver };\n\nexport function expandFirewallMetadataDefaultPolicy(\n metadata: FirewallPermissionPolicyMetadata,\n): FirewallPolicy {\n const resolver = createFirewallMetadataPolicyResolver(metadata);\n const policies: Record<string, FirewallPolicyValue> = {};\n\n for (const permission of metadata.permissions) {\n policies[permission.name] = resolver.permission(permission.name);\n }\n\n return {\n policies,\n unknownPolicy: resolver.unknown(),\n };\n}\n\nexport function findFirewallMetadataPermission(\n metadata: FirewallPermissionPolicyMetadata,\n name: string,\n): FirewallPermissionPolicyMetadata[\"permissions\"][number] | null {\n return (\n metadata.permissions.find((permission) => {\n return permission.name === name;\n }) ?? null\n );\n}\n\nexport function groupFirewallMetadataPermissionsByCategory<\n T extends { name: string },\n>(\n permissions: readonly T[],\n metadata: FirewallPermissionPolicyMetadata,\n): FirewallMetadataPermissionGroup<T>[] | null {\n if (!metadata.categories) {\n return null;\n }\n\n const grouped = new Map<string, T[]>();\n for (const category of metadata.categories.displayOrder) {\n grouped.set(category, []);\n }\n\n for (const permission of permissions) {\n const category = metadata.categories.categories[permission.name];\n if (!category) {\n continue;\n }\n grouped.get(category)?.push(permission);\n }\n\n return [...grouped.entries()]\n .filter(([, groupPermissions]) => {\n return groupPermissions.length > 0;\n })\n .map(([category, groupPermissions]) => {\n return { category, permissions: groupPermissions };\n });\n}\n\nexport function resolveFirewallMetadataPolicies(\n stored: FirewallPolicies | null,\n metadata: readonly FirewallPermissionPolicyMetadata[],\n): FirewallPolicies | null {\n let resolved: FirewallPolicies | null = stored;\n for (const detail of metadata) {\n const defaults = expandFirewallMetadataDefaultPolicy(detail);\n const existing = resolved?.[detail.connectorSlug];\n resolved = {\n ...resolved,\n [detail.connectorSlug]: {\n policies: { ...defaults.policies, ...existing?.policies },\n ...(existing?.unknownPolicy !== undefined\n ? { unknownPolicy: existing.unknownPolicy }\n : { unknownPolicy: defaults.unknownPolicy }),\n },\n };\n }\n return resolved;\n}\n\nexport function permissionGrantsToFirewallPolicies(\n grants: readonly FirewallPermissionGrant[],\n): FirewallPolicies | null {\n const policies: FirewallPolicies = {};\n for (const grant of grants) {\n const current = policies[grant.connectorSlug] ?? { policies: {} };\n if (grant.permission === UNKNOWN_PERMISSION_GRANT) {\n policies[grant.connectorSlug] = {\n ...current,\n unknownPolicy: grant.action,\n };\n continue;\n }\n current.policies[grant.permission] = grant.action;\n policies[grant.connectorSlug] = current;\n }\n return Object.keys(policies).length > 0 ? policies : null;\n}\n","import type { FirewallPolicyValue } from \"../firewall-types\";\n\ninterface FirewallMetadataPolicyResolverMetadata {\n readonly defaultPolicy: {\n readonly permissionDefault: FirewallPolicyValue;\n readonly permissionOverrides?: Readonly<\n Partial<Record<FirewallPolicyValue, readonly string[]>>\n >;\n readonly unknownPolicy: FirewallPolicyValue;\n };\n}\n\nexport interface FirewallMetadataPolicyOverlay {\n readonly permissionDefault?: FirewallPolicyValue;\n readonly permissionOverrides?: Readonly<Record<string, FirewallPolicyValue>>;\n readonly unknownPolicy?: FirewallPolicyValue;\n}\n\nexport type FirewallMetadataPolicyListState = FirewallPolicyValue | \"mixed\";\n\n/**\n * Resolves generated metadata defaults with an optional sparse policy overlay.\n * Permission name validation belongs to callers; unknown endpoints use unknown().\n */\nexport interface FirewallMetadataPolicyResolver {\n permission(name: string): FirewallPolicyValue;\n unknown(): FirewallPolicyValue;\n list(permissionNames: readonly string[]): FirewallMetadataPolicyListState;\n isPermissionOverridden(name: string): boolean;\n isUnknownOverridden(): boolean;\n}\n\nfunction buildMetadataOverrideLookup(\n metadata: FirewallMetadataPolicyResolverMetadata,\n): ReadonlyMap<string, FirewallPolicyValue> {\n const overrides = metadata.defaultPolicy.permissionOverrides;\n const lookup = new Map<string, FirewallPolicyValue>();\n if (!overrides) {\n return lookup;\n }\n\n for (const permission of overrides.allow ?? []) {\n lookup.set(permission, \"allow\");\n }\n for (const permission of overrides.deny ?? []) {\n lookup.set(permission, \"deny\");\n }\n for (const permission of overrides.ask ?? []) {\n lookup.set(permission, \"ask\");\n }\n\n return lookup;\n}\n\nfunction getOwnPermissionOverride(\n overrides: Readonly<Record<string, FirewallPolicyValue>> | undefined,\n name: string,\n): FirewallPolicyValue | undefined {\n if (!overrides || !Object.prototype.hasOwnProperty.call(overrides, name)) {\n return undefined;\n }\n return overrides[name];\n}\n\nexport function createFirewallMetadataPolicyResolver(\n metadata: FirewallMetadataPolicyResolverMetadata,\n overlay?: FirewallMetadataPolicyOverlay,\n): FirewallMetadataPolicyResolver {\n const metadataOverrides = buildMetadataOverrideLookup(metadata);\n\n function metadataPermission(name: string): FirewallPolicyValue {\n return (\n metadataOverrides.get(name) ?? metadata.defaultPolicy.permissionDefault\n );\n }\n\n function permission(name: string): FirewallPolicyValue {\n return (\n getOwnPermissionOverride(overlay?.permissionOverrides, name) ??\n overlay?.permissionDefault ??\n metadataPermission(name)\n );\n }\n\n return {\n permission,\n unknown: () => {\n return overlay?.unknownPolicy ?? metadata.defaultPolicy.unknownPolicy;\n },\n list: (permissionNames) => {\n let first: FirewallPolicyValue | null = null;\n for (const name of permissionNames) {\n const current = permission(name);\n if (first === null) {\n first = current;\n continue;\n }\n if (first !== current) {\n return \"mixed\";\n }\n }\n return first ?? \"mixed\";\n },\n isPermissionOverridden: (name) => {\n return permission(name) !== metadataPermission(name);\n },\n isUnknownOverridden: () => {\n return (\n (overlay?.unknownPolicy ?? metadata.defaultPolicy.unknownPolicy) !==\n metadata.defaultPolicy.unknownPolicy\n );\n },\n };\n}\n"],"mappings":"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","names":[]}
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-FKYDKKID.js";
9
9
  import {
10
10
  listVideoTemplates
11
- } from "./chunk-PQ4CD7RN.js";
11
+ } from "./chunk-2D4YK5MB.js";
12
12
  import {
13
13
  authHeadersSchema,
14
14
  connectorCatalogDiagnosticsSchema,
@@ -19,7 +19,7 @@ import {
19
19
  searchZeroLogs,
20
20
  unifiedRunRequestSchema,
21
21
  zeroAgentVisibilitySchema
22
- } from "./chunk-QJ72KGPE.js";
22
+ } from "./chunk-AUDRFSYX.js";
23
23
  import {
24
24
  apiErrorSchema,
25
25
  external_exports,
@@ -33,7 +33,7 @@ import {
33
33
  upsertModelProviderRequestSchema,
34
34
  upsertModelProviderResponseSchema,
35
35
  withErrorHandler
36
- } from "./chunk-WT4XFF6J.js";
36
+ } from "./chunk-3HY2CRST.js";
37
37
  import {
38
38
  Command
39
39
  } from "./chunk-CCWPKGTB.js";
@@ -12937,7 +12937,8 @@ var cronAggregateModelStatsResponseSchema = external_exports.object({
12937
12937
  cutoff: external_exports.iso.datetime(),
12938
12938
  processedHours: external_exports.number().int().nonnegative(),
12939
12939
  processedObservations: external_exports.number().int().nonnegative(),
12940
- updatedStats: external_exports.number().int().nonnegative()
12940
+ updatedStats: external_exports.number().int().nonnegative(),
12941
+ deletedObservations: external_exports.number().int().nonnegative()
12941
12942
  });
12942
12943
  var cronAggregateUsageContract = c36.router({
12943
12944
  aggregate: {
@@ -18127,4 +18128,4 @@ export {
18127
18128
  runLogsSearch,
18128
18129
  searchCommand
18129
18130
  };
18130
- //# sourceMappingURL=chunk-TR6VFKGF.js.map
18131
+ //# sourceMappingURL=chunk-EPILBSJH.js.map