@tellescope/sdk 1.242.8 → 1.242.9

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/esm/sdk.d.ts CHANGED
@@ -4121,7 +4121,6 @@ export declare class Session extends SessionManager {
4121
4121
  exp: number;
4122
4122
  allowedPaths?: string[] | undefined;
4123
4123
  requiresMFA?: boolean | undefined;
4124
- users?: number | undefined;
4125
4124
  inbox_threads?: number | undefined;
4126
4125
  ai_conversations?: number | undefined;
4127
4126
  waitlists?: number | undefined;
@@ -4168,6 +4167,7 @@ export declare class Session extends SessionManager {
4168
4167
  sms_messages?: number | undefined;
4169
4168
  chat_rooms?: number | undefined;
4170
4169
  chats?: number | undefined;
4170
+ users?: number | undefined;
4171
4171
  templates?: number | undefined;
4172
4172
  files?: number | undefined;
4173
4173
  tickets?: number | undefined;
@@ -4276,7 +4276,6 @@ export declare class Session extends SessionManager {
4276
4276
  exp: number;
4277
4277
  allowedPaths?: string[] | undefined;
4278
4278
  requiresMFA?: boolean | undefined;
4279
- users?: number | undefined;
4280
4279
  inbox_threads?: number | undefined;
4281
4280
  ai_conversations?: number | undefined;
4282
4281
  waitlists?: number | undefined;
@@ -4323,6 +4322,7 @@ export declare class Session extends SessionManager {
4323
4322
  sms_messages?: number | undefined;
4324
4323
  chat_rooms?: number | undefined;
4325
4324
  chats?: number | undefined;
4325
+ users?: number | undefined;
4326
4326
  templates?: number | undefined;
4327
4327
  files?: number | undefined;
4328
4328
  tickets?: number | undefined;
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import { ReactNativeFile, S3PresignedPost } from "@tellescope/types-utilities";
2
3
  import { ClientModelForName, User } from "@tellescope/types-client";
3
4
  import { Indexable } from "@tellescope/utilities";
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
@@ -14335,10 +14335,10 @@ var inbox_threads_building_tests = function () { return __awaiter(void 0, void 0
14335
14335
  switch (_b.label) {
14336
14336
  case 0:
14337
14337
  log_header("Inbox Thread Building Tests");
14338
- return [4 /*yield*/, sdk.api.endusers.createOne({})];
14338
+ return [4 /*yield*/, sdk.api.endusers.createOne({ fname: 'Alice', lname: 'Wonderland' })];
14339
14339
  case 1:
14340
14340
  e = _b.sent();
14341
- return [4 /*yield*/, sdk.api.endusers.createOne({})];
14341
+ return [4 /*yield*/, sdk.api.endusers.createOne({ fname: 'Bob', lname: 'Builder' })];
14342
14342
  case 2:
14343
14343
  e2 = _b.sent();
14344
14344
  deleteBuiltThreads = function () { return __awaiter(void 0, void 0, void 0, function () {
@@ -14463,17 +14463,51 @@ var inbox_threads_building_tests = function () { return __awaiter(void 0, void 0
14463
14463
  && threads.some(function (t) { var _a; return t.type === 'Phone' && t.threadId === call.id && !object_is_empty((_a = t.readBy) !== null && _a !== void 0 ? _a : {}); })
14464
14464
  && threads.some(function (t) { var _a; return t.type === 'Chat' && t.threadId === room.id && !object_is_empty((_a = t.readBy) !== null && _a !== void 0 ? _a : {}); })
14465
14465
  && !threads.some(function (t) { return t.outboundPreview || t.outboundTimestamp; }));
14466
- } })];
14466
+ } })
14467
+ // searchKeywords population tests
14468
+ ];
14467
14469
  case 14:
14468
14470
  _b.sent();
14469
- return [4 /*yield*/, resetThreadBuildingDates()];
14471
+ // searchKeywords population tests
14472
+ return [4 /*yield*/, async_test('built threads have searchKeywords from enduser names', function () { return sdk.api.inbox_threads.load_threads({}); }, { onResult: function (_a) {
14473
+ var threads = _a.threads;
14474
+ var eThreads = threads.filter(function (t) { return t.enduserIds.includes(e.id); });
14475
+ return eThreads.length === 5
14476
+ && eThreads.every(function (t) {
14477
+ return !!t.searchKeywords
14478
+ && t.searchKeywords.includes('alice')
14479
+ && t.searchKeywords.includes('wonderland')
14480
+ && t.searchKeywords.length === 2;
14481
+ } // fname, lname - no duplicates
14482
+ );
14483
+ } })
14484
+ // search by enduser name (via searchKeywords)
14485
+ ];
14470
14486
  case 15:
14487
+ // searchKeywords population tests
14488
+ _b.sent();
14489
+ // search by enduser name (via searchKeywords)
14490
+ return [4 /*yield*/, async_test('search by enduser first name finds threads', function () { return sdk.api.inbox_threads.load_threads({ search: 'Alice' }); }, { onResult: function (_a) {
14491
+ var threads = _a.threads;
14492
+ return threads.length === 5 && threads.every(function (t) { return t.enduserIds.includes(e.id); });
14493
+ } })];
14494
+ case 16:
14495
+ // search by enduser name (via searchKeywords)
14496
+ _b.sent();
14497
+ return [4 /*yield*/, async_test('search by enduser last name finds threads', function () { return sdk.api.inbox_threads.load_threads({ search: 'Wonderland' }); }, { onResult: function (_a) {
14498
+ var threads = _a.threads;
14499
+ return threads.length === 5 && threads.every(function (t) { return t.enduserIds.includes(e.id); });
14500
+ } })];
14501
+ case 17:
14502
+ _b.sent();
14503
+ return [4 /*yield*/, resetThreadBuildingDates()];
14504
+ case 18:
14471
14505
  _b.sent();
14472
14506
  return [4 /*yield*/, async_test('re-build initial 1-message threads', function () { return sdk.api.inbox_threads.build_threads({ from: from, to: new Date() }); }, { onResult: function (_a) {
14473
14507
  var alreadyBuilt = _a.alreadyBuilt;
14474
14508
  return !alreadyBuilt;
14475
14509
  } })];
14476
- case 16:
14510
+ case 19:
14477
14511
  _b.sent();
14478
14512
  return [4 /*yield*/, async_test('re-load threads with no duplication for same messages', function () { return sdk.api.inbox_threads.load_threads({}); }, { onResult: function (_a) {
14479
14513
  var threads = _a.threads;
@@ -14481,14 +14515,14 @@ var inbox_threads_building_tests = function () { return __awaiter(void 0, void 0
14481
14515
  } })
14482
14516
  // test adding separate threads for the first enduser
14483
14517
  ];
14484
- case 17:
14518
+ case 20:
14485
14519
  _b.sent();
14486
14520
  beforeSecondThreads = new Date();
14487
14521
  return [4 /*yield*/, sdk.api.emails.createOne(__assign(__assign({}, defaultEmail), { enduserId: e.id, subject: "Different email subject", messageId: 'other-email' }))];
14488
- case 18:
14522
+ case 21:
14489
14523
  email2 = _b.sent();
14490
14524
  return [4 /*yield*/, sdk.api.sms_messages.createOne(__assign(__assign({}, defaultSMS), { enduserId: e.id, enduserPhoneNumber: "+15555555550" }))];
14491
- case 19:
14525
+ case 22:
14492
14526
  sms2 = _b.sent();
14493
14527
  return [4 /*yield*/, sdk.api.group_mms_conversations.createOne({
14494
14528
  enduserIds: [e.id],
@@ -14501,19 +14535,19 @@ var inbox_threads_building_tests = function () { return __awaiter(void 0, void 0
14501
14535
  logOnly: true,
14502
14536
  }],
14503
14537
  })];
14504
- case 20:
14538
+ case 23:
14505
14539
  groupMMS2 = _b.sent();
14506
14540
  return [4 /*yield*/, sdk.api.phone_calls.createOne({ enduserId: e.id, inbound: true, isVoicemail: true, from: '+15555555554', to: '+15555555550' })];
14507
- case 21:
14541
+ case 24:
14508
14542
  call2 = _b.sent();
14509
14543
  return [4 /*yield*/, sdk.api.chat_rooms.createOne({ enduserIds: [e.id], userIds: [], title: 'Thread Build Chat Room Alt', recentMessageSentAt: Date.now() })];
14510
- case 22:
14544
+ case 25:
14511
14545
  room2 = _b.sent();
14512
14546
  return [4 /*yield*/, async_test('build new 1-message threads for original enduser', function () { return sdk.api.inbox_threads.build_threads({ from: from, to: new Date() }); }, { onResult: function (_a) {
14513
14547
  var alreadyBuilt = _a.alreadyBuilt;
14514
14548
  return !alreadyBuilt;
14515
14549
  } })];
14516
- case 23:
14550
+ case 26:
14517
14551
  _b.sent();
14518
14552
  return [4 /*yield*/, async_test('load new threads for original enduser', function () { return sdk.api.inbox_threads.load_threads({}); }, { onResult: function (_a) {
14519
14553
  var threads = _a.threads;
@@ -14522,14 +14556,14 @@ var inbox_threads_building_tests = function () { return __awaiter(void 0, void 0
14522
14556
  } })
14523
14557
  // ensure new threads created for other enduser
14524
14558
  ];
14525
- case 24:
14559
+ case 27:
14526
14560
  _b.sent();
14527
14561
  beforeSecondEnduserThreads = new Date();
14528
14562
  return [4 /*yield*/, sdk.api.emails.createOne(__assign(__assign({}, defaultEmail), { enduserId: e2.id }))];
14529
- case 25:
14563
+ case 28:
14530
14564
  e2_email = _b.sent();
14531
14565
  return [4 /*yield*/, sdk.api.sms_messages.createOne(__assign(__assign({}, defaultSMS), { enduserId: e2.id }))];
14532
- case 26:
14566
+ case 29:
14533
14567
  e2_sms = _b.sent();
14534
14568
  return [4 /*yield*/, sdk.api.group_mms_conversations.createOne({
14535
14569
  enduserIds: [e2.id],
@@ -14542,42 +14576,58 @@ var inbox_threads_building_tests = function () { return __awaiter(void 0, void 0
14542
14576
  logOnly: true,
14543
14577
  }],
14544
14578
  })];
14545
- case 27:
14579
+ case 30:
14546
14580
  e2_groupMMS = _b.sent();
14547
14581
  return [4 /*yield*/, sdk.api.phone_calls.createOne({ enduserId: e2.id, inbound: true, isVoicemail: true, from: '+15555555554', to: '+15555555555' })];
14548
- case 28:
14582
+ case 31:
14549
14583
  e2_call = _b.sent();
14550
14584
  return [4 /*yield*/, sdk.api.chat_rooms.createOne({ enduserIds: [e2.id], userIds: [], title: 'Thread Build Chat Room 2' })];
14551
- case 29:
14585
+ case 32:
14552
14586
  e2_room = _b.sent();
14553
14587
  return [4 /*yield*/, sdk.api.chats.createOne({ roomId: e2_room.id, message: 'test', enduserId: e2.id, senderId: e2.id })];
14554
- case 30:
14588
+ case 33:
14555
14589
  _b.sent();
14556
14590
  return [4 /*yield*/, wait(undefined, 500)]; // allow for recentMessageTimestamp to be set to indicate inbound chat in chat room
14557
- case 31:
14591
+ case 34:
14558
14592
  _b.sent(); // allow for recentMessageTimestamp to be set to indicate inbound chat in chat room
14559
14593
  return [4 /*yield*/, async_test('build initial 1-message threads for other enduser', function () { return sdk.api.inbox_threads.build_threads({ from: from, to: new Date() }); }, { onResult: function (_a) {
14560
14594
  var alreadyBuilt = _a.alreadyBuilt;
14561
14595
  return !alreadyBuilt;
14562
14596
  } })];
14563
- case 32:
14597
+ case 35:
14564
14598
  _b.sent();
14565
14599
  return [4 /*yield*/, async_test('loads threads with no duplication across endusers', function () { return sdk.api.inbox_threads.load_threads({}); }, { onResult: function (_a) {
14566
14600
  var threads = _a.threads;
14567
14601
  return (threads.length === 15
14568
14602
  && threads.filter(function (t) { return t.enduserIds.length === 1 && t.enduserIds.includes(e.id); }).length === 10
14569
14603
  && threads.filter(function (t) { return t.enduserIds.length === 1 && t.enduserIds.includes(e2.id); }).length === 5);
14604
+ } })
14605
+ // verify second enduser's threads also have correct searchKeywords
14606
+ ];
14607
+ case 36:
14608
+ _b.sent();
14609
+ // verify second enduser's threads also have correct searchKeywords
14610
+ return [4 /*yield*/, async_test('second enduser threads have searchKeywords from enduser names', function () { return sdk.api.inbox_threads.load_threads({}); }, { onResult: function (_a) {
14611
+ var threads = _a.threads;
14612
+ var e2Threads = threads.filter(function (t) { return t.enduserIds.includes(e2.id); });
14613
+ return e2Threads.length === 5
14614
+ && e2Threads.every(function (t) {
14615
+ return !!t.searchKeywords
14616
+ && t.searchKeywords.includes('bob')
14617
+ && t.searchKeywords.includes('builder');
14618
+ });
14570
14619
  } })];
14571
- case 33:
14620
+ case 37:
14621
+ // verify second enduser's threads also have correct searchKeywords
14572
14622
  _b.sent();
14573
14623
  return [4 /*yield*/, resetThreadBuildingDates()];
14574
- case 34:
14624
+ case 38:
14575
14625
  _b.sent();
14576
14626
  return [4 /*yield*/, async_test('re-build initial 1-message threads for other enduser', function () { return sdk.api.inbox_threads.build_threads({ from: from, to: new Date() }); }, { onResult: function (_a) {
14577
14627
  var alreadyBuilt = _a.alreadyBuilt;
14578
14628
  return !alreadyBuilt;
14579
14629
  } })];
14580
- case 35:
14630
+ case 39:
14581
14631
  _b.sent();
14582
14632
  return [4 /*yield*/, async_test('re-load threads with no duplication across endusers', function () { return sdk.api.inbox_threads.load_threads({}); }, { onResult: function (_a) {
14583
14633
  var threads = _a.threads;
@@ -14591,14 +14641,14 @@ var inbox_threads_building_tests = function () { return __awaiter(void 0, void 0
14591
14641
  } })
14592
14642
  // test adding separate threads for the first enduser
14593
14643
  ];
14594
- case 36:
14644
+ case 40:
14595
14645
  _b.sent();
14596
14646
  beforeReplies = new Date();
14597
14647
  return [4 /*yield*/, sdk.api.emails.createOne(__assign(__assign({}, defaultEmail), { textContent: 'reply!', enduserId: e.id }))];
14598
- case 37:
14648
+ case 41:
14599
14649
  emailReply = _b.sent();
14600
14650
  return [4 /*yield*/, sdk.api.sms_messages.createOne(__assign(__assign({}, defaultSMS), { enduserId: e.id, message: 'reply!' }))];
14601
- case 38:
14651
+ case 42:
14602
14652
  smsReply = _b.sent();
14603
14653
  return [4 /*yield*/, sdk.api.group_mms_conversations.send_message({
14604
14654
  logOnly: true,
@@ -14606,16 +14656,16 @@ var inbox_threads_building_tests = function () { return __awaiter(void 0, void 0
14606
14656
  message: 'reply!',
14607
14657
  sender: e.id,
14608
14658
  })];
14609
- case 39:
14659
+ case 43:
14610
14660
  _b.sent();
14611
14661
  return [4 /*yield*/, sdk.api.chats.createOne({ roomId: room.id, message: 'reply!', enduserId: e.id, senderId: e.id })];
14612
- case 40:
14662
+ case 44:
14613
14663
  chatReply = _b.sent();
14614
14664
  return [4 /*yield*/, async_test('re-build threads with replies', function () { return sdk.api.inbox_threads.build_threads({ from: from, to: new Date() }); }, { onResult: function (_a) {
14615
14665
  var alreadyBuilt = _a.alreadyBuilt;
14616
14666
  return !alreadyBuilt;
14617
14667
  } })];
14618
- case 41:
14668
+ case 45:
14619
14669
  _b.sent();
14620
14670
  return [4 /*yield*/, async_test('re-load threads with replies included', function () { return sdk.api.inbox_threads.load_threads({}); }, { onResult: function (_a) {
14621
14671
  var threads = _a.threads;
@@ -14635,12 +14685,12 @@ var inbox_threads_building_tests = function () { return __awaiter(void 0, void 0
14635
14685
  // test older messages being ignored
14636
14686
  // filter phone calls since those always create new threads
14637
14687
  ];
14638
- case 42:
14688
+ case 46:
14639
14689
  _b.sent();
14640
14690
  // test older messages being ignored
14641
14691
  // filter phone calls since those always create new threads
14642
14692
  return [4 /*yield*/, resetThreadsAndDates()];
14643
- case 43:
14693
+ case 47:
14644
14694
  // test older messages being ignored
14645
14695
  // filter phone calls since those always create new threads
14646
14696
  _b.sent();
@@ -14648,19 +14698,19 @@ var inbox_threads_building_tests = function () { return __awaiter(void 0, void 0
14648
14698
  var alreadyBuilt = _a.alreadyBuilt;
14649
14699
  return !alreadyBuilt;
14650
14700
  } })];
14651
- case 44:
14701
+ case 48:
14652
14702
  _b.sent();
14653
14703
  return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
14654
- case 45:
14704
+ case 49:
14655
14705
  newlyBuilt = (_b.sent()).threads.filter(function (v) { return v.type !== 'Phone'; });
14656
14706
  return [4 /*yield*/, async_test('re-build threads inclusive of initial set', function () { return sdk.api.inbox_threads.build_threads({ from: start, to: new Date() }); }, { onResult: function (_a) {
14657
14707
  var alreadyBuilt = _a.alreadyBuilt;
14658
14708
  return !alreadyBuilt;
14659
14709
  } })];
14660
- case 46:
14710
+ case 50:
14661
14711
  _b.sent();
14662
14712
  return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
14663
- case 47:
14713
+ case 51:
14664
14714
  threadsWithOlderLoad = (_b.sent()).threads.filter(function (v) { return v.type !== 'Phone'; });
14665
14715
  assert(objects_equivalent(newlyBuilt, threadsWithOlderLoad), 'old threads included somehow', 'old messages ignored in new threads');
14666
14716
  return [4 /*yield*/, async_test('re-run previous test on all-threads to make sure staged build order doesnt effect final result', function () { return sdk.api.inbox_threads.load_threads({}); }, { onResult: function (_a) {
@@ -14682,13 +14732,13 @@ var inbox_threads_building_tests = function () { return __awaiter(void 0, void 0
14682
14732
  } })
14683
14733
  // test adding OUTBOUND messages for the first enduser
14684
14734
  ];
14685
- case 48:
14735
+ case 52:
14686
14736
  _b.sent();
14687
14737
  return [4 /*yield*/, sdk.api.emails.createOne(__assign(__assign({}, defaultEmail), { inbound: false, textContent: 'outbound reply!', enduserId: e.id }))];
14688
- case 49:
14738
+ case 53:
14689
14739
  emailReplyOutbound = _b.sent();
14690
14740
  return [4 /*yield*/, sdk.api.sms_messages.createOne(__assign(__assign({}, defaultSMS), { inbound: false, enduserId: e.id, message: 'outbound reply!' }))];
14691
- case 50:
14741
+ case 54:
14692
14742
  smsReplyOutbound = _b.sent();
14693
14743
  return [4 /*yield*/, sdk.api.group_mms_conversations.send_message({
14694
14744
  logOnly: true,
@@ -14696,19 +14746,19 @@ var inbox_threads_building_tests = function () { return __awaiter(void 0, void 0
14696
14746
  message: 'outbound reply!',
14697
14747
  sender: sdk.userInfo.id,
14698
14748
  })];
14699
- case 51:
14749
+ case 55:
14700
14750
  _b.sent();
14701
14751
  return [4 /*yield*/, sdk.api.chats.createOne({ roomId: room.id, message: 'outbound reply!', senderId: sdk.userInfo.id })];
14702
- case 52:
14752
+ case 56:
14703
14753
  chatOutboundReply = _b.sent();
14704
14754
  return [4 /*yield*/, sdk.api.phone_calls.createOne({ readBy: readBy, enduserId: e.id, inbound: false, isVoicemail: true, from: '+15555555554', to: '+15555555555' })];
14705
- case 53:
14755
+ case 57:
14706
14756
  outboundCall = _b.sent();
14707
14757
  return [4 /*yield*/, async_test('re-build with outbound threads', function () { return sdk.api.inbox_threads.build_threads({ from: start, to: new Date() }); }, { onResult: function (_a) {
14708
14758
  var alreadyBuilt = _a.alreadyBuilt;
14709
14759
  return !alreadyBuilt;
14710
14760
  } })];
14711
- case 54:
14761
+ case 58:
14712
14762
  _b.sent();
14713
14763
  return [4 /*yield*/, async_test('Test outbound timestamp and preview', function () { return sdk.api.inbox_threads.load_threads({}); }, { onResult: function (_a) {
14714
14764
  var threads = _a.threads;
@@ -14724,7 +14774,7 @@ var inbox_threads_building_tests = function () { return __awaiter(void 0, void 0
14724
14774
  .length === 4 // all channels except call
14725
14775
  );
14726
14776
  } })];
14727
- case 55:
14777
+ case 59:
14728
14778
  _b.sent();
14729
14779
  return [2 /*return*/, Promise.all([
14730
14780
  sdk.api.endusers.deleteOne(e.id),
@@ -14826,20 +14876,48 @@ var inbox_threads_loading_tests = function () { return __awaiter(void 0, void 0,
14826
14876
  var threads = _a.threads;
14827
14877
  return threads.length === 2;
14828
14878
  } })
14829
- // adding to care team of e2 who belongs to only the phone thread
14879
+ // search parameter tests
14830
14880
  ];
14831
14881
  case 12:
14882
+ _g.sent();
14883
+ // search parameter tests
14884
+ return [4 /*yield*/, async_test('search by title', function () { return sdk.api.inbox_threads.load_threads({ search: 'Email' }); }, { onResult: function (_a) {
14885
+ var threads = _a.threads;
14886
+ return threads.length === 1 && threads[0].type === 'Email';
14887
+ } })];
14888
+ case 13:
14889
+ // search parameter tests
14890
+ _g.sent();
14891
+ return [4 /*yield*/, async_test('search by preview matches all threads', function () { return sdk.api.inbox_threads.load_threads({ search: 'Test' }); }, { onResult: function (_a) {
14892
+ var threads = _a.threads;
14893
+ return threads.length === 5;
14894
+ } })];
14895
+ case 14:
14896
+ _g.sent();
14897
+ return [4 /*yield*/, async_test('search with no match returns empty', function () { return sdk.api.inbox_threads.load_threads({ search: 'zzzznonexistent' }); }, { onResult: function (_a) {
14898
+ var threads = _a.threads;
14899
+ return threads.length === 0;
14900
+ } })];
14901
+ case 15:
14902
+ _g.sent();
14903
+ return [4 /*yield*/, async_test('short search (< 3 chars) returns unfiltered results', function () { return sdk.api.inbox_threads.load_threads({ search: 'ab' }); }, { onResult: function (_a) {
14904
+ var threads = _a.threads;
14905
+ return threads.length === 5;
14906
+ } })
14907
+ // adding to care team of e2 who belongs to only the phone thread
14908
+ ];
14909
+ case 16:
14832
14910
  _g.sent();
14833
14911
  // adding to care team of e2 who belongs to only the phone thread
14834
14912
  return [4 /*yield*/, sdk.api.endusers.updateOne(e2.id, { assignedTo: [sdkNonAdmin.userInfo.id] }, { replaceObjectFields: true })
14835
14913
  // assign (default access) to sms thread
14836
14914
  ];
14837
- case 13:
14915
+ case 17:
14838
14916
  // adding to care team of e2 who belongs to only the phone thread
14839
14917
  _g.sent();
14840
14918
  // assign (default access) to sms thread
14841
14919
  return [4 /*yield*/, sdk.api.inbox_threads.updateOne(sms.id, { userIds: [sdkNonAdmin.userInfo.id] }, { replaceObjectFields: true })];
14842
- case 14:
14920
+ case 18:
14843
14921
  // assign (default access) to sms thread
14844
14922
  _g.sent();
14845
14923
  return [4 /*yield*/, async_test('non-admin can load threads based on assignment/default access', function () { return sdkNonAdmin.api.inbox_threads.load_threads({}); }, { onResult: function (_a) {
@@ -14849,30 +14927,39 @@ var inbox_threads_loading_tests = function () { return __awaiter(void 0, void 0,
14849
14927
  && threads.some(function (t) { return t.id === sms.id; });
14850
14928
  }
14851
14929
  })];
14852
- case 15:
14930
+ case 19:
14931
+ _g.sent();
14932
+ return [4 /*yield*/, async_test('assigned access search still respects access control', function () { return sdkNonAdmin.api.inbox_threads.load_threads({ search: 'Test' }); }, { onResult: function (_a) {
14933
+ var threads = _a.threads;
14934
+ return threads.length === 2
14935
+ && threads.some(function (t) { return t.id === phone.id; })
14936
+ && threads.some(function (t) { return t.id === sms.id; });
14937
+ }
14938
+ })];
14939
+ case 20:
14853
14940
  _g.sent();
14854
14941
  roleTestUserEmail = 'inbox.role.test@tellescope.com';
14855
14942
  return [4 /*yield*/, sdk.api.users.getOne({ email: roleTestUserEmail }).catch(function () { return null; })]; // throws error on none found
14856
- case 16:
14943
+ case 21:
14857
14944
  _a = (_g.sent() // throws error on none found
14858
14945
  );
14859
- if (_a) return [3 /*break*/, 18];
14946
+ if (_a) return [3 /*break*/, 23];
14860
14947
  return [4 /*yield*/, sdk.api.users.createOne({ email: roleTestUserEmail })];
14861
- case 17:
14948
+ case 22:
14862
14949
  _a = (_g.sent());
14863
- _g.label = 18;
14864
- case 18:
14950
+ _g.label = 23;
14951
+ case 23:
14865
14952
  roleTestUser = _a;
14866
14953
  // add to care team to ensure this doesn't grant unexpected access
14867
14954
  return [4 /*yield*/, sdk.api.endusers.updateOne(e2.id, { assignedTo: [roleTestUser.id] })
14868
14955
  // assign (default access) to sms thread to ensure no unexpected access
14869
14956
  ];
14870
- case 19:
14957
+ case 24:
14871
14958
  // add to care team to ensure this doesn't grant unexpected access
14872
14959
  _g.sent();
14873
14960
  // assign (default access) to sms thread to ensure no unexpected access
14874
14961
  return [4 /*yield*/, sdk.api.inbox_threads.updateOne(sms.id, { userIds: [roleTestUser.id] }, { replaceObjectFields: true })];
14875
- case 20:
14962
+ case 25:
14876
14963
  // assign (default access) to sms thread to ensure no unexpected access
14877
14964
  _g.sent();
14878
14965
  return [4 /*yield*/, sdk.api.role_based_access_permissions.createOne({
@@ -14888,30 +14975,36 @@ var inbox_threads_loading_tests = function () { return __awaiter(void 0, void 0,
14888
14975
  endusers: { read: 'Default', create: 'Default', update: 'Default', delete: 'Default' },
14889
14976
  },
14890
14977
  })];
14891
- case 21:
14978
+ case 26:
14892
14979
  defaultAccessRole = _g.sent();
14893
14980
  return [4 /*yield*/, sdk.api.users.updateOne(roleTestUser.id, { roles: [defaultAccessRole.role] }, { replaceObjectFields: true })];
14894
- case 22:
14981
+ case 27:
14895
14982
  _g.sent();
14896
14983
  return [4 /*yield*/, wait(undefined, 2000)]; // role change triggers a logout
14897
- case 23:
14984
+ case 28:
14898
14985
  _g.sent(); // role change triggers a logout
14899
14986
  _b = Session.bind;
14900
14987
  _d = {
14901
14988
  host: host
14902
14989
  };
14903
14990
  return [4 /*yield*/, sdk.api.users.generate_auth_token({ id: roleTestUser.id })];
14904
- case 24:
14991
+ case 29:
14905
14992
  sdkDefaultAccess = new (_b.apply(Session, [void 0, (_d.authToken = (_g.sent()).authToken,
14906
14993
  _d)]))();
14907
14994
  return [4 /*yield*/, async_test('test_authenticated (default access)', sdkDefaultAccess.test_authenticated, { expectedResult: 'Authenticated!' })];
14908
- case 25:
14995
+ case 30:
14909
14996
  _g.sent();
14910
14997
  return [4 /*yield*/, async_test('non-admin default role', function () { return sdkDefaultAccess.api.inbox_threads.load_threads({}); }, { onResult: function (_a) {
14911
14998
  var threads = _a.threads;
14912
14999
  return threads.length === 1 && threads.some(function (t) { return t.id === sms.id; });
14913
15000
  } })];
14914
- case 26:
15001
+ case 31:
15002
+ _g.sent();
15003
+ return [4 /*yield*/, async_test('default access search still respects access control', function () { return sdkDefaultAccess.api.inbox_threads.load_threads({ search: 'Test' }); }, { onResult: function (_a) {
15004
+ var threads = _a.threads;
15005
+ return threads.length === 1 && threads.some(function (t) { return t.id === sms.id; });
15006
+ } })];
15007
+ case 32:
14915
15008
  _g.sent();
14916
15009
  return [4 /*yield*/, sdk.api.role_based_access_permissions.createOne({
14917
15010
  role: 'No Access',
@@ -14929,48 +15022,54 @@ var inbox_threads_loading_tests = function () { return __awaiter(void 0, void 0,
14929
15022
  })
14930
15023
  // ensure role is set, in case GET returned a user without a role or with a different role
14931
15024
  ];
14932
- case 27:
15025
+ case 33:
14933
15026
  noAccessRole = _g.sent();
14934
15027
  // ensure role is set, in case GET returned a user without a role or with a different role
14935
15028
  return [4 /*yield*/, sdk.api.users.updateOne(roleTestUser.id, { roles: [noAccessRole.role] }, { replaceObjectFields: true })];
14936
- case 28:
15029
+ case 34:
14937
15030
  // ensure role is set, in case GET returned a user without a role or with a different role
14938
15031
  _g.sent();
14939
15032
  return [4 /*yield*/, wait(undefined, 2000)]; // role change triggers a logout
14940
- case 29:
15033
+ case 35:
14941
15034
  _g.sent(); // role change triggers a logout
14942
15035
  _c = Session.bind;
14943
15036
  _f = {
14944
15037
  host: host
14945
15038
  };
14946
15039
  return [4 /*yield*/, sdk.api.users.generate_auth_token({ id: roleTestUser.id })];
14947
- case 30:
15040
+ case 36:
14948
15041
  sdkNoAccess = new (_c.apply(Session, [void 0, (_f.authToken = (_g.sent()).authToken,
14949
15042
  _f)]))();
14950
15043
  return [4 /*yield*/, async_test('test_authenticated (no access)', sdkNoAccess.test_authenticated, { expectedResult: 'Authenticated!' })];
14951
- case 31:
15044
+ case 37:
14952
15045
  _g.sent();
14953
15046
  return [4 /*yield*/, async_test('verify no-read on direct API call', sdkNoAccess.api.emails.getSome, handleAnyError)]; // ensures role is set up correctly
14954
- case 32:
15047
+ case 38:
14955
15048
  _g.sent(); // ensures role is set up correctly
14956
15049
  return [4 /*yield*/, async_test("No access reads nothing", function () { return sdkNoAccess.api.inbox_threads.load_threads({}); }, { onResult: function (_a) {
14957
15050
  var threads = _a.threads;
14958
15051
  return threads.length === 0;
15052
+ } })];
15053
+ case 39:
15054
+ _g.sent();
15055
+ return [4 /*yield*/, async_test("No access reads nothing even with search", function () { return sdkNoAccess.api.inbox_threads.load_threads({ search: 'Test' }); }, { onResult: function (_a) {
15056
+ var threads = _a.threads;
15057
+ return threads.length === 0;
14959
15058
  } })
14960
15059
  // Update existing threads with phone numbers for phoneNumber filtering tests
14961
15060
  ];
14962
- case 33:
15061
+ case 40:
14963
15062
  _g.sent();
14964
15063
  // Update existing threads with phone numbers for phoneNumber filtering tests
14965
15064
  return [4 /*yield*/, sdk.api.inbox_threads.updateOne(sms.id, { phoneNumber: '+15555555555' })];
14966
- case 34:
15065
+ case 41:
14967
15066
  // Update existing threads with phone numbers for phoneNumber filtering tests
14968
15067
  _g.sent();
14969
15068
  return [4 /*yield*/, sdk.api.inbox_threads.updateOne(phone.id, { phoneNumber: '+15555555555' })];
14970
- case 35:
15069
+ case 42:
14971
15070
  _g.sent();
14972
15071
  return [4 /*yield*/, sdk.api.inbox_threads.createOne(__assign(__assign({}, defaultThreadFields), { title: 'Phone 2', type: 'Phone', threadId: '6', phoneNumber: '+15555555556' }))];
14973
- case 36:
15072
+ case 43:
14974
15073
  phoneThread2 = _g.sent();
14975
15074
  return [4 /*yield*/, async_test('admin phoneNumber filter - SMS and Phone threads only', function () { return sdk.api.inbox_threads.load_threads({ phoneNumber: '+15555555555' }); }, { onResult: function (_a) {
14976
15075
  var threads = _a.threads;
@@ -14980,7 +15079,7 @@ var inbox_threads_loading_tests = function () { return __awaiter(void 0, void 0,
14980
15079
  && threads.every(function (t) { return t.type === 'SMS' || t.type === 'Phone'; });
14981
15080
  }
14982
15081
  })];
14983
- case 37:
15082
+ case 44:
14984
15083
  _g.sent();
14985
15084
  return [4 /*yield*/, async_test('admin phoneNumber filter - different phone number', function () { return sdk.api.inbox_threads.load_threads({ phoneNumber: '+15555555556' }); }, { onResult: function (_a) {
14986
15085
  var threads = _a.threads;
@@ -14989,13 +15088,26 @@ var inbox_threads_loading_tests = function () { return __awaiter(void 0, void 0,
14989
15088
  && threads[0].phoneNumber === '+15555555556';
14990
15089
  }
14991
15090
  })];
14992
- case 38:
15091
+ case 45:
14993
15092
  _g.sent();
14994
15093
  return [4 /*yield*/, async_test('admin phoneNumber filter - non-existent phone number', function () { return sdk.api.inbox_threads.load_threads({ phoneNumber: '+15555555999' }); }, { onResult: function (_a) {
14995
15094
  var threads = _a.threads;
14996
15095
  return threads.length === 0;
14997
- } })];
14998
- case 39:
15096
+ } })
15097
+ // search by phone number (uses regex on phoneNumber/enduserPhoneNumber fields)
15098
+ ];
15099
+ case 46:
15100
+ _g.sent();
15101
+ // search by phone number (uses regex on phoneNumber/enduserPhoneNumber fields)
15102
+ return [4 /*yield*/, async_test('search by phone number', function () { return sdk.api.inbox_threads.load_threads({ search: '+15555555555' }); }, { onResult: function (_a) {
15103
+ var threads = _a.threads;
15104
+ return threads.length >= 2
15105
+ && threads.some(function (t) { return t.type === 'SMS'; })
15106
+ && threads.some(function (t) { return t.type === 'Phone'; });
15107
+ }
15108
+ })];
15109
+ case 47:
15110
+ // search by phone number (uses regex on phoneNumber/enduserPhoneNumber fields)
14999
15111
  _g.sent();
15000
15112
  return [4 /*yield*/, Promise.all(__spreadArray(__spreadArray([
15001
15113
  sdk.api.endusers.deleteOne(e1.id),
@@ -15006,7 +15118,7 @@ var inbox_threads_loading_tests = function () { return __awaiter(void 0, void 0,
15006
15118
  ], threads.map(function (t) { return sdk.api.inbox_threads.deleteOne(t.id); }), true), [
15007
15119
  sdk.api.inbox_threads.deleteOne(phoneThread2.id),
15008
15120
  ], false))];
15009
- case 40:
15121
+ case 48:
15010
15122
  _g.sent();
15011
15123
  return [2 /*return*/];
15012
15124
  }