@gravity-rail/sdk 0.5.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/agui.cjs +78 -0
  2. package/dist/agui.cjs.map +1 -0
  3. package/dist/agui.d.cts +13 -0
  4. package/dist/agui.d.ts +13 -0
  5. package/dist/agui.js +48 -0
  6. package/dist/agui.js.map +1 -0
  7. package/dist/audio.cjs +223 -0
  8. package/dist/audio.cjs.map +1 -0
  9. package/dist/audio.d.cts +25 -0
  10. package/dist/audio.d.ts +25 -0
  11. package/dist/audio.js +147 -0
  12. package/dist/audio.js.map +1 -0
  13. package/dist/chunk-BSOOMHW6.js +62 -0
  14. package/dist/chunk-BSOOMHW6.js.map +1 -0
  15. package/dist/{chunk-XRKRVY46.js → chunk-PEWFZXNK.js} +194 -31
  16. package/dist/chunk-PEWFZXNK.js.map +1 -0
  17. package/dist/{index-BhUZfOAG.d.cts → client-CLxHFOeB.d.cts} +310 -1632
  18. package/dist/{index-fPswHAIF.d.ts → client-Dft3Kmkn.d.ts} +310 -1632
  19. package/dist/helpers.cjs +123 -0
  20. package/dist/helpers.cjs.map +1 -0
  21. package/dist/helpers.d.cts +28 -0
  22. package/dist/helpers.d.ts +28 -0
  23. package/dist/helpers.js +92 -0
  24. package/dist/helpers.js.map +1 -0
  25. package/dist/index-CeVDRf6l.d.cts +1607 -0
  26. package/dist/index-D1G8EKz2.d.ts +1607 -0
  27. package/dist/index.cjs +186 -30
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.cts +3 -2
  30. package/dist/index.d.ts +3 -2
  31. package/dist/index.js +1 -1
  32. package/dist/{inquiries-DiTDrTG2.d.cts → inquiries-BIlL6Obb.d.cts} +28 -3
  33. package/dist/{inquiries-DiTDrTG2.d.ts → inquiries-BIlL6Obb.d.ts} +28 -3
  34. package/dist/internal.cjs +195 -30
  35. package/dist/internal.cjs.map +1 -1
  36. package/dist/internal.d.cts +4 -3
  37. package/dist/internal.d.ts +4 -3
  38. package/dist/internal.js +5 -1
  39. package/dist/oauth-client.cjs +78 -0
  40. package/dist/oauth-client.cjs.map +1 -0
  41. package/dist/oauth-client.d.cts +15 -0
  42. package/dist/oauth-client.d.ts +15 -0
  43. package/dist/oauth-client.js +48 -0
  44. package/dist/oauth-client.js.map +1 -0
  45. package/dist/realtime.cjs +637 -0
  46. package/dist/realtime.cjs.map +1 -0
  47. package/dist/realtime.d.cts +94 -0
  48. package/dist/realtime.d.ts +94 -0
  49. package/dist/realtime.js +580 -0
  50. package/dist/realtime.js.map +1 -0
  51. package/dist/schemas.cjs +7 -3
  52. package/dist/schemas.cjs.map +1 -1
  53. package/dist/schemas.d.cts +28 -6
  54. package/dist/schemas.d.ts +28 -6
  55. package/dist/schemas.js +6 -3
  56. package/dist/schemas.js.map +1 -1
  57. package/dist/types-DkYyrvoC.d.cts +19 -0
  58. package/dist/types-DkYyrvoC.d.ts +19 -0
  59. package/package.json +26 -1
  60. package/dist/chunk-XRKRVY46.js.map +0 -1
