syllable-sdk 0.1.0-alpha.28 → 0.1.0-alpha.29

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 (219) hide show
  1. package/README.md +22 -0
  2. package/RUNTIMES.md +27 -1
  3. package/docs/sdks/dashboards/README.md +309 -0
  4. package/docs/sdks/v1/README.md +307 -0
  5. package/funcs/agentsAgentGetAvailableVoices.js +4 -4
  6. package/funcs/agentsAgentGetAvailableVoices.js.map +1 -1
  7. package/funcs/agentsCreate.js +4 -4
  8. package/funcs/agentsCreate.js.map +1 -1
  9. package/funcs/agentsDelete.js +4 -4
  10. package/funcs/agentsDelete.js.map +1 -1
  11. package/funcs/agentsGetById.js +4 -4
  12. package/funcs/agentsGetById.js.map +1 -1
  13. package/funcs/agentsList.js +4 -4
  14. package/funcs/agentsList.js.map +1 -1
  15. package/funcs/agentsTestSendTestMessage.js +4 -4
  16. package/funcs/agentsTestSendTestMessage.js.map +1 -1
  17. package/funcs/agentsUpdate.js +4 -4
  18. package/funcs/agentsUpdate.js.map +1 -1
  19. package/funcs/channelsDelete.js +4 -4
  20. package/funcs/channelsDelete.js.map +1 -1
  21. package/funcs/channelsList.js +4 -4
  22. package/funcs/channelsList.js.map +1 -1
  23. package/funcs/channelsTargetsAvailableTargets.js +4 -4
  24. package/funcs/channelsTargetsAvailableTargets.js.map +1 -1
  25. package/funcs/channelsTargetsCreate.js +4 -4
  26. package/funcs/channelsTargetsCreate.js.map +1 -1
  27. package/funcs/channelsTargetsGetById.js +4 -4
  28. package/funcs/channelsTargetsGetById.js.map +1 -1
  29. package/funcs/channelsTargetsList.js +4 -4
  30. package/funcs/channelsTargetsList.js.map +1 -1
  31. package/funcs/channelsTargetsUpdate.js +4 -4
  32. package/funcs/channelsTargetsUpdate.js.map +1 -1
  33. package/funcs/conversationsList.js +4 -4
  34. package/funcs/conversationsList.js.map +1 -1
  35. package/funcs/customMessagesCreate.js +4 -4
  36. package/funcs/customMessagesCreate.js.map +1 -1
  37. package/funcs/customMessagesDelete.js +4 -4
  38. package/funcs/customMessagesDelete.js.map +1 -1
  39. package/funcs/customMessagesGetById.js +4 -4
  40. package/funcs/customMessagesGetById.js.map +1 -1
  41. package/funcs/customMessagesList.js +4 -4
  42. package/funcs/customMessagesList.js.map +1 -1
  43. package/funcs/customMessagesUpdate.js +4 -4
  44. package/funcs/customMessagesUpdate.js.map +1 -1
  45. package/funcs/dashboardsPostSessionEventsDashboard.d.ts +18 -0
  46. package/funcs/dashboardsPostSessionEventsDashboard.d.ts.map +1 -0
  47. package/funcs/dashboardsPostSessionEventsDashboard.js +89 -0
  48. package/funcs/dashboardsPostSessionEventsDashboard.js.map +1 -0
  49. package/funcs/dashboardsPostSessionSummaryDashboard.d.ts +18 -0
  50. package/funcs/dashboardsPostSessionSummaryDashboard.d.ts.map +1 -0
  51. package/funcs/dashboardsPostSessionSummaryDashboard.js +89 -0
  52. package/funcs/dashboardsPostSessionSummaryDashboard.js.map +1 -0
  53. package/funcs/dashboardsPostSessionTransfersDashboard.d.ts +18 -0
  54. package/funcs/dashboardsPostSessionTransfersDashboard.d.ts.map +1 -0
  55. package/funcs/dashboardsPostSessionTransfersDashboard.js +89 -0
  56. package/funcs/dashboardsPostSessionTransfersDashboard.js.map +1 -0
  57. package/funcs/dashboardsPostSessionsDashboard.d.ts +18 -0
  58. package/funcs/dashboardsPostSessionsDashboard.d.ts.map +1 -0
  59. package/funcs/dashboardsPostSessionsDashboard.js +89 -0
  60. package/funcs/dashboardsPostSessionsDashboard.js.map +1 -0
  61. package/funcs/directoryCreate.js +4 -4
  62. package/funcs/directoryCreate.js.map +1 -1
  63. package/funcs/directoryDelete.js +4 -4
  64. package/funcs/directoryDelete.js.map +1 -1
  65. package/funcs/directoryDirectoryMemberBulkLoad.js +4 -4
  66. package/funcs/directoryDirectoryMemberBulkLoad.js.map +1 -1
  67. package/funcs/directoryDirectoryMemberDownload.js +4 -4
  68. package/funcs/directoryDirectoryMemberDownload.js.map +1 -1
  69. package/funcs/directoryGetById.js +4 -4
  70. package/funcs/directoryGetById.js.map +1 -1
  71. package/funcs/directoryList.js +4 -4
  72. package/funcs/directoryList.js.map +1 -1
  73. package/funcs/directoryUpdate.js +4 -4
  74. package/funcs/directoryUpdate.js.map +1 -1
  75. package/funcs/eventsList.js +4 -4
  76. package/funcs/eventsList.js.map +1 -1
  77. package/funcs/promptsCreate.js +4 -4
  78. package/funcs/promptsCreate.js.map +1 -1
  79. package/funcs/promptsDelete.js +4 -4
  80. package/funcs/promptsDelete.js.map +1 -1
  81. package/funcs/promptsGetById.js +4 -4
  82. package/funcs/promptsGetById.js.map +1 -1
  83. package/funcs/promptsList.js +4 -4
  84. package/funcs/promptsList.js.map +1 -1
  85. package/funcs/promptsPromptsHistory.js +4 -4
  86. package/funcs/promptsPromptsHistory.js.map +1 -1
  87. package/funcs/promptsUpdate.js +4 -4
  88. package/funcs/promptsUpdate.js.map +1 -1
  89. package/funcs/servicesCreate.js +4 -4
  90. package/funcs/servicesCreate.js.map +1 -1
  91. package/funcs/servicesList.js +4 -4
  92. package/funcs/servicesList.js.map +1 -1
  93. package/funcs/servicesUpdate.js +4 -4
  94. package/funcs/servicesUpdate.js.map +1 -1
  95. package/funcs/sessionLabelsCreate.js +4 -4
  96. package/funcs/sessionLabelsCreate.js.map +1 -1
  97. package/funcs/sessionLabelsGetById.js +4 -4
  98. package/funcs/sessionLabelsGetById.js.map +1 -1
  99. package/funcs/sessionLabelsList.js +4 -4
  100. package/funcs/sessionLabelsList.js.map +1 -1
  101. package/funcs/sessionsGenerateSessionRecordingUrls.js +4 -4
  102. package/funcs/sessionsGenerateSessionRecordingUrls.js.map +1 -1
  103. package/funcs/sessionsGetById.js +4 -4
  104. package/funcs/sessionsGetById.js.map +1 -1
  105. package/funcs/sessionsList.js +4 -4
  106. package/funcs/sessionsList.js.map +1 -1
  107. package/funcs/sessionsSessionRecordingStream.js +4 -4
  108. package/funcs/sessionsSessionRecordingStream.js.map +1 -1
  109. package/funcs/sessionsTranscriptGetById.js +4 -4
  110. package/funcs/sessionsTranscriptGetById.js.map +1 -1
  111. package/funcs/toolsCreate.js +4 -4
  112. package/funcs/toolsCreate.js.map +1 -1
  113. package/funcs/toolsGetByName.js +4 -4
  114. package/funcs/toolsGetByName.js.map +1 -1
  115. package/funcs/toolsList.js +4 -4
  116. package/funcs/toolsList.js.map +1 -1
  117. package/funcs/toolsUpdate.js +4 -4
  118. package/funcs/toolsUpdate.js.map +1 -1
  119. package/funcs/v1PostSessionEventsDashboard.d.ts +18 -0
  120. package/funcs/v1PostSessionEventsDashboard.d.ts.map +1 -0
  121. package/funcs/v1PostSessionEventsDashboard.js +89 -0
  122. package/funcs/v1PostSessionEventsDashboard.js.map +1 -0
  123. package/funcs/v1PostSessionSummaryDashboard.d.ts +18 -0
  124. package/funcs/v1PostSessionSummaryDashboard.d.ts.map +1 -0
  125. package/funcs/v1PostSessionSummaryDashboard.js +89 -0
  126. package/funcs/v1PostSessionSummaryDashboard.js.map +1 -0
  127. package/funcs/v1PostSessionTransfersDashboard.d.ts +18 -0
  128. package/funcs/v1PostSessionTransfersDashboard.d.ts.map +1 -0
  129. package/funcs/v1PostSessionTransfersDashboard.js +89 -0
  130. package/funcs/v1PostSessionTransfersDashboard.js.map +1 -0
  131. package/funcs/v1PostSessionsDashboard.d.ts +18 -0
  132. package/funcs/v1PostSessionsDashboard.d.ts.map +1 -0
  133. package/funcs/v1PostSessionsDashboard.js +89 -0
  134. package/funcs/v1PostSessionsDashboard.js.map +1 -0
  135. package/lib/config.d.ts +3 -3
  136. package/lib/config.js +4 -5
  137. package/lib/config.js.map +1 -1
  138. package/lib/encodings.js +18 -19
  139. package/lib/encodings.js.map +1 -1
  140. package/lib/env.js +1 -2
  141. package/lib/env.js.map +1 -1
  142. package/lib/http.js +1 -2
  143. package/lib/http.js.map +1 -1
  144. package/lib/matchers.js +5 -6
  145. package/lib/matchers.js.map +1 -1
  146. package/lib/primitives.js +1 -1
  147. package/lib/primitives.js.map +1 -1
  148. package/lib/retries.js +3 -4
  149. package/lib/retries.js.map +1 -1
  150. package/lib/sdks.js +15 -16
  151. package/lib/sdks.js.map +1 -1
  152. package/lib/security.js +2 -3
  153. package/lib/security.js.map +1 -1
  154. package/lib/url.js +1 -1
  155. package/lib/url.js.map +1 -1
  156. package/mintlify/scripts/create-md-script.js +46 -0
  157. package/mintlify/scripts/generate-mintlify-sdk-docs.js +117 -0
  158. package/models/components/channeltargetproperties.d.ts +3 -0
  159. package/models/components/channeltargetproperties.d.ts.map +1 -1
  160. package/models/components/channeltargetproperties.js +1 -0
  161. package/models/components/channeltargetproperties.js.map +1 -1
  162. package/models/components/dashboard.d.ts +35 -0
  163. package/models/components/dashboard.d.ts.map +1 -0
  164. package/models/components/dashboard.js +78 -0
  165. package/models/components/dashboard.js.map +1 -0
  166. package/models/components/index.d.ts +1 -0
  167. package/models/components/index.d.ts.map +1 -1
  168. package/models/components/index.js +1 -0
  169. package/models/components/index.js.map +1 -1
  170. package/models/components/toolparameterdefault.d.ts +6 -0
  171. package/models/components/toolparameterdefault.d.ts.map +1 -1
  172. package/models/components/toolparameterdefault.js.map +1 -1
  173. package/models/components/toolparametertransform.d.ts +14 -3
  174. package/models/components/toolparametertransform.d.ts.map +1 -1
  175. package/models/components/toolparametertransform.js +4 -2
  176. package/models/components/toolparametertransform.js.map +1 -1
  177. package/models/errors/httpclienterrors.js +2 -2
  178. package/models/errors/httpclienterrors.js.map +1 -1
  179. package/package.json +1 -1
  180. package/sdk/agents.js +1 -2
  181. package/sdk/agents.js.map +1 -1
  182. package/sdk/channels.js +1 -2
  183. package/sdk/channels.js.map +1 -1
  184. package/sdk/dashboards.d.ts +45 -0
  185. package/sdk/dashboards.d.ts.map +1 -0
  186. package/sdk/dashboards.js +64 -0
  187. package/sdk/dashboards.js.map +1 -0
  188. package/sdk/sdk.d.ts +6 -0
  189. package/sdk/sdk.d.ts.map +1 -1
  190. package/sdk/sdk.js +19 -22
  191. package/sdk/sdk.js.map +1 -1
  192. package/sdk/sessions.js +1 -2
  193. package/sdk/sessions.js.map +1 -1
  194. package/sdk/v1.d.ts +45 -0
  195. package/sdk/v1.d.ts.map +1 -0
  196. package/sdk/v1.js +64 -0
  197. package/sdk/v1.js.map +1 -0
  198. package/src/funcs/dashboardsPostSessionEventsDashboard.ts +111 -0
  199. package/src/funcs/dashboardsPostSessionSummaryDashboard.ts +111 -0
  200. package/src/funcs/dashboardsPostSessionTransfersDashboard.ts +111 -0
  201. package/src/funcs/dashboardsPostSessionsDashboard.ts +111 -0
  202. package/src/funcs/v1PostSessionEventsDashboard.ts +111 -0
  203. package/src/funcs/v1PostSessionSummaryDashboard.ts +111 -0
  204. package/src/funcs/v1PostSessionTransfersDashboard.ts +111 -0
  205. package/src/funcs/v1PostSessionsDashboard.ts +111 -0
  206. package/src/lib/config.ts +3 -3
  207. package/src/lib/security.ts +1 -1
  208. package/src/models/components/channeltargetproperties.ts +1 -0
  209. package/src/models/components/dashboard.ts +87 -0
  210. package/src/models/components/index.ts +1 -0
  211. package/src/models/components/toolparameterdefault.ts +6 -0
  212. package/src/models/components/toolparametertransform.ts +18 -5
  213. package/src/sdk/dashboards.ts +85 -0
  214. package/src/sdk/sdk.ts +12 -0
  215. package/src/sdk/v1.ts +85 -0
  216. package/test/sdk/contract/agents.test.ts +113 -0
  217. package/test/sdk/contract/custommessages.test.ts +109 -0
  218. package/test/sdk/contract/helper.ts +190 -0
  219. package/test/sdk/contract/prompts.test.ts +70 -0
