@sendly/cli 3.37.0 → 3.38.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/README.md +178 -0
- package/dist/commands/business-upgrade/resubmit.js +3 -3
- package/dist/commands/business-upgrade/start.js +3 -3
- package/dist/commands/config/list.js +14 -2
- package/dist/commands/config/set.js +16 -3
- package/dist/commands/countries.js +2 -2
- package/dist/commands/credits/index.d.ts +1 -0
- package/dist/commands/credits/index.js +4 -0
- package/dist/commands/doctor.d.ts +12 -0
- package/dist/commands/doctor.js +51 -8
- package/dist/commands/enterprise/upload-verification-document.js +3 -3
- package/dist/commands/enterprise/verification/resubmit.js +2 -2
- package/dist/commands/enterprise/verification/submit.js +2 -2
- package/dist/commands/events/listen.js +3 -3
- package/dist/commands/numbers/buy.js +19 -4
- package/dist/commands/rcs/agents.d.ts +10 -0
- package/dist/commands/rcs/agents.js +89 -0
- package/dist/commands/rcs/capability.d.ts +12 -0
- package/dist/commands/rcs/capability.js +85 -0
- package/dist/commands/rcs/send.d.ts +21 -0
- package/dist/commands/rcs/send.js +240 -0
- package/dist/commands/send.d.ts +1 -0
- package/dist/commands/send.js +5 -2
- package/dist/commands/sms/batch.d.ts +1 -0
- package/dist/commands/sms/batch.js +11 -1
- package/dist/commands/sms/group.d.ts +1 -0
- package/dist/commands/sms/group.js +5 -2
- package/dist/commands/sms/schedule.d.ts +1 -0
- package/dist/commands/sms/schedule.js +5 -2
- package/dist/commands/sms/send.d.ts +1 -0
- package/dist/commands/sms/send.js +5 -2
- package/dist/commands/webhooks/listen.js +2 -2
- package/dist/commands/whatsapp/connect.d.ts +17 -0
- package/dist/commands/whatsapp/connect.js +166 -0
- package/dist/commands/whatsapp/profile/get.d.ts +13 -0
- package/dist/commands/whatsapp/profile/get.js +67 -0
- package/dist/commands/whatsapp/profile/update.d.ts +20 -0
- package/dist/commands/whatsapp/profile/update.js +109 -0
- package/dist/commands/whatsapp/send.d.ts +17 -0
- package/dist/commands/whatsapp/send.js +151 -0
- package/dist/commands/whatsapp/senders.d.ts +10 -0
- package/dist/commands/whatsapp/senders.js +74 -0
- package/dist/commands/whatsapp/status.d.ts +13 -0
- package/dist/commands/whatsapp/status.js +92 -0
- package/dist/commands/whatsapp/templates/create.d.ts +19 -0
- package/dist/commands/whatsapp/templates/create.js +205 -0
- package/dist/commands/whatsapp/templates/delete.d.ts +14 -0
- package/dist/commands/whatsapp/templates/delete.js +69 -0
- package/dist/commands/whatsapp/templates/list.d.ts +10 -0
- package/dist/commands/whatsapp/templates/list.js +77 -0
- package/dist/commands/whatsapp/templates/update.d.ts +18 -0
- package/dist/commands/whatsapp/templates/update.js +160 -0
- package/dist/commands/whoami.js +32 -6
- package/dist/hooks/command-not-found.js +46 -61
- package/dist/lib/api-client.d.ts +9 -1
- package/dist/lib/api-client.js +78 -9
- package/dist/lib/auth.js +10 -6
- package/dist/lib/base-command.js +9 -1
- package/dist/lib/config.d.ts +50 -1
- package/dist/lib/config.js +144 -7
- package/dist/lib/help.d.ts +10 -0
- package/dist/lib/help.js +23 -0
- package/dist/lib/onboarding.js +3 -3
- package/oclif.manifest.json +1735 -764
- package/package.json +8 -1
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { Args, Flags } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
3
|
+
import { apiClient, ApiError, NotFoundError, ValidationError, } from "../../../lib/api-client.js";
|
|
4
|
+
import { success, error, json, colors, spinner, isJsonMode, } from "../../../lib/output.js";
|
|
5
|
+
const BUTTON_TYPES = ["url", "quick_reply", "otp"];
|
|
6
|
+
function parseButton(raw) {
|
|
7
|
+
const firstSep = raw.indexOf(":");
|
|
8
|
+
if (firstSep === -1) {
|
|
9
|
+
return `Invalid --button "${raw}" — use type:text (types: ${BUTTON_TYPES.join(", ")})`;
|
|
10
|
+
}
|
|
11
|
+
const type = raw.slice(0, firstSep).trim().toLowerCase();
|
|
12
|
+
const rest = raw.slice(firstSep + 1);
|
|
13
|
+
if (!BUTTON_TYPES.includes(type)) {
|
|
14
|
+
return `Invalid --button type "${type}" — must be one of: ${BUTTON_TYPES.join(", ")}`;
|
|
15
|
+
}
|
|
16
|
+
if (type === "url") {
|
|
17
|
+
const secondSep = rest.indexOf(":");
|
|
18
|
+
if (secondSep === -1) {
|
|
19
|
+
return `Invalid --button "${raw}" — url buttons need url:text:https://...`;
|
|
20
|
+
}
|
|
21
|
+
const text = rest.slice(0, secondSep).trim();
|
|
22
|
+
const url = rest.slice(secondSep + 1).trim();
|
|
23
|
+
if (!text || !url) {
|
|
24
|
+
return `Invalid --button "${raw}" — url buttons need url:text:https://...`;
|
|
25
|
+
}
|
|
26
|
+
return { type, text, url };
|
|
27
|
+
}
|
|
28
|
+
const text = rest.trim();
|
|
29
|
+
if (!text) {
|
|
30
|
+
return `Invalid --button "${raw}" — button text is required`;
|
|
31
|
+
}
|
|
32
|
+
return { type, text };
|
|
33
|
+
}
|
|
34
|
+
function parseKeyValuePairs(raw, flagName) {
|
|
35
|
+
if (!raw || raw.length === 0)
|
|
36
|
+
return undefined;
|
|
37
|
+
const out = {};
|
|
38
|
+
for (const item of raw) {
|
|
39
|
+
const idx = item.indexOf("=");
|
|
40
|
+
if (idx <= 0) {
|
|
41
|
+
return `Invalid --${flagName} "${item}" — use n=value (e.g. 1=TinyFat)`;
|
|
42
|
+
}
|
|
43
|
+
out[item.slice(0, idx).trim()] = item.slice(idx + 1);
|
|
44
|
+
}
|
|
45
|
+
return out;
|
|
46
|
+
}
|
|
47
|
+
export default class WhatsappTemplatesUpdate extends AuthenticatedCommand {
|
|
48
|
+
static description = "Edit an approved or rejected WhatsApp template and resubmit it to Meta for review";
|
|
49
|
+
static examples = [
|
|
50
|
+
'<%= config.bin %> whatsapp templates update 3f6a1c9e-0000-0000-0000-000000000000 --body "Hi {{1}}, your order shipped!" --example 1=TinyFat',
|
|
51
|
+
'<%= config.bin %> whatsapp templates update 3f6a1c9e-0000-0000-0000-000000000000 --footer ""',
|
|
52
|
+
];
|
|
53
|
+
static args = {
|
|
54
|
+
id: Args.string({
|
|
55
|
+
description: "Template ID",
|
|
56
|
+
required: true,
|
|
57
|
+
}),
|
|
58
|
+
};
|
|
59
|
+
static flags = {
|
|
60
|
+
...AuthenticatedCommand.baseFlags,
|
|
61
|
+
body: Flags.string({
|
|
62
|
+
char: "b",
|
|
63
|
+
description: "New body text; use {{1}}, {{2}}, ... for variables",
|
|
64
|
+
}),
|
|
65
|
+
footer: Flags.string({
|
|
66
|
+
description: 'New footer text (pass "" to remove it)',
|
|
67
|
+
}),
|
|
68
|
+
header: Flags.string({
|
|
69
|
+
description: 'New header text (pass "" to remove it)',
|
|
70
|
+
}),
|
|
71
|
+
button: Flags.string({
|
|
72
|
+
description: 'Replace all buttons: "type:text" or "url:text:https://..." (types: quick_reply, url, otp). Repeatable.',
|
|
73
|
+
multiple: true,
|
|
74
|
+
}),
|
|
75
|
+
example: Flags.string({
|
|
76
|
+
description: "Replace example values for body variables, as n=value. Repeatable.",
|
|
77
|
+
multiple: true,
|
|
78
|
+
}),
|
|
79
|
+
};
|
|
80
|
+
async run() {
|
|
81
|
+
const { args, flags } = await this.parse(WhatsappTemplatesUpdate);
|
|
82
|
+
if (flags.body === undefined &&
|
|
83
|
+
flags.footer === undefined &&
|
|
84
|
+
flags.header === undefined &&
|
|
85
|
+
flags.button === undefined &&
|
|
86
|
+
flags.example === undefined) {
|
|
87
|
+
error("Nothing to update", {
|
|
88
|
+
hint: "Pass at least one of --body, --footer, --header, --button, --example",
|
|
89
|
+
});
|
|
90
|
+
this.exit(1);
|
|
91
|
+
}
|
|
92
|
+
const examples = parseKeyValuePairs(flags.example, "example");
|
|
93
|
+
if (typeof examples === "string") {
|
|
94
|
+
error(examples);
|
|
95
|
+
this.exit(1);
|
|
96
|
+
}
|
|
97
|
+
let buttons;
|
|
98
|
+
if (flags.button !== undefined) {
|
|
99
|
+
buttons = [];
|
|
100
|
+
for (const raw of flags.button) {
|
|
101
|
+
const parsed = parseButton(raw);
|
|
102
|
+
if (typeof parsed === "string") {
|
|
103
|
+
error(parsed);
|
|
104
|
+
this.exit(1);
|
|
105
|
+
}
|
|
106
|
+
buttons.push(parsed);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const updateSpinner = spinner("Resubmitting template for review...");
|
|
110
|
+
if (!isJsonMode()) {
|
|
111
|
+
updateSpinner.start();
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
const response = await apiClient.patch(`/api/v1/whatsapp/templates/${encodeURIComponent(args.id)}`, {
|
|
115
|
+
...(flags.body !== undefined && { body: flags.body }),
|
|
116
|
+
...(flags.footer !== undefined && { footer: flags.footer }),
|
|
117
|
+
...(flags.header !== undefined && { header: flags.header }),
|
|
118
|
+
...(buttons !== undefined && { buttons }),
|
|
119
|
+
...(examples !== undefined && { examples }),
|
|
120
|
+
});
|
|
121
|
+
updateSpinner.stop();
|
|
122
|
+
if (isJsonMode()) {
|
|
123
|
+
json(response);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
success("Template resubmitted for review", {
|
|
127
|
+
ID: colors.code(response.id),
|
|
128
|
+
Name: response.name,
|
|
129
|
+
Language: response.language,
|
|
130
|
+
Category: response.category,
|
|
131
|
+
Status: colors.warning(response.status),
|
|
132
|
+
});
|
|
133
|
+
console.log();
|
|
134
|
+
console.log(colors.dim(`Meta reviews the edit, usually within a day. Check with: ${colors.code("sendly whatsapp templates list")}`));
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
updateSpinner.stop();
|
|
138
|
+
if (err instanceof ApiError && err.code === "template_not_editable") {
|
|
139
|
+
error(err.message, {
|
|
140
|
+
hint: "Only approved or rejected templates can be edited — a pending template is already in review",
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
else if (err instanceof NotFoundError) {
|
|
144
|
+
error("Template not found", {
|
|
145
|
+
hint: "Run `sendly whatsapp templates list` to see template ids",
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
else if (err instanceof ValidationError && err.message === "HTTP 400") {
|
|
149
|
+
error("The template failed validation checks", {
|
|
150
|
+
hint: "Every {{n}} needs an --example n=value; authentication templates can't contain links and need an otp button",
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
throw err;
|
|
155
|
+
}
|
|
156
|
+
this.exit(1);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3doYXRzYXBwL3RlbXBsYXRlcy91cGRhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsYUFBYSxFQUNiLGVBQWUsR0FDaEIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sRUFDUCxVQUFVLEdBQ1gsTUFBTSx3QkFBd0IsQ0FBQztBQW9CaEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRW5ELFNBQVMsV0FBVyxDQUFDLEdBQVc7SUFDOUIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxJQUFJLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BCLE9BQU8scUJBQXFCLEdBQUcsNkJBQTZCLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUN6RixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxPQUFPLDBCQUEwQixJQUFJLHVCQUF1QixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDeEYsQ0FBQztJQUNELElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ25CLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyQixPQUFPLHFCQUFxQixHQUFHLDJDQUEyQyxDQUFDO1FBQzdFLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbEIsT0FBTyxxQkFBcUIsR0FBRywyQ0FBMkMsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixPQUFPLHFCQUFxQixHQUFHLDZCQUE2QixDQUFDO0lBQy9ELENBQUM7SUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3hCLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUN6QixHQUF5QixFQUN6QixRQUFnQjtJQUVoQixJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUEyQixFQUFFLENBQUM7SUFDdkMsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2IsT0FBTyxhQUFhLFFBQVEsS0FBSyxJQUFJLGtDQUFrQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE9BQU8sT0FBTyx1QkFBd0IsU0FBUSxvQkFBb0I7SUFDdkUsTUFBTSxDQUFDLFdBQVcsR0FDaEIsbUZBQW1GLENBQUM7SUFFdEYsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQiw2SUFBNkk7UUFDN0ksOEZBQThGO0tBQy9GLENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDZCxXQUFXLEVBQUUsYUFBYTtZQUMxQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztRQUNqQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNqQixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSxvREFBb0Q7U0FDbEUsQ0FBQztRQUNGLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ25CLFdBQVcsRUFBRSx3Q0FBd0M7U0FDdEQsQ0FBQztRQUNGLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ25CLFdBQVcsRUFBRSx3Q0FBd0M7U0FDdEQsQ0FBQztRQUNGLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ25CLFdBQVcsRUFDVCx3R0FBd0c7WUFDMUcsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBQ0YsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDcEIsV0FBVyxFQUNULG9FQUFvRTtZQUN0RSxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRWxFLElBQ0UsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTO1lBQ3hCLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUztZQUMxQixLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVM7WUFDMUIsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTO1lBQzFCLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUMzQixDQUFDO1lBQ0QsS0FBSyxDQUFDLG1CQUFtQixFQUFFO2dCQUN6QixJQUFJLEVBQUUsc0VBQXNFO2FBQzdFLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5RCxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksT0FBcUMsQ0FBQztRQUMxQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0IsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMvQixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQy9CLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNmLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUF3QixDQUFDLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNsQixhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssQ0FDcEMsOEJBQThCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUMzRDtnQkFDRSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNyRCxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMzRCxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMzRCxHQUFHLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUN6QyxHQUFHLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO2FBQzVDLENBQ0YsQ0FBQztZQUVGLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVyQixJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDZixPQUFPO1lBQ1QsQ0FBQztZQUVELE9BQU8sQ0FBQyxpQ0FBaUMsRUFBRTtnQkFDekMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUNuQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7Z0JBQzNCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtnQkFDM0IsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQzthQUN4QyxDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxHQUFHLENBQ1IsNERBQTRELE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsRUFBRSxDQUM1RyxDQUNGLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztZQUNsQixhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFckIsSUFBSSxHQUFHLFlBQVksUUFBUSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssdUJBQXVCLEVBQUUsQ0FBQztnQkFDcEUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7b0JBQ2pCLElBQUksRUFBRSw2RkFBNkY7aUJBQ3BHLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxHQUFHLFlBQVksYUFBYSxFQUFFLENBQUM7Z0JBQ3hDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRTtvQkFDMUIsSUFBSSxFQUFFLDBEQUEwRDtpQkFDakUsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxJQUFJLEdBQUcsWUFBWSxlQUFlLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDeEUsS0FBSyxDQUFDLHVDQUF1QyxFQUFFO29CQUM3QyxJQUFJLEVBQUUsNkdBQTZHO2lCQUNwSCxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxHQUFHLENBQUM7WUFDWixDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJncywgRmxhZ3MgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7XG4gIGFwaUNsaWVudCxcbiAgQXBpRXJyb3IsXG4gIE5vdEZvdW5kRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSBcIi4uLy4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQge1xuICBzdWNjZXNzLFxuICBlcnJvcixcbiAganNvbixcbiAgY29sb3JzLFxuICBzcGlubmVyLFxuICBpc0pzb25Nb2RlLFxufSBmcm9tIFwiLi4vLi4vLi4vbGliL291dHB1dC5qc1wiO1xuXG5pbnRlcmZhY2UgV2hhdHNhcHBUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBsYW5ndWFnZTogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbiAgcXVhbGl0eVJhdGluZzogc3RyaW5nIHwgbnVsbDtcbiAgcmVqZWN0aW9uUmVhc29uOiBzdHJpbmcgfCBudWxsO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBUZW1wbGF0ZUJ1dHRvbiB7XG4gIHR5cGU6IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbmNvbnN0IEJVVFRPTl9UWVBFUyA9IFtcInVybFwiLCBcInF1aWNrX3JlcGx5XCIsIFwib3RwXCJdO1xuXG5mdW5jdGlvbiBwYXJzZUJ1dHRvbihyYXc6IHN0cmluZyk6IFRlbXBsYXRlQnV0dG9uIHwgc3RyaW5nIHtcbiAgY29uc3QgZmlyc3RTZXAgPSByYXcuaW5kZXhPZihcIjpcIik7XG4gIGlmIChmaXJzdFNlcCA9PT0gLTEpIHtcbiAgICByZXR1cm4gYEludmFsaWQgLS1idXR0b24gXCIke3Jhd31cIiDigJQgdXNlIHR5cGU6dGV4dCAodHlwZXM6ICR7QlVUVE9OX1RZUEVTLmpvaW4oXCIsIFwiKX0pYDtcbiAgfVxuICBjb25zdCB0eXBlID0gcmF3LnNsaWNlKDAsIGZpcnN0U2VwKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgcmVzdCA9IHJhdy5zbGljZShmaXJzdFNlcCArIDEpO1xuICBpZiAoIUJVVFRPTl9UWVBFUy5pbmNsdWRlcyh0eXBlKSkge1xuICAgIHJldHVybiBgSW52YWxpZCAtLWJ1dHRvbiB0eXBlIFwiJHt0eXBlfVwiIOKAlCBtdXN0IGJlIG9uZSBvZjogJHtCVVRUT05fVFlQRVMuam9pbihcIiwgXCIpfWA7XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwidXJsXCIpIHtcbiAgICBjb25zdCBzZWNvbmRTZXAgPSByZXN0LmluZGV4T2YoXCI6XCIpO1xuICAgIGlmIChzZWNvbmRTZXAgPT09IC0xKSB7XG4gICAgICByZXR1cm4gYEludmFsaWQgLS1idXR0b24gXCIke3Jhd31cIiDigJQgdXJsIGJ1dHRvbnMgbmVlZCB1cmw6dGV4dDpodHRwczovLy4uLmA7XG4gICAgfVxuICAgIGNvbnN0IHRleHQgPSByZXN0LnNsaWNlKDAsIHNlY29uZFNlcCkudHJpbSgpO1xuICAgIGNvbnN0IHVybCA9IHJlc3Quc2xpY2Uoc2Vjb25kU2VwICsgMSkudHJpbSgpO1xuICAgIGlmICghdGV4dCB8fCAhdXJsKSB7XG4gICAgICByZXR1cm4gYEludmFsaWQgLS1idXR0b24gXCIke3Jhd31cIiDigJQgdXJsIGJ1dHRvbnMgbmVlZCB1cmw6dGV4dDpodHRwczovLy4uLmA7XG4gICAgfVxuICAgIHJldHVybiB7IHR5cGUsIHRleHQsIHVybCB9O1xuICB9XG4gIGNvbnN0IHRleHQgPSByZXN0LnRyaW0oKTtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIC0tYnV0dG9uIFwiJHtyYXd9XCIg4oCUIGJ1dHRvbiB0ZXh0IGlzIHJlcXVpcmVkYDtcbiAgfVxuICByZXR1cm4geyB0eXBlLCB0ZXh0IH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlS2V5VmFsdWVQYWlycyhcbiAgcmF3OiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbiAgZmxhZ05hbWU6IHN0cmluZyxcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIXJhdyB8fCByYXcubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIHJhdykge1xuICAgIGNvbnN0IGlkeCA9IGl0ZW0uaW5kZXhPZihcIj1cIik7XG4gICAgaWYgKGlkeCA8PSAwKSB7XG4gICAgICByZXR1cm4gYEludmFsaWQgLS0ke2ZsYWdOYW1lfSBcIiR7aXRlbX1cIiDigJQgdXNlIG49dmFsdWUgKGUuZy4gMT1UaW55RmF0KWA7XG4gICAgfVxuICAgIG91dFtpdGVtLnNsaWNlKDAsIGlkeCkudHJpbSgpXSA9IGl0ZW0uc2xpY2UoaWR4ICsgMSk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2hhdHNhcHBUZW1wbGF0ZXNVcGRhdGUgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9XG4gICAgXCJFZGl0IGFuIGFwcHJvdmVkIG9yIHJlamVjdGVkIFdoYXRzQXBwIHRlbXBsYXRlIGFuZCByZXN1Ym1pdCBpdCB0byBNZXRhIGZvciByZXZpZXdcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgJzwlPSBjb25maWcuYmluICU+IHdoYXRzYXBwIHRlbXBsYXRlcyB1cGRhdGUgM2Y2YTFjOWUtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIC0tYm9keSBcIkhpIHt7MX19LCB5b3VyIG9yZGVyIHNoaXBwZWQhXCIgLS1leGFtcGxlIDE9VGlueUZhdCcsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHdoYXRzYXBwIHRlbXBsYXRlcyB1cGRhdGUgM2Y2YTFjOWUtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIC0tZm9vdGVyIFwiXCInLFxuICBdO1xuXG4gIHN0YXRpYyBhcmdzID0ge1xuICAgIGlkOiBBcmdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJUZW1wbGF0ZSBJRFwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gIH07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgICBib2R5OiBGbGFncy5zdHJpbmcoe1xuICAgICAgY2hhcjogXCJiXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJOZXcgYm9keSB0ZXh0OyB1c2Uge3sxfX0sIHt7Mn19LCAuLi4gZm9yIHZhcmlhYmxlc1wiLFxuICAgIH0pLFxuICAgIGZvb3RlcjogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnTmV3IGZvb3RlciB0ZXh0IChwYXNzIFwiXCIgdG8gcmVtb3ZlIGl0KScsXG4gICAgfSksXG4gICAgaGVhZGVyOiBGbGFncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246ICdOZXcgaGVhZGVyIHRleHQgKHBhc3MgXCJcIiB0byByZW1vdmUgaXQpJyxcbiAgICB9KSxcbiAgICBidXR0b246IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1JlcGxhY2UgYWxsIGJ1dHRvbnM6IFwidHlwZTp0ZXh0XCIgb3IgXCJ1cmw6dGV4dDpodHRwczovLy4uLlwiICh0eXBlczogcXVpY2tfcmVwbHksIHVybCwgb3RwKS4gUmVwZWF0YWJsZS4nLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgfSksXG4gICAgZXhhbXBsZTogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlJlcGxhY2UgZXhhbXBsZSB2YWx1ZXMgZm9yIGJvZHkgdmFyaWFibGVzLCBhcyBuPXZhbHVlLiBSZXBlYXRhYmxlLlwiLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgfSksXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYXJncywgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoV2hhdHNhcHBUZW1wbGF0ZXNVcGRhdGUpO1xuXG4gICAgaWYgKFxuICAgICAgZmxhZ3MuYm9keSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBmbGFncy5mb290ZXIgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgZmxhZ3MuaGVhZGVyID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGZsYWdzLmJ1dHRvbiA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBmbGFncy5leGFtcGxlID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGVycm9yKFwiTm90aGluZyB0byB1cGRhdGVcIiwge1xuICAgICAgICBoaW50OiBcIlBhc3MgYXQgbGVhc3Qgb25lIG9mIC0tYm9keSwgLS1mb290ZXIsIC0taGVhZGVyLCAtLWJ1dHRvbiwgLS1leGFtcGxlXCIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBleGFtcGxlcyA9IHBhcnNlS2V5VmFsdWVQYWlycyhmbGFncy5leGFtcGxlLCBcImV4YW1wbGVcIik7XG4gICAgaWYgKHR5cGVvZiBleGFtcGxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZXJyb3IoZXhhbXBsZXMpO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGxldCBidXR0b25zOiBUZW1wbGF0ZUJ1dHRvbltdIHwgdW5kZWZpbmVkO1xuICAgIGlmIChmbGFncy5idXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgYnV0dG9ucyA9IFtdO1xuICAgICAgZm9yIChjb25zdCByYXcgb2YgZmxhZ3MuYnV0dG9uKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlQnV0dG9uKHJhdyk7XG4gICAgICAgIGlmICh0eXBlb2YgcGFyc2VkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgZXJyb3IocGFyc2VkKTtcbiAgICAgICAgICB0aGlzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9ucy5wdXNoKHBhcnNlZCBhcyBUZW1wbGF0ZUJ1dHRvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlU3Bpbm5lciA9IHNwaW5uZXIoXCJSZXN1Ym1pdHRpbmcgdGVtcGxhdGUgZm9yIHJldmlldy4uLlwiKTtcbiAgICBpZiAoIWlzSnNvbk1vZGUoKSkge1xuICAgICAgdXBkYXRlU3Bpbm5lci5zdGFydCgpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5wYXRjaDxXaGF0c2FwcFRlbXBsYXRlUmVzcG9uc2U+KFxuICAgICAgICBgL2FwaS92MS93aGF0c2FwcC90ZW1wbGF0ZXMvJHtlbmNvZGVVUklDb21wb25lbnQoYXJncy5pZCl9YCxcbiAgICAgICAge1xuICAgICAgICAgIC4uLihmbGFncy5ib2R5ICE9PSB1bmRlZmluZWQgJiYgeyBib2R5OiBmbGFncy5ib2R5IH0pLFxuICAgICAgICAgIC4uLihmbGFncy5mb290ZXIgIT09IHVuZGVmaW5lZCAmJiB7IGZvb3RlcjogZmxhZ3MuZm9vdGVyIH0pLFxuICAgICAgICAgIC4uLihmbGFncy5oZWFkZXIgIT09IHVuZGVmaW5lZCAmJiB7IGhlYWRlcjogZmxhZ3MuaGVhZGVyIH0pLFxuICAgICAgICAgIC4uLihidXR0b25zICE9PSB1bmRlZmluZWQgJiYgeyBidXR0b25zIH0pLFxuICAgICAgICAgIC4uLihleGFtcGxlcyAhPT0gdW5kZWZpbmVkICYmIHsgZXhhbXBsZXMgfSksXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICB1cGRhdGVTcGlubmVyLnN0b3AoKTtcblxuICAgICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAgICBqc29uKHJlc3BvbnNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzdWNjZXNzKFwiVGVtcGxhdGUgcmVzdWJtaXR0ZWQgZm9yIHJldmlld1wiLCB7XG4gICAgICAgIElEOiBjb2xvcnMuY29kZShyZXNwb25zZS5pZCksXG4gICAgICAgIE5hbWU6IHJlc3BvbnNlLm5hbWUsXG4gICAgICAgIExhbmd1YWdlOiByZXNwb25zZS5sYW5ndWFnZSxcbiAgICAgICAgQ2F0ZWdvcnk6IHJlc3BvbnNlLmNhdGVnb3J5LFxuICAgICAgICBTdGF0dXM6IGNvbG9ycy53YXJuaW5nKHJlc3BvbnNlLnN0YXR1cyksXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgIGBNZXRhIHJldmlld3MgdGhlIGVkaXQsIHVzdWFsbHkgd2l0aGluIGEgZGF5LiBDaGVjayB3aXRoOiAke2NvbG9ycy5jb2RlKFwic2VuZGx5IHdoYXRzYXBwIHRlbXBsYXRlcyBsaXN0XCIpfWAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB1cGRhdGVTcGlubmVyLnN0b3AoKTtcblxuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEFwaUVycm9yICYmIGVyci5jb2RlID09PSBcInRlbXBsYXRlX25vdF9lZGl0YWJsZVwiKSB7XG4gICAgICAgIGVycm9yKGVyci5tZXNzYWdlLCB7XG4gICAgICAgICAgaGludDogXCJPbmx5IGFwcHJvdmVkIG9yIHJlamVjdGVkIHRlbXBsYXRlcyBjYW4gYmUgZWRpdGVkIOKAlCBhIHBlbmRpbmcgdGVtcGxhdGUgaXMgYWxyZWFkeSBpbiByZXZpZXdcIixcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpIHtcbiAgICAgICAgZXJyb3IoXCJUZW1wbGF0ZSBub3QgZm91bmRcIiwge1xuICAgICAgICAgIGhpbnQ6IFwiUnVuIGBzZW5kbHkgd2hhdHNhcHAgdGVtcGxhdGVzIGxpc3RgIHRvIHNlZSB0ZW1wbGF0ZSBpZHNcIixcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvciAmJiBlcnIubWVzc2FnZSA9PT0gXCJIVFRQIDQwMFwiKSB7XG4gICAgICAgIGVycm9yKFwiVGhlIHRlbXBsYXRlIGZhaWxlZCB2YWxpZGF0aW9uIGNoZWNrc1wiLCB7XG4gICAgICAgICAgaGludDogXCJFdmVyeSB7e259fSBuZWVkcyBhbiAtLWV4YW1wbGUgbj12YWx1ZTsgYXV0aGVudGljYXRpb24gdGVtcGxhdGVzIGNhbid0IGNvbnRhaW4gbGlua3MgYW5kIG5lZWQgYW4gb3RwIGJ1dHRvblwiLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/dist/commands/whoami.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { BaseCommand } from "../lib/base-command.js";
|
|
2
2
|
import { getAuthInfo } from "../lib/auth.js";
|
|
3
|
+
import { apiClient } from "../lib/api-client.js";
|
|
3
4
|
import { success, info, keyValue, colors, json } from "../lib/output.js";
|
|
4
|
-
import {
|
|
5
|
+
import { getConfigPath, getCurrentOrg, resolveBaseUrlSafe, PRODUCTION_BASE_URL, } from "../lib/config.js";
|
|
5
6
|
export default class Whoami extends BaseCommand {
|
|
6
7
|
static description = "Show current authentication status";
|
|
7
8
|
static examples = ["<%= config.bin %> whoami"];
|
|
@@ -11,7 +12,28 @@ export default class Whoami extends BaseCommand {
|
|
|
11
12
|
async run() {
|
|
12
13
|
const { flags } = await this.parse(Whoami);
|
|
13
14
|
const authInfo = await getAuthInfo();
|
|
14
|
-
const
|
|
15
|
+
const baseUrl = resolveBaseUrlSafe();
|
|
16
|
+
// Local config first (set by `sendly login` / `sendly teams switch`).
|
|
17
|
+
// API-key-only users have no local org, so fall back to asking the server
|
|
18
|
+
// which workspace the key is bound to — otherwise whoami shows nothing
|
|
19
|
+
// and there is no self-serve way to learn the workspace ID.
|
|
20
|
+
let org = getCurrentOrg();
|
|
21
|
+
if (!org && authInfo.authenticated) {
|
|
22
|
+
try {
|
|
23
|
+
const account = await apiClient.get("/api/v1/account");
|
|
24
|
+
if (account.organization) {
|
|
25
|
+
org = {
|
|
26
|
+
id: account.organization.id,
|
|
27
|
+
name: account.organization.name,
|
|
28
|
+
slug: "",
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Offline or older server without the organization field — keep the
|
|
34
|
+
// existing behavior of showing no team rather than failing whoami.
|
|
35
|
+
}
|
|
36
|
+
}
|
|
15
37
|
if (flags.json) {
|
|
16
38
|
json({
|
|
17
39
|
authenticated: authInfo.authenticated,
|
|
@@ -19,6 +41,8 @@ export default class Whoami extends BaseCommand {
|
|
|
19
41
|
userId: authInfo.userId,
|
|
20
42
|
environment: authInfo.environment,
|
|
21
43
|
keyType: authInfo.keyType,
|
|
44
|
+
baseUrl: baseUrl.error ? null : baseUrl.url,
|
|
45
|
+
...(baseUrl.error ? { baseUrlError: baseUrl.error } : {}),
|
|
22
46
|
configPath: getConfigPath(),
|
|
23
47
|
organization: org ? { id: org.id, name: org.name, slug: org.slug } : null,
|
|
24
48
|
});
|
|
@@ -46,9 +70,11 @@ export default class Whoami extends BaseCommand {
|
|
|
46
70
|
displayData["User ID"] = colors.dim(authInfo.userId);
|
|
47
71
|
}
|
|
48
72
|
// Show which server we're connected to
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
73
|
+
if (baseUrl.error) {
|
|
74
|
+
displayData["Server"] = colors.error(baseUrl.error);
|
|
75
|
+
}
|
|
76
|
+
else if (baseUrl.url !== PRODUCTION_BASE_URL) {
|
|
77
|
+
displayData["Server"] = colors.dim(baseUrl.url);
|
|
52
78
|
}
|
|
53
79
|
if (org) {
|
|
54
80
|
displayData["Team"] = colors.primary(org.name) + colors.dim(` (${org.id})`);
|
|
@@ -57,4 +83,4 @@ export default class Whoami extends BaseCommand {
|
|
|
57
83
|
keyValue(displayData);
|
|
58
84
|
}
|
|
59
85
|
}
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hvYW1pLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3dob2FtaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixtQkFBbUIsR0FDcEIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixNQUFNLENBQUMsT0FBTyxPQUFPLE1BQU8sU0FBUSxXQUFXO0lBQzdDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsb0NBQW9DLENBQUM7SUFFMUQsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFFL0MsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsV0FBVyxDQUFDLFNBQVM7S0FDekIsQ0FBQztJQUVGLEtBQUssQ0FBQyxHQUFHO1FBQ1AsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUzQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixFQUFFLENBQUM7UUFFckMsc0VBQXNFO1FBQ3RFLDBFQUEwRTtRQUMxRSx1RUFBdUU7UUFDdkUsNERBQTREO1FBQzVELElBQUksR0FBRyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFD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QUNsQixXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsQ0FBQzthQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxtQkFBbUIsRUFBRSxDQUFDO1lBQy9DLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUVELFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFcEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29tbWFuZCB9IGZyb20gXCIuLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBnZXRBdXRoSW5mbyB9IGZyb20gXCIuLi9saWIvYXV0aC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQgeyBzdWNjZXNzLCBpbmZvLCBrZXlWYWx1ZSwgY29sb3JzLCBqc29uIH0gZnJvbSBcIi4uL2xpYi9vdXRwdXQuanNcIjtcbmltcG9ydCB7XG4gIGdldENvbmZpZ1BhdGgsXG4gIGdldEN1cnJlbnRPcmcsXG4gIHJlc29sdmVCYXNlVXJsU2FmZSxcbiAgUFJPRFVDVElPTl9CQVNFX1VSTCxcbn0gZnJvbSBcIi4uL2xpYi9jb25maWcuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2hvYW1pIGV4dGVuZHMgQmFzZUNvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPSBcIlNob3cgY3VycmVudCBhdXRoZW50aWNhdGlvbiBzdGF0dXNcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXCI8JT0gY29uZmlnLmJpbiAlPiB3aG9hbWlcIl07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkJhc2VDb21tYW5kLmJhc2VGbGFncyxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShXaG9hbWkpO1xuXG4gICAgY29uc3QgYXV0aEluZm8gPSBhd2FpdCBnZXRBdXRoSW5mbygpO1xuICAgIGNvbnN0IGJhc2VVcmwgPSByZXNvbHZlQmFzZVVybFNhZmUoKTtcblxuICAgIC8vIExvY2FsIGNvbmZpZyBmaXJzdCAoc2V0IGJ5IGBzZW5kbHkgbG9naW5gIC8gYHNlbmRseSB0ZWFtcyBzd2l0Y2hgKS5cbiAgICAvLyBBUEkta2V5LW9ubHkgdXNlcnMgaGF2ZSBubyBsb2NhbCBvcmcsIHNvIGZhbGwgYmFjayB0byBhc2tpbmcgdGhlIHNlcnZlclxuICAgIC8vIHdoaWNoIHdvcmtzcGFjZSB0aGUga2V5IGlzIGJvdW5kIHRvIOKAlCBvdGhlcndpc2Ugd2hvYW1pIHNob3dzIG5vdGhpbmdcbiAgICAvLyBhbmQgdGhlcmUgaXMgbm8gc2VsZi1zZXJ2ZSB3YXkgdG8gbGVhcm4gdGhlIHdvcmtzcGFjZSBJRC5cbiAgICBsZXQgb3JnID0gZ2V0Q3VycmVudE9yZygpO1xuICAgIGlmICghb3JnICYmIGF1dGhJbmZvLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGFjY291bnQgPSBhd2FpdCBhcGlDbGllbnQuZ2V0PHtcbiAgICAgICAgICBvcmdhbml6YXRpb24/OiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9IHwgbnVsbDtcbiAgICAgICAgfT4oXCIvYXBpL3YxL2FjY291bnRcIik7XG4gICAgICAgIGlmIChhY2NvdW50Lm9yZ2FuaXphdGlvbikge1xuICAgICAgICAgIG9yZyA9IHtcbiAgICAgICAgICAgIGlkOiBhY2NvdW50Lm9yZ2FuaXphdGlvbi5pZCxcbiAgICAgICAgICAgIG5hbWU6IGFjY291bnQub3JnYW5pemF0aW9uLm5hbWUsXG4gICAgICAgICAgICBzbHVnOiBcIlwiLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBPZmZsaW5lIG9yIG9sZGVyIHNlcnZlciB3aXRob3V0IHRoZSBvcmdhbml6YXRpb24gZmllbGQg4oCUIGtlZXAgdGhlXG4gICAgICAgIC8vIGV4aXN0aW5nIGJlaGF2aW9yIG9mIHNob3dpbmcgbm8gdGVhbSByYXRoZXIgdGhhbiBmYWlsaW5nIHdob2FtaS5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmxhZ3MuanNvbikge1xuICAgICAganNvbih7XG4gICAgICAgIGF1dGhlbnRpY2F0ZWQ6IGF1dGhJbmZvLmF1dGhlbnRpY2F0ZWQsXG4gICAgICAgIGVtYWlsOiBhdXRoSW5mby5lbWFpbCxcbiAgICAgICAgdXNlcklkOiBhdXRoSW5mby51c2VySWQsXG4gICAgICAgIGVudmlyb25tZW50OiBhdXRoSW5mby5lbnZpcm9ubWVudCxcbiAgICAgICAga2V5VHlwZTogYXV0aEluZm8ua2V5VHlwZSxcbiAgICAgICAgYmFzZVVybDogYmFzZVVybC5lcnJvciA/IG51bGwgOiBiYXNlVXJsLnVybCxcbiAgICAgICAgLi4uKGJhc2VVcmwuZXJyb3IgPyB7IGJhc2VVcmxFcnJvcjogYmFzZVVybC5lcnJvciB9IDoge30pLFxuICAgICAgICBjb25maWdQYXRoOiBnZXRDb25maWdQYXRoKCksXG4gICAgICAgIG9yZ2FuaXphdGlvbjogb3JnID8geyBpZDogb3JnLmlkLCBuYW1lOiBvcmcubmFtZSwgc2x1Zzogb3JnLnNsdWcgfSA6IG51bGwsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWF1dGhJbmZvLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIGluZm8oXCJOb3QgbG9nZ2VkIGluXCIpO1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgIFJ1biAke2NvbG9ycy5jb2RlKFwic2VuZGx5IGxvZ2luXCIpfSB0byBhdXRoZW50aWNhdGVgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdWNjZXNzKFwiQXV0aGVudGljYXRlZFwiKTtcbiAgICBjb25zb2xlLmxvZygpO1xuXG4gICAgY29uc3QgZGlzcGxheURhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgIC8vIFNob3cgQVBJIG1vZGUgKHRlc3QgdnMgbGl2ZSkgLSB0aGlzIGRldGVybWluZXMgaWYgbWVzc2FnZXMgYXJlIGFjdHVhbGx5IHNlbnRcbiAgICBjb25zdCBtb2RlID0gYXV0aEluZm8ua2V5VHlwZSB8fCBhdXRoSW5mby5lbnZpcm9ubWVudDtcbiAgICBkaXNwbGF5RGF0YVtcIkFQSSBNb2RlXCJdID1cbiAgICAgIG1vZGUgPT09IFwidGVzdFwiXG4gICAgICAgID8gY29sb3JzLndhcm5pbmcoXCJ0ZXN0XCIpICsgY29sb3JzLmRpbShcIiAoc2FuZGJveCAtIG5vIHJlYWwgbWVzc2FnZXMpXCIpXG4gICAgICAgIDogY29sb3JzLnN1Y2Nlc3MoXCJsaXZlXCIpICsgY29sb3JzLmRpbShcIiAocHJvZHVjdGlvbilcIik7XG5cbiAgICBpZiAoYXV0aEluZm8uZW1haWwpIHtcbiAgICAgIGRpc3BsYXlEYXRhW1wiRW1haWxcIl0gPSBhdXRoSW5mby5lbWFpbDtcbiAgICB9XG5cbiAgICBpZiAoYXV0aEluZm8udXNlcklkKSB7XG4gICAgICBkaXNwbGF5RGF0YVtcIlVzZXIgSURcIl0gPSBjb2xvcnMuZGltKGF1dGhJbmZvLnVzZXJJZCk7XG4gICAgfVxuXG4gICAgLy8gU2hvdyB3aGljaCBzZXJ2ZXIgd2UncmUgY29ubmVjdGVkIHRvXG4gICAgaWYgKGJhc2VVcmwuZXJyb3IpIHtcbiAgICAgIGRpc3BsYXlEYXRhW1wiU2VydmVyXCJdID0gY29sb3JzLmVycm9yKGJhc2VVcmwuZXJyb3IpO1xuICAgIH0gZWxzZSBpZiAoYmFzZVVybC51cmwgIT09IFBST0RVQ1RJT05fQkFTRV9VUkwpIHtcbiAgICAgIGRpc3BsYXlEYXRhW1wiU2VydmVyXCJdID0gY29sb3JzLmRpbShiYXNlVXJsLnVybCk7XG4gICAgfVxuXG4gICAgaWYgKG9yZykge1xuICAgICAgZGlzcGxheURhdGFbXCJUZWFtXCJdID0gY29sb3JzLnByaW1hcnkob3JnLm5hbWUpICsgY29sb3JzLmRpbShgICgke29yZy5pZH0pYCk7XG4gICAgfVxuXG4gICAgZGlzcGxheURhdGFbXCJDb25maWdcIl0gPSBjb2xvcnMuZGltKGdldENvbmZpZ1BhdGgoKSk7XG5cbiAgICBrZXlWYWx1ZShkaXNwbGF5RGF0YSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,39 +1,5 @@
|
|
|
1
1
|
import { colors } from "../lib/output.js";
|
|
2
|
-
//
|
|
3
|
-
const KNOWN_COMMANDS = [
|
|
4
|
-
"send",
|
|
5
|
-
"status",
|
|
6
|
-
"login",
|
|
7
|
-
"logout",
|
|
8
|
-
"whoami",
|
|
9
|
-
"doctor",
|
|
10
|
-
"onboarding",
|
|
11
|
-
"help",
|
|
12
|
-
"sms send",
|
|
13
|
-
"sms list",
|
|
14
|
-
"sms get",
|
|
15
|
-
"sms batch",
|
|
16
|
-
"sms schedule",
|
|
17
|
-
"sms scheduled",
|
|
18
|
-
"sms cancel",
|
|
19
|
-
"credits balance",
|
|
20
|
-
"credits history",
|
|
21
|
-
"keys list",
|
|
22
|
-
"keys create",
|
|
23
|
-
"keys revoke",
|
|
24
|
-
"webhooks list",
|
|
25
|
-
"webhooks create",
|
|
26
|
-
"webhooks delete",
|
|
27
|
-
"webhooks test",
|
|
28
|
-
"webhooks listen",
|
|
29
|
-
"webhooks deliveries",
|
|
30
|
-
"webhooks rotate-secret",
|
|
31
|
-
"logs tail",
|
|
32
|
-
"config get",
|
|
33
|
-
"config set",
|
|
34
|
-
"config reset",
|
|
35
|
-
];
|
|
36
|
-
// Common typos and their corrections
|
|
2
|
+
// Curated intent-based redirects (map what people mean, not just spelling).
|
|
37
3
|
const TYPO_MAP = {
|
|
38
4
|
"text": "send",
|
|
39
5
|
"txt": "send",
|
|
@@ -62,6 +28,10 @@ const TYPO_MAP = {
|
|
|
62
28
|
"setup": "onboarding",
|
|
63
29
|
"init": "onboarding",
|
|
64
30
|
"start": "onboarding",
|
|
31
|
+
"pricing": "countries",
|
|
32
|
+
"prices": "countries",
|
|
33
|
+
"numbers countries": "countries",
|
|
34
|
+
"numbers pricing": "countries",
|
|
65
35
|
};
|
|
66
36
|
/**
|
|
67
37
|
* Calculate Levenshtein distance between two strings
|
|
@@ -89,54 +59,69 @@ function levenshteinDistance(a, b) {
|
|
|
89
59
|
/**
|
|
90
60
|
* Find similar commands based on Levenshtein distance
|
|
91
61
|
*/
|
|
92
|
-
function findSimilarCommands(input, maxDistance = 3) {
|
|
62
|
+
function findSimilarCommands(input, known, maxDistance = 3) {
|
|
93
63
|
const inputLower = input.toLowerCase();
|
|
94
64
|
const suggestions = [];
|
|
95
|
-
for (const command of
|
|
65
|
+
for (const command of known) {
|
|
96
66
|
const distance = levenshteinDistance(inputLower, command.toLowerCase());
|
|
97
67
|
if (distance <= maxDistance) {
|
|
98
68
|
suggestions.push({ command, distance });
|
|
99
69
|
}
|
|
100
70
|
}
|
|
101
|
-
// Sort by distance and return top 3
|
|
102
71
|
return suggestions
|
|
103
72
|
.sort((a, b) => a.distance - b.distance)
|
|
104
73
|
.slice(0, 3)
|
|
105
74
|
.map((s) => s.command);
|
|
106
75
|
}
|
|
107
76
|
const hook = async function (options) {
|
|
108
|
-
|
|
109
|
-
|
|
77
|
+
// oclif joins topic + subcommand with a colon internally; normalize to the
|
|
78
|
+
// space-separated form users actually type.
|
|
79
|
+
const inputCommand = options.id.replace(/:/g, " ");
|
|
80
|
+
// Derive the command + topic lists from the loaded manifest so suggestions and
|
|
81
|
+
// the fallback topic list can never drift from what actually ships.
|
|
82
|
+
const known = this.config.commands
|
|
83
|
+
.filter((c) => !c.hidden)
|
|
84
|
+
.map((c) => c.id.replace(/:/g, " "))
|
|
85
|
+
.filter(Boolean);
|
|
86
|
+
const topics = this.config.topics
|
|
87
|
+
.filter((t) => !t.hidden && !t.name.includes(" ") && !t.name.includes(":"))
|
|
88
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
110
89
|
console.log();
|
|
111
90
|
console.log(colors.error(`Command not found: ${colors.code(inputCommand)}`));
|
|
112
91
|
console.log();
|
|
113
|
-
// Check for known typos first
|
|
114
92
|
const typoFix = TYPO_MAP[inputCommand.toLowerCase()];
|
|
115
93
|
if (typoFix) {
|
|
116
94
|
console.log(colors.dim("Did you mean?"));
|
|
117
95
|
console.log(` ${colors.code(`sendly ${typoFix}`)}`);
|
|
118
96
|
console.log();
|
|
119
|
-
return;
|
|
120
97
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
98
|
+
else {
|
|
99
|
+
const similar = findSimilarCommands(inputCommand, known);
|
|
100
|
+
if (similar.length > 0) {
|
|
101
|
+
console.log(colors.dim("Did you mean?"));
|
|
102
|
+
similar.forEach((cmd) => {
|
|
103
|
+
console.log(` ${colors.code(`sendly ${cmd}`)}`);
|
|
104
|
+
});
|
|
105
|
+
console.log();
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
if (topics.length > 0) {
|
|
109
|
+
console.log(colors.dim("Topics:"));
|
|
110
|
+
const width = Math.max(...topics.map((t) => t.name.length), 8);
|
|
111
|
+
for (const t of topics) {
|
|
112
|
+
const desc = (t.description || "").split("\n")[0];
|
|
113
|
+
console.log(` ${colors.code(t.name.padEnd(width))} ${colors.dim(desc)}`);
|
|
114
|
+
}
|
|
115
|
+
console.log();
|
|
116
|
+
}
|
|
117
|
+
console.log(`Run ${colors.code("sendly --help")} for all commands.`);
|
|
118
|
+
console.log();
|
|
119
|
+
}
|
|
130
120
|
}
|
|
131
|
-
//
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
console.log(` ${colors.code("sendly keys")} Manage API keys`);
|
|
136
|
-
console.log(` ${colors.code("sendly webhooks")} Manage webhooks`);
|
|
137
|
-
console.log();
|
|
138
|
-
console.log(`Run ${colors.code("sendly --help")} for all commands.`);
|
|
139
|
-
console.log();
|
|
121
|
+
// An unknown command is an error: exit non-zero so a typo in a CI/deploy
|
|
122
|
+
// script fails loudly instead of silently going green. this.exit() is the
|
|
123
|
+
// oclif-honored mechanism (process.exitCode alone gets overridden to 0).
|
|
124
|
+
this.exit(127);
|
|
140
125
|
};
|
|
141
126
|
export default hook;
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC1ub3QtZm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvY29tbWFuZC1ub3QtZm91bmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFDLGlDQUFpQztBQUNqQyxNQUFNLGNBQWMsR0FBRztJQUNyQixNQUFNO0lBQ04sUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0lBQ1IsUUFBUTtJQUNSLFFBQVE7SUFDUixZQUFZO0lBQ1osTUFBTTtJQUNOLFVBQVU7SUFDVixVQUFVO0lBQ1YsU0FBUztJQUNULFdBQVc7SUFDWCxjQUFjO0lBQ2QsZUFBZTtJQUNmLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLFdBQVc7SUFDWCxhQUFhO0lBQ2IsYUFBYTtJQUNiLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixpQkFBaUI7SUFDakIscUJBQXFCO0lBQ3JCLHdCQUF3QjtJQUN4QixXQUFXO0lBQ1gsWUFBWTtJQUNaLFlBQVk7SUFDWixjQUFjO0NBQ2YsQ0FBQztBQUVGLHFDQUFxQztBQUNyQyxNQUFNLFFBQVEsR0FBMkI7SUFDdkMsTUFBTSxFQUFFLE1BQU07SUFDZCxLQUFLLEVBQUUsTUFBTTtJQUNiLEtBQUssRUFBRSxNQUFNO0lBQ2IsU0FBUyxFQUFFLFVBQVU7SUFDckIsVUFBVSxFQUFFLFVBQVU7SUFDdEIsU0FBUyxFQUFFLGlCQUFpQjtJQUM1QixRQUFRLEVBQUUsaUJBQWlCO0lBQzNCLEtBQUssRUFBRSxXQUFXO0lBQ2xCLFFBQVEsRUFBRSxXQUFXO0lBQ3JCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLFNBQVMsRUFBRSxlQUFlO0lBQzFCLE1BQU0sRUFBRSxlQUFlO0lBQ3ZCLE9BQU8sRUFBRSxlQUFlO0lBQ3hCLEtBQUssRUFBRSxXQUFXO0lBQ2xCLE1BQU0sRUFBRSxXQUFX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cnQgeyBjb2xvcnMgfSBmcm9tIFwiLi4vbGliL291dHB1dC5qc1wiO1xuXG4vLyBLbm93biBjb21tYW5kcyBmb3Igc3VnZ2VzdGlvbnNcbmNvbnN0IEtOT1dOX0NPTU1BTkRTID0gW1xuICBcInNlbmRcIixcbiAgXCJzdGF0dXNcIixcbiAgXCJsb2dpblwiLFxuICBcImxvZ291dFwiLFxuICBcIndob2FtaVwiLFxuICBcImRvY3RvclwiLFxuICBcIm9uYm9hcmRpbmdcIixcbiAgXCJoZWxwXCIsXG4gIFwic21zIHNlbmRcIixcbiAgXCJzbXMgbGlzdFwiLFxuICBcInNtcyBnZXRcIixcbiAgXCJzbXMgYmF0Y2hcIixcbiAgXCJzbXMgc2NoZWR1bGVcIixcbiAgXCJzbXMgc2NoZWR1bGVkXCIsXG4gIFwic21zIGNhbmNlbFwiLFxuICBcImNyZWRpdHMgYmFsYW5jZVwiLFxuICBcImNyZWRpdHMgaGlzdG9yeVwiLFxuICBcImtleXMgbGlzdFwiLFxuICBcImtleXMgY3JlYXRlXCIsXG4gIFwia2V5cyByZXZva2VcIixcbiAgXCJ3ZWJob29rcyBsaXN0XCIsXG4gIFwid2ViaG9va3MgY3JlYXRlXCIsXG4gIFwid2ViaG9va3MgZGVsZXRlXCIsXG4gIFwid2ViaG9va3MgdGVzdFwiLFxuICBcIndlYmhvb2tzIGxpc3RlblwiLFxuICBcIndlYmhvb2tzIGRlbGl2ZXJpZXNcIixcbiAgXCJ3ZWJob29rcyByb3RhdGUtc2VjcmV0XCIsXG4gIFwibG9ncyB0YWlsXCIsXG4gIFwiY29uZmlnIGdldFwiLFxuICBcImNvbmZpZyBzZXRcIixcbiAgXCJjb25maWcgcmVzZXRcIixcbl07XG5cbi8vIENvbW1vbiB0eXBvcyBhbmQgdGhlaXIgY29ycmVjdGlvbnNcbmNvbnN0IFRZUE9fTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBcInRleHRcIjogXCJzZW5kXCIsXG4gIFwidHh0XCI6IFwic2VuZFwiLFxuICBcIm1zZ1wiOiBcInNlbmRcIixcbiAgXCJtZXNzYWdlXCI6IFwic21zIHNlbmRcIixcbiAgXCJtZXNzYWdlc1wiOiBcInNtcyBsaXN0XCIsXG4gIFwiYmFsYW5jZVwiOiBcImNyZWRpdHMgYmFsYW5jZVwiLFxuICBcImNyZWRpdFwiOiBcImNyZWRpdHMgYmFsYW5jZVwiLFxuICBcImtleVwiOiBcImtleXMgbGlzdFwiLFxuICBcImFwaWtleVwiOiBcImtleXMgbGlzdFwiLFxuICBcImFwaWtleXNcIjogXCJrZXlzIGxpc3RcIixcbiAgXCJ3ZWJob29rXCI6IFwid2ViaG9va3MgbGlzdFwiLFxuICBcImhvb2tcIjogXCJ3ZWJob29rcyBsaXN0XCIsXG4gIFwiaG9va3NcIjogXCJ3ZWJob29rcyBsaXN0XCIsXG4gIFwibG9nXCI6IFwibG9ncyB0YWlsXCIsXG4gIFwidGFpbFwiOiBcImxvZ3MgdGFpbFwiLFxuICBcImF1dGhcIjogXCJsb2dpblwiLFxuICBcInNpZ25pblwiOiBcImxvZ2luXCIsXG4gIFwic2lnbm91dFwiOiBcImxvZ291dFwiLFxuICBcIm1lXCI6IFwid2hvYW1pXCIsXG4gIFwiaW5mb1wiOiBcInN0YXR1c1wiLFxuICBcImRhc2hib2FyZFwiOiBcInN0YXR1c1wiLFxuICBcImFjY291bnRcIjogXCJzdGF0dXNcIixcbiAgXCJjaGVja1wiOiBcImRvY3RvclwiLFxuICBcInRlc3RcIjogXCJkb2N0b3JcIixcbiAgXCJzZXR1cFwiOiBcIm9uYm9hcmRpbmdcIixcbiAgXCJpbml0XCI6IFwib25ib2FyZGluZ1wiLFxuICBcInN0YXJ0XCI6IFwib25ib2FyZGluZ1wiLFxufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgTGV2ZW5zaHRlaW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gc3RyaW5nc1xuICovXG5mdW5jdGlvbiBsZXZlbnNodGVpbkRpc3RhbmNlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgbWF0cml4OiBudW1iZXJbXVtdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgIG1hdHJpeFtpXSA9IFtpXTtcbiAgfVxuXG4gIGZvciAobGV0IGogPSAwOyBqIDw9IGEubGVuZ3RoOyBqKyspIHtcbiAgICBtYXRyaXhbMF1bal0gPSBqO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAxOyBqIDw9IGEubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT09IGEuY2hhckF0KGogLSAxKSkge1xuICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbaSAtIDFdW2ogLSAxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICAgIG1hdHJpeFtpIC0gMV1baiAtIDFdICsgMSxcbiAgICAgICAgICBtYXRyaXhbaV1baiAtIDFdICsgMSxcbiAgICAgICAgICBtYXRyaXhbaSAtIDFdW2pdICsgMSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF0cml4W2IubGVuZ3RoXVthLmxlbmd0aF07XG59XG5cbi8qKlxuICogRmluZCBzaW1pbGFyIGNvbW1hbmRzIGJhc2VkIG9uIExldmVuc2h0ZWluIGRpc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGZpbmRTaW1pbGFyQ29tbWFuZHMoaW5wdXQ6IHN0cmluZywgbWF4RGlzdGFuY2UgPSAzKTogc3RyaW5nW10ge1xuICBjb25zdCBpbnB1dExvd2VyID0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgc3VnZ2VzdGlvbnM6IEFycmF5PHsgY29tbWFuZDogc3RyaW5nOyBkaXN0YW5jZTogbnVtYmVyIH0+ID0gW107XG5cbiAgZm9yIChjb25zdCBjb21tYW5kIG9mIEtOT1dOX0NPTU1BTkRTKSB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBsZXZlbnNodGVpbkRpc3RhbmNlKGlucHV0TG93ZXIsIGNvbW1hbmQudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKGRpc3RhbmNlIDw9IG1heERpc3RhbmNlKSB7XG4gICAgICBzdWdnZXN0aW9ucy5wdXNoKHsgY29tbWFuZCwgZGlzdGFuY2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU29ydCBieSBkaXN0YW5jZSBhbmQgcmV0dXJuIHRvcCAzXG4gIHJldHVybiBzdWdnZXN0aW9uc1xuICAgIC5zb3J0KChhLCBiKSA9PiBhLmRpc3RhbmNlIC0gYi5kaXN0YW5jZSlcbiAgICAuc2xpY2UoMCwgMylcbiAgICAubWFwKChzKSA9PiBzLmNvbW1hbmQpO1xufVxuXG5jb25zdCBob29rOiBIb29rPFwiY29tbWFuZF9ub3RfZm91bmRcIj4gPSBhc3luYyBmdW5jdGlvbiAob3B0aW9ucykge1xuICBjb25zdCB7IGlkIH0gPSBvcHRpb25zO1xuICBjb25zdCBpbnB1dENvbW1hbmQgPSBpZDtcblxuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZyhjb2xvcnMuZXJyb3IoYENvbW1hbmQgbm90IGZvdW5kOiAke2NvbG9ycy5jb2RlKGlucHV0Q29tbWFuZCl9YCkpO1xuICBjb25zb2xlLmxvZygpO1xuXG4gIC8vIENoZWNrIGZvciBrbm93biB0eXBvcyBmaXJzdFxuICBjb25zdCB0eXBvRml4ID0gVFlQT19NQVBbaW5wdXRDb21tYW5kLnRvTG93ZXJDYXNlKCldO1xuICBpZiAodHlwb0ZpeCkge1xuICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oXCJEaWQgeW91IG1lYW4/XCIpKTtcbiAgICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5jb2RlKGBzZW5kbHkgJHt0eXBvRml4fWApfWApO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRmluZCBzaW1pbGFyIGNvbW1hbmRzXG4gIGNvbnN0IHNpbWlsYXIgPSBmaW5kU2ltaWxhckNvbW1hbmRzKGlucHV0Q29tbWFuZCk7XG4gIGlmIChzaW1pbGFyLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiRGlkIHlvdSBtZWFuP1wiKSk7XG4gICAgc2ltaWxhci5mb3JFYWNoKChjbWQpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3JzLmNvZGUoYHNlbmRseSAke2NtZH1gKX1gKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmF1bHQgaGVscFxuICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiQXZhaWxhYmxlIHRvcGljczpcIikpO1xuICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5jb2RlKFwic2VuZGx5IHNtc1wiKX0gICAgICAgIFNlbmQgYW5kIG1hbmFnZSBTTVMgbWVzc2FnZXNgKTtcbiAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMuY29kZShcInNlbmRseSBjcmVkaXRzXCIpfSAgICBDaGVjayBjcmVkaXQgYmFsYW5jZWApO1xuICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5jb2RlKFwic2VuZGx5IGtleXNcIil9ICAgICAgIE1hbmFnZSBBUEkga2V5c2ApO1xuICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5jb2RlKFwic2VuZGx5IHdlYmhvb2tzXCIpfSAgIE1hbmFnZSB3ZWJob29rc2ApO1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZyhgUnVuICR7Y29sb3JzLmNvZGUoXCJzZW5kbHkgLS1oZWxwXCIpfSBmb3IgYWxsIGNvbW1hbmRzLmApO1xuICBjb25zb2xlLmxvZygpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaG9vaztcbiJdfQ==
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC1ub3QtZm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvY29tbWFuZC1ub3QtZm91bmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFDLDRFQUE0RTtBQUM1RSxNQUFNLFFBQVEsR0FBMkI7SUFDdkMsTUFBTSxFQUFFLE1BQU07SUFDZCxLQUFLLEVBQUUsTUFBTTtJQUNiLEtBQUssRUFBRSxNQUFNO0lBQ2IsU0FBUyxFQUFFLFVBQVU7SUFDckIsVUFBVSxFQUFFLFVBQVU7SUFDdEIsU0FBUyxFQUFFLGlCQUFpQjtJQUM1QixRQUFRLEVBQUUsaUJBQWlCO0lBQzNCLEtBQUssRUFBRSxXQUFXO0lBQ2xCLFFBQVEsRUFBRSxXQUFXO0lBQ3JCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLFNBQVMsRUFBRSxlQUFlO0lBQzFCLE1BQU0sRUFBRSxlQUFlO0lBQ3ZCLE9BQU8sRUFBRSxlQUFlO0lBQ3hCLEtBQUssRUFBRSxXQUFXO0lBQ2xCLE1BQU0sRUFBRSxXQUFXO0lBQ25CLE1BQU0sRUFBRSxPQUFPO0lBQ2YsUUFBUSxFQUFFLE9BQU87SUFDakIsU0FBUyxFQUFFLFFBQVE7SUFDbkIsSUFBSSxFQUFFLFFBQVE7SUFDZCxNQUFNLEVBQUUsUUFBUTtJQUNoQixXQUFXLEVBQUUsUUFBUTtJQUNyQixTQUFTLEVBQUUsUUFBUTtJQUNuQixPQUFPLEVBQUUsUUFBUTtJQUNqQixNQUFNLEVBQUUsUUFBUTtJQUNoQixPQUFPLEVBQUUsWUFBWTtJQUNyQixNQUFNLEVBQUUsWUFBWTtJQUNwQixPQUFPLEVBQUUsWUFBWTtJQUNyQixTQUFTLEVBQUUsV0FBVztJQUN0QixRQUFRLEVBQUUsV0FBVztJQUNyQixtQkFBbUIsRUFBRSxXQUFXO0lBQ2hDLGlCQUFpQixFQUFFLFdBQVc7Q0FDL0IsQ0FBQztBQUVGOztHQUVHO0FBQ0gsU0FBUyxtQkFB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RyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNsRCxPQUFPLENBQUMsR0FBRyxDQUNULEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDOUQsQ0FBQztnQkFDSixDQUFDO2dCQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoQixDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDckUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLDBFQUEwRTtJQUMxRSx5RUFBeUU7SUFDekUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRixlQUFlLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhvb2sgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IGNvbG9ycyB9IGZyb20gXCIuLi9saWIvb3V0cHV0LmpzXCI7XG5cbi8vIEN1cmF0ZWQgaW50ZW50LWJhc2VkIHJlZGlyZWN0cyAobWFwIHdoYXQgcGVvcGxlIG1lYW4sIG5vdCBqdXN0IHNwZWxsaW5nKS5cbmNvbnN0IFRZUE9fTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBcInRleHRcIjogXCJzZW5kXCIsXG4gIFwidHh0XCI6IFwic2VuZFwiLFxuICBcIm1zZ1wiOiBcInNlbmRcIixcbiAgXCJtZXNzYWdlXCI6IFwic21zIHNlbmRcIixcbiAgXCJtZXNzYWdlc1wiOiBcInNtcyBsaXN0XCIsXG4gIFwiYmFsYW5jZVwiOiBcImNyZWRpdHMgYmFsYW5jZVwiLFxuICBcImNyZWRpdFwiOiBcImNyZWRpdHMgYmFsYW5jZVwiLFxuICBcImtleVwiOiBcImtleXMgbGlzdFwiLFxuICBcImFwaWtleVwiOiBcImtleXMgbGlzdFwiLFxuICBcImFwaWtleXNcIjogXCJrZXlzIGxpc3RcIixcbiAgXCJ3ZWJob29rXCI6IFwid2ViaG9va3MgbGlzdFwiLFxuICBcImhvb2tcIjogXCJ3ZWJob29rcyBsaXN0XCIsXG4gIFwiaG9va3NcIjogXCJ3ZWJob29rcyBsaXN0XCIsXG4gIFwibG9nXCI6IFwibG9ncyB0YWlsXCIsXG4gIFwidGFpbFwiOiBcImxvZ3MgdGFpbFwiLFxuICBcImF1dGhcIjogXCJsb2dpblwiLFxuICBcInNpZ25pblwiOiBcImxvZ2luXCIsXG4gIFwic2lnbm91dFwiOiBcImxvZ291dFwiLFxuICBcIm1lXCI6IFwid2hvYW1pXCIsXG4gIFwiaW5mb1wiOiBcInN0YXR1c1wiLFxuICBcImRhc2hib2FyZFwiOiBcInN0YXR1c1wiLFxuICBcImFjY291bnRcIjogXCJzdGF0dXNcIixcbiAgXCJjaGVja1wiOiBcImRvY3RvclwiLFxuICBcInRlc3RcIjogXCJkb2N0b3JcIixcbiAgXCJzZXR1cFwiOiBcIm9uYm9hcmRpbmdcIixcbiAgXCJpbml0XCI6IFwib25ib2FyZGluZ1wiLFxuICBcInN0YXJ0XCI6IFwib25ib2FyZGluZ1wiLFxuICBcInByaWNpbmdcIjogXCJjb3VudHJpZXNcIixcbiAgXCJwcmljZXNcIjogXCJjb3VudHJpZXNcIixcbiAgXCJudW1iZXJzIGNvdW50cmllc1wiOiBcImNvdW50cmllc1wiLFxuICBcIm51bWJlcnMgcHJpY2luZ1wiOiBcImNvdW50cmllc1wiLFxufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgTGV2ZW5zaHRlaW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gc3RyaW5nc1xuICovXG5mdW5jdGlvbiBsZXZlbnNodGVpbkRpc3RhbmNlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgbWF0cml4OiBudW1iZXJbXVtdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgIG1hdHJpeFtpXSA9IFtpXTtcbiAgfVxuXG4gIGZvciAobGV0IGogPSAwOyBqIDw9IGEubGVuZ3RoOyBqKyspIHtcbiAgICBtYXRyaXhbMF1bal0gPSBqO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAxOyBqIDw9IGEubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT09IGEuY2hhckF0KGogLSAxKSkge1xuICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbaSAtIDFdW2ogLSAxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICAgIG1hdHJpeFtpIC0gMV1baiAtIDFdICsgMSxcbiAgICAgICAgICBtYXRyaXhbaV1baiAtIDFdICsgMSxcbiAgICAgICAgICBtYXRyaXhbaSAtIDFdW2pdICsgMSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF0cml4W2IubGVuZ3RoXVthLmxlbmd0aF07XG59XG5cbi8qKlxuICogRmluZCBzaW1pbGFyIGNvbW1hbmRzIGJhc2VkIG9uIExldmVuc2h0ZWluIGRpc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGZpbmRTaW1pbGFyQ29tbWFuZHMoXG4gIGlucHV0OiBzdHJpbmcsXG4gIGtub3duOiBzdHJpbmdbXSxcbiAgbWF4RGlzdGFuY2UgPSAzLFxuKTogc3RyaW5nW10ge1xuICBjb25zdCBpbnB1dExvd2VyID0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgc3VnZ2VzdGlvbnM6IEFycmF5PHsgY29tbWFuZDogc3RyaW5nOyBkaXN0YW5jZTogbnVtYmVyIH0+ID0gW107XG5cbiAgZm9yIChjb25zdCBjb21tYW5kIG9mIGtub3duKSB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBsZXZlbnNodGVpbkRpc3RhbmNlKGlucHV0TG93ZXIsIGNvbW1hbmQudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKGRpc3RhbmNlIDw9IG1heERpc3RhbmNlKSB7XG4gICAgICBzdWdnZXN0aW9ucy5wdXNoKHsgY29tbWFuZCwgZGlzdGFuY2UgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1Z2dlc3Rpb25zXG4gICAgLnNvcnQoKGEsIGIpID0+IGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlKVxuICAgIC5zbGljZSgwLCAzKVxuICAgIC5tYXAoKHMpID0+IHMuY29tbWFuZCk7XG59XG5cbmNvbnN0IGhvb2s6IEhvb2s8XCJjb21tYW5kX25vdF9mb3VuZFwiPiA9IGFzeW5jIGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIC8vIG9jbGlmIGpvaW5zIHRvcGljICsgc3ViY29tbWFuZCB3aXRoIGEgY29sb24gaW50ZXJuYWxseTsgbm9ybWFsaXplIHRvIHRoZVxuICAvLyBzcGFjZS1zZXBhcmF0ZWQgZm9ybSB1c2VycyBhY3R1YWxseSB0eXBlLlxuICBjb25zdCBpbnB1dENvbW1hbmQgPSBvcHRpb25zLmlkLnJlcGxhY2UoLzovZywgXCIgXCIpO1xuXG4gIC8vIERlcml2ZSB0aGUgY29tbWFuZCArIHRvcGljIGxpc3RzIGZyb20gdGhlIGxvYWRlZCBtYW5pZmVzdCBzbyBzdWdnZXN0aW9ucyBhbmRcbiAgLy8gdGhlIGZhbGxiYWNrIHRvcGljIGxpc3QgY2FuIG5ldmVyIGRyaWZ0IGZyb20gd2hhdCBhY3R1YWxseSBzaGlwcy5cbiAgY29uc3Qga25vd24gPSB0aGlzLmNvbmZpZy5jb21tYW5kc1xuICAgIC5maWx0ZXIoKGMpID0+ICFjLmhpZGRlbilcbiAgICAubWFwKChjKSA9PiBjLmlkLnJlcGxhY2UoLzovZywgXCIgXCIpKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHRvcGljcyA9IHRoaXMuY29uZmlnLnRvcGljc1xuICAgIC5maWx0ZXIoKHQpID0+ICF0LmhpZGRlbiAmJiAhdC5uYW1lLmluY2x1ZGVzKFwiIFwiKSAmJiAhdC5uYW1lLmluY2x1ZGVzKFwiOlwiKSlcbiAgICAuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG5cbiAgY29uc29sZS5sb2coKTtcbiAgY29uc29sZS5sb2coY29sb3JzLmVycm9yKGBDb21tYW5kIG5vdCBmb3VuZDogJHtjb2xvcnMuY29kZShpbnB1dENvbW1hbmQpfWApKTtcbiAgY29uc29sZS5sb2coKTtcblxuICBjb25zdCB0eXBvRml4ID0gVFlQT19NQVBbaW5wdXRDb21tYW5kLnRvTG93ZXJDYXNlKCldO1xuICBpZiAodHlwb0ZpeCkge1xuICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oXCJEaWQgeW91IG1lYW4/XCIpKTtcbiAgICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5jb2RlKGBzZW5kbHkgJHt0eXBvRml4fWApfWApO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc2ltaWxhciA9IGZpbmRTaW1pbGFyQ29tbWFuZHMoaW5wdXRDb21tYW5kLCBrbm93bik7XG4gICAgaWYgKHNpbWlsYXIubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIkRpZCB5b3UgbWVhbj9cIikpO1xuICAgICAgc2ltaWxhci5mb3JFYWNoKChjbWQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMuY29kZShgc2VuZGx5ICR7Y21kfWApfWApO1xuICAgICAgfSk7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodG9waWNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIlRvcGljczpcIikpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KC4uLnRvcGljcy5tYXAoKHQpID0+IHQubmFtZS5sZW5ndGgpLCA4KTtcbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHRvcGljcykge1xuICAgICAgICAgIGNvbnN0IGRlc2MgPSAodC5kZXNjcmlwdGlvbiB8fCBcIlwiKS5zcGxpdChcIlxcblwiKVswXTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAgICR7Y29sb3JzLmNvZGUodC5uYW1lLnBhZEVuZCh3aWR0aCkpfSAgJHtjb2xvcnMuZGltKGRlc2MpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coYFJ1biAke2NvbG9ycy5jb2RlKFwic2VuZGx5IC0taGVscFwiKX0gZm9yIGFsbCBjb21tYW5kcy5gKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQW4gdW5rbm93biBjb21tYW5kIGlzIGFuIGVycm9yOiBleGl0IG5vbi16ZXJvIHNvIGEgdHlwbyBpbiBhIENJL2RlcGxveVxuICAvLyBzY3JpcHQgZmFpbHMgbG91ZGx5IGluc3RlYWQgb2Ygc2lsZW50bHkgZ29pbmcgZ3JlZW4uIHRoaXMuZXhpdCgpIGlzIHRoZVxuICAvLyBvY2xpZi1ob25vcmVkIG1lY2hhbmlzbSAocHJvY2Vzcy5leGl0Q29kZSBhbG9uZSBnZXRzIG92ZXJyaWRkZW4gdG8gMCkuXG4gIHRoaXMuZXhpdCgxMjcpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaG9vaztcbiJdfQ==
|
package/dist/lib/api-client.d.ts
CHANGED
|
@@ -36,6 +36,9 @@ export declare class RateLimitError extends ApiError {
|
|
|
36
36
|
export declare class InsufficientCreditsError extends ApiError {
|
|
37
37
|
constructor(message?: string);
|
|
38
38
|
}
|
|
39
|
+
export declare class PaymentMethodRequiredError extends ApiError {
|
|
40
|
+
constructor(message?: string);
|
|
41
|
+
}
|
|
39
42
|
export declare class NotFoundError extends ApiError {
|
|
40
43
|
constructor(message?: string, hint?: string);
|
|
41
44
|
}
|
|
@@ -53,12 +56,17 @@ declare class ApiClient {
|
|
|
53
56
|
body?: Record<string, unknown>;
|
|
54
57
|
query?: Record<string, string | number | boolean | undefined>;
|
|
55
58
|
requireAuth?: boolean;
|
|
59
|
+
idempotencyKey?: string;
|
|
60
|
+
autoIdempotencyKey?: boolean;
|
|
56
61
|
}): Promise<T>;
|
|
57
62
|
private updateRateLimitInfo;
|
|
58
63
|
private handleError;
|
|
59
64
|
getRateLimitInfo(): RateLimitInfo | undefined;
|
|
60
65
|
get<T>(path: string, query?: Record<string, string | number | boolean | undefined>, requireAuth?: boolean): Promise<T>;
|
|
61
|
-
post<T>(path: string, body?: Record<string, unknown>, requireAuth?: boolean
|
|
66
|
+
post<T>(path: string, body?: Record<string, unknown>, requireAuth?: boolean, options?: {
|
|
67
|
+
idempotencyKey?: string;
|
|
68
|
+
autoIdempotencyKey?: boolean;
|
|
69
|
+
}): Promise<T>;
|
|
62
70
|
patch<T>(path: string, body?: Record<string, unknown>, requireAuth?: boolean): Promise<T>;
|
|
63
71
|
put<T>(path: string, body?: Record<string, unknown>, requireAuth?: boolean): Promise<T>;
|
|
64
72
|
delete<T>(path: string, requireAuth?: boolean): Promise<T>;
|