@@ -0,0 +1,62 @@
1
+ // src/audio/pcm.ts
2
+ var SERVER_SAMPLE_RATE = 24e3;
3
+ var TARGET_SAMPLE_RATE = 24e3;
4
+ var MONITOR_SAMPLE_RATE = 16e3;
5
+ function float32ArrayToBase64(float32Array) {
6
+ const int16Array = new Int16Array(float32Array.length);
7
+ for (let i = 0; i < float32Array.length; i += 1) {
8
+ const sample = Math.max(-1, Math.min(1, float32Array[i]));
9
+ int16Array[i] = Math.round(sample * 32767);
10
+ }
11
+ const uint8Array = new Uint8Array(int16Array.buffer);
12
+ let binaryString = "";
13
+ for (let i = 0; i < uint8Array.length; i += 1) {
14
+ binaryString += String.fromCharCode(uint8Array[i]);
15
+ }
16
+ return btoa(binaryString);
17
+ }
18
+ function base64ToFloat32Array(base64) {
19
+ const binaryString = atob(base64);
20
+ const len = binaryString.length / 2;
21
+ const float32Array = new Float32Array(len);
22
+ for (let i = 0; i < len; i += 1) {
23
+ const lo = binaryString.charCodeAt(i * 2);
24
+ const hi = binaryString.charCodeAt(i * 2 + 1);
25
+ let int16 = hi << 8 | lo;
26
+ if (int16 >= 32768) int16 -= 65536;
27
+ float32Array[i] = int16 / 32768;
28
+ }
29
+ return float32Array;
30
+ }
31
+ function concatFloat32Arrays(arrays) {
32
+ const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);
33
+ const result = new Float32Array(totalLength);
34
+ let offset = 0;
35
+ for (const arr of arrays) {
36
+ result.set(arr, offset);
37
+ offset += arr.length;
38
+ }
39
+ return result;
40
+ }
41
+ function downsampleAudio(audioData, originalSampleRate, targetSampleRate) {
42
+ if (originalSampleRate === targetSampleRate) return audioData;
43
+ const ratio = originalSampleRate / targetSampleRate;
44
+ const newLength = Math.round(audioData.length / ratio);
45
+ const result = new Float32Array(newLength);
46
+ for (let i = 0; i < newLength; i += 1) {
47
+ const srcIndex = Math.floor(i * ratio);
48
+ result[i] = audioData[srcIndex];
49
+ }
50
+ return result;
51
+ }
52
+
53
+ export {
54
+ SERVER_SAMPLE_RATE,
55
+ TARGET_SAMPLE_RATE,
56
+ MONITOR_SAMPLE_RATE,
57
+ float32ArrayToBase64,
58
+ base64ToFloat32Array,
59
+ concatFloat32Arrays,
60
+ downsampleAudio
61
+ };
62
+ //# sourceMappingURL=chunk-BSOOMHW6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/audio/pcm.ts"],"sourcesContent":["/** PCM16 helpers aligned with main-app web voice (24 kHz). */\n\nexport const SERVER_SAMPLE_RATE = 24000;\nexport const TARGET_SAMPLE_RATE = 24000;\nexport const MONITOR_SAMPLE_RATE = 16000;\n\nexport function float32ArrayToBase64(float32Array: Float32Array): string {\n const int16Array = new Int16Array(float32Array.length);\n for (let i = 0; i < float32Array.length; i += 1) {\n const sample = Math.max(-1, Math.min(1, float32Array[i]));\n int16Array[i] = Math.round(sample * 32767);\n }\n const uint8Array = new Uint8Array(int16Array.buffer);\n let binaryString = '';\n for (let i = 0; i < uint8Array.length; i += 1) {\n binaryString += String.fromCharCode(uint8Array[i]);\n }\n return btoa(binaryString);\n}\n\nexport function base64ToFloat32Array(base64: string): Float32Array {\n const binaryString = atob(base64);\n const len = binaryString.length / 2;\n const float32Array = new Float32Array(len);\n for (let i = 0; i < len; i += 1) {\n const lo = binaryString.charCodeAt(i * 2);\n const hi = binaryString.charCodeAt(i * 2 + 1);\n let int16 = (hi << 8) | lo;\n if (int16 >= 0x8000) int16 -= 0x10000;\n float32Array[i] = int16 / 32768;\n }\n return float32Array;\n}\n\nexport function concatFloat32Arrays(arrays: Float32Array[]): Float32Array {\n const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);\n const result = new Float32Array(totalLength);\n let offset = 0;\n for (const arr of arrays) {\n result.set(arr, offset);\n offset += arr.length;\n }\n return result;\n}\n\nexport function downsampleAudio(\n audioData: Float32Array,\n originalSampleRate: number,\n targetSampleRate: number\n): Float32Array {\n if (originalSampleRate === targetSampleRate) return audioData;\n const ratio = originalSampleRate / targetSampleRate;\n const newLength = Math.round(audioData.length / ratio);\n const result = new Float32Array(newLength);\n for (let i = 0; i < newLength; i += 1) {\n const srcIndex = Math.floor(i * ratio);\n result[i] = audioData[srcIndex];\n }\n return result;\n}\n"],"mappings":";AAEO,IAAM,qBAAqB;AAC3B,IAAM,qBAAqB;AAC3B,IAAM,sBAAsB;AAE5B,SAAS,qBAAqB,cAAoC;AACtE,QAAM,aAAa,IAAI,WAAW,aAAa,MAAM;AACrD,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK,GAAG;AAC9C,UAAM,SAAS,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;AACxD,eAAW,CAAC,IAAI,KAAK,MAAM,SAAS,KAAK;AAAA,EAC5C;AACA,QAAM,aAAa,IAAI,WAAW,WAAW,MAAM;AACnD,MAAI,eAAe;AACnB,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK,GAAG;AAC5C,oBAAgB,OAAO,aAAa,WAAW,CAAC,CAAC;AAAA,EACpD;AACA,SAAO,KAAK,YAAY;AAC3B;AAEO,SAAS,qBAAqB,QAA8B;AAChE,QAAM,eAAe,KAAK,MAAM;AAChC,QAAM,MAAM,aAAa,SAAS;AAClC,QAAM,eAAe,IAAI,aAAa,GAAG;AACzC,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;AAC9B,UAAM,KAAK,aAAa,WAAW,IAAI,CAAC;AACxC,UAAM,KAAK,aAAa,WAAW,IAAI,IAAI,CAAC;AAC5C,QAAI,QAAS,MAAM,IAAK;AACxB,QAAI,SAAS,MAAQ,UAAS;AAC9B,iBAAa,CAAC,IAAI,QAAQ;AAAA,EAC7B;AACA,SAAO;AACV;AAEO,SAAS,oBAAoB,QAAsC;AACvE,QAAM,cAAc,OAAO,OAAO,CAAC,KAAK,QAAQ,MAAM,IAAI,QAAQ,CAAC;AACnE,QAAM,SAAS,IAAI,aAAa,WAAW;AAC3C,MAAI,SAAS;AACb,aAAW,OAAO,QAAQ;AACvB,WAAO,IAAI,KAAK,MAAM;AACtB,cAAU,IAAI;AAAA,EACjB;AACA,SAAO;AACV;AAEO,SAAS,gBACb,WACA,oBACA,kBACa;AACb,MAAI,uBAAuB,iBAAkB,QAAO;AACpD,QAAM,QAAQ,qBAAqB;AACnC,QAAM,YAAY,KAAK,MAAM,UAAU,SAAS,KAAK;AACrD,QAAM,SAAS,IAAI,aAAa,SAAS;AACzC,WAAS,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;AACpC,UAAM,WAAW,KAAK,MAAM,IAAI,KAAK;AACrC,WAAO,CAAC,IAAI,UAAU,QAAQ;AAAA,EACjC;AACA,SAAO;AACV;","names":[]}
@@ -1693,6 +1693,22 @@ var ChatsApi = class extends BaseApiClient {
1693
1693
  body: JSON.stringify(chat)
1694
1694
  });
