@sendly/cli 3.37.0 → 3.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +178 -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.d.ts +10 -0
  17. package/dist/commands/rcs/agents.js +89 -0
  18. package/dist/commands/rcs/capability.d.ts +12 -0
  19. package/dist/commands/rcs/capability.js +85 -0
  20. package/dist/commands/rcs/send.d.ts +21 -0
  21. package/dist/commands/rcs/send.js +240 -0
  22. package/dist/commands/send.d.ts +1 -0
  23. package/dist/commands/send.js +5 -2
  24. package/dist/commands/sms/batch.d.ts +1 -0
  25. package/dist/commands/sms/batch.js +11 -1
  26. package/dist/commands/sms/group.d.ts +1 -0
  27. package/dist/commands/sms/group.js +5 -2
  28. package/dist/commands/sms/schedule.d.ts +1 -0
  29. package/dist/commands/sms/schedule.js +5 -2
  30. package/dist/commands/sms/send.d.ts +1 -0
  31. package/dist/commands/sms/send.js +5 -2
  32. package/dist/commands/webhooks/listen.js +2 -2
  33. package/dist/commands/whatsapp/connect.d.ts +17 -0
  34. package/dist/commands/whatsapp/connect.js +166 -0
  35. package/dist/commands/whatsapp/profile/get.d.ts +13 -0
  36. package/dist/commands/whatsapp/profile/get.js +67 -0
  37. package/dist/commands/whatsapp/profile/update.d.ts +20 -0
  38. package/dist/commands/whatsapp/profile/update.js +109 -0
  39. package/dist/commands/whatsapp/send.d.ts +17 -0
  40. package/dist/commands/whatsapp/send.js +151 -0
  41. package/dist/commands/whatsapp/senders.d.ts +10 -0
  42. package/dist/commands/whatsapp/senders.js +74 -0
  43. package/dist/commands/whatsapp/status.d.ts +13 -0
  44. package/dist/commands/whatsapp/status.js +92 -0
  45. package/dist/commands/whatsapp/templates/create.d.ts +19 -0
  46. package/dist/commands/whatsapp/templates/create.js +205 -0
  47. package/dist/commands/whatsapp/templates/delete.d.ts +14 -0
  48. package/dist/commands/whatsapp/templates/delete.js +69 -0
  49. package/dist/commands/whatsapp/templates/list.d.ts +10 -0
  50. package/dist/commands/whatsapp/templates/list.js +77 -0
  51. package/dist/commands/whatsapp/templates/update.d.ts +18 -0
  52. package/dist/commands/whatsapp/templates/update.js +160 -0
  53. package/dist/commands/whoami.js +32 -6
  54. package/dist/hooks/command-not-found.js +46 -61
  55. package/dist/lib/api-client.d.ts +9 -1
  56. package/dist/lib/api-client.js +78 -9
  57. package/dist/lib/auth.js +10 -6
  58. package/dist/lib/base-command.js +9 -1
  59. package/dist/lib/config.d.ts +50 -1
  60. package/dist/lib/config.js +144 -7
  61. package/dist/lib/help.d.ts +10 -0
  62. package/dist/lib/help.js +23 -0
  63. package/dist/lib/onboarding.js +3 -3
  64. package/oclif.manifest.json +1735 -764
  65. package/package.json +8 -1
@@ -21,7 +21,7 @@ export default class WebhooksListen extends AuthenticatedCommand {
21
21
  events: Flags.string({
22
22
  char: "e",
23
23
  description: "Comma-separated list of events to listen for. Default subscribes to all message.* and contact.* / contacts.* events so nothing is missed during local dev.",
24
- default: "message.sent,message.delivered,message.failed,message.bounced,message.retrying,message.received,message.opt_out,message.opt_in,contact.auto_flagged,contact.marked_valid,contacts.lookup_completed,contacts.bulk_marked_valid",
24
+ default: "message.sent,message.delivered,message.failed,message.bounced,message.retrying,message.received,message.opt_out,message.opt_in,contact.auto_flagged,contact.marked_valid,contacts.lookup_completed,contacts.bulk_marked_valid,brand.verified,brand.failed,campaign.approved,campaign.rejected,campaign.suspended,assignment.confirmed,assignment.failed,port.completed,port_out.requested,port_out.completed,port_out.rejected,port_out.cancelled,number.activated,number.failed,number.requirements_required,number.released",
25
25
  }),
26
26
  };
27
27
  ws = null;
@@ -208,4 +208,4 @@ export default class WebhooksListen extends AuthenticatedCommand {
208
208
  }
209
209
  }
