@gravity-rail/sdk 0.6.0 → 0.7.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.
package/dist/internal.cjs CHANGED
@@ -198,6 +198,7 @@ __export(internal_exports, {
198
198
  bindCustomersMethods: () => bindCustomersMethods,
199
199
  bindDataTypesMethods: () => bindDataTypesMethods,
200
200
  bindEventsMethods: () => bindEventsMethods,
201
+ bindExperimentsMethods: () => bindExperimentsMethods,
201
202
  bindFilesMethods: () => bindFilesMethods,
202
203
  bindIntegrationsMethods: () => bindIntegrationsMethods,
203
204
  bindJourneysMethods: () => bindJourneysMethods,
@@ -241,6 +242,7 @@ __export(internal_exports, {
241
242
  isFeatureAvailable: () => isFeatureAvailable,
242
243
  isRegistryInitialized: () => isRegistryInitialized,
243
244
  isSMSDeliveryFailureStatus: () => isSMSDeliveryFailureStatus,
245
+ parseExperimentStatCount: () => parseExperimentStatCount,
244
246
  requiresAssistantParticipant: () => requiresAssistantParticipant,
245
247
  usesBuiltinAssistant: () => usesBuiltinAssistant,
246
248
  validateFeatureDependencies: () => validateFeatureDependencies
@@ -307,6 +309,9 @@ var Scope = /* @__PURE__ */ ((Scope2) => {
307
309
  Scope2["JOURNEYS_READ"] = "journeys:read";
308
310
  Scope2["JOURNEYS_WRITE"] = "journeys:write";
309
311
  Scope2["JOURNEYS_ADMIN"] = "journeys:admin";
312
+ Scope2["EXPERIMENTS_READ"] = "experiments:read";
313
+ Scope2["EXPERIMENTS_WRITE"] = "experiments:write";
314
+ Scope2["EXPERIMENTS_ADMIN"] = "experiments:admin";
310
315
  Scope2["WORKFLOWS_READ"] = "workflows:read";
311
316
  Scope2["WORKFLOWS_WRITE"] = "workflows:write";
312
317
  Scope2["WORKFLOWS_ADMIN"] = "workflows:admin";
@@ -484,6 +489,7 @@ var WorkspaceFeature = /* @__PURE__ */ ((WorkspaceFeature2) => {
484
489
  WorkspaceFeature2["CALENDAR"] = "calendar";
485
490
  WorkspaceFeature2["DIRECT_MESSAGES"] = "direct_messages";
486
491
  WorkspaceFeature2["JOURNEYS"] = "journeys";
492
+ WorkspaceFeature2["EXPERIMENTS"] = "experiments";
487
493
  WorkspaceFeature2["OPERATOR"] = "operator";
488
494
  WorkspaceFeature2["PRESENCE"] = "presence";
489
495
  WorkspaceFeature2["GMAIL"] = "gmail";
@@ -795,6 +801,11 @@ var ConsentMethod = /* @__PURE__ */ ((ConsentMethod2) => {
795
801
  return ConsentMethod2;
796
802
  })(ConsentMethod || {});
797
803
 
804
+ // src/types/experiment-types.ts
805
+ function parseExperimentStatCount(value) {
806
+ return typeof value === "number" ? value : null;
807
+ }
808
+
798
809
  // src/types/agent-task-types.ts
799
810
  var TERMINAL_TASK_STATES = [
800
811
  "TASK_STATE_COMPLETED",
@@ -1338,6 +1349,7 @@ var ScopeCategory = /* @__PURE__ */ ((ScopeCategory2) => {
1338
1349
  ScopeCategory2["RECORDS"] = "records";
1339
1350
  ScopeCategory2["FILES"] = "files";
1340
1351
  ScopeCategory2["JOURNEYS"] = "journeys";
1352
+ ScopeCategory2["EXPERIMENTS"] = "experiments";
1341
1353
  ScopeCategory2["SITES"] = "sites";
1342
1354
  ScopeCategory2["AGENTS"] = "agents";
1343
1355
  ScopeCategory2["CALENDARS"] = "calendars";
@@ -1597,6 +1609,26 @@ var SCOPES = {
1597
1609
  implies: ["journeys:write"]
1598
1610
  },
1599
1611
  // =========================================================================
1612
+ // EXPERIMENTS
1613
+ // =========================================================================
1614
+ "experiments:read": {
1615
+ name: "experiments:read",
1616
+ category: "experiments" /* EXPERIMENTS */,
1617
+ description: "View experiments and assignments"
1618
+ },
1619
+ "experiments:write": {
1620
+ name: "experiments:write",
1621
+ category: "experiments" /* EXPERIMENTS */,
1622
+ description: "Create and edit experiments",
1623
+ implies: ["experiments:read"]
1624
+ },
1625
+ "experiments:admin": {
1626
+ name: "experiments:admin",
1627
+ category: "experiments" /* EXPERIMENTS */,
1628
+ description: "Delete draft experiments and archive experiments",
1629
+ implies: ["experiments:write"]
1630
+ },
1631
+ // =========================================================================
1600
1632
  // SITES
1601
1633
  // =========================================================================
1602
1634
  "sites:read": {
@@ -3635,6 +3667,22 @@ var ChatsApi = class extends BaseApiClient {
3635
3667
  body: JSON.stringify(chat)
3636
3668
  });
3637
3669
  }
3670
+ /**
3671
+ * Create a workflow assignment chat on `phone-voice` and initiate an outbound call
3672
+ * to the member (same as POST /chats with channel phone-voice + send_initial_message).
3673
+ */
3674
+ async createWorkflowOutboundVoiceChat(wid, input) {
3675
+ const { memberId, workflowId, phoneNumberId, title, chatType } = input;
3676
+ return this.createChat(wid, {
3677
+ channel: "phone-voice",
3678
+ chatType: chatType ?? "assignment",
3679
+ workflowId,
3680
+ phoneNumberId,
3681
+ memberId,
3682
+ title: title ?? `Outbound voice \u2192 member ${memberId}`,
3683
+ participants: [{ memberId, role: "user" }]
3684
+ });
3685
+ }
3638
3686
  /** Delete a chat, optionally providing a reason. */
3639
3687
  async deleteChat(wid, id, reason) {
3640
3688
  return this.fetch(`w/${wid}/chats/${id}`, {
@@ -4566,6 +4614,99 @@ var EventsApi = class extends BaseApiClient {
4566
4614
  }
4567
4615
  };
4568
4616
 
4617
+ // src/api/experiments.ts
4618
+ var ExperimentsApi = class extends BaseApiClient {
4619
+ /** List experiments with group summaries and assignment counts. */
4620
+ async getExperiments(wid, params) {
4621
+ const query = new URLSearchParams();
4622
+ if (params?.page !== void 0) query.set("page", String(params.page));
4623
+ if (params?.pageSize !== void 0) query.set("pageSize", String(params.pageSize));
4624
+ if (params?.includeArchived) query.set("includeArchived", "true");
4625
+ const qs = query.toString() ? `?${query.toString()}` : "";
4626
+ return this.fetch(`w/${wid}/experiments${qs}`);
4627
+ }
4628
+ /** Get a single experiment by ID (includes groups). */
4629
+ async getExperiment(wid, experimentId) {
4630
+ return this.fetch(`w/${wid}/experiments/${experimentId}`);
4631
+ }
4632
+ /** Create a draft experiment. */
4633
+ async createExperiment(wid, data) {
4634
+ return this.fetch(`w/${wid}/experiments`, {
4635
+ method: "POST",
4636
+ body: JSON.stringify(data)
4637
+ });
4638
+ }
4639
+ /** Update experiment metadata or lifecycle status. */
4640
+ async updateExperiment(wid, experimentId, data) {
4641
+ return this.fetch(`w/${wid}/experiments/${experimentId}`, {
4642
+ method: "PATCH",
4643
+ body: JSON.stringify(data)
4644
+ });
4645
+ }
4646
+ /** Hard-delete a draft experiment, or archive otherwise. */
4647
+ async deleteExperiment(wid, experimentId) {
4648
+ return this.fetch(`w/${wid}/experiments/${experimentId}`, {
4649
+ method: "DELETE"
4650
+ });
4651
+ }
4652
+ /** Create a group within an experiment. */
4653
+ async createExperimentGroup(wid, experimentId, data) {
4654
+ return this.fetch(`w/${wid}/experiments/${experimentId}/groups`, {
4655
+ method: "POST",
4656
+ body: JSON.stringify(data)
4657
+ });
4658
+ }
4659
+ /** Update a group within an experiment. */
4660
+ async updateExperimentGroup(wid, experimentId, groupId, data) {
4661
+ return this.fetch(`w/${wid}/experiments/${experimentId}/groups/${groupId}`, {
4662
+ method: "PATCH",
4663
+ body: JSON.stringify(data)
4664
+ });
4665
+ }
4666
+ /** Delete a group that has no member assignments. */
4667
+ async deleteExperimentGroup(wid, experimentId, groupId) {
4668
+ return this.fetch(
4669
+ `w/${wid}/experiments/${experimentId}/groups/${groupId}`,
4670
+ { method: "DELETE" }
4671
+ );
4672
+ }
4673
+ /** Aggregate assignment and exposure counts by group. */
4674
+ async getExperimentStats(wid, experimentId) {
4675
+ return this.fetch(`w/${wid}/experiments/${experimentId}/stats`);
4676
+ }
4677
+ /** List experiment assignments for a member (member profile panel). */
4678
+ async getMemberExperiments(wid, memberId) {
4679
+ return this.fetch(`w/${wid}/members/${memberId}/experiments`);
4680
+ }
4681
+ /** Manually assign a member to an experiment (optional group, or weighted random). */
4682
+ async createExperimentAssignment(wid, experimentId, data) {
4683
+ return this.fetch(
4684
+ `w/${wid}/experiments/${experimentId}/assignments`,
4685
+ {
4686
+ method: "POST",
4687
+ body: JSON.stringify(data)
4688
+ }
4689
+ );
4690
+ }
4691
+ /** Move an assigned member to a different experiment group. */
4692
+ async updateExperimentAssignment(wid, experimentId, memberId, data) {
4693
+ return this.fetch(
4694
+ `w/${wid}/experiments/${experimentId}/assignments/${memberId}`,
4695
+ {
4696
+ method: "PATCH",
4697
+ body: JSON.stringify(data)
4698
+ }
4699
+ );
4700
+ }
4701
+ /** Remove a member's assignment from an experiment. */
4702
+ async deleteExperimentAssignment(wid, experimentId, memberId) {
4703
+ return this.fetch(
4704
+ `w/${wid}/experiments/${experimentId}/assignments/${memberId}`,
4705
+ { method: "DELETE" }
4706
+ );
4707
+ }
4708
+ };
4709
+
4569
4710
  // src/api/features.ts
4570
4711
  var FeaturesApi = class extends BaseApiClient {
4571
4712
  /**
@@ -7892,6 +8033,20 @@ var SupportRequestsApi = class extends BaseApiClient {
7892
8033
  body: JSON.stringify(data)
7893
8034
  });
7894
8035
  }
8036
+ /**
8037
+ * Record a click on a pushed resource (Proactive Support). For a
8038
+ * manager_prompt, pass the Manager Chat UUID it opened so the
8039
+ * resource→chat linkage is preserved.
8040
+ */
8041
+ async clickWorkspaceSupportRequestResource(workspaceUuid, uuid, resourceUuid, data = {}) {
8042
+ return this.fetch(
8043
+ `w/${workspaceUuid}/support-requests/${uuid}/resources/${resourceUuid}/click`,
8044
+ {
8045
+ method: "POST",
8046
+ body: JSON.stringify(data)
8047
+ }
8048
+ );
8049
+ }
7895
8050
  };
7896
8051
 
7897
8052
  // src/api/customers.ts
@@ -9128,6 +9283,7 @@ function createApiModules(apiKey, baseUrl, customFetch) {
9128
9283
  slackApps: new SlackAppsApi(apiKey, baseUrl, customFetch),
9129
9284
  teamsApps: new TeamsAppsApi(apiKey, baseUrl, customFetch),
9130
9285
  events: new EventsApi(apiKey, baseUrl, customFetch),
9286
+ experiments: new ExperimentsApi(apiKey, baseUrl, customFetch),
9131
9287
  fhirConnections: new FhirConnectionsApi(apiKey, baseUrl, customFetch),
9132
9288
  healthie: new HealthieApi(apiKey, baseUrl, customFetch),
9133
9289
  hubspot: new HubspotApi(apiKey, baseUrl, customFetch),
@@ -9227,6 +9383,7 @@ function bindChatsMethods(target, chats) {
9227
9383
  target.archiveChat = chats.archiveChat.bind(chats);
9228
9384
  target.unarchiveChat = chats.unarchiveChat.bind(chats);
9229
9385
  target.createChat = chats.createChat.bind(chats);
9386
+ target.createWorkflowOutboundVoiceChat = chats.createWorkflowOutboundVoiceChat.bind(chats);
9230
9387
  target.deleteChat = chats.deleteChat.bind(chats);
9231
9388
  target.updateChat = chats.updateChat.bind(chats);
9232
9389
  target.updateChatMute = chats.updateChatMute.bind(chats);
@@ -9561,6 +9718,23 @@ function bindEventsMethods(target, events) {
9561
9718
  target.previewSchedule = events.previewSchedule.bind(events);
9562
9719
  }
9563
9720
 
9721
+ // src/client/bindings/experiments.ts
9722
+ function bindExperimentsMethods(target, experiments) {
9723
+ target.getExperiments = experiments.getExperiments.bind(experiments);
9724
+ target.getExperiment = experiments.getExperiment.bind(experiments);
9725
+ target.createExperiment = experiments.createExperiment.bind(experiments);
9726
+ target.updateExperiment = experiments.updateExperiment.bind(experiments);
9727
+ target.deleteExperiment = experiments.deleteExperiment.bind(experiments);
9728
+ target.createExperimentGroup = experiments.createExperimentGroup.bind(experiments);
9729
+ target.updateExperimentGroup = experiments.updateExperimentGroup.bind(experiments);
9730
+ target.deleteExperimentGroup = experiments.deleteExperimentGroup.bind(experiments);
9731
+ target.getExperimentStats = experiments.getExperimentStats.bind(experiments);
9732
+ target.getMemberExperiments = experiments.getMemberExperiments.bind(experiments);
9733
+ target.createExperimentAssignment = experiments.createExperimentAssignment.bind(experiments);
9734
+ target.updateExperimentAssignment = experiments.updateExperimentAssignment.bind(experiments);
9735
+ target.deleteExperimentAssignment = experiments.deleteExperimentAssignment.bind(experiments);
9736
+ }
9737
+
9564
9738
  // src/client/bindings/workflows.ts
9565
9739
  function bindWorkflowsMethods(target, workflows, workflowNotes, voice, supervisors) {
9566
9740
  target.getWorkflows = workflows.getWorkflows.bind(workflows);
@@ -10100,6 +10274,7 @@ function bindSupportRequestMethods(target, supportRequests) {
10100
10274
  target.createWorkspaceSupportRequest = supportRequests.createWorkspaceSupportRequest.bind(supportRequests);
10101
10275
  target.commentOnWorkspaceSupportRequest = supportRequests.commentOnWorkspaceSupportRequest.bind(supportRequests);
10102
10276
  target.closeWorkspaceSupportRequest = supportRequests.closeWorkspaceSupportRequest.bind(supportRequests);
10277
+ target.clickWorkspaceSupportRequestResource = supportRequests.clickWorkspaceSupportRequestResource.bind(supportRequests);
10103
10278
  }
10104
10279
 
10105
10280
  // src/client/client.ts
@@ -10130,6 +10305,7 @@ var GravityRailClient = class {
10130
10305
  archiveChat;
10131
10306
  unarchiveChat;
10132
10307
  createChat;
10308
+ createWorkflowOutboundVoiceChat;
10133
10309
  deleteChat;
10134
10310
  updateChat;
10135
10311
  updateChatMute;
@@ -10300,6 +10476,20 @@ var GravityRailClient = class {
10300
10476
  createJourneyNote;
10301
10477
  updateJourneyNote;
10302
10478
  deleteJourneyNote;
10479
+ // Experiments API
10480
+ getExperiments;
10481
+ getExperiment;
10482
+ createExperiment;
10483
+ updateExperiment;
10484
+ deleteExperiment;
10485
+ createExperimentGroup;
10486
+ updateExperimentGroup;
10487
+ deleteExperimentGroup;
10488
+ getExperimentStats;
10489
+ getMemberExperiments;
10490
+ createExperimentAssignment;
10491
+ updateExperimentAssignment;
10492
+ deleteExperimentAssignment;
10303
10493
  // Operator Groups API
10304
10494
  getOperatorGroups;
10305
10495
  getOperatorGroup;
@@ -10966,6 +11156,7 @@ var GravityRailClient = class {
10966
11156
  createWorkspaceSupportRequest;
10967
11157
  commentOnWorkspaceSupportRequest;
10968
11158
  closeWorkspaceSupportRequest;
11159
+ clickWorkspaceSupportRequestResource;
10969
11160
  constructor(apiKey, baseUrl, customFetch) {
10970
11161
  const apis = createApiModules(apiKey, baseUrl, customFetch);
10971
11162
  this.apis = apis;
@@ -10980,6 +11171,7 @@ var GravityRailClient = class {
10980
11171
  bindQualificationsMethods(this, apis.qualifications);
10981
11172
  bindPersonasMethods(this, apis.personas);
10982
11173
  bindJourneysMethods(this, apis.journeys);
11174
+ bindExperimentsMethods(this, apis.experiments);
10983
11175
  bindOperatorMethods(this, apis.operatorGroups);
10984
11176
  bindOrgMethods(this, apis.org);
10985
11177
  bindAccessGrantsMethods(this, apis.accessGrants);
@@ -11291,6 +11483,7 @@ var GravityRailClient = class {
11291
11483
  bindCustomersMethods,
11292
11484
  bindDataTypesMethods,
11293
11485
  bindEventsMethods,
11486
+ bindExperimentsMethods,
11294
11487
  bindFilesMethods,
11295
11488
  bindIntegrationsMethods,
11296
11489
  bindJourneysMethods,
@@ -11334,6 +11527,7 @@ var GravityRailClient = class {
11334
11527
  isFeatureAvailable,
11335
11528
  isRegistryInitialized,
11336
11529
  isSMSDeliveryFailureStatus,
11530
+ parseExperimentStatCount,
11337
11531
  requiresAssistantParticipant,
11338
11532
  usesBuiltinAssistant,
11339
11533
  validateFeatureDependencies