syllable-sdk 0.1.0-alpha.27 → 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 (306) 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/tools/README.md +36 -0
  5. package/docs/sdks/v1/README.md +307 -0
  6. package/funcs/agentsAgentGetAvailableVoices.js +4 -4
  7. package/funcs/agentsAgentGetAvailableVoices.js.map +1 -1
  8. package/funcs/agentsCreate.js +4 -4
  9. package/funcs/agentsCreate.js.map +1 -1
  10. package/funcs/agentsDelete.js +4 -4
  11. package/funcs/agentsDelete.js.map +1 -1
  12. package/funcs/agentsGetById.js +4 -4
  13. package/funcs/agentsGetById.js.map +1 -1
  14. package/funcs/agentsList.js +4 -4
  15. package/funcs/agentsList.js.map +1 -1
  16. package/funcs/agentsTestSendTestMessage.js +4 -4
  17. package/funcs/agentsTestSendTestMessage.js.map +1 -1
  18. package/funcs/agentsUpdate.js +4 -4
  19. package/funcs/agentsUpdate.js.map +1 -1
  20. package/funcs/channelsDelete.js +4 -4
  21. package/funcs/channelsDelete.js.map +1 -1
  22. package/funcs/channelsList.js +4 -4
  23. package/funcs/channelsList.js.map +1 -1
  24. package/funcs/channelsTargetsAvailableTargets.js +4 -4
  25. package/funcs/channelsTargetsAvailableTargets.js.map +1 -1
  26. package/funcs/channelsTargetsCreate.js +4 -4
  27. package/funcs/channelsTargetsCreate.js.map +1 -1
  28. package/funcs/channelsTargetsGetById.js +4 -4
  29. package/funcs/channelsTargetsGetById.js.map +1 -1
  30. package/funcs/channelsTargetsList.js +4 -4
  31. package/funcs/channelsTargetsList.js.map +1 -1
  32. package/funcs/channelsTargetsUpdate.js +4 -4
  33. package/funcs/channelsTargetsUpdate.js.map +1 -1
  34. package/funcs/conversationsList.js +4 -4
  35. package/funcs/conversationsList.js.map +1 -1
  36. package/funcs/customMessagesCreate.js +4 -4
  37. package/funcs/customMessagesCreate.js.map +1 -1
  38. package/funcs/customMessagesDelete.js +4 -4
  39. package/funcs/customMessagesDelete.js.map +1 -1
  40. package/funcs/customMessagesGetById.js +4 -4
  41. package/funcs/customMessagesGetById.js.map +1 -1
  42. package/funcs/customMessagesList.js +4 -4
  43. package/funcs/customMessagesList.js.map +1 -1
  44. package/funcs/customMessagesUpdate.js +4 -4
  45. package/funcs/customMessagesUpdate.js.map +1 -1
  46. package/funcs/dashboardsPostSessionEventsDashboard.d.ts +18 -0
  47. package/funcs/dashboardsPostSessionEventsDashboard.d.ts.map +1 -0
  48. package/funcs/dashboardsPostSessionEventsDashboard.js +89 -0
  49. package/funcs/dashboardsPostSessionEventsDashboard.js.map +1 -0
  50. package/funcs/dashboardsPostSessionSummaryDashboard.d.ts +18 -0
  51. package/funcs/dashboardsPostSessionSummaryDashboard.d.ts.map +1 -0
  52. package/funcs/dashboardsPostSessionSummaryDashboard.js +89 -0
  53. package/funcs/dashboardsPostSessionSummaryDashboard.js.map +1 -0
  54. package/funcs/dashboardsPostSessionTransfersDashboard.d.ts +18 -0
  55. package/funcs/dashboardsPostSessionTransfersDashboard.d.ts.map +1 -0
  56. package/funcs/dashboardsPostSessionTransfersDashboard.js +89 -0
  57. package/funcs/dashboardsPostSessionTransfersDashboard.js.map +1 -0
  58. package/funcs/dashboardsPostSessionsDashboard.d.ts +18 -0
  59. package/funcs/dashboardsPostSessionsDashboard.d.ts.map +1 -0
  60. package/funcs/dashboardsPostSessionsDashboard.js +89 -0
  61. package/funcs/dashboardsPostSessionsDashboard.js.map +1 -0
  62. package/funcs/directoryCreate.js +4 -4
  63. package/funcs/directoryCreate.js.map +1 -1
  64. package/funcs/directoryDelete.js +4 -4
  65. package/funcs/directoryDelete.js.map +1 -1
  66. package/funcs/directoryDirectoryMemberBulkLoad.js +4 -4
  67. package/funcs/directoryDirectoryMemberBulkLoad.js.map +1 -1
  68. package/funcs/directoryDirectoryMemberDownload.js +4 -4
  69. package/funcs/directoryDirectoryMemberDownload.js.map +1 -1
  70. package/funcs/directoryGetById.js +4 -4
  71. package/funcs/directoryGetById.js.map +1 -1
  72. package/funcs/directoryList.js +4 -4
  73. package/funcs/directoryList.js.map +1 -1
  74. package/funcs/directoryUpdate.js +4 -4
  75. package/funcs/directoryUpdate.js.map +1 -1
  76. package/funcs/eventsList.js +4 -4
  77. package/funcs/eventsList.js.map +1 -1
  78. package/funcs/promptsCreate.js +4 -4
  79. package/funcs/promptsCreate.js.map +1 -1
  80. package/funcs/promptsDelete.js +4 -4
  81. package/funcs/promptsDelete.js.map +1 -1
  82. package/funcs/promptsGetById.js +4 -4
  83. package/funcs/promptsGetById.js.map +1 -1
  84. package/funcs/promptsList.js +4 -4
  85. package/funcs/promptsList.js.map +1 -1
  86. package/funcs/promptsPromptsHistory.js +4 -4
  87. package/funcs/promptsPromptsHistory.js.map +1 -1
  88. package/funcs/promptsUpdate.js +4 -4
  89. package/funcs/promptsUpdate.js.map +1 -1
  90. package/funcs/servicesCreate.js +4 -4
  91. package/funcs/servicesCreate.js.map +1 -1
  92. package/funcs/servicesList.js +4 -4
  93. package/funcs/servicesList.js.map +1 -1
  94. package/funcs/servicesUpdate.js +4 -4
  95. package/funcs/servicesUpdate.js.map +1 -1
  96. package/funcs/sessionLabelsCreate.js +4 -4
  97. package/funcs/sessionLabelsCreate.js.map +1 -1
  98. package/funcs/sessionLabelsGetById.js +4 -4
  99. package/funcs/sessionLabelsGetById.js.map +1 -1
  100. package/funcs/sessionLabelsList.js +4 -4
  101. package/funcs/sessionLabelsList.js.map +1 -1
  102. package/funcs/sessionsGenerateSessionRecordingUrls.js +4 -4
  103. package/funcs/sessionsGenerateSessionRecordingUrls.js.map +1 -1
  104. package/funcs/sessionsGetById.js +4 -4
  105. package/funcs/sessionsGetById.js.map +1 -1
  106. package/funcs/sessionsList.js +4 -4
  107. package/funcs/sessionsList.js.map +1 -1
  108. package/funcs/sessionsSessionRecordingStream.js +4 -4
  109. package/funcs/sessionsSessionRecordingStream.js.map +1 -1
  110. package/funcs/sessionsTranscriptGetById.js +4 -4
  111. package/funcs/sessionsTranscriptGetById.js.map +1 -1
  112. package/funcs/toolsCreate.js +4 -4
  113. package/funcs/toolsCreate.js.map +1 -1
  114. package/funcs/toolsGetByName.js +4 -4
  115. package/funcs/toolsGetByName.js.map +1 -1
  116. package/funcs/toolsList.js +4 -4
  117. package/funcs/toolsList.js.map +1 -1
  118. package/funcs/toolsUpdate.js +4 -4
  119. package/funcs/toolsUpdate.js.map +1 -1
  120. package/funcs/v1PostSessionEventsDashboard.d.ts +18 -0
  121. package/funcs/v1PostSessionEventsDashboard.d.ts.map +1 -0
  122. package/funcs/v1PostSessionEventsDashboard.js +89 -0
  123. package/funcs/v1PostSessionEventsDashboard.js.map +1 -0
  124. package/funcs/v1PostSessionSummaryDashboard.d.ts +18 -0
  125. package/funcs/v1PostSessionSummaryDashboard.d.ts.map +1 -0
  126. package/funcs/v1PostSessionSummaryDashboard.js +89 -0
  127. package/funcs/v1PostSessionSummaryDashboard.js.map +1 -0
  128. package/funcs/v1PostSessionTransfersDashboard.d.ts +18 -0
  129. package/funcs/v1PostSessionTransfersDashboard.d.ts.map +1 -0
  130. package/funcs/v1PostSessionTransfersDashboard.js +89 -0
  131. package/funcs/v1PostSessionTransfersDashboard.js.map +1 -0
  132. package/funcs/v1PostSessionsDashboard.d.ts +18 -0
  133. package/funcs/v1PostSessionsDashboard.d.ts.map +1 -0
  134. package/funcs/v1PostSessionsDashboard.js +89 -0
  135. package/funcs/v1PostSessionsDashboard.js.map +1 -0
  136. package/lib/config.d.ts +3 -3
  137. package/lib/config.js +4 -5
  138. package/lib/config.js.map +1 -1
  139. package/lib/encodings.js +18 -19
  140. package/lib/encodings.js.map +1 -1
  141. package/lib/env.js +1 -2
  142. package/lib/env.js.map +1 -1
  143. package/lib/http.js +1 -2
  144. package/lib/http.js.map +1 -1
  145. package/lib/matchers.js +5 -6
  146. package/lib/matchers.js.map +1 -1
  147. package/lib/primitives.js +1 -1
  148. package/lib/primitives.js.map +1 -1
  149. package/lib/retries.js +3 -4
  150. package/lib/retries.js.map +1 -1
  151. package/lib/sdks.js +15 -16
  152. package/lib/sdks.js.map +1 -1
  153. package/lib/security.js +2 -3
  154. package/lib/security.js.map +1 -1
  155. package/lib/url.js +1 -1
  156. package/lib/url.js.map +1 -1
  157. package/mintlify/scripts/create-md-script.js +46 -0
  158. package/mintlify/scripts/generate-mintlify-sdk-docs.js +117 -0
  159. package/models/components/channel.d.ts +0 -3
  160. package/models/components/channel.d.ts.map +1 -1
  161. package/models/components/channel.js.map +1 -1
  162. package/models/components/channeltarget.d.ts +16 -16
  163. package/models/components/channeltarget.d.ts.map +1 -1
  164. package/models/components/channeltarget.js +16 -16
  165. package/models/components/channeltarget.js.map +1 -1
  166. package/models/components/channeltargetcreaterequest.d.ts +12 -12
  167. package/models/components/channeltargetcreaterequest.d.ts.map +1 -1
  168. package/models/components/channeltargetcreaterequest.js +12 -12
  169. package/models/components/channeltargetcreaterequest.js.map +1 -1
  170. package/models/components/channeltargetproperties.d.ts +3 -0
  171. package/models/components/channeltargetproperties.d.ts.map +1 -1
  172. package/models/components/channeltargetproperties.js +1 -0
  173. package/models/components/channeltargetproperties.js.map +1 -1
  174. package/models/components/channeltargetupdaterequest.d.ts +12 -12
  175. package/models/components/channeltargetupdaterequest.d.ts.map +1 -1
  176. package/models/components/channeltargetupdaterequest.js +12 -12
  177. package/models/components/channeltargetupdaterequest.js.map +1 -1
  178. package/models/components/dashboard.d.ts +35 -0
  179. package/models/components/dashboard.d.ts.map +1 -0
  180. package/models/components/dashboard.js +78 -0
  181. package/models/components/dashboard.js.map +1 -0
  182. package/models/components/function.d.ts +74 -0
  183. package/models/components/function.d.ts.map +1 -0
  184. package/models/components/function.js +86 -0
  185. package/models/components/function.js.map +1 -0
  186. package/models/components/httpendpoint.d.ts +114 -0
  187. package/models/components/httpendpoint.d.ts.map +1 -0
  188. package/models/components/httpendpoint.js +119 -0
  189. package/models/components/httpendpoint.js.map +1 -0
  190. package/models/components/index.d.ts +9 -0
  191. package/models/components/index.d.ts.map +1 -1
  192. package/models/components/index.js +9 -0
  193. package/models/components/index.js.map +1 -1
  194. package/models/components/llmconfig.d.ts +3 -34
  195. package/models/components/llmconfig.d.ts.map +1 -1
  196. package/models/components/llmconfig.js +4 -26
  197. package/models/components/llmconfig.js.map +1 -1
  198. package/models/components/prompt.d.ts +0 -3
  199. package/models/components/prompt.d.ts.map +1 -1
  200. package/models/components/prompt.js.map +1 -1
  201. package/models/components/promptcreate.d.ts +0 -3
  202. package/models/components/promptcreate.d.ts.map +1 -1
  203. package/models/components/promptcreate.js.map +1 -1
  204. package/models/components/promptupdate.d.ts +0 -3
  205. package/models/components/promptupdate.d.ts.map +1 -1
  206. package/models/components/promptupdate.js.map +1 -1
  207. package/models/components/provider.d.ts +34 -0
  208. package/models/components/provider.d.ts.map +1 -0
  209. package/models/components/provider.js +54 -0
  210. package/models/components/provider.js.map +1 -0
  211. package/models/components/sdkinternaltool.d.ts +46 -0
  212. package/models/components/sdkinternaltool.d.ts.map +1 -0
  213. package/models/components/sdkinternaltool.js +62 -0
  214. package/models/components/sdkinternaltool.js.map +1 -0
  215. package/models/components/sdktooldefinition.d.ts +161 -0
  216. package/models/components/sdktooldefinition.d.ts.map +1 -0
  217. package/models/components/sdktooldefinition.js +175 -0
  218. package/models/components/sdktooldefinition.js.map +1 -0
  219. package/models/components/target.d.ts +0 -3
  220. package/models/components/target.d.ts.map +1 -1
  221. package/models/components/target.js.map +1 -1
  222. package/models/components/tool.d.ts +3 -29
  223. package/models/components/tool.d.ts.map +1 -1
  224. package/models/components/tool.js +4 -26
  225. package/models/components/tool.js.map +1 -1
  226. package/models/components/toolcreate.d.ts +3 -29
  227. package/models/components/toolcreate.d.ts.map +1 -1
  228. package/models/components/toolcreate.js +4 -26
  229. package/models/components/toolcreate.js.map +1 -1
  230. package/models/components/toolparameterdefault.d.ts +42 -0
  231. package/models/components/toolparameterdefault.d.ts.map +1 -0
  232. package/models/components/toolparameterdefault.js +60 -0
  233. package/models/components/toolparameterdefault.js.map +1 -0
  234. package/models/components/toolparametertransform.d.ts +92 -0
  235. package/models/components/toolparametertransform.d.ts.map +1 -0
  236. package/models/components/toolparametertransform.js +90 -0
  237. package/models/components/toolparametertransform.js.map +1 -0
  238. package/models/components/toolparametertransformcondition.d.ts +45 -0
  239. package/models/components/toolparametertransformcondition.d.ts.map +1 -0
  240. package/models/components/toolparametertransformcondition.js +63 -0
  241. package/models/components/toolparametertransformcondition.js.map +1 -0
  242. package/models/components/toolupdate.d.ts +3 -29
  243. package/models/components/toolupdate.d.ts.map +1 -1
  244. package/models/components/toolupdate.js +4 -26
  245. package/models/components/toolupdate.js.map +1 -1
  246. package/models/errors/httpclienterrors.js +2 -2
  247. package/models/errors/httpclienterrors.js.map +1 -1
  248. package/package.json +1 -1
  249. package/sdk/agents.js +1 -2
  250. package/sdk/agents.js.map +1 -1
  251. package/sdk/channels.js +1 -2
  252. package/sdk/channels.js.map +1 -1
  253. package/sdk/dashboards.d.ts +45 -0
  254. package/sdk/dashboards.d.ts.map +1 -0
  255. package/sdk/dashboards.js +64 -0
  256. package/sdk/dashboards.js.map +1 -0
  257. package/sdk/sdk.d.ts +6 -0
  258. package/sdk/sdk.d.ts.map +1 -1
  259. package/sdk/sdk.js +19 -22
  260. package/sdk/sdk.js.map +1 -1
  261. package/sdk/sessions.js +1 -2
  262. package/sdk/sessions.js.map +1 -1
  263. package/sdk/v1.d.ts +45 -0
  264. package/sdk/v1.d.ts.map +1 -0
  265. package/sdk/v1.js +64 -0
  266. package/sdk/v1.js.map +1 -0
  267. package/src/funcs/dashboardsPostSessionEventsDashboard.ts +111 -0
  268. package/src/funcs/dashboardsPostSessionSummaryDashboard.ts +111 -0
  269. package/src/funcs/dashboardsPostSessionTransfersDashboard.ts +111 -0
  270. package/src/funcs/dashboardsPostSessionsDashboard.ts +111 -0
  271. package/src/funcs/v1PostSessionEventsDashboard.ts +111 -0
  272. package/src/funcs/v1PostSessionSummaryDashboard.ts +111 -0
  273. package/src/funcs/v1PostSessionTransfersDashboard.ts +111 -0
  274. package/src/funcs/v1PostSessionsDashboard.ts +111 -0
  275. package/src/lib/config.ts +3 -3
  276. package/src/lib/security.ts +1 -1
  277. package/src/models/components/channel.ts +0 -3
  278. package/src/models/components/channeltarget.ts +32 -32
  279. package/src/models/components/channeltargetcreaterequest.ts +24 -24
  280. package/src/models/components/channeltargetproperties.ts +1 -0
  281. package/src/models/components/channeltargetupdaterequest.ts +24 -24
  282. package/src/models/components/dashboard.ts +87 -0
  283. package/src/models/components/function.ts +136 -0
  284. package/src/models/components/httpendpoint.ts +158 -0
  285. package/src/models/components/index.ts +9 -0
  286. package/src/models/components/llmconfig.ts +9 -36
  287. package/src/models/components/prompt.ts +0 -3
  288. package/src/models/components/promptcreate.ts +0 -3
  289. package/src/models/components/promptupdate.ts +0 -3
  290. package/src/models/components/provider.ts +37 -0
  291. package/src/models/components/sdkinternaltool.ts +88 -0
  292. package/src/models/components/sdktooldefinition.ts +298 -0
  293. package/src/models/components/target.ts +0 -3
  294. package/src/models/components/tool.ts +10 -56
  295. package/src/models/components/toolcreate.ts +10 -60
  296. package/src/models/components/toolparameterdefault.ts +84 -0
  297. package/src/models/components/toolparametertransform.ts +138 -0
  298. package/src/models/components/toolparametertransformcondition.ts +88 -0
  299. package/src/models/components/toolupdate.ts +10 -60
  300. package/src/sdk/dashboards.ts +85 -0
  301. package/src/sdk/sdk.ts +12 -0
  302. package/src/sdk/v1.ts +85 -0
  303. package/test/sdk/contract/agents.test.ts +113 -0
  304. package/test/sdk/contract/custommessages.test.ts +109 -0
  305. package/test/sdk/contract/helper.ts +190 -0
  306. package/test/sdk/contract/prompts.test.ts +70 -0
@@ -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
+ })