@gravity-rail/cli 0.40.0 → 0.43.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 +9 -3
- package/dist/gr.js +369 -57
- package/dist/gr.js.map +1 -1
- package/dist/lib.js +81 -27
- package/dist/lib.js.map +1 -1
- package/package.json +2 -2
package/dist/gr.js
CHANGED
|
@@ -3205,7 +3205,7 @@ var init_libphonenumber_js = __esm({
|
|
|
3205
3205
|
}
|
|
3206
3206
|
});
|
|
3207
3207
|
|
|
3208
|
-
// ../sdk/dist/chunk-
|
|
3208
|
+
// ../sdk/dist/chunk-G32MQGJD.js
|
|
3209
3209
|
function resourceWorkflowsPath(wid, ...segments) {
|
|
3210
3210
|
const tail = segments.map((segment) => encodeURIComponent(String(segment))).join("/");
|
|
3211
3211
|
const base = `w/${encodeURIComponent(wid)}/resource-workflows`;
|
|
@@ -3223,6 +3223,9 @@ function pageQuery(params) {
|
|
|
3223
3223
|
const qs = query.toString();
|
|
3224
3224
|
return qs ? `?${qs}` : "";
|
|
3225
3225
|
}
|
|
3226
|
+
function refusalCode(value) {
|
|
3227
|
+
return typeof value === "string" && REFUSAL_CODES.includes(value) ? value : void 0;
|
|
3228
|
+
}
|
|
3226
3229
|
function installationsPath(wid, ...segments) {
|
|
3227
3230
|
const tail = segments.map((segment) => encodeURIComponent(String(segment))).join("/");
|
|
3228
3231
|
const base = `w/${encodeURIComponent(wid)}/installations`;
|
|
@@ -3415,6 +3418,7 @@ function createApiModules(apiKey, baseUrl3, customFetch) {
|
|
|
3415
3418
|
auth: new AuthApi(apiKey, baseUrl3, customFetch),
|
|
3416
3419
|
builders: new BuildersApi(apiKey, baseUrl3, customFetch),
|
|
3417
3420
|
bundles: new BundlesApi(apiKey, baseUrl3, customFetch),
|
|
3421
|
+
demos: new DemosApi(apiKey, baseUrl3, customFetch),
|
|
3418
3422
|
installations: new InstallationsApi(apiKey, baseUrl3, customFetch),
|
|
3419
3423
|
calendars: new CalendarsApi(apiKey, baseUrl3, customFetch),
|
|
3420
3424
|
calls: new CallsApi(apiKey, baseUrl3, customFetch),
|
|
@@ -3578,6 +3582,7 @@ function bindChatsMethods(target, chats) {
|
|
|
3578
3582
|
target.updateChatMute = chats.updateChatMute.bind(chats);
|
|
3579
3583
|
target.summarizeChat = chats.summarizeChat.bind(chats);
|
|
3580
3584
|
target.getChatMessages = chats.getChatMessages.bind(chats);
|
|
3585
|
+
target.getChatTaskTransitions = chats.getChatTaskTransitions.bind(chats);
|
|
3581
3586
|
target.getChildThreadMessages = chats.getChildThreadMessages.bind(chats);
|
|
3582
3587
|
target.getChatToolCallMessages = chats.getChatToolCallMessages.bind(chats);
|
|
3583
3588
|
target.getChatTools = chats.getChatTools.bind(chats);
|
|
@@ -3610,6 +3615,7 @@ function bindCallsMethods(target, calls, cel) {
|
|
|
3610
3615
|
target.getPhoneCalls = calls.getPhoneCalls.bind(calls);
|
|
3611
3616
|
target.getMessageTiming = calls.getMessageTiming.bind(calls);
|
|
3612
3617
|
target.getRecordingInfo = calls.getRecordingInfo.bind(calls);
|
|
3618
|
+
target.getEdgeCaptureInfo = calls.getEdgeCaptureInfo.bind(calls);
|
|
3613
3619
|
target.listChatRecordings = calls.listChatRecordings.bind(calls);
|
|
3614
3620
|
target.getCallRecordingDownloadUrl = calls.getCallRecordingDownloadUrl.bind(calls);
|
|
3615
3621
|
target.getCelContext = cel.getCelContext.bind(cel);
|
|
@@ -4053,7 +4059,7 @@ function bindWorkflowsMethods(target, workflows, workflowNotes, voice, superviso
|
|
|
4053
4059
|
target.getWorkflowActivity = workflows.getWorkflowActivity.bind(workflows);
|
|
4054
4060
|
target.getWorkflowsActivityBatch = workflows.getWorkflowsActivityBatch.bind(workflows);
|
|
4055
4061
|
target.getWorkflowDiagram = workflows.getWorkflowDiagram.bind(workflows);
|
|
4056
|
-
target.
|
|
4062
|
+
target.getWorkflowOutline = workflows.getWorkflowOutline.bind(workflows);
|
|
4057
4063
|
target.createWorkflow = workflows.createWorkflow.bind(workflows);
|
|
4058
4064
|
target.updateWorkflow = workflows.updateWorkflow.bind(workflows);
|
|
4059
4065
|
target.getWorkflowDeletionPreview = workflows.getWorkflowDeletionPreview.bind(workflows);
|
|
@@ -4524,11 +4530,14 @@ function bindResourceWorkflowsMethods(target, resourceWorkflows) {
|
|
|
4524
4530
|
}
|
|
4525
4531
|
function bindBundlesMethods(target, bundles, resourceWorkflows) {
|
|
4526
4532
|
bindResourceWorkflowsMethods(target, resourceWorkflows);
|
|
4527
|
-
target.
|
|
4533
|
+
target.listPublicBundles = bundles.listPublicBundles.bind(bundles);
|
|
4534
|
+
target.getPublicBundle = bundles.getPublicBundle.bind(bundles);
|
|
4528
4535
|
target.updateBundle = bundles.updateBundle.bind(bundles);
|
|
4529
4536
|
target.listBundleInstallations = bundles.listBundleInstallations.bind(bundles);
|
|
4530
4537
|
target.listBundles = bundles.listBundles.bind(bundles);
|
|
4531
4538
|
target.listBundleWorkflowCandidates = bundles.listBundleWorkflowCandidates.bind(bundles);
|
|
4539
|
+
target.listBundleJourneyCandidates = bundles.listBundleJourneyCandidates.bind(bundles);
|
|
4540
|
+
target.getBundleJourneyCandidate = bundles.getBundleJourneyCandidate.bind(bundles);
|
|
4532
4541
|
target.createBundle = bundles.createBundle.bind(bundles);
|
|
4533
4542
|
target.getBundleDraft = bundles.getBundleDraft.bind(bundles);
|
|
4534
4543
|
target.replaceBundleDraft = bundles.replaceBundleDraft.bind(bundles);
|
|
@@ -4541,6 +4550,15 @@ function bindBundlesMethods(target, bundles, resourceWorkflows) {
|
|
|
4541
4550
|
target.revokeBundleGrant = bundles.revokeBundleGrant.bind(bundles);
|
|
4542
4551
|
target.listResourceWorkflows = resourceWorkflows.listResourceWorkflows.bind(resourceWorkflows);
|
|
4543
4552
|
}
|
|
4553
|
+
function bindDemosMethods(target, demos) {
|
|
4554
|
+
target.getDemo = demos.getDemo.bind(demos);
|
|
4555
|
+
target.startDemoSession = demos.startDemoSession.bind(demos);
|
|
4556
|
+
target.sendDemoSessionSms = demos.sendDemoSessionSms.bind(demos);
|
|
4557
|
+
target.sendDemoSessionEmail = demos.sendDemoSessionEmail.bind(demos);
|
|
4558
|
+
target.placeDemoSessionCall = demos.placeDemoSessionCall.bind(demos);
|
|
4559
|
+
target.getDemoSessionTimeline = demos.getDemoSessionTimeline.bind(demos);
|
|
4560
|
+
target.endDemoSession = demos.endDemoSession.bind(demos);
|
|
4561
|
+
}
|
|
4544
4562
|
function bindInstallationsMethods(target, installations) {
|
|
4545
4563
|
target.preflightBundleInstallation = installations.preflightBundleInstallation.bind(installations);
|
|
4546
4564
|
target.installBundle = installations.installBundle.bind(installations);
|
|
@@ -4610,6 +4628,10 @@ function bindQualificationsMethods(target, qualifications) {
|
|
|
4610
4628
|
target.listTestChatRuns = qualifications.listTestChatRuns.bind(qualifications);
|
|
4611
4629
|
target.listScenarioHealthSummaries = qualifications.listScenarioHealthSummaries.bind(qualifications);
|
|
4612
4630
|
target.getTestChatRun = qualifications.getTestChatRun.bind(qualifications);
|
|
4631
|
+
target.listTestChatRunCapturedEffects = qualifications.listTestChatRunCapturedEffects.bind(qualifications);
|
|
4632
|
+
target.deliverTestChatRunSms = qualifications.deliverTestChatRunSms.bind(qualifications);
|
|
4633
|
+
target.deliverTestChatRunEmail = qualifications.deliverTestChatRunEmail.bind(qualifications);
|
|
4634
|
+
target.placeTestChatRunCall = qualifications.placeTestChatRunCall.bind(qualifications);
|
|
4613
4635
|
target.startTestChatRun = qualifications.startTestChatRun.bind(qualifications);
|
|
4614
4636
|
target.evaluateTestChatRun = qualifications.evaluateTestChatRun.bind(qualifications);
|
|
4615
4637
|
target.endTestChatRun = qualifications.endTestChatRun.bind(qualifications);
|
|
@@ -4702,9 +4724,9 @@ function getRevisionState(workflow, revision) {
|
|
|
4702
4724
|
state: revision?.publishedAt != null ? "published" : "draft"
|
|
4703
4725
|
};
|
|
4704
4726
|
}
|
|
4705
|
-
var AbilitiesApi, ResourceWorkflowsApi, BundlesApi, InstallationsApi, AccessGrantsApi, AgentTasksApi, AgentsApi, AIModelsApi, ApiKeysApi, AppsApi, AssignmentsApi, VoiceApi, AuthApi, BuildersApi, CalendarsApi, CallsApi, CELApi, ChatsApi, ConfluenceApi, CustomToolkitsApi, DataTypesApi, DiscordBotsApi, SlackAppsApi, EventsApi, FeaturesApi, FhirConnectionsApi, InboundFaxStatus, DocumoFaxApi, HealthieApi, FilesApi, InboxesApi, InquiriesApi, AppConnectionsApi, McpServersApi, MemberImportValidationError, MembersApi, MondayIntegrationApi, NotificationRulesApi, OperatorApi, OrgApi, OAuthConnectionsApi, OAuthApi, PhoneNumbersApi, PronunciationsApi, PromptsApi, PersonasApi, QueriesApi, QualificationsApi, ReportsApi, RoutingRulesApi, SalesforceApi, ConnectionSyncApi, HubspotApi, SitesApi, SubscriptionsApi, SupportRequestsApi, CustomersApi, ResellersApi, SupervisorsApi, TasksApi, TemplatesApi, ToolkitsApi, JourneysApi, WorkflowsApi, WorkflowNotesApi, EventRuleObjectType, EventRuleEventType, EventRuleActionType, DriverMode, MEMBER_RELATIONSHIP_KINDS, WorkspaceInvitationsApi, WorkspacesApi, DashboardsApi, DevicesApi, TeamsAppsApi, ExperimentsApi, PatientSyncConnectionsApi, ActivityApi, MotdApi, InterventionRequestsApi, MetricsApi, ProjectsApi, TrackedLinksApi, WORKSPACE_METHOD_NAMES, WORKSPACE_METHOD_NAME_SET, GravityRailClient, WIDGET_SLUGS, CHAT_TYPES, BUILTIN_ASSISTANT_CHAT_TYPES, MEMBER_AGENT_CHAT_TYPES, ActivityGrain, ActivityGroupBy, ActivityOpenItemOrder, ActivityWindowBasis;
|
|
4706
|
-
var
|
|
4707
|
-
"../sdk/dist/chunk-
|
|
4727
|
+
var AbilitiesApi, ResourceWorkflowsApi, BundlesApi, DemoRefusalCode, REFUSAL_CODES, DemoRequestError, DemosApi, InstallationsApi, AccessGrantsApi, AgentTasksApi, AgentsApi, AIModelsApi, ApiKeysApi, AppsApi, AssignmentsApi, VoiceApi, AuthApi, BuildersApi, CalendarsApi, CallsApi, CELApi, ChatsApi, ConfluenceApi, CustomToolkitsApi, DataTypesApi, DiscordBotsApi, SlackAppsApi, EventsApi, FeaturesApi, FhirConnectionsApi, InboundFaxStatus, DocumoFaxApi, HealthieApi, FilesApi, InboxesApi, InquiriesApi, AppConnectionsApi, McpServersApi, MemberImportValidationError, MembersApi, MondayIntegrationApi, NotificationRulesApi, OperatorApi, OrgApi, OAuthConnectionsApi, OAuthApi, PhoneNumbersApi, PronunciationsApi, PromptsApi, PersonasApi, QueriesApi, QualificationsApi, ReportsApi, RoutingRulesApi, SalesforceApi, ConnectionSyncApi, HubspotApi, SitesApi, SubscriptionsApi, SupportRequestsApi, CustomersApi, ResellersApi, SupervisorsApi, TasksApi, TemplatesApi, ToolkitsApi, JourneysApi, WorkflowsApi, WorkflowNotesApi, EventRuleObjectType, EventRuleEventType, EventRuleActionType, DriverMode, MEMBER_RELATIONSHIP_KINDS, WorkspaceInvitationsApi, WorkspacesApi, DashboardsApi, DevicesApi, TeamsAppsApi, ExperimentsApi, PatientSyncConnectionsApi, ActivityApi, MotdApi, InterventionRequestsApi, MetricsApi, ProjectsApi, TrackedLinksApi, WORKSPACE_METHOD_NAMES, WORKSPACE_METHOD_NAME_SET, GravityRailClient, WIDGET_SLUGS, CHAT_TYPES, BUILTIN_ASSISTANT_CHAT_TYPES, MEMBER_AGENT_CHAT_TYPES, ActivityGrain, ActivityGroupBy, ActivityOpenItemOrder, ActivityWindowBasis;
|
|
4728
|
+
var init_chunk_G32MQGJD = __esm({
|
|
4729
|
+
"../sdk/dist/chunk-G32MQGJD.js"() {
|
|
4708
4730
|
init_chunk_67QXTQVL();
|
|
4709
4731
|
init_libphonenumber_js();
|
|
4710
4732
|
AbilitiesApi = class extends BaseApiClient {
|
|
@@ -4812,11 +4834,15 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
4812
4834
|
}
|
|
4813
4835
|
};
|
|
4814
4836
|
BundlesApi = class extends BaseApiClient {
|
|
4815
|
-
/**
|
|
4816
|
-
async
|
|
4817
|
-
return this.fetch(`
|
|
4837
|
+
/** Bundles shared with everyone. Needs no session. */
|
|
4838
|
+
async listPublicBundles(params) {
|
|
4839
|
+
return this.fetch(`bundles/public${pageQuery(params)}`);
|
|
4818
4840
|
}
|
|
4819
|
-
/**
|
|
4841
|
+
/** The outline of one Bundle shared with everyone. Needs no session; 404 otherwise. */
|
|
4842
|
+
async getPublicBundle(bundleUuid2) {
|
|
4843
|
+
return this.fetch(`bundles/${encodeURIComponent(bundleUuid2)}/public`);
|
|
4844
|
+
}
|
|
4845
|
+
/** Read an authorized Bundle by UUID. */
|
|
4820
4846
|
async getBundle(wid, bundleUuid2) {
|
|
4821
4847
|
return this.fetch(bundlesPath(wid, bundleUuid2));
|
|
4822
4848
|
}
|
|
@@ -4852,6 +4878,27 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
4852
4878
|
async listBundleWorkflowCandidates(wid) {
|
|
4853
4879
|
return this.fetch(bundlesPath(wid, "workflow-candidates"));
|
|
4854
4880
|
}
|
|
4881
|
+
/**
|
|
4882
|
+
* This workspace's Journeys for the Bundle picker, by name. Nothing is built
|
|
4883
|
+
* for the list. `available` is false while the server refuses Journey items.
|
|
4884
|
+
* Requires `workflows:admin` and `journeys:write`.
|
|
4885
|
+
*/
|
|
4886
|
+
async listBundleJourneyCandidates(wid) {
|
|
4887
|
+
return this.fetch(bundlesPath(wid, "journey-candidates"));
|
|
4888
|
+
}
|
|
4889
|
+
/**
|
|
4890
|
+
* One Journey as the Bundle item that adds it: the whole Journey item the
|
|
4891
|
+
* server built (`item`), the Forms its conditions read and the Workflows its
|
|
4892
|
+
* actions start, or the `problems` that name what the Journey must change
|
|
4893
|
+
* first. The item never carries enrollment; `enrollmentOmitted` says the
|
|
4894
|
+
* Journey has automatic enrollment that was left out. Requires
|
|
4895
|
+
* `workflows:admin` and `journeys:write`.
|
|
4896
|
+
*/
|
|
4897
|
+
async getBundleJourneyCandidate(wid, journeyUuid) {
|
|
4898
|
+
return this.fetch(
|
|
4899
|
+
bundlesPath(wid, "journey-candidates", journeyUuid)
|
|
4900
|
+
);
|
|
4901
|
+
}
|
|
4855
4902
|
/** Create an empty Bundle owned by this workspace. */
|
|
4856
4903
|
async createBundle(wid, data) {
|
|
4857
4904
|
return this.fetch(bundlesPath(wid), {
|
|
@@ -4901,9 +4948,9 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
4901
4948
|
return this.fetch(bundlesPath(wid, bundleUuid2, "grants"));
|
|
4902
4949
|
}
|
|
4903
4950
|
/**
|
|
4904
|
-
* Share throughout the publisher's organization with organization-admin authority
|
|
4905
|
-
*
|
|
4906
|
-
*
|
|
4951
|
+
* Share throughout the publisher's organization with organization-admin authority,
|
|
4952
|
+
* or with everyone (`granteeType: "global"`) as a superuser. Workspace-specific
|
|
4953
|
+
* grants are refused.
|
|
4907
4954
|
*/
|
|
4908
4955
|
async grantBundle(wid, bundleUuid2, data) {
|
|
4909
4956
|
return this.fetch(bundlesPath(wid, bundleUuid2, "grants"), {
|
|
@@ -4918,6 +4965,109 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
4918
4965
|
});
|
|
4919
4966
|
}
|
|
4920
4967
|
};
|
|
4968
|
+
DemoRefusalCode = {
|
|
4969
|
+
session_expired: "session_expired",
|
|
4970
|
+
session_capped: "session_capped",
|
|
4971
|
+
calls_capped: "calls_capped",
|
|
4972
|
+
session_ended: "session_ended",
|
|
4973
|
+
destination_not_allowed: "destination_not_allowed",
|
|
4974
|
+
sender_cannot_send: "sender_cannot_send",
|
|
4975
|
+
demo_not_available: "demo_not_available"
|
|
4976
|
+
};
|
|
4977
|
+
REFUSAL_CODES = Object.values(DemoRefusalCode);
|
|
4978
|
+
DemoRequestError = class extends ApiError {
|
|
4979
|
+
code;
|
|
4980
|
+
constructor(message, statusCode, code) {
|
|
4981
|
+
super(message, statusCode);
|
|
4982
|
+
this.name = "DemoRequestError";
|
|
4983
|
+
this.code = code;
|
|
4984
|
+
}
|
|
4985
|
+
};
|
|
4986
|
+
DemosApi = class extends BaseApiClient {
|
|
4987
|
+
/** Whether a Bundle has a Demo, and what a visitor may contact in it. Needs no session. */
|
|
4988
|
+
async getDemo(bundleUuid2) {
|
|
4989
|
+
return this.anonymous(`demos/${encodeURIComponent(bundleUuid2)}`, {
|
|
4990
|
+
method: "GET"
|
|
4991
|
+
});
|
|
4992
|
+
}
|
|
4993
|
+
/** Start a Demo session. Needs no session; `recaptchaToken` is required where reCAPTCHA is enforced. */
|
|
4994
|
+
async startDemoSession(bundleUuid2, data = {}) {
|
|
4995
|
+
return this.anonymous(
|
|
4996
|
+
`demos/${encodeURIComponent(bundleUuid2)}/sessions`,
|
|
4997
|
+
{ method: "POST", body: JSON.stringify(data) }
|
|
4998
|
+
);
|
|
4999
|
+
}
|
|
5000
|
+
/** Text one of the Demo's numbers as the session's Persona. */
|
|
5001
|
+
async sendDemoSessionSms(sessionToken, data) {
|
|
5002
|
+
return this.anonymous(
|
|
5003
|
+
"demos/sessions/sms",
|
|
5004
|
+
{ method: "POST", body: JSON.stringify(data) },
|
|
5005
|
+
sessionToken
|
|
5006
|
+
);
|
|
5007
|
+
}
|
|
5008
|
+
/** Email one of the Demo's inboxes as the session's Persona. Returns after the Agent's turn. */
|
|
5009
|
+
async sendDemoSessionEmail(sessionToken, data) {
|
|
5010
|
+
return this.anonymous(
|
|
5011
|
+
"demos/sessions/email",
|
|
5012
|
+
{ method: "POST", body: JSON.stringify(data) },
|
|
5013
|
+
sessionToken
|
|
5014
|
+
);
|
|
5015
|
+
}
|
|
5016
|
+
/**
|
|
5017
|
+
* Call one of the Demo's numbers as the session's Persona.
|
|
5018
|
+
*
|
|
5019
|
+
* For an `answered` call, `join` holds what a browser opens the call with:
|
|
5020
|
+
* the web voice socket `url`, a single-use login `token` for this call's
|
|
5021
|
+
* Chat, and `chatId`. Send them in `voice.login`. For a `not_answered`
|
|
5022
|
+
* call, `notAnsweredBranch` says what the number does and nothing connects.
|
|
5023
|
+
*/
|
|
5024
|
+
async placeDemoSessionCall(sessionToken, data) {
|
|
5025
|
+
return this.anonymous(
|
|
5026
|
+
"demos/sessions/call",
|
|
5027
|
+
{ method: "POST", body: JSON.stringify(data) },
|
|
5028
|
+
sessionToken
|
|
5029
|
+
);
|
|
5030
|
+
}
|
|
5031
|
+
/**
|
|
5032
|
+
* The session's own messages, oldest first, and its state. `after` returns
|
|
5033
|
+
* only the rows after that row id, so a poll reads what is new.
|
|
5034
|
+
*/
|
|
5035
|
+
async getDemoSessionTimeline(sessionToken, params) {
|
|
5036
|
+
const query = params?.after !== void 0 ? `?after=${encodeURIComponent(params.after)}` : "";
|
|
5037
|
+
return this.anonymous(
|
|
5038
|
+
`demos/sessions/timeline${query}`,
|
|
5039
|
+
{ method: "GET" },
|
|
5040
|
+
sessionToken
|
|
5041
|
+
);
|
|
5042
|
+
}
|
|
5043
|
+
/** End the session. Nothing further is captured on it. */
|
|
5044
|
+
async endDemoSession(sessionToken) {
|
|
5045
|
+
return this.anonymous(
|
|
5046
|
+
"demos/sessions/end",
|
|
5047
|
+
{ method: "POST" },
|
|
5048
|
+
sessionToken
|
|
5049
|
+
);
|
|
5050
|
+
}
|
|
5051
|
+
/**
|
|
5052
|
+
* A request that carries the Demo session token, or no credential at all.
|
|
5053
|
+
* It never sends this client's API key or the browser's cookies.
|
|
5054
|
+
*/
|
|
5055
|
+
async anonymous(endpoint, init, sessionToken) {
|
|
5056
|
+
const headers2 = new Headers({ "Content-Type": "application/json" });
|
|
5057
|
+
if (sessionToken) headers2.set("Authorization", `Bearer ${sessionToken}`);
|
|
5058
|
+
const response = await this.fetchFunction(`${this.baseUrl}/api/v2/${endpoint}`, {
|
|
5059
|
+
...init,
|
|
5060
|
+
headers: headers2,
|
|
5061
|
+
credentials: "omit"
|
|
5062
|
+
});
|
|
5063
|
+
if (!response.ok) {
|
|
5064
|
+
const body = await response.json().catch(() => ({}));
|
|
5065
|
+
const detail = typeof body.detail === "string" ? body.detail : `Request failed (${response.status})`;
|
|
5066
|
+
throw new DemoRequestError(detail, response.status, refusalCode(body.code));
|
|
5067
|
+
}
|
|
5068
|
+
return await response.json();
|
|
5069
|
+
}
|
|
5070
|
+
};
|
|
4921
5071
|
InstallationsApi = class extends BaseApiClient {
|
|
4922
5072
|
/** Inspect one published release and its selected example dependencies. */
|
|
4923
5073
|
async preflightBundleInstallation(wid, bundleUuid2, data) {
|
|
@@ -6198,9 +6348,25 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
6198
6348
|
`w/${wid}/calls${params.toString() ? `?${params.toString()}` : ""}`
|
|
6199
6349
|
);
|
|
6200
6350
|
}
|
|
6201
|
-
/**
|
|
6202
|
-
|
|
6203
|
-
|
|
6351
|
+
/**
|
|
6352
|
+
* Get message timing data for a chat recording. `source` selects whose
|
|
6353
|
+
* timeline the offsets are measured against; omitted means `standard`.
|
|
6354
|
+
*/
|
|
6355
|
+
async getMessageTiming(wid, chatId, options = {}) {
|
|
6356
|
+
const params = new URLSearchParams();
|
|
6357
|
+
if (options.source) params.set("source", options.source);
|
|
6358
|
+
return this.fetch(
|
|
6359
|
+
`w/${wid}/recordings/chat/${chatId}/message-timing${params.toString() ? `?${params.toString()}` : ""}`
|
|
6360
|
+
);
|
|
6361
|
+
}
|
|
6362
|
+
/**
|
|
6363
|
+
* Staff-only discovery of retained edge-stream capture for a chat:
|
|
6364
|
+
* whether any is retained, its aggregate coverage status, the interval it
|
|
6365
|
+
* covers, and closed reason codes. `available: false` when nothing is
|
|
6366
|
+
* retained; 403 for anyone who is not Gravity Rail staff.
|
|
6367
|
+
*/
|
|
6368
|
+
async getEdgeCaptureInfo(wid, chatId) {
|
|
6369
|
+
return this.fetch(`w/${wid}/recordings/chat/${chatId}/edge-capture`);
|
|
6204
6370
|
}
|
|
6205
6371
|
/**
|
|
6206
6372
|
* Get PHI-safe provenance metadata for the recording served by
|
|
@@ -6566,6 +6732,19 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
6566
6732
|
`w/${wid}/chats/${id}/messages${params.toString() ? `?${params.toString()}` : ""}`
|
|
6567
6733
|
);
|
|
6568
6734
|
}
|
|
6735
|
+
/** Who moved the chat's Assignment between Tasks, for a time window.
|
|
6736
|
+
* Pair it with `getChatMessages`: pass the window the message page covers as
|
|
6737
|
+
* `after` / `before` (ISO-8601, inclusive). The newest `limit` moves in the
|
|
6738
|
+
* window come back, oldest first. */
|
|
6739
|
+
async getChatTaskTransitions(wid, id, options) {
|
|
6740
|
+
const params = new URLSearchParams();
|
|
6741
|
+
if (options?.after) params.append("after", options.after);
|
|
6742
|
+
if (options?.before) params.append("before", options.before);
|
|
6743
|
+
if (options?.limit) params.append("limit", options.limit.toString());
|
|
6744
|
+
return this.fetch(
|
|
6745
|
+
`w/${wid}/chats/${id}/task-transitions${params.toString() ? `?${params.toString()}` : ""}`
|
|
6746
|
+
);
|
|
6747
|
+
}
|
|
6569
6748
|
/** List the background-work thread hanging off a message.
|
|
6570
6749
|
*
|
|
6571
6750
|
* When a tool trajectory outgrows its turn it detaches and runs in the
|
|
@@ -9782,7 +9961,8 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
9782
9961
|
return this.fetch(`o/${orgIdOrUuid}/bundles`);
|
|
9783
9962
|
}
|
|
9784
9963
|
/**
|
|
9785
|
-
* Update the settings an org admin owns: name, slug
|
|
9964
|
+
* Update the settings an org admin owns: name, slug, contact details and
|
|
9965
|
+
* the security contact.
|
|
9786
9966
|
*
|
|
9787
9967
|
* Deliberately NOT the admin organization update — `enforceCreditLimit`
|
|
9788
9968
|
* is superuser-only and is not a field on this endpoint's request model
|
|
@@ -11234,6 +11414,18 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
11234
11414
|
async getTestChatRun(wid, runId) {
|
|
11235
11415
|
return this.fetch(`w/${wid}/qualifications/test-chat-runs/${runId}`);
|
|
11236
11416
|
}
|
|
11417
|
+
/**
|
|
11418
|
+
* What a test run would have sent: the SMS, WhatsApp, email, call,
|
|
11419
|
+
* notification and escalation it prepared, with content, oldest first.
|
|
11420
|
+
* One entry per Member reached, naming the Member and the workspace phone
|
|
11421
|
+
* number or inbox used. Nothing in the list was delivered. `truncated` means the list is
|
|
11422
|
+
* incomplete.
|
|
11423
|
+
*/
|
|
11424
|
+
async listTestChatRunCapturedEffects(wid, runId) {
|
|
11425
|
+
return this.fetch(
|
|
11426
|
+
`w/${wid}/qualifications/test-chat-runs/${runId}/captured-effects`
|
|
11427
|
+
);
|
|
11428
|
+
}
|
|
11237
11429
|
async startTestChatRun(wid, workflowId, data = {}) {
|
|
11238
11430
|
return this.fetch(
|
|
11239
11431
|
`w/${wid}/qualifications/workflows/${workflowId}/test-chat-runs`,
|
|
@@ -11243,6 +11435,50 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
11243
11435
|
}
|
|
11244
11436
|
);
|
|
11245
11437
|
}
|
|
11438
|
+
/**
|
|
11439
|
+
* Text a workspace phone number as the run's Persona. The text enters the
|
|
11440
|
+
* inbound SMS pipeline; the Agent's reply is captured on the run and never
|
|
11441
|
+
* sent. `chatId` is the Chat the text landed in.
|
|
11442
|
+
*/
|
|
11443
|
+
async deliverTestChatRunSms(wid, runId, data) {
|
|
11444
|
+
return this.fetch(
|
|
11445
|
+
`w/${wid}/qualifications/test-chat-runs/${runId}/inbound/sms`,
|
|
11446
|
+
{
|
|
11447
|
+
method: "POST",
|
|
11448
|
+
body: JSON.stringify(data)
|
|
11449
|
+
}
|
|
11450
|
+
);
|
|
11451
|
+
}
|
|
11452
|
+
/**
|
|
11453
|
+
* Email a workspace inbox as the run's Persona. The email enters the
|
|
11454
|
+
* inbound email pipeline; the call returns after the Agent's turn, and the
|
|
11455
|
+
* reply is captured on the run and never sent.
|
|
11456
|
+
*/
|
|
11457
|
+
async deliverTestChatRunEmail(wid, runId, data) {
|
|
11458
|
+
return this.fetch(
|
|
11459
|
+
`w/${wid}/qualifications/test-chat-runs/${runId}/inbound/email`,
|
|
11460
|
+
{
|
|
11461
|
+
method: "POST",
|
|
11462
|
+
body: JSON.stringify(data)
|
|
11463
|
+
}
|
|
11464
|
+
);
|
|
11465
|
+
}
|
|
11466
|
+
/**
|
|
11467
|
+
* Call a workspace phone number as the run's Persona. When the Agent
|
|
11468
|
+
* answers (`answered: true`), `chatId` is the test Chat a browser joins
|
|
11469
|
+
* over the web voice socket (`voice.login` with that Chat id). Otherwise
|
|
11470
|
+
* `notAnsweredBranch` names what the number does with the call, and
|
|
11471
|
+
* nothing is run. No carrier is dialed.
|
|
11472
|
+
*/
|
|
11473
|
+
async placeTestChatRunCall(wid, runId, data) {
|
|
11474
|
+
return this.fetch(
|
|
11475
|
+
`w/${wid}/qualifications/test-chat-runs/${runId}/inbound/call`,
|
|
11476
|
+
{
|
|
11477
|
+
method: "POST",
|
|
11478
|
+
body: JSON.stringify(data)
|
|
11479
|
+
}
|
|
11480
|
+
);
|
|
11481
|
+
}
|
|
11246
11482
|
async evaluateTestChatRun(wid, runId) {
|
|
11247
11483
|
await this.fetch(`w/${wid}/qualifications/test-chat-runs/${runId}/evaluate`, {
|
|
11248
11484
|
method: "POST"
|
|
@@ -13038,15 +13274,11 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
13038
13274
|
return this.fetch(`w/${wid}/workflows/${id}/diagram${query}`);
|
|
13039
13275
|
}
|
|
13040
13276
|
/**
|
|
13041
|
-
*
|
|
13042
|
-
*
|
|
13043
|
-
* For same-origin setups, returns the direct API URL.
|
|
13277
|
+
* The outline a Workflow's diagram is drawn from: its active Tasks, its
|
|
13278
|
+
* start Task, the moves between Tasks and its Ability types.
|
|
13044
13279
|
*/
|
|
13045
|
-
|
|
13046
|
-
|
|
13047
|
-
return `/api/v2/w/${wid}/workflows/${id}/thumbnail`;
|
|
13048
|
-
}
|
|
13049
|
-
return `${this.baseUrl}/api/v2/w/${wid}/workflows/${id}/thumbnail`;
|
|
13280
|
+
async getWorkflowOutline(wid, id) {
|
|
13281
|
+
return this.fetch(`w/${wid}/workflows/${id}/outline`);
|
|
13050
13282
|
}
|
|
13051
13283
|
/** Create a new workflow in a workspace. */
|
|
13052
13284
|
async createWorkflow(wid, workflow) {
|
|
@@ -15359,6 +15591,7 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
15359
15591
|
"getInstallationReadiness",
|
|
15360
15592
|
"getThemeSettingsSchema",
|
|
15361
15593
|
"getBundleDraft",
|
|
15594
|
+
"getBundleJourneyCandidate",
|
|
15362
15595
|
"getBundle",
|
|
15363
15596
|
"getBundleVersion",
|
|
15364
15597
|
"getBusinessHoursStatus",
|
|
@@ -15390,6 +15623,7 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
15390
15623
|
"getChatLabels",
|
|
15391
15624
|
"getChatMachineResources",
|
|
15392
15625
|
"getChatMessages",
|
|
15626
|
+
"getChatTaskTransitions",
|
|
15393
15627
|
"getChatModelOverride",
|
|
15394
15628
|
"getChatPhoneCalls",
|
|
15395
15629
|
"getChatSkills",
|
|
@@ -15447,6 +15681,7 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
15447
15681
|
"getDocumoFaxSetup",
|
|
15448
15682
|
"listDocumoFaxes",
|
|
15449
15683
|
"getDocumoFaxStatus",
|
|
15684
|
+
"getEdgeCaptureInfo",
|
|
15450
15685
|
"getEnrollmentStatusLog",
|
|
15451
15686
|
"getEventRule",
|
|
15452
15687
|
"getEventRules",
|
|
@@ -15673,11 +15908,11 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
15673
15908
|
"getWorkflowDeletionPreview",
|
|
15674
15909
|
"getWorkflowDiagram",
|
|
15675
15910
|
"getWorkflowNotes",
|
|
15911
|
+
"getWorkflowOutline",
|
|
15676
15912
|
"getWorkflowRevision",
|
|
15677
15913
|
"getWorkflowRevisions",
|
|
15678
15914
|
"getWorkflowTaskAssignmentStats",
|
|
15679
15915
|
"getWorkflowTemplates",
|
|
15680
|
-
"getWorkflowThumbnailUrl",
|
|
15681
15916
|
"getWorkflows",
|
|
15682
15917
|
"getWorkflowsActivityBatch",
|
|
15683
15918
|
"getWorkspace",
|
|
@@ -15727,6 +15962,7 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
15727
15962
|
"listAvailableAppConnections",
|
|
15728
15963
|
"listInstallations",
|
|
15729
15964
|
"listBundleGrants",
|
|
15965
|
+
"listBundleJourneyCandidates",
|
|
15730
15966
|
"listBundleVersions",
|
|
15731
15967
|
"listBundles",
|
|
15732
15968
|
"listBundleWorkflowCandidates",
|
|
@@ -15763,6 +15999,10 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
15763
15999
|
"listSalesforceObjects",
|
|
15764
16000
|
"listScenarioHealthSummaries",
|
|
15765
16001
|
"listScenarios",
|
|
16002
|
+
"listTestChatRunCapturedEffects",
|
|
16003
|
+
"deliverTestChatRunSms",
|
|
16004
|
+
"deliverTestChatRunEmail",
|
|
16005
|
+
"placeTestChatRunCall",
|
|
15766
16006
|
"listTestChatRuns",
|
|
15767
16007
|
"listWidgetDomains",
|
|
15768
16008
|
"listWorkspaceInvitationsAdmin",
|
|
@@ -16017,6 +16257,7 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
16017
16257
|
updateChatMute;
|
|
16018
16258
|
summarizeChat;
|
|
16019
16259
|
getChatMessages;
|
|
16260
|
+
getChatTaskTransitions;
|
|
16020
16261
|
getChildThreadMessages;
|
|
16021
16262
|
getChatToolCallMessages;
|
|
16022
16263
|
getChatTools;
|
|
@@ -16048,6 +16289,7 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
16048
16289
|
getPhoneCalls;
|
|
16049
16290
|
getMessageTiming;
|
|
16050
16291
|
getRecordingInfo;
|
|
16292
|
+
getEdgeCaptureInfo;
|
|
16051
16293
|
listChatRecordings;
|
|
16052
16294
|
getCallRecordingDownloadUrl;
|
|
16053
16295
|
getCelContext;
|
|
@@ -16191,6 +16433,10 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
16191
16433
|
listTestChatRuns;
|
|
16192
16434
|
listScenarioHealthSummaries;
|
|
16193
16435
|
getTestChatRun;
|
|
16436
|
+
listTestChatRunCapturedEffects;
|
|
16437
|
+
deliverTestChatRunSms;
|
|
16438
|
+
deliverTestChatRunEmail;
|
|
16439
|
+
placeTestChatRunCall;
|
|
16194
16440
|
startTestChatRun;
|
|
16195
16441
|
evaluateTestChatRun;
|
|
16196
16442
|
endTestChatRun;
|
|
@@ -16302,12 +16548,23 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
16302
16548
|
createJourneyNote;
|
|
16303
16549
|
updateJourneyNote;
|
|
16304
16550
|
deleteJourneyNote;
|
|
16551
|
+
// Demos API
|
|
16552
|
+
getDemo;
|
|
16553
|
+
startDemoSession;
|
|
16554
|
+
sendDemoSessionSms;
|
|
16555
|
+
sendDemoSessionEmail;
|
|
16556
|
+
placeDemoSessionCall;
|
|
16557
|
+
getDemoSessionTimeline;
|
|
16558
|
+
endDemoSession;
|
|
16305
16559
|
updateBundle;
|
|
16306
16560
|
listBundleInstallations;
|
|
16307
16561
|
// Bundles API
|
|
16308
|
-
|
|
16562
|
+
listPublicBundles;
|
|
16563
|
+
getPublicBundle;
|
|
16309
16564
|
listBundles;
|
|
16310
16565
|
listBundleWorkflowCandidates;
|
|
16566
|
+
listBundleJourneyCandidates;
|
|
16567
|
+
getBundleJourneyCandidate;
|
|
16311
16568
|
createBundle;
|
|
16312
16569
|
getBundleDraft;
|
|
16313
16570
|
replaceBundleDraft;
|
|
@@ -16671,7 +16928,7 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
16671
16928
|
getWorkflowActivity;
|
|
16672
16929
|
getWorkflowsActivityBatch;
|
|
16673
16930
|
getWorkflowDiagram;
|
|
16674
|
-
|
|
16931
|
+
getWorkflowOutline;
|
|
16675
16932
|
createWorkflow;
|
|
16676
16933
|
updateWorkflow;
|
|
16677
16934
|
getWorkflowDeletionPreview;
|
|
@@ -17161,6 +17418,7 @@ var init_chunk_ZTUOB4V2 = __esm({
|
|
|
17161
17418
|
bindTrackedLinksMethods(this, apis.trackedLinks);
|
|
17162
17419
|
bindJourneysMethods(this, apis.journeys);
|
|
17163
17420
|
bindBundlesMethods(this, apis.bundles, apis.resourceWorkflows);
|
|
17421
|
+
bindDemosMethods(this, apis.demos);
|
|
17164
17422
|
bindInstallationsMethods(this, apis.installations);
|
|
17165
17423
|
bindExperimentsMethods(this, apis.experiments);
|
|
17166
17424
|
bindOperatorMethods(this, apis.operatorGroups);
|
|
@@ -17391,7 +17649,7 @@ var init_chunk_6KPGCPGW = __esm({
|
|
|
17391
17649
|
var SEARCHABLE_EVENT_RULE_SOURCE_FIELDS, ActivityEventType, EntityKind;
|
|
17392
17650
|
var init_dist = __esm({
|
|
17393
17651
|
"../sdk/dist/index.js"() {
|
|
17394
|
-
|
|
17652
|
+
init_chunk_G32MQGJD();
|
|
17395
17653
|
init_chunk_72SWNLVD();
|
|
17396
17654
|
init_chunk_6KPGCPGW();
|
|
17397
17655
|
init_chunk_67QXTQVL();
|
|
@@ -25021,10 +25279,14 @@ Assistant / models (live on the DRAFT revision \u2014 publish to go live)
|
|
|
25021
25279
|
chatModelId (string) Text chat model (see \`gr ai-models chat\`)
|
|
25022
25280
|
chatModelConfig (object|null) Chat model overrides
|
|
25023
25281
|
realtimeModelId (string|null) Voice/realtime model (see \`gr ai-models realtime\`)
|
|
25282
|
+
create: omit \u2192 xai:realtime:voice-agent-2 with
|
|
25283
|
+
voice xai:voice:cosmo; null = voice off
|
|
25284
|
+
update: null = voice off
|
|
25024
25285
|
One-shot voice example:
|
|
25025
25286
|
{"realtimeModelId":"xai:realtime:voice-agent-2"}
|
|
25026
|
-
|
|
25027
|
-
|
|
25287
|
+
A native model named WITHOUT a config gets
|
|
25288
|
+
tts=native + the provider fallback voice
|
|
25289
|
+
(xAI \u2192 xai:voice:eve, not cosmo). Explicit config:
|
|
25028
25290
|
{"realtimeModelId":"xai:realtime:voice-agent-2",
|
|
25029
25291
|
"realtimeModelConfig":{"ttsModel":"native",
|
|
25030
25292
|
"voiceModel":"xai:voice:ara"}}
|
|
@@ -29404,6 +29666,23 @@ async function readBindings(hctx) {
|
|
|
29404
29666
|
}
|
|
29405
29667
|
return payload;
|
|
29406
29668
|
}
|
|
29669
|
+
var CREATE_INBOX_ARG = {
|
|
29670
|
+
name: "create-inbox",
|
|
29671
|
+
description: "Comma-separated Inbox slot keys to fill by creating an Inbox (one per installation, named for the Bundle; needs inboxes:write)"
|
|
29672
|
+
};
|
|
29673
|
+
async function readSlotTargets(hctx) {
|
|
29674
|
+
const bindings = await readBindings(hctx);
|
|
29675
|
+
const keys = (optionalString(hctx.args, "create-inbox") ?? "").split(",").map((key) => key.trim()).filter(Boolean);
|
|
29676
|
+
if (keys.length === 0) return bindings;
|
|
29677
|
+
const merged = { ...bindings };
|
|
29678
|
+
for (const key of keys) {
|
|
29679
|
+
if (merged[key]) {
|
|
29680
|
+
throw new CLIError(`--create-inbox "${key}" is also set in --bindings; choose one`);
|
|
29681
|
+
}
|
|
29682
|
+
merged[key] = { kind: "new_inbox" };
|
|
29683
|
+
}
|
|
29684
|
+
return merged;
|
|
29685
|
+
}
|
|
29407
29686
|
async function guardConflict(run, hint2) {
|
|
29408
29687
|
try {
|
|
29409
29688
|
return await run();
|
|
@@ -29477,18 +29756,20 @@ var installationCommands = [
|
|
|
29477
29756
|
{
|
|
29478
29757
|
name: "bindings",
|
|
29479
29758
|
description: "Path to a JSON object mapping slot keys to targets"
|
|
29480
|
-
}
|
|
29759
|
+
},
|
|
29760
|
+
CREATE_INBOX_ARG
|
|
29481
29761
|
],
|
|
29482
29762
|
examples: [
|
|
29483
29763
|
"gr bundles install -w $WID --bundle <bundle-uuid> --allow-write",
|
|
29484
|
-
"gr bundles install -w $WID --bundle <bundle-uuid> --bindings bindings.json --allow-write"
|
|
29764
|
+
"gr bundles install -w $WID --bundle <bundle-uuid> --bindings bindings.json --allow-write",
|
|
29765
|
+
"gr bundles install -w $WID --bundle <bundle-uuid> --create-inbox program.inbox --allow-write"
|
|
29485
29766
|
],
|
|
29486
29767
|
handler: async (hctx) => {
|
|
29487
29768
|
const bundle = requireBundleUuid(hctx);
|
|
29488
29769
|
const summary = await getBundleSummary(hctx, bundle);
|
|
29489
29770
|
const version = summary.publishedVersion;
|
|
29490
29771
|
if (version == null) throw new CLIError("Publish the Bundle before installing it");
|
|
29491
|
-
const bindings = await
|
|
29772
|
+
const bindings = await readSlotTargets(hctx);
|
|
29492
29773
|
const result2 = await guardConflict(
|
|
29493
29774
|
() => client(hctx).installBundle(hctx.workspace, bundle, {
|
|
29494
29775
|
version,
|
|
@@ -29603,6 +29884,7 @@ var installationCommands = [
|
|
|
29603
29884
|
name: "bindings",
|
|
29604
29885
|
description: "Path to a JSON object mapping new slot keys to targets"
|
|
29605
29886
|
},
|
|
29887
|
+
CREATE_INBOX_ARG,
|
|
29606
29888
|
{ name: "preview", description: "Show what would change and write nothing", isFlag: true }
|
|
29607
29889
|
],
|
|
29608
29890
|
examples: [
|
|
@@ -29619,7 +29901,7 @@ var installationCommands = [
|
|
|
29619
29901
|
);
|
|
29620
29902
|
return;
|
|
29621
29903
|
}
|
|
29622
|
-
const bindings = await
|
|
29904
|
+
const bindings = await readSlotTargets(hctx);
|
|
29623
29905
|
const result2 = await guardConflict(
|
|
29624
29906
|
() => client(hctx).upgradeInstallation(hctx.workspace, uuid, {
|
|
29625
29907
|
toVersion: to,
|
|
@@ -29661,17 +29943,17 @@ var installationCommands = [
|
|
|
29661
29943
|
INSTALLATION_ARG,
|
|
29662
29944
|
{
|
|
29663
29945
|
name: "bindings",
|
|
29664
|
-
description: "Path to a JSON object mapping slot keys to targets"
|
|
29665
|
-
|
|
29666
|
-
|
|
29946
|
+
description: "Path to a JSON object mapping slot keys to targets"
|
|
29947
|
+
},
|
|
29948
|
+
CREATE_INBOX_ARG
|
|
29667
29949
|
],
|
|
29668
29950
|
examples: [
|
|
29669
29951
|
"gr bundles bind -w $WID --installation <installation-uuid> --bindings bindings.json --allow-write"
|
|
29670
29952
|
],
|
|
29671
29953
|
handler: async (hctx) => {
|
|
29672
|
-
const bindings = await
|
|
29954
|
+
const bindings = await readSlotTargets(hctx);
|
|
29673
29955
|
if (!bindings || Object.keys(bindings).length === 0) {
|
|
29674
|
-
throw new CLIError("--bindings must name at least one slot");
|
|
29956
|
+
throw new CLIError("--bindings or --create-inbox must name at least one slot");
|
|
29675
29957
|
}
|
|
29676
29958
|
const result2 = await guardConflict(
|
|
29677
29959
|
() => client(hctx).bindInstallationSlots(hctx.workspace, installationUuid(hctx), {
|
|
@@ -29760,6 +30042,18 @@ function parseDraftItems(payload) {
|
|
|
29760
30042
|
});
|
|
29761
30043
|
return items;
|
|
29762
30044
|
}
|
|
30045
|
+
function parseDraftLinks(payload) {
|
|
30046
|
+
const links = payload.links;
|
|
30047
|
+
if (links === void 0) return void 0;
|
|
30048
|
+
if (!Array.isArray(links)) throw new CLIError('"links" must be an array');
|
|
30049
|
+
links.forEach((link, index) => {
|
|
30050
|
+
const record2 = link;
|
|
30051
|
+
if (typeof record2 !== "object" || record2 === null || typeof record2.label !== "string" || typeof record2.url !== "string") {
|
|
30052
|
+
throw new CLIError(`links[${index}] needs string "label" and "url"`);
|
|
30053
|
+
}
|
|
30054
|
+
});
|
|
30055
|
+
return links;
|
|
30056
|
+
}
|
|
29763
30057
|
async function currentGeneration(hctx, uuid) {
|
|
29764
30058
|
const expected2 = optionalNumber(hctx.args, "expected-generation");
|
|
29765
30059
|
if (expected2 !== void 0) {
|
|
@@ -29835,6 +30129,14 @@ Draft generation: ${version.draftGeneration}
|
|
|
29835
30129
|
hctx.ctx,
|
|
29836
30130
|
ITEM_COLUMNS
|
|
29837
30131
|
);
|
|
30132
|
+
if (version.links?.length) {
|
|
30133
|
+
process.stdout.write(
|
|
30134
|
+
`
|
|
30135
|
+
Links:
|
|
30136
|
+
${version.links.map((link) => ` ${link.label}: ${link.url}`).join("\n")}
|
|
30137
|
+
`
|
|
30138
|
+
);
|
|
30139
|
+
}
|
|
29838
30140
|
if (version.releaseNotes) {
|
|
29839
30141
|
process.stdout.write(`
|
|
29840
30142
|
Release notes:
|
|
@@ -30004,7 +30306,7 @@ var bundlesDomain = {
|
|
|
30004
30306
|
},
|
|
30005
30307
|
{
|
|
30006
30308
|
path: ["bundles", "draft", "set"],
|
|
30007
|
-
description: 'Replace draft items from {"items": [...]};
|
|
30309
|
+
description: 'Replace draft items from {"items": [...]}; an optional "links": [{"label", "url"}] replaces the draft links. Use --expected-generation from draft get to protect edits.',
|
|
30008
30310
|
requiresWorkspace: true,
|
|
30009
30311
|
mutates: true,
|
|
30010
30312
|
args: [BUNDLE_ARG, GENERATION_ARG],
|
|
@@ -30013,11 +30315,13 @@ var bundlesDomain = {
|
|
|
30013
30315
|
],
|
|
30014
30316
|
handler: async (hctx) => {
|
|
30015
30317
|
const items = parseDraftItems(hctx.data);
|
|
30318
|
+
const links = parseDraftLinks(hctx.data);
|
|
30016
30319
|
const uuid = bundleUuid(hctx);
|
|
30017
30320
|
const expectedGeneration = await currentGeneration(hctx, uuid);
|
|
30018
30321
|
const result2 = await client2(hctx).replaceBundleDraft(hctx.workspace, uuid, {
|
|
30019
30322
|
expectedGeneration,
|
|
30020
|
-
items
|
|
30323
|
+
items,
|
|
30324
|
+
...links ? { links } : {}
|
|
30021
30325
|
});
|
|
30022
30326
|
writeVersionDetail(hctx, result2);
|
|
30023
30327
|
}
|
|
@@ -30066,28 +30370,30 @@ var bundlesDomain = {
|
|
|
30066
30370
|
},
|
|
30067
30371
|
{
|
|
30068
30372
|
path: ["bundles", "grant"],
|
|
30069
|
-
description: "Share a published Bundle
|
|
30373
|
+
description: "Share a published Bundle with its organization, or with everyone as a superuser",
|
|
30070
30374
|
requiresWorkspace: true,
|
|
30071
30375
|
mutates: true,
|
|
30072
30376
|
args: [
|
|
30073
30377
|
BUNDLE_ARG,
|
|
30074
30378
|
...sharingArgs.filter((arg) => arg.name !== "disclosure").map(
|
|
30075
|
-
(arg) => arg.name === "to" ? {
|
|
30379
|
+
(arg) => arg.name === "to" ? {
|
|
30380
|
+
...arg,
|
|
30381
|
+
description: "organization (publishing organization only) | global (everyone; superuser only)"
|
|
30382
|
+
} : arg.name === "uuid" ? {
|
|
30383
|
+
...arg,
|
|
30384
|
+
description: "Publishing organization UUID (omit with --to global)"
|
|
30385
|
+
} : arg
|
|
30076
30386
|
)
|
|
30077
30387
|
],
|
|
30078
30388
|
examples: [
|
|
30079
|
-
"gr bundles grant -w $WID --allow-write --bundle <bundle-uuid> --to organization --uuid <org-uuid>"
|
|
30389
|
+
"gr bundles grant -w $WID --allow-write --bundle <bundle-uuid> --to organization --uuid <org-uuid>",
|
|
30390
|
+
"gr bundles grant -w $WID --allow-write --bundle <bundle-uuid> --to global"
|
|
30080
30391
|
],
|
|
30081
30392
|
handler: async (hctx) => {
|
|
30082
|
-
if (requireString(hctx.args, "to") === "global") {
|
|
30083
|
-
throw new CLIError(
|
|
30084
|
-
"Bundle sharing is organization-only; official solution approval uses the staff catalog command"
|
|
30085
|
-
);
|
|
30086
|
-
}
|
|
30087
30393
|
const request = sharingRequest(hctx.args, "full");
|
|
30088
|
-
if (request.granteeType
|
|
30394
|
+
if (request.granteeType === "workspace") {
|
|
30089
30395
|
throw new CLIError(
|
|
30090
|
-
"Share Bundles with their organization, then install per workspace"
|
|
30396
|
+
"Share Bundles with their organization or with everyone, then install per workspace"
|
|
30091
30397
|
);
|
|
30092
30398
|
}
|
|
30093
30399
|
const bundleRequest = {
|
|
@@ -31249,7 +31555,6 @@ init_output();
|
|
|
31249
31555
|
var COLUMNS12 = [
|
|
31250
31556
|
COL.id(),
|
|
31251
31557
|
COL.name(),
|
|
31252
|
-
{ header: "AGE", getValue: (item) => item.age != null ? String(item.age) : "" },
|
|
31253
31558
|
{
|
|
31254
31559
|
header: "HAS_PHONE",
|
|
31255
31560
|
getValue: (item) => item.hasPhone ? "yes" : "no"
|
|
@@ -39106,6 +39411,14 @@ init_context();
|
|
|
39106
39411
|
function runOutcome(run) {
|
|
39107
39412
|
return run.outcome ?? run.status ?? "";
|
|
39108
39413
|
}
|
|
39414
|
+
function replayedPages(run) {
|
|
39415
|
+
return typeof run.replayedPages === "number" ? run.replayedPages : 0;
|
|
39416
|
+
}
|
|
39417
|
+
function countSummary(run) {
|
|
39418
|
+
const replayed = replayedPages(run);
|
|
39419
|
+
const replay = replayed > 0 ? `, replayed pages: ${replayed}` : "";
|
|
39420
|
+
return `${run.synced} synced, ${run.failed} failed, ${run.skipped} skipped (${run.total} total${replay})`;
|
|
39421
|
+
}
|
|
39109
39422
|
var RUN_COLUMNS2 = [
|
|
39110
39423
|
{ header: "RUN ID", getValue: (item) => item.runId ?? "" },
|
|
39111
39424
|
{ header: "OUTCOME", getValue: (item) => runOutcome(item) },
|
|
@@ -39115,6 +39428,7 @@ var RUN_COLUMNS2 = [
|
|
|
39115
39428
|
{ header: "SYNCED", getValue: (item) => String(item.synced ?? 0) },
|
|
39116
39429
|
{ header: "FAILED", getValue: (item) => String(item.failed ?? 0) },
|
|
39117
39430
|
{ header: "SKIPPED", getValue: (item) => String(item.skipped ?? 0) },
|
|
39431
|
+
{ header: "REPLAYED PAGES", getValue: (item) => String(replayedPages(item)) },
|
|
39118
39432
|
{ header: "DRY RUN", getValue: (item) => item.dryRun ? "yes" : "no" },
|
|
39119
39433
|
{ header: "STARTED", getValue: (item) => item.startedAt ?? "" }
|
|
39120
39434
|
];
|
|
@@ -39153,9 +39467,7 @@ async function streamSyncRun(response, verbose) {
|
|
|
39153
39467
|
lastRun = data;
|
|
39154
39468
|
if (verbose) {
|
|
39155
39469
|
const s = data;
|
|
39156
|
-
process.stderr.write(
|
|
39157
|
-
`\r ${runOutcome(s)} \u2014 ${s.synced} synced, ${s.failed} failed, ${s.skipped} skipped (${s.total} total)`
|
|
39158
|
-
);
|
|
39470
|
+
process.stderr.write(`\r ${runOutcome(s)} \u2014 ${countSummary(s)}`);
|
|
39159
39471
|
}
|
|
39160
39472
|
} else if (data.type === "sync_item") {
|
|
39161
39473
|
if (verbose) {
|
|
@@ -46036,7 +46348,7 @@ init_concierge_api();
|
|
|
46036
46348
|
|
|
46037
46349
|
// package.json
|
|
46038
46350
|
var package_default = {
|
|
46039
|
-
version: "0.
|
|
46351
|
+
version: "0.43.0"};
|
|
46040
46352
|
|
|
46041
46353
|
// src/gr.ts
|
|
46042
46354
|
var VERSION = package_default.version;
|