@sendly/cli 3.38.0 → 3.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -167,6 +167,14 @@ sendly sms scheduled
167
167
  sendly sms cancel sched_abc123
168
168
  ```
169
169
 
170
+ #### Idempotent Sends
171
+
172
+ Every send command (`sms send`, `sms group`, `sms schedule`, `sms batch`, `rcs send`, `whatsapp send`) accepts `--idempotency-key` (1-255 printable ASCII characters). Re-running with the same key within 24 hours returns the original result instead of sending again, so a crashed script or CI job is safe to re-run. Without the flag, non-batch sends carry an auto-generated `Idempotency-Key` that is reused across the CLI's own network-error retries, so a retry of a request that already reached the API does not send twice.
173
+
174
+ ```bash
175
+ sendly sms send --to "+15551234567" --text "Your order has shipped!" --idempotency-key "order-4821-shipped"
176
+ ```
177
+
170
178
  ### Numbers Commands
171
179
 
172
180
  Buy international phone numbers and send from them. (US & Canada use toll-free
@@ -383,8 +391,90 @@ Send RCS messages from your brand's verified RCS agent — rich text with
383
391
  tappable suggestion chips, or rich cards with images. Recipients whose device
384
392
  doesn't support RCS automatically get the text delivered as plain SMS (rich
385
393
  cards have no SMS form). Requires a live API key — RCS delivery is never
386
- simulated on a test key. RCS is rolling out gradually; agents are registered
387
- for your brand by the Sendly team — contact support@sendly.live to get set up.
394
+ simulated on a test key. RCS is rolling out gradually; once it is enabled for
395
+ your account you register your brand and agent from the CLI (below) — contact
396
+ support@sendly.live for early access.
397
+
398
+ #### Register Your Brand and Agent
399
+
400
+ The flow is brand → agent → submit → testing → request launch. Drafts are
401
+ saved as you go; required fields are only checked when you submit. Every
402
+ step is also available in the dashboard, and both see the same registration.
403
+ Registration commands need an API key with the `rcs:read` / `rcs:write`
404
+ scopes (or a `sendly login` session).
405
+
406
+ Start from what Sendly already knows about your business (your 10DLC brand
407
+ or toll-free verification), then draft the brand:
408
+
409
+ ```bash
410
+ sendly rcs dossier --json > brand.json # prefilled details; edit as needed
411
+ sendly rcs brands create --from-json brand.json --ein 12-3456789 \
412
+ --legal-entity-type CORPORATION --organization-type PRIVATE_PROFIT
413
+ # or one field per flag:
414
+ sendly rcs brands create --display-name "Acme" --legal-name "Acme Inc" \
415
+ --website https://acme.com --address-line1 "1 Main St" --city Austin \
416
+ --state TX --postal-code 78701 --contact-first-name Jane \
417
+ --contact-last-name Doe --contact-email jane@acme.com \
418
+ --contact-phone +15125550100
419
+ sendly rcs brands update <brandId> --stock-symbol NASDAQ:ACME
420
+ ```
421
+
422
+ Draft the agent under the brand. Logo, hero image and any opt-in screenshot
423
+ must already be public `https://` URLs — assets can't be uploaded from the
424
+ CLI (use the dashboard for that):
425
+
426
+ ```bash
427
+ sendly rcs agents create --brand <brandId> --display-name "Acme" \
428
+ --use-case TRANSACTIONAL --description "Order updates from Acme" \
429
+ --logo-url https://acme.com/logo.png --hero-url https://acme.com/hero.png \
430
+ --brand-color "#1E90FF" --privacy-policy-url https://acme.com/privacy \
431
+ --terms-url https://acme.com/terms --website https://acme.com --website-label Acme
432
+ sendly rcs agents get <agentId>
433
+ ```
434
+
435
+ Submit for review. Sendly checks the brand and agent, then sends them to the
436
+ carrier network; you're emailed when anything changes or needs attention:
437
+
438
+ ```bash
439
+ sendly rcs agents submit <agentId>
440
+ sendly rcs registration # where things stand, and what to do next
441
+ ```
442
+
443
+ Once the agent is in testing, invite test devices (the list you pass replaces
444
+ the current one), send them a message, and add the campaign details the
445
+ launch review needs:
446
+
447
+ ```bash
448
+ sendly rcs agents devices set <agentId> --phone +13125550100 --phone "+13125550101=Jane's Pixel"
449
+ sendly rcs send --to +13125550100 --text "Hello from testing" --agent <agentId>
450
+ sendly rcs agents update <agentId> \
451
+ --company-overview "Acme sells widgets online" \
452
+ --agent-overview "Order and delivery updates" \
453
+ --interaction TRANSACTIONAL_UPDATES \
454
+ --message-example "Your Acme order #4821 has shipped. Reply STOP to opt out." \
455
+ --message-example "Your order is out for delivery today." \
456
+ --message-example "Delivered! Reply HELP for help." \
457
+ --opt-in-method "WEBSITE=Checkbox at checkout" \
458
+ --call-to-action "Get order updates by text" \
459
+ --call-to-action-url https://acme.com/checkout \
460
+ --call-to-action-media-url https://acme.com/optin.png \
461
+ --no-double-opt-in \
462
+ --opt-in-message "Welcome to Acme updates. Reply STOP to opt out." \
463
+ --help-response "Acme support: help@acme.com" \
464
+ --opt-out-response "You are unsubscribed from Acme updates."
465
+ ```
466
+
467
+ Then request launch with a recording or screenshots of the agent on a test
468
+ device:
469
+
470
+ ```bash
471
+ sendly rcs agents request-launch <agentId> --test-url https://acme.com/rcs-test.mp4
472
+ ```
473
+
474
+ `brands create`, `brands update`, `agents create` and `agents update` accept
475
+ `--from-json <file>` for the full nested body (flags override fields in the
476
+ file); every write accepts `--idempotency-key`. Field errors come back as
477
+ `path: message` pairs (and as an `errors` array with `--json`).
388
478
 
389
479
  #### Send a Message
390
480
 
