@sendbird/cli 0.0.0-stage → 0.3.0-alpha.1

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 (182) hide show
  1. package/.claude-plugin/plugin.json +11 -0
  2. package/.codex-plugin/plugin.json +33 -0
  3. package/LICENSE +13 -0
  4. package/NOTICE.md +1105 -0
  5. package/PROVENANCE.md +15 -0
  6. package/README.md +457 -2
  7. package/dist/acl.d.ts +2 -0
  8. package/dist/acl.js +12 -0
  9. package/dist/acl.js.map +1 -0
  10. package/dist/billing-plan.d.ts +68 -0
  11. package/dist/billing-plan.js +235 -0
  12. package/dist/billing-plan.js.map +1 -0
  13. package/dist/browser.d.ts +1 -0
  14. package/dist/browser.js +20 -0
  15. package/dist/browser.js.map +1 -0
  16. package/dist/calls-catalog.d.ts +79 -0
  17. package/dist/calls-catalog.js +322 -0
  18. package/dist/calls-catalog.js.map +1 -0
  19. package/dist/calls-credits.d.ts +31 -0
  20. package/dist/calls-credits.js +224 -0
  21. package/dist/calls-credits.js.map +1 -0
  22. package/dist/calls-trial.d.ts +45 -0
  23. package/dist/calls-trial.js +77 -0
  24. package/dist/calls-trial.js.map +1 -0
  25. package/dist/calls.d.ts +10 -0
  26. package/dist/calls.js +470 -0
  27. package/dist/calls.js.map +1 -0
  28. package/dist/catalog.d.ts +67 -0
  29. package/dist/catalog.js +784 -0
  30. package/dist/catalog.js.map +1 -0
  31. package/dist/cli.d.ts +6 -0
  32. package/dist/cli.js +502 -0
  33. package/dist/cli.js.map +1 -0
  34. package/dist/core.d.ts +86 -0
  35. package/dist/core.js +531 -0
  36. package/dist/core.js.map +1 -0
  37. package/dist/diagnostics.d.ts +206 -0
  38. package/dist/diagnostics.js +664 -0
  39. package/dist/diagnostics.js.map +1 -0
  40. package/dist/discovery.d.ts +700 -0
  41. package/dist/discovery.js +838 -0
  42. package/dist/discovery.js.map +1 -0
  43. package/dist/docs.d.ts +31 -0
  44. package/dist/docs.js +137 -0
  45. package/dist/docs.js.map +1 -0
  46. package/dist/features.d.ts +131 -0
  47. package/dist/features.js +227 -0
  48. package/dist/features.js.map +1 -0
  49. package/dist/generated-api.d.ts +116 -0
  50. package/dist/generated-api.js +118 -0
  51. package/dist/generated-api.js.map +1 -0
  52. package/dist/human-format.d.ts +40 -0
  53. package/dist/human-format.js +205 -0
  54. package/dist/human-format.js.map +1 -0
  55. package/dist/human-list.d.ts +2 -0
  56. package/dist/human-list.js +368 -0
  57. package/dist/human-list.js.map +1 -0
  58. package/dist/human-output.d.ts +10 -0
  59. package/dist/human-output.js +1351 -0
  60. package/dist/human-output.js.map +1 -0
  61. package/dist/human-pro.d.ts +3 -0
  62. package/dist/human-pro.js +201 -0
  63. package/dist/human-pro.js.map +1 -0
  64. package/dist/human-progress.d.ts +5 -0
  65. package/dist/human-progress.js +49 -0
  66. package/dist/human-progress.js.map +1 -0
  67. package/dist/local.d.ts +42 -0
  68. package/dist/local.js +707 -0
  69. package/dist/local.js.map +1 -0
  70. package/dist/oauth-callback.d.ts +3 -0
  71. package/dist/oauth-callback.js +66 -0
  72. package/dist/oauth-callback.js.map +1 -0
  73. package/dist/oauth-lock.d.ts +6 -0
  74. package/dist/oauth-lock.js +212 -0
  75. package/dist/oauth-lock.js.map +1 -0
  76. package/dist/oauth.d.ts +32 -0
  77. package/dist/oauth.js +493 -0
  78. package/dist/oauth.js.map +1 -0
  79. package/dist/presentation.d.ts +208 -0
  80. package/dist/presentation.js +156 -0
  81. package/dist/presentation.js.map +1 -0
  82. package/dist/pro-api-catalog.d.ts +24 -0
  83. package/dist/pro-api-catalog.js +619 -0
  84. package/dist/pro-api-catalog.js.map +1 -0
  85. package/dist/pro-api.d.ts +10 -0
  86. package/dist/pro-api.js +338 -0
  87. package/dist/pro-api.js.map +1 -0
  88. package/dist/project.d.ts +34 -0
  89. package/dist/project.js +62 -0
  90. package/dist/project.js.map +1 -0
  91. package/dist/recovery.d.ts +41 -0
  92. package/dist/recovery.js +417 -0
  93. package/dist/recovery.js.map +1 -0
  94. package/dist/runner.d.ts +47 -0
  95. package/dist/runner.js +603 -0
  96. package/dist/runner.js.map +1 -0
  97. package/dist/sdk-catalog.d.ts +69 -0
  98. package/dist/sdk-catalog.js +527 -0
  99. package/dist/sdk-catalog.js.map +1 -0
  100. package/dist/sdk-config.d.ts +19 -0
  101. package/dist/sdk-config.js +85 -0
  102. package/dist/sdk-config.js.map +1 -0
  103. package/dist/sdk-dto.d.ts +244 -0
  104. package/dist/sdk-dto.js +98 -0
  105. package/dist/sdk-dto.js.map +1 -0
  106. package/dist/sdk-limits.d.ts +2 -0
  107. package/dist/sdk-limits.js +3 -0
  108. package/dist/sdk-limits.js.map +1 -0
  109. package/dist/sdk-node-file-reader.d.ts +6 -0
  110. package/dist/sdk-node-file-reader.js +38 -0
  111. package/dist/sdk-node-file-reader.js.map +1 -0
  112. package/dist/sdk-pro-catalog.d.ts +22 -0
  113. package/dist/sdk-pro-catalog.js +234 -0
  114. package/dist/sdk-pro-catalog.js.map +1 -0
  115. package/dist/sdk-pro-runtime.d.ts +31 -0
  116. package/dist/sdk-pro-runtime.js +293 -0
  117. package/dist/sdk-pro-runtime.js.map +1 -0
  118. package/dist/sdk-query.d.ts +10 -0
  119. package/dist/sdk-query.js +29 -0
  120. package/dist/sdk-query.js.map +1 -0
  121. package/dist/sdk-runtime.d.ts +15 -0
  122. package/dist/sdk-runtime.js +685 -0
  123. package/dist/sdk-runtime.js.map +1 -0
  124. package/dist/sdk-worker.d.ts +1 -0
  125. package/dist/sdk-worker.js +26 -0
  126. package/dist/sdk-worker.js.map +1 -0
  127. package/dist/sdk.d.ts +29 -0
  128. package/dist/sdk.js +346 -0
  129. package/dist/sdk.js.map +1 -0
  130. package/dist/search-engine.d.ts +17 -0
  131. package/dist/search-engine.js +54 -0
  132. package/dist/search-engine.js.map +1 -0
  133. package/dist/search-intents.d.ts +2 -0
  134. package/dist/search-intents.js +98 -0
  135. package/dist/search-intents.js.map +1 -0
  136. package/dist/search.d.ts +7 -0
  137. package/dist/search.js +58 -0
  138. package/dist/search.js.map +1 -0
  139. package/dist/secret-output.d.ts +2 -0
  140. package/dist/secret-output.js +108 -0
  141. package/dist/secret-output.js.map +1 -0
  142. package/dist/shell.d.ts +3 -0
  143. package/dist/shell.js +14 -0
  144. package/dist/shell.js.map +1 -0
  145. package/dist/skills.d.ts +210 -0
  146. package/dist/skills.js +374 -0
  147. package/dist/skills.js.map +1 -0
  148. package/dist/value-semantics.d.ts +70 -0
  149. package/dist/value-semantics.js +173 -0
  150. package/dist/value-semantics.js.map +1 -0
  151. package/dist/version.d.ts +1 -0
  152. package/dist/version.js +3 -0
  153. package/dist/version.js.map +1 -0
  154. package/dist/windows.d.ts +4 -0
  155. package/dist/windows.js +136 -0
  156. package/dist/windows.js.map +1 -0
  157. package/dist/workflows.d.ts +228 -0
  158. package/dist/workflows.js +1207 -0
  159. package/dist/workflows.js.map +1 -0
  160. package/package.json +86 -4
  161. package/plugin.json +22 -0
  162. package/references/agent-guide.json +196 -0
  163. package/references/commands.md +247 -0
  164. package/references/dashboard-inventory.json +14796 -0
  165. package/references/docs-index.json +2709 -0
  166. package/references/sdk-commands.json +15065 -0
  167. package/references/workflows.json +1246 -0
  168. package/skills/sendbird/SKILL.md +96 -0
  169. package/skills/sendbird/agents/openai.yaml +4 -0
  170. package/skills/sendbird/references/build-chat-app.md +49 -0
  171. package/skills/sendbird/references/client-guide.md +34 -0
  172. package/skills/sendbird/references/client-plugin-bridge.md +77 -0
  173. package/skills/sendbird/references/client-plugin-install.md +39 -0
  174. package/skills/sendbird/references/operational-checks.md +35 -0
  175. package/skills/sendbird/references/pro-capabilities.md +52 -0
  176. package/skills/sendbird/scripts/client-guide.mjs +283 -0
  177. package/skills/sendbird/scripts/client-plugin-bridge.mjs +703 -0
  178. package/skills/sendbird-setup/SKILL.md +18 -0
  179. package/skills/sendbird-setup/agents/openai.yaml +4 -0
  180. package/skills/sendbird-setup/references/onboarding.md +73 -0
  181. package/skills/sendbird-setup/scripts/install-cli.mjs +447 -0
  182. package/skills/sendbird-setup/scripts/npm-run.mjs +34 -0
