@ekanos/cli 0.19.0 → 0.20.0
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/commands/audiences.d.ts +5 -3
- package/dist/commands/audiences.js +6 -4
- package/dist/commands/audiences.js.map +1 -1
- package/dist/commands/scope-notice.d.ts +5 -4
- package/dist/commands/scope-notice.js +22 -11
- package/dist/commands/scope-notice.js.map +1 -1
- package/dist/commands/teams-audience.d.ts +11 -2
- package/dist/commands/teams-audience.js +22 -7
- package/dist/commands/teams-audience.js.map +1 -1
- package/dist/commands/teams-lifecycle.js +8 -2
- package/dist/commands/teams-lifecycle.js.map +1 -1
- package/dist/experience/definition-checks.js +4 -1
- package/dist/experience/definition-checks.js.map +1 -1
- package/dist/experience/definition-shape.d.ts +2 -0
- package/dist/experience/definition-shape.js.map +1 -1
- package/dist/index.js +13 -9
- package/dist/index.js.map +1 -1
- package/dist/team-lifecycle-api.d.ts +30 -0
- package/dist/team-lifecycle-api.js +2 -0
- package/dist/team-lifecycle-api.js.map +1 -1
- package/dist/teams-api.js +29 -24
- package/dist/teams-api.js.map +1 -1
- package/package.json +2 -2
- package/templates/experience/package.json.tmpl +4 -4
- package/templates/package.json.tmpl +4 -4
|
@@ -23,6 +23,11 @@ export declare const TeamLeaveSchema: z.ZodObject<{
|
|
|
23
23
|
export declare const TeamGroupSchema: z.ZodObject<{
|
|
24
24
|
id: z.ZodString;
|
|
25
25
|
name: z.ZodString;
|
|
26
|
+
kind: z.ZodOptional<z.ZodEnum<{
|
|
27
|
+
everyone: "everyone";
|
|
28
|
+
predefined: "predefined";
|
|
29
|
+
team: "team";
|
|
30
|
+
}>>;
|
|
26
31
|
description: z.ZodNullable<z.ZodString>;
|
|
27
32
|
members: z.ZodArray<z.ZodObject<{
|
|
28
33
|
userId: z.ZodString;
|
|
@@ -50,6 +55,11 @@ declare const GroupListSchema: z.ZodObject<{
|
|
|
50
55
|
groups: z.ZodArray<z.ZodObject<{
|
|
51
56
|
id: z.ZodString;
|
|
52
57
|
name: z.ZodString;
|
|
58
|
+
kind: z.ZodOptional<z.ZodEnum<{
|
|
59
|
+
everyone: "everyone";
|
|
60
|
+
predefined: "predefined";
|
|
61
|
+
team: "team";
|
|
62
|
+
}>>;
|
|
53
63
|
description: z.ZodNullable<z.ZodString>;
|
|
54
64
|
members: z.ZodArray<z.ZodObject<{
|
|
55
65
|
userId: z.ZodString;
|
|
@@ -72,6 +82,11 @@ declare const GroupResultSchema: z.ZodObject<{
|
|
|
72
82
|
group: z.ZodObject<{
|
|
73
83
|
id: z.ZodString;
|
|
74
84
|
name: z.ZodString;
|
|
85
|
+
kind: z.ZodOptional<z.ZodEnum<{
|
|
86
|
+
everyone: "everyone";
|
|
87
|
+
predefined: "predefined";
|
|
88
|
+
team: "team";
|
|
89
|
+
}>>;
|
|
75
90
|
description: z.ZodNullable<z.ZodString>;
|
|
76
91
|
members: z.ZodArray<z.ZodObject<{
|
|
77
92
|
userId: z.ZodString;
|
|
@@ -94,6 +109,11 @@ declare const GroupUpdateSchema: z.ZodObject<{
|
|
|
94
109
|
group: z.ZodObject<{
|
|
95
110
|
id: z.ZodString;
|
|
96
111
|
name: z.ZodString;
|
|
112
|
+
kind: z.ZodOptional<z.ZodEnum<{
|
|
113
|
+
everyone: "everyone";
|
|
114
|
+
predefined: "predefined";
|
|
115
|
+
team: "team";
|
|
116
|
+
}>>;
|
|
97
117
|
description: z.ZodNullable<z.ZodString>;
|
|
98
118
|
members: z.ZodArray<z.ZodObject<{
|
|
99
119
|
userId: z.ZodString;
|
|
@@ -110,6 +130,11 @@ declare const GroupUpdateSchema: z.ZodObject<{
|
|
|
110
130
|
previous: z.ZodObject<{
|
|
111
131
|
id: z.ZodString;
|
|
112
132
|
name: z.ZodString;
|
|
133
|
+
kind: z.ZodOptional<z.ZodEnum<{
|
|
134
|
+
everyone: "everyone";
|
|
135
|
+
predefined: "predefined";
|
|
136
|
+
team: "team";
|
|
137
|
+
}>>;
|
|
113
138
|
description: z.ZodNullable<z.ZodString>;
|
|
114
139
|
members: z.ZodArray<z.ZodObject<{
|
|
115
140
|
userId: z.ZodString;
|
|
@@ -132,6 +157,11 @@ declare const GroupMemberSchema: z.ZodObject<{
|
|
|
132
157
|
group: z.ZodObject<{
|
|
133
158
|
id: z.ZodString;
|
|
134
159
|
name: z.ZodString;
|
|
160
|
+
kind: z.ZodOptional<z.ZodEnum<{
|
|
161
|
+
everyone: "everyone";
|
|
162
|
+
predefined: "predefined";
|
|
163
|
+
team: "team";
|
|
164
|
+
}>>;
|
|
135
165
|
description: z.ZodNullable<z.ZodString>;
|
|
136
166
|
members: z.ZodArray<z.ZodObject<{
|
|
137
167
|
userId: z.ZodString;
|
|
@@ -46,6 +46,8 @@ export const TeamLeaveSchema = z.object({
|
|
|
46
46
|
export const TeamGroupSchema = z.object({
|
|
47
47
|
id: z.string(),
|
|
48
48
|
name: z.string(),
|
|
49
|
+
/** Absent from hosts before plan 258 3.3, whose groups are all the team's. */
|
|
50
|
+
kind: z.enum(['team', 'predefined', 'everyone']).optional(),
|
|
49
51
|
description: z.string().nullable(),
|
|
50
52
|
members: z.array(PersonSchema),
|
|
51
53
|
products: z.array(z.object({ slug: z.string(), name: z.string() })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-lifecycle-api.js","sourceRoot":"","sources":["../src/team-lifecycle-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\n\nimport { type TeamsApiResult, call } from './teams-api';\n\n/**\n * The CLI's client for a team's lifecycle and a Source's roles and people —\n * every call a Source admin's, through `call` (`teams-api.ts`) for its\n * refresh and refusals.\n *\n * POST /api/partner/teams/<team>/members/<email>/resend → resend | renew\n * POST /api/partner/teams/<team>/leave → the caller leaves\n * GET|POST /api/partner/teams/<team>/groups\n * PATCH|DELETE /api/partner/teams/<team>/groups/<group>\n * PUT|DELETE /api/partner/teams/<team>/groups/<group>/members/<email>\n * GET /api/partner/teams/<team>/health\n * POST /api/partner/teams/<team>/health/<product> → run now\n * GET /api/partner/teams/<team>/workspaces\n * PUT /api/partner/teams/<team>/workspaces/default { workspace }\n * GET|POST /api/partner/sources/roles\n * PATCH|DELETE /api/partner/sources/roles/<role>\n * GET /api/partner/sources/people[?search=&page=]\n *\n * The shapes are read here rather than from `@ekanos/integration-schema`, so\n * this CLI works against a host without a schema release.\n */\n\nconst SourceRefSchema = z.object({\n id: z.string(),\n slug: z.string(),\n name: z.string().nullable(),\n});\nconst TeamRefSchema = z.object({ slug: z.string(), name: z.string() });\nconst PersonSchema = z.object({\n userId: z.string(),\n email: z.string().nullable(),\n name: z.string().nullable(),\n});\n\nexport const InvitationResendSchema = z.object({\n team: TeamRefSchema,\n email: z.string(),\n role: z.string(),\n action: z.enum(['renewed', 'resent']),\n expiresAt: z.string(),\n});\n\nexport const TeamLeaveSchema = z.object({\n team: TeamRefSchema,\n role: z.string(),\n});\n\nexport const TeamGroupSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().nullable(),\n members: z.array(PersonSchema),\n products: z.array(z.object({ slug: z.string(), name: z.string() })),\n widgetCount: z.number(),\n mcpToolCount: z.number(),\n});\nexport type TeamGroup = z.infer<typeof TeamGroupSchema>;\n\nconst GroupListSchema = z.object({\n source: SourceRefSchema,\n team: TeamRefSchema,\n groups: z.array(TeamGroupSchema),\n});\nconst GroupResultSchema = z.object({\n team: TeamRefSchema,\n group: TeamGroupSchema,\n});\nconst GroupUpdateSchema = GroupResultSchema.extend({\n previous: TeamGroupSchema,\n});\nconst GroupMemberSchema = GroupResultSchema.extend({\n email: z.string(),\n changed: z.boolean(),\n});\n\nconst HealthStatusSchema = z.enum([\n 'healthy',\n 'degraded',\n 'unhealthy',\n 'unknown',\n]);\nexport const TeamHealthRowSchema = z.object({\n productId: z.string(),\n productName: z.string(),\n slug: z.string(),\n status: HealthStatusSchema,\n lastCheckedAt: z.string().nullable(),\n lastSuccessAt: z.string().nullable(),\n lastFailureAt: z.string().nullable(),\n lastErrorMessage: z.string().nullable(),\n errorRatePct: z.number().nullable(),\n tokenExpiresAt: z.string().nullable(),\n statusReason: z.string().nullable(),\n});\nexport type TeamHealthRow = z.infer<typeof TeamHealthRowSchema>;\n\nconst HealthListSchema = z.object({\n source: SourceRefSchema,\n team: TeamRefSchema,\n integrations: z.array(TeamHealthRowSchema),\n});\nconst HealthRunSchema = z.object({\n team: TeamRefSchema,\n integration: TeamHealthRowSchema,\n});\n\nconst WorkspaceSchema = z.object({\n slug: z.string(),\n name: z.string(),\n label: z.string().nullable(),\n visible: z.boolean(),\n isDefault: z.boolean(),\n});\nconst WorkspaceListSchema = z.object({\n source: SourceRefSchema,\n team: TeamRefSchema,\n workspaces: z.array(WorkspaceSchema),\n});\nconst WorkspaceDefaultSchema = z.object({\n team: TeamRefSchema,\n workspace: WorkspaceSchema,\n previous: WorkspaceSchema.nullable(),\n changed: z.boolean(),\n});\n\nexport const SourceRoleSchema = z.object({\n name: z.string(),\n displayName: z.string(),\n description: z.string().nullable(),\n hierarchyLevel: z.number(),\n isSystem: z.boolean(),\n permissions: z.array(z.string()),\n memberCount: z.number(),\n});\nexport type SourceRole = z.infer<typeof SourceRoleSchema>;\n\nconst RoleListSchema = z.object({\n source: SourceRefSchema,\n roles: z.array(SourceRoleSchema),\n permissions: z.array(\n z.object({\n permission: z.string(),\n label: z.string(),\n category: z.string(),\n }),\n ),\n});\nconst RoleResultSchema = z.object({\n source: SourceRefSchema,\n role: SourceRoleSchema,\n});\nconst RoleUpdateSchema = RoleResultSchema.extend({\n previous: SourceRoleSchema,\n});\n\nconst PersonStateSchema = z.enum([\n 'active',\n 'suspended',\n 'invited',\n 'left',\n 'removed',\n]);\nconst PeopleSchema = z.object({\n source: SourceRefSchema,\n people: z.array(\n z.object({\n userId: z.string(),\n name: z.string().nullable(),\n email: z.string().nullable(),\n joinedAt: z.string().nullable(),\n status: PersonStateSchema,\n teams: z.array(\n z.object({\n accountName: z.string(),\n roleLabel: z.string(),\n status: PersonStateSchema,\n }),\n ),\n }),\n ),\n total: z.number(),\n page: z.number(),\n pageSize: z.number(),\n});\nexport type SourcePeople = z.infer<typeof PeopleSchema>;\n\ntype TeamTarget = { source: string; team: string };\ntype Api<T> = Promise<TeamsApiResult<T>>;\n\nconst teamPath = (team: string) =>\n `/api/partner/teams/${encodeURIComponent(team)}`;\nconst memberPath = (team: string, email: string) =>\n `${teamPath(team)}/members/${encodeURIComponent(email)}`;\nconst groupPath = (team: string, group: string) =>\n `${teamPath(team)}/groups/${encodeURIComponent(group)}`;\n\nexport function resendTeamInvitation(\n host: string,\n token: string,\n target: TeamTarget & { email: string },\n): Api<z.infer<typeof InvitationResendSchema>> {\n return call(host, token, InvitationResendSchema, {\n method: 'POST',\n path: `${memberPath(target.team, target.email)}/resend`,\n source: target.source,\n });\n}\n\nexport function leaveTeam(\n host: string,\n token: string,\n target: TeamTarget,\n): Api<z.infer<typeof TeamLeaveSchema>> {\n return call(host, token, TeamLeaveSchema, {\n method: 'POST',\n path: `${teamPath(target.team)}/leave`,\n source: target.source,\n });\n}\n\nexport function listTeamGroups(\n host: string,\n token: string,\n target: TeamTarget,\n): Api<z.infer<typeof GroupListSchema>> {\n return call(host, token, GroupListSchema, {\n method: 'GET',\n path: `${teamPath(target.team)}/groups`,\n source: target.source,\n });\n}\n\nexport function createTeamGroup(\n host: string,\n token: string,\n target: TeamTarget,\n body: { name: string; description?: string; products?: string[] },\n): Api<z.infer<typeof GroupResultSchema>> {\n return call(host, token, GroupResultSchema, {\n method: 'POST',\n path: `${teamPath(target.team)}/groups`,\n source: target.source,\n body,\n });\n}\n\nexport function updateTeamGroup(\n host: string,\n token: string,\n target: TeamTarget & { group: string },\n body: { name?: string; description?: string | null; products?: string[] },\n): Api<z.infer<typeof GroupUpdateSchema>> {\n return call(host, token, GroupUpdateSchema, {\n method: 'PATCH',\n path: groupPath(target.team, target.group),\n source: target.source,\n body,\n });\n}\n\nexport function deleteTeamGroup(\n host: string,\n token: string,\n target: TeamTarget & { group: string },\n): Api<z.infer<typeof GroupResultSchema>> {\n return call(host, token, GroupResultSchema, {\n method: 'DELETE',\n path: groupPath(target.team, target.group),\n source: target.source,\n });\n}\n\nexport function setTeamGroupMember(\n host: string,\n token: string,\n target: TeamTarget & { group: string; email: string },\n member: boolean,\n): Api<z.infer<typeof GroupMemberSchema>> {\n return call(host, token, GroupMemberSchema, {\n method: member ? 'PUT' : 'DELETE',\n path: `${groupPath(target.team, target.group)}/members/${encodeURIComponent(target.email)}`,\n source: target.source,\n });\n}\n\nexport function listTeamHealth(\n host: string,\n token: string,\n target: TeamTarget,\n): Api<z.infer<typeof HealthListSchema>> {\n return call(host, token, HealthListSchema, {\n method: 'GET',\n path: `${teamPath(target.team)}/health`,\n source: target.source,\n });\n}\n\n/** The caller's own personal connection's health; `run` checks it now. */\nexport function ownTeamHealth(\n host: string,\n token: string,\n target: TeamTarget & { product: string },\n run: boolean,\n): Api<z.infer<typeof HealthRunSchema>> {\n return call(host, token, HealthRunSchema, {\n method: run ? 'POST' : 'GET',\n path: `${teamPath(target.team)}/health/${encodeURIComponent(target.product)}/mine`,\n source: target.source,\n });\n}\n\nexport function runTeamHealthCheck(\n host: string,\n token: string,\n target: TeamTarget & { product: string },\n): Api<z.infer<typeof HealthRunSchema>> {\n return call(host, token, HealthRunSchema, {\n method: 'POST',\n path: `${teamPath(target.team)}/health/${encodeURIComponent(target.product)}`,\n source: target.source,\n });\n}\n\nexport function listTeamWorkspaces(\n host: string,\n token: string,\n target: TeamTarget,\n): Api<z.infer<typeof WorkspaceListSchema>> {\n return call(host, token, WorkspaceListSchema, {\n method: 'GET',\n path: `${teamPath(target.team)}/workspaces`,\n source: target.source,\n });\n}\n\nexport function setTeamDefaultWorkspace(\n host: string,\n token: string,\n target: TeamTarget,\n workspace: string,\n): Api<z.infer<typeof WorkspaceDefaultSchema>> {\n return call(host, token, WorkspaceDefaultSchema, {\n method: 'PUT',\n path: `${teamPath(target.team)}/workspaces/default`,\n source: target.source,\n body: { workspace },\n });\n}\n\nexport function listSourceRoles(\n host: string,\n token: string,\n source: string,\n): Api<z.infer<typeof RoleListSchema>> {\n return call(host, token, RoleListSchema, {\n method: 'GET',\n path: '/api/partner/sources/roles',\n source,\n });\n}\n\nexport function createSourceRole(\n host: string,\n token: string,\n source: string,\n body: {\n name: string;\n displayName: string;\n description?: string;\n hierarchyLevel: number;\n permissions: string[];\n },\n): Api<z.infer<typeof RoleResultSchema>> {\n return call(host, token, RoleResultSchema, {\n method: 'POST',\n path: '/api/partner/sources/roles',\n source,\n body,\n });\n}\n\nexport function updateSourceRole(\n host: string,\n token: string,\n target: { source: string; role: string },\n body: {\n displayName?: string;\n description?: string;\n hierarchyLevel?: number;\n permissions?: string[];\n grant?: string[];\n revoke?: string[];\n },\n): Api<z.infer<typeof RoleUpdateSchema>> {\n return call(host, token, RoleUpdateSchema, {\n method: 'PATCH',\n path: `/api/partner/sources/roles/${encodeURIComponent(target.role)}`,\n source: target.source,\n body,\n });\n}\n\nexport function deleteSourceRole(\n host: string,\n token: string,\n target: { source: string; role: string },\n): Api<z.infer<typeof RoleResultSchema>> {\n return call(host, token, RoleResultSchema, {\n method: 'DELETE',\n path: `/api/partner/sources/roles/${encodeURIComponent(target.role)}`,\n source: target.source,\n });\n}\n\nexport function listSourcePeople(\n host: string,\n token: string,\n source: string,\n query: { search?: string; page?: number },\n): Api<SourcePeople> {\n const params = new URLSearchParams();\n if (query.search) params.set('search', query.search);\n if (query.page !== undefined) params.set('page', String(query.page));\n const encoded = params.toString();\n return call(host, token, PeopleSchema, {\n method: 'GET',\n path: `/api/partner/sources/people${encoded ? `?${encoded}` : ''}`,\n source,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"team-lifecycle-api.js","sourceRoot":"","sources":["../src/team-lifecycle-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\n\nimport { type TeamsApiResult, call } from './teams-api';\n\n/**\n * The CLI's client for a team's lifecycle and a Source's roles and people —\n * every call a Source admin's, through `call` (`teams-api.ts`) for its\n * refresh and refusals.\n *\n * POST /api/partner/teams/<team>/members/<email>/resend → resend | renew\n * POST /api/partner/teams/<team>/leave → the caller leaves\n * GET|POST /api/partner/teams/<team>/groups\n * PATCH|DELETE /api/partner/teams/<team>/groups/<group>\n * PUT|DELETE /api/partner/teams/<team>/groups/<group>/members/<email>\n * GET /api/partner/teams/<team>/health\n * POST /api/partner/teams/<team>/health/<product> → run now\n * GET /api/partner/teams/<team>/workspaces\n * PUT /api/partner/teams/<team>/workspaces/default { workspace }\n * GET|POST /api/partner/sources/roles\n * PATCH|DELETE /api/partner/sources/roles/<role>\n * GET /api/partner/sources/people[?search=&page=]\n *\n * The shapes are read here rather than from `@ekanos/integration-schema`, so\n * this CLI works against a host without a schema release.\n */\n\nconst SourceRefSchema = z.object({\n id: z.string(),\n slug: z.string(),\n name: z.string().nullable(),\n});\nconst TeamRefSchema = z.object({ slug: z.string(), name: z.string() });\nconst PersonSchema = z.object({\n userId: z.string(),\n email: z.string().nullable(),\n name: z.string().nullable(),\n});\n\nexport const InvitationResendSchema = z.object({\n team: TeamRefSchema,\n email: z.string(),\n role: z.string(),\n action: z.enum(['renewed', 'resent']),\n expiresAt: z.string(),\n});\n\nexport const TeamLeaveSchema = z.object({\n team: TeamRefSchema,\n role: z.string(),\n});\n\nexport const TeamGroupSchema = z.object({\n id: z.string(),\n name: z.string(),\n /** Absent from hosts before plan 258 3.3, whose groups are all the team's. */\n kind: z.enum(['team', 'predefined', 'everyone']).optional(),\n description: z.string().nullable(),\n members: z.array(PersonSchema),\n products: z.array(z.object({ slug: z.string(), name: z.string() })),\n widgetCount: z.number(),\n mcpToolCount: z.number(),\n});\nexport type TeamGroup = z.infer<typeof TeamGroupSchema>;\n\nconst GroupListSchema = z.object({\n source: SourceRefSchema,\n team: TeamRefSchema,\n groups: z.array(TeamGroupSchema),\n});\nconst GroupResultSchema = z.object({\n team: TeamRefSchema,\n group: TeamGroupSchema,\n});\nconst GroupUpdateSchema = GroupResultSchema.extend({\n previous: TeamGroupSchema,\n});\nconst GroupMemberSchema = GroupResultSchema.extend({\n email: z.string(),\n changed: z.boolean(),\n});\n\nconst HealthStatusSchema = z.enum([\n 'healthy',\n 'degraded',\n 'unhealthy',\n 'unknown',\n]);\nexport const TeamHealthRowSchema = z.object({\n productId: z.string(),\n productName: z.string(),\n slug: z.string(),\n status: HealthStatusSchema,\n lastCheckedAt: z.string().nullable(),\n lastSuccessAt: z.string().nullable(),\n lastFailureAt: z.string().nullable(),\n lastErrorMessage: z.string().nullable(),\n errorRatePct: z.number().nullable(),\n tokenExpiresAt: z.string().nullable(),\n statusReason: z.string().nullable(),\n});\nexport type TeamHealthRow = z.infer<typeof TeamHealthRowSchema>;\n\nconst HealthListSchema = z.object({\n source: SourceRefSchema,\n team: TeamRefSchema,\n integrations: z.array(TeamHealthRowSchema),\n});\nconst HealthRunSchema = z.object({\n team: TeamRefSchema,\n integration: TeamHealthRowSchema,\n});\n\nconst WorkspaceSchema = z.object({\n slug: z.string(),\n name: z.string(),\n label: z.string().nullable(),\n visible: z.boolean(),\n isDefault: z.boolean(),\n});\nconst WorkspaceListSchema = z.object({\n source: SourceRefSchema,\n team: TeamRefSchema,\n workspaces: z.array(WorkspaceSchema),\n});\nconst WorkspaceDefaultSchema = z.object({\n team: TeamRefSchema,\n workspace: WorkspaceSchema,\n previous: WorkspaceSchema.nullable(),\n changed: z.boolean(),\n});\n\nexport const SourceRoleSchema = z.object({\n name: z.string(),\n displayName: z.string(),\n description: z.string().nullable(),\n hierarchyLevel: z.number(),\n isSystem: z.boolean(),\n permissions: z.array(z.string()),\n memberCount: z.number(),\n});\nexport type SourceRole = z.infer<typeof SourceRoleSchema>;\n\nconst RoleListSchema = z.object({\n source: SourceRefSchema,\n roles: z.array(SourceRoleSchema),\n permissions: z.array(\n z.object({\n permission: z.string(),\n label: z.string(),\n category: z.string(),\n }),\n ),\n});\nconst RoleResultSchema = z.object({\n source: SourceRefSchema,\n role: SourceRoleSchema,\n});\nconst RoleUpdateSchema = RoleResultSchema.extend({\n previous: SourceRoleSchema,\n});\n\nconst PersonStateSchema = z.enum([\n 'active',\n 'suspended',\n 'invited',\n 'left',\n 'removed',\n]);\nconst PeopleSchema = z.object({\n source: SourceRefSchema,\n people: z.array(\n z.object({\n userId: z.string(),\n name: z.string().nullable(),\n email: z.string().nullable(),\n joinedAt: z.string().nullable(),\n status: PersonStateSchema,\n teams: z.array(\n z.object({\n accountName: z.string(),\n roleLabel: z.string(),\n status: PersonStateSchema,\n }),\n ),\n }),\n ),\n total: z.number(),\n page: z.number(),\n pageSize: z.number(),\n});\nexport type SourcePeople = z.infer<typeof PeopleSchema>;\n\ntype TeamTarget = { source: string; team: string };\ntype Api<T> = Promise<TeamsApiResult<T>>;\n\nconst teamPath = (team: string) =>\n `/api/partner/teams/${encodeURIComponent(team)}`;\nconst memberPath = (team: string, email: string) =>\n `${teamPath(team)}/members/${encodeURIComponent(email)}`;\nconst groupPath = (team: string, group: string) =>\n `${teamPath(team)}/groups/${encodeURIComponent(group)}`;\n\nexport function resendTeamInvitation(\n host: string,\n token: string,\n target: TeamTarget & { email: string },\n): Api<z.infer<typeof InvitationResendSchema>> {\n return call(host, token, InvitationResendSchema, {\n method: 'POST',\n path: `${memberPath(target.team, target.email)}/resend`,\n source: target.source,\n });\n}\n\nexport function leaveTeam(\n host: string,\n token: string,\n target: TeamTarget,\n): Api<z.infer<typeof TeamLeaveSchema>> {\n return call(host, token, TeamLeaveSchema, {\n method: 'POST',\n path: `${teamPath(target.team)}/leave`,\n source: target.source,\n });\n}\n\nexport function listTeamGroups(\n host: string,\n token: string,\n target: TeamTarget,\n): Api<z.infer<typeof GroupListSchema>> {\n return call(host, token, GroupListSchema, {\n method: 'GET',\n path: `${teamPath(target.team)}/groups`,\n source: target.source,\n });\n}\n\nexport function createTeamGroup(\n host: string,\n token: string,\n target: TeamTarget,\n body: { name: string; description?: string; products?: string[] },\n): Api<z.infer<typeof GroupResultSchema>> {\n return call(host, token, GroupResultSchema, {\n method: 'POST',\n path: `${teamPath(target.team)}/groups`,\n source: target.source,\n body,\n });\n}\n\nexport function updateTeamGroup(\n host: string,\n token: string,\n target: TeamTarget & { group: string },\n body: { name?: string; description?: string | null; products?: string[] },\n): Api<z.infer<typeof GroupUpdateSchema>> {\n return call(host, token, GroupUpdateSchema, {\n method: 'PATCH',\n path: groupPath(target.team, target.group),\n source: target.source,\n body,\n });\n}\n\nexport function deleteTeamGroup(\n host: string,\n token: string,\n target: TeamTarget & { group: string },\n): Api<z.infer<typeof GroupResultSchema>> {\n return call(host, token, GroupResultSchema, {\n method: 'DELETE',\n path: groupPath(target.team, target.group),\n source: target.source,\n });\n}\n\nexport function setTeamGroupMember(\n host: string,\n token: string,\n target: TeamTarget & { group: string; email: string },\n member: boolean,\n): Api<z.infer<typeof GroupMemberSchema>> {\n return call(host, token, GroupMemberSchema, {\n method: member ? 'PUT' : 'DELETE',\n path: `${groupPath(target.team, target.group)}/members/${encodeURIComponent(target.email)}`,\n source: target.source,\n });\n}\n\nexport function listTeamHealth(\n host: string,\n token: string,\n target: TeamTarget,\n): Api<z.infer<typeof HealthListSchema>> {\n return call(host, token, HealthListSchema, {\n method: 'GET',\n path: `${teamPath(target.team)}/health`,\n source: target.source,\n });\n}\n\n/** The caller's own personal connection's health; `run` checks it now. */\nexport function ownTeamHealth(\n host: string,\n token: string,\n target: TeamTarget & { product: string },\n run: boolean,\n): Api<z.infer<typeof HealthRunSchema>> {\n return call(host, token, HealthRunSchema, {\n method: run ? 'POST' : 'GET',\n path: `${teamPath(target.team)}/health/${encodeURIComponent(target.product)}/mine`,\n source: target.source,\n });\n}\n\nexport function runTeamHealthCheck(\n host: string,\n token: string,\n target: TeamTarget & { product: string },\n): Api<z.infer<typeof HealthRunSchema>> {\n return call(host, token, HealthRunSchema, {\n method: 'POST',\n path: `${teamPath(target.team)}/health/${encodeURIComponent(target.product)}`,\n source: target.source,\n });\n}\n\nexport function listTeamWorkspaces(\n host: string,\n token: string,\n target: TeamTarget,\n): Api<z.infer<typeof WorkspaceListSchema>> {\n return call(host, token, WorkspaceListSchema, {\n method: 'GET',\n path: `${teamPath(target.team)}/workspaces`,\n source: target.source,\n });\n}\n\nexport function setTeamDefaultWorkspace(\n host: string,\n token: string,\n target: TeamTarget,\n workspace: string,\n): Api<z.infer<typeof WorkspaceDefaultSchema>> {\n return call(host, token, WorkspaceDefaultSchema, {\n method: 'PUT',\n path: `${teamPath(target.team)}/workspaces/default`,\n source: target.source,\n body: { workspace },\n });\n}\n\nexport function listSourceRoles(\n host: string,\n token: string,\n source: string,\n): Api<z.infer<typeof RoleListSchema>> {\n return call(host, token, RoleListSchema, {\n method: 'GET',\n path: '/api/partner/sources/roles',\n source,\n });\n}\n\nexport function createSourceRole(\n host: string,\n token: string,\n source: string,\n body: {\n name: string;\n displayName: string;\n description?: string;\n hierarchyLevel: number;\n permissions: string[];\n },\n): Api<z.infer<typeof RoleResultSchema>> {\n return call(host, token, RoleResultSchema, {\n method: 'POST',\n path: '/api/partner/sources/roles',\n source,\n body,\n });\n}\n\nexport function updateSourceRole(\n host: string,\n token: string,\n target: { source: string; role: string },\n body: {\n displayName?: string;\n description?: string;\n hierarchyLevel?: number;\n permissions?: string[];\n grant?: string[];\n revoke?: string[];\n },\n): Api<z.infer<typeof RoleUpdateSchema>> {\n return call(host, token, RoleUpdateSchema, {\n method: 'PATCH',\n path: `/api/partner/sources/roles/${encodeURIComponent(target.role)}`,\n source: target.source,\n body,\n });\n}\n\nexport function deleteSourceRole(\n host: string,\n token: string,\n target: { source: string; role: string },\n): Api<z.infer<typeof RoleResultSchema>> {\n return call(host, token, RoleResultSchema, {\n method: 'DELETE',\n path: `/api/partner/sources/roles/${encodeURIComponent(target.role)}`,\n source: target.source,\n });\n}\n\nexport function listSourcePeople(\n host: string,\n token: string,\n source: string,\n query: { search?: string; page?: number },\n): Api<SourcePeople> {\n const params = new URLSearchParams();\n if (query.search) params.set('search', query.search);\n if (query.page !== undefined) params.set('page', String(query.page));\n const encoded = params.toString();\n return call(host, token, PeopleSchema, {\n method: 'GET',\n path: `/api/partner/sources/people${encoded ? `?${encoded}` : ''}`,\n source,\n });\n}\n"]}
|
package/dist/teams-api.js
CHANGED
|
@@ -273,29 +273,31 @@ export async function call(host, accessToken, schema, init) {
|
|
|
273
273
|
throw invalidStateError(message !== null && message !== void 0 ? message : 'This integration takes no team app.', 'Teams connect through the Source\'s app: "ekanos apps show <product>".');
|
|
274
274
|
}
|
|
275
275
|
if (response.status === 409 || response.status === 422) {
|
|
276
|
-
throw invalidStateError(message !== null && message !== void 0 ? message : 'The host refused the change.', (_b = (code ? LIFECYCLE_HINTS[code] : undefined)) !== null && _b !== void 0 ? _b : (code === '
|
|
277
|
-
? '
|
|
278
|
-
: code === '
|
|
279
|
-
? '
|
|
280
|
-
: code === '
|
|
281
|
-
? '
|
|
282
|
-
: code === '
|
|
283
|
-
?
|
|
284
|
-
: code === '
|
|
285
|
-
?
|
|
286
|
-
: code === '
|
|
287
|
-
? "
|
|
288
|
-
: code === '
|
|
289
|
-
? '
|
|
290
|
-
: code === '
|
|
291
|
-
? '
|
|
292
|
-
: code === '
|
|
293
|
-
? '
|
|
294
|
-
: code === '
|
|
295
|
-
? '
|
|
296
|
-
: code === '
|
|
297
|
-
? '
|
|
298
|
-
:
|
|
276
|
+
throw invalidStateError(message !== null && message !== void 0 ? message : 'The host refused the change.', (_b = (code ? LIFECYCLE_HINTS[code] : undefined)) !== null && _b !== void 0 ? _b : (code === 'AUDIENCE_SET_ON_TEAM'
|
|
277
|
+
? 'Set the team’s instead: "ekanos teams audience <team> <audience>". A person’s groups narrow it.'
|
|
278
|
+
: code === 'SLUG_TAKEN'
|
|
279
|
+
? 'Pick another with --slug, or run "ekanos teams list" to see the teams.'
|
|
280
|
+
: code === 'AGENT_VERSION_CHANGED'
|
|
281
|
+
? 'A newer version was published since it was shown to you. Review it with "ekanos teams agents show <team> <key>", then run "ekanos teams agents confirm" again.'
|
|
282
|
+
: code === 'ROLE_NEEDS_ACCEPTANCE'
|
|
283
|
+
? 'Add them with a lower role (--role admin), or invite them to the top role so they accept it: "ekanos teams members invite <team> <email> --role owner".'
|
|
284
|
+
: code === 'AGENT_VERSION_CONFLICT'
|
|
285
|
+
? `Review it with "ekanos teams agents show <team> <key>", then apply with --base-version ${typeof body.latestVersion === 'number' ? body.latestVersion : '<its version>'} (or --overwrite to replace it anyway).`
|
|
286
|
+
: code === 'ALREADY_MEMBER' || code === 'ALREADY_INVITED'
|
|
287
|
+
? 'Run "ekanos teams members list <team>"; change a role with "ekanos teams members role <team> <email> <role>".'
|
|
288
|
+
: code === 'PRIMARY_OWNER'
|
|
289
|
+
? "The primary owner's ownership is transferred in the app (team Settings → Members)."
|
|
290
|
+
: code === 'TEAM_ACCOUNTS_DISABLED'
|
|
291
|
+
? 'Ekanos switches team accounts on for a Source; ask a super-admin.'
|
|
292
|
+
: code === 'PERSONAL_CONNECTION'
|
|
293
|
+
? 'Each member disconnects their own: "ekanos teams disconnect <team> <product> --mine".'
|
|
294
|
+
: code === 'MCP_SERVER_FROM_TEMPLATE'
|
|
295
|
+
? 'It stays while the agent template declares it: change the template, apply and publish.'
|
|
296
|
+
: code === 'PRODUCT_NOT_ENTITLED'
|
|
297
|
+
? '"ekanos sources products" shows what this Source has; only those can be in its scopes.'
|
|
298
|
+
: code === 'TEMPLATE_ARCHIVED'
|
|
299
|
+
? 'Unarchive it first: "ekanos agents unarchive <key>".'
|
|
300
|
+
: 'See "ekanos teams --help".'));
|
|
299
301
|
}
|
|
300
302
|
if (response.status === 400 && code === 'INVALID_AGENT') {
|
|
301
303
|
const issues = Array.isArray(body.issues)
|
|
@@ -340,6 +342,9 @@ const LIFECYCLE_HINTS = {
|
|
|
340
342
|
GROUP_NOT_FOUND: 'Run "ekanos teams groups list <team>" to see its groups (name one by name or id).',
|
|
341
343
|
GROUP_AMBIGUOUS: 'Run "ekanos teams groups list <team> --json" and name the group by its id.',
|
|
342
344
|
GROUP_EXISTS: 'Pick another name, or change that group: "ekanos teams groups update <team> <group> …".',
|
|
345
|
+
GROUP_IMPLICIT: 'Everyone holds each member in no other group, so it is not edited and has no members to add or remove: add them to another group instead ("ekanos teams groups list <team>").',
|
|
346
|
+
GROUP_PREDEFINED: 'A predefined group belongs to the team’s business type and is removed with the Source’s audiences, not from one team. Change its products or members here, or delete a team group instead.',
|
|
347
|
+
PRODUCT_NOT_IN_BUSINESS_TYPE: 'A group picks only within the team’s audience: "ekanos teams audience <team>" names it, "ekanos audiences show <audience>" lists its products, and "ekanos audiences set <audience> --products …" adds one.',
|
|
343
348
|
ROLE_NOT_FOUND: 'Run "ekanos sources roles list" to see the Source\'s roles.',
|
|
344
349
|
ROLE_EXISTS: 'Change it instead: "ekanos sources roles update <role> …", or pick another name.',
|
|
345
350
|
SYSTEM_ROLE: 'Owner, admin and member are fixed; create a custom role with "ekanos sources roles create <name> …".',
|
|
@@ -350,7 +355,7 @@ const LIFECYCLE_HINTS = {
|
|
|
350
355
|
NOT_CONNECTED: 'Connect it first: "ekanos teams connect <team> <product>"; "ekanos teams health <team>" lists what it has.',
|
|
351
356
|
USER_SCOPED: 'Each person connects it for themselves and checks it on their own Integrations → Health page.',
|
|
352
357
|
NO_HEALTH_CHECK: 'The product has no package on this deployment; "ekanos sources products" shows what is registered.',
|
|
353
|
-
PRODUCT_NOT_VISIBLE_TO_TEAM: 'Run "ekanos teams
|
|
358
|
+
PRODUCT_NOT_VISIBLE_TO_TEAM: 'Run "ekanos teams audience <team>" for the team’s audience, and "ekanos audiences show <audience>" for the products it shows.',
|
|
354
359
|
};
|
|
355
360
|
async function readOptionalJson(response) {
|
|
356
361
|
try {
|
package/dist/teams-api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teams-api.js","sourceRoot":"","sources":["../src/teams-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,0BAA0B,EAE1B,sBAAsB,EAGtB,oBAAoB,EAEpB,6BAA6B,EAE7B,kBAAkB,EAElB,2BAA2B,EAE3B,sBAAsB,EAEtB,+BAA+B,EAE/B,gBAAgB,EAEhB,yBAAyB,EAEzB,sBAAsB,EAGtB,sBAAsB,EAEtB,0BAA0B,EAE1B,4BAA4B,EAE5B,yBAAyB,EAEzB,4BAA4B,EAE5B,oBAAoB,EAEpB,sBAAsB,EAEtB,eAAe,EAEf,2BAA2B,EAE3B,8BAA8B,EAE9B,cAAc,EAEd,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,UAAU,EACV,eAAe,GAChB,MAAM,UAAU,CAAC;AAgDlB,MAAM,UAAU,SAAS,CACvB,IAAY,EACZ,WAAmB,EACnB,MAAc;IAEd,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE;QAC7C,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,oBAAoB;QAC1B,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,WAAmB,EACnB,MAAyD;IAEzD,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,2BAA2B,EAAE;QAC1D,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,WAAmB,EACnB,MAAyD,EACzD,IAIC;IAED,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;QACrD,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM;QACtC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,WAAmB,EACnB,MAAyD,EACzD,SAAiB;IAEjB,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,2BAA2B,EAAE;QAC1D,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,aAAa,kBAAkB,CAAC,SAAS,CAAC,EAAE;QAC5E,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,IAAY,EACZ,WAAmB,EACnB,MAAyE;IAEzE,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,0BAA0B,EAAE;QACzD,MAAM,EAAE,QAAQ;QAChB,mEAAmE;QACnE,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/D,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,WAAmB,EACnB,MAAc,EACd,IAAuB;IAEvB,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;QACrD,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,oBAAoB;QAC1B,MAAM;QACN,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,WAAmB,EACnB,MAAwC,EACxC,IAAY;IAEZ,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;QACrD,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QAC7D,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,EAAE,IAAI,EAAE;KACf,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,WAAmB,EACnB,MAAwC;IAExC,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,oBAAoB,EAAE;QACnD,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,WAAmB,EACnB,MAAwC,EACxC,IAAqC;IAErC,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,4BAA4B,EAAE;QAC3D,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,WAAmB,EACnB,MAAwC,EACxC,IAAsE;IAEtE,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,yBAAyB,EAAE;QACxD,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,WAAmB,EACnB,MAAuD,EACvD,IAAY;IAEZ,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,4BAA4B,EAAE;QAC3D,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QACvE,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,EAAE,IAAI,EAAE;KACf,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,WAAmB,EACnB,MAAuD;IAEvD,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,4BAA4B,EAAE;QAC3D,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QACvE,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,WAAmB,EACnB,MAAc;IAEd,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;QACrD,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,qBAAqB;QAC3B,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,WAAmB,EACnB,MAA0D,EAC1D,QAAiB;IAEjB,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,+BAA+B,EAAE;QAC9D,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;QACnC,IAAI,EAAE,uBAAuB,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QAC9G,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,WAAmB,EACnB,MAAwC;IAExC,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,gBAAgB,EAAE;QAC/C,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;QACpE,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,WAAmB,EACnB,MAAwC,EACxC,MAAgB;IAEhB,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,yBAAyB,EAAE;QACxD,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;QACpE,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,EAAE,MAAM,EAAE;KACjB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,WAAmB,EACnB,MAAc;IAEd,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,0BAA0B,EAAE;QACzD,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,wBAAwB;QAC9B,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,WAAmB,EACnB,MAA4C;IAE5C,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;QACrD,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,0BAA0B,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;QACrE,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,WAAmB,EACnB,MAAc,EACd,IAA2B;IAE3B,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;QACrD,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,wBAAwB;QAC9B,MAAM;QACN,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,WAAmB,EACnB,MAA4C,EAC5C,IAA2B;IAE3B,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;QACrD,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,0BAA0B,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;QACrE,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,WAAmB,EACnB,MAAwC;IAExC,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE;QACjD,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW;QACtE,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,WAAmB,EACnB,MAAwC,EACxC,UAAkB;IAElB,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,2BAA2B,EAAE;QAC1D,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW;QACtE,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,EAAE,UAAU,EAAE;KACrB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,WAAmB,EACnB,MAAuD;IAEvD,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,oBAAoB,EAAE;QACnD,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW;QAChF,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,WAAmB,EACnB,MAAuD,EACvD,UAAyB;IAEzB,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,6BAA6B,EAAE;QAC5D,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW;QAChF,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,EAAE,UAAU,EAAE;KACrB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,WAAmB,EACnB,MAAwC;IAExC,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE;QAC9C,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ;QACnE,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,WAAmB,EACnB,MAAwC,EACxC,OAA6D;IAE7D,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,IAAI,OAAO,CAAC,OAAO;QAAE,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,KAAK;QAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,8BAA8B,EAAE;QAC7D,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE;QAC7E,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,sBAAsB,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAClE,CAAC;AAED,SAAS,eAAe,CAAC,MAAyC;IAChE,OAAO,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AACpH,CAAC;AAED,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,IAAY,EACZ,WAAmB,EACnB,MAAoB,EACpB,IAKC;;IAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC5B,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAC1G;QACE,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,kBACL,MAAM,EAAE,kBAAkB,EAC1B,aAAa,EAAE,UAAU,WAAW,EAAE,IACnC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS;YACzB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAC5C;QACD,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;KACtE,CACF,CAAC;IAEF,IACE,QAAQ,CAAC,MAAM,KAAK,GAAG;QACvB,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,EACjD,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,MAAM,OAAO,GACX,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAEnE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QACvD,MAAM,iBAAiB,CACrB,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,GAAG,IAAI,wCAAwC,EAC1D,6DAA6D,CAC9D,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,cAAc,CAClB,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,+BAA+B,EAC1C,IAAI,KAAK,uBAAuB;YAC9B,CAAC,CAAC,yEAAyE;YAC3E,CAAC,CAAC,IAAI,KAAK,uBAAuB;gBAChC,CAAC,CAAC,qHAAqH;gBACvH,CAAC,CAAC,IAAI,KAAK,6BAA6B;oBACtC,CAAC,CAAC,kMAAkM;oBACpM,CAAC,CAAC,IAAI,KAAK,mBAAmB;wBAC5B,CAAC,CAAC,iGAAiG;wBACnG,CAAC,CAAC,IAAI,KAAK,wBAAwB;4BACjC,CAAC,CAAC,iIAAiI;4BACnI,CAAC,CAAC,IAAI,KAAK,gCAAgC;gCACzC,CAAC,CAAC,sHAAsH;gCACxH,CAAC,CAAC,8DAA8D,CAC7E,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,aAAa,CACjB,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,YAAY,QACvB,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,mCACxC,CAAC,IAAI,KAAK,gBAAgB;YACxB,CAAC,CAAC,0DAA0D;YAC5D,CAAC,CAAC,IAAI,KAAK,sBAAsB;gBAC/B,CAAC,CAAC,sHAAsH;gBACxH,CAAC,CAAC,IAAI,KAAK,iBAAiB,IAAI,IAAI,KAAK,sBAAsB;oBAC7D,CAAC,CAAC,qFAAqF;oBACvF,CAAC,CAAC,IAAI,KAAK,mBAAmB,IAAI,IAAI,KAAK,sBAAsB;wBAC/D,CAAC,CAAC,6EAA6E;wBAC/E,CAAC,CAAC,IAAI,KAAK,kBAAkB;4BAC3B,CAAC,CAAC,4EAA4E;4BAC9E,CAAC,CAAC,IAAI,KAAK,mBAAmB;gCAC5B,CAAC,CAAC,4FAA4F;gCAC9F,CAAC,CAAC,IAAI,KAAK,iBAAiB;oCAC1B,CAAC,CAAC,wGAAwG;oCAC1G,CAAC,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAC,QAAQ,CAAC;wCACxB,IAAI,KAAK,oBAAoB;wCAC/B,CAAC,CAAC,kEAAkE;wCACpE,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;4CACvC,CAAC,CAAC,oEAAoE;4CACtE,CAAC,CAAC,8DAA8D,CAAC,CACtF,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QACtD,MAAM,iBAAiB,CACrB,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,qCAAqC,EAChD,wEAAwE,CACzE,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvD,MAAM,iBAAiB,CACrB,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,8BAA8B,QACzC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,mCACxC,CAAC,IAAI,KAAK,YAAY;YACpB,CAAC,CAAC,wEAAwE;YAC1E,CAAC,CAAC,IAAI,KAAK,uBAAuB;gBAChC,CAAC,CAAC,gKAAgK;gBAClK,CAAC,CAAC,IAAI,KAAK,uBAAuB;oBAChC,CAAC,CAAC,yJAAyJ;oBAC3J,CAAC,CAAC,IAAI,KAAK,wBAAwB;wBACjC,CAAC,CAAC,0FAA0F,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,yCAAyC;wBAClN,CAAC,CAAC,IAAI,KAAK,gBAAgB,IAAI,IAAI,KAAK,iBAAiB;4BACvD,CAAC,CAAC,+GAA+G;4BACjH,CAAC,CAAC,IAAI,KAAK,eAAe;gCACxB,CAAC,CAAC,oFAAoF;gCACtF,CAAC,CAAC,IAAI,KAAK,wBAAwB;oCACjC,CAAC,CAAC,mEAAmE;oCACrE,CAAC,CAAC,IAAI,KAAK,qBAAqB;wCAC9B,CAAC,CAAC,uFAAuF;wCACzF,CAAC,CAAC,IAAI,KAAK,0BAA0B;4CACnC,CAAC,CAAC,wFAAwF;4CAC1F,CAAC,CAAC,IAAI,KAAK,sBAAsB;gDAC/B,CAAC,CAAC,wFAAwF;gDAC1F,CAAC,CAAC,IAAI,KAAK,mBAAmB;oDAC5B,CAAC,CAAC,sDAAsD;oDACxD,CAAC,CAAC,4BAA4B,CAAC,CACxD,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YACvC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAc,EAAE,EAAE,kBACrC,OAAO,KAAK,KAAK,QAAQ;gBACzB,KAAK,KAAK,IAAI;gBACd,OAAQ,KAA+B,CAAC,OAAO,KAAK,QAAQ;gBAC1D,CAAC,CAAC;oBACE,KAAK,MAAM,OAAE,KAA4B,CAAC,IAAI,mCAAI,QAAQ,CAAC,KAAM,KAA6B,CAAC,OAAO,EAAE;iBACzG;gBACH,CAAC,CAAC,EAAE,GAAA,CACP;YACH,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,eAAe,CACnB,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,yBAAyB,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAC5D,kCAAkC,CACnC,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QACvD,MAAM,eAAe,CACnB,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,eAAe,EAC1B,sEAAsE,CACvE,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACzD,MAAM,eAAe,CACnB,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,8BAA8B,EACzC,oDAAoD,CACrD,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAC7D,MAAM,UAAU,CACd,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,qCAAqC,EAChD,4KAA4K,CAC7K,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,UAAU,CACd,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,+BAA+B,EAC1C,4BAA4B,CAC7B,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;QAC9C,MAAM,YAAY,CAAC,OAAO,EAAE,8CAA8C,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,YAAY,CAChB,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,cAAc,QAAQ,CAAC,MAAM,GAAG,EACnD,QAAQ,CAAC,MAAM,IAAI,GAAG;YACpB,CAAC,CAAC,+DAA+D;YACjE,CAAC,CAAC,+DAA+D,CACpE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,YAAY,CAChB,GAAG,IAAI,gEAAgE,EACvE,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,iFAAiF;AACjF,MAAM,eAAe,GAA2B;IAC9C,eAAe,EACb,mFAAmF;IACrF,eAAe,EACb,4EAA4E;IAC9E,YAAY,EACV,yFAAyF;IAC3F,cAAc,EAAE,6DAA6D;IAC7E,WAAW,EACT,kFAAkF;IACpF,WAAW,EACT,sGAAsG;IACxG,WAAW,EACT,uIAAuI;IACzI,mBAAmB,EACjB,iEAAiE;IACnE,mBAAmB,EACjB,+EAA+E;IACjF,YAAY,EACV,wGAAwG;IAC1G,aAAa,EACX,4GAA4G;IAC9G,WAAW,EACT,+FAA+F;IACjG,eAAe,EACb,oGAAoG;IACtG,2BAA2B,EACzB,sEAAsE;CACzE,CAAC;AAEF,KAAK,UAAU,gBAAgB,CAC7B,QAAkB;IAElB,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC9C,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAClD,CAAC,CAAE,MAAkC;YACrC,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;eAAO,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC","sourcesContent":["import {\n type AudienceCreateRequest,\n type AudienceListResponse,\n AudienceListResponseSchema,\n type AudienceResponse,\n AudienceResponseSchema,\n type AudienceUpdateRequest,\n type MemberAudience,\n MemberAudienceSchema,\n type MemberAudienceSetResult,\n MemberAudienceSetResultSchema,\n type TeamAudience,\n TeamAudienceSchema,\n type TeamAudienceSetResult,\n TeamAudienceSetResultSchema,\n type ProductScopeList,\n ProductScopeListSchema,\n type ProductScopeProductChange,\n ProductScopeProductChangeSchema,\n type TeamScopes,\n TeamScopesSchema,\n type TeamScopesSetResult,\n TeamScopesSetResultSchema,\n type TeamAppSetResult,\n TeamAppSetResultSchema,\n type TeamCreateRequest,\n type TeamCreateResult,\n TeamCreateResultSchema,\n type TeamDisconnectResult,\n TeamDisconnectResultSchema,\n type TeamMemberChangeResult,\n TeamMemberChangeResultSchema,\n type TeamMemberAddResult,\n TeamMemberAddResultSchema,\n type TeamMemberInviteResult,\n TeamMemberInviteResultSchema,\n type TeamMemberList,\n TeamMemberListSchema,\n type TeamRenameResult,\n TeamRenameResultSchema,\n type TeamRoles,\n TeamRolesSchema,\n type TeamIntegrationStatus,\n TeamIntegrationStatusSchema,\n type TeamIntegrationEventList,\n TeamIntegrationEventListSchema,\n type TeamList,\n TeamListSchema,\n type TeamWebhookMintResult,\n TeamWebhookMintResultSchema,\n} from '@ekanos/integration-schema';\nimport type { z } from 'zod';\n\nimport { request } from './auth/ekanos-api';\nimport {\n authRequiredError,\n forbiddenError,\n invalidStateError,\n networkError,\n notFoundError,\n usageError,\n validationError,\n} from './errors';\n\n/**\n * The CLI's client for a Source's teams and their integration setup — the\n * team-level counterpart of `apps-api.ts`.\n *\n * GET /api/partner/teams?source=<slug> → TeamList\n * GET /api/partner/teams/<team>/integrations/<product>?source=<slug> → TeamIntegrationStatus\n * PUT …/integrations/<product>/app?source=<slug> { connectionId?, fields }\n * → TeamAppSetResult\n * POST …/integrations/<product>/webhooks/<id>?source=<slug> → TeamWebhookMintResult\n * DELETE /api/partner/teams/<team>/integrations/<product>?source=<slug> → TeamDisconnectResult\n * POST /api/partner/teams?source=<slug> { name, slug?, ownerEmail? } → TeamCreateResult\n * PATCH /api/partner/teams/<team>?source=<slug> { name } → TeamRenameResult\n * GET /api/partner/teams/<team>/members?source=<slug> → TeamMemberList\n * POST …/<team>/members?source=<slug> { email, role } → TeamMemberInviteResult\n * PATCH …/<team>/members/<email>?source=<slug> { role } → TeamMemberChangeResult\n * DELETE …/<team>/members/<email>?source=<slug> → TeamMemberChangeResult\n * GET /api/partner/teams/<team>/roles?source=<slug> → TeamRoles\n * GET /api/partner/teams/<team>/events?source=<slug>[&product=<slug>]\n * [&since=<iso>][&limit=<n>] → TeamIntegrationEventList\n * GET /api/partner/scopes?source=<slug> → ProductScopeList\n * PUT | DELETE /api/partner/scopes/<scope>/products/<product>?source=<slug>\n * → ProductScopeProductChange\n * GET /api/partner/audiences?source=<slug> → AudienceListResponse\n * GET | PATCH /api/partner/audiences/<audience>?source=<slug> → AudienceResponse\n * POST /api/partner/audiences?source=<slug> { name, … } → AudienceResponse\n * GET | PUT /api/partner/teams/<team>/audience?source=<slug> { audienceId }\n * → TeamAudience | TeamAudienceSetResult\n * GET | PUT …/<team>/members/<email>/audience?source=<slug> { audienceId | null }\n * → MemberAudience | MemberAudienceSetResult\n * GET /api/partner/teams/<team>/scopes?source=<slug> → TeamScopes\n * PUT /api/partner/teams/<team>/scopes?source=<slug> { scopes } → TeamScopesSetResult\n *\n * → 401 / 3xx refresh once and retry\n * → 403 { code: \"SOURCE_ADMIN_REQUIRED\" | \"MFA_REQUIRED\" | \"FORBIDDEN\" }\n * → 404 { code: \"TEAM_NOT_FOUND\" | \"PRODUCT_NOT_ENTITLED\" | \"WEBHOOK_NOT_FOUND\"\n * | \"CONNECTION_NOT_FOUND\" | \"SOURCE_NOT_FOUND\" }\n * | \"MEMBER_NOT_FOUND\" }\n * → 409 { code: \"NO_TEAM_APP\" | \"SLUG_TAKEN\" | \"TEAM_ACCOUNTS_DISABLED\"\n * | \"ALREADY_MEMBER\" | \"ALREADY_INVITED\" | \"PRIMARY_OWNER\" }\n * → 400 { code: \"INVALID_FIELDS\" | \"INVALID_REQUEST\" | \"UNKNOWN_ROLE\" }\n */\n\nexport type TeamsApiResult<T> =\n | { status: 'ok'; data: T }\n | { status: 'unauthorized' };\n\nexport function listTeams(\n host: string,\n accessToken: string,\n source: string,\n): Promise<TeamsApiResult<TeamList>> {\n return call(host, accessToken, TeamListSchema, {\n method: 'GET',\n path: '/api/partner/teams',\n source,\n });\n}\n\nexport function showTeamIntegration(\n host: string,\n accessToken: string,\n target: { source: string; team: string; product: string },\n): Promise<TeamsApiResult<TeamIntegrationStatus>> {\n return call(host, accessToken, TeamIntegrationStatusSchema, {\n method: 'GET',\n path: integrationPath(target),\n source: target.source,\n });\n}\n\nexport function setTeamApp(\n host: string,\n accessToken: string,\n target: { source: string; team: string; product: string },\n body: {\n connectionId?: string;\n fields: Record<string, string>;\n clear?: string[];\n },\n): Promise<TeamsApiResult<TeamAppSetResult>> {\n return call(host, accessToken, TeamAppSetResultSchema, {\n method: 'PUT',\n path: `${integrationPath(target)}/app`,\n source: target.source,\n body,\n });\n}\n\nexport function mintTeamWebhook(\n host: string,\n accessToken: string,\n target: { source: string; team: string; product: string },\n webhookId: string,\n): Promise<TeamsApiResult<TeamWebhookMintResult>> {\n return call(host, accessToken, TeamWebhookMintResultSchema, {\n method: 'POST',\n path: `${integrationPath(target)}/webhooks/${encodeURIComponent(webhookId)}`,\n source: target.source,\n });\n}\n\nexport function disconnectTeamIntegration(\n host: string,\n accessToken: string,\n target: { source: string; team: string; product: string; mine?: boolean },\n): Promise<TeamsApiResult<TeamDisconnectResult>> {\n return call(host, accessToken, TeamDisconnectResultSchema, {\n method: 'DELETE',\n // `--mine`: the caller's own personal connection, never another's.\n path: `${integrationPath(target)}${target.mine ? '/mine' : ''}`,\n source: target.source,\n });\n}\n\nexport function createTeam(\n host: string,\n accessToken: string,\n source: string,\n body: TeamCreateRequest,\n): Promise<TeamsApiResult<TeamCreateResult>> {\n return call(host, accessToken, TeamCreateResultSchema, {\n method: 'POST',\n path: '/api/partner/teams',\n source,\n body,\n });\n}\n\nexport function renameTeam(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n name: string,\n): Promise<TeamsApiResult<TeamRenameResult>> {\n return call(host, accessToken, TeamRenameResultSchema, {\n method: 'PATCH',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}`,\n source: target.source,\n body: { name },\n });\n}\n\nexport function listTeamMembers(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n): Promise<TeamsApiResult<TeamMemberList>> {\n return call(host, accessToken, TeamMemberListSchema, {\n method: 'GET',\n path: membersPath(target.team),\n source: target.source,\n });\n}\n\nexport function inviteTeamMember(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n body: { email: string; role: string },\n): Promise<TeamsApiResult<TeamMemberInviteResult>> {\n return call(host, accessToken, TeamMemberInviteResultSchema, {\n method: 'POST',\n path: membersPath(target.team),\n source: target.source,\n body,\n });\n}\n\n/** `teams members add`: a member now, no invitation email (`PUT`). */\nexport function addTeamMember(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n body: { self: true; role?: string } | { email: string; role?: string },\n): Promise<TeamsApiResult<TeamMemberAddResult>> {\n return call(host, accessToken, TeamMemberAddResultSchema, {\n method: 'PUT',\n path: membersPath(target.team),\n source: target.source,\n body,\n });\n}\n\nexport function setTeamMemberRole(\n host: string,\n accessToken: string,\n target: { source: string; team: string; email: string },\n role: string,\n): Promise<TeamsApiResult<TeamMemberChangeResult>> {\n return call(host, accessToken, TeamMemberChangeResultSchema, {\n method: 'PATCH',\n path: `${membersPath(target.team)}/${encodeURIComponent(target.email)}`,\n source: target.source,\n body: { role },\n });\n}\n\nexport function removeTeamMember(\n host: string,\n accessToken: string,\n target: { source: string; team: string; email: string },\n): Promise<TeamsApiResult<TeamMemberChangeResult>> {\n return call(host, accessToken, TeamMemberChangeResultSchema, {\n method: 'DELETE',\n path: `${membersPath(target.team)}/${encodeURIComponent(target.email)}`,\n source: target.source,\n });\n}\n\nexport function listProductScopes(\n host: string,\n accessToken: string,\n source: string,\n): Promise<TeamsApiResult<ProductScopeList>> {\n return call(host, accessToken, ProductScopeListSchema, {\n method: 'GET',\n path: '/api/partner/scopes',\n source,\n });\n}\n\nexport function setScopeProduct(\n host: string,\n accessToken: string,\n target: { source: string; scope: string; product: string },\n included: boolean,\n): Promise<TeamsApiResult<ProductScopeProductChange>> {\n return call(host, accessToken, ProductScopeProductChangeSchema, {\n method: included ? 'PUT' : 'DELETE',\n path: `/api/partner/scopes/${encodeURIComponent(target.scope)}/products/${encodeURIComponent(target.product)}`,\n source: target.source,\n });\n}\n\nexport function showTeamScopes(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n): Promise<TeamsApiResult<TeamScopes>> {\n return call(host, accessToken, TeamScopesSchema, {\n method: 'GET',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}/scopes`,\n source: target.source,\n });\n}\n\nexport function setTeamScopes(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n scopes: string[],\n): Promise<TeamsApiResult<TeamScopesSetResult>> {\n return call(host, accessToken, TeamScopesSetResultSchema, {\n method: 'PUT',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}/scopes`,\n source: target.source,\n body: { scopes },\n });\n}\n\nexport function listAudiences(\n host: string,\n accessToken: string,\n source: string,\n): Promise<TeamsApiResult<AudienceListResponse>> {\n return call(host, accessToken, AudienceListResponseSchema, {\n method: 'GET',\n path: '/api/partner/audiences',\n source,\n });\n}\n\nexport function showAudience(\n host: string,\n accessToken: string,\n target: { source: string; audience: string },\n): Promise<TeamsApiResult<AudienceResponse>> {\n return call(host, accessToken, AudienceResponseSchema, {\n method: 'GET',\n path: `/api/partner/audiences/${encodeURIComponent(target.audience)}`,\n source: target.source,\n });\n}\n\nexport function createAudience(\n host: string,\n accessToken: string,\n source: string,\n body: AudienceCreateRequest,\n): Promise<TeamsApiResult<AudienceResponse>> {\n return call(host, accessToken, AudienceResponseSchema, {\n method: 'POST',\n path: '/api/partner/audiences',\n source,\n body,\n });\n}\n\nexport function updateAudience(\n host: string,\n accessToken: string,\n target: { source: string; audience: string },\n body: AudienceUpdateRequest,\n): Promise<TeamsApiResult<AudienceResponse>> {\n return call(host, accessToken, AudienceResponseSchema, {\n method: 'PATCH',\n path: `/api/partner/audiences/${encodeURIComponent(target.audience)}`,\n source: target.source,\n body,\n });\n}\n\nexport function showTeamAudience(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n): Promise<TeamsApiResult<TeamAudience>> {\n return call(host, accessToken, TeamAudienceSchema, {\n method: 'GET',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}/audience`,\n source: target.source,\n });\n}\n\nexport function setTeamAudience(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n audienceId: string,\n): Promise<TeamsApiResult<TeamAudienceSetResult>> {\n return call(host, accessToken, TeamAudienceSetResultSchema, {\n method: 'PUT',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}/audience`,\n source: target.source,\n body: { audienceId },\n });\n}\n\nexport function showMemberAudience(\n host: string,\n accessToken: string,\n target: { source: string; team: string; email: string },\n): Promise<TeamsApiResult<MemberAudience>> {\n return call(host, accessToken, MemberAudienceSchema, {\n method: 'GET',\n path: `${membersPath(target.team)}/${encodeURIComponent(target.email)}/audience`,\n source: target.source,\n });\n}\n\n/** `audienceId: null` clears the member's own audience. */\nexport function setMemberAudience(\n host: string,\n accessToken: string,\n target: { source: string; team: string; email: string },\n audienceId: string | null,\n): Promise<TeamsApiResult<MemberAudienceSetResult>> {\n return call(host, accessToken, MemberAudienceSetResultSchema, {\n method: 'PUT',\n path: `${membersPath(target.team)}/${encodeURIComponent(target.email)}/audience`,\n source: target.source,\n body: { audienceId },\n });\n}\n\nexport function listTeamRoles(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n): Promise<TeamsApiResult<TeamRoles>> {\n return call(host, accessToken, TeamRolesSchema, {\n method: 'GET',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}/roles`,\n source: target.source,\n });\n}\n\nexport function listTeamEvents(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n filters: { product?: string; since?: string; limit?: number },\n): Promise<TeamsApiResult<TeamIntegrationEventList>> {\n const query = new URLSearchParams();\n if (filters.product) query.set('product', filters.product);\n if (filters.since) query.set('since', filters.since);\n if (filters.limit !== undefined) query.set('limit', String(filters.limit));\n const encoded = query.toString();\n const suffix = encoded ? `?${encoded}` : '';\n return call(host, accessToken, TeamIntegrationEventListSchema, {\n method: 'GET',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}/events${suffix}`,\n source: target.source,\n });\n}\n\nfunction membersPath(team: string): string {\n return `/api/partner/teams/${encodeURIComponent(team)}/members`;\n}\n\nfunction integrationPath(target: { team: string; product: string }): string {\n return `/api/partner/teams/${encodeURIComponent(target.team)}/integrations/${encodeURIComponent(target.product)}`;\n}\n\n/** One partner teams call; shared by the team-agent clients (`team-agents-api.ts`). */\nexport async function call<T>(\n host: string,\n accessToken: string,\n schema: z.ZodType<T>,\n init: {\n method: 'GET' | 'PUT' | 'POST' | 'PATCH' | 'DELETE';\n path: string;\n source: string;\n body?: unknown;\n },\n): Promise<TeamsApiResult<T>> {\n const response = await request(\n `${host}${init.path}${init.path.includes('?') ? '&' : '?'}${new URLSearchParams({ source: init.source })}`,\n {\n method: init.method,\n headers: {\n accept: 'application/json',\n authorization: `Bearer ${accessToken}`,\n ...(init.body === undefined\n ? {}\n : { 'content-type': 'application/json' }),\n },\n body: init.body === undefined ? undefined : JSON.stringify(init.body),\n },\n );\n\n if (\n response.status === 401 ||\n (response.status >= 300 && response.status < 400)\n ) {\n return { status: 'unauthorized' };\n }\n\n const body = await readOptionalJson(response);\n const code = typeof body.code === 'string' ? body.code : null;\n const message =\n typeof body.error === 'string' && body.error ? body.error : null;\n\n if (response.status === 403 && code === 'MFA_REQUIRED') {\n throw authRequiredError(\n message ?? `${host} requires multi-factor authentication.`,\n 'Complete MFA in the browser, then run \"ekanos login\" again.',\n );\n }\n if (response.status === 403) {\n throw forbiddenError(\n message ?? 'Not permitted on this Source.',\n code === 'SOURCE_ADMIN_REQUIRED'\n ? \"Only a Source admin manages its teams' integrations. Ask one to run it.\"\n : code === 'CONFIRM_NOT_PERMITTED'\n ? \"Only a Source admin of the team's Source, or someone who manages the team's agents, confirms what an agent may use.\"\n : code === 'PERSONAL_AGENT_CREATOR_ONLY'\n ? 'A personal agent acts with its creator\\'s own connections, so only they change it, run it, decide its approvals or cancel its runs. \"ekanos teams agents list <team>\" shows whose each agent is.'\n : code === 'NOT_A_TEAM_MEMBER'\n ? 'Add yourself to the team first (\"ekanos teams members add <team> --self\"), then run this again.'\n : code === 'AGENTS_MANAGE_REQUIRED'\n ? 'Take a role on the team that holds agents.manage (\"ekanos teams roles list <team>\"), or make it your own agent with --personal.'\n : code === 'PERSONAL_AGENT_CHANNEL_TRIGGER'\n ? 'Add a schedule or a webhook trigger instead: \"ekanos teams triggers add <team> <key> schedule|webhook --prompt ...\".'\n : 'Run \"ekanos sources\" to list the sources you hold a seat on.',\n );\n }\n if (response.status === 404) {\n throw notFoundError(\n message ?? 'Not found.',\n (code ? LIFECYCLE_HINTS[code] : undefined) ??\n (code === 'TEAM_NOT_FOUND'\n ? 'Run \"ekanos teams list\" to see the teams on this Source.'\n : code === 'PRODUCT_NOT_ENTITLED'\n ? '\"ekanos sources products\" shows what this Source has; only a super-admin enables a product for a Source (in /admin).'\n : code === 'SCOPE_NOT_FOUND' || code === 'PRODUCT_NOT_IN_SCOPE'\n ? 'Run \"ekanos sources scopes\" to see the Source\\'s product scopes and their products.'\n : code === 'WEBHOOK_NOT_FOUND' || code === 'CONNECTION_NOT_FOUND'\n ? 'Run \"ekanos teams show <team> <product>\" to see its team apps and webhooks.'\n : code === 'MEMBER_NOT_FOUND'\n ? 'Run \"ekanos teams members list <team>\" to see its members and invitations.'\n : code === 'NOT_A_SOURCE_USER'\n ? 'Invite them instead, by email: \"ekanos teams members invite <team> <email> --role <role>\".'\n : code === 'SKILL_NOT_FOUND'\n ? 'Run \"ekanos skills list --team <team>\" (and \"ekanos skills list\") to see the skills this team can use.'\n : code?.startsWith('AGENT_') ||\n code === 'TEMPLATE_NOT_FOUND'\n ? 'Run \"ekanos teams agents list <team>\" to see the team\\'s agents.'\n : /^(TRIGGER|LINK|MCP)_/.test(code ?? '')\n ? 'List them first: \"ekanos teams triggers|links|mcp list <team> ...\"'\n : 'Run \"ekanos sources\" to list the sources you hold a seat on.'),\n );\n }\n if (response.status === 409 && code === 'NO_TEAM_APP') {\n throw invalidStateError(\n message ?? 'This integration takes no team app.',\n 'Teams connect through the Source\\'s app: \"ekanos apps show <product>\".',\n );\n }\n if (response.status === 409 || response.status === 422) {\n throw invalidStateError(\n message ?? 'The host refused the change.',\n (code ? LIFECYCLE_HINTS[code] : undefined) ??\n (code === 'SLUG_TAKEN'\n ? 'Pick another with --slug, or run \"ekanos teams list\" to see the teams.'\n : code === 'AGENT_VERSION_CHANGED'\n ? 'A newer version was published since it was shown to you. Review it with \"ekanos teams agents show <team> <key>\", then run \"ekanos teams agents confirm\" again.'\n : code === 'ROLE_NEEDS_ACCEPTANCE'\n ? 'Add them with a lower role (--role admin), or invite them to the top role so they accept it: \"ekanos teams members invite <team> <email> --role owner\".'\n : code === 'AGENT_VERSION_CONFLICT'\n ? `Review it with \"ekanos teams agents show <team> <key>\", then apply with --base-version ${typeof body.latestVersion === 'number' ? body.latestVersion : '<its version>'} (or --overwrite to replace it anyway).`\n : code === 'ALREADY_MEMBER' || code === 'ALREADY_INVITED'\n ? 'Run \"ekanos teams members list <team>\"; change a role with \"ekanos teams members role <team> <email> <role>\".'\n : code === 'PRIMARY_OWNER'\n ? \"The primary owner's ownership is transferred in the app (team Settings → Members).\"\n : code === 'TEAM_ACCOUNTS_DISABLED'\n ? 'Ekanos switches team accounts on for a Source; ask a super-admin.'\n : code === 'PERSONAL_CONNECTION'\n ? 'Each member disconnects their own: \"ekanos teams disconnect <team> <product> --mine\".'\n : code === 'MCP_SERVER_FROM_TEMPLATE'\n ? 'It stays while the agent template declares it: change the template, apply and publish.'\n : code === 'PRODUCT_NOT_ENTITLED'\n ? '\"ekanos sources products\" shows what this Source has; only those can be in its scopes.'\n : code === 'TEMPLATE_ARCHIVED'\n ? 'Unarchive it first: \"ekanos agents unarchive <key>\".'\n : 'See \"ekanos teams --help\".'),\n );\n }\n if (response.status === 400 && code === 'INVALID_AGENT') {\n const issues = Array.isArray(body.issues)\n ? body.issues.flatMap((issue: unknown) =>\n typeof issue === 'object' &&\n issue !== null &&\n typeof (issue as { message?: unknown }).message === 'string'\n ? [\n ` ${String((issue as { path?: unknown }).path ?? '(root)')}: ${(issue as { message: string }).message}`,\n ]\n : [],\n )\n : [];\n throw validationError(\n [message ?? 'The agent is not valid.', ...issues].join('\\n'),\n 'Fix agent.json and run it again.',\n );\n }\n if (response.status === 400 && code === 'UNKNOWN_ROLE') {\n throw validationError(\n message ?? 'No such role.',\n 'Run \"ekanos teams roles list <team>\" for the roles this Source uses.',\n );\n }\n if (response.status === 400 && code === 'INVALID_FIELDS') {\n throw validationError(\n message ?? 'The host refused the fields.',\n 'Run \"ekanos teams app set <team> <product>\" again.',\n );\n }\n if (response.status === 400 && code === 'SECRET_AS_ARGUMENT') {\n throw usageError(\n message ?? 'A secret was passed as an argument.',\n 'Leave that field out of --set: pass it with --set-secret <field>=env:<NAME>|file:<path>|stdin or --browser, or run the command at your terminal, which asks for it hidden.',\n );\n }\n if (response.status === 400) {\n throw usageError(\n message ?? 'The host refused the request.',\n 'See \"ekanos teams --help\".',\n );\n }\n if (response.status >= 500 && code && message) {\n throw networkError(message, 'The host could not finish it; retry shortly.');\n }\n if (!response.ok) {\n throw networkError(\n `${host}${init.path} responded ${response.status}.`,\n response.status >= 500\n ? 'The Ekanos deployment returned a server error. Retry shortly.'\n : 'Confirm the host runs a build that includes the teams routes.',\n );\n }\n\n const parsed = schema.safeParse(body.data);\n if (!parsed.success) {\n throw networkError(\n `${host}/api/partner/teams answered in a shape this CLI does not read.`,\n 'Run \"ekanos upgrade\" — the CLI and the host disagree on the teams contract.',\n );\n }\n return { status: 'ok', data: parsed.data };\n}\n\n/** Next steps for the refusals of the team lifecycle, roles and groups calls. */\nconst LIFECYCLE_HINTS: Record<string, string> = {\n GROUP_NOT_FOUND:\n 'Run \"ekanos teams groups list <team>\" to see its groups (name one by name or id).',\n GROUP_AMBIGUOUS:\n 'Run \"ekanos teams groups list <team> --json\" and name the group by its id.',\n GROUP_EXISTS:\n 'Pick another name, or change that group: \"ekanos teams groups update <team> <group> …\".',\n ROLE_NOT_FOUND: 'Run \"ekanos sources roles list\" to see the Source\\'s roles.',\n ROLE_EXISTS:\n 'Change it instead: \"ekanos sources roles update <role> …\", or pick another name.',\n SYSTEM_ROLE:\n 'Owner, admin and member are fixed; create a custom role with \"ekanos sources roles create <name> …\".',\n ROLE_IN_USE:\n 'Give its members another role first: \"ekanos teams members role <team> <email> <role>\"; \"ekanos sources people\" shows who holds what.',\n WORKSPACE_NOT_FOUND:\n 'Run \"ekanos teams workspace list <team>\" to see its workspaces.',\n WORKSPACES_DISABLED:\n 'Workspaces are a Source Flag (enable_workspaces) only a super-admin switches.',\n NOT_A_MEMBER:\n 'Run \"ekanos teams members list <team>\" to see who is on it; you leave only a team you are a member of.',\n NOT_CONNECTED:\n 'Connect it first: \"ekanos teams connect <team> <product>\"; \"ekanos teams health <team>\" lists what it has.',\n USER_SCOPED:\n 'Each person connects it for themselves and checks it on their own Integrations → Health page.',\n NO_HEALTH_CHECK:\n 'The product has no package on this deployment; \"ekanos sources products\" shows what is registered.',\n PRODUCT_NOT_VISIBLE_TO_TEAM:\n 'Run \"ekanos teams scope show <team>\" for the products the team sees.',\n};\n\nasync function readOptionalJson(\n response: Response,\n): Promise<Record<string, unknown>> {\n try {\n const parsed: unknown = await response.json();\n return typeof parsed === 'object' && parsed !== null\n ? (parsed as Record<string, unknown>)\n : {};\n } catch {\n return {};\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"teams-api.js","sourceRoot":"","sources":["../src/teams-api.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type AudienceCreateRequest,\n type AudienceListResponse,\n AudienceListResponseSchema,\n type AudienceResponse,\n AudienceResponseSchema,\n type AudienceUpdateRequest,\n type MemberAudience,\n MemberAudienceSchema,\n type MemberAudienceSetResult,\n MemberAudienceSetResultSchema,\n type TeamAudience,\n TeamAudienceSchema,\n type TeamAudienceSetResult,\n TeamAudienceSetResultSchema,\n type ProductScopeList,\n ProductScopeListSchema,\n type ProductScopeProductChange,\n ProductScopeProductChangeSchema,\n type TeamScopes,\n TeamScopesSchema,\n type TeamScopesSetResult,\n TeamScopesSetResultSchema,\n type TeamAppSetResult,\n TeamAppSetResultSchema,\n type TeamCreateRequest,\n type TeamCreateResult,\n TeamCreateResultSchema,\n type TeamDisconnectResult,\n TeamDisconnectResultSchema,\n type TeamMemberChangeResult,\n TeamMemberChangeResultSchema,\n type TeamMemberAddResult,\n TeamMemberAddResultSchema,\n type TeamMemberInviteResult,\n TeamMemberInviteResultSchema,\n type TeamMemberList,\n TeamMemberListSchema,\n type TeamRenameResult,\n TeamRenameResultSchema,\n type TeamRoles,\n TeamRolesSchema,\n type TeamIntegrationStatus,\n TeamIntegrationStatusSchema,\n type TeamIntegrationEventList,\n TeamIntegrationEventListSchema,\n type TeamList,\n TeamListSchema,\n type TeamWebhookMintResult,\n TeamWebhookMintResultSchema,\n} from '@ekanos/integration-schema';\nimport type { z } from 'zod';\n\nimport { request } from './auth/ekanos-api';\nimport {\n authRequiredError,\n forbiddenError,\n invalidStateError,\n networkError,\n notFoundError,\n usageError,\n validationError,\n} from './errors';\n\n/**\n * The CLI's client for a Source's teams and their integration setup — the\n * team-level counterpart of `apps-api.ts`.\n *\n * GET /api/partner/teams?source=<slug> → TeamList\n * GET /api/partner/teams/<team>/integrations/<product>?source=<slug> → TeamIntegrationStatus\n * PUT …/integrations/<product>/app?source=<slug> { connectionId?, fields }\n * → TeamAppSetResult\n * POST …/integrations/<product>/webhooks/<id>?source=<slug> → TeamWebhookMintResult\n * DELETE /api/partner/teams/<team>/integrations/<product>?source=<slug> → TeamDisconnectResult\n * POST /api/partner/teams?source=<slug> { name, slug?, ownerEmail? } → TeamCreateResult\n * PATCH /api/partner/teams/<team>?source=<slug> { name } → TeamRenameResult\n * GET /api/partner/teams/<team>/members?source=<slug> → TeamMemberList\n * POST …/<team>/members?source=<slug> { email, role } → TeamMemberInviteResult\n * PATCH …/<team>/members/<email>?source=<slug> { role } → TeamMemberChangeResult\n * DELETE …/<team>/members/<email>?source=<slug> → TeamMemberChangeResult\n * GET /api/partner/teams/<team>/roles?source=<slug> → TeamRoles\n * GET /api/partner/teams/<team>/events?source=<slug>[&product=<slug>]\n * [&since=<iso>][&limit=<n>] → TeamIntegrationEventList\n * GET /api/partner/scopes?source=<slug> → ProductScopeList\n * PUT | DELETE /api/partner/scopes/<scope>/products/<product>?source=<slug>\n * → ProductScopeProductChange\n * GET /api/partner/audiences?source=<slug> → AudienceListResponse\n * GET | PATCH /api/partner/audiences/<audience>?source=<slug> → AudienceResponse\n * POST /api/partner/audiences?source=<slug> { name, … } → AudienceResponse\n * GET | PUT /api/partner/teams/<team>/audience?source=<slug> { audienceId }\n * → TeamAudience | TeamAudienceSetResult\n * GET | PUT …/<team>/members/<email>/audience?source=<slug> { audienceId | null }\n * → MemberAudience | MemberAudienceSetResult\n * GET /api/partner/teams/<team>/scopes?source=<slug> → TeamScopes\n * PUT /api/partner/teams/<team>/scopes?source=<slug> { scopes } → TeamScopesSetResult\n *\n * → 401 / 3xx refresh once and retry\n * → 403 { code: \"SOURCE_ADMIN_REQUIRED\" | \"MFA_REQUIRED\" | \"FORBIDDEN\" }\n * → 404 { code: \"TEAM_NOT_FOUND\" | \"PRODUCT_NOT_ENTITLED\" | \"WEBHOOK_NOT_FOUND\"\n * | \"CONNECTION_NOT_FOUND\" | \"SOURCE_NOT_FOUND\" }\n * | \"MEMBER_NOT_FOUND\" }\n * → 409 { code: \"NO_TEAM_APP\" | \"SLUG_TAKEN\" | \"TEAM_ACCOUNTS_DISABLED\"\n * | \"ALREADY_MEMBER\" | \"ALREADY_INVITED\" | \"PRIMARY_OWNER\" }\n * → 400 { code: \"INVALID_FIELDS\" | \"INVALID_REQUEST\" | \"UNKNOWN_ROLE\" }\n */\n\nexport type TeamsApiResult<T> =\n | { status: 'ok'; data: T }\n | { status: 'unauthorized' };\n\nexport function listTeams(\n host: string,\n accessToken: string,\n source: string,\n): Promise<TeamsApiResult<TeamList>> {\n return call(host, accessToken, TeamListSchema, {\n method: 'GET',\n path: '/api/partner/teams',\n source,\n });\n}\n\nexport function showTeamIntegration(\n host: string,\n accessToken: string,\n target: { source: string; team: string; product: string },\n): Promise<TeamsApiResult<TeamIntegrationStatus>> {\n return call(host, accessToken, TeamIntegrationStatusSchema, {\n method: 'GET',\n path: integrationPath(target),\n source: target.source,\n });\n}\n\nexport function setTeamApp(\n host: string,\n accessToken: string,\n target: { source: string; team: string; product: string },\n body: {\n connectionId?: string;\n fields: Record<string, string>;\n clear?: string[];\n },\n): Promise<TeamsApiResult<TeamAppSetResult>> {\n return call(host, accessToken, TeamAppSetResultSchema, {\n method: 'PUT',\n path: `${integrationPath(target)}/app`,\n source: target.source,\n body,\n });\n}\n\nexport function mintTeamWebhook(\n host: string,\n accessToken: string,\n target: { source: string; team: string; product: string },\n webhookId: string,\n): Promise<TeamsApiResult<TeamWebhookMintResult>> {\n return call(host, accessToken, TeamWebhookMintResultSchema, {\n method: 'POST',\n path: `${integrationPath(target)}/webhooks/${encodeURIComponent(webhookId)}`,\n source: target.source,\n });\n}\n\nexport function disconnectTeamIntegration(\n host: string,\n accessToken: string,\n target: { source: string; team: string; product: string; mine?: boolean },\n): Promise<TeamsApiResult<TeamDisconnectResult>> {\n return call(host, accessToken, TeamDisconnectResultSchema, {\n method: 'DELETE',\n // `--mine`: the caller's own personal connection, never another's.\n path: `${integrationPath(target)}${target.mine ? '/mine' : ''}`,\n source: target.source,\n });\n}\n\nexport function createTeam(\n host: string,\n accessToken: string,\n source: string,\n body: TeamCreateRequest,\n): Promise<TeamsApiResult<TeamCreateResult>> {\n return call(host, accessToken, TeamCreateResultSchema, {\n method: 'POST',\n path: '/api/partner/teams',\n source,\n body,\n });\n}\n\nexport function renameTeam(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n name: string,\n): Promise<TeamsApiResult<TeamRenameResult>> {\n return call(host, accessToken, TeamRenameResultSchema, {\n method: 'PATCH',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}`,\n source: target.source,\n body: { name },\n });\n}\n\nexport function listTeamMembers(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n): Promise<TeamsApiResult<TeamMemberList>> {\n return call(host, accessToken, TeamMemberListSchema, {\n method: 'GET',\n path: membersPath(target.team),\n source: target.source,\n });\n}\n\nexport function inviteTeamMember(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n body: { email: string; role: string },\n): Promise<TeamsApiResult<TeamMemberInviteResult>> {\n return call(host, accessToken, TeamMemberInviteResultSchema, {\n method: 'POST',\n path: membersPath(target.team),\n source: target.source,\n body,\n });\n}\n\n/** `teams members add`: a member now, no invitation email (`PUT`). */\nexport function addTeamMember(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n body: { self: true; role?: string } | { email: string; role?: string },\n): Promise<TeamsApiResult<TeamMemberAddResult>> {\n return call(host, accessToken, TeamMemberAddResultSchema, {\n method: 'PUT',\n path: membersPath(target.team),\n source: target.source,\n body,\n });\n}\n\nexport function setTeamMemberRole(\n host: string,\n accessToken: string,\n target: { source: string; team: string; email: string },\n role: string,\n): Promise<TeamsApiResult<TeamMemberChangeResult>> {\n return call(host, accessToken, TeamMemberChangeResultSchema, {\n method: 'PATCH',\n path: `${membersPath(target.team)}/${encodeURIComponent(target.email)}`,\n source: target.source,\n body: { role },\n });\n}\n\nexport function removeTeamMember(\n host: string,\n accessToken: string,\n target: { source: string; team: string; email: string },\n): Promise<TeamsApiResult<TeamMemberChangeResult>> {\n return call(host, accessToken, TeamMemberChangeResultSchema, {\n method: 'DELETE',\n path: `${membersPath(target.team)}/${encodeURIComponent(target.email)}`,\n source: target.source,\n });\n}\n\nexport function listProductScopes(\n host: string,\n accessToken: string,\n source: string,\n): Promise<TeamsApiResult<ProductScopeList>> {\n return call(host, accessToken, ProductScopeListSchema, {\n method: 'GET',\n path: '/api/partner/scopes',\n source,\n });\n}\n\nexport function setScopeProduct(\n host: string,\n accessToken: string,\n target: { source: string; scope: string; product: string },\n included: boolean,\n): Promise<TeamsApiResult<ProductScopeProductChange>> {\n return call(host, accessToken, ProductScopeProductChangeSchema, {\n method: included ? 'PUT' : 'DELETE',\n path: `/api/partner/scopes/${encodeURIComponent(target.scope)}/products/${encodeURIComponent(target.product)}`,\n source: target.source,\n });\n}\n\nexport function showTeamScopes(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n): Promise<TeamsApiResult<TeamScopes>> {\n return call(host, accessToken, TeamScopesSchema, {\n method: 'GET',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}/scopes`,\n source: target.source,\n });\n}\n\nexport function setTeamScopes(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n scopes: string[],\n): Promise<TeamsApiResult<TeamScopesSetResult>> {\n return call(host, accessToken, TeamScopesSetResultSchema, {\n method: 'PUT',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}/scopes`,\n source: target.source,\n body: { scopes },\n });\n}\n\nexport function listAudiences(\n host: string,\n accessToken: string,\n source: string,\n): Promise<TeamsApiResult<AudienceListResponse>> {\n return call(host, accessToken, AudienceListResponseSchema, {\n method: 'GET',\n path: '/api/partner/audiences',\n source,\n });\n}\n\nexport function showAudience(\n host: string,\n accessToken: string,\n target: { source: string; audience: string },\n): Promise<TeamsApiResult<AudienceResponse>> {\n return call(host, accessToken, AudienceResponseSchema, {\n method: 'GET',\n path: `/api/partner/audiences/${encodeURIComponent(target.audience)}`,\n source: target.source,\n });\n}\n\nexport function createAudience(\n host: string,\n accessToken: string,\n source: string,\n body: AudienceCreateRequest,\n): Promise<TeamsApiResult<AudienceResponse>> {\n return call(host, accessToken, AudienceResponseSchema, {\n method: 'POST',\n path: '/api/partner/audiences',\n source,\n body,\n });\n}\n\nexport function updateAudience(\n host: string,\n accessToken: string,\n target: { source: string; audience: string },\n body: AudienceUpdateRequest,\n): Promise<TeamsApiResult<AudienceResponse>> {\n return call(host, accessToken, AudienceResponseSchema, {\n method: 'PATCH',\n path: `/api/partner/audiences/${encodeURIComponent(target.audience)}`,\n source: target.source,\n body,\n });\n}\n\nexport function showTeamAudience(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n): Promise<TeamsApiResult<TeamAudience>> {\n return call(host, accessToken, TeamAudienceSchema, {\n method: 'GET',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}/audience`,\n source: target.source,\n });\n}\n\nexport function setTeamAudience(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n audienceId: string,\n): Promise<TeamsApiResult<TeamAudienceSetResult>> {\n return call(host, accessToken, TeamAudienceSetResultSchema, {\n method: 'PUT',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}/audience`,\n source: target.source,\n body: { audienceId },\n });\n}\n\nexport function showMemberAudience(\n host: string,\n accessToken: string,\n target: { source: string; team: string; email: string },\n): Promise<TeamsApiResult<MemberAudience>> {\n return call(host, accessToken, MemberAudienceSchema, {\n method: 'GET',\n path: `${membersPath(target.team)}/${encodeURIComponent(target.email)}/audience`,\n source: target.source,\n });\n}\n\n/** `audienceId: null` clears the member's own audience. */\nexport function setMemberAudience(\n host: string,\n accessToken: string,\n target: { source: string; team: string; email: string },\n audienceId: string | null,\n): Promise<TeamsApiResult<MemberAudienceSetResult>> {\n return call(host, accessToken, MemberAudienceSetResultSchema, {\n method: 'PUT',\n path: `${membersPath(target.team)}/${encodeURIComponent(target.email)}/audience`,\n source: target.source,\n body: { audienceId },\n });\n}\n\nexport function listTeamRoles(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n): Promise<TeamsApiResult<TeamRoles>> {\n return call(host, accessToken, TeamRolesSchema, {\n method: 'GET',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}/roles`,\n source: target.source,\n });\n}\n\nexport function listTeamEvents(\n host: string,\n accessToken: string,\n target: { source: string; team: string },\n filters: { product?: string; since?: string; limit?: number },\n): Promise<TeamsApiResult<TeamIntegrationEventList>> {\n const query = new URLSearchParams();\n if (filters.product) query.set('product', filters.product);\n if (filters.since) query.set('since', filters.since);\n if (filters.limit !== undefined) query.set('limit', String(filters.limit));\n const encoded = query.toString();\n const suffix = encoded ? `?${encoded}` : '';\n return call(host, accessToken, TeamIntegrationEventListSchema, {\n method: 'GET',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}/events${suffix}`,\n source: target.source,\n });\n}\n\nfunction membersPath(team: string): string {\n return `/api/partner/teams/${encodeURIComponent(team)}/members`;\n}\n\nfunction integrationPath(target: { team: string; product: string }): string {\n return `/api/partner/teams/${encodeURIComponent(target.team)}/integrations/${encodeURIComponent(target.product)}`;\n}\n\n/** One partner teams call; shared by the team-agent clients (`team-agents-api.ts`). */\nexport async function call<T>(\n host: string,\n accessToken: string,\n schema: z.ZodType<T>,\n init: {\n method: 'GET' | 'PUT' | 'POST' | 'PATCH' | 'DELETE';\n path: string;\n source: string;\n body?: unknown;\n },\n): Promise<TeamsApiResult<T>> {\n const response = await request(\n `${host}${init.path}${init.path.includes('?') ? '&' : '?'}${new URLSearchParams({ source: init.source })}`,\n {\n method: init.method,\n headers: {\n accept: 'application/json',\n authorization: `Bearer ${accessToken}`,\n ...(init.body === undefined\n ? {}\n : { 'content-type': 'application/json' }),\n },\n body: init.body === undefined ? undefined : JSON.stringify(init.body),\n },\n );\n\n if (\n response.status === 401 ||\n (response.status >= 300 && response.status < 400)\n ) {\n return { status: 'unauthorized' };\n }\n\n const body = await readOptionalJson(response);\n const code = typeof body.code === 'string' ? body.code : null;\n const message =\n typeof body.error === 'string' && body.error ? body.error : null;\n\n if (response.status === 403 && code === 'MFA_REQUIRED') {\n throw authRequiredError(\n message ?? `${host} requires multi-factor authentication.`,\n 'Complete MFA in the browser, then run \"ekanos login\" again.',\n );\n }\n if (response.status === 403) {\n throw forbiddenError(\n message ?? 'Not permitted on this Source.',\n code === 'SOURCE_ADMIN_REQUIRED'\n ? \"Only a Source admin manages its teams' integrations. Ask one to run it.\"\n : code === 'CONFIRM_NOT_PERMITTED'\n ? \"Only a Source admin of the team's Source, or someone who manages the team's agents, confirms what an agent may use.\"\n : code === 'PERSONAL_AGENT_CREATOR_ONLY'\n ? 'A personal agent acts with its creator\\'s own connections, so only they change it, run it, decide its approvals or cancel its runs. \"ekanos teams agents list <team>\" shows whose each agent is.'\n : code === 'NOT_A_TEAM_MEMBER'\n ? 'Add yourself to the team first (\"ekanos teams members add <team> --self\"), then run this again.'\n : code === 'AGENTS_MANAGE_REQUIRED'\n ? 'Take a role on the team that holds agents.manage (\"ekanos teams roles list <team>\"), or make it your own agent with --personal.'\n : code === 'PERSONAL_AGENT_CHANNEL_TRIGGER'\n ? 'Add a schedule or a webhook trigger instead: \"ekanos teams triggers add <team> <key> schedule|webhook --prompt ...\".'\n : 'Run \"ekanos sources\" to list the sources you hold a seat on.',\n );\n }\n if (response.status === 404) {\n throw notFoundError(\n message ?? 'Not found.',\n (code ? LIFECYCLE_HINTS[code] : undefined) ??\n (code === 'TEAM_NOT_FOUND'\n ? 'Run \"ekanos teams list\" to see the teams on this Source.'\n : code === 'PRODUCT_NOT_ENTITLED'\n ? '\"ekanos sources products\" shows what this Source has; only a super-admin enables a product for a Source (in /admin).'\n : code === 'SCOPE_NOT_FOUND' || code === 'PRODUCT_NOT_IN_SCOPE'\n ? 'Run \"ekanos sources scopes\" to see the Source\\'s product scopes and their products.'\n : code === 'WEBHOOK_NOT_FOUND' || code === 'CONNECTION_NOT_FOUND'\n ? 'Run \"ekanos teams show <team> <product>\" to see its team apps and webhooks.'\n : code === 'MEMBER_NOT_FOUND'\n ? 'Run \"ekanos teams members list <team>\" to see its members and invitations.'\n : code === 'NOT_A_SOURCE_USER'\n ? 'Invite them instead, by email: \"ekanos teams members invite <team> <email> --role <role>\".'\n : code === 'SKILL_NOT_FOUND'\n ? 'Run \"ekanos skills list --team <team>\" (and \"ekanos skills list\") to see the skills this team can use.'\n : code?.startsWith('AGENT_') ||\n code === 'TEMPLATE_NOT_FOUND'\n ? 'Run \"ekanos teams agents list <team>\" to see the team\\'s agents.'\n : /^(TRIGGER|LINK|MCP)_/.test(code ?? '')\n ? 'List them first: \"ekanos teams triggers|links|mcp list <team> ...\"'\n : 'Run \"ekanos sources\" to list the sources you hold a seat on.'),\n );\n }\n if (response.status === 409 && code === 'NO_TEAM_APP') {\n throw invalidStateError(\n message ?? 'This integration takes no team app.',\n 'Teams connect through the Source\\'s app: \"ekanos apps show <product>\".',\n );\n }\n if (response.status === 409 || response.status === 422) {\n throw invalidStateError(\n message ?? 'The host refused the change.',\n (code ? LIFECYCLE_HINTS[code] : undefined) ??\n (code === 'AUDIENCE_SET_ON_TEAM'\n ? 'Set the team’s instead: \"ekanos teams audience <team> <audience>\". A person’s groups narrow it.'\n : code === 'SLUG_TAKEN'\n ? 'Pick another with --slug, or run \"ekanos teams list\" to see the teams.'\n : code === 'AGENT_VERSION_CHANGED'\n ? 'A newer version was published since it was shown to you. Review it with \"ekanos teams agents show <team> <key>\", then run \"ekanos teams agents confirm\" again.'\n : code === 'ROLE_NEEDS_ACCEPTANCE'\n ? 'Add them with a lower role (--role admin), or invite them to the top role so they accept it: \"ekanos teams members invite <team> <email> --role owner\".'\n : code === 'AGENT_VERSION_CONFLICT'\n ? `Review it with \"ekanos teams agents show <team> <key>\", then apply with --base-version ${typeof body.latestVersion === 'number' ? body.latestVersion : '<its version>'} (or --overwrite to replace it anyway).`\n : code === 'ALREADY_MEMBER' || code === 'ALREADY_INVITED'\n ? 'Run \"ekanos teams members list <team>\"; change a role with \"ekanos teams members role <team> <email> <role>\".'\n : code === 'PRIMARY_OWNER'\n ? \"The primary owner's ownership is transferred in the app (team Settings → Members).\"\n : code === 'TEAM_ACCOUNTS_DISABLED'\n ? 'Ekanos switches team accounts on for a Source; ask a super-admin.'\n : code === 'PERSONAL_CONNECTION'\n ? 'Each member disconnects their own: \"ekanos teams disconnect <team> <product> --mine\".'\n : code === 'MCP_SERVER_FROM_TEMPLATE'\n ? 'It stays while the agent template declares it: change the template, apply and publish.'\n : code === 'PRODUCT_NOT_ENTITLED'\n ? '\"ekanos sources products\" shows what this Source has; only those can be in its scopes.'\n : code === 'TEMPLATE_ARCHIVED'\n ? 'Unarchive it first: \"ekanos agents unarchive <key>\".'\n : 'See \"ekanos teams --help\".'),\n );\n }\n if (response.status === 400 && code === 'INVALID_AGENT') {\n const issues = Array.isArray(body.issues)\n ? body.issues.flatMap((issue: unknown) =>\n typeof issue === 'object' &&\n issue !== null &&\n typeof (issue as { message?: unknown }).message === 'string'\n ? [\n ` ${String((issue as { path?: unknown }).path ?? '(root)')}: ${(issue as { message: string }).message}`,\n ]\n : [],\n )\n : [];\n throw validationError(\n [message ?? 'The agent is not valid.', ...issues].join('\\n'),\n 'Fix agent.json and run it again.',\n );\n }\n if (response.status === 400 && code === 'UNKNOWN_ROLE') {\n throw validationError(\n message ?? 'No such role.',\n 'Run \"ekanos teams roles list <team>\" for the roles this Source uses.',\n );\n }\n if (response.status === 400 && code === 'INVALID_FIELDS') {\n throw validationError(\n message ?? 'The host refused the fields.',\n 'Run \"ekanos teams app set <team> <product>\" again.',\n );\n }\n if (response.status === 400 && code === 'SECRET_AS_ARGUMENT') {\n throw usageError(\n message ?? 'A secret was passed as an argument.',\n 'Leave that field out of --set: pass it with --set-secret <field>=env:<NAME>|file:<path>|stdin or --browser, or run the command at your terminal, which asks for it hidden.',\n );\n }\n if (response.status === 400) {\n throw usageError(\n message ?? 'The host refused the request.',\n 'See \"ekanos teams --help\".',\n );\n }\n if (response.status >= 500 && code && message) {\n throw networkError(message, 'The host could not finish it; retry shortly.');\n }\n if (!response.ok) {\n throw networkError(\n `${host}${init.path} responded ${response.status}.`,\n response.status >= 500\n ? 'The Ekanos deployment returned a server error. Retry shortly.'\n : 'Confirm the host runs a build that includes the teams routes.',\n );\n }\n\n const parsed = schema.safeParse(body.data);\n if (!parsed.success) {\n throw networkError(\n `${host}/api/partner/teams answered in a shape this CLI does not read.`,\n 'Run \"ekanos upgrade\" — the CLI and the host disagree on the teams contract.',\n );\n }\n return { status: 'ok', data: parsed.data };\n}\n\n/** Next steps for the refusals of the team lifecycle, roles and groups calls. */\nconst LIFECYCLE_HINTS: Record<string, string> = {\n GROUP_NOT_FOUND:\n 'Run \"ekanos teams groups list <team>\" to see its groups (name one by name or id).',\n GROUP_AMBIGUOUS:\n 'Run \"ekanos teams groups list <team> --json\" and name the group by its id.',\n GROUP_EXISTS:\n 'Pick another name, or change that group: \"ekanos teams groups update <team> <group> …\".',\n GROUP_IMPLICIT:\n 'Everyone holds each member in no other group, so it is not edited and has no members to add or remove: add them to another group instead (\"ekanos teams groups list <team>\").',\n GROUP_PREDEFINED:\n 'A predefined group belongs to the team’s business type and is removed with the Source’s audiences, not from one team. Change its products or members here, or delete a team group instead.',\n PRODUCT_NOT_IN_BUSINESS_TYPE:\n 'A group picks only within the team’s audience: \"ekanos teams audience <team>\" names it, \"ekanos audiences show <audience>\" lists its products, and \"ekanos audiences set <audience> --products …\" adds one.',\n ROLE_NOT_FOUND: 'Run \"ekanos sources roles list\" to see the Source\\'s roles.',\n ROLE_EXISTS:\n 'Change it instead: \"ekanos sources roles update <role> …\", or pick another name.',\n SYSTEM_ROLE:\n 'Owner, admin and member are fixed; create a custom role with \"ekanos sources roles create <name> …\".',\n ROLE_IN_USE:\n 'Give its members another role first: \"ekanos teams members role <team> <email> <role>\"; \"ekanos sources people\" shows who holds what.',\n WORKSPACE_NOT_FOUND:\n 'Run \"ekanos teams workspace list <team>\" to see its workspaces.',\n WORKSPACES_DISABLED:\n 'Workspaces are a Source Flag (enable_workspaces) only a super-admin switches.',\n NOT_A_MEMBER:\n 'Run \"ekanos teams members list <team>\" to see who is on it; you leave only a team you are a member of.',\n NOT_CONNECTED:\n 'Connect it first: \"ekanos teams connect <team> <product>\"; \"ekanos teams health <team>\" lists what it has.',\n USER_SCOPED:\n 'Each person connects it for themselves and checks it on their own Integrations → Health page.',\n NO_HEALTH_CHECK:\n 'The product has no package on this deployment; \"ekanos sources products\" shows what is registered.',\n PRODUCT_NOT_VISIBLE_TO_TEAM:\n 'Run \"ekanos teams audience <team>\" for the team’s audience, and \"ekanos audiences show <audience>\" for the products it shows.',\n};\n\nasync function readOptionalJson(\n response: Response,\n): Promise<Record<string, unknown>> {\n try {\n const parsed: unknown = await response.json();\n return typeof parsed === 'object' && parsed !== null\n ? (parsed as Record<string, unknown>)\n : {};\n } catch {\n return {};\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ekanos/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "The Ekanos partner toolchain CLI: scaffold, validate, and test an Ekanos integration against the published @ekanos packages. Agent-native — every verb speaks JSON with a stable exit-code taxonomy.",
|
|
6
6
|
"keywords": [
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@clack/prompts": "1.7.0",
|
|
38
|
-
"@ekanos/integration-schema": "0.
|
|
38
|
+
"@ekanos/integration-schema": "0.22.0",
|
|
39
39
|
"esbuild": "0.28.1",
|
|
40
40
|
"picocolors": "1.1.1"
|
|
41
41
|
},
|
|
@@ -21,16 +21,16 @@
|
|
|
21
21
|
"build": "npx ekanos build"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@ekanos/sdk": "^0.
|
|
25
|
-
"@ekanos/ui": "^0.
|
|
24
|
+
"@ekanos/sdk": "^0.22.0",
|
|
25
|
+
"@ekanos/ui": "^0.22.0",
|
|
26
26
|
"@tanstack/react-query": "^5.101.4",
|
|
27
27
|
"react": "^19.2.8",
|
|
28
28
|
"react-dom": "^19.2.8",
|
|
29
29
|
"zod": "^3.25.76"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@ekanos/cli": "^0.
|
|
33
|
-
"@ekanos/harness": "^0.
|
|
32
|
+
"@ekanos/cli": "^0.20.0",
|
|
33
|
+
"@ekanos/harness": "^0.22.0",
|
|
34
34
|
"@tailwindcss/postcss": "^4.3.3",
|
|
35
35
|
"@typescript-eslint/parser": "^8.46.2",
|
|
36
36
|
"@types/react": "^19.2.0",
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
"prepare": "node scripts/setup-hooks.mjs"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@ekanos/sdk": "^0.
|
|
16
|
-
"@ekanos/ui": "^0.
|
|
15
|
+
"@ekanos/sdk": "^0.22.0",
|
|
16
|
+
"@ekanos/ui": "^0.22.0"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@ekanos/cli": "^0.
|
|
20
|
-
"@ekanos/harness": "^0.
|
|
19
|
+
"@ekanos/cli": "^0.20.0",
|
|
20
|
+
"@ekanos/harness": "^0.22.0",
|
|
21
21
|
"@hookform/resolvers": "^5.2.2",
|
|
22
22
|
"@tailwindcss/postcss": "^4.3.3",
|
|
23
23
|
"@tanstack/react-query": "^5.101.4",
|