@tellescope/sdk 1.237.2 → 1.237.4

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 (34) hide show
  1. package/lib/cjs/enduser.d.ts +1 -1
  2. package/lib/cjs/tests/api_tests/database_cascade_delete.test.d.ts +6 -0
  3. package/lib/cjs/tests/api_tests/database_cascade_delete.test.d.ts.map +1 -0
  4. package/lib/cjs/tests/api_tests/database_cascade_delete.test.js +298 -0
  5. package/lib/cjs/tests/api_tests/database_cascade_delete.test.js.map +1 -0
  6. package/lib/cjs/tests/api_tests/inbox_thread_assignment_updates.test.d.ts.map +1 -1
  7. package/lib/cjs/tests/api_tests/inbox_thread_assignment_updates.test.js +173 -11
  8. package/lib/cjs/tests/api_tests/inbox_thread_assignment_updates.test.js.map +1 -1
  9. package/lib/cjs/tests/api_tests/inbox_thread_status_preservation.test.d.ts +6 -0
  10. package/lib/cjs/tests/api_tests/inbox_thread_status_preservation.test.d.ts.map +1 -0
  11. package/lib/cjs/tests/tests.d.ts.map +1 -1
  12. package/lib/cjs/tests/tests.js +30 -3
  13. package/lib/cjs/tests/tests.js.map +1 -1
  14. package/lib/esm/enduser.d.ts +1 -1
  15. package/lib/esm/tests/api_tests/database_cascade_delete.test.d.ts +6 -0
  16. package/lib/esm/tests/api_tests/database_cascade_delete.test.d.ts.map +1 -0
  17. package/lib/esm/tests/api_tests/database_cascade_delete.test.js +294 -0
  18. package/lib/esm/tests/api_tests/database_cascade_delete.test.js.map +1 -0
  19. package/lib/esm/tests/api_tests/inbox_thread_assignment_updates.test.d.ts.map +1 -1
  20. package/lib/esm/tests/api_tests/inbox_thread_assignment_updates.test.js +173 -11
  21. package/lib/esm/tests/api_tests/inbox_thread_assignment_updates.test.js.map +1 -1
  22. package/lib/esm/tests/api_tests/inbox_thread_status_preservation.test.d.ts +6 -0
  23. package/lib/esm/tests/api_tests/inbox_thread_status_preservation.test.d.ts.map +1 -0
  24. package/lib/esm/tests/api_tests/inbox_thread_status_preservation.test.js +435 -0
  25. package/lib/esm/tests/api_tests/inbox_thread_status_preservation.test.js.map +1 -0
  26. package/lib/esm/tests/tests.d.ts.map +1 -1
  27. package/lib/esm/tests/tests.js +30 -3
  28. package/lib/esm/tests/tests.js.map +1 -1
  29. package/lib/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +10 -10
  31. package/src/tests/api_tests/database_cascade_delete.test.ts +193 -0
  32. package/src/tests/api_tests/inbox_thread_assignment_updates.test.ts +158 -0
  33. package/src/tests/tests.ts +23 -0
  34. package/test_generated.pdf +0 -0
@@ -1958,7 +1958,7 @@ export declare class EnduserSession extends Session {
1958
1958
  };
1959
1959
  }>;
1960
1960
  begin_login_flow: (a: Omit<extractFields<PublicActions['endusers']['begin_login_flow']['parameters']>, 'businessId' | 'organizationIds'>) => Promise<{
1961
- result: "continue-with-password" | "sent-email" | "sent-sms";
1961
+ result: "continue-with-password" | "sent-email" | "sent-sms" | "requires-dob";
1962
1962
  email?: string | undefined;
1963
1963
  otpToken?: string | undefined;
1964
1964
  }>;
