@tellescope/sdk 0.0.14 → 0.0.18
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/lib/cjs/enduser.d.ts +34 -5
- package/lib/cjs/enduser.d.ts.map +1 -1
- package/lib/cjs/enduser.js +5 -4
- package/lib/cjs/enduser.js.map +1 -1
- package/lib/cjs/sdk.d.ts +51 -16
- package/lib/cjs/sdk.d.ts.map +1 -1
- package/lib/cjs/sdk.js +10 -10
- package/lib/cjs/sdk.js.map +1 -1
- package/lib/cjs/session.d.ts +5 -21
- package/lib/cjs/session.d.ts.map +1 -1
- package/lib/cjs/session.js +12 -0
- package/lib/cjs/session.js.map +1 -1
- package/lib/cjs/tests/public_endpoint_tests.js +4 -4
- package/lib/cjs/tests/public_endpoint_tests.js.map +1 -1
- package/lib/cjs/tests/socket_tests.d.ts +1 -1
- package/lib/cjs/tests/socket_tests.d.ts.map +1 -1
- package/lib/cjs/tests/socket_tests.js +125 -8
- package/lib/cjs/tests/socket_tests.js.map +1 -1
- package/lib/cjs/tests/tests.js +207 -97
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/esm/enduser.d.ts +34 -5
- package/lib/esm/enduser.d.ts.map +1 -1
- package/lib/esm/enduser.js +5 -4
- package/lib/esm/enduser.js.map +1 -1
- package/lib/esm/sdk.d.ts +51 -16
- package/lib/esm/sdk.d.ts.map +1 -1
- package/lib/esm/sdk.js +10 -10
- package/lib/esm/sdk.js.map +1 -1
- package/lib/esm/session.d.ts +5 -21
- package/lib/esm/session.d.ts.map +1 -1
- package/lib/esm/session.js +12 -0
- package/lib/esm/session.js.map +1 -1
- package/lib/esm/tests/public_endpoint_tests.js +4 -4
- package/lib/esm/tests/public_endpoint_tests.js.map +1 -1
- package/lib/esm/tests/socket_tests.d.ts +1 -1
- package/lib/esm/tests/socket_tests.d.ts.map +1 -1
- package/lib/esm/tests/socket_tests.js +123 -8
- package/lib/esm/tests/socket_tests.js.map +1 -1
- package/lib/esm/tests/tests.js +188 -97
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/enduser.ts +12 -8
- package/src/sdk.ts +31 -20
- package/src/session.ts +8 -18
- package/src/tests/public_endpoint_tests.ts +4 -4
- package/src/tests/socket_tests.ts +68 -5
- package/src/tests/tests.ts +116 -36
package/src/tests/tests.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
require('source-map-support').install();
|
|
2
|
+
import * as fs from "fs"
|
|
3
|
+
import * as buffer from "buffer" // only node >=15.7.0
|
|
2
4
|
|
|
3
5
|
import {
|
|
4
6
|
Enduser,
|
|
@@ -69,7 +71,7 @@ const userId = '60398b0231a295e64f084fd9'
|
|
|
69
71
|
// await sdk.api.endusers.deleteOne(enduser.id)
|
|
70
72
|
// }
|
|
71
73
|
|
|
72
|
-
const sdk = new Session()
|
|
74
|
+
const sdk = new Session({ host })
|
|
73
75
|
const sdkOther = new Session({ host, apiKey: "ba745e25162bb95a795c5fa1af70df188d93c4d3aac9c48b34a5c8c9dd7b80f7" })
|
|
74
76
|
const enduserSDK = new EnduserSession({ host })
|
|
75
77
|
// const sdkOtherEmail = "sebass@tellescope.com"
|
|
@@ -88,8 +90,6 @@ const setup_tests = async () => {
|
|
|
88
90
|
await async_test('test_online', sdk.test_online, { expectedResult: 'API V1 Online' })
|
|
89
91
|
await async_test('test_authenticated', sdk.test_authenticated, { expectedResult: 'Authenticated!' })
|
|
90
92
|
|
|
91
|
-
// console.log(await sdk.api.api_keys.createOne({}))
|
|
92
|
-
|
|
93
93
|
await async_test(
|
|
94
94
|
'test_authenticated (with API Key)',
|
|
95
95
|
(new Session({ host, apiKey: '3n5q0SCBT_iUvZz-b9BJtX7o7HQUVJ9v132PgHJNJsg.' /* local test key */ })).test_authenticated,
|
|
@@ -98,7 +98,7 @@ const setup_tests = async () => {
|
|
|
98
98
|
|
|
99
99
|
await sdk.logout()
|
|
100
100
|
await async_test<string, string>('test_authenticated - (logout invalidates jwt)', sdk.test_authenticated, { shouldError: true, onError: e => e === 'Unauthenticated' })
|
|
101
|
-
await sdk.authenticate(email, password
|
|
101
|
+
await sdk.authenticate(email, password)
|
|
102
102
|
await async_test('test_authenticated (re-authenticated)', sdk.test_authenticated, { expectedResult: 'Authenticated!' })
|
|
103
103
|
|
|
104
104
|
await async_test('reset_db', () => sdk.reset_db(), passOnVoid)
|
|
@@ -189,14 +189,39 @@ const threadKeyTests = async () => {
|
|
|
189
189
|
])
|
|
190
190
|
}
|
|
191
191
|
|
|
192
|
+
const badInputTests = async () => {
|
|
193
|
+
log_header("Bad Input Tests")
|
|
194
|
+
await async_test(
|
|
195
|
+
`_-prefixed fields are not allowed`,
|
|
196
|
+
() => sdk.api.endusers.createOne({ email: 'failure@tellescope.com', fields: { "_notallowed": 'hello' } }),
|
|
197
|
+
{ shouldError: true, onError: e => e.message === "Error parsing field fields: Fields that start with '_' are not allowed" },
|
|
198
|
+
)
|
|
199
|
+
await async_test(
|
|
200
|
+
`_-prefixed fields are not allowed`,
|
|
201
|
+
() => sdk.api.notes.createOne({ enduserId: PLACEHOLDER_ID, fields: { "_notallowed": 'hello' } }),
|
|
202
|
+
{ shouldError: true, onError: e => e.message === "Error parsing field fields: Fields that start with '_' are not allowed" },
|
|
203
|
+
)
|
|
204
|
+
}
|
|
205
|
+
|
|
192
206
|
const filterTests = async () => {
|
|
193
|
-
const enduser = await sdk.api.endusers.createOne({ email: 'filtertests@tellescope.com', fname: 'test' })
|
|
207
|
+
const enduser = await sdk.api.endusers.createOne({ email: 'filtertests@tellescope.com', fname: 'test', fields: { field1: 'value1', field2: 'value2' } })
|
|
194
208
|
const otherEnduser = await sdk.api.endusers.createOne({ email: 'other@tellescope.com' })
|
|
195
209
|
await async_test(
|
|
196
210
|
`find enduser by filter`,
|
|
197
211
|
() => sdk.api.endusers.getSome({ filter: { email: 'filtertests@tellescope.com' }}),
|
|
198
212
|
{ onResult: es => es.length === 1 && es[0].id === enduser.id },
|
|
199
213
|
)
|
|
214
|
+
await async_test(
|
|
215
|
+
`find enduser by _exists filter`,
|
|
216
|
+
() => sdk.api.endusers.getSome({ filter: { fname: { _exists: true } }}),
|
|
217
|
+
{ onResult: es => es.length === 1 && es[0].id === enduser.id },
|
|
218
|
+
)
|
|
219
|
+
await async_test(
|
|
220
|
+
`find enduser by _exists filter (findOne)`,
|
|
221
|
+
// () => sdk.api.endusers.getOne({ fname: { _exists: true } }),
|
|
222
|
+
() => sdk.api.endusers.getOne({ fname: { _exists: true } }),
|
|
223
|
+
{ onResult: e => e.id === enduser.id },
|
|
224
|
+
)
|
|
200
225
|
await async_test(
|
|
201
226
|
`find enduser by compound filter`,
|
|
202
227
|
() => sdk.api.endusers.getSome({ filter: { email: 'filtertests@tellescope.com', fname: 'test' }}),
|
|
@@ -212,6 +237,36 @@ const filterTests = async () => {
|
|
|
212
237
|
() => sdk.api.endusers.getSome({ filter: { email: 'doesnotexist@tellescope.com' }}),
|
|
213
238
|
{ onResult: es => es.length === 0 },
|
|
214
239
|
)
|
|
240
|
+
await async_test(
|
|
241
|
+
`find enduser by nested filter`,
|
|
242
|
+
() => sdk.api.endusers.getSome({ filter: { fields: { field1: 'value1' } } }),
|
|
243
|
+
{ onResult: es => es.length === 1 && es[0].id === enduser.id },
|
|
244
|
+
)
|
|
245
|
+
await async_test(
|
|
246
|
+
`nothing found by invalid nested filter`,
|
|
247
|
+
() => sdk.api.endusers.getSome({ filter: { fields: { field1: 'not a nested field value' } }}),
|
|
248
|
+
{ onResult: es => es.length === 0 },
|
|
249
|
+
)
|
|
250
|
+
await async_test(
|
|
251
|
+
`find enduser by compound nested filter`,
|
|
252
|
+
() => sdk.api.endusers.getSome({ filter: { fields: { field1: 'value1', field2: 'value2' } } }),
|
|
253
|
+
{ onResult: es => es.length === 1 && es[0].id === enduser.id },
|
|
254
|
+
)
|
|
255
|
+
await async_test(
|
|
256
|
+
`nothing found by compound invalid nested filter`,
|
|
257
|
+
() => sdk.api.endusers.getSome({ filter: { fields: { field1: 'not a nested field value', field2: 'value2' } }}),
|
|
258
|
+
{ onResult: es => es.length === 0 },
|
|
259
|
+
)
|
|
260
|
+
await async_test(
|
|
261
|
+
`find enduser by compound nested filter with non-nested field as well`,
|
|
262
|
+
() => sdk.api.endusers.getSome({ filter: {email: 'filtertests@tellescope.com', fields: { field1: 'value1', field2: 'value2' } } }),
|
|
263
|
+
{ onResult: es => es.length === 1 && es[0].id === enduser.id },
|
|
264
|
+
)
|
|
265
|
+
await async_test(
|
|
266
|
+
`nothing found for compound nested filter with non-nested field as well`,
|
|
267
|
+
() => sdk.api.endusers.getSome({ filter: {email: 'doesnotexist@tellescope.com', fields: { field1: 'value1', field2: 'value2' } } }),
|
|
268
|
+
{ onResult: es => es.length === 0 },
|
|
269
|
+
)
|
|
215
270
|
|
|
216
271
|
await sdk.api.endusers.deleteOne(enduser.id)
|
|
217
272
|
await sdk.api.endusers.deleteOne(otherEnduser.id)
|
|
@@ -233,11 +288,31 @@ const updatesTests = async () => {
|
|
|
233
288
|
|
|
234
289
|
const generateEnduserAuthTests = async () => {
|
|
235
290
|
log_header("Generated Enduser authToken Tests")
|
|
236
|
-
const
|
|
237
|
-
const { authToken } = await sdk.api.endusers.
|
|
238
|
-
|
|
291
|
+
const e = await sdk.api.endusers.createOne({ email: 'generated@tellescope.com', phone: '+15555555555', externalId: '1029f9v9sjd0as' })
|
|
292
|
+
const { authToken, enduser } = await sdk.api.endusers.generate_auth_token({ id: e.id })
|
|
293
|
+
assert(!!authToken && !!enduser, 'invalid returned values', 'Generate authToken and get enduser')
|
|
294
|
+
|
|
295
|
+
const { isAuthenticated } = await sdk.api.endusers.is_authenticated({ id: enduser.id, authToken })
|
|
239
296
|
assert(isAuthenticated, 'invalid authToken generated for enduser', 'Generate authToken for enduser is valid')
|
|
240
297
|
|
|
298
|
+
await async_test(
|
|
299
|
+
`auth by externalId`, () => sdk.api.endusers.generate_auth_token({ externalId: e.externalId }), passOnVoid,
|
|
300
|
+
)
|
|
301
|
+
await async_test(
|
|
302
|
+
`auth by email`, () => sdk.api.endusers.generate_auth_token({ email: e.email }), passOnVoid,
|
|
303
|
+
)
|
|
304
|
+
await async_test(
|
|
305
|
+
`auth by phone`, () => sdk.api.endusers.generate_auth_token({ phone: e.phone }), passOnVoid,
|
|
306
|
+
)
|
|
307
|
+
await async_test(
|
|
308
|
+
`auth by nothing throws error`, () => sdk.api.endusers.generate_auth_token({ phone: undefined }),
|
|
309
|
+
{ shouldError: true, onError: e => e.message === "One of id, externalId, email, or phone is required" },
|
|
310
|
+
)
|
|
311
|
+
await async_test(
|
|
312
|
+
`auth by bad field throws error`, () => sdk.api.endusers.generate_auth_token({ email: "notavalidemail@tellescope.com" }),
|
|
313
|
+
{ shouldError: true, onError: e => e.message === "Could not find a corresponding enduser" },
|
|
314
|
+
)
|
|
315
|
+
|
|
241
316
|
await sdk.api.endusers.deleteOne(enduser.id)
|
|
242
317
|
}
|
|
243
318
|
|
|
@@ -367,7 +442,7 @@ const run_generated_tests = async <N extends ModelName>({ queries, model, name,
|
|
|
367
442
|
}
|
|
368
443
|
await async_test(
|
|
369
444
|
`get-${singularName}`,
|
|
370
|
-
() => queries.getOne(_id
|
|
445
|
+
() => queries.getOne(_id),
|
|
371
446
|
{ onResult: d => {
|
|
372
447
|
if (!d?.id) return false
|
|
373
448
|
|
|
@@ -400,7 +475,7 @@ const run_generated_tests = async <N extends ModelName>({ queries, model, name,
|
|
|
400
475
|
)
|
|
401
476
|
await async_test(
|
|
402
477
|
`get-${singularName} (verify delete)`,
|
|
403
|
-
() => queries.getOne(_id
|
|
478
|
+
() => queries.getOne(_id),
|
|
404
479
|
{ shouldError: true, onError: e => e.message === 'Could not find a record for the given id' }
|
|
405
480
|
)
|
|
406
481
|
}
|
|
@@ -608,7 +683,7 @@ const journey_tests = async (queries=sdk.api.journeys) => {
|
|
|
608
683
|
|
|
609
684
|
await async_test(
|
|
610
685
|
`journey-updateState`,
|
|
611
|
-
() => queries.
|
|
686
|
+
() => queries.update_state({ id: journey.id, name: 'Added', updates: { name: 'Updated', priority: 'N/A' }}),
|
|
612
687
|
passOnVoid,
|
|
613
688
|
)
|
|
614
689
|
await wait(undefined, 25) // wait for side effects to update endusers
|
|
@@ -788,32 +863,22 @@ const chat_tests = async() => {
|
|
|
788
863
|
const chat = await sdk.api.chats.createOne({ roomId: room.id, message: "Hello!" })
|
|
789
864
|
const chat2 = await sdk.api.chats.createOne({ roomId: room.id, message: "Hello..." })
|
|
790
865
|
|
|
791
|
-
await async_test(
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
)
|
|
866
|
+
// await async_test(
|
|
867
|
+
// `get-chat (without filter)`,
|
|
868
|
+
// () => sdk.api.chats.getOne(chat.id),
|
|
869
|
+
// { shouldError: true, onError: () => true }
|
|
870
|
+
// )
|
|
796
871
|
await async_test(
|
|
797
872
|
`get-chats (without filter)`,
|
|
798
873
|
() => sdk.api.chats.getSome({}),
|
|
799
874
|
{ shouldError: true, onError: () => true }
|
|
800
875
|
)
|
|
801
|
-
await async_test(
|
|
802
|
-
`get-chat (with filter)`,
|
|
803
|
-
() => sdk.api.chats.getOne(chat.id, { roomId: room.id }),
|
|
804
|
-
{ onResult: c => c?.id === chat.id }
|
|
805
|
-
)
|
|
806
876
|
await async_test(
|
|
807
877
|
`get-chats (with filter)`,
|
|
808
878
|
() => sdk.api.chats.getSome({ filter: { roomId: room.id } }),
|
|
809
879
|
{ onResult: c => c?.length === 2 }
|
|
810
880
|
)
|
|
811
881
|
|
|
812
|
-
await async_test(
|
|
813
|
-
`get-chat not allowed`,
|
|
814
|
-
() => sdk2.api.chats.getOne(chat.id, { roomId: room.id }),
|
|
815
|
-
{ shouldError: true, onError: e => e.message === 'You do not have permission to access this resource' }
|
|
816
|
-
)
|
|
817
882
|
await async_test(
|
|
818
883
|
`get-chats not allowed`,
|
|
819
884
|
() => sdk2.api.chats.getSome({ filter: { roomId: room.id } }),
|
|
@@ -842,12 +907,12 @@ const chat_tests = async() => {
|
|
|
842
907
|
await wait(undefined, 25)
|
|
843
908
|
await async_test(
|
|
844
909
|
`get-chat (deleted as dependency of room 1)`,
|
|
845
|
-
() => sdk.api.chats.getOne(chat.id
|
|
910
|
+
() => sdk.api.chats.getOne(chat.id),
|
|
846
911
|
{ shouldError: true, onError: e => e.message === 'Could not find a record for the given id' }
|
|
847
912
|
)
|
|
848
913
|
await async_test(
|
|
849
914
|
`get-chat (deleted as dependency of room 2)`,
|
|
850
|
-
() => sdk.api.chats.getOne(chat2.id
|
|
915
|
+
() => sdk.api.chats.getOne(chat2.id),
|
|
851
916
|
{ shouldError: true, onError: e => e.message === 'Could not find a record for the given id' }
|
|
852
917
|
)
|
|
853
918
|
|
|
@@ -856,12 +921,12 @@ const chat_tests = async() => {
|
|
|
856
921
|
const sharedChat2 = await sdk2.api.chats.createOne({ roomId: sharedRoom.id, message: "Hello there!", })
|
|
857
922
|
await async_test(
|
|
858
923
|
`get-chat (shared, user1)`,
|
|
859
|
-
() => sdk.api.chats.getOne(sharedChat.id
|
|
924
|
+
() => sdk.api.chats.getOne(sharedChat.id),
|
|
860
925
|
{ onResult: r => r.id === sharedChat.id }
|
|
861
926
|
)
|
|
862
927
|
await async_test(
|
|
863
928
|
`get-chat (shared, user2)`,
|
|
864
|
-
() => sdk2.api.chats.getOne(sharedChat.id
|
|
929
|
+
() => sdk2.api.chats.getOne(sharedChat.id),
|
|
865
930
|
{ onResult: r => r.id === sharedChat.id }
|
|
866
931
|
)
|
|
867
932
|
await async_test(
|
|
@@ -884,7 +949,7 @@ const chat_tests = async() => {
|
|
|
884
949
|
await sdk.api.chats.deleteOne(chatNull.id)
|
|
885
950
|
await async_test(
|
|
886
951
|
`get-chat (setNull working)`,
|
|
887
|
-
() => sdk.api.chats.getOne(chat2Null.id
|
|
952
|
+
() => sdk.api.chats.getOne(chat2Null.id),
|
|
888
953
|
{ onResult: c => c.replyId === null }
|
|
889
954
|
)
|
|
890
955
|
}
|
|
@@ -894,7 +959,7 @@ const enduserAccessTests = async () => {
|
|
|
894
959
|
const password = 'testpassword'
|
|
895
960
|
|
|
896
961
|
const enduser = await sdk.api.endusers.createOne({ email })
|
|
897
|
-
await sdk.api.endusers.
|
|
962
|
+
await sdk.api.endusers.set_password({ id: enduser.id, password }).catch(console.error)
|
|
898
963
|
await enduserSDK.authenticate(email, password).catch(console.error)
|
|
899
964
|
|
|
900
965
|
for (const n in schema) {
|
|
@@ -973,6 +1038,20 @@ const enduserAccessTests = async () => {
|
|
|
973
1038
|
await sdk.api.endusers.deleteOne(enduser.id)
|
|
974
1039
|
}
|
|
975
1040
|
|
|
1041
|
+
const files_tests = async () => {
|
|
1042
|
+
const buff = buffer.Buffer.from('test file data')
|
|
1043
|
+
|
|
1044
|
+
const { presignedUpload, file } = await sdk.api.files.prepare_file_upload({
|
|
1045
|
+
name: 'Test File', size: buff.byteLength, type: 'text/plain'
|
|
1046
|
+
})
|
|
1047
|
+
await sdk.UPLOAD(presignedUpload, undefined, buff as any)
|
|
1048
|
+
|
|
1049
|
+
const { downloadURL } = await sdk.api.files.file_download_URL({ secureName: file.secureName })
|
|
1050
|
+
const downloaded: string = await sdk.DOWNLOAD(downloadURL)
|
|
1051
|
+
|
|
1052
|
+
assert(downloaded === buff.toString(), 'downloaded file does not match uploaded file', 'upload, download comparison')
|
|
1053
|
+
}
|
|
1054
|
+
|
|
976
1055
|
const tests: { [K in keyof ClientModelForName]: () => void } = {
|
|
977
1056
|
chats: chat_tests,
|
|
978
1057
|
endusers: enduser_tests,
|
|
@@ -985,19 +1064,20 @@ const tests: { [K in keyof ClientModelForName]: () => void } = {
|
|
|
985
1064
|
chat_rooms: chat_room_tests,
|
|
986
1065
|
users: () => {},
|
|
987
1066
|
templates: () => {},
|
|
988
|
-
files:
|
|
1067
|
+
files: files_tests,
|
|
989
1068
|
tickets: () => {},
|
|
990
1069
|
meetings: () => {},
|
|
1070
|
+
notes: () => {},
|
|
991
1071
|
};
|
|
992
1072
|
|
|
993
1073
|
(async () => {
|
|
994
|
-
await sdk.authenticate(email, password, host)
|
|
995
|
-
|
|
996
1074
|
log_header("API")
|
|
997
|
-
|
|
1075
|
+
|
|
998
1076
|
try {
|
|
1077
|
+
await sdk.authenticate(email, password)
|
|
999
1078
|
await setup_tests()
|
|
1000
1079
|
await multi_tenant_tests() // should come right after setup tests
|
|
1080
|
+
await badInputTests()
|
|
1001
1081
|
await filterTests()
|
|
1002
1082
|
await updatesTests()
|
|
1003
1083
|
await threadKeyTests()
|