@sendly/cli 3.37.1 → 3.39.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 +268 -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/create.d.ts +44 -0
- package/dist/commands/rcs/agents/create.js +71 -0
- package/dist/commands/rcs/agents/devices/set.d.ts +16 -0
- package/dist/commands/rcs/agents/devices/set.js +77 -0
- package/dist/commands/rcs/agents/get.d.ts +13 -0
- package/dist/commands/rcs/agents/get.js +51 -0
- package/dist/commands/rcs/agents/request-launch.d.ts +16 -0
- package/dist/commands/rcs/agents/request-launch.js +71 -0
- package/dist/commands/rcs/agents/submit.d.ts +14 -0
- package/dist/commands/rcs/agents/submit.js +56 -0
- package/dist/commands/rcs/agents/update.d.ts +48 -0
- package/dist/commands/rcs/agents/update.js +81 -0
- package/dist/commands/rcs/agents.d.ts +10 -0
- package/dist/commands/rcs/agents.js +97 -0
- package/dist/commands/rcs/brands/create.d.ts +30 -0
- package/dist/commands/rcs/brands/create.js +55 -0
- package/dist/commands/rcs/brands/update.d.ts +33 -0
- package/dist/commands/rcs/brands/update.js +62 -0
- package/dist/commands/rcs/capability.d.ts +12 -0
- package/dist/commands/rcs/capability.js +85 -0
- package/dist/commands/rcs/dossier.d.ts +10 -0
- package/dist/commands/rcs/dossier.js +73 -0
- package/dist/commands/rcs/registration.d.ts +10 -0
- package/dist/commands/rcs/registration.js +59 -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/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 +20 -3
- package/dist/lib/api-client.js +96 -17
- package/dist/lib/auth.js +10 -6
- package/dist/lib/base-command.js +13 -2
- 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/dist/lib/rcs-registration.d.ts +231 -0
- package/dist/lib/rcs-registration.js +734 -0
- package/oclif.manifest.json +2603 -350
- package/package.json +17 -1
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
3
|
+
import { apiClient, ApiKeyRequiredError, NotFoundError, ValidationError, } from "../../lib/api-client.js";
|
|
4
|
+
import { success, error, json, colors, spinner, isJsonMode, } from "../../lib/output.js";
|
|
5
|
+
export default class RcsCapability extends AuthenticatedCommand {
|
|
6
|
+
static description = "Check whether a recipient's device can receive RCS before you send";
|
|
7
|
+
static examples = [
|
|
8
|
+
"<%= config.bin %> rcs capability --to +15125550190",
|
|
9
|
+
"<%= config.bin %> rcs capability --to +15125550190 --agent 3f6a1c9e-0000-0000-0000-000000000000",
|
|
10
|
+
"<%= config.bin %> rcs capability --to +15125550190 --json",
|
|
11
|
+
];
|
|
12
|
+
static flags = {
|
|
13
|
+
...AuthenticatedCommand.baseFlags,
|
|
14
|
+
to: Flags.string({
|
|
15
|
+
char: "t",
|
|
16
|
+
description: "Recipient phone number to check (E.164 format)",
|
|
17
|
+
required: true,
|
|
18
|
+
}),
|
|
19
|
+
agent: Flags.string({
|
|
20
|
+
description: "RCS agent id to check with (only needed when your workspace has more than one — see `rcs agents`)",
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
async run() {
|
|
24
|
+
const { flags } = await this.parse(RcsCapability);
|
|
25
|
+
const checkSpinner = spinner("Checking RCS capability...");
|
|
26
|
+
if (!isJsonMode()) {
|
|
27
|
+
checkSpinner.start();
|
|
28
|
+
}
|
|
29
|
+
let response;
|
|
30
|
+
try {
|
|
31
|
+
response = await apiClient.get("/api/v1/rcs/capability", {
|
|
32
|
+
to: flags.to,
|
|
33
|
+
...(flags.agent && { agentId: flags.agent }),
|
|
34
|
+
});
|
|
35
|
+
checkSpinner.stop();
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
checkSpinner.stop();
|
|
39
|
+
if (err instanceof NotFoundError) {
|
|
40
|
+
error(err.message === "Resource not found"
|
|
41
|
+
? "RCS isn't available on your workspace yet."
|
|
42
|
+
: err.message, {
|
|
43
|
+
hint: "RCS is rolling out gradually — contact support@sendly.live for early access.",
|
|
44
|
+
});
|
|
45
|
+
this.exit(1);
|
|
46
|
+
}
|
|
47
|
+
if (err instanceof ApiKeyRequiredError) {
|
|
48
|
+
error("RCS capability checks require a live API key.", {
|
|
49
|
+
hint: "The check reaches the carrier network, so test keys can't run it — create one with `sendly keys create --type live`",
|
|
50
|
+
});
|
|
51
|
+
this.exit(1);
|
|
52
|
+
}
|
|
53
|
+
if (err instanceof ValidationError &&
|
|
54
|
+
/more than one RCS agent/i.test(err.message ?? "")) {
|
|
55
|
+
error(err.message, {
|
|
56
|
+
hint: "Pass --agent <id> — list them with `sendly rcs agents`",
|
|
57
|
+
});
|
|
58
|
+
this.exit(1);
|
|
59
|
+
}
|
|
60
|
+
throw err;
|
|
61
|
+
}
|
|
62
|
+
if (isJsonMode()) {
|
|
63
|
+
json(response);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
success("RCS capability check", {
|
|
67
|
+
To: response.to,
|
|
68
|
+
Agent: colors.code(response.agentId),
|
|
69
|
+
Capable: response.capable
|
|
70
|
+
? colors.success("yes")
|
|
71
|
+
: colors.error("no"),
|
|
72
|
+
Features: response.features?.length
|
|
73
|
+
? response.features.join(", ")
|
|
74
|
+
: colors.dim("—"),
|
|
75
|
+
});
|
|
76
|
+
console.log();
|
|
77
|
+
if (response.capable) {
|
|
78
|
+
console.log(colors.dim(`Send with: ${colors.code(`sendly rcs send --to ${response.to} --text "Hello!"`)}`));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.log(colors.dim("Sends to this recipient will deliver as plain SMS (unless you pass --no-fallback)."));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9yY3MvY2FwYWJpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixlQUFlLEdBQ2hCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsSUFBSSxFQUNKLE1BQU0sRUFDTixPQUFPLEVBQ1AsVUFBVSxHQUNYLE1BQU0scUJBQXFCLENBQUM7QUFTN0IsTUFBTSxDQUFDLE9BQU8sT0FBTyxhQUFjLFNBQVEsb0JBQW9CO0lBQzdELE1BQU0sQ0FBQyxXQUFXLEdBQ2hCLG9FQUFvRSxDQUFDO0lBRXZFLE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsb0RBQW9EO1FBQ3BELGlHQUFpRztRQUNqRywyREFBMkQ7S0FDNUQsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7UUFDakMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDZixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSxnREFBZ0Q7WUFDN0QsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBQ0YsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDbEIsV0FBVyxFQUNULG1HQUFtRztTQUN0RyxDQUFDO0tBQ0gsQ0FBQztJQUVGLEtBQUssQ0FBQyxHQUFHO1FBQ1AsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVsRCxNQUFNLFlBQVksR0FBRyxPQUFPLENB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LENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmxhZ3MgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7XG4gIGFwaUNsaWVudCxcbiAgQXBpS2V5UmVxdWlyZWRFcnJvcixcbiAgTm90Rm91bmRFcnJvcixcbiAgVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tIFwiLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7XG4gIHN1Y2Nlc3MsXG4gIGVycm9yLFxuICBqc29uLFxuICBjb2xvcnMsXG4gIHNwaW5uZXIsXG4gIGlzSnNvbk1vZGUsXG59IGZyb20gXCIuLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5cbmludGVyZmFjZSBDYXBhYmlsaXR5UmVzcG9uc2Uge1xuICB0bzogc3RyaW5nO1xuICBhZ2VudElkOiBzdHJpbmc7XG4gIGNhcGFibGU6IGJvb2xlYW47XG4gIGZlYXR1cmVzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmNzQ2FwYWJpbGl0eSBleHRlbmRzIEF1dGhlbnRpY2F0ZWRDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID1cbiAgICBcIkNoZWNrIHdoZXRoZXIgYSByZWNpcGllbnQncyBkZXZpY2UgY2FuIHJlY2VpdmUgUkNTIGJlZm9yZSB5b3Ugc2VuZFwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHJjcyBjYXBhYmlsaXR5IC0tdG8gKzE1MTI1NTUwMTkwXCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiByY3MgY2FwYWJpbGl0eSAtLXRvICsxNTEyNTU1MDE5MCAtLWFnZW50IDNmNmExYzllLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gcmNzIGNhcGFiaWxpdHkgLS10byArMTUxMjU1NTAxOTAgLS1qc29uXCIsXG4gIF07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgICB0bzogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGNoYXI6IFwidFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiUmVjaXBpZW50IHBob25lIG51bWJlciB0byBjaGVjayAoRS4xNjQgZm9ybWF0KVwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gICAgYWdlbnQ6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJSQ1MgYWdlbnQgaWQgdG8gY2hlY2sgd2l0aCAob25seSBuZWVkZWQgd2hlbiB5b3VyIHdvcmtzcGFjZSBoYXMgbW9yZSB0aGFuIG9uZSDigJQgc2VlIGByY3MgYWdlbnRzYClcIixcbiAgICB9KSxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShSY3NDYXBhYmlsaXR5KTtcblxuICAgIGNvbnN0IGNoZWNrU3Bpbm5lciA9IHNwaW5uZXIoXCJDaGVja2luZyBSQ1MgY2FwYWJpbGl0eS4uLlwiKTtcbiAgICBpZiAoIWlzSnNvbk1vZGUoKSkge1xuICAgICAgY2hlY2tTcGlubmVyLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3BvbnNlOiBDYXBhYmlsaXR5UmVzcG9uc2U7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LmdldDxDYXBhYmlsaXR5UmVzcG9uc2U+KFxuICAgICAgICBcIi9hcGkvdjEvcmNzL2NhcGFiaWxpdHlcIixcbiAgICAgICAge1xuICAgICAgICAgIHRvOiBmbGFncy50byxcbiAgICAgICAgICAuLi4oZmxhZ3MuYWdlbnQgJiYgeyBhZ2VudElkOiBmbGFncy5hZ2VudCB9KSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICBjaGVja1NwaW5uZXIuc3RvcCgpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBjaGVja1NwaW5uZXIuc3RvcCgpO1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpIHtcbiAgICAgICAgZXJyb3IoXG4gICAgICAgICAgZXJyLm1lc3NhZ2UgPT09IFwiUmVzb3VyY2Ugbm90IGZvdW5kXCJcbiAgICAgICAgICAgID8gXCJSQ1MgaXNuJ3QgYXZhaWxhYmxlIG9uIHlvdXIgd29ya3NwYWNlIHlldC5cIlxuICAgICAgICAgICAgOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBoaW50OiBcIlJDUyBpcyByb2xsaW5nIG91dCBncmFkdWFsbHkg4oCUIGNvbnRhY3Qgc3VwcG9ydEBzZW5kbHkubGl2ZSBmb3IgZWFybHkgYWNjZXNzLlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBcGlLZXlSZXF1aXJlZEVycm9yKSB7XG4gICAgICAgIGVycm9yKFwiUkNTIGNhcGFiaWxpdHkgY2hlY2tzIHJlcXVpcmUgYSBsaXZlIEFQSSBrZXkuXCIsIHtcbiAgICAgICAgICBoaW50OiBcIlRoZSBjaGVjayByZWFjaGVzIHRoZSBjYXJyaWVyIG5ldHdvcmssIHNvIHRlc3Qga2V5cyBjYW4ndCBydW4gaXQg4oCUIGNyZWF0ZSBvbmUgd2l0aCBgc2VuZGx5IGtleXMgY3JlYXRlIC0tdHlwZSBsaXZlYFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBlcnIgaW5zdGFuY2VvZiBWYWxpZGF0aW9uRXJyb3IgJiZcbiAgICAgICAgL21vcmUgdGhhbiBvbmUgUkNTIGFnZW50L2kudGVzdChlcnIubWVzc2FnZSA/PyBcIlwiKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yKGVyci5tZXNzYWdlLCB7XG4gICAgICAgICAgaGludDogXCJQYXNzIC0tYWdlbnQgPGlkPiDigJQgbGlzdCB0aGVtIHdpdGggYHNlbmRseSByY3MgYWdlbnRzYFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGpzb24ocmVzcG9uc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1Y2Nlc3MoXCJSQ1MgY2FwYWJpbGl0eSBjaGVja1wiLCB7XG4gICAgICBUbzogcmVzcG9uc2UudG8sXG4gICAgICBBZ2VudDogY29sb3JzLmNvZGUocmVzcG9uc2UuYWdlbnRJZCksXG4gICAgICBDYXBhYmxlOiByZXNwb25zZS5jYXBhYmxlXG4gICAgICAgID8gY29sb3JzLnN1Y2Nlc3MoXCJ5ZXNcIilcbiAgICAgICAgOiBjb2xvcnMuZXJyb3IoXCJub1wiKSxcbiAgICAgIEZlYXR1cmVzOiByZXNwb25zZS5mZWF0dXJlcz8ubGVuZ3RoXG4gICAgICAgID8gcmVzcG9uc2UuZmVhdHVyZXMuam9pbihcIiwgXCIpXG4gICAgICAgIDogY29sb3JzLmRpbShcIuKAlFwiKSxcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgaWYgKHJlc3BvbnNlLmNhcGFibGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgIGBTZW5kIHdpdGg6ICR7Y29sb3JzLmNvZGUoYHNlbmRseSByY3Mgc2VuZCAtLXRvICR7cmVzcG9uc2UudG99IC0tdGV4dCBcIkhlbGxvIVwiYCl9YCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgIFwiU2VuZHMgdG8gdGhpcyByZWNpcGllbnQgd2lsbCBkZWxpdmVyIGFzIHBsYWluIFNNUyAodW5sZXNzIHlvdSBwYXNzIC0tbm8tZmFsbGJhY2spLlwiLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
export default class RcsDossier extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
7
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
8
|
+
};
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
import { apiClient } from "../../lib/api-client.js";
|
|
3
|
+
import { json, info, warn, colors, spinner, isJsonMode, keyValue, } from "../../lib/output.js";
|
|
4
|
+
import { isDict, reportRcsError, } from "../../lib/rcs-registration.js";
|
|
5
|
+
const SOURCE_LABELS = {
|
|
6
|
+
tendlc: "your 10DLC brand",
|
|
7
|
+
verification: "your toll-free verification",
|
|
8
|
+
none: "nothing on file yet",
|
|
9
|
+
};
|
|
10
|
+
function flatten(value, prefix, out) {
|
|
11
|
+
if (isDict(value)) {
|
|
12
|
+
for (const [key, inner] of Object.entries(value)) {
|
|
13
|
+
flatten(inner, prefix ? `${prefix}.${key}` : key, out);
|
|
14
|
+
}
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (value === null || value === undefined || value === "")
|
|
18
|
+
return;
|
|
19
|
+
out.push([prefix, String(value)]);
|
|
20
|
+
}
|
|
21
|
+
export default class RcsDossier extends AuthenticatedCommand {
|
|
22
|
+
static description = "Show the brand details Sendly can prefill from your 10DLC brand or toll-free verification";
|
|
23
|
+
static examples = [
|
|
24
|
+
"<%= config.bin %> rcs dossier",
|
|
25
|
+
"<%= config.bin %> rcs dossier --json > brand.json",
|
|
26
|
+
];
|
|
27
|
+
static flags = {
|
|
28
|
+
...AuthenticatedCommand.baseFlags,
|
|
29
|
+
};
|
|
30
|
+
async run() {
|
|
31
|
+
await this.parse(RcsDossier);
|
|
32
|
+
const loadSpinner = spinner("Fetching prefill details...");
|
|
33
|
+
if (!isJsonMode()) {
|
|
34
|
+
loadSpinner.start();
|
|
35
|
+
}
|
|
36
|
+
let response;
|
|
37
|
+
try {
|
|
38
|
+
response = await apiClient.get("/api/v1/rcs/dossier");
|
|
39
|
+
loadSpinner.stop();
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
loadSpinner.stop();
|
|
43
|
+
if (reportRcsError(err))
|
|
44
|
+
this.exit(1);
|
|
45
|
+
throw err;
|
|
46
|
+
}
|
|
47
|
+
if (isJsonMode()) {
|
|
48
|
+
json(response);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const rows = [];
|
|
52
|
+
flatten(response.brand ?? {}, "", rows);
|
|
53
|
+
console.log();
|
|
54
|
+
console.log(colors.bold("Prefilled brand details"));
|
|
55
|
+
console.log(colors.dim(`Source: ${SOURCE_LABELS[response.source] ?? response.source}`));
|
|
56
|
+
console.log();
|
|
57
|
+
if (rows.length === 0) {
|
|
58
|
+
info("Nothing to prefill yet — you'll enter the brand details yourself.");
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
keyValue(rows);
|
|
62
|
+
}
|
|
63
|
+
if (!response.usEligible) {
|
|
64
|
+
console.log();
|
|
65
|
+
warn("Something on file names a non-US country. RCS registration is available to US businesses for now.");
|
|
66
|
+
}
|
|
67
|
+
console.log();
|
|
68
|
+
console.log(colors.dim("Use it:"));
|
|
69
|
+
console.log(` Save: ${colors.code("sendly rcs dossier --json > brand.json")}`);
|
|
70
|
+
console.log(` Draft: ${colors.code("sendly rcs brands create --from-json brand.json --ein 12-3456789 ...")}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9yY3MvZG9zc2llci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLE1BQU0sRUFDTixPQUFPLEVBQ1AsVUFBVSxFQUNWLFFBQVEsR0FDVCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxNQUFNLEVBQ04sY0FBYyxHQUVmLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsTUFBTSxhQUFhLEdBQThDO0lBQy9ELE1BQU0sRUFBRSxrQkFBa0I7SUFDMUIsWUFBWSxFQUFFLDZCQUE2QjtJQUMzQyxJQUFJLEVBQUUscUJBQXFCO0NBQzVCLENBQUM7QUFFRixTQUFTLE9BQU8sQ0FDZCxLQUFjLEVBQ2QsTUFBYyxFQUNkLEdBQTRCO0lBRTVCLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssRUFBRTtRQUFFLE9BQU87SUFDbEUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLFVBQVcsU0FBUSxvQkFBb0I7SUFDMUQsTUFBTSxDQUFDLFdBQVcsR0FDaEIsMkZBQTJGLENBQUM7SUFFOUYsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQiwrQkFBK0I7UUFDL0IsbURBQW1EO0tBQ3BELENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTO0tBQ2xDLENBQUM7SUFFRixLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUU3QixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNsQixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksUUFBeUIsQ0FBQztRQUM5QixJQUFJLENBQUM7WUFDSCxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUFrQixxQkFBcUIsQ0FBQyxDQUFDO1lBQ3ZFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUM7UUFFRCxJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2YsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLElBQUksR0FBNEIsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFeEMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUMzRSxDQUFDO1FBQ0YsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1FBQzVFLENBQUM7YUFBTSxDQUFDO1lBQ04sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FDRixtR0FBbUcsQ0FDcEcsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNuQyxPQUFPLENBQUMsR0FBRyxDQUNULFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxFQUFFLENBQ3BFLENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxDQUNULFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQyxzRUFBc0UsQ0FBQyxFQUFFLENBQ2xHLENBQUM7SUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQge1xuICBqc29uLFxuICBpbmZvLFxuICB3YXJuLFxuICBjb2xvcnMsXG4gIHNwaW5uZXIsXG4gIGlzSnNvbk1vZGUsXG4gIGtleVZhbHVlLFxufSBmcm9tIFwiLi4vLi4vbGliL291dHB1dC5qc1wiO1xuaW1wb3J0IHtcbiAgaXNEaWN0LFxuICByZXBvcnRSY3NFcnJvcixcbiAgdHlwZSBEb3NzaWVyUmVzcG9uc2UsXG59IGZyb20gXCIuLi8uLi9saWIvcmNzLXJlZ2lzdHJhdGlvbi5qc1wiO1xuXG5jb25zdCBTT1VSQ0VfTEFCRUxTOiBSZWNvcmQ8RG9zc2llclJlc3BvbnNlW1wic291cmNlXCJdLCBzdHJpbmc+ID0ge1xuICB0ZW5kbGM6IFwieW91ciAxMERMQyBicmFuZFwiLFxuICB2ZXJpZmljYXRpb246IFwieW91ciB0b2xsLWZyZWUgdmVyaWZpY2F0aW9uXCIsXG4gIG5vbmU6IFwibm90aGluZyBvbiBmaWxlIHlldFwiLFxufTtcblxuZnVuY3Rpb24gZmxhdHRlbihcbiAgdmFsdWU6IHVua25vd24sXG4gIHByZWZpeDogc3RyaW5nLFxuICBvdXQ6IEFycmF5PFtzdHJpbmcsIHN0cmluZ10+LFxuKTogdm9pZCB7XG4gIGlmIChpc0RpY3QodmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBpbm5lcl0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICBmbGF0dGVuKGlubmVyLCBwcmVmaXggPyBgJHtwcmVmaXh9LiR7a2V5fWAgOiBrZXksIG91dCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIikgcmV0dXJuO1xuICBvdXQucHVzaChbcHJlZml4LCBTdHJpbmcodmFsdWUpXSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJjc0Rvc3NpZXIgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9XG4gICAgXCJTaG93IHRoZSBicmFuZCBkZXRhaWxzIFNlbmRseSBjYW4gcHJlZmlsbCBmcm9tIHlvdXIgMTBETEMgYnJhbmQgb3IgdG9sbC1mcmVlIHZlcmlmaWNhdGlvblwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHJjcyBkb3NzaWVyXCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiByY3MgZG9zc2llciAtLWpzb24gPiBicmFuZC5qc29uXCIsXG4gIF07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5wYXJzZShSY3NEb3NzaWVyKTtcblxuICAgIGNvbnN0IGxvYWRTcGlubmVyID0gc3Bpbm5lcihcIkZldGNoaW5nIHByZWZpbGwgZGV0YWlscy4uLlwiKTtcbiAgICBpZiAoIWlzSnNvbk1vZGUoKSkge1xuICAgICAgbG9hZFNwaW5uZXIuc3RhcnQoKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2U6IERvc3NpZXJSZXNwb25zZTtcbiAgICB0cnkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnQuZ2V0PERvc3NpZXJSZXNwb25zZT4oXCIvYXBpL3YxL3Jjcy9kb3NzaWVyXCIpO1xuICAgICAgbG9hZFNwaW5uZXIuc3RvcCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9hZFNwaW5uZXIuc3RvcCgpO1xuICAgICAgaWYgKHJlcG9ydFJjc0Vycm9yKGVycikpIHRoaXMuZXhpdCgxKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICBqc29uKHJlc3BvbnNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByb3dzOiBBcnJheTxbc3RyaW5nLCBzdHJpbmddPiA9IFtdO1xuICAgIGZsYXR0ZW4ocmVzcG9uc2UuYnJhbmQgPz8ge30sIFwiXCIsIHJvd3MpO1xuXG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xlLmxvZyhjb2xvcnMuYm9sZChcIlByZWZpbGxlZCBicmFuZCBkZXRhaWxzXCIpKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGNvbG9ycy5kaW0oYFNvdXJjZTogJHtTT1VSQ0VfTEFCRUxTW3Jlc3BvbnNlLnNvdXJjZV0gPz8gcmVzcG9uc2Uuc291cmNlfWApLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coKTtcblxuICAgIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaW5mbyhcIk5vdGhpbmcgdG8gcHJlZmlsbCB5ZXQg4oCUIHlvdSdsbCBlbnRlciB0aGUgYnJhbmQgZGV0YWlscyB5b3Vyc2VsZi5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleVZhbHVlKHJvd3MpO1xuICAgIH1cblxuICAgIGlmICghcmVzcG9uc2UudXNFbGlnaWJsZSkge1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiU29tZXRoaW5nIG9uIGZpbGUgbmFtZXMgYSBub24tVVMgY291bnRyeS4gUkNTIHJlZ2lzdHJhdGlvbiBpcyBhdmFpbGFibGUgdG8gVVMgYnVzaW5lc3NlcyBmb3Igbm93LlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygpO1xuICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oXCJVc2UgaXQ6XCIpKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGAgIFNhdmU6ICAke2NvbG9ycy5jb2RlKFwic2VuZGx5IHJjcyBkb3NzaWVyIC0tanNvbiA+IGJyYW5kLmpzb25cIil9YCxcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCAgRHJhZnQ6ICR7Y29sb3JzLmNvZGUoXCJzZW5kbHkgcmNzIGJyYW5kcyBjcmVhdGUgLS1mcm9tLWpzb24gYnJhbmQuanNvbiAtLWVpbiAxMi0zNDU2Nzg5IC4uLlwiKX1gLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
export default class RcsRegistration extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
7
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
8
|
+
};
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
import { apiClient } from "../../lib/api-client.js";
|
|
3
|
+
import { json, info, warn, colors, spinner, isJsonMode, } from "../../lib/output.js";
|
|
4
|
+
import { formatStage, nextStepFor, printAgent, printBrand, printDevices, printNextSteps, reportRcsError, } from "../../lib/rcs-registration.js";
|
|
5
|
+
export default class RcsRegistration extends AuthenticatedCommand {
|
|
6
|
+
static description = "Show where your RCS registration stands — brand, agent, test devices, and what to do next";
|
|
7
|
+
static examples = [
|
|
8
|
+
"<%= config.bin %> rcs registration",
|
|
9
|
+
"<%= config.bin %> rcs registration --json",
|
|
10
|
+
];
|
|
11
|
+
static flags = {
|
|
12
|
+
...AuthenticatedCommand.baseFlags,
|
|
13
|
+
};
|
|
14
|
+
async run() {
|
|
15
|
+
await this.parse(RcsRegistration);
|
|
16
|
+
const loadSpinner = spinner("Fetching RCS registration...");
|
|
17
|
+
if (!isJsonMode()) {
|
|
18
|
+
loadSpinner.start();
|
|
19
|
+
}
|
|
20
|
+
let response;
|
|
21
|
+
try {
|
|
22
|
+
response = await apiClient.get("/api/v1/rcs/registration");
|
|
23
|
+
loadSpinner.stop();
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
loadSpinner.stop();
|
|
27
|
+
if (reportRcsError(err))
|
|
28
|
+
this.exit(1);
|
|
29
|
+
throw err;
|
|
30
|
+
}
|
|
31
|
+
if (isJsonMode()) {
|
|
32
|
+
json(response);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const { brand, agent, devices, stage, usEligible } = response;
|
|
36
|
+
console.log();
|
|
37
|
+
console.log(`${colors.bold("RCS registration")} ${formatStage(stage)}`);
|
|
38
|
+
console.log();
|
|
39
|
+
if (!usEligible) {
|
|
40
|
+
warn("The business details on file name a non-US country. RCS registration is available to US businesses for now.");
|
|
41
|
+
console.log();
|
|
42
|
+
}
|
|
43
|
+
if (!brand && !agent) {
|
|
44
|
+
info("No RCS registration yet.");
|
|
45
|
+
printNextSteps(nextStepFor("draft", {}));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (brand) {
|
|
49
|
+
printBrand(brand);
|
|
50
|
+
console.log();
|
|
51
|
+
}
|
|
52
|
+
if (agent) {
|
|
53
|
+
printAgent(agent);
|
|
54
|
+
printDevices(devices ?? []);
|
|
55
|
+
}
|
|
56
|
+
printNextSteps(nextStepFor(stage, { brandId: brand?.id, agentId: agent?.id }));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3Jjcy9yZWdpc3RyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFDTCxJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixNQUFNLEVBQ04sT0FBTyxFQUNQLFVBQVUsR0FDWCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsV0FBVyxFQUNYLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLGNBQWMsRUFDZCxjQUFjLEdBRWYsTUFBTSwrQkFBK0IsQ0FBQztBQUV2QyxNQUFNLENBQUMsT0FBTyxPQUFPLGVBQWdCLFNBQVEsb0JBQW9CO0lBQy9ELE1BQU0sQ0FBQyxXQUFXLEdBQ2hCLDJGQUEyRixDQUFDO0lBRTlGLE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsb0NBQW9DO1FBQ3BDLDJDQUEyQztLQUM1QyxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztLQUNsQyxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFbEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDbEIsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLFFBQThCLENBQUM7UUFDbkMsSUFBSSxDQUFDO1lBQ0gsUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FDNUIsMEJBQTBCLENBQzNCLENBQUM7WUFDRixXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNmLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFFOUQsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQ0YsNkdBQTZHLENBQzlHLENBQUM7WUFDRixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUNqQyxjQUFjLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEIsWUFBWSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRUQsY0FBYyxDQUNaLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQy9ELENBQUM7SUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQge1xuICBqc29uLFxuICBpbmZvLFxuICB3YXJuLFxuICBjb2xvcnMsXG4gIHNwaW5uZXIsXG4gIGlzSnNvbk1vZGUsXG59IGZyb20gXCIuLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5pbXBvcnQge1xuICBmb3JtYXRTdGFnZSxcbiAgbmV4dFN0ZXBGb3IsXG4gIHByaW50QWdlbnQsXG4gIHByaW50QnJhbmQsXG4gIHByaW50RGV2aWNlcyxcbiAgcHJpbnROZXh0U3RlcHMsXG4gIHJlcG9ydFJjc0Vycm9yLFxuICB0eXBlIFJlZ2lzdHJhdGlvblJlc3BvbnNlLFxufSBmcm9tIFwiLi4vLi4vbGliL3Jjcy1yZWdpc3RyYXRpb24uanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmNzUmVnaXN0cmF0aW9uIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPVxuICAgIFwiU2hvdyB3aGVyZSB5b3VyIFJDUyByZWdpc3RyYXRpb24gc3RhbmRzIOKAlCBicmFuZCwgYWdlbnQsIHRlc3QgZGV2aWNlcywgYW5kIHdoYXQgdG8gZG8gbmV4dFwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHJjcyByZWdpc3RyYXRpb25cIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHJjcyByZWdpc3RyYXRpb24gLS1qc29uXCIsXG4gIF07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5wYXJzZShSY3NSZWdpc3RyYXRpb24pO1xuXG4gICAgY29uc3QgbG9hZFNwaW5uZXIgPSBzcGlubmVyKFwiRmV0Y2hpbmcgUkNTIHJlZ2lzdHJhdGlvbi4uLlwiKTtcbiAgICBpZiAoIWlzSnNvbk1vZGUoKSkge1xuICAgICAgbG9hZFNwaW5uZXIuc3RhcnQoKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2U6IFJlZ2lzdHJhdGlvblJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5nZXQ8UmVnaXN0cmF0aW9uUmVzcG9uc2U+KFxuICAgICAgICBcIi9hcGkvdjEvcmNzL3JlZ2lzdHJhdGlvblwiLFxuICAgICAgKTtcbiAgICAgIGxvYWRTcGlubmVyLnN0b3AoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvYWRTcGlubmVyLnN0b3AoKTtcbiAgICAgIGlmIChyZXBvcnRSY3NFcnJvcihlcnIpKSB0aGlzLmV4aXQoMSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBicmFuZCwgYWdlbnQsIGRldmljZXMsIHN0YWdlLCB1c0VsaWdpYmxlIH0gPSByZXNwb25zZTtcblxuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sZS5sb2coYCR7Y29sb3JzLmJvbGQoXCJSQ1MgcmVnaXN0cmF0aW9uXCIpfSAgJHtmb3JtYXRTdGFnZShzdGFnZSl9YCk7XG4gICAgY29uc29sZS5sb2coKTtcblxuICAgIGlmICghdXNFbGlnaWJsZSkge1xuICAgICAgd2FybihcbiAgICAgICAgXCJUaGUgYnVzaW5lc3MgZGV0YWlscyBvbiBmaWxlIG5hbWUgYSBub24tVVMgY291bnRyeS4gUkNTIHJlZ2lzdHJhdGlvbiBpcyBhdmFpbGFibGUgdG8gVVMgYnVzaW5lc3NlcyBmb3Igbm93LlwiLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgfVxuXG4gICAgaWYgKCFicmFuZCAmJiAhYWdlbnQpIHtcbiAgICAgIGluZm8oXCJObyBSQ1MgcmVnaXN0cmF0aW9uIHlldC5cIik7XG4gICAgICBwcmludE5leHRTdGVwcyhuZXh0U3RlcEZvcihcImRyYWZ0XCIsIHt9KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGJyYW5kKSB7XG4gICAgICBwcmludEJyYW5kKGJyYW5kKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgfVxuXG4gICAgaWYgKGFnZW50KSB7XG4gICAgICBwcmludEFnZW50KGFnZW50KTtcbiAgICAgIHByaW50RGV2aWNlcyhkZXZpY2VzID8/IFtdKTtcbiAgICB9XG5cbiAgICBwcmludE5leHRTdGVwcyhcbiAgICAgIG5leHRTdGVwRm9yKHN0YWdlLCB7IGJyYW5kSWQ6IGJyYW5kPy5pZCwgYWdlbnRJZDogYWdlbnQ/LmlkIH0pLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
export default class RcsSend 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
|
+
text: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
agent: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
|
+
"card-title": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
"card-description": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
+
"card-media": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
|
+
"card-orientation": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
13
|
+
"suggest-reply": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
14
|
+
"suggest-url": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
15
|
+
"no-fallback": import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
16
|
+
"idempotency-key": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
17
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
18
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
19
|
+
};
|
|
20
|
+
run(): Promise<void>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
3
|
+
import { apiClient, ApiError, ApiKeyRequiredError, AuthenticationError, NotFoundError, ValidationError, } from "../../lib/api-client.js";
|
|
4
|
+
import { success, error, json, colors, spinner, isJsonMode, formatStatus, formatCredits, } from "../../lib/output.js";
|
|
5
|
+
/** Parse repeatable "text=postback" pairs into reply suggestions. */
|
|
6
|
+
function parseReplies(raw) {
|
|
7
|
+
if (!raw || raw.length === 0)
|
|
8
|
+
return [];
|
|
9
|
+
const out = [];
|
|
10
|
+
for (const item of raw) {
|
|
11
|
+
const idx = item.indexOf("=");
|
|
12
|
+
if (idx <= 0 || idx === item.length - 1) {
|
|
13
|
+
return `Invalid --suggest-reply "${item}" — use text=postback (e.g. "Track order=TRACK")`;
|
|
14
|
+
}
|
|
15
|
+
out.push({
|
|
16
|
+
reply: {
|
|
17
|
+
text: item.slice(0, idx).trim(),
|
|
18
|
+
postbackData: item.slice(idx + 1),
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
/** Parse repeatable "text=postback=url" triples into open-URL suggestions. */
|
|
25
|
+
function parseUrlActions(raw) {
|
|
26
|
+
if (!raw || raw.length === 0)
|
|
27
|
+
return [];
|
|
28
|
+
const out = [];
|
|
29
|
+
for (const item of raw) {
|
|
30
|
+
const first = item.indexOf("=");
|
|
31
|
+
const second = first === -1 ? -1 : item.indexOf("=", first + 1);
|
|
32
|
+
const text = first > 0 ? item.slice(0, first).trim() : "";
|
|
33
|
+
const postbackData = second > first + 1 ? item.slice(first + 1, second) : "";
|
|
34
|
+
const url = second === -1 ? "" : item.slice(second + 1);
|
|
35
|
+
if (!text || !postbackData || !url) {
|
|
36
|
+
return `Invalid --suggest-url "${item}" — use text=postback=url (e.g. "View order=VIEW=https://example.com/o/4821")`;
|
|
37
|
+
}
|
|
38
|
+
out.push({ action: { text, postbackData, url } });
|
|
39
|
+
}
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
export default class RcsSend extends AuthenticatedCommand {
|
|
43
|
+
static description = "Send an RCS message — rich text with suggestion chips or a rich card; recipients without RCS get it as plain SMS unless --no-fallback";
|
|
44
|
+
static examples = [
|
|
45
|
+
'<%= config.bin %> rcs send --to +15125550190 --text "Your order shipped!"',
|
|
46
|
+
'<%= config.bin %> rcs send --to +15125550190 --text "Need anything else?" --suggest-reply "Track order=TRACK" --suggest-url "View receipt=RECEIPT=https://example.com/r/4821"',
|
|
47
|
+
'<%= config.bin %> rcs send --to +15125550190 --card-title "Spring sale" --card-description "20% off everything this weekend" --card-media https://example.com/sale.jpg',
|
|
48
|
+
'<%= config.bin %> rcs send --to +15125550190 --text "RCS only please" --no-fallback',
|
|
49
|
+
];
|
|
50
|
+
static flags = {
|
|
51
|
+
...AuthenticatedCommand.baseFlags,
|
|
52
|
+
to: Flags.string({
|
|
53
|
+
char: "t",
|
|
54
|
+
description: "Recipient phone number (E.164 format)",
|
|
55
|
+
required: true,
|
|
56
|
+
}),
|
|
57
|
+
text: Flags.string({
|
|
58
|
+
char: "m",
|
|
59
|
+
description: "Message text (falls back to SMS for non-RCS recipients)",
|
|
60
|
+
exclusive: [
|
|
61
|
+
"card-title",
|
|
62
|
+
"card-description",
|
|
63
|
+
"card-media",
|
|
64
|
+
"card-orientation",
|
|
65
|
+
],
|
|
66
|
+
}),
|
|
67
|
+
agent: Flags.string({
|
|
68
|
+
description: "RCS agent id to send from (only needed when your workspace has more than one — see `rcs agents`)",
|
|
69
|
+
}),
|
|
70
|
+
"card-title": Flags.string({
|
|
71
|
+
description: "Rich card title (cards have no SMS form — RCS-capable recipients only)",
|
|
72
|
+
}),
|
|
73
|
+
"card-description": Flags.string({
|
|
74
|
+
description: "Rich card body text; required with --card-title",
|
|
75
|
+
dependsOn: ["card-title"],
|
|
76
|
+
}),
|
|
77
|
+
"card-media": Flags.string({
|
|
78
|
+
description: "Public JPEG, PNG, or GIF image URL for the card",
|
|
79
|
+
dependsOn: ["card-title"],
|
|
80
|
+
}),
|
|
81
|
+
"card-orientation": Flags.string({
|
|
82
|
+
description: "Card layout",
|
|
83
|
+
options: ["vertical", "horizontal"],
|
|
84
|
+
dependsOn: ["card-title"],
|
|
85
|
+
}),
|
|
86
|
+
"suggest-reply": Flags.string({
|
|
87
|
+
description: 'Reply chip as "text=postback" (e.g. --suggest-reply "Track order=TRACK"). Repeatable.',
|
|
88
|
+
multiple: true,
|
|
89
|
+
}),
|
|
90
|
+
"suggest-url": Flags.string({
|
|
91
|
+
description: 'Open-URL chip as "text=postback=url" (e.g. --suggest-url "View order=VIEW=https://example.com/o/4821"). Repeatable.',
|
|
92
|
+
multiple: true,
|
|
93
|
+
}),
|
|
94
|
+
"no-fallback": Flags.boolean({
|
|
95
|
+
description: "Fail with an error instead of delivering as SMS when the recipient doesn't support RCS",
|
|
96
|
+
default: false,
|
|
97
|
+
}),
|
|
98
|
+
"idempotency-key": Flags.string({
|
|
99
|
+
description: "Idempotency key (1-255 printable ASCII characters). Re-running with the same key within 24 hours returns the original result instead of sending again.",
|
|
100
|
+
}),
|
|
101
|
+
};
|
|
102
|
+
async run() {
|
|
103
|
+
const { flags } = await this.parse(RcsSend);
|
|
104
|
+
const hasCard = flags["card-title"] !== undefined;
|
|
105
|
+
if (!flags.text && !hasCard) {
|
|
106
|
+
error("Provide either --text or --card-title", {
|
|
107
|
+
hint: 'Text: --text "Hello!" · Card: --card-title "Spring sale" --card-description "20% off"',
|
|
108
|
+
});
|
|
109
|
+
this.exit(1);
|
|
110
|
+
}
|
|
111
|
+
if (hasCard && flags["card-description"] === undefined) {
|
|
112
|
+
error("Missing --card-description for the card", {
|
|
113
|
+
hint: "Rich cards need both a title and a description",
|
|
114
|
+
});
|
|
115
|
+
this.exit(1);
|
|
116
|
+
}
|
|
117
|
+
const replies = parseReplies(flags["suggest-reply"]);
|
|
118
|
+
if (typeof replies === "string") {
|
|
119
|
+
error(replies);
|
|
120
|
+
this.exit(1);
|
|
121
|
+
}
|
|
122
|
+
const urlActions = parseUrlActions(flags["suggest-url"]);
|
|
123
|
+
if (typeof urlActions === "string") {
|
|
124
|
+
error(urlActions);
|
|
125
|
+
this.exit(1);
|
|
126
|
+
}
|
|
127
|
+
const suggestions = [
|
|
128
|
+
...replies,
|
|
129
|
+
...urlActions,
|
|
130
|
+
];
|
|
131
|
+
const sendSpinner = spinner("Sending RCS message...");
|
|
132
|
+
if (!isJsonMode()) {
|
|
133
|
+
sendSpinner.start();
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
const response = await apiClient.post("/api/v1/messages", {
|
|
137
|
+
channel: "rcs",
|
|
138
|
+
to: flags.to,
|
|
139
|
+
...(flags.agent && { agentId: flags.agent }),
|
|
140
|
+
...(hasCard
|
|
141
|
+
? {
|
|
142
|
+
card: {
|
|
143
|
+
title: flags["card-title"],
|
|
144
|
+
description: flags["card-description"],
|
|
145
|
+
...(flags["card-media"] && {
|
|
146
|
+
mediaUrl: flags["card-media"],
|
|
147
|
+
}),
|
|
148
|
+
...(flags["card-orientation"] && {
|
|
149
|
+
orientation: flags["card-orientation"],
|
|
150
|
+
}),
|
|
151
|
+
...(suggestions.length > 0 && { suggestions }),
|
|
152
|
+
},
|
|
153
|
+
}
|
|
154
|
+
: {
|
|
155
|
+
text: flags.text,
|
|
156
|
+
...(suggestions.length > 0 && { suggestions }),
|
|
157
|
+
}),
|
|
158
|
+
...(flags["no-fallback"] && { fallbackToSms: false }),
|
|
159
|
+
}, true, { idempotencyKey: flags["idempotency-key"] });
|
|
160
|
+
sendSpinner.stop();
|
|
161
|
+
if (isJsonMode()) {
|
|
162
|
+
json(response);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (response.fellBackTo === "sms") {
|
|
166
|
+
success("Message queued as SMS — recipient doesn't support RCS", {
|
|
167
|
+
"Message ID": colors.code(response.id),
|
|
168
|
+
To: response.to,
|
|
169
|
+
From: response.from,
|
|
170
|
+
Status: formatStatus(response.status),
|
|
171
|
+
Segments: response.segments,
|
|
172
|
+
Credits: formatCredits(response.creditsUsed),
|
|
173
|
+
});
|
|
174
|
+
if (response.rcs?.suggestionsDropped) {
|
|
175
|
+
console.log();
|
|
176
|
+
console.log(colors.dim("Suggestion chips have no SMS form and were dropped from this message."));
|
|
177
|
+
}
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
success("RCS message queued", {
|
|
181
|
+
"Message ID": colors.code(response.id),
|
|
182
|
+
To: response.to,
|
|
183
|
+
From: response.from,
|
|
184
|
+
Kind: response.rcs?.kind ?? (hasCard ? "card" : "text"),
|
|
185
|
+
Status: formatStatus(response.status),
|
|
186
|
+
Credits: formatCredits(response.creditsUsed),
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
sendSpinner.stop();
|
|
191
|
+
if (err instanceof ApiError &&
|
|
192
|
+
err.code === "rcs_not_supported_for_recipient") {
|
|
193
|
+
error(err.message, {
|
|
194
|
+
hint: hasCard
|
|
195
|
+
? "Cards have no SMS form — send a text message to reach non-RCS recipients"
|
|
196
|
+
: "Drop --no-fallback to deliver to non-RCS recipients as SMS",
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
else if (err instanceof NotFoundError) {
|
|
200
|
+
error(err.message === "Resource not found"
|
|
201
|
+
? "RCS isn't available on your workspace yet."
|
|
202
|
+
: err.message, {
|
|
203
|
+
hint: "RCS is rolling out gradually — contact support@sendly.live for early access.",
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
else if (err instanceof ApiKeyRequiredError) {
|
|
207
|
+
error("RCS messages require a live API key.", {
|
|
208
|
+
hint: "RCS delivery is never simulated on a test key — create one with `sendly keys create --type live`",
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
else if (err instanceof ValidationError &&
|
|
212
|
+
/more than one RCS agent/i.test(err.message ?? "")) {
|
|
213
|
+
error(err.message, {
|
|
214
|
+
hint: "Pass --agent <id> — list them with `sendly rcs agents`",
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
else if (err instanceof AuthenticationError &&
|
|
218
|
+
/opted out/i.test(err.message ?? "")) {
|
|
219
|
+
error(err.message);
|
|
220
|
+
}
|
|
221
|
+
else if (err instanceof AuthenticationError &&
|
|
222
|
+
/agent/i.test(err.message ?? "")) {
|
|
223
|
+
error(err.message, {
|
|
224
|
+
hint: "See which agents can send with `sendly rcs agents`",
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
else if (err instanceof AuthenticationError &&
|
|
228
|
+
/rcs|verification|not supported|registration/i.test(err.message ?? "")) {
|
|
229
|
+
error(err.message, {
|
|
230
|
+
hint: "This recipient can't receive RCS and your account can't send SMS to this destination — complete verification, or message an RCS-capable recipient",
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
throw err;
|
|
235
|
+
}
|
|
236
|
+
this.exit(1);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9yY3Mvc2VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLGVBQWUsR0FDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sRUFDUCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGFBQWEsR0FDZCxNQUFNLHFCQUFxQixDQUFDO0FBNEI3QixxRUFBcUU7QUFDckUsU0FBUyxZQUFZLENBQ25CLEdBQXlCO0lBRXpCLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDeEMsTUFBTSxHQUFHLEdBQW9CLEVBQUUsQ0FBQztJQUNoQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sNEJBQTRCLElBQUksa0RBQWtELENBQUM7UUFDNUYsQ0FBQztRQUNELEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDUCxLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRTtnQkFDL0IsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQzthQUNsQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsU0FBUyxlQUFlLENBQ3RCLEdBQXlCO0lBRXpCLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDeEMsTUFBTSxHQUFHLEdBQW9CLEVBQUUsQ0FBQztJQUNoQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdFLE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbkMsT0FBTywwQkFBMEIsSUFBSSwrRUFBK0UsQ0FBQztRQUN2SCxDQUFDO1FBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLE9BQVEsU0FBUSxvQkFBb0I7SUFDdkQsTUFBTSxDQUFDLFdBQVcsR0FDaEIsdUlBQXVJLENBQUM7SUFFMUksTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQiwyRUFBMkU7UUFDM0UsK0tBQStLO1FBQy9LLHdLQUF3SztRQUN4SyxxRkFBcUY7S0FDdEYsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7UUFDakMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDZixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSx1Q0FBdUM7WUFDcEQsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBQ0YsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDakIsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUseURBQXlEO1lBQ3RFLFNBQVMsRUFBRTtnQkFDVCxZQUFZO2dCQUNaLGtCQUFrQjtnQkFDbEIsWUFBWTtnQkFDWixrQkFBa0I7YUFDbkI7U0FDRixDQUFDO1FBQ0YsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDbEIsV0FBVyxFQUNULGtHQUFrRztTQUNyRyxDQUFDO1FBQ0YsWUFBWSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDekIsV0FBVyxFQUFFLHdFQUF3RTtTQUN0RixDQUFDO1FBQ0Ysa0JBQWtCLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUMvQixXQUFXLEVBQUUsaURBQWlEO1lBQzlELFNBQVMsRUFBRSxDQUFDLFlBQVksQ0FBQztTQUMxQixDQUFDO1FBQ0YsWUFBWSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDekIsV0FBVyxFQUFFLGlEQUFpRDtZQUM5RCxTQUFTLEVBQUUsQ0FBQyxZQUFZLENBQUM7U0FDMUIsQ0FBQztRQUNGLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDL0IsV0FBVyxFQUFFLGFBQWE7WUFDMUIsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQztZQUNuQyxTQUFTLEVBQUUsQ0FBQyxZQUFZLENBQUM7U0FDMUIsQ0FBQztRQUNGLGVBQWUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzVCLFdBQVcsRUFDVCx1RkFBdUY7WUFDekYsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBQ0YsYUFBYSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDMUIsV0FBVyxFQUNULHFIQUFxSDtZQUN2SCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7UUFDRixhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUMzQixXQUFXLEVBQ1Qsd0ZBQXdGO1lBQzFGLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQztRQUNGLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDOUIsV0FBVyxFQUNULHdKQUF3SjtTQUMzSixDQUFDO0tBQ0gsQ0FBQztJQUVGLEtBQUssQ0FBQyxHQUFHO1FBQ1AsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU1QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxDQUFDO1FBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUIsS0FBSyxDQUFDLHVDQUF1QyxFQUFFO2dCQUM3QyxJQUFJLEVBQUUsdUZBQXVGO2FBQzlGLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdkQsS0FBSyxDQUFDLHlDQUF5QyxFQUFFO2dCQUMvQyxJQUFJLEVBQUUsZ0RBQWdEO2FBQ3ZELENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDekQsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRztZQUNsQixHQUFJLE9BQTJCO1lBQy9CLEdBQUksVUFBOEI7U0FDbkMsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2xCLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUNuQyxrQkFBa0IsRUFDbEI7Z0JBQ0UsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNaLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDNUMsR0FBRyxDQUFDLE9BQU87b0JBQ1QsQ0FBQyxDQUFDO3dCQUNFLElBQUksRUFBRTs0QkFDSixLQUFLLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQzs0QkFDMUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQzs0QkFDdEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSTtnQ0FDekIsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUM7NkJBQzlCLENBQUM7NEJBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJO2dDQUMvQixXQUFXLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDOzZCQUN2QyxDQUFDOzRCQUNGLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO3lCQUMvQztxQkFDRjtvQkFDSCxDQUFDLENBQUM7d0JBQ0UsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO3dCQUNoQixHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztxQkFDL0MsQ0FBQztnQkFDTixHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ3RELEVBQ0QsSUFBSSxFQUNKLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQzdDLENBQUM7WUFFRixXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFbkIsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2YsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sQ0FBQyx1REFBdUQsRUFBRTtvQkFDL0QsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDdEMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFO29CQUNmLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtvQkFDbkIsTUFBTSxFQUFFLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO29CQUNyQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7b0JBQzNCLE9BQU8sRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztpQkFDN0MsQ0FBQyxDQUFDO2dCQUNILElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO29CQUNyQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FDVCxNQUFNLENBQUMsR0FBRyxDQUNSLHVFQUF1RSxDQUN4RSxDQUNGLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxPQUFPO1lBQ1QsQ0FBQztZQUVELE9BQU8sQ0FBQyxvQkFBb0IsRUFBRTtnQkFDNUIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUNmLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtnQkFDbkIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDdkQsTUFBTSxFQUFFLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUNyQyxPQUFPLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7YUFDN0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7WUFDbEIsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRW5CLElBQ0UsR0FBRyxZQUFZLFFBQVE7Z0JBQ3ZCLEdBQUcsQ0FBQyxJQUFJLEtBQUssaUNBQWlDLEVBQzlDLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7b0JBQ2pCLElBQUksRUFBRSxPQUFPO3dCQUNYLENBQUMsQ0FBQywwRUFBMEU7d0JBQzVFLENBQUMsQ0FBQyw0REFBNEQ7aUJBQ2pFLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxHQUFHLFlBQVksYUFBYSxFQUFFLENBQUM7Z0JBQ3hDLEtBQUssQ0FDSCxHQUFHLENBQUMsT0FBTyxLQUFLLG9CQUFvQjtvQkFDbEMsQ0FBQyxDQUFDLDRDQUE0QztvQkFDOUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQ2Y7b0JBQ0UsSUFBSSxFQUFFLDhFQUE4RTtpQkFDckYsQ0FDRixDQUFDO1lBQ0osQ0FBQztpQkFBTSxJQUFJLEdBQUcsWUFBWSxtQkFBbUIsRUFBRSxDQUFDO2dCQUM5QyxLQUFLLENBQUMsc0NBQXNDLEVBQUU7b0JBQzVDLElBQUksRUFBRSxrR0FBa0c7aUJBQ3pHLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFDTCxHQUFHLFlBQVksZUFBZTtnQkFDOUIsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQ2xELENBQUM7Z0JBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7b0JBQ2pCLElBQUksRUFBRSx3REFBd0Q7aUJBQy9ELENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFDTCxHQUFHLFlBQVksbUJBQW1CO2dCQUNsQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQ3BDLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyQixDQUFDO2lCQUFNLElBQ0wsR0FBRyxZQUFZLG1CQUFtQjtnQkFDbEMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUNoQyxDQUFDO2dCQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO29CQUNqQixJQUFJLEVBQUUsb0RBQW9EO2lCQUMzRCxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLElBQ0wsR0FBRyxZQUFZLG1CQUFtQjtnQkFDbEMsOENBQThDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQ3RFLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7b0JBQ2pCLElBQUksRUFBRSxtSkFBbUo7aUJBQzFKLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEdBQUcsQ0FBQztZQUNaLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHtcbiAgYXBpQ2xpZW50LFxuICBBcGlFcnJvcixcbiAgQXBpS2V5UmVxdWlyZWRFcnJvcixcbiAgQXV0aGVudGljYXRpb25FcnJvcixcbiAgTm90Rm91bmRFcnJvcixcbiAgVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tIFwiLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7XG4gIHN1Y2Nlc3MsXG4gIGVycm9yLFxuICBqc29uLFxuICBjb2xvcnMsXG4gIHNwaW5uZXIsXG4gIGlzSnNvbk1vZGUsXG4gIGZvcm1hdFN0YXR1cyxcbiAgZm9ybWF0Q3JlZGl0cyxcbn0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxuaW50ZXJmYWNlIFJjc1NlbmRSZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgZmVsbEJhY2tUbz86IHN0cmluZztcbiAgbWVzc2FnZV9mb3JtYXQ6IHN0cmluZztcbiAgdG86IHN0cmluZztcbiAgZnJvbTogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmcgfCBudWxsO1xuICBzdGF0dXM6IHN0cmluZztcbiAgc2VnbWVudHM6IG51bWJlcjtcbiAgY3JlZGl0c1VzZWQ6IG51bWJlcjtcbiAgcmNzOiB7XG4gICAga2luZD86IHN0cmluZztcbiAgICBhZ2VudElkOiBzdHJpbmc7XG4gICAgYWdlbnROYW1lPzogc3RyaW5nO1xuICAgIHJlcXVlc3RlZENoYW5uZWw/OiBzdHJpbmc7XG4gICAgc3VnZ2VzdGlvbnNEcm9wcGVkPzogYm9vbGVhbjtcbiAgfTtcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxudHlwZSBSY3NTdWdnZXN0aW9uID1cbiAgfCB7IHJlcGx5OiB7IHRleHQ6IHN0cmluZzsgcG9zdGJhY2tEYXRhOiBzdHJpbmcgfSB9XG4gIHwgeyBhY3Rpb246IHsgdGV4dDogc3RyaW5nOyBwb3N0YmFja0RhdGE6IHN0cmluZzsgdXJsOiBzdHJpbmcgfSB9O1xuXG4vKiogUGFyc2UgcmVwZWF0YWJsZSBcInRleHQ9cG9zdGJhY2tcIiBwYWlycyBpbnRvIHJlcGx5IHN1Z2dlc3Rpb25zLiAqL1xuZnVuY3Rpb24gcGFyc2VSZXBsaWVzKFxuICByYXc6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuKTogUmNzU3VnZ2VzdGlvbltdIHwgc3RyaW5nIHtcbiAgaWYgKCFyYXcgfHwgcmF3Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICBjb25zdCBvdXQ6IFJjc1N1Z2dlc3Rpb25bXSA9IFtdO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmF3KSB7XG4gICAgY29uc3QgaWR4ID0gaXRlbS5pbmRleE9mKFwiPVwiKTtcbiAgICBpZiAoaWR4IDw9IDAgfHwgaWR4ID09PSBpdGVtLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBgSW52YWxpZCAtLXN1Z2dlc3QtcmVwbHkgXCIke2l0ZW19XCIg4oCUIHVzZSB0ZXh0PXBvc3RiYWNrIChlLmcuIFwiVHJhY2sgb3JkZXI9VFJBQ0tcIilgO1xuICAgIH1cbiAgICBvdXQucHVzaCh7XG4gICAgICByZXBseToge1xuICAgICAgICB0ZXh0OiBpdGVtLnNsaWNlKDAsIGlkeCkudHJpbSgpLFxuICAgICAgICBwb3N0YmFja0RhdGE6IGl0ZW0uc2xpY2UoaWR4ICsgMSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBQYXJzZSByZXBlYXRhYmxlIFwidGV4dD1wb3N0YmFjaz11cmxcIiB0cmlwbGVzIGludG8gb3Blbi1VUkwgc3VnZ2VzdGlvbnMuICovXG5mdW5jdGlvbiBwYXJzZVVybEFjdGlvbnMoXG4gIHJhdzogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4pOiBSY3NTdWdnZXN0aW9uW10gfCBzdHJpbmcge1xuICBpZiAoIXJhdyB8fCByYXcubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gIGNvbnN0IG91dDogUmNzU3VnZ2VzdGlvbltdID0gW107XG4gIGZvciAoY29uc3QgaXRlbSBvZiByYXcpIHtcbiAgICBjb25zdCBmaXJzdCA9IGl0ZW0uaW5kZXhPZihcIj1cIik7XG4gICAgY29uc3Qgc2Vjb25kID0gZmlyc3QgPT09IC0xID8gLTEgOiBpdGVtLmluZGV4T2YoXCI9XCIsIGZpcnN0ICsgMSk7XG4gICAgY29uc3QgdGV4dCA9IGZpcnN0ID4gMCA/IGl0ZW0uc2xpY2UoMCwgZmlyc3QpLnRyaW0oKSA6IFwiXCI7XG4gICAgY29uc3QgcG9zdGJhY2tEYXRhID0gc2Vjb25kID4gZmlyc3QgKyAxID8gaXRlbS5zbGljZShmaXJzdCArIDEsIHNlY29uZCkgOiBcIlwiO1xuICAgIGNvbnN0IHVybCA9IHNlY29uZCA9PT0gLTEgPyBcIlwiIDogaXRlbS5zbGljZShzZWNvbmQgKyAxKTtcbiAgICBpZiAoIXRleHQgfHwgIXBvc3RiYWNrRGF0YSB8fCAhdXJsKSB7XG4gICAgICByZXR1cm4gYEludmFsaWQgLS1zdWdnZXN0LXVybCBcIiR7aXRlbX1cIiDigJQgdXNlIHRleHQ9cG9zdGJhY2s9dXJsIChlLmcuIFwiVmlldyBvcmRlcj1WSUVXPWh0dHBzOi8vZXhhbXBsZS5jb20vby80ODIxXCIpYDtcbiAgICB9XG4gICAgb3V0LnB1c2goeyBhY3Rpb246IHsgdGV4dCwgcG9zdGJhY2tEYXRhLCB1cmwgfSB9KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSY3NTZW5kIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPVxuICAgIFwiU2VuZCBhbiBSQ1MgbWVzc2FnZSDigJQgcmljaCB0ZXh0IHdpdGggc3VnZ2VzdGlvbiBjaGlwcyBvciBhIHJpY2ggY2FyZDsgcmVjaXBpZW50cyB3aXRob3V0IFJDUyBnZXQgaXQgYXMgcGxhaW4gU01TIHVubGVzcyAtLW5vLWZhbGxiYWNrXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgICc8JT0gY29uZmlnLmJpbiAlPiByY3Mgc2VuZCAtLXRvICsxNTEyNTU1MDE5MCAtLXRleHQgXCJZb3VyIG9yZGVyIHNoaXBwZWQhXCInLFxuICAgICc8JT0gY29uZmlnLmJpbiAlPiByY3Mgc2VuZCAtLXRvICsxNTEyNTU1MDE5MCAtLXRleHQgXCJOZWVkIGFueXRoaW5nIGVsc2U/XCIgLS1zdWdnZXN0LXJlcGx5IFwiVHJhY2sgb3JkZXI9VFJBQ0tcIiAtLXN1Z2dlc3QtdXJsIFwiVmlldyByZWNlaXB0PVJFQ0VJUFQ9aHR0cHM6Ly9leGFtcGxlLmNvbS9yLzQ4MjFcIicsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHJjcyBzZW5kIC0tdG8gKzE1MTI1NTUwMTkwIC0tY2FyZC10aXRsZSBcIlNwcmluZyBzYWxlXCIgLS1jYXJkLWRlc2NyaXB0aW9uIFwiMjAlIG9mZiBldmVyeXRoaW5nIHRoaXMgd2Vla2VuZFwiIC0tY2FyZC1tZWRpYSBodHRwczovL2V4YW1wbGUuY29tL3NhbGUuanBnJyxcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gcmNzIHNlbmQgLS10byArMTUxMjU1NTAxOTAgLS10ZXh0IFwiUkNTIG9ubHkgcGxlYXNlXCIgLS1uby1mYWxsYmFjaycsXG4gIF07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgICB0bzogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGNoYXI6IFwidFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiUmVjaXBpZW50IHBob25lIG51bWJlciAoRS4xNjQgZm9ybWF0KVwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gICAgdGV4dDogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGNoYXI6IFwibVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiTWVzc2FnZSB0ZXh0IChmYWxscyBiYWNrIHRvIFNNUyBmb3Igbm9uLVJDUyByZWNpcGllbnRzKVwiLFxuICAgICAgZXhjbHVzaXZlOiBbXG4gICAgICAgIFwiY2FyZC10aXRsZVwiLFxuICAgICAgICBcImNhcmQtZGVzY3JpcHRpb25cIixcbiAgICAgICAgXCJjYXJkLW1lZGlhXCIsXG4gICAgICAgIFwiY2FyZC1vcmllbnRhdGlvblwiLFxuICAgICAgXSxcbiAgICB9KSxcbiAgICBhZ2VudDogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlJDUyBhZ2VudCBpZCB0byBzZW5kIGZyb20gKG9ubHkgbmVlZGVkIHdoZW4geW91ciB3b3Jrc3BhY2UgaGFzIG1vcmUgdGhhbiBvbmUg4oCUIHNlZSBgcmNzIGFnZW50c2ApXCIsXG4gICAgfSksXG4gICAgXCJjYXJkLXRpdGxlXCI6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJSaWNoIGNhcmQgdGl0bGUgKGNhcmRzIGhhdmUgbm8gU01TIGZvcm0g4oCUIFJDUy1jYXBhYmxlIHJlY2lwaWVudHMgb25seSlcIixcbiAgICB9KSxcbiAgICBcImNhcmQtZGVzY3JpcHRpb25cIjogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlJpY2ggY2FyZCBib2R5IHRleHQ7IHJlcXVpcmVkIHdpdGggLS1jYXJkLXRpdGxlXCIsXG4gICAgICBkZXBlbmRzT246IFtcImNhcmQtdGl0bGVcIl0sXG4gICAgfSksXG4gICAgXCJjYXJkLW1lZGlhXCI6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJQdWJsaWMgSlBFRywgUE5HLCBvciBHSUYgaW1hZ2UgVVJMIGZvciB0aGUgY2FyZFwiLFxuICAgICAgZGVwZW5kc09uOiBbXCJjYXJkLXRpdGxlXCJdLFxuICAgIH0pLFxuICAgIFwiY2FyZC1vcmllbnRhdGlvblwiOiBGbGFncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiQ2FyZCBsYXlvdXRcIixcbiAgICAgIG9wdGlvbnM6IFtcInZlcnRpY2FsXCIsIFwiaG9yaXpvbnRhbFwiXSxcbiAgICAgIGRlcGVuZHNPbjogW1wiY2FyZC10aXRsZVwiXSxcbiAgICB9KSxcbiAgICBcInN1Z2dlc3QtcmVwbHlcIjogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnUmVwbHkgY2hpcCBhcyBcInRleHQ9cG9zdGJhY2tcIiAoZS5nLiAtLXN1Z2dlc3QtcmVwbHkgXCJUcmFjayBvcmRlcj1UUkFDS1wiKS4gUmVwZWF0YWJsZS4nLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgfSksXG4gICAgXCJzdWdnZXN0LXVybFwiOiBGbGFncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdPcGVuLVVSTCBjaGlwIGFzIFwidGV4dD1wb3N0YmFjaz11cmxcIiAoZS5nLiAtLXN1Z2dlc3QtdXJsIFwiVmlldyBvcmRlcj1WSUVXPWh0dHBzOi8vZXhhbXBsZS5jb20vby80ODIxXCIpLiBSZXBlYXRhYmxlLicsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICB9KSxcbiAgICBcIm5vLWZhbGxiYWNrXCI6IEZsYWdzLmJvb2xlYW4oe1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRmFpbCB3aXRoIGFuIGVycm9yIGluc3RlYWQgb2YgZGVsaXZlcmluZyBhcyBTTVMgd2hlbiB0aGUgcmVjaXBpZW50IGRvZXNuJ3Qgc3VwcG9ydCBSQ1NcIixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0pLFxuICAgIFwiaWRlbXBvdGVuY3kta2V5XCI6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJJZGVtcG90ZW5jeSBrZXkgKDEtMjU1IHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzKS4gUmUtcnVubmluZyB3aXRoIHRoZSBzYW1lIGtleSB3aXRoaW4gMjQgaG91cnMgcmV0dXJucyB0aGUgb3JpZ2luYWwgcmVzdWx0IGluc3RlYWQgb2Ygc2VuZGluZyBhZ2Fpbi5cIixcbiAgICB9KSxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShSY3NTZW5kKTtcblxuICAgIGNvbnN0IGhhc0NhcmQgPSBmbGFnc1tcImNhcmQtdGl0bGVcIl0gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAoIWZsYWdzLnRleHQgJiYgIWhhc0NhcmQpIHtcbiAgICAgIGVycm9yKFwiUHJvdmlkZSBlaXRoZXIgLS10ZXh0IG9yIC0tY2FyZC10aXRsZVwiLCB7XG4gICAgICAgIGhpbnQ6ICdUZXh0OiAtLXRleHQgXCJIZWxsbyFcIiDCtyBDYXJkOiAtLWNhcmQtdGl0bGUgXCJTcHJpbmcgc2FsZVwiIC0tY2FyZC1kZXNjcmlwdGlvbiBcIjIwJSBvZmZcIicsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG4gICAgaWYgKGhhc0NhcmQgJiYgZmxhZ3NbXCJjYXJkLWRlc2NyaXB0aW9uXCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yKFwiTWlzc2luZyAtLWNhcmQtZGVzY3JpcHRpb24gZm9yIHRoZSBjYXJkXCIsIHtcbiAgICAgICAgaGludDogXCJSaWNoIGNhcmRzIG5lZWQgYm90aCBhIHRpdGxlIGFuZCBhIGRlc2NyaXB0aW9uXCIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXBsaWVzID0gcGFyc2VSZXBsaWVzKGZsYWdzW1wic3VnZ2VzdC1yZXBseVwiXSk7XG4gICAgaWYgKHR5cGVvZiByZXBsaWVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBlcnJvcihyZXBsaWVzKTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG4gICAgY29uc3QgdXJsQWN0aW9ucyA9IHBhcnNlVXJsQWN0aW9ucyhmbGFnc1tcInN1Z2dlc3QtdXJsXCJdKTtcbiAgICBpZiAodHlwZW9mIHVybEFjdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGVycm9yKHVybEFjdGlvbnMpO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cbiAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtcbiAgICAgIC4uLihyZXBsaWVzIGFzIFJjc1N1Z2dlc3Rpb25bXSksXG4gICAgICAuLi4odXJsQWN0aW9ucyBhcyBSY3NTdWdnZXN0aW9uW10pLFxuICAgIF07XG5cbiAgICBjb25zdCBzZW5kU3Bpbm5lciA9IHNwaW5uZXIoXCJTZW5kaW5nIFJDUyBtZXNzYWdlLi4uXCIpO1xuICAgIGlmICghaXNKc29uTW9kZSgpKSB7XG4gICAgICBzZW5kU3Bpbm5lci5zdGFydCgpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5wb3N0PFJjc1NlbmRSZXNwb25zZT4oXG4gICAgICAgIFwiL2FwaS92MS9tZXNzYWdlc1wiLFxuICAgICAgICB7XG4gICAgICAgICAgY2hhbm5lbDogXCJyY3NcIixcbiAgICAgICAgICB0bzogZmxhZ3MudG8sXG4gICAgICAgICAgLi4uKGZsYWdzLmFnZW50ICYmIHsgYWdlbnRJZDogZmxhZ3MuYWdlbnQgfSksXG4gICAgICAgICAgLi4uKGhhc0NhcmRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGNhcmQ6IHtcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBmbGFnc1tcImNhcmQtdGl0bGVcIl0sXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZmxhZ3NbXCJjYXJkLWRlc2NyaXB0aW9uXCJdLFxuICAgICAgICAgICAgICAgICAgLi4uKGZsYWdzW1wiY2FyZC1tZWRpYVwiXSAmJiB7XG4gICAgICAgICAgICAgICAgICAgIG1lZGlhVXJsOiBmbGFnc1tcImNhcmQtbWVkaWFcIl0sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIC4uLihmbGFnc1tcImNhcmQtb3JpZW50YXRpb25cIl0gJiYge1xuICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbjogZmxhZ3NbXCJjYXJkLW9yaWVudGF0aW9uXCJdLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAuLi4oc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCAmJiB7IHN1Z2dlc3Rpb25zIH0pLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIHRleHQ6IGZsYWdzLnRleHQsXG4gICAgICAgICAgICAgICAgLi4uKHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgJiYgeyBzdWdnZXN0aW9ucyB9KSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgLi4uKGZsYWdzW1wibm8tZmFsbGJhY2tcIl0gJiYgeyBmYWxsYmFja1RvU21zOiBmYWxzZSB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgeyBpZGVtcG90ZW5jeUtleTogZmxhZ3NbXCJpZGVtcG90ZW5jeS1rZXlcIl0gfSxcbiAgICAgICk7XG5cbiAgICAgIHNlbmRTcGlubmVyLnN0b3AoKTtcblxuICAgICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAgICBqc29uKHJlc3BvbnNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2UuZmVsbEJhY2tUbyA9PT0gXCJzbXNcIikge1xuICAgICAgICBzdWNjZXNzKFwiTWVzc2FnZSBxdWV1ZWQgYXMgU01TIOKAlCByZWNpcGllbnQgZG9lc24ndCBzdXBwb3J0IFJDU1wiLCB7XG4gICAgICAgICAgXCJNZXNzYWdlIElEXCI6IGNvbG9ycy5jb2RlKHJlc3BvbnNlLmlkKSxcbiAgICAgICAgICBUbzogcmVzcG9uc2UudG8sXG4gICAgICAgICAgRnJvbTogcmVzcG9uc2UuZnJvbSxcbiAgICAgICAgICBTdGF0dXM6IGZvcm1hdFN0YXR1cyhyZXNwb25zZS5zdGF0dXMpLFxuICAgICAgICAgIFNlZ21lbnRzOiByZXNwb25zZS5zZWdtZW50cyxcbiAgICAgICAgICBDcmVkaXRzOiBmb3JtYXRDcmVkaXRzKHJlc3BvbnNlLmNyZWRpdHNVc2VkKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXNwb25zZS5yY3M/LnN1Z2dlc3Rpb25zRHJvcHBlZCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICBcIlN1Z2dlc3Rpb24gY2hpcHMgaGF2ZSBubyBTTVMgZm9ybSBhbmQgd2VyZSBkcm9wcGVkIGZyb20gdGhpcyBtZXNzYWdlLlwiLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3VjY2VzcyhcIlJDUyBtZXNzYWdlIHF1ZXVlZFwiLCB7XG4gICAgICAgIFwiTWVzc2FnZSBJRFwiOiBjb2xvcnMuY29kZShyZXNwb25zZS5pZCksXG4gICAgICAgIFRvOiByZXNwb25zZS50byxcbiAgICAgICAgRnJvbTogcmVzcG9uc2UuZnJvbSxcbiAgICAgICAgS2luZDogcmVzcG9uc2UucmNzPy5raW5kID8/IChoYXNDYXJkID8gXCJjYXJkXCIgOiBcInRleHRcIiksXG4gICAgICAgIFN0YXR1czogZm9ybWF0U3RhdHVzKHJlc3BvbnNlLnN0YXR1cyksXG4gICAgICAgIENyZWRpdHM6IGZvcm1hdENyZWRpdHMocmVzcG9uc2UuY3JlZGl0c1VzZWQpLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHNlbmRTcGlubmVyLnN0b3AoKTtcblxuICAgICAgaWYgKFxuICAgICAgICBlcnIgaW5zdGFuY2VvZiBBcGlFcnJvciAmJlxuICAgICAgICBlcnIuY29kZSA9PT0gXCJyY3Nfbm90X3N1cHBvcnRlZF9mb3JfcmVjaXBpZW50XCJcbiAgICAgICkge1xuICAgICAgICBlcnJvcihlcnIubWVzc2FnZSwge1xuICAgICAgICAgIGhpbnQ6IGhhc0NhcmRcbiAgICAgICAgICAgID8gXCJDYXJkcyBoYXZlIG5vIFNNUyBmb3JtIOKAlCBzZW5kIGEgdGV4dCBtZXNzYWdlIHRvIHJlYWNoIG5vbi1SQ1MgcmVjaXBpZW50c1wiXG4gICAgICAgICAgICA6IFwiRHJvcCAtLW5vLWZhbGxiYWNrIHRvIGRlbGl2ZXIgdG8gbm9uLVJDUyByZWNpcGllbnRzIGFzIFNNU1wiLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvcikge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICBlcnIubWVzc2FnZSA9PT0gXCJSZXNvdXJjZSBub3QgZm91bmRcIlxuICAgICAgICAgICAgPyBcIlJDUyBpc24ndCBhdmFpbGFibGUgb24geW91ciB3b3Jrc3BhY2UgeWV0LlwiXG4gICAgICAgICAgICA6IGVyci5tZXNzYWdlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhpbnQ6IFwiUkNTIGlzIHJvbGxpbmcgb3V0IGdyYWR1YWxseSDigJQgY29udGFjdCBzdXBwb3J0QHNlbmRseS5saXZlIGZvciBlYXJseSBhY2Nlc3MuXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgQXBpS2V5UmVxdWlyZWRFcnJvcikge1xuICAgICAgICBlcnJvcihcIlJDUyBtZXNzYWdlcyByZXF1aXJlIGEgbGl2ZSBBUEkga2V5LlwiLCB7XG4gICAgICAgICAgaGludDogXCJSQ1MgZGVsaXZlcnkgaXMgbmV2ZXIgc2ltdWxhdGVkIG9uIGEgdGVzdCBrZXkg4oCUIGNyZWF0ZSBvbmUgd2l0aCBgc2VuZGx5IGtleXMgY3JlYXRlIC0tdHlwZSBsaXZlYFwiLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGVyciBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvciAmJlxuICAgICAgICAvbW9yZSB0aGFuIG9uZSBSQ1MgYWdlbnQvaS50ZXN0KGVyci5tZXNzYWdlID8/IFwiXCIpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IoZXJyLm1lc3NhZ2UsIHtcbiAgICAgICAgICBoaW50OiBcIlBhc3MgLS1hZ2VudCA8aWQ+IOKAlCBsaXN0IHRoZW0gd2l0aCBgc2VuZGx5IHJjcyBhZ2VudHNgXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZXJyIGluc3RhbmNlb2YgQXV0aGVudGljYXRpb25FcnJvciAmJlxuICAgICAgICAvb3B0ZWQgb3V0L2kudGVzdChlcnIubWVzc2FnZSA/PyBcIlwiKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGVyciBpbnN0YW5jZW9mIEF1dGhlbnRpY2F0aW9uRXJyb3IgJiZcbiAgICAgICAgL2FnZW50L2kudGVzdChlcnIubWVzc2FnZSA/PyBcIlwiKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yKGVyci5tZXNzYWdlLCB7XG4gICAgICAgICAgaGludDogXCJTZWUgd2hpY2ggYWdlbnRzIGNhbiBzZW5kIHdpdGggYHNlbmRseSByY3MgYWdlbnRzYFwiLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGVyciBpbnN0YW5jZW9mIEF1dGhlbnRpY2F0aW9uRXJyb3IgJiZcbiAgICAgICAgL3Jjc3x2ZXJpZmljYXRpb258bm90IHN1cHBvcnRlZHxyZWdpc3RyYXRpb24vaS50ZXN0KGVyci5tZXNzYWdlID8/IFwiXCIpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IoZXJyLm1lc3NhZ2UsIHtcbiAgICAgICAgICBoaW50OiBcIlRoaXMgcmVjaXBpZW50IGNhbid0IHJlY2VpdmUgUkNTIGFuZCB5b3VyIGFjY291bnQgY2FuJ3Qgc2VuZCBTTVMgdG8gdGhpcyBkZXN0aW5hdGlvbiDigJQgY29tcGxldGUgdmVyaWZpY2F0aW9uLCBvciBtZXNzYWdlIGFuIFJDUy1jYXBhYmxlIHJlY2lwaWVudFwiLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/dist/commands/send.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export default class Send extends AuthenticatedCommand {
|
|
|
6
6
|
to: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
7
|
text: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
8
|
from: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
|
+
"idempotency-key": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
10
|
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
10
11
|
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
12
|
};
|