210
210
  }
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3dlYmhvb2tzL2xpc3Rlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBRUwsS0FBSyxFQUNMLElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sU0FBUyxNQUFNLElBQUksQ0FBQztBQUMzQixPQUFPLEtBQUssTUFBTSxNQUFNLGFBQWEsQ0FBQztBQStCdEMsTUFBTSxDQUFDLE9BQU8sT0FBTyxjQUFlLFNBQVEsb0JBQW9CO0lBQzlELE1BQU0sQ0FBQyxXQUFXLEdBQ2hCLGlIQUFpSCxDQUFDO0lBRXBILE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsbUNBQW1DO1FBQ25DLDJFQUEyRTtRQUMzRSw2RUFBNkU7S0FDOUUsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7UUFDakMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDcEIsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUsZ0NBQWdDO1lBQzdDLE9BQU8sRUFBRSwrQkFBK0I7U0FDekMsQ0FBQztRQUNGLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ25CLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUNULDRKQUE0SjtZQUM5SixPQUFPLEVBQ0wsK05BQStOO1NBQ2xPLENBQUM7S0FDSCxDQUFDO0lBRU0sRUFBRSxHQUFxQixJQUFJLENBQUM7SUFDNUIsU0FBUyxHQUFrQixJQUFJLENB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TSxHQUFHLENBQzNFLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FDVCxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG9CQUFvQixRQUFRLENBQUMsTUFBTSxHQUFHLENBQzdELENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsR0FBRyxDQUNULEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsbUJBQW9CLEdBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FDbEUsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVPLEtBQUssQ0FBQyxPQUFPO1FBQ25CLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDakIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQztnQkFDSCxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1Asd0JBQXdCO1lBQzFCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkQ29tbWFuZCB9IGZyb20gXCIuLi8uLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBhcGlDbGllbnQgfSBmcm9tIFwiLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7XG4gIHN1Y2Nlc3MsXG4gIGVycm9yLFxuICBpbmZvLFxuICB3YXJuLFxuICBjb2xvcnMsXG4gIHNwaW5uZXIsXG59IGZyb20gXCIuLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5pbXBvcnQgeyBnZXRDb25maWdWYWx1ZSB9IGZyb20gXCIuLi8uLi9saWIvY29uZmlnLmpzXCI7XG5pbXBvcnQgV2ViU29ja2V0IGZyb20gXCJ3c1wiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJub2RlOmNyeXB0b1wiO1xuXG5pbnRlcmZhY2UgV2ViaG9va0V2ZW50IHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBhcGlfdmVyc2lvbjogc3RyaW5nO1xuICBjcmVhdGVkOiBudW1iZXI7XG4gIGxpdmVtb2RlOiBib29sZWFuO1xuICBkYXRhOiB7XG4gICAgb2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFdlYlNvY2tldE1lc3NhZ2Uge1xuICB0eXBlOiBzdHJpbmc7XG4gIHRpbWVzdGFtcD86IG51bWJlcjtcbiAgc2lnbmF0dXJlPzogc3RyaW5nO1xuICBldmVudD86IFdlYmhvb2tFdmVudDtcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBldmVudHM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIExpc3RlblN0YXJ0UmVzcG9uc2Uge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgd3NUb2tlbjogc3RyaW5nO1xuICBzZWNyZXQ6IHN0cmluZztcbiAgd3NVcmw6IHN0cmluZztcbiAgZXZlbnRzOiBzdHJpbmdbXTtcbiAgZm9yd2FyZFVybDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJob29rc0xpc3RlbiBleHRlbmRzIEF1dGhlbnRpY2F0ZWRDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID1cbiAgICBcIkxpc3RlbiBmb3Igd2ViaG9va3MgbG9jYWxseS4gUmVjZWl2ZXMgZXZlbnRzIGluIHJlYWwtdGltZSB2aWEgV2ViU29ja2V0IGFuZCBmb3J3YXJkcyB0aGVtIHRvIHlvdXIgbG9jYWwgc2VydmVyLlwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHdlYmhvb2tzIGxpc3RlblwiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gd2ViaG9va3MgbGlzdGVuIC0tZm9yd2FyZCBodHRwOi8vbG9jYWxob3N0OjMwMDAvd2ViaG9va1wiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gd2ViaG9va3MgbGlzdGVuIC0tZXZlbnRzIG1lc3NhZ2UuZGVsaXZlcmVkLG1lc3NhZ2UuZmFpbGVkXCIsXG4gIF07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgICBmb3J3YXJkOiBGbGFncy5zdHJpbmcoe1xuICAgICAgY2hhcjogXCJmXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJMb2NhbCBVUkwgdG8gZm9yd2FyZCBldmVudHMgdG9cIixcbiAgICAgIGRlZmF1bHQ6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL3dlYmhvb2tcIixcbiAgICB9KSxcbiAgICBldmVudHM6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcImVcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV2ZW50cyB0byBsaXN0ZW4gZm9yLiBEZWZhdWx0IHN1YnNjcmliZXMgdG8gYWxsIG1lc3NhZ2UuKiBhbmQgY29udGFjdC4qIC8gY29udGFjdHMuKiBldmVudHMgc28gbm90aGluZyBpcyBtaXNzZWQgZHVyaW5nIGxvY2FsIGRldi5cIixcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIFwibWVzc2FnZS5zZW50LG1lc3NhZ2UuZGVsaXZlcmVkLG1lc3NhZ2UuZmFpbGVkLG1lc3NhZ2UuYm91bmNlZCxtZXNzYWdlLnJldHJ5aW5nLG1lc3NhZ2UucmVjZWl2ZWQsbWVzc2FnZS5vcHRfb3V0LG1lc3NhZ2Uub3B0X2luLGNvbnRhY3QuYXV0b19mbGFnZ2VkLGNvbnRhY3QubWFya2VkX3ZhbGlkLGNvbnRhY3RzLmxvb2t1cF9jb21wbGV0ZWQsY29udGFjdHMuYnVsa19tYXJrZWRfdmFsaWRcIixcbiAgICB9KSxcbiAgfTtcblxuICBwcml2YXRlIHdzOiBXZWJTb2NrZXQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzZXNzaW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHNlY3JldDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoV2ViaG9va3NMaXN0ZW4pO1xuXG4gICAgdHJ5IHtcbiAgICAgIG5ldyBVUkwoZmxhZ3MuZm9yd2FyZCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLmVycm9yKGBJbnZhbGlkIGZvcndhcmQgVVJMOiAke2ZsYWdzLmZvcndhcmR9LiBNdXN0IGJlIGEgdmFsaWQgVVJMIChlLmcuLCBodHRwOi8vbG9jYWxob3N0OjMwMDAvd2ViaG9vaykuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnRzID0gZmxhZ3MuZXZlbnRzLnNwbGl0KFwiLFwiKS5tYXAoKGUpID0+IGUudHJpbSgpKTtcblxuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiU3RhcnRpbmcgd2ViaG9vayBsaXN0ZW5lci4uLlwiKTtcbiAgICBzcGluLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnQucG9zdDxMaXN0ZW5TdGFydFJlc3BvbnNlPihcbiAgICAgICAgXCIvYXBpL2NsaS9saXN0ZW4vc3RhcnRcIixcbiAgICAgICAge1xuICAgICAgICAgIGV2ZW50cyxcbiAgICAgICAgICBmb3J3YXJkVXJsOiBmbGFncy5mb3J3YXJkLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgdGhpcy5zZXNzaW9uSWQgPSByZXNwb25zZS5zZXNzaW9uSWQ7XG4gICAgICB0aGlzLnNlY3JldCA9IHJlc3BvbnNlLnNlY3JldDtcblxuICAgICAgc3Bpbi5zdWNjZWVkKFwiTGlzdGVuZXIgcmVnaXN0ZXJlZFwiKTtcblxuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKGNvbG9ycy5wcmltYXJ5KFwiV2ViaG9vayBsaXN0ZW5lciByZWFkeSFcIikpKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYCAgJHtjb2xvcnMuZGltKFwiRm9yd2FyZGluZyB0bzpcIil9ICR7Y29sb3JzLmNvZGUoZmxhZ3MuZm9yd2FyZCl9YCxcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5kaW0oXCJFdmVudHM6XCIpfSAgICAgICAgJHtldmVudHMuam9pbihcIiwgXCIpfWApO1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3JzLmRpbShcIldlYmhvb2sgU2VjcmV0OlwiKX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3JzLnByaW1hcnkocmVzcG9uc2Uuc2VjcmV0KX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY29sb3JzLmRpbShcIlVzZSB0aGlzIHNlY3JldCB0byB2ZXJpZnkgd2ViaG9vayBzaWduYXR1cmVzIGluIHlvdXIgYXBwLlwiKSxcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZygpO1xuXG4gICAgICBjb25zdCBzcGluMiA9IHNwaW5uZXIoXCJDb25uZWN0aW5nIHRvIFNlbmRseS4uLlwiKTtcbiAgICAgIHNwaW4yLnN0YXJ0KCk7XG5cbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdFdlYlNvY2tldChyZXNwb25zZS53c1VybCwgZmxhZ3MuZm9yd2FyZCk7XG5cbiAgICAgIHNwaW4yLnN1Y2NlZWQoXCJDb25uZWN0ZWRcIik7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgY29uc29sZS5sb2coY29sb3JzLmJvbGQoXCJXYWl0aW5nIGZvciBldmVudHMuLi4gKEN0cmwrQyB0byBxdWl0KVwiKSk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwi4pSAXCIucmVwZWF0KDYwKSkpO1xuICAgICAgY29uc29sZS5sb2coKTtcblxuICAgICAgY29uc3QgY2xlYW51cCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgaW5mbyhcIlNodXR0aW5nIGRvd24uLi5cIik7XG4gICAgICAgIGF3YWl0IHRoaXMuY2xlYW51cCgpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICB9O1xuXG4gICAgICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIGNsZWFudXApO1xuICAgICAgcHJvY2Vzcy5vbihcIlNJR1RFUk1cIiwgY2xlYW51cCk7XG5cbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKCgpID0+IHt9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNwaW4uZmFpbChcIkZhaWxlZCB0byBzdGFydCBsaXN0ZW5lclwiKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbm5lY3RXZWJTb2NrZXQod3NVcmw6IHN0cmluZywgZm9yd2FyZFVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMud3MgPSBuZXcgV2ViU29ja2V0KHdzVXJsKTtcblxuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiV2ViU29ja2V0IGNvbm5lY3Rpb24gdGltZW91dFwiKSk7XG4gICAgICB9LCAzMDAwMCk7XG5cbiAgICAgIHRoaXMud3Mub24oXCJvcGVuXCIsICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMud3Mub24oXCJtZXNzYWdlXCIsIGFzeW5jIChkYXRhKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZTogV2ViU29ja2V0TWVzc2FnZSA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpKTtcblxuICAgICAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09IFwiY2xpX2Nvbm5lY3RlZFwiKSB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gXCJ3ZWJob29rX2V2ZW50XCIgJiYgbWVzc2FnZS5ldmVudCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVFdmVudChtZXNzYWdlLCBmb3J3YXJkVXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgV2ViU29ja2V0IG1lc3NhZ2U6XCIsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLndzLm9uKFwiY2xvc2VcIiwgKGNvZGUsIHJlYXNvbikgPT4ge1xuICAgICAgICBpZiAoY29kZSAhPT0gMTAwMCkge1xuICAgICAgICAgIHdhcm4oYFdlYlNvY2tldCBkaXNjb25uZWN0ZWQ6ICR7cmVhc29uIHx8IGNvZGV9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLndzLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGVycm9yKGBXZWJTb2NrZXQgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUV2ZW50KFxuICAgIG1lc3NhZ2U6IFdlYlNvY2tldE1lc3NhZ2UsXG4gICAgZm9yd2FyZFVybDogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBldmVudCA9IG1lc3NhZ2UuZXZlbnQhO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG1lc3NhZ2UudGltZXN0YW1wITtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBtZXNzYWdlLnNpZ25hdHVyZSE7XG5cbiAgICB0aGlzLmRpc3BsYXlFdmVudChldmVudCk7XG5cbiAgICBpZiAodGhpcy52ZXJpZnlTaWduYXR1cmUoZXZlbnQsIHRpbWVzdGFtcCwgc2lnbmF0dXJlKSkge1xuICAgICAgYXdhaXQgdGhpcy5mb3J3YXJkRXZlbnQoZm9yd2FyZFVybCwgZXZlbnQsIHRpbWVzdGFtcCwgc2lnbmF0dXJlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMuZXJyb3IoXCLinJdcIil9IFNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkYCk7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5U2lnbmF0dXJlKFxuICAgIGV2ZW50OiBXZWJob29rRXZlbnQsXG4gICAgdGltZXN0YW1wOiBudW1iZXIsXG4gICAgc2lnbmF0dXJlOiBzdHJpbmcsXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zZWNyZXQpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShldmVudCk7XG4gICAgY29uc3Qgc2lnbmVkUGF5bG9hZCA9IGAke3RpbWVzdGFtcH0uJHtwYXlsb2FkfWA7XG4gICAgY29uc3QgZXhwZWN0ZWRTaWduYXR1cmUgPSBgc2hhMjU2PSR7Y3J5cHRvXG4gICAgICAuY3JlYXRlSG1hYyhcInNoYTI1NlwiLCB0aGlzLnNlY3JldClcbiAgICAgIC51cGRhdGUoc2lnbmVkUGF5bG9hZCwgXCJ1dGY4XCIpXG4gICAgICAuZGlnZXN0KFwiaGV4XCIpfWA7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlID09PSBleHBlY3RlZFNpZ25hdHVyZTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGxheUV2ZW50KGV2ZW50OiBXZWJob29rRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZShldmVudC5jcmVhdGVkICogMTAwMCkudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gICAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnQudHlwZTtcblxuICAgIGxldCBzdGF0dXNDb2xvciA9IGNvbG9ycy5pbmZvO1xuICAgIGlmIChldmVudFR5cGUuaW5jbHVkZXMoXCJkZWxpdmVyZWRcIikpIHN0YXR1c0NvbG9yID0gY29sb3JzLnN1Y2Nlc3M7XG4gICAgaWYgKGV2ZW50VHlwZS5pbmNsdWRlcyhcImZhaWxlZFwiKSB8fCBldmVudFR5cGUuaW5jbHVkZXMoXCJib3VuY2VkXCIpKSBzdGF0dXNDb2xvciA9IGNvbG9ycy5lcnJvcjtcbiAgICBpZiAoZXZlbnRUeXBlLmluY2x1ZGVzKFwicmV0cnlpbmdcIikpIHN0YXR1c0NvbG9yID0gY29sb3JzLndhcm5pbmc7XG5cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGAke2NvbG9ycy5kaW0odGltZXN0YW1wKX0gJHtzdGF0dXNDb2xvcihcIuKGklwiKX0gJHtjb2xvcnMuYm9sZChldmVudFR5cGUpfWAsXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGEgPSBldmVudC5kYXRhPy5vYmplY3Q7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IGRhdGEuaWQgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgdG8gPSBkYXRhLnRvIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGJhdGNoSWQgPSAoZGF0YSBhcyBhbnkpLmJhdGNoX2lkIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChtZXNzYWdlSWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMuZGltKFwiaWQ6XCIpfSAke21lc3NhZ2VJZH1gKTtcbiAgICAgIH1cbiAgICAgIGlmICh0bykge1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5kaW0oXCJ0bzpcIil9ICR7dG99YCk7XG4gICAgICB9XG4gICAgICBpZiAoYmF0Y2hJZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5kaW0oXCJiYXRjaDpcIil9ICR7YmF0Y2hJZH1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZvcndhcmRFdmVudChcbiAgICBmb3J3YXJkVXJsOiBzdHJpbmcsXG4gICAgZXZlbnQ6IFdlYmhvb2tFdmVudCxcbiAgICB0aW1lc3RhbXA6IG51bWJlcixcbiAgICBzaWduYXR1cmU6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShldmVudCk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZm9yd2FyZFVybCwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgXCJYLVNlbmRseS1TaWduYXR1cmVcIjogc2lnbmF0dXJlLFxuICAgICAgICAgIFwiWC1TZW5kbHktVGltZXN0YW1wXCI6IHRpbWVzdGFtcC50b1N0cmluZygpLFxuICAgICAgICAgIFwiWC1TZW5kbHktRXZlbnRcIjogZXZlbnQudHlwZSxcbiAgICAgICAgICBcIlgtU2VuZGx5LUV2ZW50LUlkXCI6IGV2ZW50LmlkLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBwYXlsb2FkLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgICAke2NvbG9ycy5zdWNjZXNzKFwi4pyTXCIpfSBGb3J3YXJkZWQgdG8gJHtmb3J3YXJkVXJsfSAoJHtyZXNwb25zZS5zdGF0dXN9KWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgICAke2NvbG9ycy5lcnJvcihcIuKcl1wiKX0gRm9yd2FyZCBmYWlsZWQgKCR7cmVzcG9uc2Uuc3RhdHVzfSlgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGAgICR7Y29sb3JzLmVycm9yKFwi4pyXXCIpfSBGb3J3YXJkIGVycm9yOiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNsZWFudXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMud3MpIHtcbiAgICAgIHRoaXMud3MuY2xvc2UoMTAwMCwgXCJDbGllbnQgc2h1dGRvd25cIik7XG4gICAgICB0aGlzLndzID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZXNzaW9uSWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFwaUNsaWVudC5kZWxldGUoYC9hcGkvY2xpL2xpc3Rlbi9zdG9wLyR7dGhpcy5zZXNzaW9uSWR9YCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIGNsZWFudXAgZXJyb3JzXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3dlYmhvb2tzL2xpc3Rlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBRUwsS0FBSyxFQUNMLElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sU0FBUyxNQUFNLElBQUksQ0FBQztBQUMzQixPQUFPLEtBQUssTUFBTSxNQUFNLGFBQWEsQ0FBQztBQStCdEMsTUFBTSxDQUFDLE9BQU8sT0FBTyxjQUFlLFNBQVEsb0JBQW9CO0lBQzlELE1BQU0sQ0FBQyxXQUFXLEdBQ2hCLGlIQUFpSCxDQUFDO0lBRXBILE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsbUNBQW1DO1FBQ25DLDJFQUEyRTtRQUMzRSw2RUFBNkU7S0FDOUUsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7UUFDakMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDcEIsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUsZ0NBQWdDO1lBQzdDLE9BQU8sRUFBRSwrQkFBK0I7U0FDekMsQ0FBQztRQUNGLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ25CLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUNULDRKQUE0SjtZQUM5SixPQUFPLEVBQ0wsK2ZBQStmO1NBQ2xnQixDQUFDO0tBQ0gsQ0FBQztJQUVNLEVBQUUsR0FBcUIsSUFBSSxDQUFDO0lBQzVCLFNBQVMsR0FBa0IsSUFBSSxD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QU0sR0FBRyxDQUMzRSxDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQ1QsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUM3RCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FDVCxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG1CQUFvQixHQUFhLENBQUMsT0FBTyxFQUFFLENBQ2xFLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxLQUFLLENBQUMsT0FBTztRQUNuQixJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxTQUFTLENBQUMsTUFBTSxDQUFDLHdCQUF3QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNuRSxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLHdCQUF3QjtZQUMxQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQge1xuICBzdWNjZXNzLFxuICBlcnJvcixcbiAgaW5mbyxcbiAgd2FybixcbiAgY29sb3JzLFxuICBzcGlubmVyLFxufSBmcm9tIFwiLi4vLi4vbGliL291dHB1dC5qc1wiO1xuaW1wb3J0IHsgZ2V0Q29uZmlnVmFsdWUgfSBmcm9tIFwiLi4vLi4vbGliL2NvbmZpZy5qc1wiO1xuaW1wb3J0IFdlYlNvY2tldCBmcm9tIFwid3NcIjtcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwibm9kZTpjcnlwdG9cIjtcblxuaW50ZXJmYWNlIFdlYmhvb2tFdmVudCB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgYXBpX3ZlcnNpb246IHN0cmluZztcbiAgY3JlYXRlZDogbnVtYmVyO1xuICBsaXZlbW9kZTogYm9vbGVhbjtcbiAgZGF0YToge1xuICAgIG9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH07XG59XG5cbmludGVyZmFjZSBXZWJTb2NrZXRNZXNzYWdlIHtcbiAgdHlwZTogc3RyaW5nO1xuICB0aW1lc3RhbXA/OiBudW1iZXI7XG4gIHNpZ25hdHVyZT86IHN0cmluZztcbiAgZXZlbnQ/OiBXZWJob29rRXZlbnQ7XG4gIHNlc3Npb25JZD86IHN0cmluZztcbiAgZXZlbnRzPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBMaXN0ZW5TdGFydFJlc3BvbnNlIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHdzVG9rZW46IHN0cmluZztcbiAgc2VjcmV0OiBzdHJpbmc7XG4gIHdzVXJsOiBzdHJpbmc7XG4gIGV2ZW50czogc3RyaW5nW107XG4gIGZvcndhcmRVcmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViaG9va3NMaXN0ZW4gZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9XG4gICAgXCJMaXN0ZW4gZm9yIHdlYmhvb2tzIGxvY2FsbHkuIFJlY2VpdmVzIGV2ZW50cyBpbiByZWFsLXRpbWUgdmlhIFdlYlNvY2tldCBhbmQgZm9yd2FyZHMgdGhlbSB0byB5b3VyIGxvY2FsIHNlcnZlci5cIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiB3ZWJob29rcyBsaXN0ZW5cIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHdlYmhvb2tzIGxpc3RlbiAtLWZvcndhcmQgaHR0cDovL2xvY2FsaG9zdDozMDAwL3dlYmhvb2tcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHdlYmhvb2tzIGxpc3RlbiAtLWV2ZW50cyBtZXNzYWdlLmRlbGl2ZXJlZCxtZXNzYWdlLmZhaWxlZFwiLFxuICBdO1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gICAgZm9yd2FyZDogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGNoYXI6IFwiZlwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiTG9jYWwgVVJMIHRvIGZvcndhcmQgZXZlbnRzIHRvXCIsXG4gICAgICBkZWZhdWx0OiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC93ZWJob29rXCIsXG4gICAgfSksXG4gICAgZXZlbnRzOiBGbGFncy5zdHJpbmcoe1xuICAgICAgY2hhcjogXCJlXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBldmVudHMgdG8gbGlzdGVuIGZvci4gRGVmYXVsdCBzdWJzY3JpYmVzIHRvIGFsbCBtZXNzYWdlLiogYW5kIGNvbnRhY3QuKiAvIGNvbnRhY3RzLiogZXZlbnRzIHNvIG5vdGhpbmcgaXMgbWlzc2VkIGR1cmluZyBsb2NhbCBkZXYuXCIsXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBcIm1lc3NhZ2Uuc2VudCxtZXNzYWdlLmRlbGl2ZXJlZCxtZXNzYWdlLmZhaWxlZCxtZXNzYWdlLmJvdW5jZWQsbWVzc2FnZS5yZXRyeWluZyxtZXNzYWdlLnJlY2VpdmVkLG1lc3NhZ2Uub3B0X291dCxtZXNzYWdlLm9wdF9pbixjb250YWN0LmF1dG9fZmxhZ2dlZCxjb250YWN0Lm1hcmtlZF92YWxpZCxjb250YWN0cy5sb29rdXBfY29tcGxldGVkLGNvbnRhY3RzLmJ1bGtfbWFya2VkX3ZhbGlkLGJyYW5kLnZlcmlmaWVkLGJyYW5kLmZhaWxlZCxjYW1wYWlnbi5hcHByb3ZlZCxjYW1wYWlnbi5yZWplY3RlZCxjYW1wYWlnbi5zdXNwZW5kZWQsYXNzaWdubWVudC5jb25maXJtZWQsYXNzaWdubWVudC5mYWlsZWQscG9ydC5jb21wbGV0ZWQscG9ydF9vdXQucmVxdWVzdGVkLHBvcnRfb3V0LmNvbXBsZXRlZCxwb3J0X291dC5yZWplY3RlZCxwb3J0X291dC5jYW5jZWxsZWQsbnVtYmVyLmFjdGl2YXRlZCxudW1iZXIuZmFpbGVkLG51bWJlci5yZXF1aXJlbWVudHNfcmVxdWlyZWQsbnVtYmVyLnJlbGVhc2VkXCIsXG4gICAgfSksXG4gIH07XG5cbiAgcHJpdmF0ZSB3czogV2ViU29ja2V0IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc2Vzc2lvbklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzZWNyZXQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGZsYWdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKFdlYmhvb2tzTGlzdGVuKTtcblxuICAgIHRyeSB7XG4gICAgICBuZXcgVVJMKGZsYWdzLmZvcndhcmQpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5lcnJvcihgSW52YWxpZCBmb3J3YXJkIFVSTDogJHtmbGFncy5mb3J3YXJkfS4gTXVzdCBiZSBhIHZhbGlkIFVSTCAoZS5nLiwgaHR0cDovL2xvY2FsaG9zdDozMDAwL3dlYmhvb2spLmApO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50cyA9IGZsYWdzLmV2ZW50cy5zcGxpdChcIixcIikubWFwKChlKSA9PiBlLnRyaW0oKSk7XG5cbiAgICBjb25zdCBzcGluID0gc3Bpbm5lcihcIlN0YXJ0aW5nIHdlYmhvb2sgbGlzdGVuZXIuLi5cIik7XG4gICAgc3Bpbi5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LnBvc3Q8TGlzdGVuU3RhcnRSZXNwb25zZT4oXG4gICAgICAgIFwiL2FwaS9jbGkvbGlzdGVuL3N0YXJ0XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBldmVudHMsXG4gICAgICAgICAgZm9yd2FyZFVybDogZmxhZ3MuZm9yd2FyZCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc2Vzc2lvbklkID0gcmVzcG9uc2Uuc2Vzc2lvbklkO1xuICAgICAgdGhpcy5zZWNyZXQgPSByZXNwb25zZS5zZWNyZXQ7XG5cbiAgICAgIHNwaW4uc3VjY2VlZChcIkxpc3RlbmVyIHJlZ2lzdGVyZWRcIik7XG5cbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuYm9sZChjb2xvcnMucHJpbWFyeShcIldlYmhvb2sgbGlzdGVuZXIgcmVhZHkhXCIpKSk7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGAgICR7Y29sb3JzLmRpbShcIkZvcndhcmRpbmcgdG86XCIpfSAke2NvbG9ycy5jb2RlKGZsYWdzLmZvcndhcmQpfWAsXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMuZGltKFwiRXZlbnRzOlwiKX0gICAgICAgICR7ZXZlbnRzLmpvaW4oXCIsIFwiKX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5kaW0oXCJXZWJob29rIFNlY3JldDpcIil9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5wcmltYXJ5KHJlc3BvbnNlLnNlY3JldCl9YCk7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNvbG9ycy5kaW0oXCJVc2UgdGhpcyBzZWNyZXQgdG8gdmVyaWZ5IHdlYmhvb2sgc2lnbmF0dXJlcyBpbiB5b3VyIGFwcC5cIiksXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coKTtcblxuICAgICAgY29uc3Qgc3BpbjIgPSBzcGlubmVyKFwiQ29ubmVjdGluZyB0byBTZW5kbHkuLi5cIik7XG4gICAgICBzcGluMi5zdGFydCgpO1xuXG4gICAgICBhd2FpdCB0aGlzLmNvbm5lY3RXZWJTb2NrZXQocmVzcG9uc2Uud3NVcmwsIGZsYWdzLmZvcndhcmQpO1xuXG4gICAgICBzcGluMi5zdWNjZWVkKFwiQ29ubmVjdGVkXCIpO1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiV2FpdGluZyBmb3IgZXZlbnRzLi4uIChDdHJsK0MgdG8gcXVpdClcIikpO1xuICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIuKUgFwiLnJlcGVhdCg2MCkpKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG5cbiAgICAgIGNvbnN0IGNsZWFudXAgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICAgIGluZm8oXCJTaHV0dGluZyBkb3duLi4uXCIpO1xuICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgfTtcblxuICAgICAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCBjbGVhbnVwKTtcbiAgICAgIHByb2Nlc3Mub24oXCJTSUdURVJNXCIsIGNsZWFudXApO1xuXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgoKSA9PiB7fSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzcGluLmZhaWwoXCJGYWlsZWQgdG8gc3RhcnQgbGlzdGVuZXJcIik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25uZWN0V2ViU29ja2V0KHdzVXJsOiBzdHJpbmcsIGZvcndhcmRVcmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldCh3c1VybCk7XG5cbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIldlYlNvY2tldCBjb25uZWN0aW9uIHRpbWVvdXRcIikpO1xuICAgICAgfSwgMzAwMDApO1xuXG4gICAgICB0aGlzLndzLm9uKFwib3BlblwiLCAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLndzLm9uKFwibWVzc2FnZVwiLCBhc3luYyAoZGF0YSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2U6IFdlYlNvY2tldE1lc3NhZ2UgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICBpZiAobWVzc2FnZS50eXBlID09PSBcImNsaV9jb25uZWN0ZWRcIikge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09IFwid2ViaG9va19ldmVudFwiICYmIG1lc3NhZ2UuZXZlbnQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQobWVzc2FnZSwgZm9yd2FyZFVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIFdlYlNvY2tldCBtZXNzYWdlOlwiLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy53cy5vbihcImNsb3NlXCIsIChjb2RlLCByZWFzb24pID0+IHtcbiAgICAgICAgaWYgKGNvZGUgIT09IDEwMDApIHtcbiAgICAgICAgICB3YXJuKGBXZWJTb2NrZXQgZGlzY29ubmVjdGVkOiAke3JlYXNvbiB8fCBjb2RlfWApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy53cy5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBlcnJvcihgV2ViU29ja2V0IGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVFdmVudChcbiAgICBtZXNzYWdlOiBXZWJTb2NrZXRNZXNzYWdlLFxuICAgIGZvcndhcmRVcmw6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXZlbnQgPSBtZXNzYWdlLmV2ZW50ITtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBtZXNzYWdlLnRpbWVzdGFtcCE7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gbWVzc2FnZS5zaWduYXR1cmUhO1xuXG4gICAgdGhpcy5kaXNwbGF5RXZlbnQoZXZlbnQpO1xuXG4gICAgaWYgKHRoaXMudmVyaWZ5U2lnbmF0dXJlKGV2ZW50LCB0aW1lc3RhbXAsIHNpZ25hdHVyZSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9yd2FyZEV2ZW50KGZvcndhcmRVcmwsIGV2ZW50LCB0aW1lc3RhbXAsIHNpZ25hdHVyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3JzLmVycm9yKFwi4pyXXCIpfSBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZGApO1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeVNpZ25hdHVyZShcbiAgICBldmVudDogV2ViaG9va0V2ZW50LFxuICAgIHRpbWVzdGFtcDogbnVtYmVyLFxuICAgIHNpZ25hdHVyZTogc3RyaW5nLFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc2VjcmV0KSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoZXZlbnQpO1xuICAgIGNvbnN0IHNpZ25lZFBheWxvYWQgPSBgJHt0aW1lc3RhbXB9LiR7cGF5bG9hZH1gO1xuICAgIGNvbnN0IGV4cGVjdGVkU2lnbmF0dXJlID0gYHNoYTI1Nj0ke2NyeXB0b1xuICAgICAgLmNyZWF0ZUhtYWMoXCJzaGEyNTZcIiwgdGhpcy5zZWNyZXQpXG4gICAgICAudXBkYXRlKHNpZ25lZFBheWxvYWQsIFwidXRmOFwiKVxuICAgICAgLmRpZ2VzdChcImhleFwiKX1gO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZSA9PT0gZXhwZWN0ZWRTaWduYXR1cmU7XG4gIH1cblxuICBwcml2YXRlIGRpc3BsYXlFdmVudChldmVudDogV2ViaG9va0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoZXZlbnQuY3JlYXRlZCAqIDEwMDApLnRvTG9jYWxlVGltZVN0cmluZygpO1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50LnR5cGU7XG5cbiAgICBsZXQgc3RhdHVzQ29sb3IgPSBjb2xvcnMuaW5mbztcbiAgICBpZiAoZXZlbnRUeXBlLmluY2x1ZGVzKFwiZGVsaXZlcmVkXCIpKSBzdGF0dXNDb2xvciA9IGNvbG9ycy5zdWNjZXNzO1xuICAgIGlmIChldmVudFR5cGUuaW5jbHVkZXMoXCJmYWlsZWRcIikgfHwgZXZlbnRUeXBlLmluY2x1ZGVzKFwiYm91bmNlZFwiKSkgc3RhdHVzQ29sb3IgPSBjb2xvcnMuZXJyb3I7XG4gICAgaWYgKGV2ZW50VHlwZS5pbmNsdWRlcyhcInJldHJ5aW5nXCIpKSBzdGF0dXNDb2xvciA9IGNvbG9ycy53YXJuaW5nO1xuXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtjb2xvcnMuZGltKHRpbWVzdGFtcCl9ICR7c3RhdHVzQ29sb3IoXCLihpJcIil9ICR7Y29sb3JzLmJvbGQoZXZlbnRUeXBlKX1gLFxuICAgICk7XG5cbiAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YT8ub2JqZWN0O1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBkYXRhLmlkIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IHRvID0gZGF0YS50byBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBiYXRjaElkID0gKGRhdGEgYXMgYW55KS5iYXRjaF9pZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAobWVzc2FnZUlkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3JzLmRpbShcImlkOlwiKX0gJHttZXNzYWdlSWR9YCk7XG4gICAgICB9XG4gICAgICBpZiAodG8pIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMuZGltKFwidG86XCIpfSAke3RvfWApO1xuICAgICAgfVxuICAgICAgaWYgKGJhdGNoSWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMuZGltKFwiYmF0Y2g6XCIpfSAke2JhdGNoSWR9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmb3J3YXJkRXZlbnQoXG4gICAgZm9yd2FyZFVybDogc3RyaW5nLFxuICAgIGV2ZW50OiBXZWJob29rRXZlbnQsXG4gICAgdGltZXN0YW1wOiBudW1iZXIsXG4gICAgc2lnbmF0dXJlOiBzdHJpbmcsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoZXZlbnQpO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZvcndhcmRVcmwsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIFwiWC1TZW5kbHktU2lnbmF0dXJlXCI6IHNpZ25hdHVyZSxcbiAgICAgICAgICBcIlgtU2VuZGx5LVRpbWVzdGFtcFwiOiB0aW1lc3RhbXAudG9TdHJpbmcoKSxcbiAgICAgICAgICBcIlgtU2VuZGx5LUV2ZW50XCI6IGV2ZW50LnR5cGUsXG4gICAgICAgICAgXCJYLVNlbmRseS1FdmVudC1JZFwiOiBldmVudC5pZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogcGF5bG9hZCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCAgJHtjb2xvcnMuc3VjY2VzcyhcIuKck1wiKX0gRm9yd2FyZGVkIHRvICR7Zm9yd2FyZFVybH0gKCR7cmVzcG9uc2Uuc3RhdHVzfSlgLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCAgJHtjb2xvcnMuZXJyb3IoXCLinJdcIil9IEZvcndhcmQgZmFpbGVkICgke3Jlc3BvbnNlLnN0YXR1c30pYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgICAke2NvbG9ycy5lcnJvcihcIuKcl1wiKX0gRm9yd2FyZCBlcnJvcjogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbGVhbnVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLndzKSB7XG4gICAgICB0aGlzLndzLmNsb3NlKDEwMDAsIFwiQ2xpZW50IHNodXRkb3duXCIpO1xuICAgICAgdGhpcy53cyA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Vzc2lvbklkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBhcGlDbGllbnQuZGVsZXRlKGAvYXBpL2NsaS9saXN0ZW4vc3RvcC8ke3RoaXMuc2Vzc2lvbklkfWApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBjbGVhbnVwIGVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,17 @@
1
+ import { AuthenticatedCommand } from "../../lib/base-command.js";
2
+ export default class WhatsappConnect extends AuthenticatedCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ number: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
7
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
8
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
9
+ };
10
+ run(): Promise<void>;
11
+ /**
12
+ * Poll the signup until it goes terminal (active / failed / expired).
13
+ * Mirrors the numbers-buy hosted-action poll: a human is completing a
14
+ * browser step (the Facebook sign-in) while we wait.
15
+ */
16
+ private pollSignup;
17
+ }
@@ -0,0 +1,166 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { Flags } from "@oclif/core";
4
+ import open from "open";
5
+ import { AuthenticatedCommand } from "../../lib/base-command.js";
6
+ import { apiClient, NotFoundError } from "../../lib/api-client.js";
7
+ import { getConfigDir } from "../../lib/config.js";
8
+ import { json, success, warn, error, colors, spinner, isJsonMode, } from "../../lib/output.js";
9
+ import { attachLoginKeypressHandler } from "../../lib/keypress.js";
10
+ const SIGNUP_POLL_INTERVAL = 5000; // 5 seconds
11
+ const SIGNUP_MAX_ATTEMPTS = 240; // ~20 minutes
12
+ function sleep(ms) {
13
+ return new Promise((resolve) => setTimeout(resolve, ms));
14
+ }
15
+ /**
16
+ * Remember the most recent signup so `sendly whatsapp status` works with no
17
+ * argument. Best effort — the id is also printed, so losing this is harmless.
18
+ */
19
+ function rememberSignup(id, phoneNumber) {
20
+ try {
21
+ fs.writeFileSync(path.join(getConfigDir(), "whatsapp-signup.json"), JSON.stringify({ id, phoneNumber, createdAt: new Date().toISOString() }), { mode: 0o600 });
22
+ }
23
+ catch {
24
+ // non-fatal
25
+ }
26
+ }
27
+ export default class WhatsappConnect extends AuthenticatedCommand {
28
+ static description = "Connect one of your numbers to WhatsApp. Prints a secure link a person must open and sign in with Facebook to finish; the command then waits until the sender is active. One-time $19 connection fee — no monthly fee.";
29
+ static examples = [
30
+ "<%= config.bin %> whatsapp connect --number +15551234567",
31
+ "<%= config.bin %> whatsapp connect --number +15551234567 --json",
32
+ ];
33
+ static flags = {
34
+ ...AuthenticatedCommand.baseFlags,
35
+ number: Flags.string({
36
+ char: "n",
37
+ description: "Number on your workspace to connect (E.164 format)",
38
+ required: true,
39
+ }),
40
+ };
41
+ async run() {
42
+ const { flags } = await this.parse(WhatsappConnect);
43
+ const startSpinner = spinner("Starting WhatsApp connection...");
44
+ if (!isJsonMode()) {
45
+ startSpinner.start();
46
+ }
47
+ let response;
48
+ try {
49
+ response = await apiClient.post("/api/v1/whatsapp/signup", { phoneNumber: flags.number });
50
+ startSpinner.stop();
51
+ }
52
+ catch (err) {
53
+ startSpinner.stop();
54
+ if (err instanceof NotFoundError && err.message === "Resource not found") {
55
+ error("WhatsApp isn't available on your workspace yet.", {
56
+ hint: "WhatsApp is rolling out gradually — contact support@sendly.live for early access.",
57
+ });
58
+ this.exit(1);
59
+ }
60
+ throw err;
61
+ }
62
+ rememberSignup(response.id, flags.number);
63
+ if (isJsonMode()) {
64
+ // Non-interactive: surface the link so the caller can hand it to a
65
+ // person, then poll with `sendly whatsapp status <id>`.
66
+ json(response);
67
+ return;
68
+ }
69
+ console.log();
70
+ console.log(colors.bold("Finish connecting on the web"));
71
+ console.log();
72
+ console.log("Open this link and sign in with Facebook to finish connecting your number to WhatsApp:");
73
+ console.log(colors.bold(colors.primary(` ${response.connectUrl}`)));
74
+ console.log();
75
+ console.log(colors.dim(`Signup id: ${response.id}`));
76
+ console.log();
77
+ try {
78
+ await open(response.connectUrl);
79
+ console.log(colors.dim("Browser opened automatically"));
80
+ }
81
+ catch {
82
+ console.log(colors.dim("Please open the URL manually"));
83
+ }
84
+ const keypressCleanup = attachLoginKeypressHandler(response.connectUrl);
85
+ console.log();
86
+ const final = await this.pollSignup(response.id);
87
+ keypressCleanup();
88
+ if (final === "timeout") {
89
+ warn("We stopped waiting. Finish the Facebook sign-in in your browser, then check `sendly whatsapp status`.");
90
+ return;
91
+ }
92
+ if (final === "gone") {
93
+ warn("This connection attempt is no longer available. Re-run `sendly whatsapp connect` to start over.");
94
+ return;
95
+ }
96
+ if (final.status === "active") {
97
+ success("WhatsApp sender connected", {
98
+ number: final.phoneNumber,
99
+ "business account": final.businessAccountId ?? "—",
100
+ });
101
+ console.log();
102
+ console.log(colors.dim(`Send with: ${colors.code(`sendly whatsapp send --from ${final.phoneNumber} --to +15551230000 --text "Hello!"`)}`));
103
+ return;
104
+ }
105
+ if (final.status === "expired") {
106
+ error("The connect link expired before signup finished.", {
107
+ hint: "Run `sendly whatsapp connect` again to get a fresh link.",
108
+ });
109
+ this.exit(1);
110
+ }
111
+ // failed
112
+ error("WhatsApp connection failed.", {
113
+ ...(final.failureReasons?.length && {
114
+ reasons: final.failureReasons.join("; "),
115
+ }),
116
+ hint: "Re-run `sendly whatsapp connect` to try again.",
117
+ });
118
+ this.exit(1);
119
+ }
120
+ /**
121
+ * Poll the signup until it goes terminal (active / failed / expired).
122
+ * Mirrors the numbers-buy hosted-action poll: a human is completing a
123
+ * browser step (the Facebook sign-in) while we wait.
124
+ */
125
+ async pollSignup(id) {
126
+ const spin = spinner("Waiting for you to finish signing in with Facebook...");
127
+ spin.start();
128
+ let attempts = 0;
129
+ while (attempts < SIGNUP_MAX_ATTEMPTS) {
130
+ await sleep(SIGNUP_POLL_INTERVAL);
131
+ attempts++;
132
+ let status;
133
+ try {
134
+ status = await apiClient.get(`/api/v1/whatsapp/signup/${encodeURIComponent(id)}`);
135
+ }
136
+ catch (err) {
137
+ if (err instanceof NotFoundError) {
138
+ spin.fail("Connection attempt no longer exists");
139
+ return "gone";
140
+ }
141
+ // Transient error — keep polling.
142
+ continue;
143
+ }
144
+ if (status.status === "registering") {
145
+ spin.text =
146
+ "Facebook sign-in complete — activating your number on WhatsApp...";
147
+ }
148
+ if (status.status === "active") {
149
+ spin.succeed("Connected");
150
+ return status;
151
+ }
152
+ if (status.status === "failed") {
153
+ spin.fail("Connection failed");
154
+ return status;
155
+ }
156
+ if (status.status === "expired") {
157
+ spin.fail("Connect link expired");
158
+ return status;
159
+ }
160
+ // initiated / registering — keep polling
161
+ }
162
+ spin.stop();
163
+ return "timeout";
164
+ }
165
+ }
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy93aGF0c2FwcC9jb25uZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUNMLElBQUksRUFDSixPQUFPLEVBRVAsSUFBSSxFQUNKLEtBQUssRUFDTCxNQUFNLEVBQ04sT0FBTyxFQUNQLFVBQVUsR0FDWCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBaUJuRSxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVk7QUFDL0MsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUMsQ0FBQyxjQUFjO0FBRS9DLFNBQVMsS0FBSyxDQUFDLEVBQVU7SUFDdkIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxFQUFVLEVBQUUsV0FBbUI7SUFDckQsSUFBSSxDQUFDO1FBQ0gsRUFBRSxDQUFDLGFBQWEsQ0FDZCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLHNCQUFzQixDQUFD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QUM7b0JBQ2pELE9BQU8sTUFBTSxDQUFDO2dCQUNoQixDQUFDO2dCQUNELGtDQUFrQztnQkFDbEMsU0FBUztZQUNYLENBQUM7WUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssYUFBYSxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxJQUFJO29CQUNQLG1FQUFtRSxDQUFDO1lBQ3hFLENBQUM7WUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzFCLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUNELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2dCQUNsQyxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBQ0QseUNBQXlDO1FBQzNDLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IG9wZW4gZnJvbSBcIm9wZW5cIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCwgTm90Rm91bmRFcnJvciB9IGZyb20gXCIuLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHsgZ2V0Q29uZmlnRGlyIH0gZnJvbSBcIi4uLy4uL2xpYi9jb25maWcuanNcIjtcbmltcG9ydCB7XG4gIGpzb24sXG4gIHN1Y2Nlc3MsXG4gIGluZm8sXG4gIHdhcm4sXG4gIGVycm9yLFxuICBjb2xvcnMsXG4gIHNwaW5uZXIsXG4gIGlzSnNvbk1vZGUsXG59IGZyb20gXCIuLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5pbXBvcnQgeyBhdHRhY2hMb2dpbktleXByZXNzSGFuZGxlciB9IGZyb20gXCIuLi8uLi9saWIva2V5cHJlc3MuanNcIjtcblxuaW50ZXJmYWNlIFNpZ251cFN0YXJ0UmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBjb25uZWN0VXJsOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU2lnbnVwU3RhdHVzUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbiAgcGhvbmVOdW1iZXI6IHN0cmluZztcbiAgYnVzaW5lc3NBY2NvdW50SWQ6IHN0cmluZyB8IG51bGw7XG4gIGZhaWx1cmVSZWFzb25zOiBzdHJpbmdbXSB8IG51bGw7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xufVxuXG5jb25zdCBTSUdOVVBfUE9MTF9JTlRFUlZBTCA9IDUwMDA7IC8vIDUgc2Vjb25kc1xuY29uc3QgU0lHTlVQX01BWF9BVFRFTVBUUyA9IDI0MDsgLy8gfjIwIG1pbnV0ZXNcblxuZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuLyoqXG4gKiBSZW1lbWJlciB0aGUgbW9zdCByZWNlbnQgc2lnbnVwIHNvIGBzZW5kbHkgd2hhdHNhcHAgc3RhdHVzYCB3b3JrcyB3aXRoIG5vXG4gKiBhcmd1bWVudC4gQmVzdCBlZmZvcnQg4oCUIHRoZSBpZCBpcyBhbHNvIHByaW50ZWQsIHNvIGxvc2luZyB0aGlzIGlzIGhhcm1sZXNzLlxuICovXG5mdW5jdGlvbiByZW1lbWJlclNpZ251cChpZDogc3RyaW5nLCBwaG9uZU51bWJlcjogc3RyaW5nKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbihnZXRDb25maWdEaXIoKSwgXCJ3aGF0c2FwcC1zaWdudXAuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgaWQsIHBob25lTnVtYmVyLCBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9KSxcbiAgICAgIHsgbW9kZTogMG82MDAgfSxcbiAgICApO1xuICB9IGNhdGNoIHtcbiAgICAvLyBub24tZmF0YWxcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaGF0c2FwcENvbm5lY3QgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9XG4gICAgXCJDb25uZWN0IG9uZSBvZiB5b3VyIG51bWJlcnMgdG8gV2hhdHNBcHAuIFByaW50cyBhIHNlY3VyZSBsaW5rIGEgcGVyc29uIG11c3Qgb3BlbiBhbmQgc2lnbiBpbiB3aXRoIEZhY2Vib29rIHRvIGZpbmlzaDsgdGhlIGNvbW1hbmQgdGhlbiB3YWl0cyB1bnRpbCB0aGUgc2VuZGVyIGlzIGFjdGl2ZS4gT25lLXRpbWUgJDE5IGNvbm5lY3Rpb24gZmVlIOKAlCBubyBtb250aGx5IGZlZS5cIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiB3aGF0c2FwcCBjb25uZWN0IC0tbnVtYmVyICsxNTU1MTIzNDU2N1wiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gd2hhdHNhcHAgY29ubmVjdCAtLW51bWJlciArMTU1NTEyMzQ1NjcgLS1qc29uXCIsXG4gIF07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgICBudW1iZXI6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcIm5cIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk51bWJlciBvbiB5b3VyIHdvcmtzcGFjZSB0byBjb25uZWN0IChFLjE2NCBmb3JtYXQpXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KSxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShXaGF0c2FwcENvbm5lY3QpO1xuXG4gICAgY29uc3Qgc3RhcnRTcGlubmVyID0gc3Bpbm5lcihcIlN0YXJ0aW5nIFdoYXRzQXBwIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgaWYgKCFpc0pzb25Nb2RlKCkpIHtcbiAgICAgIHN0YXJ0U3Bpbm5lci5zdGFydCgpO1xuICAgIH1cblxuICAgIGxldCByZXNwb25zZTogU2lnbnVwU3RhcnRSZXNwb25zZTtcbiAgICB0cnkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnQucG9zdDxTaWdudXBTdGFydFJlc3BvbnNlPihcbiAgICAgICAgXCIvYXBpL3YxL3doYXRzYXBwL3NpZ251cFwiLFxuICAgICAgICB7IHBob25lTnVtYmVyOiBmbGFncy5udW1iZXIgfSxcbiAgICAgICk7XG4gICAgICBzdGFydFNwaW5uZXIuc3RvcCgpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBzdGFydFNwaW5uZXIuc3RvcCgpO1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IgJiYgZXJyLm1lc3NhZ2UgPT09IFwiUmVzb3VyY2Ugbm90IGZvdW5kXCIpIHtcbiAgICAgICAgZXJyb3IoXCJXaGF0c0FwcCBpc24ndCBhdmFpbGFibGUgb24geW91ciB3b3Jrc3BhY2UgeWV0LlwiLCB7XG4gICAgICAgICAgaGludDogXCJXaGF0c0FwcCBpcyByb2xsaW5nIG91dCBncmFkdWFsbHkg4oCUIGNvbnRhY3Qgc3VwcG9ydEBzZW5kbHkubGl2ZSBmb3IgZWFybHkgYWNjZXNzLlwiLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHJlbWVtYmVyU2lnbnVwKHJlc3BvbnNlLmlkLCBmbGFncy5udW1iZXIpO1xuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAgLy8gTm9uLWludGVyYWN0aXZlOiBzdXJmYWNlIHRoZSBsaW5rIHNvIHRoZSBjYWxsZXIgY2FuIGhhbmQgaXQgdG8gYVxuICAgICAgLy8gcGVyc29uLCB0aGVuIHBvbGwgd2l0aCBgc2VuZGx5IHdoYXRzYXBwIHN0YXR1cyA8aWQ+YC5cbiAgICAgIGpzb24ocmVzcG9uc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sZS5sb2coY29sb3JzLmJvbGQoXCJGaW5pc2ggY29ubmVjdGluZyBvbiB0aGUgd2ViXCIpKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgXCJPcGVuIHRoaXMgbGluayBhbmQgc2lnbiBpbiB3aXRoIEZhY2Vib29rIHRvIGZpbmlzaCBjb25uZWN0aW5nIHlvdXIgbnVtYmVyIHRvIFdoYXRzQXBwOlwiLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coY29sb3JzLmJvbGQoY29sb3JzLnByaW1hcnkoYCAgJHtyZXNwb25zZS5jb25uZWN0VXJsfWApKSk7XG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKGBTaWdudXAgaWQ6ICR7cmVzcG9uc2UuaWR9YCkpO1xuICAgIGNvbnNvbGUubG9nKCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgb3BlbihyZXNwb25zZS5jb25uZWN0VXJsKTtcbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oXCJCcm93c2VyIG9wZW5lZCBhdXRvbWF0aWNhbGx5XCIpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oXCJQbGVhc2Ugb3BlbiB0aGUgVVJMIG1hbnVhbGx5XCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlwcmVzc0NsZWFudXAgPSBhdHRhY2hMb2dpbktleXByZXNzSGFuZGxlcihyZXNwb25zZS5jb25uZWN0VXJsKTtcbiAgICBjb25zb2xlLmxvZygpO1xuXG4gICAgY29uc3QgZmluYWwgPSBhd2FpdCB0aGlzLnBvbGxTaWdudXAocmVzcG9uc2UuaWQpO1xuICAgIGtleXByZXNzQ2xlYW51cCgpO1xuXG4gICAgaWYgKGZpbmFsID09PSBcInRpbWVvdXRcIikge1xuICAgICAgd2FybihcbiAgICAgICAgXCJXZSBzdG9wcGVkIHdhaXRpbmcuIEZpbmlzaCB0aGUgRmFjZWJvb2sgc2lnbi1pbiBpbiB5b3VyIGJyb3dzZXIsIHRoZW4gY2hlY2sgYHNlbmRseSB3aGF0c2FwcCBzdGF0dXNgLlwiLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZmluYWwgPT09IFwiZ29uZVwiKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIlRoaXMgY29ubmVjdGlvbiBhdHRlbXB0IGlzIG5vIGxvbmdlciBhdmFpbGFibGUuIFJlLXJ1biBgc2VuZGx5IHdoYXRzYXBwIGNvbm5lY3RgIHRvIHN0YXJ0IG92ZXIuXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmaW5hbC5zdGF0dXMgPT09IFwiYWN0aXZlXCIpIHtcbiAgICAgIHN1Y2Nlc3MoXCJXaGF0c0FwcCBzZW5kZXIgY29ubmVjdGVkXCIsIHtcbiAgICAgICAgbnVtYmVyOiBmaW5hbC5waG9uZU51bWJlcixcbiAgICAgICAgXCJidXNpbmVzcyBhY2NvdW50XCI6IGZpbmFsLmJ1c2luZXNzQWNjb3VudElkID8/IFwi4oCUXCIsXG4gICAgICB9KTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY29sb3JzLmRpbShcbiAgICAgICAgICBgU2VuZCB3aXRoOiAke2NvbG9ycy5jb2RlKGBzZW5kbHkgd2hhdHNhcHAgc2VuZCAtLWZyb20gJHtmaW5hbC5waG9uZU51bWJlcn0gLS10byArMTU1NTEyMzAwMDAgLS10ZXh0IFwiSGVsbG8hXCJgKX1gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZmluYWwuc3RhdHVzID09PSBcImV4cGlyZWRcIikge1xuICAgICAgZXJyb3IoXCJUaGUgY29ubmVjdCBsaW5rIGV4cGlyZWQgYmVmb3JlIHNpZ251cCBmaW5pc2hlZC5cIiwge1xuICAgICAgICBoaW50OiBcIlJ1biBgc2VuZGx5IHdoYXRzYXBwIGNvbm5lY3RgIGFnYWluIHRvIGdldCBhIGZyZXNoIGxpbmsuXCIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBmYWlsZWRcbiAgICBlcnJvcihcIldoYXRzQXBwIGNvbm5lY3Rpb24gZmFpbGVkLlwiLCB7XG4gICAgICAuLi4oZmluYWwuZmFpbHVyZVJlYXNvbnM/Lmxlbmd0aCAmJiB7XG4gICAgICAgIHJlYXNvbnM6IGZpbmFsLmZhaWx1cmVSZWFzb25zLmpvaW4oXCI7IFwiKSxcbiAgICAgIH0pLFxuICAgICAgaGludDogXCJSZS1ydW4gYHNlbmRseSB3aGF0c2FwcCBjb25uZWN0YCB0byB0cnkgYWdhaW4uXCIsXG4gICAgfSk7XG4gICAgdGhpcy5leGl0KDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvbGwgdGhlIHNpZ251cCB1bnRpbCBpdCBnb2VzIHRlcm1pbmFsIChhY3RpdmUgLyBmYWlsZWQgLyBleHBpcmVkKS5cbiAgICogTWlycm9ycyB0aGUgbnVtYmVycy1idXkgaG9zdGVkLWFjdGlvbiBwb2xsOiBhIGh1bWFuIGlzIGNvbXBsZXRpbmcgYVxuICAgKiBicm93c2VyIHN0ZXAgKHRoZSBGYWNlYm9vayBzaWduLWluKSB3aGlsZSB3ZSB3YWl0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwb2xsU2lnbnVwKFxuICAgIGlkOiBzdHJpbmcsXG4gICk6IFByb21pc2U8U2lnbnVwU3RhdHVzUmVzcG9uc2UgfCBcInRpbWVvdXRcIiB8IFwiZ29uZVwiPiB7XG4gICAgY29uc3Qgc3BpbiA9IHNwaW5uZXIoXCJXYWl0aW5nIGZvciB5b3UgdG8gZmluaXNoIHNpZ25pbmcgaW4gd2l0aCBGYWNlYm9vay4uLlwiKTtcbiAgICBzcGluLnN0YXJ0KCk7XG5cbiAgICBsZXQgYXR0ZW1wdHMgPSAwO1xuICAgIHdoaWxlIChhdHRlbXB0cyA8IFNJR05VUF9NQVhfQVRURU1QVFMpIHtcbiAgICAgIGF3YWl0IHNsZWVwKFNJR05VUF9QT0xMX0lOVEVSVkFMKTtcbiAgICAgIGF0dGVtcHRzKys7XG5cbiAgICAgIGxldCBzdGF0dXM6IFNpZ251cFN0YXR1c1Jlc3BvbnNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RhdHVzID0gYXdhaXQgYXBpQ2xpZW50LmdldDxTaWdudXBTdGF0dXNSZXNwb25zZT4oXG4gICAgICAgICAgYC9hcGkvdjEvd2hhdHNhcHAvc2lnbnVwLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlkKX1gLFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOb3RGb3VuZEVycm9yKSB7XG4gICAgICAgICAgc3Bpbi5mYWlsKFwiQ29ubmVjdGlvbiBhdHRlbXB0IG5vIGxvbmdlciBleGlzdHNcIik7XG4gICAgICAgICAgcmV0dXJuIFwiZ29uZVwiO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyYW5zaWVudCBlcnJvciDigJQga2VlcCBwb2xsaW5nLlxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXR1cy5zdGF0dXMgPT09IFwicmVnaXN0ZXJpbmdcIikge1xuICAgICAgICBzcGluLnRleHQgPVxuICAgICAgICAgIFwiRmFjZWJvb2sgc2lnbi1pbiBjb21wbGV0ZSDigJQgYWN0aXZhdGluZyB5b3VyIG51bWJlciBvbiBXaGF0c0FwcC4uLlwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdHVzLnN0YXR1cyA9PT0gXCJhY3RpdmVcIikge1xuICAgICAgICBzcGluLnN1Y2NlZWQoXCJDb25uZWN0ZWRcIik7XG4gICAgICAgIHJldHVybiBzdGF0dXM7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzLnN0YXR1cyA9PT0gXCJmYWlsZWRcIikge1xuICAgICAgICBzcGluLmZhaWwoXCJDb25uZWN0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMuc3RhdHVzID09PSBcImV4cGlyZWRcIikge1xuICAgICAgICBzcGluLmZhaWwoXCJDb25uZWN0IGxpbmsgZXhwaXJlZFwiKTtcbiAgICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICAgIH1cbiAgICAgIC8vIGluaXRpYXRlZCAvIHJlZ2lzdGVyaW5nIOKAlCBrZWVwIHBvbGxpbmdcbiAgICB9XG5cbiAgICBzcGluLnN0b3AoKTtcbiAgICByZXR1cm4gXCJ0aW1lb3V0XCI7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
2
+ export default class WhatsappProfileGet extends AuthenticatedCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ number: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
10
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
11
+ };
12
+ run(): Promise<void>;
13
+ }
@@ -0,0 +1,67 @@
1
+ import { Args } from "@oclif/core";
2
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
3
+ import { apiClient, NotFoundError } from "../../../lib/api-client.js";
4
+ import { success, error, json, colors, spinner, isJsonMode, } from "../../../lib/output.js";
5
+ export default class WhatsappProfileGet extends AuthenticatedCommand {
6
+ static description = "Show the WhatsApp business profile customers see for one of your connected numbers";
7
+ static examples = [
8
+ "<%= config.bin %> whatsapp profile get +15551234567",
9
+ "<%= config.bin %> whatsapp profile get +15551234567 --json",
10
+ ];
11
+ static args = {
12
+ number: Args.string({
13
+ description: "WhatsApp-connected sender number (E.164 format)",
14
+ required: true,
15
+ }),
16
+ };
17
+ static flags = {
18
+ ...AuthenticatedCommand.baseFlags,
19
+ };
20
+ async run() {
21
+ const { args } = await this.parse(WhatsappProfileGet);
22
+ const profileSpinner = spinner("Fetching WhatsApp profile...");
23
+ if (!isJsonMode()) {
24
+ profileSpinner.start();
25
+ }
26
+ let response;
27
+ try {
28
+ response = await apiClient.get(`/api/v1/whatsapp/senders/${encodeURIComponent(args.number)}/profile`);
29
+ profileSpinner.stop();
30
+ }
31
+ catch (err) {
32
+ profileSpinner.stop();
33
+ if (err instanceof NotFoundError &&
34
+ err.message.includes("connected to WhatsApp")) {
35
+ error(err.message, {
36
+ hint: `Connect it first: sendly whatsapp connect --number ${args.number}`,
37
+ });
38
+ this.exit(1);
39
+ }
40
+ if (err instanceof NotFoundError) {
41
+ error("WhatsApp isn't available on your workspace yet.", {
42
+ hint: "WhatsApp is rolling out gradually — contact support@sendly.live for early access.",
43
+ });
44
+ this.exit(1);
45
+ }
46
+ throw err;
47
+ }
48
+ if (isJsonMode()) {
49
+ json(response);
50
+ return;
51
+ }
52
+ success("WhatsApp sender profile", {
53
+ Number: response.phoneNumber,
54
+ "Display name": response.displayName ?? colors.dim("—"),
55
+ About: response.about ?? colors.dim("—"),
56
+ Description: response.description ?? colors.dim("—"),
57
+ Category: response.category ?? colors.dim("—"),
58
+ Email: response.email ?? colors.dim("—"),
59
+ Website: response.website ?? colors.dim("—"),
60
+ Address: response.address ?? colors.dim("—"),
61
+ Photo: response.profilePhotoUrl ?? colors.dim("—"),
62
+ });
63
+ console.log();
64
+ console.log(colors.dim(`Update it with: ${colors.code(`sendly whatsapp profile update ${response.phoneNumber} --about "..."`)}`));
65
+ }
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3doYXRzYXBwL3Byb2ZpbGUvZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sRUFDUCxVQUFVLEdBQ1gsTUFBTSx3QkFBd0IsQ0FBQztBQWNoQyxNQUFNLENBQUMsT0FBTyxPQUFPLGtCQUFtQixTQUFRLG9CQUFvQjtJQUNsRSxNQUFNLENBQUMsV0FBVyxHQUNoQixvRkFBb0YsQ0FBQztJQUV2RixNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLHFEQUFxRDtRQUNyRCw0REFBNEQ7S0FDN0QsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNsQixXQUFXLEVBQUUsaURBQWlEO1lBQzlELFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztLQUNILENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTO0tBQ2xDLENBQUM7SUFFRixLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV0RCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNsQixjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUVELElBQUksUUFBK0IsQ0FBQztRQUNwQyxJQUFJLENBQUM7WUFDSCxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUM1Qiw0QkFBNEIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ3RFLENBQUM7WUFDRixjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEIsQ0FBQztRQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7WUFDbEIsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQ0UsR0FBRyxZQUFZLGFBQWE7Z0JBQzVCLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLEVBQzdDLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7b0JBQ2pCLElBQUksRUFBRSxzREFBc0QsSUFBSSxDQUFDLE1BQU0sRUFBRTtpQkFDMUUsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZixDQUFDO1lBQ0QsSUFBSSxHQUFHLFlBQVksYUFBYSxFQUFFLENBQUM7Z0JBQ2pDLEtBQUssQ0FBQyxpREFBaUQsRUFBRTtvQkFDdkQsSUFBSSxFQUFFLG1GQUFtRjtpQkFDMUYsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZixDQUFDO1lBQ0QsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNmLE9BQU87UUFDVCxDQUFDO1FBRUQsT0FBTyxDQUFDLHlCQUF5QixFQUFFO1lBQ2pDLE1BQU0sRUFBRSxRQUFRLENBQUMsV0FBVztZQUM1QixjQUFjLEVBQUUsUUFBUSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUN2RCxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUN4QyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUNwRCxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUM5QyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUN4QyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUM1QyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUM1QyxLQUFLLEVBQUUsUUFBUSxDQUFDLGVBQWUsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztTQUNuRCxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxHQUFHLENBQ1IsbUJBQW1CLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLFFBQVEsQ0FBQyxXQUFXLGdCQUFnQixDQUFDLEVBQUUsQ0FDekcsQ0FDRixDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFyZ3MgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCwgTm90Rm91bmRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAgc3VjY2VzcyxcbiAgZXJyb3IsXG4gIGpzb24sXG4gIGNvbG9ycyxcbiAgc3Bpbm5lcixcbiAgaXNKc29uTW9kZSxcbn0gZnJvbSBcIi4uLy4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxuaW50ZXJmYWNlIFdoYXRzYXBwU2VuZGVyUHJvZmlsZSB7XG4gIHBob25lTnVtYmVyOiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBwcm9maWxlUGhvdG9Vcmw6IHN0cmluZyB8IG51bGw7XG4gIGNhdGVnb3J5OiBzdHJpbmcgfCBudWxsO1xuICBhYm91dDogc3RyaW5nIHwgbnVsbDtcbiAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gIGVtYWlsOiBzdHJpbmcgfCBudWxsO1xuICB3ZWJzaXRlOiBzdHJpbmcgfCBudWxsO1xuICBhZGRyZXNzOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaGF0c2FwcFByb2ZpbGVHZXQgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9XG4gICAgXCJTaG93IHRoZSBXaGF0c0FwcCBidXNpbmVzcyBwcm9maWxlIGN1c3RvbWVycyBzZWUgZm9yIG9uZSBvZiB5b3VyIGNvbm5lY3RlZCBudW1iZXJzXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gd2hhdHNhcHAgcHJvZmlsZSBnZXQgKzE1NTUxMjM0NTY3XCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiB3aGF0c2FwcCBwcm9maWxlIGdldCArMTU1NTEyMzQ1NjcgLS1qc29uXCIsXG4gIF07XG5cbiAgc3RhdGljIGFyZ3MgPSB7XG4gICAgbnVtYmVyOiBBcmdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJXaGF0c0FwcC1jb25uZWN0ZWQgc2VuZGVyIG51bWJlciAoRS4xNjQgZm9ybWF0KVwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gIH07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBhcmdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKFdoYXRzYXBwUHJvZmlsZUdldCk7XG5cbiAgICBjb25zdCBwcm9maWxlU3Bpbm5lciA9IHNwaW5uZXIoXCJGZXRjaGluZyBXaGF0c0FwcCBwcm9maWxlLi4uXCIpO1xuICAgIGlmICghaXNKc29uTW9kZSgpKSB7XG4gICAgICBwcm9maWxlU3Bpbm5lci5zdGFydCgpO1xuICAgIH1cblxuICAgIGxldCByZXNwb25zZTogV2hhdHNhcHBTZW5kZXJQcm9maWxlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5nZXQ8V2hhdHNhcHBTZW5kZXJQcm9maWxlPihcbiAgICAgICAgYC9hcGkvdjEvd2hhdHNhcHAvc2VuZGVycy8ke2VuY29kZVVSSUNvbXBvbmVudChhcmdzLm51bWJlcil9L3Byb2ZpbGVgLFxuICAgICAgKTtcbiAgICAgIHByb2ZpbGVTcGlubmVyLnN0b3AoKTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgcHJvZmlsZVNwaW5uZXIuc3RvcCgpO1xuICAgICAgaWYgKFxuICAgICAgICBlcnIgaW5zdGFuY2VvZiBOb3RGb3VuZEVycm9yICYmXG4gICAgICAgIGVyci5tZXNzYWdlLmluY2x1ZGVzKFwiY29ubmVjdGVkIHRvIFdoYXRzQXBwXCIpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IoZXJyLm1lc3NhZ2UsIHtcbiAgICAgICAgICBoaW50OiBgQ29ubmVjdCBpdCBmaXJzdDogc2VuZGx5IHdoYXRzYXBwIGNvbm5lY3QgLS1udW1iZXIgJHthcmdzLm51bWJlcn1gLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpIHtcbiAgICAgICAgZXJyb3IoXCJXaGF0c0FwcCBpc24ndCBhdmFpbGFibGUgb24geW91ciB3b3Jrc3BhY2UgeWV0LlwiLCB7XG4gICAgICAgICAgaGludDogXCJXaGF0c0FwcCBpcyByb2xsaW5nIG91dCBncmFkdWFsbHkg4oCUIGNvbnRhY3Qgc3VwcG9ydEBzZW5kbHkubGl2ZSBmb3IgZWFybHkgYWNjZXNzLlwiLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGpzb24ocmVzcG9uc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1Y2Nlc3MoXCJXaGF0c0FwcCBzZW5kZXIgcHJvZmlsZVwiLCB7XG4gICAgICBOdW1iZXI6IHJlc3BvbnNlLnBob25lTnVtYmVyLFxuICAgICAgXCJEaXNwbGF5IG5hbWVcIjogcmVzcG9uc2UuZGlzcGxheU5hbWUgPz8gY29sb3JzLmRpbShcIuKAlFwiKSxcbiAgICAgIEFib3V0OiByZXNwb25zZS5hYm91dCA/PyBjb2xvcnMuZGltKFwi4oCUXCIpLFxuICAgICAgRGVzY3JpcHRpb246IHJlc3BvbnNlLmRlc2NyaXB0aW9uID8/IGNvbG9ycy5kaW0oXCLigJRcIiksXG4gICAgICBDYXRlZ29yeTogcmVzcG9uc2UuY2F0ZWdvcnkgPz8gY29sb3JzLmRpbShcIuKAlFwiKSxcbiAgICAgIEVtYWlsOiByZXNwb25zZS5lbWFpbCA/PyBjb2xvcnMuZGltKFwi4oCUXCIpLFxuICAgICAgV2Vic2l0ZTogcmVzcG9uc2Uud2Vic2l0ZSA/PyBjb2xvcnMuZGltKFwi4oCUXCIpLFxuICAgICAgQWRkcmVzczogcmVzcG9uc2UuYWRkcmVzcyA/PyBjb2xvcnMuZGltKFwi4oCUXCIpLFxuICAgICAgUGhvdG86IHJlc3BvbnNlLnByb2ZpbGVQaG90b1VybCA/PyBjb2xvcnMuZGltKFwi4oCUXCIpLFxuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgIGBVcGRhdGUgaXQgd2l0aDogJHtjb2xvcnMuY29kZShgc2VuZGx5IHdoYXRzYXBwIHByb2ZpbGUgdXBkYXRlICR7cmVzcG9uc2UucGhvbmVOdW1iZXJ9IC0tYWJvdXQgXCIuLi5cImApfWAsXG4gICAgICApLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
2
+ export default class WhatsappProfileUpdate extends AuthenticatedCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ number: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ "display-name": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
10
+ about: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
11
+ description: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
12
+ category: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
13
+ email: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
14
+ website: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
15
+ address: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
16
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
17
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
18
+ };
19
+ run(): Promise<void>;
20
+ }
@@ -0,0 +1,109 @@
1
+ import { Args, Flags } from "@oclif/core";
2
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
3
+ import { apiClient, NotFoundError } from "../../../lib/api-client.js";
4
+ import { success, error, json, colors, spinner, isJsonMode, } from "../../../lib/output.js";
5
+ export default class WhatsappProfileUpdate extends AuthenticatedCommand {
6
+ static description = "Update the WhatsApp business profile customers see for one of your connected numbers";
7
+ static examples = [
8
+ '<%= config.bin %> whatsapp profile update +15551234567 --about "Family-run bakery in Austin"',
9
+ '<%= config.bin %> whatsapp profile update +15551234567 --website https://example.com --email hello@example.com',
10
+ ];
11
+ static args = {
12
+ number: Args.string({
13
+ description: "WhatsApp-connected sender number (E.164 format)",
14
+ required: true,
15
+ }),
16
+ };
17
+ static flags = {
18
+ ...AuthenticatedCommand.baseFlags,
19
+ "display-name": Flags.string({
20
+ description: "Business name shown to customers",
21
+ }),
22
+ about: Flags.string({
23
+ description: "Short about line (max 139 characters)",
24
+ }),
25
+ description: Flags.string({
26
+ description: "Longer business description (max 512 characters)",
27
+ }),
28
+ category: Flags.string({
29
+ description: "Business category",
30
+ }),
31
+ email: Flags.string({
32
+ description: "Contact email shown on the profile",
33
+ }),
34
+ website: Flags.string({
35
+ description: "Website URL shown on the profile",
36
+ }),
37
+ address: Flags.string({
38
+ description: "Business address shown on the profile",
39
+ }),
40
+ };
41
+ async run() {
42
+ const { args, flags } = await this.parse(WhatsappProfileUpdate);
43
+ if (flags["display-name"] === undefined &&
44
+ flags.about === undefined &&
45
+ flags.description === undefined &&
46
+ flags.category === undefined &&
47
+ flags.email === undefined &&
48
+ flags.website === undefined &&
49
+ flags.address === undefined) {
50
+ error("Nothing to update", {
51
+ hint: "Pass at least one of --display-name, --about, --description, --category, --email, --website, --address",
52
+ });
53
+ this.exit(1);
54
+ }
55
+ const updateSpinner = spinner("Updating WhatsApp profile...");
56
+ if (!isJsonMode()) {
57
+ updateSpinner.start();
58
+ }
59
+ try {
60
+ const response = await apiClient.patch(`/api/v1/whatsapp/senders/${encodeURIComponent(args.number)}/profile`, {
61
+ ...(flags["display-name"] !== undefined && {
62
+ displayName: flags["display-name"],
63
+ }),
64
+ ...(flags.about !== undefined && { about: flags.about }),
65
+ ...(flags.description !== undefined && {
66
+ description: flags.description,
67
+ }),
68
+ ...(flags.category !== undefined && { category: flags.category }),
69
+ ...(flags.email !== undefined && { email: flags.email }),
70
+ ...(flags.website !== undefined && { website: flags.website }),
71
+ ...(flags.address !== undefined && { address: flags.address }),
72
+ });
73
+ updateSpinner.stop();
74
+ if (isJsonMode()) {
75
+ json(response);
76
+ return;
77
+ }
78
+ success("WhatsApp sender profile updated", {
79
+ Number: response.phoneNumber,
80
+ "Display name": response.displayName ?? colors.dim("—"),
81
+ About: response.about ?? colors.dim("—"),
82
+ Description: response.description ?? colors.dim("—"),
83
+ Category: response.category ?? colors.dim("—"),
84
+ Email: response.email ?? colors.dim("—"),
85
+ Website: response.website ?? colors.dim("—"),
86
+ Address: response.address ?? colors.dim("—"),
87
+ });
88
+ }
89
+ catch (err) {
90
+ updateSpinner.stop();
91
+ if (err instanceof NotFoundError &&
92
+ err.message.includes("connected to WhatsApp")) {
93
+ error(err.message, {
94
+ hint: `Connect it first: sendly whatsapp connect --number ${args.number}`,
95
+ });
96
+ }
97
+ else if (err instanceof NotFoundError) {
98
+ error("WhatsApp isn't available on your workspace yet.", {
99
+ hint: "WhatsApp is rolling out gradually — contact support@sendly.live for early access.",
100
+ });
101
+ }
102
+ else {
103
+ throw err;
104
+ }
105
+ this.exit(1);
106
+ }
107
+ }
108
+ }
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3doYXRzYXBwL3Byb2ZpbGUvdXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEUsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsSUFBSSxFQUNKLE1BQU0sRUFDTixPQUFPLEVBQ1AsVUFBVSxHQUNYLE1BQU0sd0JBQXdCLENBQUM7QUFjaEMsTUFBTSxDQUFDLE9BQU8sT0FBTyxxQkFBc0IsU0FBUSxvQkFBb0I7SUFDckUsTUFBTSxDQUFDLFdBQVcsR0FDaEIsc0ZBQXNGLENBQUM7SUFFekYsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQiw4RkFBOEY7UUFDOUYsZ0hBQWdIO0tBQ2pILENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ1osTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDbEIsV0FBVyxFQUFFLGlEQUFpRDtZQUM5RCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztRQUNqQyxjQUFjLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUMzQixXQUFXLEVBQUUsa0NBQWtDO1NBQ2hELENBQUM7UUFDRixLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQixXQUFXLEVBQUUsdUNBQXVDO1NBQ3JELENBQUM7UUFDRixXQUFXLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN4QixXQUFXLEVBQUUsa0RBQWtEO1NBQ2hFLENBQUM7UUFDRixRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNyQixXQUFXLEVBQUUsbUJBQW1CO1NBQ2pDLENBQUM7UUFDRixLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQixXQUFXLEVBQUUsb0NBQW9DO1NBQ2xELENBQUM7UUFDRixPQUFPLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNwQixXQUFXLEVBQUUsa0NBQWtDO1NBQ2hELENBQUM7UUFDRixPQUFPLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNwQixXQUFXLEVBQUUsdUNBQXVDO1NBQ3JELENBQUM7S0FDSCxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRWhFLElBQ0UsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFNBQVM7WUFDbkMsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTO1lBQ3pCLEtBQUssQ0FBQyxXQUFXLEtBQUssU0FBUztZQUMvQixLQUFLLENBQUMsUUFBUSxLQUFLLFNBQVM7WUFDNUIsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTO1lBQ3pCLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUztZQUMzQixLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFDM0IsQ0FBQztZQUNELEtBQUssQ0FBQyxtQkFBbUIsRUFBRTtnQkFDekIsSUFBSSxFQUFFLHdHQUF3RzthQUMvRyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2xCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxDQUNwQyw0QkFBNEIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQ3JFO2dCQUNFLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssU0FBUyxJQUFJO29CQUN6QyxXQUFXLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQztpQkFDbkMsQ0FBQztnQkFDRixHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN4RCxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUk7b0JBQ3JDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztpQkFDL0IsQ0FBQztnQkFDRixHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqRSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN4RCxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM5RCxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQy9ELENBQ0YsQ0FBQztZQUVGLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVyQixJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDZixPQUFPO1lBQ1QsQ0FBQztZQUVELE9BQU8sQ0FBQyxpQ0FBaUMsRUFBRTtnQkFDekMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxXQUFXO2dCQUM1QixjQUFjLEVBQUUsUUFBUSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztnQkFDdkQsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7Z0JBQ3hDLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUNwRCxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztnQkFDOUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7Z0JBQ3hDLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUM1QyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzthQUM3QyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztZQUNsQixhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFckIsSUFDRSxHQUFHLFlBQVksYUFBYTtnQkFDNUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsRUFDN0MsQ0FBQztnQkFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtvQkFDakIsSUFBSSxFQUFFLHNEQUFzRCxJQUFJLENBQUMsTUFBTSxFQUFFO2lCQUMxRSxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLElBQUksR0FBRyxZQUFZLGFBQWEsRUFBRSxDQUFDO2dCQUN4QyxLQUFLLENBQUMsaURBQWlELEVBQUU7b0JBQ3ZELElBQUksRUFBRSxtRkFBbUY7aUJBQzFGLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEdBQUcsQ0FBQztZQUNaLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcmdzLCBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50LCBOb3RGb3VuZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQge1xuICBzdWNjZXNzLFxuICBlcnJvcixcbiAganNvbixcbiAgY29sb3JzLFxuICBzcGlubmVyLFxuICBpc0pzb25Nb2RlLFxufSBmcm9tIFwiLi4vLi4vLi4vbGliL291dHB1dC5qc1wiO1xuXG5pbnRlcmZhY2UgV2hhdHNhcHBTZW5kZXJQcm9maWxlIHtcbiAgcGhvbmVOdW1iZXI6IHN0cmluZztcbiAgZGlzcGxheU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIHByb2ZpbGVQaG90b1VybDogc3RyaW5nIHwgbnVsbDtcbiAgY2F0ZWdvcnk6IHN0cmluZyB8IG51bGw7XG4gIGFib3V0OiBzdHJpbmcgfCBudWxsO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgZW1haWw6IHN0cmluZyB8IG51bGw7XG4gIHdlYnNpdGU6IHN0cmluZyB8IG51bGw7XG4gIGFkZHJlc3M6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdoYXRzYXBwUHJvZmlsZVVwZGF0ZSBleHRlbmRzIEF1dGhlbnRpY2F0ZWRDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID1cbiAgICBcIlVwZGF0ZSB0aGUgV2hhdHNBcHAgYnVzaW5lc3MgcHJvZmlsZSBjdXN0b21lcnMgc2VlIGZvciBvbmUgb2YgeW91ciBjb25uZWN0ZWQgbnVtYmVyc1wiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gd2hhdHNhcHAgcHJvZmlsZSB1cGRhdGUgKzE1NTUxMjM0NTY3IC0tYWJvdXQgXCJGYW1pbHktcnVuIGJha2VyeSBpbiBBdXN0aW5cIicsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHdoYXRzYXBwIHByb2ZpbGUgdXBkYXRlICsxNTU1MTIzNDU2NyAtLXdlYnNpdGUgaHR0cHM6Ly9leGFtcGxlLmNvbSAtLWVtYWlsIGhlbGxvQGV4YW1wbGUuY29tJyxcbiAgXTtcblxuICBzdGF0aWMgYXJncyA9IHtcbiAgICBudW1iZXI6IEFyZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIldoYXRzQXBwLWNvbm5lY3RlZCBzZW5kZXIgbnVtYmVyIChFLjE2NCBmb3JtYXQpXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KSxcbiAgfTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICAgIFwiZGlzcGxheS1uYW1lXCI6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJCdXNpbmVzcyBuYW1lIHNob3duIHRvIGN1c3RvbWVyc1wiLFxuICAgIH0pLFxuICAgIGFib3V0OiBGbGFncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiU2hvcnQgYWJvdXQgbGluZSAobWF4IDEzOSBjaGFyYWN0ZXJzKVwiLFxuICAgIH0pLFxuICAgIGRlc2NyaXB0aW9uOiBGbGFncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiTG9uZ2VyIGJ1c2luZXNzIGRlc2NyaXB0aW9uIChtYXggNTEyIGNoYXJhY3RlcnMpXCIsXG4gICAgfSksXG4gICAgY2F0ZWdvcnk6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJCdXNpbmVzcyBjYXRlZ29yeVwiLFxuICAgIH0pLFxuICAgIGVtYWlsOiBGbGFncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiQ29udGFjdCBlbWFpbCBzaG93biBvbiB0aGUgcHJvZmlsZVwiLFxuICAgIH0pLFxuICAgIHdlYnNpdGU6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJXZWJzaXRlIFVSTCBzaG93biBvbiB0aGUgcHJvZmlsZVwiLFxuICAgIH0pLFxuICAgIGFkZHJlc3M6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJCdXNpbmVzcyBhZGRyZXNzIHNob3duIG9uIHRoZSBwcm9maWxlXCIsXG4gICAgfSksXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYXJncywgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoV2hhdHNhcHBQcm9maWxlVXBkYXRlKTtcblxuICAgIGlmIChcbiAgICAgIGZsYWdzW1wiZGlzcGxheS1uYW1lXCJdID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGZsYWdzLmFib3V0ID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGZsYWdzLmRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGZsYWdzLmNhdGVnb3J5ID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGZsYWdzLmVtYWlsID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGZsYWdzLndlYnNpdGUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgZmxhZ3MuYWRkcmVzcyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBlcnJvcihcIk5vdGhpbmcgdG8gdXBkYXRlXCIsIHtcbiAgICAgICAgaGludDogXCJQYXNzIGF0IGxlYXN0IG9uZSBvZiAtLWRpc3BsYXktbmFtZSwgLS1hYm91dCwgLS1kZXNjcmlwdGlvbiwgLS1jYXRlZ29yeSwgLS1lbWFpbCwgLS13ZWJzaXRlLCAtLWFkZHJlc3NcIixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZVNwaW5uZXIgPSBzcGlubmVyKFwiVXBkYXRpbmcgV2hhdHNBcHAgcHJvZmlsZS4uLlwiKTtcbiAgICBpZiAoIWlzSnNvbk1vZGUoKSkge1xuICAgICAgdXBkYXRlU3Bpbm5lci5zdGFydCgpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5wYXRjaDxXaGF0c2FwcFNlbmRlclByb2ZpbGU+KFxuICAgICAgICBgL2FwaS92MS93aGF0c2FwcC9zZW5kZXJzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3MubnVtYmVyKX0vcHJvZmlsZWAsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi4oZmxhZ3NbXCJkaXNwbGF5LW5hbWVcIl0gIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogZmxhZ3NbXCJkaXNwbGF5LW5hbWVcIl0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4uKGZsYWdzLmFib3V0ICE9PSB1bmRlZmluZWQgJiYgeyBhYm91dDogZmxhZ3MuYWJvdXQgfSksXG4gICAgICAgICAgLi4uKGZsYWdzLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGZsYWdzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLihmbGFncy5jYXRlZ29yeSAhPT0gdW5kZWZpbmVkICYmIHsgY2F0ZWdvcnk6IGZsYWdzLmNhdGVnb3J5IH0pLFxuICAgICAgICAgIC4uLihmbGFncy5lbWFpbCAhPT0gdW5kZWZpbmVkICYmIHsgZW1haWw6IGZsYWdzLmVtYWlsIH0pLFxuICAgICAgICAgIC4uLihmbGFncy53ZWJzaXRlICE9PSB1bmRlZmluZWQgJiYgeyB3ZWJzaXRlOiBmbGFncy53ZWJzaXRlIH0pLFxuICAgICAgICAgIC4uLihmbGFncy5hZGRyZXNzICE9PSB1bmRlZmluZWQgJiYgeyBhZGRyZXNzOiBmbGFncy5hZGRyZXNzIH0pLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgdXBkYXRlU3Bpbm5lci5zdG9wKCk7XG5cbiAgICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3VjY2VzcyhcIldoYXRzQXBwIHNlbmRlciBwcm9maWxlIHVwZGF0ZWRcIiwge1xuICAgICAgICBOdW1iZXI6IHJlc3BvbnNlLnBob25lTnVtYmVyLFxuICAgICAgICBcIkRpc3BsYXkgbmFtZVwiOiByZXNwb25zZS5kaXNwbGF5TmFtZSA/PyBjb2xvcnMuZGltKFwi4oCUXCIpLFxuICAgICAgICBBYm91dDogcmVzcG9uc2UuYWJvdXQgPz8gY29sb3JzLmRpbShcIuKAlFwiKSxcbiAgICAgICAgRGVzY3JpcHRpb246IHJlc3BvbnNlLmRlc2NyaXB0aW9uID8/IGNvbG9ycy5kaW0oXCLigJRcIiksXG4gICAgICAgIENhdGVnb3J5OiByZXNwb25zZS5jYXRlZ29yeSA/PyBjb2xvcnMuZGltKFwi4oCUXCIpLFxuICAgICAgICBFbWFpbDogcmVzcG9uc2UuZW1haWwgPz8gY29sb3JzLmRpbShcIuKAlFwiKSxcbiAgICAgICAgV2Vic2l0ZTogcmVzcG9uc2Uud2Vic2l0ZSA/PyBjb2xvcnMuZGltKFwi4oCUXCIpLFxuICAgICAgICBBZGRyZXNzOiByZXNwb25zZS5hZGRyZXNzID8/IGNvbG9ycy5kaW0oXCLigJRcIiksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgdXBkYXRlU3Bpbm5lci5zdG9wKCk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgZXJyIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvciAmJlxuICAgICAgICBlcnIubWVzc2FnZS5pbmNsdWRlcyhcImNvbm5lY3RlZCB0byBXaGF0c0FwcFwiKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yKGVyci5tZXNzYWdlLCB7XG4gICAgICAgICAgaGludDogYENvbm5lY3QgaXQgZmlyc3Q6IHNlbmRseSB3aGF0c2FwcCBjb25uZWN0IC0tbnVtYmVyICR7YXJncy5udW1iZXJ9YCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpIHtcbiAgICAgICAgZXJyb3IoXCJXaGF0c0FwcCBpc24ndCBhdmFpbGFibGUgb24geW91ciB3b3Jrc3BhY2UgeWV0LlwiLCB7XG4gICAgICAgICAgaGludDogXCJXaGF0c0FwcCBpcyByb2xsaW5nIG91dCBncmFkdWFsbHkg4oCUIGNvbnRhY3Qgc3VwcG9ydEBzZW5kbHkubGl2ZSBmb3IgZWFybHkgYWNjZXNzLlwiLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,17 @@
1
+ import { AuthenticatedCommand } from "../../lib/base-command.js";
2
+ export default class WhatsappSend 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
+ from: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
8
+ text: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
9
+ template: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
10
+ language: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
11
+ var: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
12
+ "idempotency-key": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
13
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
14
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
15
+ };
16
+ run(): Promise<void>;
17
+ }