@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.
Files changed (86) hide show
  1. package/README.md +268 -0
  2. package/dist/commands/business-upgrade/resubmit.js +3 -3
  3. package/dist/commands/business-upgrade/start.js +3 -3
  4. package/dist/commands/config/list.js +14 -2
  5. package/dist/commands/config/set.js +16 -3
  6. package/dist/commands/countries.js +2 -2
  7. package/dist/commands/credits/index.d.ts +1 -0
  8. package/dist/commands/credits/index.js +4 -0
  9. package/dist/commands/doctor.d.ts +12 -0
  10. package/dist/commands/doctor.js +51 -8
  11. package/dist/commands/enterprise/upload-verification-document.js +3 -3
  12. package/dist/commands/enterprise/verification/resubmit.js +2 -2
  13. package/dist/commands/enterprise/verification/submit.js +2 -2
  14. package/dist/commands/events/listen.js +3 -3
  15. package/dist/commands/numbers/buy.js +19 -4
  16. package/dist/commands/rcs/agents/create.d.ts +44 -0
  17. package/dist/commands/rcs/agents/create.js +71 -0
  18. package/dist/commands/rcs/agents/devices/set.d.ts +16 -0
  19. package/dist/commands/rcs/agents/devices/set.js +77 -0
  20. package/dist/commands/rcs/agents/get.d.ts +13 -0
  21. package/dist/commands/rcs/agents/get.js +51 -0
  22. package/dist/commands/rcs/agents/request-launch.d.ts +16 -0
  23. package/dist/commands/rcs/agents/request-launch.js +71 -0
  24. package/dist/commands/rcs/agents/submit.d.ts +14 -0
  25. package/dist/commands/rcs/agents/submit.js +56 -0
  26. package/dist/commands/rcs/agents/update.d.ts +48 -0
  27. package/dist/commands/rcs/agents/update.js +81 -0
  28. package/dist/commands/rcs/agents.d.ts +10 -0
  29. package/dist/commands/rcs/agents.js +97 -0
  30. package/dist/commands/rcs/brands/create.d.ts +30 -0
  31. package/dist/commands/rcs/brands/create.js +55 -0
  32. package/dist/commands/rcs/brands/update.d.ts +33 -0
  33. package/dist/commands/rcs/brands/update.js +62 -0
  34. package/dist/commands/rcs/capability.d.ts +12 -0
  35. package/dist/commands/rcs/capability.js +85 -0
  36. package/dist/commands/rcs/dossier.d.ts +10 -0
  37. package/dist/commands/rcs/dossier.js +73 -0
  38. package/dist/commands/rcs/registration.d.ts +10 -0
  39. package/dist/commands/rcs/registration.js +59 -0
  40. package/dist/commands/rcs/send.d.ts +21 -0
  41. package/dist/commands/rcs/send.js +240 -0
  42. package/dist/commands/send.d.ts +1 -0
  43. package/dist/commands/send.js +5 -2
  44. package/dist/commands/sms/batch.d.ts +1 -0
  45. package/dist/commands/sms/batch.js +11 -1
  46. package/dist/commands/sms/group.d.ts +1 -0
  47. package/dist/commands/sms/group.js +5 -2
  48. package/dist/commands/sms/schedule.d.ts +1 -0
  49. package/dist/commands/sms/schedule.js +5 -2
  50. package/dist/commands/sms/send.d.ts +1 -0
  51. package/dist/commands/sms/send.js +5 -2
  52. package/dist/commands/whatsapp/connect.d.ts +17 -0
  53. package/dist/commands/whatsapp/connect.js +166 -0
  54. package/dist/commands/whatsapp/profile/get.d.ts +13 -0
  55. package/dist/commands/whatsapp/profile/get.js +67 -0
  56. package/dist/commands/whatsapp/profile/update.d.ts +20 -0
  57. package/dist/commands/whatsapp/profile/update.js +109 -0
  58. package/dist/commands/whatsapp/send.d.ts +17 -0
  59. package/dist/commands/whatsapp/send.js +151 -0
  60. package/dist/commands/whatsapp/senders.d.ts +10 -0
  61. package/dist/commands/whatsapp/senders.js +74 -0
  62. package/dist/commands/whatsapp/status.d.ts +13 -0
  63. package/dist/commands/whatsapp/status.js +92 -0
  64. package/dist/commands/whatsapp/templates/create.d.ts +19 -0
  65. package/dist/commands/whatsapp/templates/create.js +205 -0
  66. package/dist/commands/whatsapp/templates/delete.d.ts +14 -0
  67. package/dist/commands/whatsapp/templates/delete.js +69 -0
  68. package/dist/commands/whatsapp/templates/list.d.ts +10 -0
  69. package/dist/commands/whatsapp/templates/list.js +77 -0
  70. package/dist/commands/whatsapp/templates/update.d.ts +18 -0
  71. package/dist/commands/whatsapp/templates/update.js +160 -0
  72. package/dist/commands/whoami.js +32 -6
  73. package/dist/hooks/command-not-found.js +46 -61
  74. package/dist/lib/api-client.d.ts +20 -3
  75. package/dist/lib/api-client.js +96 -17
  76. package/dist/lib/auth.js +10 -6
  77. package/dist/lib/base-command.js +13 -2
  78. package/dist/lib/config.d.ts +50 -1
  79. package/dist/lib/config.js +144 -7
  80. package/dist/lib/help.d.ts +10 -0
  81. package/dist/lib/help.js +23 -0
  82. package/dist/lib/onboarding.js +3 -3
  83. package/dist/lib/rcs-registration.d.ts +231 -0
  84. package/dist/lib/rcs-registration.js +734 -0
  85. package/oclif.manifest.json +2603 -350
  86. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9yY3Mvc2VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLGVBQWUsR0FDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sRUFDUCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGFBQWEsR0FDZCxNQUFNLHFCQUFxQixDQUFDO0FBNEI3QixxRUFBcUU7QUFDckUsU0FBUyxZQUFZLENBQ25CLEdBQXlCO0lBRXpCLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDeEMsTUFBTSxHQUFHLEdBQW9CLEVBQUUsQ0FBQztJQUNoQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sNEJBQTRCLElBQUksa0RBQWtELENBQUM7UUFDNUYsQ0FBQztRQUNELEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDUCxLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRTtnQkFDL0IsWUFB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Q0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUNoQyxDQUFDO2dCQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO29CQUNqQixJQUFJLEVBQUUsb0RBQW9EO2lCQUMzRCxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLElBQ0wsR0FBRyxZQUFZLG1CQUFtQjtnQkFDbEMsOENBQThDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQ3RFLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7b0JBQ2pCLElBQUksRUFBRSxtSkFBbUo7aUJBQzFKLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEdBQUcsQ0FBQztZQUNaLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHtcbiAgYXBpQ2xpZW50LFxuICBBcGlFcnJvcixcbiAgQXBpS2V5UmVxdWlyZWRFcnJvcixcbiAgQXV0aGVudGljYXRpb25FcnJvcixcbiAgTm90Rm91bmRFcnJvcixcbiAgVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tIFwiLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7XG4gIHN1Y2Nlc3MsXG4gIGVycm9yLFxuICBqc29uLFxuICBjb2xvcnMsXG4gIHNwaW5uZXIsXG4gIGlzSnNvbk1vZGUsXG4gIGZvcm1hdFN0YXR1cyxcbiAgZm9ybWF0Q3JlZGl0cyxcbn0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxuaW50ZXJmYWNlIFJjc1NlbmRSZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgZmVsbEJhY2tUbz86IHN0cmluZztcbiAgbWVzc2FnZV9mb3JtYXQ6IHN0cmluZztcbiAgdG86IHN0cmluZztcbiAgZnJvbTogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmcgfCBudWxsO1xuICBzdGF0dXM6IHN0cmluZztcbiAgc2VnbWVudHM6IG51bWJlcjtcbiAgY3JlZGl0c1VzZWQ6IG51bWJlcjtcbiAgcmNzOiB7XG4gICAga2luZD86IHN0cmluZztcbiAgICBhZ2VudElkOiBzdHJpbmc7XG4gICAgYWdlbnROYW1lPzogc3RyaW5nO1xuICAgIHJlcXVlc3RlZENoYW5uZWw/OiBzdHJpbmc7XG4gICAgc3VnZ2VzdGlvbnNEcm9wcGVkPzogYm9vbGVhbjtcbiAgfTtcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxudHlwZSBSY3NTdWdnZXN0aW9uID1cbiAgfCB7IHJlcGx5OiB7IHRleHQ6IHN0cmluZzsgcG9zdGJhY2tEYXRhOiBzdHJpbmcgfSB9XG4gIHwgeyBhY3Rpb246IHsgdGV4dDogc3RyaW5nOyBwb3N0YmFja0RhdGE6IHN0cmluZzsgdXJsOiBzdHJpbmcgfSB9O1xuXG4vKiogUGFyc2UgcmVwZWF0YWJsZSBcInRleHQ9cG9zdGJhY2tcIiBwYWlycyBpbnRvIHJlcGx5IHN1Z2dlc3Rpb25zLiAqL1xuZnVuY3Rpb24gcGFyc2VSZXBsaWVzKFxuICByYXc6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuKTogUmNzU3VnZ2VzdGlvbltdIHwgc3RyaW5nIHtcbiAgaWYgKCFyYXcgfHwgcmF3Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICBjb25zdCBvdXQ6IFJjc1N1Z2dlc3Rpb25bXSA9IFtdO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmF3KSB7XG4gICAgY29uc3QgaWR4ID0gaXRlbS5pbmRleE9mKFwiPVwiKTtcbiAgICBpZiAoaWR4IDw9IDAgfHwgaWR4ID09PSBpdGVtLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBgSW52YWxpZCAtLXN1Z2dlc3QtcmVwbHkgXCIke2l0ZW19XCIg4oCUIHVzZSB0ZXh0PXBvc3RiYWNrIChlLmcuIFwiVHJhY2sgb3JkZXI9VFJBQ0tcIilgO1xuICAgIH1cbiAgICBvdXQucHVzaCh7XG4gICAgICByZXBseToge1xuICAgICAgICB0ZXh0OiBpdGVtLnNsaWNlKDAsIGlkeCkudHJpbSgpLFxuICAgICAgICBwb3N0YmFja0RhdGE6IGl0ZW0uc2xpY2UoaWR4ICsgMSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBQYXJzZSByZXBlYXRhYmxlIFwidGV4dD1wb3N0YmFjaz11cmxcIiB0cmlwbGVzIGludG8gb3Blbi1VUkwgc3VnZ2VzdGlvbnMuICovXG5mdW5jdGlvbiBwYXJzZVVybEFjdGlvbnMoXG4gIHJhdzogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4pOiBSY3NTdWdnZXN0aW9uW10gfCBzdHJpbmcge1xuICBpZiAoIXJhdyB8fCByYXcubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gIGNvbnN0IG91dDogUmNzU3VnZ2VzdGlvbltdID0gW107XG4gIGZvciAoY29uc3QgaXRlbSBvZiByYXcpIHtcbiAgICBjb25zdCBmaXJzdCA9IGl0ZW0uaW5kZXhPZihcIj1cIik7XG4gICAgY29uc3Qgc2Vjb25kID0gZmlyc3QgPT09IC0xID8gLTEgOiBpdGVtLmluZGV4T2YoXCI9XCIsIGZpcnN0ICsgMSk7XG4gICAgY29uc3QgdGV4dCA9IGZpcnN0ID4gMCA/IGl0ZW0uc2xpY2UoMCwgZmlyc3QpLnRyaW0oKSA6IFwiXCI7XG4gICAgY29uc3QgcG9zdGJhY2tEYXRhID0gc2Vjb25kID4gZmlyc3QgKyAxID8gaXRlbS5zbGljZShmaXJzdCArIDEsIHNlY29uZCkgOiBcIlwiO1xuICAgIGNvbnN0IHVybCA9IHNlY29uZCA9PT0gLTEgPyBcIlwiIDogaXRlbS5zbGljZShzZWNvbmQgKyAxKTtcbiAgICBpZiAoIXRleHQgfHwgIXBvc3RiYWNrRGF0YSB8fCAhdXJsKSB7XG4gICAgICByZXR1cm4gYEludmFsaWQgLS1zdWdnZXN0LXVybCBcIiR7aXRlbX1cIiDigJQgdXNlIHRleHQ9cG9zdGJhY2s9dXJsIChlLmcuIFwiVmlldyBvcmRlcj1WSUVXPWh0dHBzOi8vZXhhbXBsZS5jb20vby80ODIxXCIpYDtcbiAgICB9XG4gICAgb3V0LnB1c2goeyBhY3Rpb246IHsgdGV4dCwgcG9zdGJhY2tEYXRhLCB1cmwgfSB9KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSY3NTZW5kIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPVxuICAgIFwiU2VuZCBhbiBSQ1MgbWVzc2FnZSDigJQgcmljaCB0ZXh0IHdpdGggc3VnZ2VzdGlvbiBjaGlwcyBvciBhIHJpY2ggY2FyZDsgcmVjaXBpZW50cyB3aXRob3V0IFJDUyBnZXQgaXQgYXMgcGxhaW4gU01TIHVubGVzcyAtLW5vLWZhbGxiYWNrXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgICc8JT0gY29uZmlnLmJpbiAlPiByY3Mgc2VuZCAtLXRvICsxNTEyNTU1MDE5MCAtLXRleHQgXCJZb3VyIG9yZGVyIHNoaXBwZWQhXCInLFxuICAgICc8JT0gY29uZmlnLmJpbiAlPiByY3Mgc2VuZCAtLXRvICsxNTEyNTU1MDE5MCAtLXRleHQgXCJOZWVkIGFueXRoaW5nIGVsc2U/XCIgLS1zdWdnZXN0LXJlcGx5IFwiVHJhY2sgb3JkZXI9VFJBQ0tcIiAtLXN1Z2dlc3QtdXJsIFwiVmlldyByZWNlaXB0PVJFQ0VJUFQ9aHR0cHM6Ly9leGFtcGxlLmNvbS9yLzQ4MjFcIicsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHJjcyBzZW5kIC0tdG8gKzE1MTI1NTUwMTkwIC0tY2FyZC10aXRsZSBcIlNwcmluZyBzYWxlXCIgLS1jYXJkLWRlc2NyaXB0aW9uIFwiMjAlIG9mZiBldmVyeXRoaW5nIHRoaXMgd2Vla2VuZFwiIC0tY2FyZC1tZWRpYSBodHRwczovL2V4YW1wbGUuY29tL3NhbGUuanBnJyxcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gcmNzIHNlbmQgLS10byArMTUxMjU1NTAxOTAgLS10ZXh0IFwiUkNTIG9ubHkgcGxlYXNlXCIgLS1uby1mYWxsYmFjaycsXG4gIF07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgICB0bzogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGNoYXI6IFwidFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiUmVjaXBpZW50IHBob25lIG51bWJlciAoRS4xNjQgZm9ybWF0KVwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gICAgdGV4dDogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGNoYXI6IFwibVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiTWVzc2FnZSB0ZXh0IChmYWxscyBiYWNrIHRvIFNNUyBmb3Igbm9uLVJDUyByZWNpcGllbnRzKVwiLFxuICAgICAgZXhjbHVzaXZlOiBbXG4gICAgICAgIFwiY2FyZC10aXRsZVwiLFxuICAgICAgICBcImNhcmQtZGVzY3JpcHRpb25cIixcbiAgICAgICAgXCJjYXJkLW1lZGlhXCIsXG4gICAgICAgIFwiY2FyZC1vcmllbnRhdGlvblwiLFxuICAgICAgXSxcbiAgICB9KSxcbiAgICBhZ2VudDogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlJDUyBhZ2VudCBpZCB0byBzZW5kIGZyb20gKG9ubHkgbmVlZGVkIHdoZW4geW91ciB3b3Jrc3BhY2UgaGFzIG1vcmUgdGhhbiBvbmUg4oCUIHNlZSBgcmNzIGFnZW50c2ApXCIsXG4gICAgfSksXG4gICAgXCJjYXJkLXRpdGxlXCI6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJSaWNoIGNhcmQgdGl0bGUgKGNhcmRzIGhhdmUgbm8gU01TIGZvcm0g4oCUIFJDUy1jYXBhYmxlIHJlY2lwaWVudHMgb25seSlcIixcbiAgICB9KSxcbiAgICBcImNhcmQtZGVzY3JpcHRpb25cIjogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlJpY2ggY2FyZCBib2R5IHRleHQ7IHJlcXVpcmVkIHdpdGggLS1jYXJkLXRpdGxlXCIsXG4gICAgICBkZXBlbmRzT246IFtcImNhcmQtdGl0bGVcIl0sXG4gICAgfSksXG4gICAgXCJjYXJkLW1lZGlhXCI6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJQdWJsaWMgSlBFRywgUE5HLCBvciBHSUYgaW1hZ2UgVVJMIGZvciB0aGUgY2FyZFwiLFxuICAgICAgZGVwZW5kc09uOiBbXCJjYXJkLXRpdGxlXCJdLFxuICAgIH0pLFxuICAgIFwiY2FyZC1vcmllbnRhdGlvblwiOiBGbGFncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiQ2FyZCBsYXlvdXRcIixcbiAgICAgIG9wdGlvbnM6IFtcInZlcnRpY2FsXCIsIFwiaG9yaXpvbnRhbFwiXSxcbiAgICAgIGRlcGVuZHNPbjogW1wiY2FyZC10aXRsZVwiXSxcbiAgICB9KSxcbiAgICBcInN1Z2dlc3QtcmVwbHlcIjogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnUmVwbHkgY2hpcCBhcyBcInRleHQ9cG9zdGJhY2tcIiAoZS5nLiAtLXN1Z2dlc3QtcmVwbHkgXCJUcmFjayBvcmRlcj1UUkFDS1wiKS4gUmVwZWF0YWJsZS4nLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgfSksXG4gICAgXCJzdWdnZXN0LXVybFwiOiBGbGFncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdPcGVuLVVSTCBjaGlwIGFzIFwidGV4dD1wb3N0YmFjaz11cmxcIiAoZS5nLiAtLXN1Z2dlc3QtdXJsIFwiVmlldyBvcmRlcj1WSUVXPWh0dHBzOi8vZXhhbXBsZS5jb20vby80ODIxXCIpLiBSZXBlYXRhYmxlLicsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICB9KSxcbiAgICBcIm5vLWZhbGxiYWNrXCI6IEZsYWdzLmJvb2xlYW4oe1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRmFpbCB3aXRoIGFuIGVycm9yIGluc3RlYWQgb2YgZGVsaXZlcmluZyBhcyBTTVMgd2hlbiB0aGUgcmVjaXBpZW50IGRvZXNuJ3Qgc3VwcG9ydCBSQ1NcIixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0pLFxuICAgIFwiaWRlbXBvdGVuY3kta2V5XCI6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJJZGVtcG90ZW5jeSBrZXkgKDEtMjU1IHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzKS4gUmUtcnVubmluZyB3aXRoIHRoZSBzYW1lIGtleSB3aXRoaW4gMjQgaG91cnMgcmV0dXJucyB0aGUgb3JpZ2luYWwgcmVzdWx0IGluc3RlYWQgb2Ygc2VuZGluZyBhZ2Fpbi5cIixcbiAgICB9KSxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShSY3NTZW5kKTtcblxuICAgIGNvbnN0IGhhc0NhcmQgPSBmbGFnc1tcImNhcmQtdGl0bGVcIl0gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAoIWZsYWdzLnRleHQgJiYgIWhhc0NhcmQpIHtcbiAgICAgIGVycm9yKFwiUHJvdmlkZSBlaXRoZXIgLS10ZXh0IG9yIC0tY2FyZC10aXRsZVwiLCB7XG4gICAgICAgIGhpbnQ6ICdUZXh0OiAtLXRleHQgXCJIZWxsbyFcIiDCtyBDYXJkOiAtLWNhcmQtdGl0bGUgXCJTcHJpbmcgc2FsZVwiIC0tY2FyZC1kZXNjcmlwdGlvbiBcIjIwJSBvZmZcIicsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG4gICAgaWYgKGhhc0NhcmQgJiYgZmxhZ3NbXCJjYXJkLWRlc2NyaXB0aW9uXCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yKFwiTWlzc2luZyAtLWNhcmQtZGVzY3JpcHRpb24gZm9yIHRoZSBjYXJkXCIsIHtcbiAgICAgICAgaGludDogXCJSaWNoIGNhcmRzIG5lZWQgYm90aCBhIHRpdGxlIGFuZCBhIGRlc2NyaXB0aW9uXCIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXBsaWVzID0gcGFyc2VSZXBsaWVzKGZsYWdzW1wic3VnZ2VzdC1yZXBseVwiXSk7XG4gICAgaWYgKHR5cGVvZiByZXBsaWVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBlcnJvcihyZXBsaWVzKTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG4gICAgY29uc3QgdXJsQWN0aW9ucyA9IHBhcnNlVXJsQWN0aW9ucyhmbGFnc1tcInN1Z2dlc3QtdXJsXCJdKTtcbiAgICBpZiAodHlwZW9mIHVybEFjdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGVycm9yKHVybEFjdGlvbnMpO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cbiAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtcbiAgICAgIC4uLihyZXBsaWVzIGFzIFJjc1N1Z2dlc3Rpb25bXSksXG4gICAgICAuLi4odXJsQWN0aW9ucyBhcyBSY3NTdWdnZXN0aW9uW10pLFxuICAgIF07XG5cbiAgICBjb25zdCBzZW5kU3Bpbm5lciA9IHNwaW5uZXIoXCJTZW5kaW5nIFJDUyBtZXNzYWdlLi4uXCIpO1xuICAgIGlmICghaXNKc29uTW9kZSgpKSB7XG4gICAgICBzZW5kU3Bpbm5lci5zdGFydCgpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5wb3N0PFJjc1NlbmRSZXNwb25zZT4oXG4gICAgICAgIFwiL2FwaS92MS9tZXNzYWdlc1wiLFxuICAgICAgICB7XG4gICAgICAgICAgY2hhbm5lbDogXCJyY3NcIixcbiAgICAgICAgICB0bzogZmxhZ3MudG8sXG4gICAgICAgICAgLi4uKGZsYWdzLmFnZW50ICYmIHsgYWdlbnRJZDogZmxhZ3MuYWdlbnQgfSksXG4gICAgICAgICAgLi4uKGhhc0NhcmRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGNhcmQ6IHtcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBmbGFnc1tcImNhcmQtdGl0bGVcIl0sXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZmxhZ3NbXCJjYXJkLWRlc2NyaXB0aW9uXCJdLFxuICAgICAgICAgICAgICAgICAgLi4uKGZsYWdzW1wiY2FyZC1tZWRpYVwiXSAmJiB7XG4gICAgICAgICAgICAgICAgICAgIG1lZGlhVXJsOiBmbGFnc1tcImNhcmQtbWVkaWFcIl0sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIC4uLihmbGFnc1tcImNhcmQtb3JpZW50YXRpb25cIl0gJiYge1xuICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbjogZmxhZ3NbXCJjYXJkLW9yaWVudGF0aW9uXCJdLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAuLi4oc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCAmJiB7IHN1Z2dlc3Rpb25zIH0pLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIHRleHQ6IGZsYWdzLnRleHQsXG4gICAgICAgICAgICAgICAgLi4uKHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgJiYgeyBzdWdnZXN0aW9ucyB9KSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgLi4uKGZsYWdzW1wibm8tZmFsbGJhY2tcIl0gJiYgeyBmYWxsYmFja1RvU21zOiBmYWxzZSB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgeyBpZGVtcG90ZW5jeUtleTogZmxhZ3NbXCJpZGVtcG90ZW5jeS1rZXlcIl0gfSxcbiAgICAgICk7XG5cbiAgICAgIHNlbmRTcGlubmVyLnN0b3AoKTtcblxuICAgICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAgICBqc29uKHJlc3BvbnNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2UuZmVsbEJhY2tUbyA9PT0gXCJzbXNcIikge1xuICAgICAgICBzdWNjZXNzKFwiTWVzc2FnZSBxdWV1ZWQgYXMgU01TIOKAlCByZWNpcGllbnQgZG9lc24ndCBzdXBwb3J0IFJDU1wiLCB7XG4gICAgICAgICAgXCJNZXNzYWdlIElEXCI6IGNvbG9ycy5jb2RlKHJlc3BvbnNlLmlkKSxcbiAgICAgICAgICBUbzogcmVzcG9uc2UudG8sXG4gICAgICAgICAgRnJvbTogcmVzcG9uc2UuZnJvbSxcbiAgICAgICAgICBTdGF0dXM6IGZvcm1hdFN0YXR1cyhyZXNwb25zZS5zdGF0dXMpLFxuICAgICAgICAgIFNlZ21lbnRzOiByZXNwb25zZS5zZWdtZW50cyxcbiAgICAgICAgICBDcmVkaXRzOiBmb3JtYXRDcmVkaXRzKHJlc3BvbnNlLmNyZWRpdHNVc2VkKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXNwb25zZS5yY3M/LnN1Z2dlc3Rpb25zRHJvcHBlZCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICBcIlN1Z2dlc3Rpb24gY2hpcHMgaGF2ZSBubyBTTVMgZm9ybSBhbmQgd2VyZSBkcm9wcGVkIGZyb20gdGhpcyBtZXNzYWdlLlwiLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3VjY2VzcyhcIlJDUyBtZXNzYWdlIHF1ZXVlZFwiLCB7XG4gICAgICAgIFwiTWVzc2FnZSBJRFwiOiBjb2xvcnMuY29kZShyZXNwb25zZS5pZCksXG4gICAgICAgIFRvOiByZXNwb25zZS50byxcbiAgICAgICAgRnJvbTogcmVzcG9uc2UuZnJvbSxcbiAgICAgICAgS2luZDogcmVzcG9uc2UucmNzPy5raW5kID8/IChoYXNDYXJkID8gXCJjYXJkXCIgOiBcInRleHRcIiksXG4gICAgICAgIFN0YXR1czogZm9ybWF0U3RhdHVzKHJlc3BvbnNlLnN0YXR1cyksXG4gICAgICAgIENyZWRpdHM6IGZvcm1hdENyZWRpdHMocmVzcG9uc2UuY3JlZGl0c1VzZWQpLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHNlbmRTcGlubmVyLnN0b3AoKTtcblxuICAgICAgaWYgKFxuICAgICAgICBlcnIgaW5zdGFuY2VvZiBBcGlFcnJvciAmJlxuICAgICAgICBlcnIuY29kZSA9PT0gXCJyY3Nfbm90X3N1cHBvcnRlZF9mb3JfcmVjaXBpZW50XCJcbiAgICAgICkge1xuICAgICAgICBlcnJvcihlcnIubWVzc2FnZSwge1xuICAgICAgICAgIGhpbnQ6IGhhc0NhcmRcbiAgICAgICAgICAgID8gXCJDYXJkcyBoYXZlIG5vIFNNUyBmb3JtIOKAlCBzZW5kIGEgdGV4dCBtZXNzYWdlIHRvIHJlYWNoIG5vbi1SQ1MgcmVjaXBpZW50c1wiXG4gICAgICAgICAgICA6IFwiRHJvcCAtLW5vLWZhbGxiYWNrIHRvIGRlbGl2ZXIgdG8gbm9uLVJDUyByZWNpcGllbnRzIGFzIFNNU1wiLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvcikge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICBlcnIubWVzc2FnZSA9PT0gXCJSZXNvdXJjZSBub3QgZm91bmRcIlxuICAgICAgICAgICAgPyBcIlJDUyBpc24ndCBhdmFpbGFibGUgb24geW91ciB3b3Jrc3BhY2UgeWV0LlwiXG4gICAgICAgICAgICA6IGVyci5tZXNzYWdlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhpbnQ6IFwiUkNTIGlzIHJvbGxpbmcgb3V0IGdyYWR1YWxseSDigJQgY29udGFjdCBzdXBwb3J0QHNlbmRseS5saXZlIGZvciBlYXJseSBhY2Nlc3MuXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgQXBpS2V5UmVxdWlyZWRFcnJvcikge1xuICAgICAgICBlcnJvcihcIlJDUyBtZXNzYWdlcyByZXF1aXJlIGEgbGl2ZSBBUEkga2V5LlwiLCB7XG4gICAgICAgICAgaGludDogXCJSQ1MgZGVsaXZlcnkgaXMgbmV2ZXIgc2ltdWxhdGVkIG9uIGEgdGVzdCBrZXkg4oCUIGNyZWF0ZSBvbmUgd2l0aCBgc2VuZGx5IGtleXMgY3JlYXRlIC0tdHlwZSBsaXZlYFwiLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGVyciBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvciAmJlxuICAgICAgICAvbW9yZSB0aGFuIG9uZSBSQ1MgYWdlbnQvaS50ZXN0KGVyci5tZXNzYWdlID8/IFwiXCIpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IoZXJyLm1lc3NhZ2UsIHtcbiAgICAgICAgICBoaW50OiBcIlBhc3MgLS1hZ2VudCA8aWQ+IOKAlCBsaXN0IHRoZW0gd2l0aCBgc2VuZGx5IHJjcyBhZ2VudHNgXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZXJyIGluc3RhbmNlb2YgQXV0aGVudGljYXRpb25FcnJvciAmJlxuICAgICAgICAvb3B0ZWQgb3V0L2kudGVzdChlcnIubWVzc2FnZSA/PyBcIlwiKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGVyciBpbnN0YW5jZW9mIEF1dGhlbnRpY2F0aW9uRXJyb3IgJiZcbiAgICAgICAgL2FnZW50L2kudGVzdChlcnIubWVzc2FnZSA/PyBcIlwiKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yKGVyci5tZXNzYWdlLCB7XG4gICAgICAgICAgaGludDogXCJTZWUgd2hpY2ggYWdlbnRzIGNhbiBzZW5kIHdpdGggYHNlbmRseSByY3MgYWdlbnRzYFwiLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGVyciBpbnN0YW5jZW9mIEF1dGhlbnRpY2F0aW9uRXJyb3IgJiZcbiAgICAgICAgL3Jjc3x2ZXJpZmljYXRpb258bm90IHN1cHBvcnRlZHxyZWdpc3RyYXRpb24vaS50ZXN0KGVyci5tZXNzYWdlID8/IFwiXCIpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IoZXJyLm1lc3NhZ2UsIHtcbiAgICAgICAgICBoaW50OiBcIlRoaXMgcmVjaXBpZW50IGNhbid0IHJlY2VpdmUgUkNTIGFuZCB5b3VyIGFjY291bnQgY2FuJ3Qgc2VuZCBTTVMgdG8gdGhpcyBkZXN0aW5hdGlvbiDigJQgY29tcGxldGUgdmVyaWZpY2F0aW9uLCBvciBtZXNzYWdlIGFuIFJDUy1jYXBhYmxlIHJlY2lwaWVudFwiLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -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
  };