@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.
Files changed (48) hide show
  1. package/lib/cjs/enduser.d.ts +34 -5
  2. package/lib/cjs/enduser.d.ts.map +1 -1
  3. package/lib/cjs/enduser.js +5 -4
  4. package/lib/cjs/enduser.js.map +1 -1
  5. package/lib/cjs/sdk.d.ts +51 -16
  6. package/lib/cjs/sdk.d.ts.map +1 -1
  7. package/lib/cjs/sdk.js +10 -10
  8. package/lib/cjs/sdk.js.map +1 -1
  9. package/lib/cjs/session.d.ts +5 -21
  10. package/lib/cjs/session.d.ts.map +1 -1
  11. package/lib/cjs/session.js +12 -0
  12. package/lib/cjs/session.js.map +1 -1
  13. package/lib/cjs/tests/public_endpoint_tests.js +4 -4
  14. package/lib/cjs/tests/public_endpoint_tests.js.map +1 -1
  15. package/lib/cjs/tests/socket_tests.d.ts +1 -1
  16. package/lib/cjs/tests/socket_tests.d.ts.map +1 -1
  17. package/lib/cjs/tests/socket_tests.js +125 -8
  18. package/lib/cjs/tests/socket_tests.js.map +1 -1
  19. package/lib/cjs/tests/tests.js +207 -97
  20. package/lib/cjs/tests/tests.js.map +1 -1
  21. package/lib/esm/enduser.d.ts +34 -5
  22. package/lib/esm/enduser.d.ts.map +1 -1
  23. package/lib/esm/enduser.js +5 -4
  24. package/lib/esm/enduser.js.map +1 -1
  25. package/lib/esm/sdk.d.ts +51 -16
  26. package/lib/esm/sdk.d.ts.map +1 -1
  27. package/lib/esm/sdk.js +10 -10
  28. package/lib/esm/sdk.js.map +1 -1
  29. package/lib/esm/session.d.ts +5 -21
  30. package/lib/esm/session.d.ts.map +1 -1
  31. package/lib/esm/session.js +12 -0
  32. package/lib/esm/session.js.map +1 -1
  33. package/lib/esm/tests/public_endpoint_tests.js +4 -4
  34. package/lib/esm/tests/public_endpoint_tests.js.map +1 -1
  35. package/lib/esm/tests/socket_tests.d.ts +1 -1
  36. package/lib/esm/tests/socket_tests.d.ts.map +1 -1
  37. package/lib/esm/tests/socket_tests.js +123 -8
  38. package/lib/esm/tests/socket_tests.js.map +1 -1
  39. package/lib/esm/tests/tests.js +188 -97
  40. package/lib/esm/tests/tests.js.map +1 -1
  41. package/lib/tsconfig.tsbuildinfo +1 -1
  42. package/package.json +10 -10
  43. package/src/enduser.ts +12 -8
  44. package/src/sdk.ts +31 -20
  45. package/src/session.ts +8 -18
  46. package/src/tests/public_endpoint_tests.ts +4 -4
  47. package/src/tests/socket_tests.ts +68 -5
  48. package/src/tests/tests.ts +116 -36
@@ -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, host)
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 enduser = await sdk.api.endusers.createOne({ email: 'generated@tellescope.com'})
237
- const { authToken } = await sdk.api.endusers.generateAuthToken({ id: enduser.id })
238
- const { isAuthenticated } = await sdk.api.endusers.isAuthenticated({ id: enduser.id, authToken })
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, filter),
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, filter),
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.updateState({ id: journey.id, name: 'Added', updates: { name: 'Updated', priority: 'N/A' }}),
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
- `get-chat (without filter)`,
793
- () => sdk.api.chats.getOne(chat.id),
794
- { shouldError: true, onError: () => true }
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, { roomId: room.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, { roomId: room.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, { roomId: sharedRoom.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, { roomId: sharedRoom.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, { roomId: roomNull.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.setPassword({ id: enduser.id, password }).catch(console.error)
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()