@@ -0,0 +1,44 @@
1
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
2
+ export default class RcsAgentsCreate extends AuthenticatedCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ "from-json": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
7
+ "idempotency-key": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
8
+ "test-url": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
9
+ "test-message-id": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
10
+ "testing-info": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
11
+ "company-overview": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
12
+ "agent-overview": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
13
+ "campaign-info": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
14
+ interaction: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
15
+ "message-example": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
16
+ "opt-in-method": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
17
+ "call-to-action": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
18
+ "call-to-action-url": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
19
+ "call-to-action-media-url": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
20
+ "double-opt-in": import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
21
+ "double-opt-in-message": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
22
+ "opt-in-message": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
23
+ "help-response": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
24
+ "opt-out-response": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
25
+ "display-name": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
26
+ "use-case": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
27
+ description: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
28
+ "logo-url": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
29
+ "hero-url": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
30
+ "brand-color": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
31
+ "privacy-policy-url": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
32
+ "terms-url": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
33
+ phone: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
34
+ "phone-label": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
35
+ website: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
36
+ "website-label": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
37
+ email: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
38
+ "email-label": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
39
+ brand: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
40
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
41
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
42
+ };
43
+ run(): Promise<void>;
44
+ }
@@ -0,0 +1,71 @@
1
+ import { Flags } from "@oclif/core";
2
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
3
+ import { apiClient } from "../../../lib/api-client.js";
4
+ import { json, success, error, colors, spinner, isJsonMode, } from "../../../lib/output.js";
5
+ import { AGENT_BASICS_FLAGS, AGENT_CAMPAIGN_FLAGS, AGENT_TESTING_FLAGS, buildAgentBody, idempotencyKeyFlag, nextStepFor, printAgent, printNextSteps, reportRcsError, } from "../../../lib/rcs-registration.js";
6
+ export default class RcsAgentsCreate extends AuthenticatedCommand {
7
+ static description = "Draft the RCS agent for a brand (step 2; logo, hero, and call-to-action media must already be public https:// URLs)";
8
+ static examples = [
9
+ '<%= config.bin %> rcs agents create --brand 3f6a1c9e-0000-0000-0000-000000000000 --display-name "Acme" --use-case TRANSACTIONAL --description "Order updates from Acme" --logo-url https://acme.com/logo.png --hero-url https://acme.com/hero.png --brand-color "#1E90FF" --privacy-policy-url https://acme.com/privacy --terms-url https://acme.com/terms --website https://acme.com --website-label "Acme"',
10
+ "<%= config.bin %> rcs agents create --brand 3f6a1c9e-0000-0000-0000-000000000000 --from-json agent.json",
11
+ "<%= config.bin %> rcs agents create --from-json agent.json --json",
12
+ ];
13
+ static flags = {
14
+ ...AuthenticatedCommand.baseFlags,
15
+ brand: Flags.string({
16
+ char: "b",
17
+ description: "Brand ID the agent belongs to (see `rcs registration`)",
18
+ }),
19
+ ...AGENT_BASICS_FLAGS,
20
+ ...AGENT_CAMPAIGN_FLAGS,
21
+ ...AGENT_TESTING_FLAGS,
22
+ "from-json": Flags.string({
23
+ description: "Path to a JSON file with the agent ({ brandId, basics, campaign, testing }, or the output of `rcs agents get --json`); flags override fields in the file",
24
+ }),
25
+ "idempotency-key": idempotencyKeyFlag,
26
+ };
27
+ async run() {
28
+ const { flags } = await this.parse(RcsAgentsCreate);
29
+ const built = buildAgentBody(flags, { clearEmpty: false });
30
+ if (typeof built === "string") {
31
+ error(built);
32
+ this.exit(1);
33
+ }
34
+ const body = built;
35
+ if (flags.brand)
36
+ body.brandId = flags.brand;
37
+ if (typeof body.brandId !== "string" || !body.brandId) {
38
+ error("Choose a brand for this agent", {
39
+ hint: "Pass --brand <brandId>; find it with `sendly rcs registration`",
40
+ });
41
+ this.exit(1);
42
+ }
43
+ const saveSpinner = spinner("Saving agent draft...");
44
+ if (!isJsonMode()) {
45
+ saveSpinner.start();
46
+ }
47
+ let response;
48
+ try {
49
+ response = await apiClient.post("/api/v1/rcs/agents", body, true, { idempotencyKey: flags["idempotency-key"] });
50
+ saveSpinner.stop();
51
+ }
52
+ catch (err) {
53
+ saveSpinner.stop();
54
+ if (reportRcsError(err))
55
+ this.exit(1);
56
+ throw err;
57
+ }
58
+ if (isJsonMode()) {
59
+ json(response);
60
+ return;
61
+ }
62
+ const agent = response.agent;
63
+ success(`Agent draft saved: ${agent.id}`);
64
+ console.log();
65
+ printAgent(agent);
66
+ console.log();
67
+ console.log(colors.dim("Missing fields are checked when you submit; fill them in any time with `sendly rcs agents update`."));
68
+ printNextSteps(nextStepFor("draft", { brandId: agent.brandId, agentId: agent.id }));
69
+ }
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3Jjcy9hZ2VudHMvY3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxJQUFJLEVBQ0osT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sT0FBTyxFQUNQLFVBQVUsR0FDWCxNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxVQUFVLEVBQ1YsY0FBYyxFQUNkLGNBQWMsR0FFZixNQUFNLGtDQUFrQyxDQUFDO0FBTTFDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZUFBZ0IsU0FBUSxvQkFBb0I7SUFDL0QsTUFBTSxDQUFDLFdBQVcsR0FDaEIscUhBQXFILENBQUM7SUFFeEgsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQiw4WUFBOFk7UUFDOVkseUdBQXlHO1FBQ3pHLG1FQUFtRTtLQUNwRSxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztRQUNqQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSx3REFBd0Q7U0FDdEUsQ0FBQztRQUNGLEdBQUcsa0JBQWtCO1FBQ3JCLEdBQUcsb0JBQW9CO1FBQ3ZCLEdBQUcsbUJBQW1CO1FBQ3RCLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3hCLFdBQVcsRUFDVCwwSkFBMEo7U0FDN0osQ0FBQztRQUNGLGlCQUFpQixFQUFFLGtCQUFrQjtLQUN0QyxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXBELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsS0FBZ0MsQ0FBQztRQUM5QyxJQUFJLEtBQUssQ0FBQyxLQUFLO1lBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzVDLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0RCxLQUFLLENBQUMsK0JBQStCLEVBQUU7Z0JBQ3JDLElBQUksRUFBRSxnRUFBZ0U7YUFDdkUsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNsQixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksUUFBNkIsQ0FBQztRQUNsQyxJQUFJLENBQUM7WUFDSCxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUM3QixvQkFBb0IsRUFDcEIsSUFBSSxFQUNKLElBQUksRUFDSixFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUM3QyxDQUFDO1lBQ0YsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQztnQkFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztRQUVELElBQUksVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDZixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDN0IsT0FBTyxDQUFDLHNCQUFzQixLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZCxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FDVCxNQUFNLENBQUMsR0FBRyxDQUNSLG9HQUFvRyxDQUNyRyxDQUNGLENBQUM7UUFDRixjQUFjLENBQ1osV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDcEUsQ0FBQztJQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQge1xuICBqc29uLFxuICBzdWNjZXNzLFxuICBlcnJvcixcbiAgY29sb3JzLFxuICBzcGlubmVyLFxuICBpc0pzb25Nb2RlLFxufSBmcm9tIFwiLi4vLi4vLi4vbGliL291dHB1dC5qc1wiO1xuaW1wb3J0IHtcbiAgQUdFTlRfQkFTSUNTX0ZMQUdTLFxuICBBR0VOVF9DQU1QQUlHTl9GTEFHUyxcbiAgQUdFTlRfVEVTVElOR19GTEFHUyxcbiAgYnVpbGRBZ2VudEJvZHksXG4gIGlkZW1wb3RlbmN5S2V5RmxhZyxcbiAgbmV4dFN0ZXBGb3IsXG4gIHByaW50QWdlbnQsXG4gIHByaW50TmV4dFN0ZXBzLFxuICByZXBvcnRSY3NFcnJvcixcbiAgdHlwZSBQdWJsaWNSY3NBZ2VudCxcbn0gZnJvbSBcIi4uLy4uLy4uL2xpYi9yY3MtcmVnaXN0cmF0aW9uLmpzXCI7XG5cbmludGVyZmFjZSBDcmVhdGVBZ2VudFJlc3BvbnNlIHtcbiAgYWdlbnQ6IFB1YmxpY1Jjc0FnZW50O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSY3NBZ2VudHNDcmVhdGUgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9XG4gICAgXCJEcmFmdCB0aGUgUkNTIGFnZW50IGZvciBhIGJyYW5kIChzdGVwIDI7IGxvZ28sIGhlcm8sIGFuZCBjYWxsLXRvLWFjdGlvbiBtZWRpYSBtdXN0IGFscmVhZHkgYmUgcHVibGljIGh0dHBzOi8vIFVSTHMpXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgICc8JT0gY29uZmlnLmJpbiAlPiByY3MgYWdlbnRzIGNyZWF0ZSAtLWJyYW5kIDNmNmExYzllLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCAtLWRpc3BsYXktbmFtZSBcIkFjbWVcIiAtLXVzZS1jYXNlIFRSQU5TQUNUSU9OQUwgLS1kZXNjcmlwdGlvbiBcIk9yZGVyIHVwZGF0ZXMgZnJvbSBBY21lXCIgLS1sb2dvLXVybCBodHRwczovL2FjbWUuY29tL2xvZ28ucG5nIC0taGVyby11cmwgaHR0cHM6Ly9hY21lLmNvbS9oZXJvLnBuZyAtLWJyYW5kLWNvbG9yIFwiIzFFOTBGRlwiIC0tcHJpdmFjeS1wb2xpY3ktdXJsIGh0dHBzOi8vYWNtZS5jb20vcHJpdmFjeSAtLXRlcm1zLXVybCBodHRwczovL2FjbWUuY29tL3Rlcm1zIC0td2Vic2l0ZSBodHRwczovL2FjbWUuY29tIC0td2Vic2l0ZS1sYWJlbCBcIkFjbWVcIicsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiByY3MgYWdlbnRzIGNyZWF0ZSAtLWJyYW5kIDNmNmExYzllLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCAtLWZyb20tanNvbiBhZ2VudC5qc29uXCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiByY3MgYWdlbnRzIGNyZWF0ZSAtLWZyb20tanNvbiBhZ2VudC5qc29uIC0tanNvblwiLFxuICBdO1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gICAgYnJhbmQ6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcImJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkJyYW5kIElEIHRoZSBhZ2VudCBiZWxvbmdzIHRvIChzZWUgYHJjcyByZWdpc3RyYXRpb25gKVwiLFxuICAgIH0pLFxuICAgIC4uLkFHRU5UX0JBU0lDU19GTEFHUyxcbiAgICAuLi5BR0VOVF9DQU1QQUlHTl9GTEFHUyxcbiAgICAuLi5BR0VOVF9URVNUSU5HX0ZMQUdTLFxuICAgIFwiZnJvbS1qc29uXCI6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJQYXRoIHRvIGEgSlNPTiBmaWxlIHdpdGggdGhlIGFnZW50ICh7IGJyYW5kSWQsIGJhc2ljcywgY2FtcGFpZ24sIHRlc3RpbmcgfSwgb3IgdGhlIG91dHB1dCBvZiBgcmNzIGFnZW50cyBnZXQgLS1qc29uYCk7IGZsYWdzIG92ZXJyaWRlIGZpZWxkcyBpbiB0aGUgZmlsZVwiLFxuICAgIH0pLFxuICAgIFwiaWRlbXBvdGVuY3kta2V5XCI6IGlkZW1wb3RlbmN5S2V5RmxhZyxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShSY3NBZ2VudHNDcmVhdGUpO1xuXG4gICAgY29uc3QgYnVpbHQgPSBidWlsZEFnZW50Qm9keShmbGFncywgeyBjbGVhckVtcHR5OiBmYWxzZSB9KTtcbiAgICBpZiAodHlwZW9mIGJ1aWx0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBlcnJvcihidWlsdCk7XG4gICAgICB0aGlzLmV4aXQoMSk7XG4gICAgfVxuICAgIGNvbnN0IGJvZHkgPSBidWlsdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoZmxhZ3MuYnJhbmQpIGJvZHkuYnJhbmRJZCA9IGZsYWdzLmJyYW5kO1xuICAgIGlmICh0eXBlb2YgYm9keS5icmFuZElkICE9PSBcInN0cmluZ1wiIHx8ICFib2R5LmJyYW5kSWQpIHtcbiAgICAgIGVycm9yKFwiQ2hvb3NlIGEgYnJhbmQgZm9yIHRoaXMgYWdlbnRcIiwge1xuICAgICAgICBoaW50OiBcIlBhc3MgLS1icmFuZCA8YnJhbmRJZD47IGZpbmQgaXQgd2l0aCBgc2VuZGx5IHJjcyByZWdpc3RyYXRpb25gXCIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBzYXZlU3Bpbm5lciA9IHNwaW5uZXIoXCJTYXZpbmcgYWdlbnQgZHJhZnQuLi5cIik7XG4gICAgaWYgKCFpc0pzb25Nb2RlKCkpIHtcbiAgICAgIHNhdmVTcGlubmVyLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3BvbnNlOiBDcmVhdGVBZ2VudFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5wb3N0PENyZWF0ZUFnZW50UmVzcG9uc2U+KFxuICAgICAgICBcIi9hcGkvdjEvcmNzL2FnZW50c1wiLFxuICAgICAgICBib2R5LFxuICAgICAgICB0cnVlLFxuICAgICAgICB7IGlkZW1wb3RlbmN5S2V5OiBmbGFnc1tcImlkZW1wb3RlbmN5LWtleVwiXSB9LFxuICAgICAgKTtcbiAgICAgIHNhdmVTcGlubmVyLnN0b3AoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNhdmVTcGlubmVyLnN0b3AoKTtcbiAgICAgIGlmIChyZXBvcnRSY3NFcnJvcihlcnIpKSB0aGlzLmV4aXQoMSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWdlbnQgPSByZXNwb25zZS5hZ2VudDtcbiAgICBzdWNjZXNzKGBBZ2VudCBkcmFmdCBzYXZlZDogJHthZ2VudC5pZH1gKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICAgIHByaW50QWdlbnQoYWdlbnQpO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBjb2xvcnMuZGltKFxuICAgICAgICBcIk1pc3NpbmcgZmllbGRzIGFyZSBjaGVja2VkIHdoZW4geW91IHN1Ym1pdDsgZmlsbCB0aGVtIGluIGFueSB0aW1lIHdpdGggYHNlbmRseSByY3MgYWdlbnRzIHVwZGF0ZWAuXCIsXG4gICAgICApLFxuICAgICk7XG4gICAgcHJpbnROZXh0U3RlcHMoXG4gICAgICBuZXh0U3RlcEZvcihcImRyYWZ0XCIsIHsgYnJhbmRJZDogYWdlbnQuYnJhbmRJZCwgYWdlbnRJZDogYWdlbnQuaWQgfSksXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,16 @@
1
+ import { AuthenticatedCommand } from "../../../../lib/base-command.js";
2
+ export default class RcsAgentsDevicesSet extends AuthenticatedCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ phone: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
10
+ clear: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
11
+ "idempotency-key": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
12
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
13
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
@@ -0,0 +1,77 @@
1
+ import { Args, Flags } from "@oclif/core";
2
+ import { AuthenticatedCommand } from "../../../../lib/base-command.js";
3
+ import { apiClient } from "../../../../lib/api-client.js";
4
+ import { json, success, error, colors, spinner, isJsonMode, } from "../../../../lib/output.js";
5
+ import { idempotencyKeyFlag, parseDeviceFlags, printDevices, reportRcsError, } from "../../../../lib/rcs-registration.js";
6
+ export default class RcsAgentsDevicesSet extends AuthenticatedCommand {
7
+ static description = "Set the test devices invited to an RCS agent — the list you pass replaces the current one (up to 20)";
8
+ static examples = [
9
+ "<%= config.bin %> rcs agents devices set 3f6a1c9e-0000-0000-0000-000000000000 --phone +13125550100 --phone +13125550101",
10
+ '<%= config.bin %> rcs agents devices set 3f6a1c9e-0000-0000-0000-000000000000 --phone "+13125550100=Front desk Pixel"',
11
+ "<%= config.bin %> rcs agents devices set 3f6a1c9e-0000-0000-0000-000000000000 --clear",
12
+ ];
13
+ static args = {
14
+ id: Args.string({
15
+ description: "Agent ID",
16
+ required: true,
17
+ }),
18
+ };
19
+ static flags = {
20
+ ...AuthenticatedCommand.baseFlags,
21
+ phone: Flags.string({
22
+ char: "p",
23
+ description: 'Device phone number (E.164), optionally labelled as "+13125550100=Label". Repeatable.',
24
+ multiple: true,
25
+ exclusive: ["clear"],
26
+ }),
27
+ clear: Flags.boolean({
28
+ description: "Remove every invited device",
29
+ default: false,
30
+ }),
31
+ "idempotency-key": idempotencyKeyFlag,
32
+ };
33
+ async run() {
34
+ const { args, flags } = await this.parse(RcsAgentsDevicesSet);
35
+ const parsed = parseDeviceFlags(flags.phone);
36
+ if (typeof parsed === "string") {
37
+ error(parsed);
38
+ this.exit(1);
39
+ }
40
+ const devices = parsed;
41
+ if (devices.length === 0 && !flags.clear) {
42
+ error("Provide at least one --phone, or --clear to remove every device", {
43
+ hint: 'Example: --phone +13125550100 --phone "+13125550101=Jane\'s Pixel"',
44
+ });
45
+ this.exit(1);
46
+ }
47
+ const saveSpinner = spinner("Updating test devices...");
48
+ if (!isJsonMode()) {
49
+ saveSpinner.start();
50
+ }
51
+ let response;
52
+ try {
53
+ response = await apiClient.put(`/api/v1/rcs/agents/${encodeURIComponent(args.id)}/test-devices`, { devices }, true, { idempotencyKey: flags["idempotency-key"] });
54
+ saveSpinner.stop();
55
+ }
56
+ catch (err) {
57
+ saveSpinner.stop();
58
+ if (reportRcsError(err))
59
+ this.exit(1);
60
+ throw err;
61
+ }
62
+ if (isJsonMode()) {
63
+ json(response);
64
+ return;
65
+ }
66
+ const list = response.devices ?? [];
67
+ success(list.length === 0
68
+ ? "Test devices cleared"
69
+ : `Test devices set: ${list.length}`);
70
+ printDevices(list);
71
+ if (list.length > 0) {
72
+ console.log();
73
+ console.log(colors.dim("Invites go out once the agent is in testing. Each device gets a prompt from the carrier network to accept; send a test message with `sendly rcs send` after it accepts."));
74
+ }
75
+ }
76
+ }
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3Jjcy9hZ2VudHMvZGV2aWNlcy9zZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzFELE9BQU8sRUFDTCxJQUFJLEVBQ0osT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sT0FBTyxFQUNQLFVBQVUsR0FDWCxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixjQUFjLEdBRWYsTUFBTSxxQ0FBcUMsQ0FBQztBQU03QyxNQUFNLENBQUMsT0FBTyxPQUFPLG1CQUFvQixTQUFRLG9CQUFvQjtJQUNuRSxNQUFNLENBQUMsV0FBVyxHQUNoQixzR0FBc0csQ0FBQztJQUV6RyxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLHlIQUF5SDtRQUN6SCx1SEFBdUg7UUFDdkgsdUZBQXVGO0tBQ3hGLENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDZCxXQUFXLEVBQUUsVUFBVTtZQUN2QixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztRQUNqQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFDVCx1RkFBdUY7WUFDekYsUUFBUSxFQUFFLElBQUk7WUFDZCxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUM7U0FDckIsQ0FBQztRQUNGLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ25CLFdBQVcsRUFBRSw2QkFBNkI7WUFDMUMsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDO1FBQ0YsaUJBQWlCLEVBQUUsa0JBQWtCO0tBQ3RDLENBQUM7SUFFRixLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFOUQsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxNQUF3RCxDQUFDO1FBQ3pFLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekMsS0FBSyxDQUFDLGlFQUFpRSxFQUFFO2dCQUN2RSxJQUFJLEVBQUUsb0VBQW9FO2FBQzNFLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDbEIsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLFFBQTRCLENBQUM7UUFDakMsSUFBSSxDQUFDO1lBQ0gsUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FDNUIsc0JBQXNCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUNoRSxFQUFFLE9BQU8sRUFBRSxFQUNYLElBQUksRUFDSixFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUM3QyxDQUFDO1lBQ0YsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQztnQkFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztRQUVELElBQUksVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDZixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ3BDLE9BQU8sQ0FDTCxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDZixDQUFDLENBQUMsc0JBQXNCO1lBQ3hCLENBQUMsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUN2QyxDQUFDO1FBQ0YsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxHQUFHLENBQ1IseUtBQXlLLENBQzFLLENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJncywgRmxhZ3MgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi8uLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAganNvbixcbiAgc3VjY2VzcyxcbiAgZXJyb3IsXG4gIGNvbG9ycyxcbiAgc3Bpbm5lcixcbiAgaXNKc29uTW9kZSxcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL2xpYi9vdXRwdXQuanNcIjtcbmltcG9ydCB7XG4gIGlkZW1wb3RlbmN5S2V5RmxhZyxcbiAgcGFyc2VEZXZpY2VGbGFncyxcbiAgcHJpbnREZXZpY2VzLFxuICByZXBvcnRSY3NFcnJvcixcbiAgdHlwZSBQdWJsaWNSY3NUZXN0RGV2aWNlLFxufSBmcm9tIFwiLi4vLi4vLi4vLi4vbGliL3Jjcy1yZWdpc3RyYXRpb24uanNcIjtcblxuaW50ZXJmYWNlIFNldERldmljZXNSZXNwb25zZSB7XG4gIGRldmljZXM6IFB1YmxpY1Jjc1Rlc3REZXZpY2VbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmNzQWdlbnRzRGV2aWNlc1NldCBleHRlbmRzIEF1dGhlbnRpY2F0ZWRDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID1cbiAgICBcIlNldCB0aGUgdGVzdCBkZXZpY2VzIGludml0ZWQgdG8gYW4gUkNTIGFnZW50IOKAlCB0aGUgbGlzdCB5b3UgcGFzcyByZXBsYWNlcyB0aGUgY3VycmVudCBvbmUgKHVwIHRvIDIwKVwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHJjcyBhZ2VudHMgZGV2aWNlcyBzZXQgM2Y2YTFjOWUtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIC0tcGhvbmUgKzEzMTI1NTUwMTAwIC0tcGhvbmUgKzEzMTI1NTUwMTAxXCIsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHJjcyBhZ2VudHMgZGV2aWNlcyBzZXQgM2Y2YTFjOWUtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIC0tcGhvbmUgXCIrMTMxMjU1NTAxMDA9RnJvbnQgZGVzayBQaXhlbFwiJyxcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHJjcyBhZ2VudHMgZGV2aWNlcyBzZXQgM2Y2YTFjOWUtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIC0tY2xlYXJcIixcbiAgXTtcblxuICBzdGF0aWMgYXJncyA9IHtcbiAgICBpZDogQXJncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiQWdlbnQgSURcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pLFxuICB9O1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gICAgcGhvbmU6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcInBcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnRGV2aWNlIHBob25lIG51bWJlciAoRS4xNjQpLCBvcHRpb25hbGx5IGxhYmVsbGVkIGFzIFwiKzEzMTI1NTUwMTAwPUxhYmVsXCIuIFJlcGVhdGFibGUuJyxcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgZXhjbHVzaXZlOiBbXCJjbGVhclwiXSxcbiAgICB9KSxcbiAgICBjbGVhcjogRmxhZ3MuYm9vbGVhbih7XG4gICAgICBkZXNjcmlwdGlvbjogXCJSZW1vdmUgZXZlcnkgaW52aXRlZCBkZXZpY2VcIixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0pLFxuICAgIFwiaWRlbXBvdGVuY3kta2V5XCI6IGlkZW1wb3RlbmN5S2V5RmxhZyxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBhcmdzLCBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShSY3NBZ2VudHNEZXZpY2VzU2V0KTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRGV2aWNlRmxhZ3MoZmxhZ3MucGhvbmUpO1xuICAgIGlmICh0eXBlb2YgcGFyc2VkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBlcnJvcihwYXJzZWQpO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cbiAgICBjb25zdCBkZXZpY2VzID0gcGFyc2VkIGFzIEFycmF5PHsgcGhvbmVOdW1iZXI6IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfT47XG4gICAgaWYgKGRldmljZXMubGVuZ3RoID09PSAwICYmICFmbGFncy5jbGVhcikge1xuICAgICAgZXJyb3IoXCJQcm92aWRlIGF0IGxlYXN0IG9uZSAtLXBob25lLCBvciAtLWNsZWFyIHRvIHJlbW92ZSBldmVyeSBkZXZpY2VcIiwge1xuICAgICAgICBoaW50OiAnRXhhbXBsZTogLS1waG9uZSArMTMxMjU1NTAxMDAgLS1waG9uZSBcIisxMzEyNTU1MDEwMT1KYW5lXFwncyBQaXhlbFwiJyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHNhdmVTcGlubmVyID0gc3Bpbm5lcihcIlVwZGF0aW5nIHRlc3QgZGV2aWNlcy4uLlwiKTtcbiAgICBpZiAoIWlzSnNvbk1vZGUoKSkge1xuICAgICAgc2F2ZVNwaW5uZXIuc3RhcnQoKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2U6IFNldERldmljZXNSZXNwb25zZTtcbiAgICB0cnkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnQucHV0PFNldERldmljZXNSZXNwb25zZT4oXG4gICAgICAgIGAvYXBpL3YxL3Jjcy9hZ2VudHMvJHtlbmNvZGVVUklDb21wb25lbnQoYXJncy5pZCl9L3Rlc3QtZGV2aWNlc2AsXG4gICAgICAgIHsgZGV2aWNlcyB9LFxuICAgICAgICB0cnVlLFxuICAgICAgICB7IGlkZW1wb3RlbmN5S2V5OiBmbGFnc1tcImlkZW1wb3RlbmN5LWtleVwiXSB9LFxuICAgICAgKTtcbiAgICAgIHNhdmVTcGlubmVyLnN0b3AoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNhdmVTcGlubmVyLnN0b3AoKTtcbiAgICAgIGlmIChyZXBvcnRSY3NFcnJvcihlcnIpKSB0aGlzLmV4aXQoMSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGlzdCA9IHJlc3BvbnNlLmRldmljZXMgPz8gW107XG4gICAgc3VjY2VzcyhcbiAgICAgIGxpc3QubGVuZ3RoID09PSAwXG4gICAgICAgID8gXCJUZXN0IGRldmljZXMgY2xlYXJlZFwiXG4gICAgICAgIDogYFRlc3QgZGV2aWNlcyBzZXQ6ICR7bGlzdC5sZW5ndGh9YCxcbiAgICApO1xuICAgIHByaW50RGV2aWNlcyhsaXN0KTtcbiAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgICAgXCJJbnZpdGVzIGdvIG91dCBvbmNlIHRoZSBhZ2VudCBpcyBpbiB0ZXN0aW5nLiBFYWNoIGRldmljZSBnZXRzIGEgcHJvbXB0IGZyb20gdGhlIGNhcnJpZXIgbmV0d29yayB0byBhY2NlcHQ7IHNlbmQgYSB0ZXN0IG1lc3NhZ2Ugd2l0aCBgc2VuZGx5IHJjcyBzZW5kYCBhZnRlciBpdCBhY2NlcHRzLlwiLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
2
+ export default class RcsAgentsGet extends AuthenticatedCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
10
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
11
+ };
12
+ run(): Promise<void>;
13
+ }
@@ -0,0 +1,51 @@
1
+ import { Args } from "@oclif/core";
2
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
3
+ import { apiClient } from "../../../lib/api-client.js";
4
+ import { json, spinner, isJsonMode } from "../../../lib/output.js";
5
+ import { nextStepFor, printAgent, printDevices, printNextSteps, reportRcsError, } from "../../../lib/rcs-registration.js";
6
+ export default class RcsAgentsGet extends AuthenticatedCommand {
7
+ static description = "Get an RCS agent with its test devices and the latest review stage (run again to refresh)";
8
+ static examples = [
9
+ "<%= config.bin %> rcs agents get 3f6a1c9e-0000-0000-0000-000000000000",
10
+ "<%= config.bin %> rcs agents get 3f6a1c9e-0000-0000-0000-000000000000 --json",
11
+ ];
12
+ static args = {
13
+ id: Args.string({
14
+ description: "Agent ID",
15
+ required: true,
16
+ }),
17
+ };
18
+ static flags = {
19
+ ...AuthenticatedCommand.baseFlags,
20
+ };
21
+ async run() {
22
+ const { args } = await this.parse(RcsAgentsGet);
23
+ const loadSpinner = spinner("Fetching RCS agent...");
24
+ if (!isJsonMode()) {
25
+ loadSpinner.start();
26
+ }
27
+ let response;
28
+ try {
29
+ response = await apiClient.get(`/api/v1/rcs/agents/${encodeURIComponent(args.id)}`);
30
+ loadSpinner.stop();
31
+ }
32
+ catch (err) {
33
+ loadSpinner.stop();
34
+ if (reportRcsError(err))
35
+ this.exit(1);
36
+ throw err;
37
+ }
38
+ if (isJsonMode()) {
39
+ json(response);
40
+ return;
41
+ }
42
+ console.log();
43
+ printAgent(response.agent);
44
+ printDevices(response.devices ?? response.agent.testDevices ?? []);
45
+ printNextSteps(nextStepFor(response.stage ?? response.agent.customerStage, {
46
+ brandId: response.agent.brandId,
47
+ agentId: response.agent.id,
48
+ }));
49
+ }
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3Jjcy9hZ2VudHMvZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sRUFDTCxXQUFXLEVBQ1gsVUFBVSxFQUNWLFlBQVksRUFDWixjQUFjLEVBQ2QsY0FBYyxHQUlmLE1BQU0sa0NBQWtDLENBQUM7QUFRMUMsTUFBTSxDQUFDLE9BQU8sT0FBTyxZQUFhLFNBQVEsb0JBQW9CO0lBQzVELE1BQU0sQ0FBQyxXQUFXLEdBQ2hCLDJGQUEyRixDQUFDO0lBRTlGLE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsdUVBQXVFO1FBQ3ZFLDhFQUE4RTtLQUMvRSxDQUFDO0lBRUYsTUFBTSxDQUFDLElBQUksR0FBRztRQUNaLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2QsV0FBVyxFQUFFLFVBQVU7WUFDdkIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO0tBQ0gsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7S0FDbEMsQ0FBQztJQUVGLEtBQUssQ0FBQyxHQUFHO1FBQ1AsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVoRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNsQixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksUUFBMEIsQ0FBQztRQUMvQixJQUFJLENBQUM7WUFDSCxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUM1QixzQkFBc0Isa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQ3BELENBQUM7WUFDRixXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNmLE9BQU87UUFDVCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuRSxjQUFjLENBQ1osV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDMUQsT0FBTyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTztZQUMvQixPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1NBQzNCLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFyZ3MgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHsganNvbiwgc3Bpbm5lciwgaXNKc29uTW9kZSB9IGZyb20gXCIuLi8uLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5pbXBvcnQge1xuICBuZXh0U3RlcEZvcixcbiAgcHJpbnRBZ2VudCxcbiAgcHJpbnREZXZpY2VzLFxuICBwcmludE5leHRTdGVwcyxcbiAgcmVwb3J0UmNzRXJyb3IsXG4gIHR5cGUgQ3VzdG9tZXJTdGFnZSxcbiAgdHlwZSBQdWJsaWNSY3NBZ2VudCxcbiAgdHlwZSBQdWJsaWNSY3NUZXN0RGV2aWNlLFxufSBmcm9tIFwiLi4vLi4vLi4vbGliL3Jjcy1yZWdpc3RyYXRpb24uanNcIjtcblxuaW50ZXJmYWNlIEdldEFnZW50UmVzcG9uc2Uge1xuICBhZ2VudDogUHVibGljUmNzQWdlbnQ7XG4gIGRldmljZXM6IFB1YmxpY1Jjc1Rlc3REZXZpY2VbXTtcbiAgc3RhZ2U6IEN1c3RvbWVyU3RhZ2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJjc0FnZW50c0dldCBleHRlbmRzIEF1dGhlbnRpY2F0ZWRDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID1cbiAgICBcIkdldCBhbiBSQ1MgYWdlbnQgd2l0aCBpdHMgdGVzdCBkZXZpY2VzIGFuZCB0aGUgbGF0ZXN0IHJldmlldyBzdGFnZSAocnVuIGFnYWluIHRvIHJlZnJlc2gpXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gcmNzIGFnZW50cyBnZXQgM2Y2YTFjOWUtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiByY3MgYWdlbnRzIGdldCAzZjZhMWM5ZS0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAgLS1qc29uXCIsXG4gIF07XG5cbiAgc3RhdGljIGFyZ3MgPSB7XG4gICAgaWQ6IEFyZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFnZW50IElEXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KSxcbiAgfTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGFyZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoUmNzQWdlbnRzR2V0KTtcblxuICAgIGNvbnN0IGxvYWRTcGlubmVyID0gc3Bpbm5lcihcIkZldGNoaW5nIFJDUyBhZ2VudC4uLlwiKTtcbiAgICBpZiAoIWlzSnNvbk1vZGUoKSkge1xuICAgICAgbG9hZFNwaW5uZXIuc3RhcnQoKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2U6IEdldEFnZW50UmVzcG9uc2U7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LmdldDxHZXRBZ2VudFJlc3BvbnNlPihcbiAgICAgICAgYC9hcGkvdjEvcmNzL2FnZW50cy8ke2VuY29kZVVSSUNvbXBvbmVudChhcmdzLmlkKX1gLFxuICAgICAgKTtcbiAgICAgIGxvYWRTcGlubmVyLnN0b3AoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvYWRTcGlubmVyLnN0b3AoKTtcbiAgICAgIGlmIChyZXBvcnRSY3NFcnJvcihlcnIpKSB0aGlzLmV4aXQoMSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coKTtcbiAgICBwcmludEFnZW50KHJlc3BvbnNlLmFnZW50KTtcbiAgICBwcmludERldmljZXMocmVzcG9uc2UuZGV2aWNlcyA/PyByZXNwb25zZS5hZ2VudC50ZXN0RGV2aWNlcyA/PyBbXSk7XG4gICAgcHJpbnROZXh0U3RlcHMoXG4gICAgICBuZXh0U3RlcEZvcihyZXNwb25zZS5zdGFnZSA/PyByZXNwb25zZS5hZ2VudC5jdXN0b21lclN0YWdlLCB7XG4gICAgICAgIGJyYW5kSWQ6IHJlc3BvbnNlLmFnZW50LmJyYW5kSWQsXG4gICAgICAgIGFnZW50SWQ6IHJlc3BvbnNlLmFnZW50LmlkLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,16 @@
1
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
2
+ export default class RcsAgentsRequestLaunch extends AuthenticatedCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ "test-url": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
10
+ "testing-info": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
11
+ "idempotency-key": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
12
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
13
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
@@ -0,0 +1,71 @@
1
+ import { Args, Flags } from "@oclif/core";
2
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
3
+ import { apiClient } from "../../../lib/api-client.js";
4
+ import { json, success, colors, spinner, isJsonMode, keyValue, } from "../../../lib/output.js";
5
+ import { formatStage, idempotencyKeyFlag, nextStepFor, printNextSteps, reportRcsError, } from "../../../lib/rcs-registration.js";
6
+ export default class RcsAgentsRequestLaunch extends AuthenticatedCommand {
7
+ static description = "Request launch once testing is done — Sendly reviews the campaign details, then sends the launch to the carrier network";
8
+ static examples = [
9
+ "<%= config.bin %> rcs agents request-launch 3f6a1c9e-0000-0000-0000-000000000000 --test-url https://acme.com/rcs-test-recording.mp4",
10
+ '<%= config.bin %> rcs agents request-launch 3f6a1c9e-0000-0000-0000-000000000000 --test-url https://acme.com/rcs-test.png --testing-info "Tested on two Pixel devices" --json',
11
+ ];
12
+ static args = {
13
+ id: Args.string({
14
+ description: "Agent ID",
15
+ required: true,
16
+ }),
17
+ };
18
+ static flags = {
19
+ ...AuthenticatedCommand.baseFlags,
20
+ "test-url": Flags.string({
21
+ description: "Public https:// URL of a screen recording or screenshots of the agent on a test device (stored on the agent before the request)",
22
+ }),
23
+ "testing-info": Flags.string({
24
+ description: "Anything else reviewers should know about testing",
25
+ }),
26
+ "idempotency-key": idempotencyKeyFlag,
27
+ };
28
+ async run() {
29
+ const { args, flags } = await this.parse(RcsAgentsRequestLaunch);
30
+ const body = {};
31
+ if (flags["test-url"] !== undefined)
32
+ body.testUrl = flags["test-url"];
33
+ if (flags["testing-info"] !== undefined) {
34
+ body.testingAdditionalInformation = flags["testing-info"];
35
+ }
36
+ const launchSpinner = spinner("Requesting launch...");
37
+ if (!isJsonMode()) {
38
+ launchSpinner.start();
39
+ }
40
+ let response;
41
+ try {
42
+ response = await apiClient.post(`/api/v1/rcs/agents/${encodeURIComponent(args.id)}/request-launch`, body, true, { idempotencyKey: flags["idempotency-key"] });
43
+ launchSpinner.stop();
44
+ }
45
+ catch (err) {
46
+ launchSpinner.stop();
47
+ if (reportRcsError(err))
48
+ this.exit(1);
49
+ throw err;
50
+ }
51
+ if (isJsonMode()) {
52
+ json(response);
53
+ return;
54
+ }
55
+ const agent = response.agent;
56
+ const stage = response.stage ?? agent.customerStage;
57
+ success(`Launch requested: ${agent.displayName || agent.id}`);
58
+ console.log();
59
+ keyValue([
60
+ ["Agent", agent.id],
61
+ ["Brand", agent.brandId ?? colors.dim("—")],
62
+ ["Stage", formatStage(stage)],
63
+ ["Review", agent.reviewStatus],
64
+ ...(agent.testing?.testUrl
65
+ ? [["Test URL", String(agent.testing.testUrl)]]
66
+ : []),
67
+ ]);
68
+ printNextSteps(nextStepFor(stage, { brandId: agent.brandId, agentId: agent.id }));
69
+ }
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sYXVuY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tbWFuZHMvcmNzL2FnZW50cy9yZXF1ZXN0LWxhdW5jaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUNMLElBQUksRUFDSixPQUFPLEVBQ1AsTUFBTSxFQUNOLE9BQU8sRUFDUCxVQUFVLEVBQ1YsUUFBUSxHQUNULE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLGNBQWMsRUFDZCxjQUFjLEdBR2YsTUFBTSxrQ0FBa0MsQ0FBQztBQU8xQyxNQUFNLENBQUMsT0FBTyxPQUFPLHNCQUF1QixTQUFRLG9CQUFvQjtJQUN0RSxNQUFNLENBQUMsV0FBVyxHQUNoQix5SEFBeUgsQ0FBQztJQUU1SCxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLHFJQUFxSTtRQUNySSwrS0FBK0s7S0FDaEwsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNkLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztLQUNILENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTO1FBQ2pDLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3ZCLFdBQVcsRUFDVCxpSUFBaUk7U0FDcEksQ0FBQztRQUNGLGNBQWMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzNCLFdBQVcsRUFBRSxtREFBbUQ7U0FDakUsQ0FBQztRQUNGLGlCQUFpQixFQUFFLGtCQUFrQjtLQUN0QyxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sSUFBSSxHQUE0QixFQUFFLENBQUM7UUFDekMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2xCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBRUQsSUFBSSxRQUErQixDQUFDO1FBQ3BDLElBQUksQ0FBQztZQUNILFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQzdCLHNCQUFzQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUNsRSxJQUFJLEVBQ0osSUFBSSxFQUNKLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQzdDLENBQUM7WUFDRixhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNmLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUM3QixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDcEQsT0FBTyxDQUFDLHFCQUFxQixLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNkLFFBQVEsQ0FBQztZQUNQLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDO1lBQzlCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU87Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFxQixDQUFDO2dCQUNuRSxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ1IsQ0FBQyxDQUFDO1FBQ0gsY0FBYyxDQUNaLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQ2xFLENBQUM7SUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJncywgRmxhZ3MgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAganNvbixcbiAgc3VjY2VzcyxcbiAgY29sb3JzLFxuICBzcGlubmVyLFxuICBpc0pzb25Nb2RlLFxuICBrZXlWYWx1ZSxcbn0gZnJvbSBcIi4uLy4uLy4uL2xpYi9vdXRwdXQuanNcIjtcbmltcG9ydCB7XG4gIGZvcm1hdFN0YWdlLFxuICBpZGVtcG90ZW5jeUtleUZsYWcsXG4gIG5leHRTdGVwRm9yLFxuICBwcmludE5leHRTdGVwcyxcbiAgcmVwb3J0UmNzRXJyb3IsXG4gIHR5cGUgQ3VzdG9tZXJTdGFnZSxcbiAgdHlwZSBQdWJsaWNSY3NBZ2VudCxcbn0gZnJvbSBcIi4uLy4uLy4uL2xpYi9yY3MtcmVnaXN0cmF0aW9uLmpzXCI7XG5cbmludGVyZmFjZSBSZXF1ZXN0TGF1bmNoUmVzcG9uc2Uge1xuICBhZ2VudDogUHVibGljUmNzQWdlbnQ7XG4gIHN0YWdlOiBDdXN0b21lclN0YWdlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSY3NBZ2VudHNSZXF1ZXN0TGF1bmNoIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPVxuICAgIFwiUmVxdWVzdCBsYXVuY2ggb25jZSB0ZXN0aW5nIGlzIGRvbmUg4oCUIFNlbmRseSByZXZpZXdzIHRoZSBjYW1wYWlnbiBkZXRhaWxzLCB0aGVuIHNlbmRzIHRoZSBsYXVuY2ggdG8gdGhlIGNhcnJpZXIgbmV0d29ya1wiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHJjcyBhZ2VudHMgcmVxdWVzdC1sYXVuY2ggM2Y2YTFjOWUtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIC0tdGVzdC11cmwgaHR0cHM6Ly9hY21lLmNvbS9yY3MtdGVzdC1yZWNvcmRpbmcubXA0XCIsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHJjcyBhZ2VudHMgcmVxdWVzdC1sYXVuY2ggM2Y2YTFjOWUtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIC0tdGVzdC11cmwgaHR0cHM6Ly9hY21lLmNvbS9yY3MtdGVzdC5wbmcgLS10ZXN0aW5nLWluZm8gXCJUZXN0ZWQgb24gdHdvIFBpeGVsIGRldmljZXNcIiAtLWpzb24nLFxuICBdO1xuXG4gIHN0YXRpYyBhcmdzID0ge1xuICAgIGlkOiBBcmdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJBZ2VudCBJRFwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gIH07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgICBcInRlc3QtdXJsXCI6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJQdWJsaWMgaHR0cHM6Ly8gVVJMIG9mIGEgc2NyZWVuIHJlY29yZGluZyBvciBzY3JlZW5zaG90cyBvZiB0aGUgYWdlbnQgb24gYSB0ZXN0IGRldmljZSAoc3RvcmVkIG9uIHRoZSBhZ2VudCBiZWZvcmUgdGhlIHJlcXVlc3QpXCIsXG4gICAgfSksXG4gICAgXCJ0ZXN0aW5nLWluZm9cIjogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFueXRoaW5nIGVsc2UgcmV2aWV3ZXJzIHNob3VsZCBrbm93IGFib3V0IHRlc3RpbmdcIixcbiAgICB9KSxcbiAgICBcImlkZW1wb3RlbmN5LWtleVwiOiBpZGVtcG90ZW5jeUtleUZsYWcsXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYXJncywgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoUmNzQWdlbnRzUmVxdWVzdExhdW5jaCk7XG5cbiAgICBjb25zdCBib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGlmIChmbGFnc1tcInRlc3QtdXJsXCJdICE9PSB1bmRlZmluZWQpIGJvZHkudGVzdFVybCA9IGZsYWdzW1widGVzdC11cmxcIl07XG4gICAgaWYgKGZsYWdzW1widGVzdGluZy1pbmZvXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkudGVzdGluZ0FkZGl0aW9uYWxJbmZvcm1hdGlvbiA9IGZsYWdzW1widGVzdGluZy1pbmZvXCJdO1xuICAgIH1cblxuICAgIGNvbnN0IGxhdW5jaFNwaW5uZXIgPSBzcGlubmVyKFwiUmVxdWVzdGluZyBsYXVuY2guLi5cIik7XG4gICAgaWYgKCFpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGxhdW5jaFNwaW5uZXIuc3RhcnQoKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2U6IFJlcXVlc3RMYXVuY2hSZXNwb25zZTtcbiAgICB0cnkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnQucG9zdDxSZXF1ZXN0TGF1bmNoUmVzcG9uc2U+KFxuICAgICAgICBgL2FwaS92MS9yY3MvYWdlbnRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3MuaWQpfS9yZXF1ZXN0LWxhdW5jaGAsXG4gICAgICAgIGJvZHksXG4gICAgICAgIHRydWUsXG4gICAgICAgIHsgaWRlbXBvdGVuY3lLZXk6IGZsYWdzW1wiaWRlbXBvdGVuY3kta2V5XCJdIH0sXG4gICAgICApO1xuICAgICAgbGF1bmNoU3Bpbm5lci5zdG9wKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsYXVuY2hTcGlubmVyLnN0b3AoKTtcbiAgICAgIGlmIChyZXBvcnRSY3NFcnJvcihlcnIpKSB0aGlzLmV4aXQoMSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWdlbnQgPSByZXNwb25zZS5hZ2VudDtcbiAgICBjb25zdCBzdGFnZSA9IHJlc3BvbnNlLnN0YWdlID8/IGFnZW50LmN1c3RvbWVyU3RhZ2U7XG4gICAgc3VjY2VzcyhgTGF1bmNoIHJlcXVlc3RlZDogJHthZ2VudC5kaXNwbGF5TmFtZSB8fCBhZ2VudC5pZH1gKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICAgIGtleVZhbHVlKFtcbiAgICAgIFtcIkFnZW50XCIsIGFnZW50LmlkXSxcbiAgICAgIFtcIkJyYW5kXCIsIGFnZW50LmJyYW5kSWQgPz8gY29sb3JzLmRpbShcIuKAlFwiKV0sXG4gICAgICBbXCJTdGFnZVwiLCBmb3JtYXRTdGFnZShzdGFnZSldLFxuICAgICAgW1wiUmV2aWV3XCIsIGFnZW50LnJldmlld1N0YXR1c10sXG4gICAgICAuLi4oYWdlbnQudGVzdGluZz8udGVzdFVybFxuICAgICAgICA/IFtbXCJUZXN0IFVSTFwiLCBTdHJpbmcoYWdlbnQudGVzdGluZy50ZXN0VXJsKV0gYXMgW3N0cmluZywgc3RyaW5nXV1cbiAgICAgICAgOiBbXSksXG4gICAgXSk7XG4gICAgcHJpbnROZXh0U3RlcHMoXG4gICAgICBuZXh0U3RlcEZvcihzdGFnZSwgeyBicmFuZElkOiBhZ2VudC5icmFuZElkLCBhZ2VudElkOiBhZ2VudC5pZCB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
2
+ export default class RcsAgentsSubmit extends AuthenticatedCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ "idempotency-key": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
10
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
11
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
@@ -0,0 +1,56 @@
1
+ import { Args } from "@oclif/core";
2
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
3
+ import { apiClient } from "../../../lib/api-client.js";
4
+ import { json, success, colors, spinner, isJsonMode, keyValue, } from "../../../lib/output.js";
5
+ import { formatStage, idempotencyKeyFlag, nextStepFor, printNextSteps, reportRcsError, } from "../../../lib/rcs-registration.js";
6
+ export default class RcsAgentsSubmit extends AuthenticatedCommand {
7
+ static description = "Submit the brand and agent for review (Sendly checks them, then sends them on to the carrier network)";
8
+ static examples = [
9
+ "<%= config.bin %> rcs agents submit 3f6a1c9e-0000-0000-0000-000000000000",
10
+ "<%= config.bin %> rcs agents submit 3f6a1c9e-0000-0000-0000-000000000000 --idempotency-key acme-rcs-submit-1 --json",
11
+ ];
12
+ static args = {
13
+ id: Args.string({
14
+ description: "Agent ID",
15
+ required: true,
16
+ }),
17
+ };
18
+ static flags = {
19
+ ...AuthenticatedCommand.baseFlags,
20
+ "idempotency-key": idempotencyKeyFlag,
21
+ };
22
+ async run() {
23
+ const { args, flags } = await this.parse(RcsAgentsSubmit);
24
+ const submitSpinner = spinner("Submitting for review...");
25
+ if (!isJsonMode()) {
26
+ submitSpinner.start();
27
+ }
28
+ let response;
29
+ try {
30
+ response = await apiClient.post(`/api/v1/rcs/agents/${encodeURIComponent(args.id)}/submit`, {}, true, { idempotencyKey: flags["idempotency-key"] });
31
+ submitSpinner.stop();
32
+ }
33
+ catch (err) {
34
+ submitSpinner.stop();
35
+ if (reportRcsError(err))
36
+ this.exit(1);
37
+ throw err;
38
+ }
39
+ if (isJsonMode()) {
40
+ json(response);
41
+ return;
42
+ }
43
+ const agent = response.agent;
44
+ const stage = response.stage ?? agent.customerStage;
45
+ success(`Submitted for review: ${agent.displayName || agent.id}`);
46
+ console.log();
47
+ keyValue([
48
+ ["Agent", agent.id],
49
+ ["Brand", agent.brandId ?? colors.dim("—")],
50
+ ["Stage", formatStage(stage)],
51
+ ["Review", agent.reviewStatus],
52
+ ]);
53
+ printNextSteps(nextStepFor(stage, { brandId: agent.brandId, agentId: agent.id }));
54
+ }
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3Jjcy9hZ2VudHMvc3VibWl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxJQUFJLEVBQ0osT0FBTyxFQUNQLE1BQU0sRUFDTixPQUFPLEVBQ1AsVUFBVSxFQUNWLFFBQVEsR0FDVCxNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxjQUFjLEVBQ2QsY0FBYyxHQUdmLE1BQU0sa0NBQWtDLENBQUM7QUFPMUMsTUFBTSxDQUFDLE9BQU8sT0FBTyxlQUFnQixTQUFRLG9CQUFvQjtJQUMvRCxNQUFNLENBQUMsV0FBVyxHQUNoQix1R0FBdUcsQ0FBQztJQUUxRyxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLDBFQUEwRTtRQUMxRSxxSEFBcUg7S0FDdEgsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNkLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztLQUNILENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTO1FBQ2pDLGlCQUFpQixFQUFFLGtCQUFrQjtLQUN0QyxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUxRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNsQixhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsQ0FBQztRQUVELElBQUksUUFBNkIsQ0FBQztRQUNsQyxJQUFJLENBQUM7WUFDSCxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUM3QixzQkFBc0Isa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQzFELEVBQUUsRUFDRixJQUFJLEVBQ0osRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FDN0MsQ0FBQztZQUNGLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQixJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUM7UUFFRCxJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2YsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzdCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUNwRCxPQUFPLENBQUMseUJBQXlCLEtBQUssQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsUUFBUSxDQUFDO1lBQ1AsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0MsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUM7U0FDL0IsQ0FBQyxDQUFDO1FBQ0gsY0FBYyxDQUNaLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQ2xFLENBQUM7SUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQge1xuICBqc29uLFxuICBzdWNjZXNzLFxuICBjb2xvcnMsXG4gIHNwaW5uZXIsXG4gIGlzSnNvbk1vZGUsXG4gIGtleVZhbHVlLFxufSBmcm9tIFwiLi4vLi4vLi4vbGliL291dHB1dC5qc1wiO1xuaW1wb3J0IHtcbiAgZm9ybWF0U3RhZ2UsXG4gIGlkZW1wb3RlbmN5S2V5RmxhZyxcbiAgbmV4dFN0ZXBGb3IsXG4gIHByaW50TmV4dFN0ZXBzLFxuICByZXBvcnRSY3NFcnJvcixcbiAgdHlwZSBDdXN0b21lclN0YWdlLFxuICB0eXBlIFB1YmxpY1Jjc0FnZW50LFxufSBmcm9tIFwiLi4vLi4vLi4vbGliL3Jjcy1yZWdpc3RyYXRpb24uanNcIjtcblxuaW50ZXJmYWNlIFN1Ym1pdEFnZW50UmVzcG9uc2Uge1xuICBhZ2VudDogUHVibGljUmNzQWdlbnQ7XG4gIHN0YWdlOiBDdXN0b21lclN0YWdlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSY3NBZ2VudHNTdWJtaXQgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9XG4gICAgXCJTdWJtaXQgdGhlIGJyYW5kIGFuZCBhZ2VudCBmb3IgcmV2aWV3IChTZW5kbHkgY2hlY2tzIHRoZW0sIHRoZW4gc2VuZHMgdGhlbSBvbiB0byB0aGUgY2FycmllciBuZXR3b3JrKVwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHJjcyBhZ2VudHMgc3VibWl0IDNmNmExYzllLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gcmNzIGFnZW50cyBzdWJtaXQgM2Y2YTFjOWUtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIC0taWRlbXBvdGVuY3kta2V5IGFjbWUtcmNzLXN1Ym1pdC0xIC0tanNvblwiLFxuICBdO1xuXG4gIHN0YXRpYyBhcmdzID0ge1xuICAgIGlkOiBBcmdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJBZ2VudCBJRFwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gIH07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgICBcImlkZW1wb3RlbmN5LWtleVwiOiBpZGVtcG90ZW5jeUtleUZsYWcsXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYXJncywgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoUmNzQWdlbnRzU3VibWl0KTtcblxuICAgIGNvbnN0IHN1Ym1pdFNwaW5uZXIgPSBzcGlubmVyKFwiU3VibWl0dGluZyBmb3IgcmV2aWV3Li4uXCIpO1xuICAgIGlmICghaXNKc29uTW9kZSgpKSB7XG4gICAgICBzdWJtaXRTcGlubmVyLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3BvbnNlOiBTdWJtaXRBZ2VudFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5wb3N0PFN1Ym1pdEFnZW50UmVzcG9uc2U+KFxuICAgICAgICBgL2FwaS92MS9yY3MvYWdlbnRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3MuaWQpfS9zdWJtaXRgLFxuICAgICAgICB7fSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgeyBpZGVtcG90ZW5jeUtleTogZmxhZ3NbXCJpZGVtcG90ZW5jeS1rZXlcIl0gfSxcbiAgICAgICk7XG4gICAgICBzdWJtaXRTcGlubmVyLnN0b3AoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHN1Ym1pdFNwaW5uZXIuc3RvcCgpO1xuICAgICAgaWYgKHJlcG9ydFJjc0Vycm9yKGVycikpIHRoaXMuZXhpdCgxKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICBqc29uKHJlc3BvbnNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhZ2VudCA9IHJlc3BvbnNlLmFnZW50O1xuICAgIGNvbnN0IHN0YWdlID0gcmVzcG9uc2Uuc3RhZ2UgPz8gYWdlbnQuY3VzdG9tZXJTdGFnZTtcbiAgICBzdWNjZXNzKGBTdWJtaXR0ZWQgZm9yIHJldmlldzogJHthZ2VudC5kaXNwbGF5TmFtZSB8fCBhZ2VudC5pZH1gKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICAgIGtleVZhbHVlKFtcbiAgICAgIFtcIkFnZW50XCIsIGFnZW50LmlkXSxcbiAgICAgIFtcIkJyYW5kXCIsIGFnZW50LmJyYW5kSWQgPz8gY29sb3JzLmRpbShcIuKAlFwiKV0sXG4gICAgICBbXCJTdGFnZVwiLCBmb3JtYXRTdGFnZShzdGFnZSldLFxuICAgICAgW1wiUmV2aWV3XCIsIGFnZW50LnJldmlld1N0YXR1c10sXG4gICAgXSk7XG4gICAgcHJpbnROZXh0U3RlcHMoXG4gICAgICBuZXh0U3RlcEZvcihzdGFnZSwgeyBicmFuZElkOiBhZ2VudC5icmFuZElkLCBhZ2VudElkOiBhZ2VudC5pZCB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=