@kyoji2/intercom-cli 0.1.0 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -0
- package/dist/index.js +21575 -20702
- package/package.json +7 -3
- package/src/cli/registry.ts +916 -0
- package/src/client.ts +2 -0
- package/src/commands/admins.ts +2 -2
- package/src/commands/articles.ts +8 -8
- package/src/commands/auth.ts +3 -3
- package/src/commands/companies.ts +6 -6
- package/src/commands/contacts.ts +13 -13
- package/src/commands/conversations.ts +65 -10
- package/src/commands/events.ts +4 -4
- package/src/commands/index.ts +24 -10
- package/src/commands/overview.ts +1 -1
- package/src/commands/tags.ts +6 -6
- package/src/commands/ticketTypes.ts +76 -0
- package/src/commands/tickets.ts +398 -0
- package/src/index.ts +19 -623
- package/src/utils/config.ts +31 -24
- package/src/utils/index.ts +1 -0
- package/src/utils/output.ts +1 -0
package/src/client.ts
CHANGED
package/src/commands/admins.ts
CHANGED
|
@@ -7,7 +7,7 @@ export interface AdminGetOptions extends GlobalOptions {
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
export async function cmdAdminList(options: GlobalOptions): Promise<void> {
|
|
10
|
-
const token = await getTokenAsync();
|
|
10
|
+
const token = await getTokenAsync(options.configDir);
|
|
11
11
|
if (!token) {
|
|
12
12
|
throw new CLIError("Not logged in", 401, "Run 'intercom login' to authenticate.");
|
|
13
13
|
}
|
|
@@ -40,7 +40,7 @@ export async function cmdAdminList(options: GlobalOptions): Promise<void> {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
export async function cmdAdminGet(options: AdminGetOptions): Promise<void> {
|
|
43
|
-
const token = await getTokenAsync();
|
|
43
|
+
const token = await getTokenAsync(options.configDir);
|
|
44
44
|
if (!token) {
|
|
45
45
|
throw new CLIError("Not logged in", 401, "Run 'intercom login' to authenticate.");
|
|
46
46
|
}
|
package/src/commands/articles.ts
CHANGED
|
@@ -34,8 +34,8 @@ export interface ArticleDeleteOptions extends GlobalOptions {
|
|
|
34
34
|
id: string;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
async function requireToken(): Promise<string> {
|
|
38
|
-
const token = await getTokenAsync();
|
|
37
|
+
async function requireToken(configDir: string): Promise<string> {
|
|
38
|
+
const token = await getTokenAsync(configDir);
|
|
39
39
|
if (!token) {
|
|
40
40
|
throw new CLIError("Not logged in", 401, "Run 'intercom login' to authenticate.");
|
|
41
41
|
}
|
|
@@ -43,7 +43,7 @@ async function requireToken(): Promise<string> {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
export async function cmdArticleList(options: ArticleListOptions): Promise<void> {
|
|
46
|
-
const token = await requireToken();
|
|
46
|
+
const token = await requireToken(options.configDir);
|
|
47
47
|
const spinner = ora("Listing articles...").start();
|
|
48
48
|
|
|
49
49
|
try {
|
|
@@ -76,7 +76,7 @@ export async function cmdArticleList(options: ArticleListOptions): Promise<void>
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
export async function cmdArticleGet(options: ArticleGetOptions): Promise<void> {
|
|
79
|
-
const token = await requireToken();
|
|
79
|
+
const token = await requireToken(options.configDir);
|
|
80
80
|
const spinner = ora("Fetching article...").start();
|
|
81
81
|
|
|
82
82
|
try {
|
|
@@ -109,7 +109,7 @@ export async function cmdArticleGet(options: ArticleGetOptions): Promise<void> {
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
export async function cmdArticleSearch(options: ArticleSearchOptions): Promise<void> {
|
|
112
|
-
const token = await requireToken();
|
|
112
|
+
const token = await requireToken(options.configDir);
|
|
113
113
|
const spinner = ora("Searching articles...").start();
|
|
114
114
|
|
|
115
115
|
try {
|
|
@@ -146,7 +146,7 @@ export async function cmdArticleSearch(options: ArticleSearchOptions): Promise<v
|
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
export async function cmdArticleCreate(options: ArticleCreateOptions): Promise<void> {
|
|
149
|
-
const token = await requireToken();
|
|
149
|
+
const token = await requireToken(options.configDir);
|
|
150
150
|
const spinner = ora("Creating article...").start();
|
|
151
151
|
|
|
152
152
|
try {
|
|
@@ -184,7 +184,7 @@ export async function cmdArticleCreate(options: ArticleCreateOptions): Promise<v
|
|
|
184
184
|
}
|
|
185
185
|
|
|
186
186
|
export async function cmdArticleUpdate(options: ArticleUpdateOptions): Promise<void> {
|
|
187
|
-
const token = await requireToken();
|
|
187
|
+
const token = await requireToken(options.configDir);
|
|
188
188
|
const spinner = ora("Updating article...").start();
|
|
189
189
|
|
|
190
190
|
try {
|
|
@@ -212,7 +212,7 @@ export async function cmdArticleUpdate(options: ArticleUpdateOptions): Promise<v
|
|
|
212
212
|
}
|
|
213
213
|
|
|
214
214
|
export async function cmdArticleDelete(options: ArticleDeleteOptions): Promise<void> {
|
|
215
|
-
const token = await requireToken();
|
|
215
|
+
const token = await requireToken(options.configDir);
|
|
216
216
|
const spinner = ora("Deleting article...").start();
|
|
217
217
|
|
|
218
218
|
try {
|
package/src/commands/auth.ts
CHANGED
|
@@ -43,7 +43,7 @@ export async function cmdLogin(options: LoginOptions): Promise<void> {
|
|
|
43
43
|
throw new CLIError("Could not verify token", 401, "The token may be invalid or expired.");
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
await saveConfig({ token });
|
|
46
|
+
await saveConfig(options.configDir, { token });
|
|
47
47
|
spinner.succeed("Logged in successfully");
|
|
48
48
|
|
|
49
49
|
output(
|
|
@@ -65,12 +65,12 @@ export async function cmdLogin(options: LoginOptions): Promise<void> {
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
export async function cmdLogout(options: GlobalOptions): Promise<void> {
|
|
68
|
-
await deleteConfig();
|
|
68
|
+
await deleteConfig(options.configDir);
|
|
69
69
|
output({ status: "success", message: "Logged out successfully" }, options.format);
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
export async function cmdWhoami(options: GlobalOptions): Promise<void> {
|
|
73
|
-
const token = await getTokenAsync();
|
|
73
|
+
const token = await getTokenAsync(options.configDir);
|
|
74
74
|
if (!token) {
|
|
75
75
|
throw new CLIError("Not logged in", 401, "Run 'intercom login' to authenticate.");
|
|
76
76
|
}
|
|
@@ -24,8 +24,8 @@ export interface CompanyUpdateOptions extends GlobalOptions {
|
|
|
24
24
|
json: string;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
async function requireToken(): Promise<string> {
|
|
28
|
-
const token = await getTokenAsync();
|
|
27
|
+
async function requireToken(configDir: string): Promise<string> {
|
|
28
|
+
const token = await getTokenAsync(configDir);
|
|
29
29
|
if (!token) {
|
|
30
30
|
throw new CLIError("Not logged in", 401, "Run 'intercom login' to authenticate.");
|
|
31
31
|
}
|
|
@@ -33,7 +33,7 @@ async function requireToken(): Promise<string> {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
export async function cmdCompanyCreate(options: CompanyCreateOptions): Promise<void> {
|
|
36
|
-
const token = await requireToken();
|
|
36
|
+
const token = await requireToken(options.configDir);
|
|
37
37
|
const spinner = ora("Creating company...").start();
|
|
38
38
|
|
|
39
39
|
try {
|
|
@@ -78,7 +78,7 @@ export async function cmdCompanyCreate(options: CompanyCreateOptions): Promise<v
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
export async function cmdCompanyGet(options: CompanyGetOptions): Promise<void> {
|
|
81
|
-
const token = await requireToken();
|
|
81
|
+
const token = await requireToken(options.configDir);
|
|
82
82
|
const spinner = ora("Fetching company...").start();
|
|
83
83
|
|
|
84
84
|
try {
|
|
@@ -114,7 +114,7 @@ export async function cmdCompanyGet(options: CompanyGetOptions): Promise<void> {
|
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
export async function cmdCompanyList(options: CompanyListOptions): Promise<void> {
|
|
117
|
-
const token = await requireToken();
|
|
117
|
+
const token = await requireToken(options.configDir);
|
|
118
118
|
const spinner = ora("Listing companies...").start();
|
|
119
119
|
|
|
120
120
|
try {
|
|
@@ -147,7 +147,7 @@ export async function cmdCompanyList(options: CompanyListOptions): Promise<void>
|
|
|
147
147
|
}
|
|
148
148
|
|
|
149
149
|
export async function cmdCompanyUpdate(options: CompanyUpdateOptions): Promise<void> {
|
|
150
|
-
const token = await requireToken();
|
|
150
|
+
const token = await requireToken(options.configDir);
|
|
151
151
|
const spinner = ora("Updating company...").start();
|
|
152
152
|
|
|
153
153
|
try {
|
package/src/commands/contacts.ts
CHANGED
|
@@ -55,8 +55,8 @@ export interface ContactAttachCompanyOptions extends GlobalOptions {
|
|
|
55
55
|
companyId: string;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
async function requireToken(): Promise<string> {
|
|
59
|
-
const token = await getTokenAsync();
|
|
58
|
+
async function requireToken(configDir: string): Promise<string> {
|
|
59
|
+
const token = await getTokenAsync(configDir);
|
|
60
60
|
if (!token) {
|
|
61
61
|
throw new CLIError("Not logged in", 401, "Run 'intercom login' to authenticate.");
|
|
62
62
|
}
|
|
@@ -64,7 +64,7 @@ async function requireToken(): Promise<string> {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
export async function cmdContactCreate(options: ContactCreateOptions): Promise<void> {
|
|
67
|
-
const token = await requireToken();
|
|
67
|
+
const token = await requireToken(options.configDir);
|
|
68
68
|
const spinner = ora("Creating contact...").start();
|
|
69
69
|
|
|
70
70
|
try {
|
|
@@ -105,7 +105,7 @@ export async function cmdContactCreate(options: ContactCreateOptions): Promise<v
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
export async function cmdContactGet(options: ContactGetOptions): Promise<void> {
|
|
108
|
-
const token = await requireToken();
|
|
108
|
+
const token = await requireToken(options.configDir);
|
|
109
109
|
const spinner = ora("Fetching contact...").start();
|
|
110
110
|
|
|
111
111
|
try {
|
|
@@ -141,7 +141,7 @@ export async function cmdContactGet(options: ContactGetOptions): Promise<void> {
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
export async function cmdContactUpdate(options: ContactUpdateOptions): Promise<void> {
|
|
144
|
-
const token = await requireToken();
|
|
144
|
+
const token = await requireToken(options.configDir);
|
|
145
145
|
const spinner = ora("Updating contact...").start();
|
|
146
146
|
|
|
147
147
|
try {
|
|
@@ -179,7 +179,7 @@ export async function cmdContactUpdate(options: ContactUpdateOptions): Promise<v
|
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
export async function cmdContactDelete(options: ContactDeleteOptions): Promise<void> {
|
|
182
|
-
const token = await requireToken();
|
|
182
|
+
const token = await requireToken(options.configDir);
|
|
183
183
|
const spinner = ora("Deleting contact...").start();
|
|
184
184
|
|
|
185
185
|
try {
|
|
@@ -196,7 +196,7 @@ export async function cmdContactDelete(options: ContactDeleteOptions): Promise<v
|
|
|
196
196
|
}
|
|
197
197
|
|
|
198
198
|
export async function cmdContactSearch(options: ContactSearchOptions): Promise<void> {
|
|
199
|
-
const token = await requireToken();
|
|
199
|
+
const token = await requireToken(options.configDir);
|
|
200
200
|
const spinner = ora("Searching contacts...").start();
|
|
201
201
|
|
|
202
202
|
try {
|
|
@@ -246,7 +246,7 @@ export async function cmdContactSearch(options: ContactSearchOptions): Promise<v
|
|
|
246
246
|
}
|
|
247
247
|
|
|
248
248
|
export async function cmdContactList(options: ContactListOptions): Promise<void> {
|
|
249
|
-
const token = await requireToken();
|
|
249
|
+
const token = await requireToken(options.configDir);
|
|
250
250
|
const spinner = ora("Listing contacts...").start();
|
|
251
251
|
|
|
252
252
|
try {
|
|
@@ -277,7 +277,7 @@ export async function cmdContactList(options: ContactListOptions): Promise<void>
|
|
|
277
277
|
}
|
|
278
278
|
|
|
279
279
|
export async function cmdContactNote(options: ContactNoteOptions): Promise<void> {
|
|
280
|
-
const token = await requireToken();
|
|
280
|
+
const token = await requireToken(options.configDir);
|
|
281
281
|
const spinner = ora("Adding note...").start();
|
|
282
282
|
|
|
283
283
|
try {
|
|
@@ -305,7 +305,7 @@ export async function cmdContactNote(options: ContactNoteOptions): Promise<void>
|
|
|
305
305
|
}
|
|
306
306
|
|
|
307
307
|
export async function cmdContactNotes(options: ContactNotesListOptions): Promise<void> {
|
|
308
|
-
const token = await requireToken();
|
|
308
|
+
const token = await requireToken(options.configDir);
|
|
309
309
|
const spinner = ora("Fetching notes...").start();
|
|
310
310
|
|
|
311
311
|
try {
|
|
@@ -332,7 +332,7 @@ export async function cmdContactNotes(options: ContactNotesListOptions): Promise
|
|
|
332
332
|
}
|
|
333
333
|
|
|
334
334
|
export async function cmdContactTag(options: ContactTagOptions): Promise<void> {
|
|
335
|
-
const token = await requireToken();
|
|
335
|
+
const token = await requireToken(options.configDir);
|
|
336
336
|
const spinner = ora("Tagging contact...").start();
|
|
337
337
|
|
|
338
338
|
try {
|
|
@@ -358,7 +358,7 @@ export async function cmdContactTag(options: ContactTagOptions): Promise<void> {
|
|
|
358
358
|
}
|
|
359
359
|
|
|
360
360
|
export async function cmdContactUntag(options: ContactTagOptions): Promise<void> {
|
|
361
|
-
const token = await requireToken();
|
|
361
|
+
const token = await requireToken(options.configDir);
|
|
362
362
|
const spinner = ora("Removing tag...").start();
|
|
363
363
|
|
|
364
364
|
try {
|
|
@@ -384,7 +384,7 @@ export async function cmdContactUntag(options: ContactTagOptions): Promise<void>
|
|
|
384
384
|
}
|
|
385
385
|
|
|
386
386
|
export async function cmdContactAttachCompany(options: ContactAttachCompanyOptions): Promise<void> {
|
|
387
|
-
const token = await requireToken();
|
|
387
|
+
const token = await requireToken(options.configDir);
|
|
388
388
|
const spinner = ora("Attaching company...").start();
|
|
389
389
|
|
|
390
390
|
try {
|
|
@@ -46,8 +46,16 @@ export interface ConversationSnoozeOptions extends GlobalOptions {
|
|
|
46
46
|
until: string;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
export interface ConversationConvertOptions extends GlobalOptions {
|
|
50
|
+
id: string;
|
|
51
|
+
ticketTypeId: string;
|
|
52
|
+
title?: string;
|
|
53
|
+
description?: string;
|
|
54
|
+
json?: string;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async function requireToken(configDir: string): Promise<string> {
|
|
58
|
+
const token = await getTokenAsync(configDir);
|
|
51
59
|
if (!token) {
|
|
52
60
|
throw new CLIError("Not logged in", 401, "Run 'intercom login' to authenticate.");
|
|
53
61
|
}
|
|
@@ -55,7 +63,7 @@ async function requireToken(): Promise<string> {
|
|
|
55
63
|
}
|
|
56
64
|
|
|
57
65
|
export async function cmdConversationList(options: ConversationListOptions): Promise<void> {
|
|
58
|
-
const token = await requireToken();
|
|
66
|
+
const token = await requireToken(options.configDir);
|
|
59
67
|
const spinner = ora("Listing conversations...").start();
|
|
60
68
|
|
|
61
69
|
try {
|
|
@@ -91,7 +99,7 @@ export async function cmdConversationList(options: ConversationListOptions): Pro
|
|
|
91
99
|
}
|
|
92
100
|
|
|
93
101
|
export async function cmdConversationGet(options: ConversationGetOptions): Promise<void> {
|
|
94
|
-
const token = await requireToken();
|
|
102
|
+
const token = await requireToken(options.configDir);
|
|
95
103
|
const spinner = ora("Fetching conversation...").start();
|
|
96
104
|
|
|
97
105
|
try {
|
|
@@ -132,7 +140,7 @@ export async function cmdConversationGet(options: ConversationGetOptions): Promi
|
|
|
132
140
|
}
|
|
133
141
|
|
|
134
142
|
export async function cmdConversationSearch(options: ConversationSearchOptions): Promise<void> {
|
|
135
|
-
const token = await requireToken();
|
|
143
|
+
const token = await requireToken(options.configDir);
|
|
136
144
|
const spinner = ora("Searching conversations...").start();
|
|
137
145
|
|
|
138
146
|
try {
|
|
@@ -192,7 +200,7 @@ export async function cmdConversationSearch(options: ConversationSearchOptions):
|
|
|
192
200
|
}
|
|
193
201
|
|
|
194
202
|
export async function cmdConversationReply(options: ConversationReplyOptions): Promise<void> {
|
|
195
|
-
const token = await requireToken();
|
|
203
|
+
const token = await requireToken(options.configDir);
|
|
196
204
|
const spinner = ora("Sending reply...").start();
|
|
197
205
|
|
|
198
206
|
try {
|
|
@@ -225,7 +233,7 @@ export async function cmdConversationReply(options: ConversationReplyOptions): P
|
|
|
225
233
|
}
|
|
226
234
|
|
|
227
235
|
export async function cmdConversationAssign(options: ConversationAssignOptions): Promise<void> {
|
|
228
|
-
const token = await requireToken();
|
|
236
|
+
const token = await requireToken(options.configDir);
|
|
229
237
|
const spinner = ora("Assigning conversation...").start();
|
|
230
238
|
|
|
231
239
|
try {
|
|
@@ -257,7 +265,7 @@ export async function cmdConversationAssign(options: ConversationAssignOptions):
|
|
|
257
265
|
}
|
|
258
266
|
|
|
259
267
|
export async function cmdConversationClose(options: ConversationCloseOptions): Promise<void> {
|
|
260
|
-
const token = await requireToken();
|
|
268
|
+
const token = await requireToken(options.configDir);
|
|
261
269
|
const spinner = ora("Closing conversation...").start();
|
|
262
270
|
|
|
263
271
|
try {
|
|
@@ -288,7 +296,7 @@ export async function cmdConversationClose(options: ConversationCloseOptions): P
|
|
|
288
296
|
}
|
|
289
297
|
|
|
290
298
|
export async function cmdConversationOpen(options: ConversationOpenOptions): Promise<void> {
|
|
291
|
-
const token = await requireToken();
|
|
299
|
+
const token = await requireToken(options.configDir);
|
|
292
300
|
const spinner = ora("Opening conversation...").start();
|
|
293
301
|
|
|
294
302
|
try {
|
|
@@ -318,7 +326,7 @@ export async function cmdConversationOpen(options: ConversationOpenOptions): Pro
|
|
|
318
326
|
}
|
|
319
327
|
|
|
320
328
|
export async function cmdConversationSnooze(options: ConversationSnoozeOptions): Promise<void> {
|
|
321
|
-
const token = await requireToken();
|
|
329
|
+
const token = await requireToken(options.configDir);
|
|
322
330
|
const spinner = ora("Snoozing conversation...").start();
|
|
323
331
|
|
|
324
332
|
try {
|
|
@@ -348,3 +356,50 @@ export async function cmdConversationSnooze(options: ConversationSnoozeOptions):
|
|
|
348
356
|
handleIntercomError(error);
|
|
349
357
|
}
|
|
350
358
|
}
|
|
359
|
+
|
|
360
|
+
export async function cmdConversationConvert(options: ConversationConvertOptions): Promise<void> {
|
|
361
|
+
const token = await requireToken(options.configDir);
|
|
362
|
+
const spinner = ora("Converting conversation to ticket...").start();
|
|
363
|
+
|
|
364
|
+
try {
|
|
365
|
+
const client = createClient({ token, dryRun: options.dryRun });
|
|
366
|
+
|
|
367
|
+
let attributes: Record<string, unknown> | undefined;
|
|
368
|
+
if (options.json) {
|
|
369
|
+
attributes = JSON.parse(options.json);
|
|
370
|
+
} else if (options.title || options.description) {
|
|
371
|
+
attributes = {};
|
|
372
|
+
if (options.title) {
|
|
373
|
+
attributes._default_title_ = options.title;
|
|
374
|
+
}
|
|
375
|
+
if (options.description) {
|
|
376
|
+
attributes._default_description_ = options.description;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
const ticket = await client.conversations.convertToTicket({
|
|
381
|
+
conversation_id: Number.parseInt(options.id, 10),
|
|
382
|
+
ticket_type_id: options.ticketTypeId,
|
|
383
|
+
attributes,
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
spinner.succeed("Conversation converted to ticket");
|
|
387
|
+
|
|
388
|
+
output(
|
|
389
|
+
{
|
|
390
|
+
id: ticket?.id,
|
|
391
|
+
ticket_id: ticket?.ticket_id,
|
|
392
|
+
category: ticket?.category,
|
|
393
|
+
ticket_type: ticket?.ticket_type,
|
|
394
|
+
ticket_state: ticket?.ticket_state,
|
|
395
|
+
ticket_attributes: ticket?.ticket_attributes,
|
|
396
|
+
open: ticket?.open,
|
|
397
|
+
created_at: ticket?.created_at,
|
|
398
|
+
},
|
|
399
|
+
options.format,
|
|
400
|
+
);
|
|
401
|
+
} catch (error) {
|
|
402
|
+
spinner.fail("Failed to convert conversation to ticket");
|
|
403
|
+
handleIntercomError(error);
|
|
404
|
+
}
|
|
405
|
+
}
|
package/src/commands/events.ts
CHANGED
|
@@ -13,8 +13,8 @@ export interface EventListOptions extends GlobalOptions {
|
|
|
13
13
|
userId: string;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
async function requireToken(): Promise<string> {
|
|
17
|
-
const token = await getTokenAsync();
|
|
16
|
+
async function requireToken(configDir: string): Promise<string> {
|
|
17
|
+
const token = await getTokenAsync(configDir);
|
|
18
18
|
if (!token) {
|
|
19
19
|
throw new CLIError("Not logged in", 401, "Run 'intercom login' to authenticate.");
|
|
20
20
|
}
|
|
@@ -22,7 +22,7 @@ async function requireToken(): Promise<string> {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
export async function cmdEventTrack(options: EventTrackOptions): Promise<void> {
|
|
25
|
-
const token = await requireToken();
|
|
25
|
+
const token = await requireToken(options.configDir);
|
|
26
26
|
const spinner = ora("Tracking event...").start();
|
|
27
27
|
|
|
28
28
|
try {
|
|
@@ -61,7 +61,7 @@ export async function cmdEventTrack(options: EventTrackOptions): Promise<void> {
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
export async function cmdEventList(options: EventListOptions): Promise<void> {
|
|
64
|
-
const token = await requireToken();
|
|
64
|
+
const token = await requireToken(options.configDir);
|
|
65
65
|
const spinner = ora("Fetching events...").start();
|
|
66
66
|
|
|
67
67
|
try {
|
package/src/commands/index.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
// Auth commands
|
|
2
|
-
|
|
3
1
|
export type { AdminGetOptions } from "./admins.ts";
|
|
4
|
-
// Admin commands
|
|
5
2
|
export { cmdAdminGet, cmdAdminList } from "./admins.ts";
|
|
6
3
|
export type {
|
|
7
4
|
ArticleCreateOptions,
|
|
@@ -11,7 +8,6 @@ export type {
|
|
|
11
8
|
ArticleSearchOptions,
|
|
12
9
|
ArticleUpdateOptions,
|
|
13
10
|
} from "./articles.ts";
|
|
14
|
-
// Article commands
|
|
15
11
|
export {
|
|
16
12
|
cmdArticleCreate,
|
|
17
13
|
cmdArticleDelete,
|
|
@@ -23,7 +19,6 @@ export {
|
|
|
23
19
|
export type { LoginOptions } from "./auth.ts";
|
|
24
20
|
export { cmdLogin, cmdLogout, cmdWhoami } from "./auth.ts";
|
|
25
21
|
export type { CompanyCreateOptions, CompanyGetOptions, CompanyListOptions, CompanyUpdateOptions } from "./companies.ts";
|
|
26
|
-
// Company commands
|
|
27
22
|
export { cmdCompanyCreate, cmdCompanyGet, cmdCompanyList, cmdCompanyUpdate } from "./companies.ts";
|
|
28
23
|
export type {
|
|
29
24
|
ContactAttachCompanyOptions,
|
|
@@ -37,7 +32,6 @@ export type {
|
|
|
37
32
|
ContactTagOptions,
|
|
38
33
|
ContactUpdateOptions,
|
|
39
34
|
} from "./contacts.ts";
|
|
40
|
-
// Contact commands
|
|
41
35
|
export {
|
|
42
36
|
cmdContactAttachCompany,
|
|
43
37
|
cmdContactCreate,
|
|
@@ -54,6 +48,7 @@ export {
|
|
|
54
48
|
export type {
|
|
55
49
|
ConversationAssignOptions,
|
|
56
50
|
ConversationCloseOptions,
|
|
51
|
+
ConversationConvertOptions,
|
|
57
52
|
ConversationGetOptions,
|
|
58
53
|
ConversationListOptions,
|
|
59
54
|
ConversationOpenOptions,
|
|
@@ -61,10 +56,10 @@ export type {
|
|
|
61
56
|
ConversationSearchOptions,
|
|
62
57
|
ConversationSnoozeOptions,
|
|
63
58
|
} from "./conversations.ts";
|
|
64
|
-
// Conversation commands
|
|
65
59
|
export {
|
|
66
60
|
cmdConversationAssign,
|
|
67
61
|
cmdConversationClose,
|
|
62
|
+
cmdConversationConvert,
|
|
68
63
|
cmdConversationGet,
|
|
69
64
|
cmdConversationList,
|
|
70
65
|
cmdConversationOpen,
|
|
@@ -73,10 +68,29 @@ export {
|
|
|
73
68
|
cmdConversationSnooze,
|
|
74
69
|
} from "./conversations.ts";
|
|
75
70
|
export type { EventListOptions, EventTrackOptions } from "./events.ts";
|
|
76
|
-
// Event commands
|
|
77
71
|
export { cmdEventList, cmdEventTrack } from "./events.ts";
|
|
78
|
-
// Overview commands
|
|
79
72
|
export { cmdContext, cmdSchema } from "./overview.ts";
|
|
80
73
|
export type { TagCreateOptions, TagDeleteOptions, TagGetOptions } from "./tags.ts";
|
|
81
|
-
// Tag commands
|
|
82
74
|
export { cmdTagCreate, cmdTagDelete, cmdTagGet, cmdTagList } from "./tags.ts";
|
|
75
|
+
export type {
|
|
76
|
+
TicketAssignOptions,
|
|
77
|
+
TicketCloseOptions,
|
|
78
|
+
TicketCreateOptions,
|
|
79
|
+
TicketDeleteOptions,
|
|
80
|
+
TicketGetOptions,
|
|
81
|
+
TicketReplyOptions,
|
|
82
|
+
TicketSearchOptions,
|
|
83
|
+
TicketUpdateOptions,
|
|
84
|
+
} from "./tickets.ts";
|
|
85
|
+
export {
|
|
86
|
+
cmdTicketAssign,
|
|
87
|
+
cmdTicketClose,
|
|
88
|
+
cmdTicketCreate,
|
|
89
|
+
cmdTicketDelete,
|
|
90
|
+
cmdTicketGet,
|
|
91
|
+
cmdTicketReply,
|
|
92
|
+
cmdTicketSearch,
|
|
93
|
+
cmdTicketUpdate,
|
|
94
|
+
} from "./tickets.ts";
|
|
95
|
+
export type { TicketTypeGetOptions, TicketTypeListOptions } from "./ticketTypes.ts";
|
|
96
|
+
export { cmdTicketTypeGet, cmdTicketTypeList } from "./ticketTypes.ts";
|
package/src/commands/overview.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { createClient, handleIntercomError } from "../client.ts";
|
|
|
3
3
|
import { CLIError, type GlobalOptions, getTokenAsync, output } from "../utils/index.ts";
|
|
4
4
|
|
|
5
5
|
export async function cmdContext(options: GlobalOptions): Promise<void> {
|
|
6
|
-
const token = await getTokenAsync();
|
|
6
|
+
const token = await getTokenAsync(options.configDir);
|
|
7
7
|
if (!token) {
|
|
8
8
|
throw new CLIError("Not logged in", 401, "Run 'intercom login' to authenticate.");
|
|
9
9
|
}
|
package/src/commands/tags.ts
CHANGED
|
@@ -14,8 +14,8 @@ export interface TagDeleteOptions extends GlobalOptions {
|
|
|
14
14
|
id: string;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
async function requireToken(): Promise<string> {
|
|
18
|
-
const token = await getTokenAsync();
|
|
17
|
+
async function requireToken(configDir: string): Promise<string> {
|
|
18
|
+
const token = await getTokenAsync(configDir);
|
|
19
19
|
if (!token) {
|
|
20
20
|
throw new CLIError("Not logged in", 401, "Run 'intercom login' to authenticate.");
|
|
21
21
|
}
|
|
@@ -23,7 +23,7 @@ async function requireToken(): Promise<string> {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
export async function cmdTagList(options: GlobalOptions): Promise<void> {
|
|
26
|
-
const token = await requireToken();
|
|
26
|
+
const token = await requireToken(options.configDir);
|
|
27
27
|
const spinner = ora("Fetching tags...").start();
|
|
28
28
|
|
|
29
29
|
try {
|
|
@@ -49,7 +49,7 @@ export async function cmdTagList(options: GlobalOptions): Promise<void> {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
export async function cmdTagCreate(options: TagCreateOptions): Promise<void> {
|
|
52
|
-
const token = await requireToken();
|
|
52
|
+
const token = await requireToken(options.configDir);
|
|
53
53
|
const spinner = ora("Creating tag...").start();
|
|
54
54
|
|
|
55
55
|
try {
|
|
@@ -72,7 +72,7 @@ export async function cmdTagCreate(options: TagCreateOptions): Promise<void> {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
export async function cmdTagGet(options: TagGetOptions): Promise<void> {
|
|
75
|
-
const token = await requireToken();
|
|
75
|
+
const token = await requireToken(options.configDir);
|
|
76
76
|
const spinner = ora("Fetching tag...").start();
|
|
77
77
|
|
|
78
78
|
try {
|
|
@@ -95,7 +95,7 @@ export async function cmdTagGet(options: TagGetOptions): Promise<void> {
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
export async function cmdTagDelete(options: TagDeleteOptions): Promise<void> {
|
|
98
|
-
const token = await requireToken();
|
|
98
|
+
const token = await requireToken(options.configDir);
|
|
99
99
|
const spinner = ora("Deleting tag...").start();
|
|
100
100
|
|
|
101
101
|
try {
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import ora from "ora";
|
|
2
|
+
import { createClient, handleIntercomError } from "../client.ts";
|
|
3
|
+
import { CLIError, type GlobalOptions, getTokenAsync, output } from "../utils/index.ts";
|
|
4
|
+
|
|
5
|
+
export interface TicketTypeListOptions extends GlobalOptions {}
|
|
6
|
+
|
|
7
|
+
export interface TicketTypeGetOptions extends GlobalOptions {
|
|
8
|
+
id: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
async function requireToken(configDir: string): Promise<string> {
|
|
12
|
+
const token = await getTokenAsync(configDir);
|
|
13
|
+
if (!token) {
|
|
14
|
+
throw new CLIError("Not logged in", 401, "Run 'intercom login' to authenticate.");
|
|
15
|
+
}
|
|
16
|
+
return token;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export async function cmdTicketTypeList(options: TicketTypeListOptions): Promise<void> {
|
|
20
|
+
const token = await requireToken(options.configDir);
|
|
21
|
+
const spinner = ora("Listing ticket types...").start();
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
const client = createClient({ token, dryRun: options.dryRun });
|
|
25
|
+
const result = await client.ticketTypes.list();
|
|
26
|
+
|
|
27
|
+
spinner.stop();
|
|
28
|
+
|
|
29
|
+
const ticketTypes = (result.data ?? [])
|
|
30
|
+
.filter((tt): tt is NonNullable<typeof tt> => tt !== undefined)
|
|
31
|
+
.map((tt) => ({
|
|
32
|
+
id: tt.id,
|
|
33
|
+
name: tt.name,
|
|
34
|
+
description: tt.description,
|
|
35
|
+
category: tt.category,
|
|
36
|
+
icon: tt.icon,
|
|
37
|
+
archived: tt.archived,
|
|
38
|
+
created_at: tt.created_at,
|
|
39
|
+
updated_at: tt.updated_at,
|
|
40
|
+
}));
|
|
41
|
+
|
|
42
|
+
output({ total: ticketTypes.length, ticket_types: ticketTypes }, options.format);
|
|
43
|
+
} catch (error) {
|
|
44
|
+
spinner.fail("Failed to list ticket types");
|
|
45
|
+
handleIntercomError(error);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export async function cmdTicketTypeGet(options: TicketTypeGetOptions): Promise<void> {
|
|
50
|
+
const token = await requireToken(options.configDir);
|
|
51
|
+
const spinner = ora("Fetching ticket type...").start();
|
|
52
|
+
|
|
53
|
+
try {
|
|
54
|
+
const client = createClient({ token, dryRun: options.dryRun });
|
|
55
|
+
const ticketType = await client.ticketTypes.get({ ticket_type_id: options.id });
|
|
56
|
+
|
|
57
|
+
spinner.stop();
|
|
58
|
+
|
|
59
|
+
output(
|
|
60
|
+
{
|
|
61
|
+
id: ticketType?.id,
|
|
62
|
+
name: ticketType?.name,
|
|
63
|
+
description: ticketType?.description,
|
|
64
|
+
category: ticketType?.category,
|
|
65
|
+
icon: ticketType?.icon,
|
|
66
|
+
archived: ticketType?.archived,
|
|
67
|
+
created_at: ticketType?.created_at,
|
|
68
|
+
updated_at: ticketType?.updated_at,
|
|
69
|
+
},
|
|
70
|
+
options.format,
|
|
71
|
+
);
|
|
72
|
+
} catch (error) {
|
|
73
|
+
spinner.fail("Failed to fetch ticket type");
|
|
74
|
+
handleIntercomError(error);
|
|
75
|
+
}
|
|
76
|
+
}
|