package/src/sdk/v1.ts ADDED
@@ -0,0 +1,85 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { v1PostSessionEventsDashboard } from "../funcs/v1PostSessionEventsDashboard.js";
6
+ import { v1PostSessionsDashboard } from "../funcs/v1PostSessionsDashboard.js";
7
+ import { v1PostSessionSummaryDashboard } from "../funcs/v1PostSessionSummaryDashboard.js";
8
+ import { v1PostSessionTransfersDashboard } from "../funcs/v1PostSessionTransfersDashboard.js";
9
+ import { ClientSDK, RequestOptions } from "../lib/sdks.js";
10
+ import * as components from "../models/components/index.js";
11
+ import { unwrapAsync } from "../types/fp.js";
12
+
13
+ export class V1 extends ClientSDK {
14
+ /**
15
+ * Post Session Events
16
+ *
17
+ * @remarks
18
+ * METHOD: POST
19
+ * URL: /dashboard/session_events
20
+ * ARGUMENTS: None
21
+ * RETURNS: Dashboard info for embedding
22
+ */
23
+ async postSessionEventsDashboard(
24
+ options?: RequestOptions,
25
+ ): Promise<components.Dashboard> {
26
+ return unwrapAsync(v1PostSessionEventsDashboard(
27
+ this,
28
+ options,
29
+ ));
30
+ }
31
+
32
+ /**
33
+ * Post Session Summary
34
+ *
35
+ * @remarks
36
+ * METHOD: POST
37
+ * URL: /dashboard/session_summary
38
+ * ARGUMENTS: None
39
+ * RETURNS: Dashboard info for embedding
40
+ */
41
+ async postSessionSummaryDashboard(
42
+ options?: RequestOptions,
43
+ ): Promise<components.Dashboard> {
44
+ return unwrapAsync(v1PostSessionSummaryDashboard(
45
+ this,
46
+ options,
47
+ ));
48
+ }
49
+
50
+ /**
51
+ * Post Session Transfers
52
+ *
53
+ * @remarks
54
+ * METHOD: POST
55
+ * URL: /dashboard/session_transfers
56
+ * ARGUMENTS: None
57
+ * RETURNS: Dashboard info for embedding
58
+ */
59
+ async postSessionTransfersDashboard(
60
+ options?: RequestOptions,
61
+ ): Promise<components.Dashboard> {
62
+ return unwrapAsync(v1PostSessionTransfersDashboard(
63
+ this,
64
+ options,
65
+ ));
66
+ }
67
+
68
+ /**
69
+ * Post Sessions
70
+ *
71
+ * @remarks
72
+ * METHOD: POST
73
+ * URL: /dashboard/sessions
74
+ * ARGUMENTS: None
75
+ * RETURNS: Dashboard info for embedding
76
+ */
77
+ async postSessionsDashboard(
78
+ options?: RequestOptions,
79
+ ): Promise<components.Dashboard> {
80
+ return unwrapAsync(v1PostSessionsDashboard(
81
+ this,
82
+ options,
83
+ ));
84
+ }
85
+ }
@@ -0,0 +1,113 @@
1
+ import { beforeAll, describe, it, expect, afterAll } from "vitest";
2
+ import { getSDK, generateFake } from "./helper";
3
+
4
+ let sdk
5
+ let createdAgents = []
6
+ beforeAll(async () => {
7
+ sdk = await getSDK()
8
+ });
9
+
10
+ afterAll(async () => {
11
+ for (const agent of createdAgents) {
12
+ const result = await sdk.agents.delete({
13
+ agentId: agent.id,
14
+ reason: 'was a created by a test'
15
+ })
16
+ }
17
+ for (const agent of createdAgents) {
18
+ const promptResult = await sdk.prompts.delete({
19
+ promptId: agent.promptId,
20
+ reason: 'was a created by a test'
21
+ })
22
+ const customMessageResult = await sdk.customMessages.delete({
23
+ customMessageId: agent.customMessageId,
24
+ reason: 'was a created by a test'
25
+ })
26
+ }
27
+ })
28
+
29
+ describe('Syllable SDK Contract test suite', () => {
30
+ describe('agents', () => {
31
+ describe('create', () => {
32
+ it('should create a agent', async() => {
33
+ const prompt = generateFake('prompt');
34
+ const promptResult = await sdk.prompts.create(prompt);
35
+ const message = generateFake('customMessage');
36
+ delete message.rules[0].daysOfWeek
37
+ message.rules[0].date = new Date().toJSON().slice(0, 10);
38
+ const messageResult = await sdk.customMessages.create(message);
39
+ const agent = generateFake('agent');
40
+ agent.promptId = promptResult.id
41
+ agent.customMessageId = messageResult.id
42
+ const result = await sdk.agents.create(agent);
43
+ createdAgents.push(result)
44
+ })
45
+ })
46
+ describe('list', () => {
47
+ it('should list a newly created agent', async() => {
48
+ const prompt = generateFake('prompt');
49
+ const promptResult = await sdk.prompts.create(prompt);
50
+ const message = generateFake('customMessage');
51
+ delete message.rules[0].daysOfWeek
52
+ message.rules[0].date = new Date().toJSON().slice(0, 10);
53
+ const messageResult = await sdk.customMessages.create(message);
54
+ const agent = generateFake('agent');
55
+ agent.promptId = promptResult.id
56
+ agent.customMessageId = messageResult.id
57
+ const result = await sdk.agents.create(agent);
58
+ createdAgents.push(result)
59
+ const listResult = await sdk.agents.list({});
60
+ const isFound = listResult.items.some((cm) => {
61
+ return cm.name === agent.name
62
+ })
63
+ if (!isFound) {
64
+ throw new Error('agent that was just created is not listed')
65
+ }
66
+ })
67
+ })
68
+ describe('update', () => {
69
+ it('should update a newly created agent', async() => {
70
+ const prompt = generateFake('prompt');
71
+ const promptResult = await sdk.prompts.create(prompt);
72
+ const message = generateFake('customMessage');
73
+ delete message.rules[0].daysOfWeek
74
+ message.rules[0].date = new Date().toJSON().slice(0, 10);
75
+ const messageResult = await sdk.customMessages.create(message);
76
+ const agent = generateFake('agent');
77
+ agent.promptId = promptResult.id
78
+ agent.customMessageId = messageResult.id
79
+ const result = await sdk.agents.create(agent);
80
+ createdAgents.push(result)
81
+ agent.id = result.id
82
+ agent.description = 'new description'
83
+ const updateResult = await sdk.agents.update(agent);
84
+ })
85
+ })
86
+ describe('delete', () => {
87
+ it('should delete a newly created agent', async() => {
88
+ const prompt = generateFake('prompt');
89
+ const promptResult = await sdk.prompts.create(prompt);
90
+ const message = generateFake('customMessage');
91
+ delete message.rules[0].daysOfWeek
92
+ message.rules[0].date = new Date().toJSON().slice(0, 10);
93
+ const messageResult = await sdk.customMessages.create(message);
94
+ const agent = generateFake('agent');
95
+ agent.promptId = promptResult.id
96
+ agent.customMessageId = messageResult.id
97
+ const result = await sdk.agents.create(agent);
98
+ const deleteResult = await sdk.agents.delete({
99
+ agentId: result.id,
100
+ reason: 'created by a test'
101
+ })
102
+ await sdk.prompts.delete({
103
+ promptId: agent.promptId,
104
+ reason: 'was a created by a test'
105
+ })
106
+ await sdk.customMessages.delete({
107
+ customMessageId: agent.customMessageId,
108
+ reason: 'was a created by a test'
109
+ })
110
+ })
111
+ })
112
+ })
113
+ })
@@ -0,0 +1,109 @@
1
+ import { beforeAll, describe, it, expect, afterAll } from "vitest";
2
+ import { getSDK, generateFake, validateResponse } from "./helper";
3
+
4
+ let sdk
5
+ let createdMessages = []
6
+ beforeAll(async () => {
7
+ sdk = await getSDK()
8
+ });
9
+
10
+ afterAll(async () => {
11
+ for (const message of createdMessages) {
12
+ const result = await sdk.customMessages.delete({
13
+ customMessageId: message.id,
14
+ reason: 'was a created by a test'
15
+ })
16
+ }
17
+ })
18
+
19
+ describe('Syllable SDK Contract test suite', () => {
20
+ describe('customMessages', () => {
21
+ describe('create', () => {
22
+ it('should create a simple customMessage', async() => {
23
+ const message = generateFake('customMessage');
24
+ delete message.rules;
25
+ const result = await sdk.customMessages.create(message);
26
+ createdMessages.push(result)
27
+ expect(validateResponse('customMessage', 'create', result, 200)).to.be.true
28
+ })
29
+ it('should create a customMessage with a date rule', async() => {
30
+ const message = generateFake('customMessage');
31
+ delete message.rules[0].daysOfWeek
32
+ message.rules[0].date = new Date().toJSON().slice(0, 10);
33
+ const result = await sdk.customMessages.create(message);
34
+ createdMessages.push(result)
35
+ expect(validateResponse('customMessage', 'create', result, 200)).to.be.true
36
+ })
37
+ it('should create a customMessage with a days_of_week rule', async() => {
38
+ const message = generateFake('customMessage');
39
+ delete message.rules[0].date
40
+ const result = await sdk.customMessages.create(message);
41
+ createdMessages.push(result)
42
+ expect(validateResponse('customMessage', 'create', result, 200)).to.be.true
43
+ })
44
+ it('should create a customMessage with a date rule and no time_range', async() => {
45
+ const message = generateFake('customMessage');
46
+ delete message.rules[0].daysOfWeek
47
+ delete message.rules[0].timeRangeEnd
48
+ delete message.rules[0].timeRangeStart
49
+ message.rules[0].date = new Date().toJSON().slice(0, 10);
50
+ const result = await sdk.customMessages.create(message);
51
+ createdMessages.push(result)
52
+ expect(validateResponse('customMessage', 'create', result, 200)).to.be.true
53
+ })
54
+ it('should create a customMessage with a days_of_week rule and no time_range', async() => {
55
+ const message = generateFake('customMessage');
56
+ delete message.rules[0].date
57
+ delete message.rules[0].timeRangeEnd
58
+ delete message.rules[0].timeRangeStart
59
+ const result = await sdk.customMessages.create(message);
60
+ createdMessages.push(result)
61
+ expect(validateResponse('customMessage', 'create', result, 200)).to.be.true
62
+ })
63
+ })
64
+ describe('list', () => {
65
+ it('should list a newly created customMessage', async() => {
66
+ const message = generateFake('customMessage');
67
+ delete message.rules;
68
+ const result = await sdk.customMessages.create(message);
69
+ createdMessages.push(result)
70
+ const listResult = await sdk.customMessages.list({
71
+ searchFields: ['name'],
72
+ searchFieldValues: [message.name]
73
+ });
74
+ const isFound = listResult.items.some((cm) => {
75
+ return cm.name === message.name
76
+ })
77
+ if (!isFound) {
78
+ throw new Error('customMessage that was just created is not listed')
79
+ }
80
+ expect(validateResponse('customMessage', 'list', listResult, 200)).to.be.true
81
+ })
82
+ })
83
+ describe('update', () => {
84
+ it('should update a newly created customMessage', async() => {
85
+ const message = generateFake('customMessage');
86
+ const rules = message.rules;
87
+ delete message.rules;
88
+ const result = await sdk.customMessages.create(message);
89
+ createdMessages.push(result)
90
+ message.rules = rules
91
+ message.id = result.id
92
+ const updateResult = await sdk.customMessages.update(message);
93
+ expect(validateResponse('customMessage', 'update', updateResult, 200)).to.be.true
94
+ })
95
+ })
96
+ describe('delete', () => {
97
+ it('should delete a newly created customMessage', async() => {
98
+ const message = generateFake('customMessage');
99
+ delete message.rules;
100
+ const result = await sdk.customMessages.create(message);
101
+ const deleteResult = await sdk.customMessages.delete({
102
+ customMessageId: result.id,
103
+ reason: 'created by a test'
104
+ });
105
+ expect(validateResponse('customMessage', 'delete', deleteResult, 200)).to.be.true
106
+ })
107
+ })
108
+ })
109
+ })
@@ -0,0 +1,190 @@
1
+ import { SyllableSDK } from "../../../src/index.ts"
2
+ import { randAirportCode, randNumber, randParagraph, randPhrase } from '@ngneat/falso';
3
+ import { camelCase, snakeCase, isArray, transform, isObject, get } from "lodash"
4
+ import Ajv from "ajv";
5
+ import addFormats from "ajv-formats";
6
+ import addErrors from "ajv-errors";
7
+ import { readFileSync } from "fs";
8
+
9
+ const openApiSpec = JSON.parse(readFileSync(`${__dirname}/../../../openapi.json`, "utf8")) as any;
10
+ const ajv = new Ajv({ allErrors: true, strict: false });
11
+ addFormats(ajv);
12
+ addErrors(ajv);
13
+ ajv.addSchema(openApiSpec, "openapi.json")
14
+
15
+ export async function getSDK() {
16
+ const url = process.env['SYLLABLESDK_SERVER_URL'];
17
+ const key = process.env["SYLLABLESDK_API_KEY_HEADER"];
18
+ if (!url) {
19
+ console.log('Please set SYLLABLESDK_SERVER_URL env var');
20
+ }
21
+ if (!key) {
22
+ console.log('Please set SYLLABLESDK_API_KEY_HEADER env var');
23
+ }
24
+ const sdk = new SyllableSDK({
25
+ serverURL: url,
26
+ apiKeyHeader: key,
27
+ });
28
+ await sdk.agents.list({});
29
+ return sdk
30
+ }
31
+
32
+ const camelizeObj = obj => transform(obj, (acc, value, key, target) => {
33
+ const camelKey = isArray(target) ? key : camelCase(key);
34
+ acc[camelKey] = isObject(value) ? camelizeObj(value) : value;
35
+ });
36
+
37
+ const snakeizeObj = obj => transform(obj, (acc, value, key, target) => {
38
+ const camelKey = isArray(target) ? key : snakeCase(key);
39
+ acc[camelKey] = isObject(value) ? snakeizeObj(value) : value;
40
+ });
41
+
42
+ export function generateFake(modelType, options = {}, camelize = true) {
43
+ let model = {}
44
+ if (!Object.hasOwn(options, 'prefix')) {
45
+ options.prefix = 'test: '
46
+ }
47
+ switch (modelType) {
48
+ case 'customMessage':
49
+ model = createCustomMessage(options);
50
+ break;
51
+
52
+ case 'prompt':
53
+ model = createPrompt(options);
54
+ break;
55
+
56
+ case 'agent':
57
+ model = createAgent(options);
58
+ break;
59
+
60
+ default:
61
+ throw new Error(`${modelType} is not implemented`);
62
+ }
63
+ if (camelize) {
64
+ model = camelizeObj(model)
65
+ }
66
+ return model;
67
+ }
68
+
69
+ export function validateResponse(modelType, op, response, responseCode) {
70
+ let modelTypeSnakeCase = snakeCase(modelType)
71
+ let apiPath;
72
+ let verb;
73
+ switch (op) {
74
+ case 'list':
75
+ apiPath = `/api/v1/${modelTypeSnakeCase}s/`
76
+ verb = 'get'
77
+ break;
78
+
79
+ case 'create':
80
+ apiPath = `/api/v1/${modelTypeSnakeCase}s/`
81
+ verb = 'post'
82
+ break;
83
+
84
+ case 'getById':
85
+ apiPath = `/api/v1/${modelTypeSnakeCase}s/{${modelTypeSnakeCase}_id}`
86
+ verb = 'get'
87
+ break;
88
+
89
+ case 'update':
90
+ apiPath = `/api/v1/${modelTypeSnakeCase}s/`
91
+ verb = 'put'
92
+ break;
93
+
94
+ case 'delete':
95
+ apiPath = `/api/v1/${modelTypeSnakeCase}s/{${modelTypeSnakeCase}_id}`
96
+ verb = 'delete'
97
+ break;
98
+
99
+ default:
100
+ throw new Error(`${modelTypeSnakeCase} ${op} is not implemented`);
101
+
102
+ }
103
+ const schema = get(openApiSpec['paths'], `${apiPath}.${verb}.responses.${responseCode}.content.application/json.schema`)
104
+ if (!schema) {
105
+ throw new Error(`${modelTypeSnakeCase} ${op} ${apiPath}->${verb}->${responseCode} could not find schema in openapi.json`);
106
+ }
107
+ const ref = get(openApiSpec['paths'], `${apiPath}.${verb}.responses.${responseCode}.content.application/json.schema.$ref`)
108
+ let valid
109
+ if (ref) {
110
+ valid = ajv.validate({ '$ref': `openapi.json${ref}`}, snakeizeObj(response))
111
+ } else {
112
+ valid = ajv.validate(schema, snakeizeObj(response))
113
+ }
114
+ if (!valid) {
115
+ ajv.errors = ajv.errors.filter((validationError) => {
116
+ if (validationError.instancePath == '/updated_at' && validationError.keyword == 'type') {
117
+ // updatedAt is datetime via SDK where as it is a string via fast api
118
+ return false
119
+ }
120
+ });
121
+ if (ajv.errors.length >= 1) {
122
+ console.warn(`${modelTypeSnakeCase} ${op} response did not pass jsonschema validation`)
123
+ console.warn(ajv.errors)
124
+ } else {
125
+ valid = true
126
+ }
127
+ }
128
+ return valid
129
+ }
130
+
131
+ function createCustomMessage(options) {
132
+ const message = {
133
+ "type": "greeting",
134
+ "name": `${options.prefix}${randPhrase()} ${randNumber()}`,
135
+ "text": randParagraph(),
136
+ "label": "test",
137
+ "rules": [
138
+ {
139
+ "description": "week day rule",
140
+ "time_range_start": "09:00",
141
+ "time_range_end": "17:00",
142
+ "days_of_week": [
143
+ "mo", "tu", "we", "th", "fr"
144
+ ],
145
+ "invert": false,
146
+ "text": "This is a weekday test message"
147
+ }
148
+ ]
149
+ };
150
+ return message;
151
+ }
152
+
153
+ function createPrompt(options) {
154
+ const prompt = {
155
+ "name": `${options.prefix} ${randPhrase()} ${randPhrase()} ${randNumber()}}`,
156
+ "description": randParagraph(),
157
+ "type": "prompt_v1",
158
+ "context": "You know everything about macos releases. You know their code names and release dates. You will answer questions like when was macos lion was released and what is the latest macos name, etc",
159
+ "tools": [
160
+ "hangup",
161
+ "set_current_language",
162
+ "summary"
163
+ ],
164
+ "llm_config": {
165
+ "provider": "openai",
166
+ "model": "gpt-4o",
167
+ "version": "2024-08-06",
168
+ "api_version": null
169
+ }
170
+ }
171
+ return prompt
172
+ }
173
+
174
+ function createAgent(options) {
175
+ const agent = {
176
+ "name": `${options.prefix} ${randPhrase()} ${randPhrase()} ${randNumber()}`,
177
+ "description": randParagraph(),
178
+ "label": "test",
179
+ "timezone": "America/New_York",
180
+ "type": "ca_v1",
181
+ "prompt_id": null,
182
+ "custom_message_id": null,
183
+ "languages": [
184
+ "en-US",
185
+ "es-US"
186
+ ],
187
+ variables: {}
188
+ }
189
+ return agent
190
+ }
@@ -0,0 +1,70 @@
1
+ import { beforeAll, describe, it, expect, afterAll } from "vitest";
2
+ import { getSDK, generateFake, validateResponse } from "./helper";
3
+
4
+ let sdk
5
+ let createdPrompts = []
6
+ beforeAll(async () => {
7
+ sdk = await getSDK()
8
+ });
9
+
10
+ afterAll(async () => {
11
+ for (const prompt of createdPrompts) {
12
+ const result = await sdk.prompts.delete({
13
+ promptId: prompt.id,
14
+ reason: 'was a created by a test'
15
+ })
16
+ }
17
+ })
18
+
19
+ describe('Syllable SDK Contract test suite', () => {
20
+ describe('prompts', () => {
21
+ describe('create', () => {
22
+ it('should create a prompt', async() => {
23
+ const prompt = generateFake('prompt');
24
+ const result = await sdk.prompts.create(prompt);
25
+ createdPrompts.push(result)
26
+ expect(validateResponse('prompt', 'create', result, 200)).to.be.true
27
+ })
28
+ })
29
+ describe('list', () => {
30
+ it('should list a newly created prompt', async() => {
31
+ const prompt = generateFake('prompt');
32
+ const result = await sdk.prompts.create(prompt);
33
+ createdPrompts.push(result)
34
+ const listResult = await sdk.prompts.list({
35
+ searchFields: ['name'],
36
+ searchFieldValues: [prompt.name]
37
+ });
38
+ const isFound = listResult.items.some((cm) => {
39
+ return cm.name === prompt.name
40
+ })
41
+ expect(validateResponse('prompt', 'list', listResult, 200)).to.be.true
42
+ if (!isFound) {
43
+ throw new Error('prompt that was just created is not listed')
44
+ }
45
+ })
46
+ })
47
+ describe('update', () => {
48
+ it('should update a newly created prompt', async() => {
49
+ const prompt = generateFake('prompt');
50
+ const result = await sdk.prompts.create(prompt);
51
+ createdPrompts.push(result)
52
+ prompt.id = result.id
53
+ prompt.description = 'new description'
54
+ const updateResult = await sdk.prompts.update(prompt);
55
+ expect(validateResponse('prompt', 'update', updateResult, 200)).to.be.true
56
+ })
57
+ })
58
+ describe('delete', () => {
59
+ it('should delete a newly created prompt', async() => {
60
+ const prompt = generateFake('prompt');
61
+ const result = await sdk.prompts.create(prompt);
62
+ const deleteResult = await sdk.prompts.delete({
63
+ promptId: result.id,
64
+ reason: 'created by a test'
65
+ });
66
+ expect(validateResponse('prompt', 'delete', deleteResult, 200)).to.be.true
67
+ })
68
+ })
69
+ })
70
+ })