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.
- package/README.md +22 -0
- package/RUNTIMES.md +27 -1
- package/docs/sdks/dashboards/README.md +309 -0
- package/docs/sdks/tools/README.md +36 -0
- package/docs/sdks/v1/README.md +307 -0
- package/funcs/agentsAgentGetAvailableVoices.js +4 -4
- package/funcs/agentsAgentGetAvailableVoices.js.map +1 -1
- package/funcs/agentsCreate.js +4 -4
- package/funcs/agentsCreate.js.map +1 -1
- package/funcs/agentsDelete.js +4 -4
- package/funcs/agentsDelete.js.map +1 -1
- package/funcs/agentsGetById.js +4 -4
- package/funcs/agentsGetById.js.map +1 -1
- package/funcs/agentsList.js +4 -4
- package/funcs/agentsList.js.map +1 -1
- package/funcs/agentsTestSendTestMessage.js +4 -4
- package/funcs/agentsTestSendTestMessage.js.map +1 -1
- package/funcs/agentsUpdate.js +4 -4
- package/funcs/agentsUpdate.js.map +1 -1
- package/funcs/channelsDelete.js +4 -4
- package/funcs/channelsDelete.js.map +1 -1
- package/funcs/channelsList.js +4 -4
- package/funcs/channelsList.js.map +1 -1
- package/funcs/channelsTargetsAvailableTargets.js +4 -4
- package/funcs/channelsTargetsAvailableTargets.js.map +1 -1
- package/funcs/channelsTargetsCreate.js +4 -4
- package/funcs/channelsTargetsCreate.js.map +1 -1
- package/funcs/channelsTargetsGetById.js +4 -4
- package/funcs/channelsTargetsGetById.js.map +1 -1
- package/funcs/channelsTargetsList.js +4 -4
- package/funcs/channelsTargetsList.js.map +1 -1
- package/funcs/channelsTargetsUpdate.js +4 -4
- package/funcs/channelsTargetsUpdate.js.map +1 -1
- package/funcs/conversationsList.js +4 -4
- package/funcs/conversationsList.js.map +1 -1
- package/funcs/customMessagesCreate.js +4 -4
- package/funcs/customMessagesCreate.js.map +1 -1
- package/funcs/customMessagesDelete.js +4 -4
- package/funcs/customMessagesDelete.js.map +1 -1
- package/funcs/customMessagesGetById.js +4 -4
- package/funcs/customMessagesGetById.js.map +1 -1
- package/funcs/customMessagesList.js +4 -4
- package/funcs/customMessagesList.js.map +1 -1
- package/funcs/customMessagesUpdate.js +4 -4
- package/funcs/customMessagesUpdate.js.map +1 -1
- package/funcs/dashboardsPostSessionEventsDashboard.d.ts +18 -0
- package/funcs/dashboardsPostSessionEventsDashboard.d.ts.map +1 -0
- package/funcs/dashboardsPostSessionEventsDashboard.js +89 -0
- package/funcs/dashboardsPostSessionEventsDashboard.js.map +1 -0
- package/funcs/dashboardsPostSessionSummaryDashboard.d.ts +18 -0
- package/funcs/dashboardsPostSessionSummaryDashboard.d.ts.map +1 -0
- package/funcs/dashboardsPostSessionSummaryDashboard.js +89 -0
- package/funcs/dashboardsPostSessionSummaryDashboard.js.map +1 -0
- package/funcs/dashboardsPostSessionTransfersDashboard.d.ts +18 -0
- package/funcs/dashboardsPostSessionTransfersDashboard.d.ts.map +1 -0
- package/funcs/dashboardsPostSessionTransfersDashboard.js +89 -0
- package/funcs/dashboardsPostSessionTransfersDashboard.js.map +1 -0
- package/funcs/dashboardsPostSessionsDashboard.d.ts +18 -0
- package/funcs/dashboardsPostSessionsDashboard.d.ts.map +1 -0
- package/funcs/dashboardsPostSessionsDashboard.js +89 -0
- package/funcs/dashboardsPostSessionsDashboard.js.map +1 -0
- package/funcs/directoryCreate.js +4 -4
- package/funcs/directoryCreate.js.map +1 -1
- package/funcs/directoryDelete.js +4 -4
- package/funcs/directoryDelete.js.map +1 -1
- package/funcs/directoryDirectoryMemberBulkLoad.js +4 -4
- package/funcs/directoryDirectoryMemberBulkLoad.js.map +1 -1
- package/funcs/directoryDirectoryMemberDownload.js +4 -4
- package/funcs/directoryDirectoryMemberDownload.js.map +1 -1
- package/funcs/directoryGetById.js +4 -4
- package/funcs/directoryGetById.js.map +1 -1
- package/funcs/directoryList.js +4 -4
- package/funcs/directoryList.js.map +1 -1
- package/funcs/directoryUpdate.js +4 -4
- package/funcs/directoryUpdate.js.map +1 -1
- package/funcs/eventsList.js +4 -4
- package/funcs/eventsList.js.map +1 -1
- package/funcs/promptsCreate.js +4 -4
- package/funcs/promptsCreate.js.map +1 -1
- package/funcs/promptsDelete.js +4 -4
- package/funcs/promptsDelete.js.map +1 -1
- package/funcs/promptsGetById.js +4 -4
- package/funcs/promptsGetById.js.map +1 -1
- package/funcs/promptsList.js +4 -4
- package/funcs/promptsList.js.map +1 -1
- package/funcs/promptsPromptsHistory.js +4 -4
- package/funcs/promptsPromptsHistory.js.map +1 -1
- package/funcs/promptsUpdate.js +4 -4
- package/funcs/promptsUpdate.js.map +1 -1
- package/funcs/servicesCreate.js +4 -4
- package/funcs/servicesCreate.js.map +1 -1
- package/funcs/servicesList.js +4 -4
- package/funcs/servicesList.js.map +1 -1
- package/funcs/servicesUpdate.js +4 -4
- package/funcs/servicesUpdate.js.map +1 -1
- package/funcs/sessionLabelsCreate.js +4 -4
- package/funcs/sessionLabelsCreate.js.map +1 -1
- package/funcs/sessionLabelsGetById.js +4 -4
- package/funcs/sessionLabelsGetById.js.map +1 -1
- package/funcs/sessionLabelsList.js +4 -4
- package/funcs/sessionLabelsList.js.map +1 -1
- package/funcs/sessionsGenerateSessionRecordingUrls.js +4 -4
- package/funcs/sessionsGenerateSessionRecordingUrls.js.map +1 -1
- package/funcs/sessionsGetById.js +4 -4
- package/funcs/sessionsGetById.js.map +1 -1
- package/funcs/sessionsList.js +4 -4
- package/funcs/sessionsList.js.map +1 -1
- package/funcs/sessionsSessionRecordingStream.js +4 -4
- package/funcs/sessionsSessionRecordingStream.js.map +1 -1
- package/funcs/sessionsTranscriptGetById.js +4 -4
- package/funcs/sessionsTranscriptGetById.js.map +1 -1
- package/funcs/toolsCreate.js +4 -4
- package/funcs/toolsCreate.js.map +1 -1
- package/funcs/toolsGetByName.js +4 -4
- package/funcs/toolsGetByName.js.map +1 -1
- package/funcs/toolsList.js +4 -4
- package/funcs/toolsList.js.map +1 -1
- package/funcs/toolsUpdate.js +4 -4
- package/funcs/toolsUpdate.js.map +1 -1
- package/funcs/v1PostSessionEventsDashboard.d.ts +18 -0
- package/funcs/v1PostSessionEventsDashboard.d.ts.map +1 -0
- package/funcs/v1PostSessionEventsDashboard.js +89 -0
- package/funcs/v1PostSessionEventsDashboard.js.map +1 -0
- package/funcs/v1PostSessionSummaryDashboard.d.ts +18 -0
- package/funcs/v1PostSessionSummaryDashboard.d.ts.map +1 -0
- package/funcs/v1PostSessionSummaryDashboard.js +89 -0
- package/funcs/v1PostSessionSummaryDashboard.js.map +1 -0
- package/funcs/v1PostSessionTransfersDashboard.d.ts +18 -0
- package/funcs/v1PostSessionTransfersDashboard.d.ts.map +1 -0
- package/funcs/v1PostSessionTransfersDashboard.js +89 -0
- package/funcs/v1PostSessionTransfersDashboard.js.map +1 -0
- package/funcs/v1PostSessionsDashboard.d.ts +18 -0
- package/funcs/v1PostSessionsDashboard.d.ts.map +1 -0
- package/funcs/v1PostSessionsDashboard.js +89 -0
- package/funcs/v1PostSessionsDashboard.js.map +1 -0
- package/lib/config.d.ts +3 -3
- package/lib/config.js +4 -5
- package/lib/config.js.map +1 -1
- package/lib/encodings.js +18 -19
- package/lib/encodings.js.map +1 -1
- package/lib/env.js +1 -2
- package/lib/env.js.map +1 -1
- package/lib/http.js +1 -2
- package/lib/http.js.map +1 -1
- package/lib/matchers.js +5 -6
- package/lib/matchers.js.map +1 -1
- package/lib/primitives.js +1 -1
- package/lib/primitives.js.map +1 -1
- package/lib/retries.js +3 -4
- package/lib/retries.js.map +1 -1
- package/lib/sdks.js +15 -16
- package/lib/sdks.js.map +1 -1
- package/lib/security.js +2 -3
- package/lib/security.js.map +1 -1
- package/lib/url.js +1 -1
- package/lib/url.js.map +1 -1
- package/mintlify/scripts/create-md-script.js +46 -0
- package/mintlify/scripts/generate-mintlify-sdk-docs.js +117 -0
- package/models/components/channel.d.ts +0 -3
- package/models/components/channel.d.ts.map +1 -1
- package/models/components/channel.js.map +1 -1
- package/models/components/channeltarget.d.ts +16 -16
- package/models/components/channeltarget.d.ts.map +1 -1
- package/models/components/channeltarget.js +16 -16
- package/models/components/channeltarget.js.map +1 -1
- package/models/components/channeltargetcreaterequest.d.ts +12 -12
- package/models/components/channeltargetcreaterequest.d.ts.map +1 -1
- package/models/components/channeltargetcreaterequest.js +12 -12
- package/models/components/channeltargetcreaterequest.js.map +1 -1
- package/models/components/channeltargetproperties.d.ts +3 -0
- package/models/components/channeltargetproperties.d.ts.map +1 -1
- package/models/components/channeltargetproperties.js +1 -0
- package/models/components/channeltargetproperties.js.map +1 -1
- package/models/components/channeltargetupdaterequest.d.ts +12 -12
- package/models/components/channeltargetupdaterequest.d.ts.map +1 -1
- package/models/components/channeltargetupdaterequest.js +12 -12
- package/models/components/channeltargetupdaterequest.js.map +1 -1
- package/models/components/dashboard.d.ts +35 -0
- package/models/components/dashboard.d.ts.map +1 -0
- package/models/components/dashboard.js +78 -0
- package/models/components/dashboard.js.map +1 -0
- package/models/components/function.d.ts +74 -0
- package/models/components/function.d.ts.map +1 -0
- package/models/components/function.js +86 -0
- package/models/components/function.js.map +1 -0
- package/models/components/httpendpoint.d.ts +114 -0
- package/models/components/httpendpoint.d.ts.map +1 -0
- package/models/components/httpendpoint.js +119 -0
- package/models/components/httpendpoint.js.map +1 -0
- package/models/components/index.d.ts +9 -0
- package/models/components/index.d.ts.map +1 -1
- package/models/components/index.js +9 -0
- package/models/components/index.js.map +1 -1
- package/models/components/llmconfig.d.ts +3 -34
- package/models/components/llmconfig.d.ts.map +1 -1
- package/models/components/llmconfig.js +4 -26
- package/models/components/llmconfig.js.map +1 -1
- package/models/components/prompt.d.ts +0 -3
- package/models/components/prompt.d.ts.map +1 -1
- package/models/components/prompt.js.map +1 -1
- package/models/components/promptcreate.d.ts +0 -3
- package/models/components/promptcreate.d.ts.map +1 -1
- package/models/components/promptcreate.js.map +1 -1
- package/models/components/promptupdate.d.ts +0 -3
- package/models/components/promptupdate.d.ts.map +1 -1
- package/models/components/promptupdate.js.map +1 -1
- package/models/components/provider.d.ts +34 -0
- package/models/components/provider.d.ts.map +1 -0
- package/models/components/provider.js +54 -0
- package/models/components/provider.js.map +1 -0
- package/models/components/sdkinternaltool.d.ts +46 -0
- package/models/components/sdkinternaltool.d.ts.map +1 -0
- package/models/components/sdkinternaltool.js +62 -0
- package/models/components/sdkinternaltool.js.map +1 -0
- package/models/components/sdktooldefinition.d.ts +161 -0
- package/models/components/sdktooldefinition.d.ts.map +1 -0
- package/models/components/sdktooldefinition.js +175 -0
- package/models/components/sdktooldefinition.js.map +1 -0
- package/models/components/target.d.ts +0 -3
- package/models/components/target.d.ts.map +1 -1
- package/models/components/target.js.map +1 -1
- package/models/components/tool.d.ts +3 -29
- package/models/components/tool.d.ts.map +1 -1
- package/models/components/tool.js +4 -26
- package/models/components/tool.js.map +1 -1
- package/models/components/toolcreate.d.ts +3 -29
- package/models/components/toolcreate.d.ts.map +1 -1
- package/models/components/toolcreate.js +4 -26
- package/models/components/toolcreate.js.map +1 -1
- package/models/components/toolparameterdefault.d.ts +42 -0
- package/models/components/toolparameterdefault.d.ts.map +1 -0
- package/models/components/toolparameterdefault.js +60 -0
- package/models/components/toolparameterdefault.js.map +1 -0
- package/models/components/toolparametertransform.d.ts +92 -0
- package/models/components/toolparametertransform.d.ts.map +1 -0
- package/models/components/toolparametertransform.js +90 -0
- package/models/components/toolparametertransform.js.map +1 -0
- package/models/components/toolparametertransformcondition.d.ts +45 -0
- package/models/components/toolparametertransformcondition.d.ts.map +1 -0
- package/models/components/toolparametertransformcondition.js +63 -0
- package/models/components/toolparametertransformcondition.js.map +1 -0
- package/models/components/toolupdate.d.ts +3 -29
- package/models/components/toolupdate.d.ts.map +1 -1
- package/models/components/toolupdate.js +4 -26
- package/models/components/toolupdate.js.map +1 -1
- package/models/errors/httpclienterrors.js +2 -2
- package/models/errors/httpclienterrors.js.map +1 -1
- package/package.json +1 -1
- package/sdk/agents.js +1 -2
- package/sdk/agents.js.map +1 -1
- package/sdk/channels.js +1 -2
- package/sdk/channels.js.map +1 -1
- package/sdk/dashboards.d.ts +45 -0
- package/sdk/dashboards.d.ts.map +1 -0
- package/sdk/dashboards.js +64 -0
- package/sdk/dashboards.js.map +1 -0
- package/sdk/sdk.d.ts +6 -0
- package/sdk/sdk.d.ts.map +1 -1
- package/sdk/sdk.js +19 -22
- package/sdk/sdk.js.map +1 -1
- package/sdk/sessions.js +1 -2
- package/sdk/sessions.js.map +1 -1
- package/sdk/v1.d.ts +45 -0
- package/sdk/v1.d.ts.map +1 -0
- package/sdk/v1.js +64 -0
- package/sdk/v1.js.map +1 -0
- package/src/funcs/dashboardsPostSessionEventsDashboard.ts +111 -0
- package/src/funcs/dashboardsPostSessionSummaryDashboard.ts +111 -0
- package/src/funcs/dashboardsPostSessionTransfersDashboard.ts +111 -0
- package/src/funcs/dashboardsPostSessionsDashboard.ts +111 -0
- package/src/funcs/v1PostSessionEventsDashboard.ts +111 -0
- package/src/funcs/v1PostSessionSummaryDashboard.ts +111 -0
- package/src/funcs/v1PostSessionTransfersDashboard.ts +111 -0
- package/src/funcs/v1PostSessionsDashboard.ts +111 -0
- package/src/lib/config.ts +3 -3
- package/src/lib/security.ts +1 -1
- package/src/models/components/channel.ts +0 -3
- package/src/models/components/channeltarget.ts +32 -32
- package/src/models/components/channeltargetcreaterequest.ts +24 -24
- package/src/models/components/channeltargetproperties.ts +1 -0
- package/src/models/components/channeltargetupdaterequest.ts +24 -24
- package/src/models/components/dashboard.ts +87 -0
- package/src/models/components/function.ts +136 -0
- package/src/models/components/httpendpoint.ts +158 -0
- package/src/models/components/index.ts +9 -0
- package/src/models/components/llmconfig.ts +9 -36
- package/src/models/components/prompt.ts +0 -3
- package/src/models/components/promptcreate.ts +0 -3
- package/src/models/components/promptupdate.ts +0 -3
- package/src/models/components/provider.ts +37 -0
- package/src/models/components/sdkinternaltool.ts +88 -0
- package/src/models/components/sdktooldefinition.ts +298 -0
- package/src/models/components/target.ts +0 -3
- package/src/models/components/tool.ts +10 -56
- package/src/models/components/toolcreate.ts +10 -60
- package/src/models/components/toolparameterdefault.ts +84 -0
- package/src/models/components/toolparametertransform.ts +138 -0
- package/src/models/components/toolparametertransformcondition.ts +88 -0
- package/src/models/components/toolupdate.ts +10 -60
- package/src/sdk/dashboards.ts +85 -0
- package/src/sdk/sdk.ts +12 -0
- package/src/sdk/v1.ts +85 -0
- package/test/sdk/contract/agents.test.ts +113 -0
- package/test/sdk/contract/custommessages.test.ts +109 -0
- package/test/sdk/contract/helper.ts +190 -0
- 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
|
+
})
|