@sendly/cli 3.8.2 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/templates/create.d.ts +12 -0
- package/dist/commands/templates/create.js +65 -0
- package/dist/commands/templates/delete.d.ts +14 -0
- package/dist/commands/templates/delete.js +68 -0
- package/dist/commands/templates/get.d.ts +13 -0
- package/dist/commands/templates/get.js +69 -0
- package/dist/commands/templates/list.d.ts +10 -0
- package/dist/commands/templates/list.js +49 -0
- package/dist/commands/templates/presets.d.ts +10 -0
- package/dist/commands/templates/presets.js +45 -0
- package/dist/commands/templates/publish.d.ts +13 -0
- package/dist/commands/templates/publish.js +57 -0
- package/dist/commands/verify/check.d.ts +14 -0
- package/dist/commands/verify/check.js +86 -0
- package/dist/commands/verify/list.d.ts +11 -0
- package/dist/commands/verify/list.js +74 -0
- package/dist/commands/verify/resend.d.ts +13 -0
- package/dist/commands/verify/resend.js +83 -0
- package/dist/commands/verify/send.d.ts +16 -0
- package/dist/commands/verify/send.js +105 -0
- package/dist/commands/verify/status.d.ts +13 -0
- package/dist/commands/verify/status.js +57 -0
- package/oclif.manifest.json +547 -1
- package/package.json +1 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
3
|
+
import { apiClient } from "../../lib/api-client.js";
|
|
4
|
+
import { json, colors, spinner, isJsonMode, table } from "../../lib/output.js";
|
|
5
|
+
export default class VerifyList extends AuthenticatedCommand {
|
|
6
|
+
static description = "List recent verifications";
|
|
7
|
+
static examples = [
|
|
8
|
+
"<%= config.bin %> verify list",
|
|
9
|
+
"<%= config.bin %> verify list --limit 10",
|
|
10
|
+
"<%= config.bin %> verify list --json",
|
|
11
|
+
];
|
|
12
|
+
static flags = {
|
|
13
|
+
...AuthenticatedCommand.baseFlags,
|
|
14
|
+
limit: Flags.integer({
|
|
15
|
+
char: "n",
|
|
16
|
+
description: "Number of verifications to show",
|
|
17
|
+
default: 20,
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
async run() {
|
|
21
|
+
const { flags } = await this.parse(VerifyList);
|
|
22
|
+
const listSpinner = spinner("Fetching verifications...");
|
|
23
|
+
if (!isJsonMode()) {
|
|
24
|
+
listSpinner.start();
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const response = await apiClient.get("/api/v1/verify", {
|
|
28
|
+
limit: flags.limit,
|
|
29
|
+
});
|
|
30
|
+
listSpinner.stop();
|
|
31
|
+
if (isJsonMode()) {
|
|
32
|
+
json(response);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (response.verifications.length === 0) {
|
|
36
|
+
console.log(colors.dim("No verifications found."));
|
|
37
|
+
console.log(colors.dim(`Send one with: ${colors.code('sendly verify send --to "+1234567890"')}`));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const statusColor = (status) => {
|
|
41
|
+
switch (status) {
|
|
42
|
+
case "verified":
|
|
43
|
+
return colors.success(status);
|
|
44
|
+
case "pending":
|
|
45
|
+
return colors.primary(status);
|
|
46
|
+
case "expired":
|
|
47
|
+
return colors.dim(status);
|
|
48
|
+
default:
|
|
49
|
+
return colors.error(status);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const rows = response.verifications.map((v) => ({
|
|
53
|
+
...v,
|
|
54
|
+
attemptsDisplay: `${v.attempts}/${v.max_attempts}`,
|
|
55
|
+
}));
|
|
56
|
+
table(rows, [
|
|
57
|
+
{ header: "ID", key: "id", width: 20, formatter: (v) => colors.code(String(v).slice(0, 16) + "...") },
|
|
58
|
+
{ header: "Phone", key: "phone", width: 16 },
|
|
59
|
+
{ header: "Status", key: "status", width: 12, formatter: (v) => statusColor(String(v)) },
|
|
60
|
+
{ header: "Attempts", key: "attemptsDisplay", width: 10 },
|
|
61
|
+
{ header: "Sandbox", key: "sandbox", width: 8, formatter: (v) => v ? colors.dim("yes") : "" },
|
|
62
|
+
{ header: "Created", key: "created_at", width: 20, formatter: (v) => new Date(String(v)).toLocaleString() },
|
|
63
|
+
]);
|
|
64
|
+
if (response.pagination.has_more) {
|
|
65
|
+
console.log(colors.dim(`\nShowing ${response.verifications.length} verifications. Use --limit to see more.`));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
listSpinner.stop();
|
|
70
|
+
throw err;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy92ZXJpZnkvbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBdUIvRSxNQUFNLENBQUMsT0FBTyxPQUFPLFVBQVcsU0FBUSxvQkFBb0I7SUFDMUQsTUFBTSxDQUFDLFdBQVcsR0FBRywyQkFBMkIsQ0FBQztJQUVqRCxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLCtCQUErQjtRQUMvQiwwQ0FBMEM7UUFDMUMsc0NBQXNDO0tBQ3ZDLENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTO1FBQ2pDLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ25CLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLGlDQUFpQztZQUM5QyxPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7S0FDSCxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2xCLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFB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TUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUU7YUFDNUcsQ0FBQyxDQUFDO1lBRUgsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqQyxPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxHQUFHLENBQ1IsYUFBYSxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sMENBQTBDLENBQ3JGLENBQ0YsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztZQUNsQixXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkQ29tbWFuZCB9IGZyb20gXCIuLi8uLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBhcGlDbGllbnQgfSBmcm9tIFwiLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7IGpzb24sIGNvbG9ycywgc3Bpbm5lciwgaXNKc29uTW9kZSwgdGFibGUgfSBmcm9tIFwiLi4vLi4vbGliL291dHB1dC5qc1wiO1xuXG5pbnRlcmZhY2UgVmVyaWZpY2F0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIHBob25lOiBzdHJpbmc7XG4gIGRlbGl2ZXJ5X3N0YXR1czogc3RyaW5nO1xuICBhdHRlbXB0czogbnVtYmVyO1xuICBtYXhfYXR0ZW1wdHM6IG51bWJlcjtcbiAgZXhwaXJlc19hdDogc3RyaW5nO1xuICB2ZXJpZmllZF9hdDogc3RyaW5nIHwgbnVsbDtcbiAgY3JlYXRlZF9hdDogc3RyaW5nO1xuICBzYW5kYm94OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgTGlzdFJlc3BvbnNlIHtcbiAgdmVyaWZpY2F0aW9uczogVmVyaWZpY2F0aW9uW107XG4gIHBhZ2luYXRpb246IHtcbiAgICBsaW1pdDogbnVtYmVyO1xuICAgIGhhc19tb3JlOiBib29sZWFuO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJpZnlMaXN0IGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPSBcIkxpc3QgcmVjZW50IHZlcmlmaWNhdGlvbnNcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiB2ZXJpZnkgbGlzdFwiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gdmVyaWZ5IGxpc3QgLS1saW1pdCAxMFwiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gdmVyaWZ5IGxpc3QgLS1qc29uXCIsXG4gIF07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgICBsaW1pdDogRmxhZ3MuaW50ZWdlcih7XG4gICAgICBjaGFyOiBcIm5cIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk51bWJlciBvZiB2ZXJpZmljYXRpb25zIHRvIHNob3dcIixcbiAgICAgIGRlZmF1bHQ6IDIwLFxuICAgIH0pLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGZsYWdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKFZlcmlmeUxpc3QpO1xuXG4gICAgY29uc3QgbGlzdFNwaW5uZXIgPSBzcGlubmVyKFwiRmV0Y2hpbmcgdmVyaWZpY2F0aW9ucy4uLlwiKTtcblxuICAgIGlmICghaXNKc29uTW9kZSgpKSB7XG4gICAgICBsaXN0U3Bpbm5lci5zdGFydCgpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5nZXQ8TGlzdFJlc3BvbnNlPihcIi9hcGkvdjEvdmVyaWZ5XCIsIHtcbiAgICAgICAgbGltaXQ6IGZsYWdzLmxpbWl0LFxuICAgICAgfSk7XG5cbiAgICAgIGxpc3RTcGlubmVyLnN0b3AoKTtcblxuICAgICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAgICBqc29uKHJlc3BvbnNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2UudmVyaWZpY2F0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIk5vIHZlcmlmaWNhdGlvbnMgZm91bmQuXCIpKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmRpbShcbiAgICAgICAgICAgIGBTZW5kIG9uZSB3aXRoOiAke2NvbG9ycy5jb2RlKCdzZW5kbHkgdmVyaWZ5IHNlbmQgLS10byBcIisxMjM0NTY3ODkwXCInKX1gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhdHVzQ29sb3IgPSAoc3RhdHVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgICBjYXNlIFwidmVyaWZpZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBjb2xvcnMuc3VjY2VzcyhzdGF0dXMpO1xuICAgICAgICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gY29sb3JzLnByaW1hcnkoc3RhdHVzKTtcbiAgICAgICAgICBjYXNlIFwiZXhwaXJlZFwiOlxuICAgICAgICAgICAgcmV0dXJuIGNvbG9ycy5kaW0oc3RhdHVzKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGNvbG9ycy5lcnJvcihzdGF0dXMpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByb3dzID0gcmVzcG9uc2UudmVyaWZpY2F0aW9ucy5tYXAoKHYpID0+ICh7XG4gICAgICAgIC4uLnYsXG4gICAgICAgIGF0dGVtcHRzRGlzcGxheTogYCR7di5hdHRlbXB0c30vJHt2Lm1heF9hdHRlbXB0c31gLFxuICAgICAgfSkpO1xuXG4gICAgICB0YWJsZShyb3dzLCBbXG4gICAgICAgIHsgaGVhZGVyOiBcIklEXCIsIGtleTogXCJpZFwiLCB3aWR0aDogMjAsIGZvcm1hdHRlcjogKHYpID0+IGNvbG9ycy5jb2RlKFN0cmluZyh2KS5zbGljZSgwLCAxNikgKyBcIi4uLlwiKSB9LFxuICAgICAgICB7IGhlYWRlcjogXCJQaG9uZVwiLCBrZXk6IFwicGhvbmVcIiwgd2lkdGg6IDE2IH0sXG4gICAgICAgIHsgaGVhZGVyOiBcIlN0YXR1c1wiLCBrZXk6IFwic3RhdHVzXCIsIHdpZHRoOiAxMiwgZm9ybWF0dGVyOiAodikgPT4gc3RhdHVzQ29sb3IoU3RyaW5nKHYpKSB9LFxuICAgICAgICB7IGhlYWRlcjogXCJBdHRlbXB0c1wiLCBrZXk6IFwiYXR0ZW1wdHNEaXNwbGF5XCIsIHdpZHRoOiAxMCB9LFxuICAgICAgICB7IGhlYWRlcjogXCJTYW5kYm94XCIsIGtleTogXCJzYW5kYm94XCIsIHdpZHRoOiA4LCBmb3JtYXR0ZXI6ICh2KSA9PiB2ID8gY29sb3JzLmRpbShcInllc1wiKSA6IFwiXCIgfSxcbiAgICAgICAgeyBoZWFkZXI6IFwiQ3JlYXRlZFwiLCBrZXk6IFwiY3JlYXRlZF9hdFwiLCB3aWR0aDogMjAsIGZvcm1hdHRlcjogKHYpID0+IG5ldyBEYXRlKFN0cmluZyh2KSkudG9Mb2NhbGVTdHJpbmcoKSB9LFxuICAgICAgXSk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5wYWdpbmF0aW9uLmhhc19tb3JlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgICAgICBgXFxuU2hvd2luZyAke3Jlc3BvbnNlLnZlcmlmaWNhdGlvbnMubGVuZ3RofSB2ZXJpZmljYXRpb25zLiBVc2UgLS1saW1pdCB0byBzZWUgbW9yZS5gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGxpc3RTcGlubmVyLnN0b3AoKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
export default class VerifyResend extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
id: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
10
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Args } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
3
|
+
import { apiClient } from "../../lib/api-client.js";
|
|
4
|
+
import { success, error, json, colors, spinner, isJsonMode, } from "../../lib/output.js";
|
|
5
|
+
export default class VerifyResend extends AuthenticatedCommand {
|
|
6
|
+
static description = "Resend an OTP verification code";
|
|
7
|
+
static examples = [
|
|
8
|
+
"<%= config.bin %> verify resend ver_xxx",
|
|
9
|
+
"<%= config.bin %> verify resend ver_xxx --json",
|
|
10
|
+
];
|
|
11
|
+
static args = {
|
|
12
|
+
id: Args.string({
|
|
13
|
+
description: "Verification ID",
|
|
14
|
+
required: true,
|
|
15
|
+
}),
|
|
16
|
+
};
|
|
17
|
+
static flags = {
|
|
18
|
+
...AuthenticatedCommand.baseFlags,
|
|
19
|
+
};
|
|
20
|
+
async run() {
|
|
21
|
+
const { args } = await this.parse(VerifyResend);
|
|
22
|
+
const resendSpinner = spinner("Resending verification code...");
|
|
23
|
+
if (!isJsonMode()) {
|
|
24
|
+
resendSpinner.start();
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const response = await apiClient.post(`/api/v1/verify/${args.id}/resend`, {});
|
|
28
|
+
resendSpinner.stop();
|
|
29
|
+
if (isJsonMode()) {
|
|
30
|
+
json(response);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (response.sandbox) {
|
|
34
|
+
success("Verification resent (Sandbox)", {
|
|
35
|
+
"Verification ID": colors.code(response.id),
|
|
36
|
+
Phone: response.phone,
|
|
37
|
+
"Sandbox Code": colors.success(response.sandbox_code || ""),
|
|
38
|
+
"Expires At": new Date(response.expires_at).toLocaleString(),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
success("Verification resent", {
|
|
43
|
+
"Verification ID": colors.code(response.id),
|
|
44
|
+
Phone: response.phone,
|
|
45
|
+
"Expires At": new Date(response.expires_at).toLocaleString(),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
resendSpinner.stop();
|
|
51
|
+
if (err.message?.includes("already_verified")) {
|
|
52
|
+
error("Verification already completed", {
|
|
53
|
+
hint: "This phone number has already been verified",
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
else if (err.message?.includes("expired")) {
|
|
57
|
+
error("Verification expired", {
|
|
58
|
+
hint: "Request a new verification instead",
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else if (err.message?.includes("max_resends")) {
|
|
62
|
+
error("Maximum resends exceeded", {
|
|
63
|
+
hint: "Request a new verification instead",
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
else if (err.message?.includes("not_found")) {
|
|
67
|
+
error("Verification not found", {
|
|
68
|
+
hint: "Check the verification ID is correct",
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
else if (err.message?.includes("rate_limit")) {
|
|
72
|
+
error("Too many resend requests", {
|
|
73
|
+
hint: "Wait a moment before trying again",
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
79
|
+
this.exit(1);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3ZlcmlmeS9yZXNlbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsSUFBSSxFQUNKLE1BQU0sRUFDTixPQUFPLEVBQ1AsVUFBVSxHQUNYLE1BQU0scUJBQXFCLENBQUM7QUFZN0IsTUFBTSxDQUFDLE9BQU8sT0FBTyxZQUFhLFNBQVEsb0JBQW9CO0lBQzVELE1BQU0sQ0FBQyxXQUFXLEdBQUcsaUNBQWlDLENBQUM7SUFFdkQsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQix5Q0FBeUM7UUFDekMsZ0RBQWdEO0tBQ2pELENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDZCxXQUFXLEVBQUUsaUJBQWlCO1lBQzlCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztLQUNILENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTO0tBQ2xDLENBQUM7SUFFRixLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaEQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDbEIsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQ25DLGtCQUFrQixJQUFJLENBQUMsRUFBRSxTQUFTLEVBQ2xDLEVBQUUsQ0FDSCxDQUFDO1lBRUYsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRXJCLElBQUksVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNmLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQywrQkFBK0IsRUFBRTtvQkFDdkMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUMzQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7b0JBQ3JCLGNBQWMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO29CQUMzRCxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLGNBQWMsRUFBRTtpQkFDN0QsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRTtvQkFDN0IsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUMzQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7b0JBQ3JCLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsY0FBYyxFQUFFO2lCQUM3RCxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7WUFDbEIsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRXJCLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxLQUFLLENBQUMsZ0NBQWdDLEVBQUU7b0JBQ3RDLElBQUksRUFBRSw2Q0FBNkM7aUJBQ3BELENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUM1QyxLQUFLLENBQUMsc0JBQXNCLEVBQUU7b0JBQzVCLElBQUksRUFBRSxvQ0FBb0M7aUJBQzNDLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxLQUFLLENBQUMsMEJBQTBCLEVBQUU7b0JBQ2hDLElBQUksRUFBRSxvQ0FBb0M7aUJBQzNDLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxLQUFLLENBQUMsd0JBQXdCLEVBQUU7b0JBQzlCLElBQUksRUFBRSxzQ0FBc0M7aUJBQzdDLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxLQUFLLENBQUMsMEJBQTBCLEVBQUU7b0JBQ2hDLElBQUksRUFBRSxtQ0FBbUM7aUJBQzFDLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEdBQUcsQ0FBQztZQUNaLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcmdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkQ29tbWFuZCB9IGZyb20gXCIuLi8uLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBhcGlDbGllbnQgfSBmcm9tIFwiLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7XG4gIHN1Y2Nlc3MsXG4gIGVycm9yLFxuICBqc29uLFxuICBjb2xvcnMsXG4gIHNwaW5uZXIsXG4gIGlzSnNvbk1vZGUsXG59IGZyb20gXCIuLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5cbmludGVyZmFjZSBSZXNlbmRSZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBwaG9uZTogc3RyaW5nO1xuICBleHBpcmVzX2F0OiBzdHJpbmc7XG4gIHNhbmRib3g6IGJvb2xlYW47XG4gIHNhbmRib3hfY29kZT86IHN0cmluZztcbiAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVyaWZ5UmVzZW5kIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPSBcIlJlc2VuZCBhbiBPVFAgdmVyaWZpY2F0aW9uIGNvZGVcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiB2ZXJpZnkgcmVzZW5kIHZlcl94eHhcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHZlcmlmeSByZXNlbmQgdmVyX3h4eCAtLWpzb25cIixcbiAgXTtcblxuICBzdGF0aWMgYXJncyA9IHtcbiAgICBpZDogQXJncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiVmVyaWZpY2F0aW9uIElEXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KSxcbiAgfTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGFyZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoVmVyaWZ5UmVzZW5kKTtcblxuICAgIGNvbnN0IHJlc2VuZFNwaW5uZXIgPSBzcGlubmVyKFwiUmVzZW5kaW5nIHZlcmlmaWNhdGlvbiBjb2RlLi4uXCIpO1xuXG4gICAgaWYgKCFpc0pzb25Nb2RlKCkpIHtcbiAgICAgIHJlc2VuZFNwaW5uZXIuc3RhcnQoKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnQucG9zdDxSZXNlbmRSZXNwb25zZT4oXG4gICAgICAgIGAvYXBpL3YxL3ZlcmlmeS8ke2FyZ3MuaWR9L3Jlc2VuZGAsXG4gICAgICAgIHt9LFxuICAgICAgKTtcblxuICAgICAgcmVzZW5kU3Bpbm5lci5zdG9wKCk7XG5cbiAgICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3BvbnNlLnNhbmRib3gpIHtcbiAgICAgICAgc3VjY2VzcyhcIlZlcmlmaWNhdGlvbiByZXNlbnQgKFNhbmRib3gpXCIsIHtcbiAgICAgICAgICBcIlZlcmlmaWNhdGlvbiBJRFwiOiBjb2xvcnMuY29kZShyZXNwb25zZS5pZCksXG4gICAgICAgICAgUGhvbmU6IHJlc3BvbnNlLnBob25lLFxuICAgICAgICAgIFwiU2FuZGJveCBDb2RlXCI6IGNvbG9ycy5zdWNjZXNzKHJlc3BvbnNlLnNhbmRib3hfY29kZSB8fCBcIlwiKSxcbiAgICAgICAgICBcIkV4cGlyZXMgQXRcIjogbmV3IERhdGUocmVzcG9uc2UuZXhwaXJlc19hdCkudG9Mb2NhbGVTdHJpbmcoKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzKFwiVmVyaWZpY2F0aW9uIHJlc2VudFwiLCB7XG4gICAgICAgICAgXCJWZXJpZmljYXRpb24gSURcIjogY29sb3JzLmNvZGUocmVzcG9uc2UuaWQpLFxuICAgICAgICAgIFBob25lOiByZXNwb25zZS5waG9uZSxcbiAgICAgICAgICBcIkV4cGlyZXMgQXRcIjogbmV3IERhdGUocmVzcG9uc2UuZXhwaXJlc19hdCkudG9Mb2NhbGVTdHJpbmcoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHJlc2VuZFNwaW5uZXIuc3RvcCgpO1xuXG4gICAgICBpZiAoZXJyLm1lc3NhZ2U/LmluY2x1ZGVzKFwiYWxyZWFkeV92ZXJpZmllZFwiKSkge1xuICAgICAgICBlcnJvcihcIlZlcmlmaWNhdGlvbiBhbHJlYWR5IGNvbXBsZXRlZFwiLCB7XG4gICAgICAgICAgaGludDogXCJUaGlzIHBob25lIG51bWJlciBoYXMgYWxyZWFkeSBiZWVuIHZlcmlmaWVkXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZT8uaW5jbHVkZXMoXCJleHBpcmVkXCIpKSB7XG4gICAgICAgIGVycm9yKFwiVmVyaWZpY2F0aW9uIGV4cGlyZWRcIiwge1xuICAgICAgICAgIGhpbnQ6IFwiUmVxdWVzdCBhIG5ldyB2ZXJpZmljYXRpb24gaW5zdGVhZFwiLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2U/LmluY2x1ZGVzKFwibWF4X3Jlc2VuZHNcIikpIHtcbiAgICAgICAgZXJyb3IoXCJNYXhpbXVtIHJlc2VuZHMgZXhjZWVkZWRcIiwge1xuICAgICAgICAgIGhpbnQ6IFwiUmVxdWVzdCBhIG5ldyB2ZXJpZmljYXRpb24gaW5zdGVhZFwiLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2U/LmluY2x1ZGVzKFwibm90X2ZvdW5kXCIpKSB7XG4gICAgICAgIGVycm9yKFwiVmVyaWZpY2F0aW9uIG5vdCBmb3VuZFwiLCB7XG4gICAgICAgICAgaGludDogXCJDaGVjayB0aGUgdmVyaWZpY2F0aW9uIElEIGlzIGNvcnJlY3RcIixcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlPy5pbmNsdWRlcyhcInJhdGVfbGltaXRcIikpIHtcbiAgICAgICAgZXJyb3IoXCJUb28gbWFueSByZXNlbmQgcmVxdWVzdHNcIiwge1xuICAgICAgICAgIGhpbnQ6IFwiV2FpdCBhIG1vbWVudCBiZWZvcmUgdHJ5aW5nIGFnYWluXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
export default class VerifySend extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
to: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
"app-name": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
template: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
|
+
profile: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
"code-length": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
+
timeout: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
13
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
14
|
+
};
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
3
|
+
import { apiClient } from "../../lib/api-client.js";
|
|
4
|
+
import { success, error, json, colors, spinner, isJsonMode, } from "../../lib/output.js";
|
|
5
|
+
export default class VerifySend extends AuthenticatedCommand {
|
|
6
|
+
static description = "Send an OTP verification code";
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> verify send --to "+1234567890"',
|
|
9
|
+
'<%= config.bin %> verify send --to "+1234567890" --app-name "MyApp"',
|
|
10
|
+
'<%= config.bin %> verify send --to "+1234567890" --template tpl_preset_2fa',
|
|
11
|
+
'<%= config.bin %> verify send --to "+1234567890" --profile vp_xxx',
|
|
12
|
+
'<%= config.bin %> verify send --to "+1234567890" --code-length 8 --timeout 120',
|
|
13
|
+
];
|
|
14
|
+
static flags = {
|
|
15
|
+
...AuthenticatedCommand.baseFlags,
|
|
16
|
+
to: Flags.string({
|
|
17
|
+
char: "t",
|
|
18
|
+
description: "Recipient phone number (E.164 format)",
|
|
19
|
+
required: true,
|
|
20
|
+
}),
|
|
21
|
+
"app-name": Flags.string({
|
|
22
|
+
char: "a",
|
|
23
|
+
description: "App name shown in message (defaults to your business name)",
|
|
24
|
+
}),
|
|
25
|
+
template: Flags.string({
|
|
26
|
+
description: "Template ID to use (defaults to tpl_preset_otp)",
|
|
27
|
+
}),
|
|
28
|
+
profile: Flags.string({
|
|
29
|
+
char: "p",
|
|
30
|
+
description: "Verify profile ID for preconfigured settings",
|
|
31
|
+
}),
|
|
32
|
+
"code-length": Flags.integer({
|
|
33
|
+
description: "Length of OTP code (4-10, default: 6)",
|
|
34
|
+
}),
|
|
35
|
+
timeout: Flags.integer({
|
|
36
|
+
description: "Code validity in seconds (60-3600, default: 300)",
|
|
37
|
+
}),
|
|
38
|
+
};
|
|
39
|
+
async run() {
|
|
40
|
+
const { flags } = await this.parse(VerifySend);
|
|
41
|
+
const sendSpinner = spinner("Sending verification code...");
|
|
42
|
+
if (!isJsonMode()) {
|
|
43
|
+
sendSpinner.start();
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const response = await apiClient.post("/api/v1/verify", {
|
|
47
|
+
to: flags.to,
|
|
48
|
+
...(flags["app-name"] && { app_name: flags["app-name"] }),
|
|
49
|
+
...(flags.template && { template_id: flags.template }),
|
|
50
|
+
...(flags.profile && { profile_id: flags.profile }),
|
|
51
|
+
...(flags["code-length"] && { code_length: flags["code-length"] }),
|
|
52
|
+
...(flags.timeout && { timeout_secs: flags.timeout }),
|
|
53
|
+
});
|
|
54
|
+
sendSpinner.stop();
|
|
55
|
+
if (isJsonMode()) {
|
|
56
|
+
json(response);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (response.sandbox) {
|
|
60
|
+
success("Verification sent (Sandbox)", {
|
|
61
|
+
"Verification ID": colors.code(response.id),
|
|
62
|
+
Phone: response.phone,
|
|
63
|
+
"Sandbox Code": colors.success(response.sandbox_code || ""),
|
|
64
|
+
"Expires At": new Date(response.expires_at).toLocaleString(),
|
|
65
|
+
"": "",
|
|
66
|
+
Note: colors.dim("Sandbox mode: SMS not sent. Use sandbox code to verify."),
|
|
67
|
+
});
|
|
68
|
+
console.log();
|
|
69
|
+
console.log(colors.dim(`Check with: ${colors.code(`sendly verify check ${response.id} --code ${response.sandbox_code}`)}`));
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
success("Verification sent", {
|
|
73
|
+
"Verification ID": colors.code(response.id),
|
|
74
|
+
Phone: response.phone,
|
|
75
|
+
"Expires At": new Date(response.expires_at).toLocaleString(),
|
|
76
|
+
});
|
|
77
|
+
console.log();
|
|
78
|
+
console.log(colors.dim(`Check with: ${colors.code(`sendly verify check ${response.id} --code <code>`)}`));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
sendSpinner.stop();
|
|
83
|
+
if (err.message?.includes("insufficient_credits")) {
|
|
84
|
+
error("Insufficient credits", {
|
|
85
|
+
hint: `Run ${colors.code("sendly credits balance")} to check your balance`,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
else if (err.message?.includes("verification_required")) {
|
|
89
|
+
error("Business verification required", {
|
|
90
|
+
hint: "Complete verification at https://sendly.live/dashboard/verification",
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
else if (err.message?.includes("invalid_phone")) {
|
|
94
|
+
error("Invalid phone number format", {
|
|
95
|
+
hint: "Use E.164 format: +1234567890",
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
throw err;
|
|
100
|
+
}
|
|
101
|
+
this.exit(1);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy92ZXJpZnkvc2VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sRUFDUCxVQUFVLEdBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQVk3QixNQUFNLENBQUMsT0FBTyxPQUFPLFVBQVcsU0FBUSxvQkFBb0I7SUFDMUQsTUFBTSxDQUFDLFdBQVcsR0FBRywrQkFBK0IsQ0FBQztJQUVyRCxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLGtEQUFrRDtRQUNsRCxxRUFBcUU7UUFDckUsNEVBQTRFO1FBQzVFLG1FQUFtRTtRQUNuRSxnRkFBZ0Y7S0FDakYsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7UUFDakMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDZixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSx1Q0FBdUM7WUFDcEQsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBQ0YsVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDdkIsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUsNERBQTREO1NBQzFFLENBQUM7UUFDRixRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNyQixXQUFXLEVBQUUsaURBQWlEO1NBQy9ELENBQUM7UUFDRixPQUFPLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNwQixJQUFJLEVBQUUsR0FBRztZ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Q0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDZCxPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxHQUFHLENBQ1IsZUFBZSxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixRQUFRLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQ2pGLENBQ0YsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztZQUNsQixXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFbkIsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xELEtBQUssQ0FBQyxzQkFBc0IsRUFBRTtvQkFDNUIsSUFBSSxFQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyx3QkFBd0I7aUJBQzNFLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7Z0JBQzFELEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRTtvQkFDdEMsSUFBSSxFQUFFLHFFQUFxRTtpQkFDNUUsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xELEtBQUssQ0FBQyw2QkFBNkIsRUFBRTtvQkFDbkMsSUFBSSxFQUFFLCtCQUErQjtpQkFDdEMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sR0FBRyxDQUFDO1lBQ1osQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkQ29tbWFuZCB9IGZyb20gXCIuLi8uLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBhcGlDbGllbnQgfSBmcm9tIFwiLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7XG4gIHN1Y2Nlc3MsXG4gIGVycm9yLFxuICBqc29uLFxuICBjb2xvcnMsXG4gIHNwaW5uZXIsXG4gIGlzSnNvbk1vZGUsXG59IGZyb20gXCIuLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5cbmludGVyZmFjZSBWZXJpZnlSZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBwaG9uZTogc3RyaW5nO1xuICBleHBpcmVzX2F0OiBzdHJpbmc7XG4gIHNhbmRib3g6IGJvb2xlYW47XG4gIHNhbmRib3hfY29kZT86IHN0cmluZztcbiAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVyaWZ5U2VuZCBleHRlbmRzIEF1dGhlbnRpY2F0ZWRDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID0gXCJTZW5kIGFuIE9UUCB2ZXJpZmljYXRpb24gY29kZVwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gdmVyaWZ5IHNlbmQgLS10byBcIisxMjM0NTY3ODkwXCInLFxuICAgICc8JT0gY29uZmlnLmJpbiAlPiB2ZXJpZnkgc2VuZCAtLXRvIFwiKzEyMzQ1Njc4OTBcIiAtLWFwcC1uYW1lIFwiTXlBcHBcIicsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHZlcmlmeSBzZW5kIC0tdG8gXCIrMTIzNDU2Nzg5MFwiIC0tdGVtcGxhdGUgdHBsX3ByZXNldF8yZmEnLFxuICAgICc8JT0gY29uZmlnLmJpbiAlPiB2ZXJpZnkgc2VuZCAtLXRvIFwiKzEyMzQ1Njc4OTBcIiAtLXByb2ZpbGUgdnBfeHh4JyxcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gdmVyaWZ5IHNlbmQgLS10byBcIisxMjM0NTY3ODkwXCIgLS1jb2RlLWxlbmd0aCA4IC0tdGltZW91dCAxMjAnLFxuICBdO1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gICAgdG86IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcInRcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlJlY2lwaWVudCBwaG9uZSBudW1iZXIgKEUuMTY0IGZvcm1hdClcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pLFxuICAgIFwiYXBwLW5hbWVcIjogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGNoYXI6IFwiYVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQXBwIG5hbWUgc2hvd24gaW4gbWVzc2FnZSAoZGVmYXVsdHMgdG8geW91ciBidXNpbmVzcyBuYW1lKVwiLFxuICAgIH0pLFxuICAgIHRlbXBsYXRlOiBGbGFncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiVGVtcGxhdGUgSUQgdG8gdXNlIChkZWZhdWx0cyB0byB0cGxfcHJlc2V0X290cClcIixcbiAgICB9KSxcbiAgICBwcm9maWxlOiBGbGFncy5zdHJpbmcoe1xuICAgICAgY2hhcjogXCJwXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJWZXJpZnkgcHJvZmlsZSBJRCBmb3IgcHJlY29uZmlndXJlZCBzZXR0aW5nc1wiLFxuICAgIH0pLFxuICAgIFwiY29kZS1sZW5ndGhcIjogRmxhZ3MuaW50ZWdlcih7XG4gICAgICBkZXNjcmlwdGlvbjogXCJMZW5ndGggb2YgT1RQIGNvZGUgKDQtMTAsIGRlZmF1bHQ6IDYpXCIsXG4gICAgfSksXG4gICAgdGltZW91dDogRmxhZ3MuaW50ZWdlcih7XG4gICAgICBkZXNjcmlwdGlvbjogXCJDb2RlIHZhbGlkaXR5IGluIHNlY29uZHMgKDYwLTM2MDAsIGRlZmF1bHQ6IDMwMClcIixcbiAgICB9KSxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShWZXJpZnlTZW5kKTtcblxuICAgIGNvbnN0IHNlbmRTcGlubmVyID0gc3Bpbm5lcihcIlNlbmRpbmcgdmVyaWZpY2F0aW9uIGNvZGUuLi5cIik7XG5cbiAgICBpZiAoIWlzSnNvbk1vZGUoKSkge1xuICAgICAgc2VuZFNwaW5uZXIuc3RhcnQoKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnQucG9zdDxWZXJpZnlSZXNwb25zZT4oXCIvYXBpL3YxL3ZlcmlmeVwiLCB7XG4gICAgICAgIHRvOiBmbGFncy50byxcbiAgICAgICAgLi4uKGZsYWdzW1wiYXBwLW5hbWVcIl0gJiYgeyBhcHBfbmFtZTogZmxhZ3NbXCJhcHAtbmFtZVwiXSB9KSxcbiAgICAgICAgLi4uKGZsYWdzLnRlbXBsYXRlICYmIHsgdGVtcGxhdGVfaWQ6IGZsYWdzLnRlbXBsYXRlIH0pLFxuICAgICAgICAuLi4oZmxhZ3MucHJvZmlsZSAmJiB7IHByb2ZpbGVfaWQ6IGZsYWdzLnByb2ZpbGUgfSksXG4gICAgICAgIC4uLihmbGFnc1tcImNvZGUtbGVuZ3RoXCJdICYmIHsgY29kZV9sZW5ndGg6IGZsYWdzW1wiY29kZS1sZW5ndGhcIl0gfSksXG4gICAgICAgIC4uLihmbGFncy50aW1lb3V0ICYmIHsgdGltZW91dF9zZWNzOiBmbGFncy50aW1lb3V0IH0pLFxuICAgICAgfSk7XG5cbiAgICAgIHNlbmRTcGlubmVyLnN0b3AoKTtcblxuICAgICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAgICBqc29uKHJlc3BvbnNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2Uuc2FuZGJveCkge1xuICAgICAgICBzdWNjZXNzKFwiVmVyaWZpY2F0aW9uIHNlbnQgKFNhbmRib3gpXCIsIHtcbiAgICAgICAgICBcIlZlcmlmaWNhdGlvbiBJRFwiOiBjb2xvcnMuY29kZShyZXNwb25zZS5pZCksXG4gICAgICAgICAgUGhvbmU6IHJlc3BvbnNlLnBob25lLFxuICAgICAgICAgIFwiU2FuZGJveCBDb2RlXCI6IGNvbG9ycy5zdWNjZXNzKHJlc3BvbnNlLnNhbmRib3hfY29kZSB8fCBcIlwiKSxcbiAgICAgICAgICBcIkV4cGlyZXMgQXRcIjogbmV3IERhdGUocmVzcG9uc2UuZXhwaXJlc19hdCkudG9Mb2NhbGVTdHJpbmcoKSxcbiAgICAgICAgICBcIlwiOiBcIlwiLFxuICAgICAgICAgIE5vdGU6IGNvbG9ycy5kaW0oXG4gICAgICAgICAgICBcIlNhbmRib3ggbW9kZTogU01TIG5vdCBzZW50LiBVc2Ugc2FuZGJveCBjb2RlIHRvIHZlcmlmeS5cIixcbiAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmRpbShcbiAgICAgICAgICAgIGBDaGVjayB3aXRoOiAke2NvbG9ycy5jb2RlKGBzZW5kbHkgdmVyaWZ5IGNoZWNrICR7cmVzcG9uc2UuaWR9IC0tY29kZSAke3Jlc3BvbnNlLnNhbmRib3hfY29kZX1gKX1gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzKFwiVmVyaWZpY2F0aW9uIHNlbnRcIiwge1xuICAgICAgICAgIFwiVmVyaWZpY2F0aW9uIElEXCI6IGNvbG9ycy5jb2RlKHJlc3BvbnNlLmlkKSxcbiAgICAgICAgICBQaG9uZTogcmVzcG9uc2UucGhvbmUsXG4gICAgICAgICAgXCJFeHBpcmVzIEF0XCI6IG5ldyBEYXRlKHJlc3BvbnNlLmV4cGlyZXNfYXQpLnRvTG9jYWxlU3RyaW5nKCksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgYENoZWNrIHdpdGg6ICR7Y29sb3JzLmNvZGUoYHNlbmRseSB2ZXJpZnkgY2hlY2sgJHtyZXNwb25zZS5pZH0gLS1jb2RlIDxjb2RlPmApfWAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgc2VuZFNwaW5uZXIuc3RvcCgpO1xuXG4gICAgICBpZiAoZXJyLm1lc3NhZ2U/LmluY2x1ZGVzKFwiaW5zdWZmaWNpZW50X2NyZWRpdHNcIikpIHtcbiAgICAgICAgZXJyb3IoXCJJbnN1ZmZpY2llbnQgY3JlZGl0c1wiLCB7XG4gICAgICAgICAgaGludDogYFJ1biAke2NvbG9ycy5jb2RlKFwic2VuZGx5IGNyZWRpdHMgYmFsYW5jZVwiKX0gdG8gY2hlY2sgeW91ciBiYWxhbmNlYCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlPy5pbmNsdWRlcyhcInZlcmlmaWNhdGlvbl9yZXF1aXJlZFwiKSkge1xuICAgICAgICBlcnJvcihcIkJ1c2luZXNzIHZlcmlmaWNhdGlvbiByZXF1aXJlZFwiLCB7XG4gICAgICAgICAgaGludDogXCJDb21wbGV0ZSB2ZXJpZmljYXRpb24gYXQgaHR0cHM6Ly9zZW5kbHkubGl2ZS9kYXNoYm9hcmQvdmVyaWZpY2F0aW9uXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZT8uaW5jbHVkZXMoXCJpbnZhbGlkX3Bob25lXCIpKSB7XG4gICAgICAgIGVycm9yKFwiSW52YWxpZCBwaG9uZSBudW1iZXIgZm9ybWF0XCIsIHtcbiAgICAgICAgICBoaW50OiBcIlVzZSBFLjE2NCBmb3JtYXQ6ICsxMjM0NTY3ODkwXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
export default class VerifyStatus extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
id: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
10
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Args } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
3
|
+
import { apiClient } from "../../lib/api-client.js";
|
|
4
|
+
import { success, json, colors, spinner, isJsonMode } from "../../lib/output.js";
|
|
5
|
+
export default class VerifyStatus extends AuthenticatedCommand {
|
|
6
|
+
static description = "Get verification status";
|
|
7
|
+
static examples = [
|
|
8
|
+
"<%= config.bin %> verify status ver_xxx",
|
|
9
|
+
"<%= config.bin %> verify status ver_xxx --json",
|
|
10
|
+
];
|
|
11
|
+
static args = {
|
|
12
|
+
id: Args.string({
|
|
13
|
+
description: "Verification ID",
|
|
14
|
+
required: true,
|
|
15
|
+
}),
|
|
16
|
+
};
|
|
17
|
+
static flags = {
|
|
18
|
+
...AuthenticatedCommand.baseFlags,
|
|
19
|
+
};
|
|
20
|
+
async run() {
|
|
21
|
+
const { args } = await this.parse(VerifyStatus);
|
|
22
|
+
const statusSpinner = spinner("Fetching verification status...");
|
|
23
|
+
if (!isJsonMode()) {
|
|
24
|
+
statusSpinner.start();
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const response = await apiClient.get(`/api/v1/verify/${args.id}`);
|
|
28
|
+
statusSpinner.stop();
|
|
29
|
+
if (isJsonMode()) {
|
|
30
|
+
json(response);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const statusColor = response.status === "verified"
|
|
34
|
+
? colors.success
|
|
35
|
+
: response.status === "pending"
|
|
36
|
+
? colors.primary
|
|
37
|
+
: colors.error;
|
|
38
|
+
success("Verification status", {
|
|
39
|
+
"Verification ID": colors.code(response.id),
|
|
40
|
+
Phone: response.phone,
|
|
41
|
+
Status: statusColor(response.status),
|
|
42
|
+
"Delivery Status": response.delivery_status,
|
|
43
|
+
Attempts: `${response.attempts}/${response.max_attempts}`,
|
|
44
|
+
"Expires At": new Date(response.expires_at).toLocaleString(),
|
|
45
|
+
...(response.verified_at && {
|
|
46
|
+
"Verified At": new Date(response.verified_at).toLocaleString(),
|
|
47
|
+
}),
|
|
48
|
+
Sandbox: response.sandbox ? colors.dim("yes") : "no",
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
statusSpinner.stop();
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3ZlcmlmeS9zdGF0dXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWVqRixNQUFNLENBQUMsT0FBTyxPQUFPLFlBQWEsU0FBUSxvQkFBb0I7SUFDNUQsTUFBTSxDQUFDLFdBQVcsR0FBRyx5QkFBeUIsQ0FBQztJQUUvQyxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLHlDQUF5QztRQUN6QyxnREFBZ0Q7S0FDakQsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNkLFdBQVcsRUFBRSxpQkFBaUI7WUFDOUIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO0tBQ0gsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7S0FDbEMsQ0FBQztJQUVGLEtBQUssQ0FBQyxHQUFHO1FBQ1AsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVoRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUVqRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNsQixhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FDbEMsa0JBQWtCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FDNUIsQ0FBQztZQUVGLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVyQixJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDZixPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sV0FBVyxHQUNmLFFBQVEsQ0FBQyxNQUFNLEtBQUssVUFBVTtnQkFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPO2dCQUNoQixDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxTQUFTO29CQUM3QixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU87b0JBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBRXJCLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRTtnQkFDN0IsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7Z0JBQ3JCLE1BQU0sRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDcEMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLGVBQWU7Z0JBQzNDLFFBQVEsRUFBRSxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRTtnQkFDekQsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxjQUFjLEVBQUU7Z0JBQzVELEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJO29CQUMxQixhQUFhLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGNBQWMsRUFBRTtpQkFDL0QsQ0FBQztnQkFDRixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTthQUNyRCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztZQUNsQixhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFyZ3MgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHsgc3VjY2VzcywganNvbiwgY29sb3JzLCBzcGlubmVyLCBpc0pzb25Nb2RlIH0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxuaW50ZXJmYWNlIFN0YXR1c1Jlc3BvbnNlIHtcbiAgaWQ6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIHBob25lOiBzdHJpbmc7XG4gIGRlbGl2ZXJ5X3N0YXR1czogc3RyaW5nO1xuICBhdHRlbXB0czogbnVtYmVyO1xuICBtYXhfYXR0ZW1wdHM6IG51bWJlcjtcbiAgZXhwaXJlc19hdDogc3RyaW5nO1xuICB2ZXJpZmllZF9hdDogc3RyaW5nIHwgbnVsbDtcbiAgY3JlYXRlZF9hdDogc3RyaW5nO1xuICBzYW5kYm94OiBib29sZWFuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJpZnlTdGF0dXMgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9IFwiR2V0IHZlcmlmaWNhdGlvbiBzdGF0dXNcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiB2ZXJpZnkgc3RhdHVzIHZlcl94eHhcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHZlcmlmeSBzdGF0dXMgdmVyX3h4eCAtLWpzb25cIixcbiAgXTtcblxuICBzdGF0aWMgYXJncyA9IHtcbiAgICBpZDogQXJncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiVmVyaWZpY2F0aW9uIElEXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KSxcbiAgfTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGFyZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoVmVyaWZ5U3RhdHVzKTtcblxuICAgIGNvbnN0IHN0YXR1c1NwaW5uZXIgPSBzcGlubmVyKFwiRmV0Y2hpbmcgdmVyaWZpY2F0aW9uIHN0YXR1cy4uLlwiKTtcblxuICAgIGlmICghaXNKc29uTW9kZSgpKSB7XG4gICAgICBzdGF0dXNTcGlubmVyLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LmdldDxTdGF0dXNSZXNwb25zZT4oXG4gICAgICAgIGAvYXBpL3YxL3ZlcmlmeS8ke2FyZ3MuaWR9YCxcbiAgICAgICk7XG5cbiAgICAgIHN0YXR1c1NwaW5uZXIuc3RvcCgpO1xuXG4gICAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICAgIGpzb24ocmVzcG9uc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXR1c0NvbG9yID1cbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzID09PSBcInZlcmlmaWVkXCJcbiAgICAgICAgICA/IGNvbG9ycy5zdWNjZXNzXG4gICAgICAgICAgOiByZXNwb25zZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiXG4gICAgICAgICAgICA/IGNvbG9ycy5wcmltYXJ5XG4gICAgICAgICAgICA6IGNvbG9ycy5lcnJvcjtcblxuICAgICAgc3VjY2VzcyhcIlZlcmlmaWNhdGlvbiBzdGF0dXNcIiwge1xuICAgICAgICBcIlZlcmlmaWNhdGlvbiBJRFwiOiBjb2xvcnMuY29kZShyZXNwb25zZS5pZCksXG4gICAgICAgIFBob25lOiByZXNwb25zZS5waG9uZSxcbiAgICAgICAgU3RhdHVzOiBzdGF0dXNDb2xvcihyZXNwb25zZS5zdGF0dXMpLFxuICAgICAgICBcIkRlbGl2ZXJ5IFN0YXR1c1wiOiByZXNwb25zZS5kZWxpdmVyeV9zdGF0dXMsXG4gICAgICAgIEF0dGVtcHRzOiBgJHtyZXNwb25zZS5hdHRlbXB0c30vJHtyZXNwb25zZS5tYXhfYXR0ZW1wdHN9YCxcbiAgICAgICAgXCJFeHBpcmVzIEF0XCI6IG5ldyBEYXRlKHJlc3BvbnNlLmV4cGlyZXNfYXQpLnRvTG9jYWxlU3RyaW5nKCksXG4gICAgICAgIC4uLihyZXNwb25zZS52ZXJpZmllZF9hdCAmJiB7XG4gICAgICAgICAgXCJWZXJpZmllZCBBdFwiOiBuZXcgRGF0ZShyZXNwb25zZS52ZXJpZmllZF9hdCkudG9Mb2NhbGVTdHJpbmcoKSxcbiAgICAgICAgfSksXG4gICAgICAgIFNhbmRib3g6IHJlc3BvbnNlLnNhbmRib3ggPyBjb2xvcnMuZGltKFwieWVzXCIpIDogXCJub1wiLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHN0YXR1c1NwaW5uZXIuc3RvcCgpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxufVxuIl19
|