1695
1695
  }
1696
+ /**
1697
+ * Create a workflow assignment chat on `phone-voice` and initiate an outbound call
1698
+ * to the member (same as POST /chats with channel phone-voice + send_initial_message).
1699
+ */
1700
+ async createWorkflowOutboundVoiceChat(wid, input) {
1701
+ const { memberId, workflowId, phoneNumberId, title, chatType } = input;
1702
+ return this.createChat(wid, {
1703
+ channel: "phone-voice",
1704
+ chatType: chatType ?? "assignment",
1705
+ workflowId,
1706
+ phoneNumberId,
1707
+ memberId,
1708
+ title: title ?? `Outbound voice \u2192 member ${memberId}`,
1709
+ participants: [{ memberId, role: "user" }]
1710
+ });
1711
+ }
1696
1712
  /** Delete a chat, optionally providing a reason. */
1697
1713
  async deleteChat(wid, id, reason) {
1698
1714
  return this.fetch(`w/${wid}/chats/${id}`, {
@@ -4465,7 +4481,7 @@ var OrgApi = class extends BaseApiClient {
4465
4481
  );
4466
4482
  }
4467
4483
  /**
4468
- * Purchase a phone number from Twilio for this org.
4484
+ * Purchase a phone number from Twilio for this org inventory (org admin only).
4469
4485
  */
4470
4486
  async purchasePhoneNumber(orgUuid, phoneNumber, numberType) {
4471
4487
  return this.fetch(`o/${orgUuid}/phone-numbers/purchase`, {
@@ -4892,31 +4908,6 @@ var PhoneNumbersApi = class extends BaseApiClient {
4892
4908
  body: JSON.stringify({ providerPhoneUuid })
4893
4909
  });
4894
4910
  }
4895
- async searchAvailablePhoneNumbers(wid, params) {
4896
- const searchParams = new URLSearchParams();
4897
- if (params.country) searchParams.set("country", params.country);
4898
- if (params.numberType) searchParams.set("number_type", params.numberType);
4899
- if (params.areaCode) searchParams.set("area_code", params.areaCode);
4900
- if (params.contains) searchParams.set("contains", params.contains);
4901
- if (params.city) searchParams.set("city", params.city);
4902
- if (params.state) searchParams.set("state", params.state);
4903
- if (params.limit) searchParams.set("limit", String(params.limit));
4904
- const qs = searchParams.toString();
4905
- return this.fetch(
4906
- `w/${wid}/phone-numbers/search${qs ? `?${qs}` : ""}`
4907
- );
4908
- }
4909
- async purchasePhoneNumber(wid, request, idempotencyKey) {
4910
- const headers = {};
4911
- if (idempotencyKey) {
4912
- headers["Idempotency-Key"] = idempotencyKey;
4913
- }
4914
- return this.fetch(`w/${wid}/phone-numbers/purchase`, {
4915
- method: "POST",
4916
- body: JSON.stringify(request),
4917
- headers
4918
- });
4919
- }
4920
4911
  async releasePhoneNumber(wid, id) {
4921
4912
  return this.fetch(`w/${wid}/phone-numbers/${id}/release`, {
4922
4913
  method: "POST"
@@ -5913,6 +5904,20 @@ var SupportRequestsApi = class extends BaseApiClient {
5913
5904
  body: JSON.stringify(data)
5914
5905
  });
5915
5906
  }
5907
+ /**
5908
+ * Record a click on a pushed resource (Proactive Support). For a
5909
+ * manager_prompt, pass the Manager Chat UUID it opened so the
5910
+ * resource→chat linkage is preserved.
5911
+ */
5912
+ async clickWorkspaceSupportRequestResource(workspaceUuid, uuid, resourceUuid, data = {}) {
5913
+ return this.fetch(
5914
+ `w/${workspaceUuid}/support-requests/${uuid}/resources/${resourceUuid}/click`,
5915
+ {
5916
+ method: "POST",
5917
+ body: JSON.stringify(data)
5918
+ }
5919
+ );
5920
+ }
5916
5921
  };
5917
5922
 
5918
5923
  // src/api/customers.ts
@@ -6726,6 +6731,9 @@ var Scope = /* @__PURE__ */ ((Scope2) => {
6726
6731
  Scope2["JOURNEYS_READ"] = "journeys:read";
6727
6732
  Scope2["JOURNEYS_WRITE"] = "journeys:write";
6728
6733
  Scope2["JOURNEYS_ADMIN"] = "journeys:admin";
6734
+ Scope2["EXPERIMENTS_READ"] = "experiments:read";
6735
+ Scope2["EXPERIMENTS_WRITE"] = "experiments:write";
6736
+ Scope2["EXPERIMENTS_ADMIN"] = "experiments:admin";
6729
6737
  Scope2["WORKFLOWS_READ"] = "workflows:read";
6730
6738
  Scope2["WORKFLOWS_WRITE"] = "workflows:write";
6731
6739
  Scope2["WORKFLOWS_ADMIN"] = "workflows:admin";
@@ -6903,6 +6911,7 @@ var WorkspaceFeature = /* @__PURE__ */ ((WorkspaceFeature2) => {
6903
6911
  WorkspaceFeature2["CALENDAR"] = "calendar";
6904
6912
  WorkspaceFeature2["DIRECT_MESSAGES"] = "direct_messages";
6905
6913
  WorkspaceFeature2["JOURNEYS"] = "journeys";
6914
+ WorkspaceFeature2["EXPERIMENTS"] = "experiments";
6906
6915
  WorkspaceFeature2["OPERATOR"] = "operator";
6907
6916
  WorkspaceFeature2["PRESENCE"] = "presence";
6908
6917
  WorkspaceFeature2["GMAIL"] = "gmail";
@@ -7113,6 +7122,11 @@ var ConsentMethod = /* @__PURE__ */ ((ConsentMethod2) => {
7113
7122
  return ConsentMethod2;
7114
7123
  })(ConsentMethod || {});
7115
7124
 
7125
+ // src/types/experiment-types.ts
7126
+ function parseExperimentStatCount(value) {
7127
+ return typeof value === "number" ? value : null;
7128
+ }
7129
+
7116
7130
  // src/types/agent-task-types.ts
7117
7131
  var TERMINAL_TASK_STATES = [
7118
7132
  "TASK_STATE_COMPLETED",
@@ -7641,6 +7655,99 @@ var TeamsAppsApi = class extends BaseApiClient {
7641
7655
  }
7642
7656
  };
7643
7657
 
7658
+ // src/api/experiments.ts
7659
+ var ExperimentsApi = class extends BaseApiClient {
7660
+ /** List experiments with group summaries and assignment counts. */
7661
+ async getExperiments(wid, params) {
7662
+ const query = new URLSearchParams();
7663
+ if (params?.page !== void 0) query.set("page", String(params.page));
7664
+ if (params?.pageSize !== void 0) query.set("pageSize", String(params.pageSize));
7665
+ if (params?.includeArchived) query.set("includeArchived", "true");
7666
+ const qs = query.toString() ? `?${query.toString()}` : "";
7667
+ return this.fetch(`w/${wid}/experiments${qs}`);
7668
+ }
7669
+ /** Get a single experiment by ID (includes groups). */
7670
+ async getExperiment(wid, experimentId) {
7671
+ return this.fetch(`w/${wid}/experiments/${experimentId}`);
7672
+ }
7673
+ /** Create a draft experiment. */
7674
+ async createExperiment(wid, data) {
7675
+ return this.fetch(`w/${wid}/experiments`, {
7676
+ method: "POST",
7677
+ body: JSON.stringify(data)
7678
+ });
7679
+ }
7680
+ /** Update experiment metadata or lifecycle status. */
7681
+ async updateExperiment(wid, experimentId, data) {
7682
+ return this.fetch(`w/${wid}/experiments/${experimentId}`, {
7683
+ method: "PATCH",
7684
+ body: JSON.stringify(data)
7685
+ });
7686
+ }
7687
+ /** Hard-delete a draft experiment, or archive otherwise. */
7688
+ async deleteExperiment(wid, experimentId) {
7689
+ return this.fetch(`w/${wid}/experiments/${experimentId}`, {
7690
+ method: "DELETE"
7691
+ });
7692
+ }
7693
+ /** Create a group within an experiment. */
7694
+ async createExperimentGroup(wid, experimentId, data) {
7695
+ return this.fetch(`w/${wid}/experiments/${experimentId}/groups`, {
7696
+ method: "POST",
7697
+ body: JSON.stringify(data)
7698
+ });
7699
+ }
7700
+ /** Update a group within an experiment. */
7701
+ async updateExperimentGroup(wid, experimentId, groupId, data) {
7702
+ return this.fetch(`w/${wid}/experiments/${experimentId}/groups/${groupId}`, {
7703
+ method: "PATCH",
7704
+ body: JSON.stringify(data)
7705
+ });
7706
+ }
7707
+ /** Delete a group that has no member assignments. */
7708
+ async deleteExperimentGroup(wid, experimentId, groupId) {
7709
+ return this.fetch(
7710
+ `w/${wid}/experiments/${experimentId}/groups/${groupId}`,
7711
+ { method: "DELETE" }
7712
+ );
7713
+ }
7714
+ /** Aggregate assignment and exposure counts by group. */
7715
+ async getExperimentStats(wid, experimentId) {
7716
+ return this.fetch(`w/${wid}/experiments/${experimentId}/stats`);
7717
+ }
7718
+ /** List experiment assignments for a member (member profile panel). */
7719
+ async getMemberExperiments(wid, memberId) {
7720
+ return this.fetch(`w/${wid}/members/${memberId}/experiments`);
7721
+ }
7722
+ /** Manually assign a member to an experiment (optional group, or weighted random). */
7723
+ async createExperimentAssignment(wid, experimentId, data) {
7724
+ return this.fetch(
7725
+ `w/${wid}/experiments/${experimentId}/assignments`,
7726
+ {
7727
+ method: "POST",
7728
+ body: JSON.stringify(data)
7729
+ }
7730
+ );
7731
+ }
7732
+ /** Move an assigned member to a different experiment group. */
7733
+ async updateExperimentAssignment(wid, experimentId, memberId, data) {
7734
+ return this.fetch(
7735
+ `w/${wid}/experiments/${experimentId}/assignments/${memberId}`,
7736
+ {
7737
+ method: "PATCH",
7738
+ body: JSON.stringify(data)
7739
+ }
7740
+ );
7741
+ }
7742
+ /** Remove a member's assignment from an experiment. */
7743
+ async deleteExperimentAssignment(wid, experimentId, memberId) {
7744
+ return this.fetch(
7745
+ `w/${wid}/experiments/${experimentId}/assignments/${memberId}`,
7746
+ { method: "DELETE" }
7747
+ );
7748
+ }
7749
+ };
7750
+
7644
7751
  // src/app-context.ts
7645
7752
  function formatAppContextAsMarkdown(context) {
7646
7753
  if (!context) {
@@ -7729,6 +7836,7 @@ function createApiModules(apiKey, baseUrl, customFetch) {
7729
7836
  slackApps: new SlackAppsApi(apiKey, baseUrl, customFetch),
7730
7837
  teamsApps: new TeamsAppsApi(apiKey, baseUrl, customFetch),
7731
7838
  events: new EventsApi(apiKey, baseUrl, customFetch),
7839
+ experiments: new ExperimentsApi(apiKey, baseUrl, customFetch),
7732
7840
  fhirConnections: new FhirConnectionsApi(apiKey, baseUrl, customFetch),
7733
7841
  healthie: new HealthieApi(apiKey, baseUrl, customFetch),
7734
7842
  hubspot: new HubspotApi(apiKey, baseUrl, customFetch),
@@ -7828,6 +7936,7 @@ function bindChatsMethods(target, chats) {
7828
7936
  target.archiveChat = chats.archiveChat.bind(chats);
7829
7937
  target.unarchiveChat = chats.unarchiveChat.bind(chats);
7830
7938
  target.createChat = chats.createChat.bind(chats);
7939
+ target.createWorkflowOutboundVoiceChat = chats.createWorkflowOutboundVoiceChat.bind(chats);
7831
7940
  target.deleteChat = chats.deleteChat.bind(chats);
7832
7941
  target.updateChat = chats.updateChat.bind(chats);
7833
7942
  target.updateChatMute = chats.updateChatMute.bind(chats);
@@ -8162,6 +8271,23 @@ function bindEventsMethods(target, events) {
8162
8271
  target.previewSchedule = events.previewSchedule.bind(events);
8163
8272
  }
8164
8273
 
8274
+ // src/client/bindings/experiments.ts
8275
+ function bindExperimentsMethods(target, experiments) {
8276
+ target.getExperiments = experiments.getExperiments.bind(experiments);
8277
+ target.getExperiment = experiments.getExperiment.bind(experiments);
8278
+ target.createExperiment = experiments.createExperiment.bind(experiments);
8279
+ target.updateExperiment = experiments.updateExperiment.bind(experiments);
8280
+ target.deleteExperiment = experiments.deleteExperiment.bind(experiments);
8281
+ target.createExperimentGroup = experiments.createExperimentGroup.bind(experiments);
8282
+ target.updateExperimentGroup = experiments.updateExperimentGroup.bind(experiments);
8283
+ target.deleteExperimentGroup = experiments.deleteExperimentGroup.bind(experiments);
8284
+ target.getExperimentStats = experiments.getExperimentStats.bind(experiments);
8285
+ target.getMemberExperiments = experiments.getMemberExperiments.bind(experiments);
8286
+ target.createExperimentAssignment = experiments.createExperimentAssignment.bind(experiments);
8287
+ target.updateExperimentAssignment = experiments.updateExperimentAssignment.bind(experiments);
8288
+ target.deleteExperimentAssignment = experiments.deleteExperimentAssignment.bind(experiments);
8289
+ }
8290
+
8165
8291
  // src/client/bindings/workflows.ts
8166
8292
  function bindWorkflowsMethods(target, workflows, workflowNotes, voice, supervisors) {
8167
8293
  target.getWorkflows = workflows.getWorkflows.bind(workflows);
@@ -8267,8 +8393,6 @@ function bindCommunicationsMethods(target, phoneNumbers, inboxes, notificationRu
8267
8393
  target.getPhoneNumberVoicemails = phoneNumbers.getPhoneNumberVoicemails.bind(phoneNumbers);
8268
8394
  target.fetchVoicemailAudio = phoneNumbers.fetchVoicemailAudio.bind(phoneNumbers);
8269
8395
  target.updateVoicemailStatus = phoneNumbers.updateVoicemailStatus.bind(phoneNumbers);
8270
- target.searchAvailablePhoneNumbers = phoneNumbers.searchAvailablePhoneNumbers.bind(phoneNumbers);
8271
- target.purchasePhoneNumber = phoneNumbers.purchasePhoneNumber.bind(phoneNumbers);
8272
8396
  target.releasePhoneNumber = phoneNumbers.releasePhoneNumber.bind(phoneNumbers);
8273
8397
  target.getLinkablePhones = phoneNumbers.getLinkablePhones.bind(phoneNumbers);
8274
8398
  target.linkPhoneNumber = phoneNumbers.linkPhoneNumber.bind(phoneNumbers);
@@ -8703,6 +8827,7 @@ function bindSupportRequestMethods(target, supportRequests) {
8703
8827
  target.createWorkspaceSupportRequest = supportRequests.createWorkspaceSupportRequest.bind(supportRequests);
8704
8828
  target.commentOnWorkspaceSupportRequest = supportRequests.commentOnWorkspaceSupportRequest.bind(supportRequests);
8705
8829
  target.closeWorkspaceSupportRequest = supportRequests.closeWorkspaceSupportRequest.bind(supportRequests);
8830
+ target.clickWorkspaceSupportRequestResource = supportRequests.clickWorkspaceSupportRequestResource.bind(supportRequests);
8706
8831
  }
8707
8832
 
8708
8833
  // src/client/client.ts
@@ -8733,6 +8858,7 @@ var GravityRailClient = class {
8733
8858
  archiveChat;
8734
8859
  unarchiveChat;
8735
8860
  createChat;
8861
+ createWorkflowOutboundVoiceChat;
8736
8862
  deleteChat;
8737
8863
  updateChat;
8738
8864
  updateChatMute;
@@ -8903,6 +9029,20 @@ var GravityRailClient = class {
8903
9029
  createJourneyNote;
8904
9030
  updateJourneyNote;
8905
9031
  deleteJourneyNote;
9032
+ // Experiments API
9033
+ getExperiments;
9034
+ getExperiment;
9035
+ createExperiment;
9036
+ updateExperiment;
9037
+ deleteExperiment;
9038
+ createExperimentGroup;
9039
+ updateExperimentGroup;
9040
+ deleteExperimentGroup;
9041
+ getExperimentStats;
9042
+ getMemberExperiments;
9043
+ createExperimentAssignment;
9044
+ updateExperimentAssignment;
9045
+ deleteExperimentAssignment;
8906
9046
  // Operator Groups API
8907
9047
  getOperatorGroups;
8908
9048
  getOperatorGroup;
@@ -9246,8 +9386,6 @@ var GravityRailClient = class {
9246
9386
  getPhoneNumberVoicemails;
9247
9387
  fetchVoicemailAudio;
9248
9388
  updateVoicemailStatus;
9249
- searchAvailablePhoneNumbers;
9250
- purchasePhoneNumber;
9251
9389
  releasePhoneNumber;
9252
9390
  getLinkablePhones;
9253
9391
  linkPhoneNumber;
@@ -9571,6 +9709,7 @@ var GravityRailClient = class {
9571
9709
  createWorkspaceSupportRequest;
9572
9710
  commentOnWorkspaceSupportRequest;
9573
9711
  closeWorkspaceSupportRequest;
9712
+ clickWorkspaceSupportRequestResource;
9574
9713
  constructor(apiKey, baseUrl, customFetch) {
9575
9714
  const apis = createApiModules(apiKey, baseUrl, customFetch);
9576
9715
  this.apis = apis;
@@ -9585,6 +9724,7 @@ var GravityRailClient = class {
9585
9724
  bindQualificationsMethods(this, apis.qualifications);
9586
9725
  bindPersonasMethods(this, apis.personas);
9587
9726
  bindJourneysMethods(this, apis.journeys);
9727
+ bindExperimentsMethods(this, apis.experiments);
9588
9728
  bindOperatorMethods(this, apis.operatorGroups);
9589
9729
  bindOrgMethods(this, apis.org);
9590
9730
  bindAccessGrantsMethods(this, apis.accessGrants);
@@ -10189,6 +10329,7 @@ var ScopeCategory = /* @__PURE__ */ ((ScopeCategory2) => {
10189
10329
  ScopeCategory2["RECORDS"] = "records";
10190
10330
  ScopeCategory2["FILES"] = "files";
10191
10331
  ScopeCategory2["JOURNEYS"] = "journeys";
10332
+ ScopeCategory2["EXPERIMENTS"] = "experiments";
10192
10333
  ScopeCategory2["SITES"] = "sites";
10193
10334
  ScopeCategory2["AGENTS"] = "agents";
10194
10335
  ScopeCategory2["CALENDARS"] = "calendars";
@@ -10448,6 +10589,26 @@ var SCOPES = {
10448
10589
  implies: ["journeys:write"]
10449
10590
  },
10450
10591
  // =========================================================================
10592
+ // EXPERIMENTS
10593
+ // =========================================================================
10594
+ "experiments:read": {
10595
+ name: "experiments:read",
10596
+ category: "experiments" /* EXPERIMENTS */,
10597
+ description: "View experiments and assignments"
10598
+ },
10599
+ "experiments:write": {
10600
+ name: "experiments:write",
10601
+ category: "experiments" /* EXPERIMENTS */,
10602
+ description: "Create and edit experiments",
10603
+ implies: ["experiments:read"]
10604
+ },
10605
+ "experiments:admin": {
10606
+ name: "experiments:admin",
10607
+ category: "experiments" /* EXPERIMENTS */,
10608
+ description: "Delete draft experiments and archive experiments",
10609
+ implies: ["experiments:write"]
10610
+ },
10611
+ // =========================================================================
10451
10612
  // SITES
10452
10613
  // =========================================================================
10453
10614
  "sites:read": {
@@ -10914,6 +11075,7 @@ export {
10914
11075
  AccessGrantStatus,
10915
11076
  AccessGrantTrigger,
10916
11077
  ConsentMethod,
11078
+ parseExperimentStatCount,
10917
11079
  TERMINAL_TASK_STATES,
10918
11080
  WorkspaceInvitationsApi,
10919
11081
  WorkspacesApi,
@@ -10932,6 +11094,7 @@ export {
10932
11094
  bindSitesMethods,
10933
11095
  bindFilesMethods,
10934
11096
  bindEventsMethods,
11097
+ bindExperimentsMethods,
10935
11098
  bindWorkflowsMethods,
10936
11099
  bindCalendarsMethods,
10937
11100
  bindCommunicationsMethods,
@@ -11003,4 +11166,4 @@ export {
11003
11166
  ScopeManager,
11004
11167
  SCOPE_PRESETS
11005
11168
  };
11006
- //# sourceMappingURL=chunk-XRKRVY46.js.map
11169
+ //# sourceMappingURL=chunk-PEWFZXNK.js.map