@indemn/cli 1.7.8 → 1.7.10

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.
@@ -51,6 +51,10 @@ export declare function refreshAccess(client: IndemnClient): Promise<Access | nu
51
51
  export declare function usableSomewhere(tool: string, access: Access | null, onlyOrgId?: string): boolean;
52
52
  /** The person's role in an org, for messages ("agent in Acme"). */
53
53
  export declare function roleIn(access: Access | null, orgId: string | undefined): string | null;
54
+ /** The org's project where the person can invite people: copilot's invite route needs owner or admin there. */
55
+ export declare function inviteProject(access: Access | null, orgId: string): AccessProject | undefined;
56
+ /** Why the person can't invite people to this org, or null (also when access is unknown: the server decides). */
57
+ export declare function inviteDenial(access: Access | null, orgId: string | undefined): string | null;
54
58
  /**
55
59
  * For org-scoped requirements: why this org can't be used, or null. Project-scoped
56
60
  * requirements are decided by the server (the project comes from the agent).
@@ -1 +1 @@
1
- {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/sdk/access.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACzD,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;AAExC,6GAA6G;AAC7G,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAcvF,CAAC;AAIH,yGAAyG;AACzG,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAKlE;AAiBD,kDAAkD;AAClD,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWhF;AAMD,8FAA8F;AAC9F,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAOhG;AAED,mEAAmE;AACnE,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAKtF;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAgBvG"}
1
+ {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/sdk/access.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACzD,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;AAExC,6GAA6G;AAC7G,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAcvF,CAAC;AAIH,yGAAyG;AACzG,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAKlE;AAiBD,kDAAkD;AAClD,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWhF;AAMD,8FAA8F;AAC9F,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAOhG;AAED,mEAAmE;AACnE,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAKtF;AAED,+GAA+G;AAC/G,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE7F;AAED,iHAAiH;AACjH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAI5F;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAgBvG"}
@@ -86,6 +86,17 @@ export function roleIn(access, orgId) {
86
86
  return null;
87
87
  return `${org.role ?? 'member'} in ${org.org_name}`;
88
88
  }
89
+ /** The org's project where the person can invite people: copilot's invite route needs owner or admin there. */
90
+ export function inviteProject(access, orgId) {
91
+ return access?.orgs.find((o) => o.org_id === orgId)?.projects.find((p) => p.role === 'owner' || p.role === 'admin');
92
+ }
93
+ /** Why the person can't invite people to this org, or null (also when access is unknown: the server decides). */
94
+ export function inviteDenial(access, orgId) {
95
+ const org = orgId ? access?.orgs.find((o) => o.org_id === orgId) : undefined;
96
+ if (!org || inviteProject(access, org.org_id))
97
+ return null;
98
+ return `Only owners and admins can invite people, and your role in ${org.org_name} is ${org.role ?? 'member'}.`;
99
+ }
89
100
  /**
90
101
  * For org-scoped requirements: why this org can't be used, or null. Project-scoped
91
102
  * requirements are decided by the server (the project comes from the agent).
@@ -1 +1 @@
1
- {"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/sdk/access.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/sdk/access.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,29 @@
1
1
  import type { IndemnClient } from './client.js';
2
+ export type CampaignStatus = 'draft' | 'running' | 'paused' | 'archived';
3
+ /** A touchpoint in a campaign's draft, found by its key. */
4
+ export type Touchpoint = {
5
+ key: string;
6
+ } & Record<string, unknown>;
7
+ type Draft = {
8
+ audience?: unknown;
9
+ touchpoints?: Touchpoint[];
10
+ escalation_policy?: unknown;
11
+ channel_policy?: unknown;
12
+ };
13
+ type Envelope = {
14
+ total?: number;
15
+ items?: Array<Record<string, unknown>>;
16
+ };
2
17
  /**
3
- * Campaigns, READ-ONLY by design, through copilot's proxy to the campaigns
4
- * service. The CLI never publishes a campaign, sends a communication or
5
- * triggers a book sync; those act on real customers.
18
+ * Campaigns through copilot's proxy to the campaigns service: reads, and
19
+ * writes to configuration only (WRITABLE). The CLI never sends a
20
+ * communication, runs a book sync or deletes; those act on real customers.
6
21
  */