@@ -0,0 +1,6 @@
1
+ import { Session } from "../../sdk";
2
+ export declare const database_cascade_delete_tests: ({ sdk, sdkNonAdmin }: {
3
+ sdk: Session;
4
+ sdkNonAdmin: Session;
5
+ }) => Promise<void>;
6
+ //# sourceMappingURL=database_cascade_delete.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database_cascade_delete.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/database_cascade_delete.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAYnC,eAAO,MAAM,6BAA6B;SAAwC,OAAO;iBAAe,OAAO;mBA4J9G,CAAA"}
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.database_cascade_delete_tests = void 0;
40
+ require('source-map-support').install();
41
+ var sdk_1 = require("../../sdk");
42
+ var testing_1 = require("@tellescope/testing");
43
+ var setup_1 = require("../setup");
44
+ var host = process.env.API_URL || 'http://localhost:8080';
45
+ // Main test function that can be called independently or from main test suite
46
+ var database_cascade_delete_tests = function (_a) {
47
+ var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
48
+ return __awaiter(void 0, void 0, void 0, function () {
49
+ return __generator(this, function (_b) {
50
+ switch (_b.label) {
51
+ case 0:
52
+ (0, testing_1.log_header)("Database Cascade Delete Tests");
53
+ // Test 1: Create database and records, then delete database and verify records are cascade deleted
54
+ return [4 /*yield*/, (0, testing_1.async_test)('cascade delete - deleting database deletes all database_records', function () { return __awaiter(void 0, void 0, void 0, function () {
55
+ var database, records, recordIds, recordsBefore, recordsAfter, _i, recordIds_1, recordId, err_1;
56
+ var _a, _b;
57
+ return __generator(this, function (_c) {
58
+ switch (_c.label) {
59
+ case 0: return [4 /*yield*/, sdk.api.databases.createOne({
60
+ title: "__Test__CascadeDelete_".concat(Date.now()),
61
+ fields: [
62
+ { type: 'Text', label: "Name" },
63
+ { type: 'Number', label: "Age" },
64
+ ],
65
+ })
66
+ // Create multiple database records
67
+ ];
68
+ case 1:
69
+ database = _c.sent();
70
+ return [4 /*yield*/, sdk.api.database_records.createSome([
71
+ {
72
+ databaseId: database.id,
73
+ values: [
74
+ { type: 'Text', value: 'Alice', label: 'Name' },
75
+ { type: 'Number', value: 25, label: 'Age' },
76
+ ],
77
+ },
78
+ {
79
+ databaseId: database.id,
80
+ values: [
81
+ { type: 'Text', value: 'Bob', label: 'Name' },
82
+ { type: 'Number', value: 30, label: 'Age' },
83
+ ],
84
+ },
85
+ {
86
+ databaseId: database.id,
87
+ values: [
88
+ { type: 'Text', value: 'Charlie', label: 'Name' },
89
+ { type: 'Number', value: 35, label: 'Age' },
90
+ ],
91
+ },
92
+ ])];
93
+ case 2:
94
+ records = _c.sent();
95
+ recordIds = records.created.map(function (r) { return r.id; });
96
+ console.log("Created database ".concat(database.id, " with ").concat(recordIds.length, " records"));
97
+ return [4 /*yield*/, sdk.api.database_records.getSome({ filter: { databaseId: database.id } })];
98
+ case 3:
99
+ recordsBefore = _c.sent();
100
+ if (recordsBefore.length !== 3) {
101
+ throw new Error("Expected 3 records before delete, got ".concat(recordsBefore.length));
102
+ }
103
+ console.log("Verified ".concat(recordsBefore.length, " records exist before deletion"));
104
+ // Delete the database
105
+ return [4 /*yield*/, sdk.api.databases.deleteOne(database.id)];
106
+ case 4:
107
+ // Delete the database
108
+ _c.sent();
109
+ console.log("Deleted database ".concat(database.id));
110
+ // Wait a moment for cascade delete to propagate
111
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)
112
+ // Verify all records were cascade deleted
113
+ ];
114
+ case 5:
115
+ // Wait a moment for cascade delete to propagate
116
+ _c.sent();
117
+ return [4 /*yield*/, sdk.api.database_records.getSome({ filter: { databaseId: database.id } })];
118
+ case 6:
119
+ recordsAfter = _c.sent();
120
+ if (recordsAfter.length !== 0) {
121
+ throw new Error("Expected 0 records after cascade delete, got ".concat(recordsAfter.length));
122
+ }
123
+ console.log("\u2713 Verified all records were cascade deleted");
124
+ _i = 0, recordIds_1 = recordIds;
125
+ _c.label = 7;
126
+ case 7:
127
+ if (!(_i < recordIds_1.length)) return [3 /*break*/, 12];
128
+ recordId = recordIds_1[_i];
129
+ _c.label = 8;
130
+ case 8:
131
+ _c.trys.push([8, 10, , 11]);
132
+ return [4 /*yield*/, sdk.api.database_records.getOne(recordId)];
133
+ case 9:
134
+ _c.sent();
135
+ throw new Error("Record ".concat(recordId, " should have been deleted but was still found"));
136
+ case 10:
137
+ err_1 = _c.sent();
138
+ if (!((_a = err_1.message) === null || _a === void 0 ? void 0 : _a.includes('Could not find')) && !((_b = err_1.message) === null || _b === void 0 ? void 0 : _b.includes('404'))) {
139
+ throw new Error("Unexpected error fetching deleted record: ".concat(err_1.message));
140
+ }
141
+ return [3 /*break*/, 11];
142
+ case 11:
143
+ _i++;
144
+ return [3 /*break*/, 7];
145
+ case 12:
146
+ console.log("\u2713 Verified individual record fetches return not found");
147
+ return [2 /*return*/, true];
148
+ }
149
+ });
150
+ }); }, { onResult: function (result) { return result === true; } })
151
+ // Test 2: Verify database with no records can be deleted without error
152
+ ];
153
+ case 1:
154
+ // Test 1: Create database and records, then delete database and verify records are cascade deleted
155
+ _b.sent();
156
+ // Test 2: Verify database with no records can be deleted without error
157
+ return [4 /*yield*/, (0, testing_1.async_test)('cascade delete - deleting empty database works', function () { return __awaiter(void 0, void 0, void 0, function () {
158
+ var database, err_2;
159
+ var _a, _b;
160
+ return __generator(this, function (_c) {
161
+ switch (_c.label) {
162
+ case 0: return [4 /*yield*/, sdk.api.databases.createOne({
163
+ title: "__Test__EmptyDB_".concat(Date.now()),
164
+ fields: [{ type: 'Text', label: "Field" }],
165
+ })
166
+ // Delete immediately without adding records
167
+ ];
168
+ case 1:
169
+ database = _c.sent();
170
+ // Delete immediately without adding records
171
+ return [4 /*yield*/, sdk.api.databases.deleteOne(database.id)
172
+ // Verify database is gone
173
+ ];
174
+ case 2:
175
+ // Delete immediately without adding records
176
+ _c.sent();
177
+ _c.label = 3;
178
+ case 3:
179
+ _c.trys.push([3, 5, , 6]);
180
+ return [4 /*yield*/, sdk.api.databases.getOne(database.id)];
181
+ case 4:
182
+ _c.sent();
183
+ throw new Error('Database should have been deleted');
184
+ case 5:
185
+ err_2 = _c.sent();
186
+ if (!((_a = err_2.message) === null || _a === void 0 ? void 0 : _a.includes('Could not find')) && !((_b = err_2.message) === null || _b === void 0 ? void 0 : _b.includes('404'))) {
187
+ throw new Error("Unexpected error: ".concat(err_2.message));
188
+ }
189
+ return [3 /*break*/, 6];
190
+ case 6: return [2 /*return*/, true];
191
+ }
192
+ });
193
+ }); }, { onResult: function (result) { return result === true; } })
194
+ // Test 3: Verify records from other databases are not affected
195
+ ];
196
+ case 2:
197
+ // Test 2: Verify database with no records can be deleted without error
198
+ _b.sent();
199
+ // Test 3: Verify records from other databases are not affected
200
+ return [4 /*yield*/, (0, testing_1.async_test)('cascade delete - only affects records from deleted database', function () { return __awaiter(void 0, void 0, void 0, function () {
201
+ var database1, database2, db2Record, db2RecordAfter;
202
+ return __generator(this, function (_a) {
203
+ switch (_a.label) {
204
+ case 0: return [4 /*yield*/, sdk.api.databases.createOne({
205
+ title: "__Test__DB1_".concat(Date.now()),
206
+ fields: [{ type: 'Text', label: "Value" }],
207
+ })];
208
+ case 1:
209
+ database1 = _a.sent();
210
+ return [4 /*yield*/, sdk.api.databases.createOne({
211
+ title: "__Test__DB2_".concat(Date.now()),
212
+ fields: [{ type: 'Text', label: "Value" }],
213
+ })
214
+ // Create records in both databases
215
+ ];
216
+ case 2:
217
+ database2 = _a.sent();
218
+ // Create records in both databases
219
+ return [4 /*yield*/, sdk.api.database_records.createOne({
220
+ databaseId: database1.id,
221
+ values: [{ type: 'Text', value: 'DB1 Record', label: 'Value' }],
222
+ })];
223
+ case 3:
224
+ // Create records in both databases
225
+ _a.sent();
226
+ return [4 /*yield*/, sdk.api.database_records.createOne({
227
+ databaseId: database2.id,
228
+ values: [{ type: 'Text', value: 'DB2 Record', label: 'Value' }],
229
+ })
230
+ // Delete database1
231
+ ];
232
+ case 4:
233
+ db2Record = _a.sent();
234
+ // Delete database1
235
+ return [4 /*yield*/, sdk.api.databases.deleteOne(database1.id)];
236
+ case 5:
237
+ // Delete database1
238
+ _a.sent();
239
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)
240
+ // Verify database2's record still exists
241
+ ];
242
+ case 6:
243
+ _a.sent();
244
+ return [4 /*yield*/, sdk.api.database_records.getOne(db2Record.id)];
245
+ case 7:
246
+ db2RecordAfter = _a.sent();
247
+ if (!db2RecordAfter) {
248
+ throw new Error('Database2 record should still exist');
249
+ }
250
+ console.log("\u2713 Verified database2 record was not affected by database1 deletion");
251
+ // Cleanup database2
252
+ return [4 /*yield*/, sdk.api.databases.deleteOne(database2.id)];
253
+ case 8:
254
+ // Cleanup database2
255
+ _a.sent();
256
+ return [2 /*return*/, true];
257
+ }
258
+ });
259
+ }); }, { onResult: function (result) { return result === true; } })];
260
+ case 3:
261
+ // Test 3: Verify records from other databases are not affected
262
+ _b.sent();
263
+ console.log("✅ All Database Cascade Delete tests passed!");
264
+ return [2 /*return*/];
265
+ }
266
+ });
267
+ });
268
+ };
269
+ exports.database_cascade_delete_tests = database_cascade_delete_tests;
270
+ // Allow running this test file independently
271
+ if (require.main === module) {
272
+ console.log("\uD83C\uDF10 Using API URL: ".concat(host));
273
+ var sdk_2 = new sdk_1.Session({ host: host });
274
+ var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
275
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
276
+ return __generator(this, function (_a) {
277
+ switch (_a.label) {
278
+ case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
279
+ case 1:
280
+ _a.sent();
281
+ return [4 /*yield*/, (0, exports.database_cascade_delete_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
282
+ case 2:
283
+ _a.sent();
284
+ return [2 /*return*/];
285
+ }
286
+ });
287
+ }); };
288
+ runTests()
289
+ .then(function () {
290
+ console.log("✅ Database cascade delete test suite completed successfully");
291
+ process.exit(0);
292
+ })
293
+ .catch(function (error) {
294
+ console.error("❌ Database cascade delete test suite failed:", error);
295
+ process.exit(1);
296
+ });
297
+ }
298
+ //# sourceMappingURL=database_cascade_delete.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database_cascade_delete.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/database_cascade_delete.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC;AAExC,iCAAmC;AACnC,+CAK4B;AAC5B,kCAAsC;AAEtC,IAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,uBAAgC,CAAA;AAEpE,8EAA8E;AACvE,IAAM,6BAA6B,GAAG,UAAO,EAA6D;QAA3D,GAAG,SAAA,EAAE,WAAW,iBAAA;;;;;oBACpE,IAAA,oBAAU,EAAC,+BAA+B,CAAC,CAAA;oBAE3C,mGAAmG;oBACnG,qBAAM,IAAA,oBAAU,EACd,iEAAiE,EACjE;;;;;4CAEmB,qBAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC;4CACjD,KAAK,EAAE,gCAAyB,IAAI,CAAC,GAAG,EAAE,CAAE;4CAC5C,MAAM,EAAE;gDACN,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;gDAC/B,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE;6CACjC;yCACF,CAAC;wCAEF,mCAAmC;sCAFjC;;wCANI,QAAQ,GAAG,SAMf;wCAGc,qBAAM,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC;gDACxD;oDACE,UAAU,EAAE,QAAQ,CAAC,EAAE;oDACvB,MAAM,EAAE;wDACN,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;wDAC/C,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;qDAC5C;iDACF;gDACD;oDACE,UAAU,EAAE,QAAQ,CAAC,EAAE;oDACvB,MAAM,EAAE;wDACN,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;wDAC7C,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;qDAC5C;iDACF;gDACD;oDACE,UAAU,EAAE,QAAQ,CAAC,EAAE;oDACvB,MAAM,EAAE;wDACN,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;wDACjD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;qDAC5C;iDACF;6CACF,CAAC,EAAA;;wCAtBI,OAAO,GAAG,SAsBd;wCAEI,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,EAAJ,CAAI,CAAC,CAAA;wCAChD,OAAO,CAAC,GAAG,CAAC,2BAAoB,QAAQ,CAAC,EAAE,mBAAS,SAAS,CAAC,MAAM,aAAU,CAAC,CAAA;wCAGzD,qBAAM,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAA;;wCAA/F,aAAa,GAAG,SAA+E;wCACrG,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;4CAC9B,MAAM,IAAI,KAAK,CAAC,gDAAyC,aAAa,CAAC,MAAM,CAAE,CAAC,CAAA;yCACjF;wCACD,OAAO,CAAC,GAAG,CAAC,mBAAY,aAAa,CAAC,MAAM,mCAAgC,CAAC,CAAA;wCAE7E,sBAAsB;wCACtB,qBAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAA;;wCAD9C,sBAAsB;wCACtB,SAA8C,CAAA;wCAC9C,OAAO,CAAC,GAAG,CAAC,2BAAoB,QAAQ,CAAC,EAAE,CAAE,CAAC,CAAA;wCAE9C,gDAAgD;wCAChD,qBAAM,IAAA,cAAI,EAAC,SAAS,EAAE,GAAG,CAAC;4CAE1B,0CAA0C;0CAFhB;;wCAD1B,gDAAgD;wCAChD,SAA0B,CAAA;wCAGL,qBAAM,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAA;;wCAA9F,YAAY,GAAG,SAA+E;wCAEpG,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;4CAC7B,MAAM,IAAI,KAAK,CAAC,uDAAgD,YAAY,CAAC,MAAM,CAAE,CAAC,CAAA;yCACvF;wCACD,OAAO,CAAC,GAAG,CAAC,kDAA6C,CAAC,CAAA;8CAG1B,EAAT,uBAAS;;;6CAAT,CAAA,uBAAS,CAAA;wCAArB,QAAQ;;;;wCAEf,qBAAM,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAA;;wCAA/C,SAA+C,CAAA;wCAC/C,MAAM,IAAI,KAAK,CAAC,iBAAU,QAAQ,kDAA+C,CAAC,CAAA;;;wCAElF,IAAI,CAAC,CAAA,MAAA,KAAG,CAAC,OAAO,0CAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAA,IAAI,CAAC,CAAA,MAAA,KAAG,CAAC,OAAO,0CAAE,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAE;4CAC7E,MAAM,IAAI,KAAK,CAAC,oDAA6C,KAAG,CAAC,OAAO,CAAE,CAAC,CAAA;yCAC5E;;;wCAPkB,IAAS,CAAA;;;wCAWhC,OAAO,CAAC,GAAG,CAAC,4DAAuD,CAAC,CAAA;wCAEpE,sBAAO,IAAI,EAAA;;;6BACZ,EACD,EAAE,QAAQ,EAAE,UAAC,MAAM,IAAK,OAAA,MAAM,KAAK,IAAI,EAAf,CAAe,EAAE,CAC1C;wBAED,uEAAuE;sBAFtE;;oBAhFD,mGAAmG;oBACnG,SA+EC,CAAA;oBAED,uEAAuE;oBACvE,qBAAM,IAAA,oBAAU,EACd,gDAAgD,EAChD;;;;;4CACmB,qBAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC;4CACjD,KAAK,EAAE,0BAAmB,IAAI,CAAC,GAAG,EAAE,CAAE;4CACtC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;yCAC3C,CAAC;wCAEF,4CAA4C;sCAF1C;;wCAHI,QAAQ,GAAG,SAGf;wCAEF,4CAA4C;wCAC5C,qBAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;4CAE9C,0BAA0B;0CAFoB;;wCAD9C,4CAA4C;wCAC5C,SAA8C,CAAA;;;;wCAI5C,qBAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAA;;wCAA3C,SAA2C,CAAA;wCAC3C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;;;wCAEpD,IAAI,CAAC,CAAA,MAAA,KAAG,CAAC,OAAO,0CAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAA,IAAI,CAAC,CAAA,MAAA,KAAG,CAAC,OAAO,0CAAE,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAE;4CAC7E,MAAM,IAAI,KAAK,CAAC,4BAAqB,KAAG,CAAC,OAAO,CAAE,CAAC,CAAA;yCACpD;;4CAGH,sBAAO,IAAI,EAAA;;;6BACZ,EACD,EAAE,QAAQ,EAAE,UAAC,MAAM,IAAK,OAAA,MAAM,KAAK,IAAI,EAAf,CAAe,EAAE,CAC1C;wBAED,+DAA+D;sBAF9D;;oBAzBD,uEAAuE;oBACvE,SAwBC,CAAA;oBAED,+DAA+D;oBAC/D,qBAAM,IAAA,oBAAU,EACd,6DAA6D,EAC7D;;;;4CAEoB,qBAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC;4CAClD,KAAK,EAAE,sBAAe,IAAI,CAAC,GAAG,EAAE,CAAE;4CAClC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;yCAC3C,CAAC,EAAA;;wCAHI,SAAS,GAAG,SAGhB;wCACgB,qBAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC;gDAClD,KAAK,EAAE,sBAAe,IAAI,CAAC,GAAG,EAAE,CAAE;gDAClC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;6CAC3C,CAAC;4CAEF,mCAAmC;0CAFjC;;wCAHI,SAAS,GAAG,SAGhB;wCAEF,mCAAmC;wCACnC,qBAAM,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC;gDACvC,UAAU,EAAE,SAAS,CAAC,EAAE;gDACxB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;6CAChE,CAAC,EAAA;;wCAJF,mCAAmC;wCACnC,SAGE,CAAA;wCACgB,qBAAM,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC;gDACzD,UAAU,EAAE,SAAS,CAAC,EAAE;gDACxB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;6CAChE,CAAC;4CAEF,mBAAmB;0CAFjB;;wCAHI,SAAS,GAAG,SAGhB;wCAEF,mBAAmB;wCACnB,qBAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,EAAA;;wCAD/C,mBAAmB;wCACnB,SAA+C,CAAA;wCAC/C,qBAAM,IAAA,cAAI,EAAC,SAAS,EAAE,GAAG,CAAC;4CAE1B,yCAAyC;0CAFf;;wCAA1B,SAA0B,CAAA;wCAGH,qBAAM,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,EAAA;;wCAApE,cAAc,GAAG,SAAmD;wCAC1E,IAAI,CAAC,cAAc,EAAE;4CACnB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;yCACvD;wCACD,OAAO,CAAC,GAAG,CAAC,yEAAoE,CAAC,CAAA;wCAEjF,oBAAoB;wCACpB,qBAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,EAAA;;wCAD/C,oBAAoB;wCACpB,SAA+C,CAAA;wCAE/C,sBAAO,IAAI,EAAA;;;6BACZ,EACD,EAAE,QAAQ,EAAE,UAAC,MAAM,IAAK,OAAA,MAAM,KAAK,IAAI,EAAf,CAAe,EAAE,CAC1C,EAAA;;oBAzCD,+DAA+D;oBAC/D,SAwCC,CAAA;oBAED,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAA;;;;;CAC3D,CAAA;AA5JY,QAAA,6BAA6B,iCA4JzC;AAED,6CAA6C;AAC7C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IAC3B,OAAO,CAAC,GAAG,CAAC,sCAAqB,IAAI,CAAE,CAAC,CAAA;IACxC,IAAM,KAAG,GAAG,IAAI,aAAO,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC,CAAA;IACjC,IAAM,aAAW,GAAG,IAAI,aAAO,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC,CAAA;IAEzC,IAAM,QAAQ,GAAG;;;wBACf,qBAAM,IAAA,mBAAW,EAAC,KAAG,EAAE,aAAW,CAAC,EAAA;;oBAAnC,SAAmC,CAAA;oBACnC,qBAAM,IAAA,qCAA6B,EAAC,EAAE,GAAG,OAAA,EAAE,WAAW,eAAA,EAAE,CAAC,EAAA;;oBAAzD,SAAyD,CAAA;;;;SAC1D,CAAA;IAED,QAAQ,EAAE;SACP,IAAI,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAA;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC;SACD,KAAK,CAAC,UAAC,KAAK;QACX,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAA;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;CACL"}
@@ -1 +1 @@
1
- {"version":3,"file":"inbox_thread_assignment_updates.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/inbox_thread_assignment_updates.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASnC,eAAO,MAAM,qCAAqC;SAAuC,OAAO;iBAAe,OAAO;mBAigBrH,CAAA"}
1
+ {"version":3,"file":"inbox_thread_assignment_updates.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/inbox_thread_assignment_updates.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASnC,eAAO,MAAM,qCAAqC;SAAuC,OAAO;iBAAe,OAAO;mBA+pBrH,CAAA"}
@@ -56,7 +56,7 @@ var host = process.env.API_URL || 'http://localhost:8080';
56
56
  var inbox_thread_assignment_updates_tests = function (_a) {
57
57
  var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
58
58
  return __awaiter(void 0, void 0, void 0, function () {
59
- var timestamp, testUser, testEnduser, defaultThreadFields, emailSubject, emailThreadId, emailThread, testEmail, smsThread, testSMS, testChatRoom, chatThread, loadedThreads, updatedEmailThread, loadedThreads2, updatedSMSThread, loadedThreads3, updatedChatThread, loadedThreads4, unchangedThread, loadedThreads5, clearedAssignThread, fixedTimestamp, matchingTimestampSubject, matchingTimestampThreadId, matchingTimestampEmailThread_1, matchingTimestampEmail, loadedThreads6, matchingTimestampUpdatedThread, matchingTimestampSMSThread_1, matchingTimestampSMS, loadedThreads7, matchingTimestampSMSUpdatedThread, orphanEmail, threadsBeforeOrphanUpdate, threadCountBefore, threadsAfterOrphanUpdate, threadCountAfter, upsertSMS, threadsAfterUpsertTest, upsertedThread, countResult, allThreads, filteredThreads, filteredCount, nonMatchingCount, emailTypeFilter, foundEmailByType, foundSmsByType, multiTypeFilter, foundEmailMulti, foundSmsMulti, foundChatMulti, assigneeFilter, foundAssigned, combinedFilter, foundCombined, mdbFilterCount, emptyMdbFilter, idsFilterResult, foundEmailById, foundSmsById, foundChatById, singleIdResult, idsCombinedResult, idsCountResult, emptyIdsResult, err_1;
59
+ var timestamp, testUser, testEnduser, defaultThreadFields, emailSubject, emailThreadId, emailThread, testEmail, smsThread, testSMS, testChatRoom, chatThread, loadedThreads, updatedEmailThread, loadedThreads2, updatedSMSThread, loadedThreads3, updatedChatThread, loadedThreads4, unchangedThread, loadedThreads5, clearedAssignThread, fixedTimestamp, matchingTimestampSubject, matchingTimestampThreadId, matchingTimestampEmailThread_1, matchingTimestampEmail, loadedThreads6, matchingTimestampUpdatedThread, matchingTimestampSMSThread_1, matchingTimestampSMS, loadedThreads7, matchingTimestampSMSUpdatedThread, orphanEmail, threadsBeforeOrphanUpdate, threadCountBefore, threadsAfterOrphanUpdate, threadCountAfter, upsertSMS, threadsAfterUpsertTest, upsertedThread, countResult, allThreads, filteredThreads, filteredCount, nonMatchingCount, emailTypeFilter, foundEmailByType, foundSmsByType, multiTypeFilter, foundEmailMulti, foundSmsMulti, foundChatMulti, assigneeFilter, foundAssigned, combinedFilter, foundCombined, mdbFilterCount, emptyMdbFilter, idsFilterResult, foundEmailById, foundSmsById, foundChatById, singleIdResult, idsCombinedResult, idsCountResult, emptyIdsResult, sortTestBaseTime, sortThread1, sortThread2, sortThread3, defaultSortResult, timestampSortResult, outboundSortResult, statusTestSMS1, statusTestFrom, statusTestThreads, statusTestThread, statusTestSMS2, threadAfterOutbound, statusTestSMS3, threadAfterNewInbound, err_1;
60
60
  var _b;
61
61
  return __generator(this, function (_c) {
62
62
  switch (_c.label) {
@@ -150,7 +150,7 @@ var inbox_thread_assignment_updates_tests = function (_a) {
150
150
  _c.sent();
151
151
  _c.label = 11;
152
152
  case 11:
153
- _c.trys.push([11, , 67, 71]);
153
+ _c.trys.push([11, , 87, 91]);
154
154
  // Test 1: Email Assignment Updates
155
155
  console.log("Testing email assignment updates...");
156
156
  // Update email assignment
@@ -584,10 +584,172 @@ var inbox_thread_assignment_updates_tests = function (_a) {
584
584
  emptyIdsResult = _c.sent();
585
585
  (0, testing_1.assert)(emptyIdsResult.threads.length >= 3, 'Empty ids array should not filter (return all threads)');
586
586
  console.log("✅ ids filter empty array test passed");
587
- console.log("🎉 All InboxThread assignment update tests passed!");
588
- return [3 /*break*/, 71];
587
+ // Test 24: sortBy parameter - default behavior (timestamp)
588
+ console.log("Testing sortBy parameter - default behavior...");
589
+ sortTestBaseTime = Date.now();
590
+ return [4 /*yield*/, sdk.api.inbox_threads.createOne(__assign(__assign({}, defaultThreadFields), { type: "SMS", title: "Sort Test Thread 1", threadId: "sort-test-1-".concat(timestamp), phoneNumber: "+15555550001", enduserPhoneNumber: "+15555550002", timestamp: new Date(sortTestBaseTime - 3000), outboundTimestamp: new Date(sortTestBaseTime) }))];
589
591
  case 67:
590
- _c.trys.push([67, 69, , 70]);
592
+ sortThread1 = _c.sent();
593
+ return [4 /*yield*/, sdk.api.inbox_threads.createOne(__assign(__assign({}, defaultThreadFields), { type: "SMS", title: "Sort Test Thread 2", threadId: "sort-test-2-".concat(timestamp), phoneNumber: "+15555550003", enduserPhoneNumber: "+15555550004", timestamp: new Date(sortTestBaseTime - 1000), outboundTimestamp: new Date(sortTestBaseTime - 3000) }))];
594
+ case 68:
595
+ sortThread2 = _c.sent();
596
+ return [4 /*yield*/, sdk.api.inbox_threads.createOne(__assign(__assign({}, defaultThreadFields), { type: "SMS", title: "Sort Test Thread 3", threadId: "sort-test-3-".concat(timestamp), phoneNumber: "+15555550005", enduserPhoneNumber: "+15555550006", timestamp: new Date(sortTestBaseTime - 2000), outboundTimestamp: new Date(sortTestBaseTime - 2000) }))
597
+ // Test default sort (should be by timestamp descending)
598
+ ];
599
+ case 69:
600
+ sortThread3 = _c.sent();
601
+ return [4 /*yield*/, sdk.api.inbox_threads.load_threads({
602
+ ids: [sortThread1.id, sortThread2.id, sortThread3.id]
603
+ })];
604
+ case 70:
605
+ defaultSortResult = _c.sent();
606
+ (0, testing_1.assert)(defaultSortResult.threads.length === 3, 'Should return 3 sort test threads');
607
+ (0, testing_1.assert)(defaultSortResult.threads[0].id === sortThread2.id, 'Default sort: newest timestamp should be first');
608
+ (0, testing_1.assert)(defaultSortResult.threads[1].id === sortThread3.id, 'Default sort: middle timestamp should be second');
609
+ (0, testing_1.assert)(defaultSortResult.threads[2].id === sortThread1.id, 'Default sort: oldest timestamp should be last');
610
+ console.log("✅ sortBy default behavior test passed");
611
+ // Test 25: sortBy='timestamp' explicit
612
+ console.log("Testing sortBy='timestamp' explicit...");
613
+ return [4 /*yield*/, sdk.api.inbox_threads.load_threads({
614
+ ids: [sortThread1.id, sortThread2.id, sortThread3.id],
615
+ sortBy: 'timestamp'
616
+ })];
617
+ case 71:
618
+ timestampSortResult = _c.sent();
619
+ (0, testing_1.assert)(timestampSortResult.threads[0].id === sortThread2.id, 'Explicit timestamp sort: newest should be first');
620
+ (0, testing_1.assert)(timestampSortResult.threads[1].id === sortThread3.id, 'Explicit timestamp sort: middle should be second');
621
+ (0, testing_1.assert)(timestampSortResult.threads[2].id === sortThread1.id, 'Explicit timestamp sort: oldest should be last');
622
+ console.log("✅ sortBy='timestamp' test passed");
623
+ // Test 26: sortBy='outboundTimestamp'
624
+ console.log("Testing sortBy='outboundTimestamp'...");
625
+ return [4 /*yield*/, sdk.api.inbox_threads.load_threads({
626
+ ids: [sortThread1.id, sortThread2.id, sortThread3.id],
627
+ sortBy: 'outboundTimestamp'
628
+ })];
629
+ case 72:
630
+ outboundSortResult = _c.sent();
631
+ (0, testing_1.assert)(outboundSortResult.threads[0].id === sortThread1.id, 'OutboundTimestamp sort: newest outbound should be first');
632
+ (0, testing_1.assert)(outboundSortResult.threads[1].id === sortThread3.id, 'OutboundTimestamp sort: middle outbound should be second');
633
+ (0, testing_1.assert)(outboundSortResult.threads[2].id === sortThread2.id, 'OutboundTimestamp sort: oldest outbound should be last');
634
+ console.log("✅ sortBy='outboundTimestamp' test passed");
635
+ // Cleanup sort test threads
636
+ return [4 /*yield*/, Promise.all([
637
+ sdk.api.inbox_threads.deleteOne(sortThread1.id),
638
+ sdk.api.inbox_threads.deleteOne(sortThread2.id),
639
+ sdk.api.inbox_threads.deleteOne(sortThread3.id),
640
+ ])
641
+ // ========== InboxStatus Preservation Tests ==========
642
+ // These tests verify that outbound messages do NOT reset inboxStatus
643
+ // Test 27: Outbound SMS should NOT reset inboxStatus
644
+ ];
645
+ case 73:
646
+ // Cleanup sort test threads
647
+ _c.sent();
648
+ // ========== InboxStatus Preservation Tests ==========
649
+ // These tests verify that outbound messages do NOT reset inboxStatus
650
+ // Test 27: Outbound SMS should NOT reset inboxStatus
651
+ console.log("Testing outbound SMS should NOT reset inboxStatus...");
652
+ return [4 /*yield*/, sdk.api.sms_messages.createOne({
653
+ message: "Inbound test message for status test",
654
+ enduserId: testEnduser.id,
655
+ inbound: true,
656
+ phoneNumber: "+15555559999",
657
+ enduserPhoneNumber: "+15555559876",
658
+ logOnly: true,
659
+ })
660
+ // Build threads using reset_threads + build_threads pattern
661
+ ];
662
+ case 74:
663
+ statusTestSMS1 = _c.sent();
664
+ statusTestFrom = new Date(Date.now() - 60000);
665
+ return [4 /*yield*/, sdk.api.inbox_threads.reset_threads()];
666
+ case 75:
667
+ _c.sent();
668
+ return [4 /*yield*/, sdk.api.inbox_threads.build_threads({ from: statusTestFrom, to: new Date() })];
669
+ case 76:
670
+ _c.sent();
671
+ return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
672
+ case 77:
673
+ statusTestThreads = _c.sent();
674
+ statusTestThread = statusTestThreads.threads.find(function (t) {
675
+ return t.type === 'SMS' && t.enduserIds.includes(testEnduser.id) && t.phoneNumber === "+15555559999";
676
+ });
677
+ (0, testing_1.assert)(!!statusTestThread, "Status test SMS thread should be created");
678
+ (0, testing_1.assert)(statusTestThread.inboxStatus === 'New', "Initial status should be 'New', got '".concat(statusTestThread.inboxStatus, "'"));
679
+ // Update thread status to "Resolved"
680
+ return [4 /*yield*/, sdk.api.inbox_threads.updateOne(statusTestThread.id, { inboxStatus: "Resolved" })
681
+ // Create outbound SMS (should NOT reset status)
682
+ ];
683
+ case 78:
684
+ // Update thread status to "Resolved"
685
+ _c.sent();
686
+ return [4 /*yield*/, sdk.api.sms_messages.createOne({
687
+ message: "Outbound reply - should not reset status",
688
+ enduserId: testEnduser.id,
689
+ inbound: false,
690
+ phoneNumber: "+15555559999",
691
+ enduserPhoneNumber: "+15555559876",
692
+ logOnly: true,
693
+ })
694
+ // Rebuild threads - status should remain "Resolved"
695
+ ];
696
+ case 79:
697
+ statusTestSMS2 = _c.sent();
698
+ // Rebuild threads - status should remain "Resolved"
699
+ return [4 /*yield*/, sdk.api.inbox_threads.build_threads({ from: statusTestFrom, to: new Date() })];
700
+ case 80:
701
+ // Rebuild threads - status should remain "Resolved"
702
+ _c.sent();
703
+ return [4 /*yield*/, sdk.api.inbox_threads.load_threads({ ids: [statusTestThread.id] })];
704
+ case 81:
705
+ threadAfterOutbound = (_c.sent()).threads[0];
706
+ (0, testing_1.assert)(threadAfterOutbound.inboxStatus === 'Resolved', "Status should remain 'Resolved' after outbound message, got '".concat(threadAfterOutbound.inboxStatus, "'"));
707
+ (0, testing_1.assert)(!!threadAfterOutbound.outboundTimestamp, "outboundTimestamp should be set after outbound message");
708
+ console.log("✅ Outbound SMS does NOT reset inboxStatus test passed");
709
+ // Test 28: New inbound SMS SHOULD update inboxStatus
710
+ console.log("Testing new inbound SMS SHOULD update inboxStatus...");
711
+ // Wait to ensure ObjectId timestamps are in different seconds (MongoDB ObjectIds have second-level precision)
712
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1100); })];
713
+ case 82:
714
+ // Wait to ensure ObjectId timestamps are in different seconds (MongoDB ObjectIds have second-level precision)
715
+ _c.sent();
716
+ return [4 /*yield*/, sdk.api.sms_messages.createOne({
717
+ message: "New inbound - should update status",
718
+ enduserId: testEnduser.id,
719
+ inbound: true,
720
+ phoneNumber: "+15555559999",
721
+ enduserPhoneNumber: "+15555559876",
722
+ inboxStatus: "New",
723
+ logOnly: true,
724
+ })
725
+ // Rebuild threads - status SHOULD be updated from new inbound
726
+ ];
727
+ case 83:
728
+ statusTestSMS3 = _c.sent();
729
+ // Rebuild threads - status SHOULD be updated from new inbound
730
+ return [4 /*yield*/, sdk.api.inbox_threads.build_threads({ from: statusTestFrom, to: new Date() })];
731
+ case 84:
732
+ // Rebuild threads - status SHOULD be updated from new inbound
733
+ _c.sent();
734
+ return [4 /*yield*/, sdk.api.inbox_threads.load_threads({ ids: [statusTestThread.id] })];
735
+ case 85:
736
+ threadAfterNewInbound = (_c.sent()).threads[0];
737
+ (0, testing_1.assert)(threadAfterNewInbound.inboxStatus === 'New', "Status SHOULD be 'New' after new inbound message, got '".concat(threadAfterNewInbound.inboxStatus, "'"));
738
+ console.log("✅ New inbound SMS DOES update inboxStatus test passed");
739
+ // Cleanup status preservation test resources
740
+ return [4 /*yield*/, Promise.all([
741
+ sdk.api.sms_messages.deleteOne(statusTestSMS1.id),
742
+ sdk.api.sms_messages.deleteOne(statusTestSMS2.id),
743
+ sdk.api.sms_messages.deleteOne(statusTestSMS3.id),
744
+ sdk.api.inbox_threads.deleteOne(statusTestThread.id),
745
+ ])];
746
+ case 86:
747
+ // Cleanup status preservation test resources
748
+ _c.sent();
749
+ console.log("🎉 All InboxThread assignment update tests passed!");
750
+ return [3 /*break*/, 91];
751
+ case 87:
752
+ _c.trys.push([87, 89, , 90]);
591
753
  return [4 /*yield*/, Promise.all([
592
754
  sdk.api.inbox_threads.deleteOne(emailThread.id),
593
755
  sdk.api.inbox_threads.deleteOne(smsThread.id),
@@ -598,15 +760,15 @@ var inbox_thread_assignment_updates_tests = function (_a) {
598
760
  sdk.api.endusers.deleteOne(testEnduser.id),
599
761
  sdk.api.users.deleteOne(testUser.id),
600
762
  ])];
601
- case 68:
763
+ case 88:
602
764
  _c.sent();
603
- return [3 /*break*/, 70];
604
- case 69:
765
+ return [3 /*break*/, 90];
766
+ case 89:
605
767
  err_1 = _c.sent();
606
768
  console.error("Cleanup error:", err_1);
607
- return [3 /*break*/, 70];
608
- case 70: return [7 /*endfinally*/];
609
- case 71: return [2 /*return*/];
769
+ return [3 /*break*/, 90];
770
+ case 90: return [7 /*endfinally*/];
771
+ case 91: return [2 /*return*/];
610
772
  }
611
773
  });
612
774
  });