package/dist/runner.js ADDED
@@ -0,0 +1,603 @@
1
+ import { followCallsTrial } from "./calls-trial.js";
2
+ import { beforeCallsCredits, callsCreditsResult } from "./calls-credits.js";
3
+ import { validateProRequest, beforePro, proSecrets, proResult, } from "./pro-api.js";
4
+ import { validateSecretOutput } from "./secret-output.js";
5
+ import { featureBody, beforeFeatures, featuresResult } from "./features.js";
6
+ import { recoverySnapshot, readbackPlan } from "./recovery.js";
7
+ import { z } from "zod";
8
+ import { prepareCalls, callsPreview, callsSecrets, beforeCalls, callsReadback, callsApplicationState, callsResponse, } from "./calls.js";
9
+ import { readFileSync, writeFileSync, closeSync, unlinkSync } from "node:fs";
10
+ import { definitions, verifySchema } from "./catalog.js";
11
+ import { CliError, profile, origins, getSecret, request, parse, redact, secretValues, encodeSegment, reservePrivateOutput, } from "./core.js";
12
+ import { isOAuthSecret, oauthAccessToken } from "./oauth.js";
13
+ import { billingPlan } from "./billing-plan.js";
14
+ import { readProject } from "./project.js";
15
+ export function transport(opts) {
16
+ const p = profile(opts.profile);
17
+ const session = getSecret(p.name);
18
+ if (!session)
19
+ throw new CliError("E_AUTH", "Login required: sendbird auth login", 4);
20
+ if (!isOAuthSecret(session))
21
+ throw new CliError("E_AUTH", "Legacy Dashboard sessions are no longer supported; log in with OAuth", 4);
22
+ return {
23
+ origin: origins[p.env],
24
+ env: p.env,
25
+ bearer: () => oauthAccessToken(p.name, undefined, p.env),
26
+ };
27
+ }
28
+ export function readBody(file) {
29
+ try {
30
+ return parse(z.record(z.string(), z.unknown()), JSON.parse(readFileSync(file === "-" ? 0 : file, "utf8")));
31
+ }
32
+ catch (e) {
33
+ if (e instanceof CliError)
34
+ throw e;
35
+ throw new CliError("E_INPUT", "Cannot read JSON body file", 2);
36
+ }
37
+ }
38
+ export function prepare(d, input, opts) {
39
+ const params = d.params ? parse(d.params, input.params ?? {}) : {};
40
+ let query = d.query ? parse(d.query, input.query ?? {}) : undefined;
41
+ let body = d.body
42
+ ? parse(d.body, {
43
+ ...(opts.bodyFile ? readBody(opts.bodyFile) : {}),
44
+ ...input.body,
45
+ })
46
+ : undefined;
47
+ if (body && Object.keys(body).length === 0 && d.name.endsWith(" update"))
48
+ throw new CliError("E_VALIDATION", "Supply at least one field to update", 2);
49
+ if (d.scope === "app" && !opts.appId)
50
+ throw new CliError("E_CONTEXT", "Select an application or pass --app-id", 2);
51
+ if ((d.scope === "org" || d.requiresOrg) && !opts.orgId)
52
+ throw new CliError("E_CONTEXT", "Select an organization or pass --org-id", 2);
53
+ if (d.name === "billing plan list")
54
+ query = { organization_uid: opts.orgId };
55
+ if (d.name === "usage chat org" && query) {
56
+ if (String(query.start_month) > String(query.end_month))
57
+ throw new CliError("E_VALIDATION", "Start month must not exceed end month", 2);
58
+ }
59
+ if ((d.name === "usage calls trend" || d.name === "usage calls app-trend") &&
60
+ query) {
61
+ const resolution = params.resolution;
62
+ const pattern = resolution === "daily"
63
+ ? /^\d{4}-(0[1-9]|1[0-2])-([0-2]\d|3[01])$/
64
+ : /^\d{4}-(0[1-9]|1[0-2])$/;
65
+ for (const field of ["start", "end"]) {
66
+ const value = String(query[field]);
67
+ const parsedDate = resolution === "daily" ? new Date(`${value}T00:00:00Z`) : undefined;
68
+ if (!pattern.test(value) ||
69
+ (parsedDate &&
70
+ (Number.isNaN(parsedDate.getTime()) ||
71
+ parsedDate.toISOString().slice(0, 10) !== value)))
72
+ throw new CliError("E_VALIDATION", `--${field} must be a valid ${resolution === "daily" ? "YYYY-MM-DD" : "YYYY-MM"} date`, 2);
73
+ }
74
+ if (String(query.start) > String(query.end))
75
+ throw new CliError("E_VALIDATION", "Start date must not exceed end date", 2);
76
+ }
77
+ if (d.name === "app create") {
78
+ const region = body?.region ?? opts.region;
79
+ if (!region)
80
+ throw new CliError("E_REGION", "Select a Chat region with org region use or pass --region", 2);
81
+ body = { ...body, region, organization_uid: opts.orgId };
82
+ }
83
+ if (d.name === "support ticket submit")
84
+ body = { ...body, App_ID__c: opts.appId };
85
+ if (d.name === "chat channel list" || d.name === "chat channel search") {
86
+ if (params.type === "open") {
87
+ if (query?.show_empty !== undefined)
88
+ throw new CliError("E_VALIDATION", "--show-empty applies only to Group and Supergroup channels", 2);
89
+ }
90
+ else {
91
+ if (query?.url_contains !== undefined)
92
+ throw new CliError("E_VALIDATION", "Group and Supergroup do not support --url-contains; use --channel-urls for exact URLs", 2);
93
+ // Gate's group and supergroup list routes both need super_mode to keep
94
+ // the two channel types distinct. The default would return both.
95
+ query = {
96
+ ...query,
97
+ super_mode: params.type === "supergroup" ? "super" : "nonsuper",
98
+ };
99
+ }
100
+ }
101
+ if (d.name === "chat channel create") {
102
+ if (params.type === "open") {
103
+ if (body?.channel_url)
104
+ parse(z.string().regex(/^[a-z\d_]+$/i), body.channel_url);
105
+ for (const field of ["user_ids", "is_distinct", "is_public"])
106
+ if (body?.[field] !== undefined)
107
+ throw new CliError("E_VALIDATION", `${field} is not supported for Open channel creation`, 2);
108
+ }
109
+ else {
110
+ if (params.type === "supergroup" && body?.is_distinct === true)
111
+ throw new CliError("E_VALIDATION", "Supergroup channels cannot be distinct", 2);
112
+ for (const [key, max] of [
113
+ ["name", 191],
114
+ ["custom_type", 128],
115
+ ]) {
116
+ if (typeof body?.[key] === "string" &&
117
+ body[key].trim().length > max)
118
+ throw new CliError("E_VALIDATION", `${key} exceeds ${max} characters`, 2);
119
+ }
120
+ if (body?.channel_url)
121
+ parse(z
122
+ .string()
123
+ .trim()
124
+ .min(4)
125
+ .max(100)
126
+ .regex(/^[0-9a-zA-Z_-]+$/), body.channel_url);
127
+ if (!Array.isArray(body?.user_ids))
128
+ throw new CliError("E_VALIDATION", "Group/Supergroup creation requires --user-ids JSON array", 2);
129
+ body = { ...body, is_super: params.type === "supergroup" };
130
+ }
131
+ }
132
+ const kind = {
133
+ open: "open_channels",
134
+ group: "group_channels",
135
+ supergroup: "supergroup_channels",
136
+ }[String(params.type)];
137
+ const values = {
138
+ ...params,
139
+ appId: opts.appId,
140
+ orgId: opts.orgId,
141
+ kind,
142
+ };
143
+ const path = d.path.replace(/\{(\w+)\}/g, (_, key) => {
144
+ const value = values[key];
145
+ if (typeof value !== "string" || !value)
146
+ throw new CliError("E_INPUT", `Missing ${key}`, 2);
147
+ return encodeSegment(value);
148
+ });
149
+ if (d.name === "app feature set" && !opts.orgId)
150
+ throw new CliError("E_CONTEXT", "Select an organization before changing app features", 2);
151
+ body = featureBody(d, body);
152
+ if (d.defaults)
153
+ body = { ...body, ...d.defaults };
154
+ return {
155
+ method: d.method,
156
+ path,
157
+ query,
158
+ body,
159
+ multipart: d.multipart,
160
+ appId: d.scope === "app" ? opts.appId : undefined,
161
+ allowEmpty: d.response.safeParse(null).success,
162
+ };
163
+ }
164
+ export function context(opts) {
165
+ const linked = opts.project ? readProject() : undefined;
166
+ const p = profile(opts.profile);
167
+ const orgId = opts.orgId ?? linked?.org_id ?? p.orgId;
168
+ const sameOrg = !orgId || orgId === p.orgId;
169
+ return {
170
+ ...opts,
171
+ profile: p.name,
172
+ orgId,
173
+ region: opts.region ?? linked?.region ?? (sameOrg ? p.region : undefined),
174
+ appId: opts.appId ??
175
+ linked?.app_id ??
176
+ (orgId && orgId !== p.orgId ? undefined : p.appId),
177
+ };
178
+ }
179
+ export async function verify(t) {
180
+ const raw = await request(t, {
181
+ method: "GET",
182
+ path: "/dashboard/auth/verify2/",
183
+ });
184
+ const parsed = verifySchema.safeParse(raw);
185
+ if (!parsed.success)
186
+ throw new CliError("E_SCHEMA", "Identity response has changed", 8);
187
+ return parsed.data;
188
+ }
189
+ function soleOrganizationUid(who) {
190
+ if (typeof who.organization?.uid === "string")
191
+ return who.organization.uid;
192
+ const organizations = who.organizations ?? [];
193
+ return organizations.length === 1 && typeof organizations[0]?.uid === "string"
194
+ ? organizations[0].uid
195
+ : undefined;
196
+ }
197
+ export async function checkAppOrg(t, appId, orgId) {
198
+ const app = (await request(t, {
199
+ method: "GET",
200
+ path: `/dashboard/applications/${encodeSegment(appId)}/get_detail/`,
201
+ appId,
202
+ }));
203
+ if (!app || app.app_id !== appId)
204
+ throw new CliError("E_SCHEMA", "Missing application identity", 8);
205
+ const org = app.organization;
206
+ if (orgId) {
207
+ if (org?.uid && org.uid !== orgId)
208
+ throw new CliError("E_CONTEXT", "Application does not belong to selected organization", 5);
209
+ if (!org?.uid) {
210
+ // Current Gate get_detail returns numeric organization_id but no UID.
211
+ // Its application list is scoped to the signed-in user's sole active org.
212
+ const who = await verify(t);
213
+ if (soleOrganizationUid(who) !== orgId)
214
+ throw new CliError("E_CONTEXT", "Selected organization is not the authenticated organization", 5);
215
+ const page = (await request(t, {
216
+ method: "GET",
217
+ path: "/dashboard/applications/",
218
+ query: { limit: 20, offset: 0, app_name_or_app_id: appId },
219
+ }));
220
+ if (!page.results?.some((row) => row.app_id === appId))
221
+ throw new CliError("E_CONTEXT", "Application is absent from the selected organization's list", 5);
222
+ }
223
+ }
224
+ return app;
225
+ }
226
+ function assertChannelType(value, channelId, type) {
227
+ if (!value || typeof value !== "object")
228
+ throw new CliError("E_SCHEMA", "Channel detail lacks identity", 8);
229
+ const detail = value;
230
+ if (detail.channel_url !== channelId || typeof detail.is_super !== "boolean")
231
+ throw new CliError("E_SCHEMA", "Channel detail lacks type binding", 8);
232
+ if (detail.is_super !== (type === "supergroup"))
233
+ throw new CliError("E_CHANNEL_TYPE", `Channel is ${detail.is_super ? "supergroup" : "group"}; use the matching --type`, 2);
234
+ }
235
+ async function verifyChannelType(t, appId, channelId, type) {
236
+ const kind = type === "supergroup" ? "supergroup_channels" : "group_channels";
237
+ const detail = await request(t, {
238
+ method: "GET",
239
+ path: `/platform/v3/${kind}/${encodeSegment(channelId)}`,
240
+ appId,
241
+ });
242
+ assertChannelType(detail, channelId, type);
243
+ }
244
+ export async function execute(d, input, opts, injected) {
245
+ const resolved = injected ? opts : context(opts);
246
+ if (opts.bodyFile && !d.body)
247
+ throw new CliError("E_INPUT", "This command does not accept a request body", 2);
248
+ const mergedBody = opts.bodyFile
249
+ ? { ...readBody(opts.bodyFile), ...input.body }
250
+ : input.body;
251
+ const r = prepareCalls(d, prepare(d, { ...input, body: mergedBody }, { ...resolved, bodyFile: undefined }), resolved);
252
+ const callsParent = d.name === "calls activate" ||
253
+ (d.name === "app create" && r.body?.is_calls_enabled === true);
254
+ if (opts.claimTrial === true && !callsParent)
255
+ throw new CliError("E_INPUT", "--claim-trial requires calls activate or app create --is-calls-enabled true", 2);
256
+ const followTrial = callsParent &&
257
+ (opts.claimTrial === true ||
258
+ (opts.claimTrial !== false && opts.confirmTrial !== undefined));
259
+ validateProRequest(d, r, resolved.orgId, opts.secretOutput, input.params);
260
+ const secretDestination = opts.secretOutput
261
+ ? validateSecretOutput(opts.secretOutput)
262
+ : undefined;
263
+ const secrets = [
264
+ ...secretValues(mergedBody),
265
+ ...secretValues(r.body),
266
+ ...callsSecrets(d, mergedBody),
267
+ ...proSecrets(d, mergedBody),
268
+ ];
269
+ if (opts.dryRun) {
270
+ if ([
271
+ "billing plan check",
272
+ "billing plan change",
273
+ "billing plan verify",
274
+ ].includes(d.name))
275
+ return {
276
+ dry_run: true,
277
+ mode: "dashboard_handoff",
278
+ mutation_sent: false,
279
+ request: { method: "GET", path: r.path, query: { product: "CHAT" } },
280
+ planned_reads: [
281
+ "/dashboard/auth/verify2/",
282
+ r.path,
283
+ ...(d.name === "billing plan verify"
284
+ ? []
285
+ : [
286
+ `/dashboard_api/organizations/${encodeSegment(resolved.orgId)}/`,
287
+ "/dashboard_api/billing/plans/",
288
+ "Organization card status only for an otherwise eligible CARD candidate",
289
+ ]),
290
+ ],
291
+ requested_plan: r.query?.plan,
292
+ note: "Offline preview only; no eligibility, price, effective date or subscription change is confirmed.",
293
+ };
294
+ return {
295
+ dry_run: true,
296
+ request: redact(callsPreview(r), secrets),
297
+ ...(opts.claimTrial === true
298
+ ? {
299
+ calls_trial: {
300
+ status: "preview",
301
+ note: "After successful activation and eligibility checks, request the one-time free trial. No reads, prompts or writes were performed.",
302
+ request: {
303
+ method: "POST",
304
+ path: "/dashboard_api/billing/vouchers/start_free_trial",
305
+ body: {},
306
+ },
307
+ },
308
+ }
309
+ : {}),
310
+ ...(d.name === "calls credits claim-trial"
311
+ ? {
312
+ note: "Preview only. No eligibility check or free credit claim was sent. Organization UID, OWNER, self-service status and complete voucher-history count are checked live; the server decides grant terms.",
313
+ }
314
+ : {}),
315
+ ...(d.name === "app feature set"
316
+ ? {
317
+ note: "Offline preview only. Requires active self-service organization, current subscription, application.settings.all and --yes. Activation may affect usage charges; advanced profanity filter also disables the basic filter. Message Search requires region/pipeline checks; its status GET may reset a failed non-live pipeline. No request sent.",
318
+ }
319
+ : {}),
320
+ };
321
+ }
322
+ if ((d.danger ||
323
+ (d.name === "app create" && r.body?.is_calls_enabled === true)) &&
324
+ !opts.yes)
325
+ throw new CliError("E_CONFIRMATION", "This operation requires --yes; inspect --dry-run first", 2);
326
+ const t = injected ?? transport(resolved);
327
+ if (d.name.startsWith("billing plan ")) {
328
+ // Gate's subscription read ignores any CLI-selected org and resolves the
329
+ // authenticated user's sole organization. A mismatch could show a valid
330
+ // bill for the wrong organization, so fail closed before reading it.
331
+ const identity = await verify(t);
332
+ const authenticatedOrg = soleOrganizationUid(identity);
333
+ if (!authenticatedOrg || authenticatedOrg !== resolved.orgId)
334
+ throw new CliError("E_CONTEXT", "Selected organization does not match the authenticated billing organization", 5);
335
+ if ([
336
+ "billing plan list",
337
+ "billing plan check",
338
+ "billing plan change",
339
+ ].includes(d.name)) {
340
+ // Dashboard exposes the plan picker only with general.all, while the
341
+ // Gate plan-catalog GET currently checks membership but not this ACL.
342
+ const permissions = identity.role?.permissions;
343
+ if (!Array.isArray(permissions) ||
344
+ !permissions.includes("organization.general.all"))
345
+ throw new CliError("E_PERMISSION", "Changing plans requires organization.general.all; the plan catalog is unavailable for this role", 4);
346
+ }
347
+ }
348
+ if ([
349
+ "billing plan check",
350
+ "billing plan change",
351
+ "billing plan verify",
352
+ ].includes(d.name))
353
+ return billingPlan(d.name, r.query ?? {}, resolved.orgId, t, resolved.profile);
354
+ if (resolved.orgId && resolved.appId && d.scope === "app")
355
+ await checkAppOrg(t, resolved.appId, resolved.orgId);
356
+ const channelType = input.params?.type;
357
+ const channelId = input.params?.id;
358
+ if ((d.name.startsWith("chat channel ") ||
359
+ d.name.startsWith("chat moderation channel ")) &&
360
+ d.name !== "chat channel get" &&
361
+ (channelType === "group" || channelType === "supergroup") &&
362
+ typeof channelId === "string" &&
363
+ resolved.appId)
364
+ await verifyChannelType(t, resolved.appId, channelId, channelType);
365
+ await beforePro(d, r, t, resolved.orgId, input.params);
366
+ await beforeCallsCredits(d, t, resolved.orgId);
367
+ await beforeCalls(d, r, t);
368
+ let outputFd;
369
+ let outputComplete = false;
370
+ if (opts.secretOutput) {
371
+ try {
372
+ const currentDestination = validateSecretOutput(opts.secretOutput);
373
+ if (currentDestination !== secretDestination)
374
+ throw new CliError("E_OUTPUT", "Secret output destination changed; no mutation was sent", 2);
375
+ outputFd = reservePrivateOutput(secretDestination);
376
+ }
377
+ catch (error) {
378
+ if (error instanceof CliError)
379
+ throw error;
380
+ throw new CliError("E_OUTPUT", "Cannot create private output file; no mutation was sent", 2);
381
+ }
382
+ }
383
+ let preflightMayMutate = false;
384
+ let mutationStarted = false;
385
+ let responseStatus;
386
+ const markFailure = (error) => {
387
+ const failure = error instanceof CliError
388
+ ? error
389
+ : new CliError("E_INTERNAL", "Operation failed after request processing; inspect state before retrying", 1);
390
+ if (d.method !== "GET") {
391
+ failure.mutationState = !mutationStarted
392
+ ? "not_attempted"
393
+ : responseStatus !== undefined &&
394
+ responseStatus >= 200 &&
395
+ responseStatus < 300
396
+ ? "acknowledged"
397
+ : responseStatus !== undefined &&
398
+ responseStatus >= 400 &&
399
+ responseStatus < 500 &&
400
+ responseStatus !== 408
401
+ ? "rejected"
402
+ : "unknown";
403
+ // Gate may report 400 after a feature write or after creating a trial
404
+ // voucher whose activation then failed. Do not classify either as no-op.
405
+ if ((d.name === "app feature set" ||
406
+ d.name === "calls credits claim-trial") &&
407
+ mutationStarted &&
408
+ (responseStatus === 400 ||
409
+ (preflightMayMutate &&
410
+ !(responseStatus !== undefined &&
411
+ responseStatus >= 200 &&
412
+ responseStatus < 300))))
413
+ failure.mutationState = "unknown";
414
+ failure.recoverySnapshot = recoverySnapshot(d.name, input.params ?? {}, r.body ?? {}, resolved, t.env);
415
+ }
416
+ return failure;
417
+ };
418
+ try {
419
+ await beforeFeatures(d, r, t, resolved.orgId, () => {
420
+ preflightMayMutate = true;
421
+ mutationStarted = true;
422
+ });
423
+ const raw = await request({
424
+ ...t,
425
+ fetch: async (url, init) => {
426
+ mutationStarted = true;
427
+ const response = await (t.fetch ?? fetch)(url, init);
428
+ responseStatus = response.status;
429
+ return response;
430
+ },
431
+ }, r);
432
+ const checked = d.response.safeParse(callsResponse(d, raw));
433
+ if (!checked.success)
434
+ throw new CliError("E_SCHEMA", "Response does not match the command contract; inspect Dashboard before retrying mutations", 8, { command: d.name, paths: checked.error.issues.map((i) => i.path) });
435
+ // A shape-valid token acknowledgement must still belong to the requested
436
+ // user. Check before writing private output or accepting a token rotation.
437
+ if (d.name.startsWith("chat user token ") &&
438
+ checked.data.user_id !== input.params?.id)
439
+ throw new CliError("E_SCHEMA", "Chat user token response does not match the requested user; inspect state before retrying", 8);
440
+ if (d.name === "chat channel get" &&
441
+ (channelType === "group" || channelType === "supergroup") &&
442
+ typeof channelId === "string")
443
+ assertChannelType(checked.data, channelId, channelType);
444
+ if ((d.name === "chat channel list" || d.name === "chat channel search") &&
445
+ (channelType === "group" || channelType === "supergroup")) {
446
+ const channels = checked.data
447
+ .channels;
448
+ if (channels.some((channel) => typeof channel.is_super !== "boolean" ||
449
+ channel.is_super !== (channelType === "supergroup")))
450
+ throw new CliError("E_SCHEMA", "Channel list does not match --type; inspect the app and server filters", 8);
451
+ }
452
+ // Creation acknowledgements can contain a different kind of channel on
453
+ // partially supported backends. Preserve its ID for readback/cleanup, but
454
+ // never report the requested operation as successful or retry the write.
455
+ if (d.name === "chat channel create" && channelType !== "open") {
456
+ const created = checked.data;
457
+ const expected = {
458
+ is_super: channelType === "supergroup",
459
+ ...Object.fromEntries(["is_public", "is_distinct"]
460
+ .filter((k) => r.body?.[k] !== undefined)
461
+ .map((k) => [k, r.body[k]])),
462
+ };
463
+ const mismatches = Object.keys(expected).filter((k) => created[k] !== expected[k]);
464
+ if (mismatches.length)
465
+ throw new CliError("E_SCHEMA", "Created channel does not match the requested type or settings; read the returned channel before retrying", 8, {
466
+ channel_url: created.channel_url,
467
+ expected,
468
+ actual: Object.fromEntries(Object.keys(expected).map((k) => [k, created[k] ?? null])),
469
+ mutation_sent: true,
470
+ });
471
+ }
472
+ let value = checked.data;
473
+ if (d.name === "org list") {
474
+ const v = checked.data;
475
+ value = {
476
+ organizations: v.organizations ?? (v.organization ? [v.organization] : []),
477
+ };
478
+ }
479
+ if (d.name === "app auth-policy get") {
480
+ const v = checked.data;
481
+ if (![0, 1, 2].includes(v.guest_user_policy))
482
+ throw new CliError("E_SCHEMA", "Missing guest_user_policy", 8);
483
+ value = { guest_user_policy: v.guest_user_policy };
484
+ }
485
+ if (d.name === "app list" && resolved.orgId) {
486
+ // The list response intentionally omits organization. Resolve ownership
487
+ // from get_detail instead of treating an absent field as a mismatch.
488
+ const v = checked.data;
489
+ const matches = [];
490
+ let skippedUnavailable = 0;
491
+ let authenticatedOrg;
492
+ for (const row of v.results) {
493
+ let detail;
494
+ try {
495
+ detail = await checkAppOrg(t, String(row.app_id));
496
+ }
497
+ catch (error) {
498
+ if (error instanceof CliError &&
499
+ error.code === "E_NOT_FOUND" &&
500
+ typeof error.details === "object" &&
501
+ error.details !== null &&
502
+ "status" in error.details &&
503
+ error.details.status === 400) {
504
+ skippedUnavailable++;
505
+ continue;
506
+ }
507
+ throw error;
508
+ }
509
+ const org = detail.organization;
510
+ if (org?.uid) {
511
+ if (org.uid === resolved.orgId)
512
+ matches.push(row);
513
+ }
514
+ else {
515
+ authenticatedOrg ??= soleOrganizationUid(await verify(t));
516
+ if (authenticatedOrg !== resolved.orgId)
517
+ throw new CliError("E_CONTEXT", "Selected organization is not the authenticated organization", 5);
518
+ matches.push(row);
519
+ }
520
+ }
521
+ value = {
522
+ ...v,
523
+ results: matches,
524
+ skipped_unavailable_applications: skippedUnavailable,
525
+ filter_note: "Organization filter applies to this page; follow next/offset for remaining pages. Ownership uses the app detail UID where present and Gate's account-scoped list otherwise. Unavailable list entries are skipped.",
526
+ };
527
+ }
528
+ value = await featuresResult(d, r, t, value, [
529
+ "sendbird",
530
+ ...(resolved.profile ? ["--profile", resolved.profile] : []),
531
+ ...(resolved.orgId ? ["--org-id", resolved.orgId] : []),
532
+ ...(resolved.appId ? ["--app-id", resolved.appId] : []),
533
+ ]);
534
+ value = await callsReadback(d, r, t, value);
535
+ value = await callsCreditsResult(d, r, t, value, resolved.orgId);
536
+ if (d.name.startsWith("calls ") &&
537
+ d.method !== "GET" &&
538
+ value &&
539
+ typeof value === "object") {
540
+ const v = value;
541
+ if (v.readback && typeof v.readback === "object") {
542
+ const plan = readbackPlan(recoverySnapshot(d.name, input.params ?? {}, r.body ?? {}, resolved, t.env));
543
+ value = { ...v, readback: { ...v.readback, next: plan.reads } };
544
+ }
545
+ }
546
+ value = proResult(d, value, resolved.appId, resolved.orgId);
547
+ if (followTrial) {
548
+ const parentValue = value;
549
+ const trial = await followCallsTrial(resolved, t, async () => {
550
+ if (d.name === "calls activate")
551
+ return (parentValue.readback.status === "matches");
552
+ const created = z
553
+ .object({ application: z.object({ app_id: z.string().min(1) }) })
554
+ .safeParse(parentValue);
555
+ if (!created.success)
556
+ throw new CliError("E_SCHEMA", "Created app identity is unavailable", 8);
557
+ const app = await checkAppOrg(t, created.data.application.app_id, resolved.orgId);
558
+ return (callsApplicationState(app)
559
+ .is_calls_enabled === true);
560
+ }, () => execute(definition("calls credits claim-trial"), {}, {
561
+ profile: resolved.profile,
562
+ orgId: resolved.orgId,
563
+ yes: true,
564
+ }, t));
565
+ value = { ...parentValue, calls_trial: trial };
566
+ }
567
+ if (d.resultSchema && !d.resultSchema.safeParse(value).success)
568
+ throw new CliError("E_SCHEMA", "CLI result does not match the advertised contract; read the resource before retrying changes", 8);
569
+ if (outputFd !== undefined) {
570
+ writeFileSync(outputFd, JSON.stringify(value, null, 2) + "\n");
571
+ outputComplete = true;
572
+ }
573
+ return redact(value, [
574
+ ...secrets,
575
+ ...secretValues(value),
576
+ ...callsSecrets(d, value),
577
+ ...proSecrets(d, value),
578
+ ]);
579
+ }
580
+ catch (error) {
581
+ throw markFailure(error);
582
+ }
583
+ finally {
584
+ if (outputFd !== undefined) {
585
+ try {
586
+ closeSync(outputFd);
587
+ if (!outputComplete)
588
+ unlinkSync(secretDestination);
589
+ }
590
+ catch (error) {
591
+ // Local output cleanup failure must not erase evidence that a write ran.
592
+ throw markFailure(error);
593
+ }
594
+ }
595
+ }
596
+ }
597
+ export function definition(name) {
598
+ const d = definitions.find((d) => d.name === name);
599
+ if (!d)
600
+ throw new CliError("E_COMMAND", "Unknown command", 2);
601
+ return d;
602
+ }
603
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}