7
22
  export declare class CampaignsSDK {
8
23
  private client;
9
24
  constructor(client: IndemnClient);
10
25
  private read;
26
+ private write;
11
27
  list(filter?: {
12
28
  status?: string;
13
29
  solutionId?: string;
@@ -31,5 +47,68 @@ export declare class CampaignsSDK {
31
47
  /** A template; with versions: true, its versions (where subject and body live). */
32
48
  template(id: string, versions?: boolean): Promise<unknown>;
33
49
  templateSkills(solutionId?: string): Promise<unknown>;
50
+ templateSkill(id: string): Promise<{
51
+ name?: string;
52
+ instructions?: string;
53
+ }>;
54
+ books(filter?: {
55
+ solutionId?: string;
56
+ limit?: number;
57
+ }): Promise<Envelope>;
58
+ book(id: string): Promise<{
59
+ name?: string;
60
+ }>;
61
+ createCampaign(input: {
62
+ solution_id: string;
63
+ book_id: string;
64
+ name: string;
65
+ campaign_type: string;
66
+ entry?: string;
67
+ closes?: string;
68
+ }): Promise<{
69
+ id: string;
70
+ }>;
71
+ /** Change parts of the draft; the rest of it (its touchpoints among it) stays as it is. */
72
+ updateDraft(id: string, parts: Omit<Draft, 'touchpoints'>): Promise<Draft>;
73
+ /** Add a touchpoint, or change the one with its key (only the fields given). A new one drafts unless told to
74
+ * send; a template given without a version is pinned to its latest. */
75
+ setTouchpoint(id: string, touchpoint: Touchpoint): Promise<Draft>;
76
+ publish(id: string, changeSummary?: string): Promise<unknown>;
77
+ setStatus(id: string, status: CampaignStatus): Promise<unknown>;
78
+ createTemplate(input: Record<string, unknown> & {
79
+ uses_variables?: string[];
80
+ }): Promise<unknown>;
81
+ private latestTemplateVersion;
82
+ /** A new version of the template: its latest one with the changes given. */
83
+ updateTemplate(id: string, changes: Record<string, unknown> & {
84
+ uses_variables?: string[];
85
+ }): Promise<unknown>;
86
+ createTemplateSkill(input: {
87
+ solution_id?: string;
88
+ key: string;
89
+ name: string;
90
+ instructions: string;
91
+ }): Promise<unknown>;
92
+ updateTemplateSkill(id: string, changes: {
93
+ name?: string;
94
+ instructions?: string;
95
+ }): Promise<unknown>;
96
+ createBook(input: {
97
+ solution_id: string;
98
+ name: string;
99
+ schema_id?: string;
100
+ source?: unknown;
101
+ }): Promise<{
102
+ id: string;
103
+ }>;
104
+ /** Change the parts of a book that are given, each its own call in the service. Keys are the book's schema
105
+ * keys; identity keys change only while the book has no records. */
106
+ updateBook(id: string, changes: {
107
+ source?: unknown;
108
+ field_map?: unknown[];
109
+ identity_keys?: string[];
110
+ display?: unknown;
111
+ }): Promise<unknown>;
34
112
  }
113
+ export {};
35
114
  //# sourceMappingURL=campaigns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"campaigns.d.ts","sourceRoot":"","sources":["../../src/sdk/campaigns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAehD;;;;GAIG;AACH,qBAAa,YAAY;IACX,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;YAE1B,IAAI;IAKlB,IAAI,CAAC,MAAM,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAO1I,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjC,2FAA2F;IAC3F,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,kBAAkB,GAAG,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlH,SAAS,CAAC,MAAM,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAOjI,mFAAmF;IACnF,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxD,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAGtD"}
1
+ {"version":3,"file":"campaigns.d.ts","sourceRoot":"","sources":["../../src/sdk/campaigns.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { CliError, EXIT } from '../core/runtime.js';
2
- /** Paths of the campaigns service the CLI may read. Everything else, and every write, is refused. */
2
+ /** Paths of the campaigns service the CLI may read. Everything else is refused. */
3
3
  const READABLE = [
4
4
  /^\/campaigns$/,
5
5
  /^\/campaigns\/[\w-]+$/,
@@ -9,11 +9,34 @@ const READABLE = [
9
9
  /^\/templates\/[\w-]+\/versions$/,
10
10
  /^\/template-skills$/,
11
11
  /^\/template-skills\/[\w-]+$/,
12
+ /^\/books$/,
13
+ /^\/books\/[\w-]+$/,
12
14
  ];
15
+ /** What the CLI may change: campaigns and their drafts (touchpoints live there), publish and status, templates
16
+ * (each change a new version), template skills and books. Never sending or resolving anything, book runs,
17
+ * uploads, test ticks or enrollments, and no deletes: those act on real customers or cannot be undone. */
18
+ const WRITABLE = [
19
+ ['POST', /^\/campaigns$/],
20
+ ['PUT', /^\/campaigns\/[\w-]+\/draft$/],
21
+ ['POST', /^\/campaigns\/[\w-]+\/(publish|status)$/],
22
+ ['POST', /^\/templates$/],
23
+ ['POST', /^\/templates\/[\w-]+\/versions$/],
24
+ ['POST', /^\/template-skills$/],
25
+ ['PUT', /^\/template-skills\/[\w-]+$/],
26
+ ['POST', /^\/books$/],
27
+ ['PATCH', /^\/books\/[\w-]+\/source$/],
28
+ ['PUT', /^\/books\/[\w-]+\/(field-map|identity-keys|display)$/],
29
+ ];
30
+ // A template version is whole: a change starts from the latest version's content.
31
+ const TEMPLATE_CONTENT = ['subject', 'body', 'html', 'uses_variables', 'selection_tags', 'skills', 'batch_row'];
32
+ const given = (o) => Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined));
33
+ // Templates declare the variables they read as {key, required, example}; given as keys, a key the template already
34
+ // declares keeps its entry.
35
+ const declare = (keys, current = []) => keys?.map((key) => current.find((v) => v.key === key) ?? { key });
13
36
  /**
14
- * Campaigns, READ-ONLY by design, through copilot's proxy to the campaigns
15
- * service. The CLI never publishes a campaign, sends a communication or
16
- * triggers a book sync; those act on real customers.
37
+ * Campaigns through copilot's proxy to the campaigns service: reads, and
38
+ * writes to configuration only (WRITABLE). The CLI never sends a
39
+ * communication, runs a book sync or deletes; those act on real customers.
17
40
  */
18
41
  export class CampaignsSDK {
19
42
  client;
@@ -25,6 +48,11 @@ export class CampaignsSDK {
25
48
  throw new CliError(`Campaigns path ${path} is not readable from the CLI.`, EXIT.NEEDS_INPUT);
26
49
  return this.client.copilotGet(`/organization/:org_id/campaigns-service${path}`, query);
27
50
  }
51
+ async write(method, path, body) {
52
+ if (!WRITABLE.some(([m, r]) => m === method && r.test(path)))
53
+ throw new CliError(`Campaigns ${method} ${path} is not allowed from the CLI.`, EXIT.NEEDS_INPUT);
54
+ return this.client.copilotRequestRaw(method, `/organization/:org_id/campaigns-service${path}`, body);
55
+ }
28
56
  list(filter = {}) {
29
57
  const q = { limit: String(Math.min(filter.limit ?? 50, 500)), skip: String(filter.skip ?? 0) };
30
58
  if (filter.status)
@@ -55,5 +83,79 @@ export class CampaignsSDK {
55
83
  templateSkills(solutionId) {
56
84
  return this.read('/template-skills', solutionId ? { solution_id: solutionId } : undefined);
57
85
  }
86
+ templateSkill(id) {
87
+ return this.read(`/template-skills/${id}`);
88
+ }
89
+ books(filter = {}) {
90
+ const q = { limit: String(Math.min(filter.limit ?? 50, 200)) }; // the service allows 200
91
+ if (filter.solutionId)
92
+ q.solution_id = filter.solutionId;
93
+ return this.read('/books', q);
94
+ }
95
+ book(id) {
96
+ return this.read(`/books/${id}`);
97
+ }
98
+ createCampaign(input) {
99
+ return this.write('POST', '/campaigns', given(input));
100
+ }
101
+ /** Change parts of the draft; the rest of it (its touchpoints among it) stays as it is. */
102
+ async updateDraft(id, parts) {
103
+ const { draft } = await this.read(`/campaigns/${id}`);
104
+ return this.write('PUT', `/campaigns/${id}/draft`, { ...draft, ...given(parts) });
105
+ }
106
+ /** Add a touchpoint, or change the one with its key (only the fields given). A new one drafts unless told to
107
+ * send; a template given without a version is pinned to its latest. */
108
+ async setTouchpoint(id, touchpoint) {
109
+ const { draft } = await this.read(`/campaigns/${id}`);
110
+ const current = draft?.touchpoints ?? [];
111
+ const existing = current.find((t) => t.key === touchpoint.key);
112
+ const tp = { ...(existing ?? { terminal_action: 'draft' }), ...given(touchpoint), key: touchpoint.key };
113
+ if (typeof touchpoint.template_id === 'string' && touchpoint.template_version_n === undefined) {
114
+ tp.template_version_n = Number((await this.latestTemplateVersion(touchpoint.template_id))?.version_n ?? 1);
115
+ }
116
+ const touchpoints = existing ? current.map((t) => (t.key === tp.key ? tp : t)) : [...current, tp];
117
+ return this.write('PUT', `/campaigns/${id}/draft`, { ...draft, touchpoints });
118
+ }
119
+ publish(id, changeSummary) {
120
+ return this.write('POST', `/campaigns/${id}/publish`, { change_summary: changeSummary ?? '' });
121
+ }
122
+ setStatus(id, status) {
123
+ return this.write('POST', `/campaigns/${id}/status`, { status });
124
+ }
125
+ createTemplate(input) {
126
+ return this.write('POST', '/templates', given({ ...input, uses_variables: declare(input.uses_variables) }));
127
+ }
128
+ async latestTemplateVersion(id) {
129
+ return (await this.read(`/templates/${id}/versions`)).items?.[0]; // newest first
130
+ }
131
+ /** A new version of the template: its latest one with the changes given. */
132
+ async updateTemplate(id, changes) {
133
+ const latest = (await this.latestTemplateVersion(id)) ?? {};
134
+ const kept = Object.fromEntries(TEMPLATE_CONTENT.filter((k) => k in latest).map((k) => [k, latest[k]]));
135
+ return this.write('POST', `/templates/${id}/versions`, { ...kept, ...given({ ...changes, uses_variables: declare(changes.uses_variables, latest.uses_variables) }) });
136
+ }
137
+ createTemplateSkill(input) {
138
+ return this.write('POST', '/template-skills', input);
139
+ }
140
+ async updateTemplateSkill(id, changes) {
141
+ const skill = await this.templateSkill(id);
142
+ return this.write('PUT', `/template-skills/${id}`, { name: skill.name, instructions: skill.instructions, ...given(changes) });
143
+ }
144
+ createBook(input) {
145
+ return this.write('POST', '/books', given(input));
146
+ }
147
+ /** Change the parts of a book that are given, each its own call in the service. Keys are the book's schema
148
+ * keys; identity keys change only while the book has no records. */
149
+ async updateBook(id, changes) {
150
+ if (changes.source !== undefined)
151
+ await this.write('PATCH', `/books/${id}/source`, { source: changes.source });
152
+ if (changes.field_map !== undefined)
153
+ await this.write('PUT', `/books/${id}/field-map`, { field_map: changes.field_map });
154
+ if (changes.identity_keys !== undefined)
155
+ await this.write('PUT', `/books/${id}/identity-keys`, { identity_keys: changes.identity_keys });
156
+ if (changes.display !== undefined)
157
+ await this.write('PUT', `/books/${id}/display`, { display: changes.display });
158
+ return this.book(id);
159
+ }
58
160
  }
59
161
  //# sourceMappingURL=campaigns.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"campaigns.js","sourceRoot":"","sources":["../../src/sdk/campaigns.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAEpD,qGAAqG;AACrG,MAAM,QAAQ,GAAG;IACf,eAAe;IACf,uBAAuB;IACvB,oEAAoE;IACpE,eAAe;IACf,uBAAuB;IACvB,iCAAiC;IACjC,qBAAqB;IACrB,6BAA6B;CAC9B,CAAC;AAEF;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACH;IAApB,YAAoB,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAEpC,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,KAA8B;QAChE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,IAAI,gCAAgC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACtI,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAI,0CAA0C,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI,CAAC,SAAkF,EAAE;QACvF,MAAM,CAAC,GAA2B,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;QACvH,IAAI,MAAM,CAAC,MAAM;YAAE,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5C,IAAI,MAAM,CAAC,UAAU;YAAE,CAAC,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QACzD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,2FAA2F;IAC3F,MAAM,CAAC,EAAU,EAAE,IAA6D,EAAE,IAAa;QAC7F,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1F,CAAC;IAED,SAAS,CAAC,SAAoE,EAAE;QAC9E,MAAM,CAAC,GAA2B,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QACvF,IAAI,MAAM,CAAC,OAAO;YAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/C,IAAI,MAAM,CAAC,UAAU;YAAE,CAAC,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QACzD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,mFAAmF;IACnF,QAAQ,CAAC,EAAU,EAAE,QAAQ,GAAG,KAAK;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,cAAc,CAAC,UAAmB;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7F,CAAC;CACF"}
1
+ {"version":3,"file":"campaigns.js","sourceRoot":"","sources":["../../src/sdk/campaigns.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,15 @@
1
1
  import { IndemnClient } from './client.js';
2
2
  import type { Channel, OrgMember, OrgSummary } from './types.js';
3
+ /** The roles the dashboard's Invite user page offers. copilot saves any role it is sent, so never owner here. */
4
+ export declare const INVITE_ROLES: readonly ["admin", "agent", "member"];
5
+ export type InviteRole = (typeof INVITE_ROLES)[number];
6
+ export interface InviteResult {
7
+ email: string;
8
+ role: InviteRole;
9
+ /** invited: no Indemn account yet, a sign-up email went out; added: an existing account joined now. The others changed nothing. */
10
+ outcome: 'invited' | 'added' | 'already_invited' | 'already_member';
11
+ message: string;
12
+ }
3
13
  export interface SandboxOrg {
4
14
  organization_id: string;
5
15
  name: string;
@@ -14,6 +24,12 @@ export declare class OrgsSDK {
14
24
  listOrganizations(): Promise<OrgSummary[]>;
15
25
  /** People with owner, admin or agent roles in the org, one row per person. */
16
26
  listMembers(): Promise<OrgMember[]>;
27
+ /**
28
+ * Invite someone to the org's project, as the dashboard's Invite user page does (copilot allows owners and
29
+ * admins only). A new email gets a sign-up invitation; an existing Indemn account is added at once and told
30
+ * by email. Already invited or already a member: nothing is sent, and the result says so.
31
+ */
32
+ inviteMember(projectId: string, email: string, role: InviteRole): Promise<InviteResult>;
17
33
  /**
18
34
  * A sandbox organization for a prospect. Only the Indemn support account may create one (copilot
19
35
  * refuses anyone else), and copilot always puts it on the sandbox plan set for the platform.
@@ -1 +1 @@
1
- {"version":3,"file":"orgs.d.ts","sourceRoot":"","sources":["../../src/sdk/orgs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AASjE,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,OAAO;IACN,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAExC,+FAA+F;IACzF,iBAAiB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAIhD,8EAA8E;IACxE,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAkCzC;;;OAGG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAetD,+DAA+D;IACzD,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;CAIzC"}
1
+ {"version":3,"file":"orgs.d.ts","sourceRoot":"","sources":["../../src/sdk/orgs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AASjE,iHAAiH;AACjH,eAAO,MAAM,YAAY,uCAAwC,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,mIAAmI;IACnI,OAAO,EAAE,SAAS,GAAG,OAAO,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;IACpE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,OAAO;IACN,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAExC,+FAA+F;IACzF,iBAAiB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAIhD,8EAA8E;IACxE,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAkCzC;;;;OAIG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAoB7F;;;OAGG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAetD,+DAA+D;IACzD,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;CAIzC"}
package/dist/sdk/orgs.js CHANGED
@@ -1,3 +1,5 @@
1
+ /** The roles the dashboard's Invite user page offers. copilot saves any role it is sent, so never owner here. */
2
+ export const INVITE_ROLES = ['admin', 'agent', 'member'];
1
3
  export class OrgsSDK {
2
4
  client;
3
5
  constructor(client) {
@@ -45,6 +47,34 @@ export class OrgsSDK {
45
47
  }
46
48
  return [...byUser.values()];
47
49
  }
50
+ /**
51
+ * Invite someone to the org's project, as the dashboard's Invite user page does (copilot allows owners and
52
+ * admins only). A new email gets a sign-up invitation; an existing Indemn account is added at once and told
53
+ * by email. Already invited or already a member: nothing is sent, and the result says so.
54
+ */
55
+ async inviteMember(projectId, email, role) {
56
+ const address = email.trim().toLowerCase();
57
+ const result = (outcome, message) => ({ email: address, role, outcome, message });
58
+ try {
59
+ const res = await this.client.copilotPost(`/${projectId}/project_users/invite`, {
60
+ email: address, role, user_available: false, id_organization: await this.client.currentOrgId(),
61
+ });
62
+ return res?.pendingInvitation
63
+ ? result('invited', `Invitation sent to ${address}. They join as ${role} once they sign up from the email.`)
64
+ : result('added', `${address} already had an Indemn account and is now in the organization as ${role}. They were told by email.`);
65
+ }
66
+ catch (err) {
67
+ // copilot answers these with 200 {success:false} and 500/403 with a code; the dashboard shows them as messages.
68
+ const message = err instanceof Error ? err.message : String(err);
69
+ if (/Pending Invitation already exist/i.test(message))
70
+ return result('already_invited', `${address} already has a pending invitation. Nothing was sent again.`);
71
+ if (/already a member/i.test(message))
72
+ return result('already_member', `${address} is already a member of the organization. Nothing was changed.`);
73
+ if (/invite oneself/i.test(message))
74
+ throw new Error('You can\'t invite yourself. Nothing was sent.');
75
+ throw err;
76
+ }
77
+ }
48
78
  /**
49
79
  * A sandbox organization for a prospect. Only the Indemn support account may create one (copilot
50
80
  * refuses anyone else), and copilot always puts it on the sandbox plan set for the platform.
@@ -1 +1 @@
1
- {"version":3,"file":"orgs.js","sourceRoot":"","sources":["../../src/sdk/orgs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orgs.js","sourceRoot":"","sources":["../../src/sdk/orgs.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indemn/cli",
3
- "version": "1.7.8",
3
+ "version": "1.7.10",
4
4
  "description": "CLI, MCP server, and plugin for managing Indemn AI agents",
5
5
  "type": "module",
6
6
  "main": "./dist/sdk/index.js",
@@ -29,6 +29,17 @@ const write = (title: string, extra: Partial<ToolAnnotations> = {}): ToolMeta =>
29
29
  annotations: { title, readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false, ...extra },
30
30
  });
31
31
 
32
+ /** The parts a call changes, in words: "audience, channel policy". */
33
+ const parts = (a: Record<string, unknown>, keys: string[]) => keys.filter((k) => a[k] !== undefined && a[k] !== '').map((k) => k.replace(/_/g, ' ')).join(', ');
34
+
35
+ /** A book change with its new values, so the person sees what they approve: "field map to Company → account.name". */
36
+ const bookChanges = (a: Record<string, any>) => [
37
+ a.source !== undefined && `source to ${a.source?.kind ?? JSON.stringify(a.source)}`,
38
+ Array.isArray(a.field_map) && `field map to ${a.field_map.map((m: { source_path?: string; schema_key?: string }) => `${m.source_path} → ${m.schema_key}`).join(', ')}`,
39
+ Array.isArray(a.identity_keys) && `identity keys to ${a.identity_keys.join(', ')}`,
40
+ a.display && `display to ${['primary', 'secondary'].filter((k) => Array.isArray(a.display[k])).map((k) => `${k} ${a.display[k].join(', ')}`).join('; ')}`,
41
+ ].filter(Boolean).join('; ');
42
+
32
43
  /** Overwrites or removes something that cannot be restored from the tool itself. */
33
44
  const destroy = (title: string, extra: Partial<ToolAnnotations> = {}): ToolMeta => ({
34
45
  title,
@@ -46,6 +57,11 @@ export const TOOL_META: Record<string, ToolMeta> = {
46
57
  describe: (a) => `This will create a new organization "${a.name}" on the sandbox plan (its trial, then the plan's monthly price, invoiced to the support account).`,
47
58
  },
48
59
  list_org_members: { ...read('List organization members'), paginate: true },
60
+ invite_org_member: {
61
+ ...write('Invite organization member'),
62
+ guard: true,
63
+ describe: (a) => `This will invite ${a.email} to the organization as ${({ admin: 'Administrator', agent: 'Agent', member: 'Member' } as Record<string, string>)[String(a.role)] ?? a.role}. Without an Indemn account they get an email to sign up; with one they join at once.`,
64
+ },
49
65
  list_channels: read('List channels'),
50
66
 
51
67
  // Agents
@@ -217,8 +233,44 @@ export const TOOL_META: Record<string, ToolMeta> = {
217
233
  // Billing (read-only)
218
234
  get_billing: read('Billing status, invoices, usage or plans'),
219
235
 
220
- // Campaigns (read-only)
221
- get_campaigns: read('Read campaigns and templates'),
236
+ // Campaigns: each change is approved on a card; nothing here sends a message, and nothing deletes.
237
+ get_campaigns: read('Read campaigns, templates and books'),
238
+ save_campaign: {
239
+ ...write('Create or change campaign'), guard: true,
240
+ describe: (a) => a.campaign_id
241
+ ? `This will change the ${parts(a, ['audience', 'escalation_policy', 'channel_policy'])} in the draft of campaign ${a.campaign_id} (it takes effect when the campaign is published).`
242
+ : `This will create campaign "${a.name}" as a draft; it sends nothing until it is published and started.`,
243
+ },
244
+ set_touchpoint: {
245
+ ...write('Add or change touchpoint', { idempotentHint: true }), guard: true,
246
+ describe: (a) => `This will add or change touchpoint "${a.key}" in the draft of campaign ${a.campaign_id}${a.channel ? ` (${a.channel})` : ''}${a.terminal_action === 'send' ? '. It is set to SEND to customers directly once the campaign is published and running' : ''}.`,
247
+ },
248
+ publish_campaign: { ...write('Publish campaign'), guard: true, describe: (a) => `This will publish the draft of campaign ${a.campaign_id} as its next version; if it is running, it uses it from its next run.` },
249
+ set_campaign_status: {
250
+ ...write('Start, pause or archive campaign'), guard: true,
251
+ describe: (a) => a.status === 'running'
252
+ ? `This will START campaign ${a.campaign_id}: it enrols the matching records of its book and runs its touchpoints (touchpoints set to send reach real customers).`
253
+ : a.status === 'archived' ? `This will archive campaign ${a.campaign_id} for good: it cannot be started again.`
254
+ : `This will pause campaign ${a.campaign_id}: its touchpoints stop until it is started again.`,
255
+ },
256
+ save_campaign_template: {
257
+ ...write('Create or change campaign template'), guard: true,
258
+ describe: (a) => a.template_id
259
+ ? `This will save a new version of template ${a.template_id} (${parts(a, ['subject', 'body', 'html', 'uses_variables', 'skills', 'selection_tags'])}); touchpoints keep the version they are set to until it is set again.`
260
+ : `This will create ${a.channel} template "${a.name}".`,
261
+ },
262
+ save_template_skill: {
263
+ ...write('Create or change template skill'), guard: true,
264
+ describe: (a) => a.template_skill_id
265
+ ? `This will change template skill ${a.template_skill_id} (${parts(a, ['name', 'instructions'])}); templates using it write with it from their campaigns' next run.`
266
+ : `This will create template skill "${a.name}".`,
267
+ },
268
+ save_book: {
269
+ ...write('Create or change book'), guard: true,
270
+ describe: (a) => a.book_id
271
+ ? `This will change book ${a.book_id}: ${bookChanges(a)}.`
272
+ : `This will create book "${a.name}" for this solution.`,
273
+ },
222
274
 
223
275
  // V2 platform and Jarvis (Darwin)
224
276
  platform_list: read('List V2 platform items'),