@tellescope/sdk 1.255.7 → 1.255.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.
Files changed (41) hide show
  1. package/lib/cjs/enduser.d.ts +1 -0
  2. package/lib/cjs/enduser.d.ts.map +1 -1
  3. package/lib/cjs/sdk.d.ts +1 -0
  4. package/lib/cjs/sdk.d.ts.map +1 -1
  5. package/lib/cjs/session.d.ts +1 -0
  6. package/lib/cjs/session.d.ts.map +1 -1
  7. package/lib/cjs/tests/api_tests/custom_dashboards.test.d.ts.map +1 -1
  8. package/lib/cjs/tests/api_tests/custom_dashboards.test.js +258 -32
  9. package/lib/cjs/tests/api_tests/custom_dashboards.test.js.map +1 -1
  10. package/lib/cjs/tests/api_tests/gmail_sync_related_contact_emails.test.d.ts +6 -0
  11. package/lib/cjs/tests/api_tests/gmail_sync_related_contact_emails.test.d.ts.map +1 -0
  12. package/lib/cjs/tests/api_tests/gmail_sync_related_contact_emails.test.js +183 -0
  13. package/lib/cjs/tests/api_tests/gmail_sync_related_contact_emails.test.js.map +1 -0
  14. package/lib/cjs/tests/api_tests/webhook_error_handling.test.d.ts +6 -0
  15. package/lib/cjs/tests/api_tests/webhook_error_handling.test.d.ts.map +1 -0
  16. package/lib/cjs/tests/api_tests/webhook_error_handling.test.js +324 -0
  17. package/lib/cjs/tests/api_tests/webhook_error_handling.test.js.map +1 -0
  18. package/lib/cjs/tests/tests.d.ts.map +1 -1
  19. package/lib/cjs/tests/tests.js +172 -168
  20. package/lib/cjs/tests/tests.js.map +1 -1
  21. package/lib/esm/sdk.d.ts +2 -2
  22. package/lib/esm/tests/api_tests/custom_dashboards.test.d.ts.map +1 -1
  23. package/lib/esm/tests/api_tests/custom_dashboards.test.js +259 -33
  24. package/lib/esm/tests/api_tests/custom_dashboards.test.js.map +1 -1
  25. package/lib/esm/tests/api_tests/gmail_sync_related_contact_emails.test.d.ts +6 -0
  26. package/lib/esm/tests/api_tests/gmail_sync_related_contact_emails.test.d.ts.map +1 -0
  27. package/lib/esm/tests/api_tests/gmail_sync_related_contact_emails.test.js +179 -0
  28. package/lib/esm/tests/api_tests/gmail_sync_related_contact_emails.test.js.map +1 -0
  29. package/lib/esm/tests/api_tests/webhook_error_handling.test.d.ts +6 -0
  30. package/lib/esm/tests/api_tests/webhook_error_handling.test.d.ts.map +1 -0
  31. package/lib/esm/tests/api_tests/webhook_error_handling.test.js +317 -0
  32. package/lib/esm/tests/api_tests/webhook_error_handling.test.js.map +1 -0
  33. package/lib/esm/tests/tests.d.ts.map +1 -1
  34. package/lib/esm/tests/tests.js +172 -168
  35. package/lib/esm/tests/tests.js.map +1 -1
  36. package/lib/tsconfig.tsbuildinfo +1 -1
  37. package/package.json +8 -8
  38. package/src/tests/api_tests/custom_dashboards.test.ts +208 -0
  39. package/src/tests/api_tests/webhook_error_handling.test.ts +190 -0
  40. package/src/tests/tests.ts +3 -1
  41. package/test_generated.pdf +0 -0
@@ -0,0 +1,183 @@
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.gmail_sync_related_contact_emails_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
+ // Builds the same related-contact-scoped mdbFilter the EnduserProfile Emails tab (useEmailThreads)
46
+ // constructs on the client — anchored on enduserId so the address scan only runs across a related
47
+ // contact's emails. This exercises the display/read path for CU-86e23ffay without a live Gmail sync.
48
+ var buildRelatedContactFilter = function (_a) {
49
+ var enduserId = _a.enduserId, relatedIds = _a.relatedIds, addresses = _a.addresses;
50
+ return ({
51
+ $and: [{
52
+ $or: [
53
+ { enduserId: enduserId },
54
+ { enduserId: { $in: relatedIds }, $or: [
55
+ { source: { $in: addresses } },
56
+ { destination: { $in: addresses } },
57
+ { cc: { $in: addresses } },
58
+ ] },
59
+ ],
60
+ }],
61
+ });
62
+ };
63
+ // Main test function that can be called independently
64
+ var gmail_sync_related_contact_emails_tests = function (_a) {
65
+ var sdk = _a.sdk;
66
+ return __awaiter(void 0, void 0, void 0, function () {
67
+ var unique, careAddress, husbandAddress, wifeAddress, strangerAddress, createdEnduserIds, createdEmailIds, wife, husband, stranger, wifeReloaded, relatedIds, husbandEmail_1, strangerEmail_1, wifeFilter, wifeEmails, husbandOwn;
68
+ var _b;
69
+ return __generator(this, function (_c) {
70
+ switch (_c.label) {
71
+ case 0:
72
+ (0, testing_1.log_header)("Gmail Sync — Related Contact Email Association Tests");
73
+ unique = Date.now();
74
+ careAddress = "care-team+".concat(unique, "@example.com").toLowerCase();
75
+ husbandAddress = "husband+".concat(unique, "@example.com").toLowerCase();
76
+ wifeAddress = "wife+".concat(unique, "@example.com").toLowerCase();
77
+ strangerAddress = "stranger+".concat(unique, "@example.com").toLowerCase();
78
+ createdEnduserIds = [];
79
+ createdEmailIds = [];
80
+ _c.label = 1;
81
+ case 1:
82
+ _c.trys.push([1, , 10, 13]);
83
+ return [4 /*yield*/, sdk.api.endusers.createOne({ fname: 'Wife', email: wifeAddress })];
84
+ case 2:
85
+ wife = _c.sent();
86
+ return [4 /*yield*/, sdk.api.endusers.createOne({
87
+ fname: 'Husband', email: husbandAddress,
88
+ relationships: [{ type: 'Spouse', id: wife.id }],
89
+ })
90
+ // An unrelated third contact who also appears (CC'd) on an unrelated email
91
+ ];
92
+ case 3:
93
+ husband = _c.sent();
94
+ return [4 /*yield*/, sdk.api.endusers.createOne({ fname: 'Stranger', email: strangerAddress })];
95
+ case 4:
96
+ stranger = _c.sent();
97
+ createdEnduserIds.push(wife.id, husband.id, stranger.id);
98
+ return [4 /*yield*/, sdk.api.endusers.getOne(wife.id)];
99
+ case 5:
100
+ wifeReloaded = _c.sent();
101
+ relatedIds = ((_b = wifeReloaded.relationships) !== null && _b !== void 0 ? _b : []).map(function (r) { return r.id; });
102
+ (0, testing_1.assert)(relatedIds.includes(husband.id), "Wife's relationships did not include Husband after bidirectional sync", "Relationship bidirectionally synced onto Wife");
103
+ return [4 /*yield*/, sdk.api.emails.createOne({
104
+ enduserId: husband.id,
105
+ subject: "Husband to care team ".concat(unique),
106
+ textContent: 'inbound from husband, wife cc',
107
+ cc: [wifeAddress],
108
+ inbound: true,
109
+ logOnly: true,
110
+ })];
111
+ case 6:
112
+ husbandEmail_1 = _c.sent();
113
+ createdEmailIds.push(husbandEmail_1.id);
114
+ return [4 /*yield*/, sdk.api.emails.createOne({
115
+ enduserId: stranger.id,
116
+ subject: "Stranger email ".concat(unique),
117
+ textContent: 'unrelated contact, wife cc',
118
+ cc: [wifeAddress],
119
+ inbound: true,
120
+ logOnly: true,
121
+ })];
122
+ case 7:
123
+ strangerEmail_1 = _c.sent();
124
+ createdEmailIds.push(strangerEmail_1.id);
125
+ wifeFilter = buildRelatedContactFilter({
126
+ enduserId: wife.id,
127
+ relatedIds: relatedIds,
128
+ addresses: [wifeAddress],
129
+ });
130
+ return [4 /*yield*/, sdk.api.emails.getSome({ mdbFilter: wifeFilter })];
131
+ case 8:
132
+ wifeEmails = _c.sent();
133
+ (0, testing_1.assert)(!!wifeEmails.find(function (e) { return e.id === husbandEmail_1.id; }), "Husband's email (Wife CC'd) did NOT surface on Wife's related-contact query", "Husband's CC'd email cross-surfaces on Wife via related-contact match");
134
+ (0, testing_1.assert)(!wifeEmails.find(function (e) { return e.id === strangerEmail_1.id; }), "Unrelated stranger email incorrectly cross-surfaced on Wife", "Unrelated contact's email does NOT cross-surface (control)");
135
+ return [4 /*yield*/, sdk.api.emails.getSome({ filter: { enduserId: husband.id } })];
136
+ case 9:
137
+ husbandOwn = _c.sent();
138
+ (0, testing_1.assert)(!!husbandOwn.find(function (e) { return e.id === husbandEmail_1.id; }), "Husband's own email missing from his single-enduserId load", "Normal 1:1 load still returns the email on its owning contact");
139
+ return [3 /*break*/, 13];
140
+ case 10:
141
+ // Cleanup
142
+ return [4 /*yield*/, Promise.all(createdEmailIds.map(function (id) { return sdk.api.emails.deleteOne(id).catch(function () { }); }))];
143
+ case 11:
144
+ // Cleanup
145
+ _c.sent();
146
+ return [4 /*yield*/, Promise.all(createdEnduserIds.map(function (id) { return sdk.api.endusers.deleteOne(id).catch(function () { }); }))];
147
+ case 12:
148
+ _c.sent();
149
+ return [7 /*endfinally*/];
150
+ case 13: return [2 /*return*/];
151
+ }
152
+ });
153
+ });
154
+ };
155
+ exports.gmail_sync_related_contact_emails_tests = gmail_sync_related_contact_emails_tests;
156
+ // Allow running this test file independently
157
+ if (require.main === module) {
158
+ var sdk_2 = new sdk_1.Session({ host: host });
159
+ var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
160
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
161
+ return __generator(this, function (_a) {
162
+ switch (_a.label) {
163
+ case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
164
+ case 1:
165
+ _a.sent();
166
+ return [4 /*yield*/, (0, exports.gmail_sync_related_contact_emails_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
167
+ case 2:
168
+ _a.sent();
169
+ return [2 /*return*/];
170
+ }
171
+ });
172
+ }); };
173
+ runTests()
174
+ .then(function () {
175
+ console.log("✅ Gmail sync related contact emails test suite completed successfully");
176
+ process.exit(0);
177
+ })
178
+ .catch(function (error) {
179
+ console.error("❌ Gmail sync related contact emails test suite failed:", error);
180
+ process.exit(1);
181
+ });
182
+ }
183
+ //# sourceMappingURL=gmail_sync_related_contact_emails.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gmail_sync_related_contact_emails.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/gmail_sync_related_contact_emails.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Session } from "../../sdk";
2
+ export declare const webhook_error_handling_tests: ({ sdk, sdkNonAdmin }: {
3
+ sdk: Session;
4
+ sdkNonAdmin: Session;
5
+ }) => Promise<void>;
6
+ //# sourceMappingURL=webhook_error_handling.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook_error_handling.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/webhook_error_handling.test.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAiDnC,eAAO,MAAM,4BAA4B;SAAwC,OAAO;iBAAe,OAAO;mBA+G7G,CAAA"}
@@ -0,0 +1,324 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.webhook_error_handling_tests = void 0;
43
+ require('source-map-support').install();
44
+ var express_1 = __importDefault(require("express"));
45
+ var body_parser_1 = __importDefault(require("body-parser"));
46
+ var crypto_1 = __importDefault(require("crypto"));
47
+ var sdk_1 = require("../../sdk");
48
+ var testing_1 = require("@tellescope/testing");
49
+ var setup_1 = require("../setup");
50
+ var host = process.env.API_URL || 'http://localhost:8080';
51
+ var TEST_SECRET = "this is a test secret for verifying integrity of web hooks";
52
+ var sha256 = function (s) { return crypto_1.default.createHash('sha256').update(s).digest('hex'); };
53
+ // DNS resolution for the reserved .invalid TLD always fails => axios ENOTFOUND (no err.response)
54
+ var ENOTFOUND_URL = "http://webhook-error-handling-test.invalid/hook";
55
+ var POLL_TIMEOUT_MS = 10000;
56
+ var POLL_INTERVAL_MS = 500;
57
+ var find_log_for_url = function (sdk, url) { return __awaiter(void 0, void 0, void 0, function () {
58
+ var start, logs, match;
59
+ return __generator(this, function (_a) {
60
+ switch (_a.label) {
61
+ case 0:
62
+ start = Date.now();
63
+ _a.label = 1;
64
+ case 1:
65
+ if (!(Date.now() - start < POLL_TIMEOUT_MS)) return [3 /*break*/, 4];
66
+ return [4 /*yield*/, sdk.api.webhook_logs.getSome({ limit: 50, sort: 'newFirst' })];
67
+ case 2:
68
+ logs = _a.sent();
69
+ match = logs.find(function (l) { return l.url === url; });
70
+ if (match)
71
+ return [2 /*return*/, match];
72
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, POLL_INTERVAL_MS)];
73
+ case 3:
74
+ _a.sent();
75
+ return [3 /*break*/, 1];
76
+ case 4: return [2 /*return*/, null];
77
+ }
78
+ });
79
+ }); };
80
+ var get_failure_count = function (sdk) { return __awaiter(void 0, void 0, void 0, function () {
81
+ var configs;
82
+ var _a, _b;
83
+ return __generator(this, function (_c) {
84
+ switch (_c.label) {
85
+ case 0: return [4 /*yield*/, sdk.api.webhooks.getSome()];
86
+ case 1:
87
+ configs = _c.sent();
88
+ return [2 /*return*/, ((_b = (_a = configs[0]) === null || _a === void 0 ? void 0 : _a.deliveryFailureCount) !== null && _b !== void 0 ? _b : 0)];
89
+ }
90
+ });
91
+ }); };
92
+ // the $inc on the webhook config is fire-and-forget — poll until it lands
93
+ var wait_for_failure_count = function (sdk, expected) { return __awaiter(void 0, void 0, void 0, function () {
94
+ var start, count;
95
+ return __generator(this, function (_a) {
96
+ switch (_a.label) {
97
+ case 0:
98
+ start = Date.now();
99
+ count = -1;
100
+ _a.label = 1;
101
+ case 1:
102
+ if (!(Date.now() - start < POLL_TIMEOUT_MS)) return [3 /*break*/, 4];
103
+ return [4 /*yield*/, get_failure_count(sdk)];
104
+ case 2:
105
+ count = _a.sent();
106
+ if (count === expected)
107
+ return [2 /*return*/, count];
108
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, POLL_INTERVAL_MS)];
109
+ case 3:
110
+ _a.sent();
111
+ return [3 /*break*/, 1];
112
+ case 4: return [2 /*return*/, count];
113
+ }
114
+ });
115
+ }); };
116
+ // Main test function that can be called independently
117
+ var webhook_error_handling_tests = function (_a) {
118
+ var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
119
+ return __awaiter(void 0, void 0, void 0, function () {
120
+ var app, successIntegrityVerified, server, receiverBase, enduserIds, trigger_delivery, initialCount, enotfoundLog, _b, log400, _c, log500, _d, successLog, _e, configs, webhookId, _f, _i, enduserIds_1, id, _g;
121
+ var _h;
122
+ return __generator(this, function (_j) {
123
+ switch (_j.label) {
124
+ case 0:
125
+ (0, testing_1.log_header)("Webhook Error Handling Tests");
126
+ app = (0, express_1.default)();
127
+ app.use(body_parser_1.default.json({ limit: '25mb' }));
128
+ successIntegrityVerified = false;
129
+ app.post('/fail-400', function (_, res) { res.status(400).json({ error: 'bad request' }); });
130
+ app.post('/fail-500', function (_, res) { res.status(500).json({ error: 'server error' }); });
131
+ app.post('/success', function (req, res) {
132
+ var _a = req.body, records = _a.records, timestamp = _a.timestamp, integrity = _a.integrity;
133
+ successIntegrityVerified = (sha256((records !== null && records !== void 0 ? records : []).map(function (r) { return r.id; }).join('') + timestamp + TEST_SECRET) === integrity);
134
+ res.status(200).json({});
135
+ });
136
+ return [4 /*yield*/, new Promise(function (resolve) {
137
+ var s = app.listen(0, '127.0.0.1', function () { return resolve(s); });
138
+ })];
139
+ case 1:
140
+ server = _j.sent();
141
+ receiverBase = "http://127.0.0.1:".concat(server.address().port);
142
+ enduserIds = [];
143
+ trigger_delivery = function (label) { return __awaiter(void 0, void 0, void 0, function () {
144
+ var enduser;
145
+ return __generator(this, function (_a) {
146
+ switch (_a.label) {
147
+ case 0: return [4 /*yield*/, sdk.api.endusers.createOne({ email: "webhook-error-".concat(label, "-").concat(Date.now(), "@tellescope.com") })];
148
+ case 1:
149
+ enduser = _a.sent();
150
+ enduserIds.push(enduser.id);
151
+ return [2 /*return*/];
152
+ }
153
+ });
154
+ }); };
155
+ _j.label = 2;
156
+ case 2:
157
+ _j.trys.push([2, , 25, 33]);
158
+ return [4 /*yield*/, (0, testing_1.async_test)('configure webhook', function () { return sdk.api.webhooks.configure({ url: ENOTFOUND_URL, secret: TEST_SECRET }); }, { shouldError: false, onResult: function () { return true; } })];
159
+ case 3:
160
+ _j.sent();
161
+ return [4 /*yield*/, sdk.api.webhooks.update({ subscriptionUpdates: { endusers: { create: true, update: false, delete: false } } })];
162
+ case 4:
163
+ _j.sent();
164
+ return [4 /*yield*/, get_failure_count(sdk)
165
+ // Scenario 1: ENOTFOUND — no HTTP response at all
166
+ ];
167
+ case 5:
168
+ initialCount = _j.sent();
169
+ // Scenario 1: ENOTFOUND — no HTTP response at all
170
+ return [4 /*yield*/, trigger_delivery('enotfound')];
171
+ case 6:
172
+ // Scenario 1: ENOTFOUND — no HTTP response at all
173
+ _j.sent();
174
+ return [4 /*yield*/, find_log_for_url(sdk, ENOTFOUND_URL)];
175
+ case 7:
176
+ enotfoundLog = _j.sent();
177
+ (0, testing_1.assert)(!!enotfoundLog, 'no webhook_logs entry for ENOTFOUND delivery', 'ENOTFOUND failure logged to webhook_logs');
178
+ (0, testing_1.assert)(typeof (enotfoundLog === null || enotfoundLog === void 0 ? void 0 : enotfoundLog.response) === 'string' && enotfoundLog.response.length > 0, "expected string error message response, got: ".concat(JSON.stringify(enotfoundLog === null || enotfoundLog === void 0 ? void 0 : enotfoundLog.response)), 'ENOTFOUND log has error message as response');
179
+ (0, testing_1.assert)((enotfoundLog === null || enotfoundLog === void 0 ? void 0 : enotfoundLog.responseCode) === undefined, 'unexpected responseCode for ENOTFOUND', 'ENOTFOUND log has no responseCode');
180
+ _b = testing_1.assert;
181
+ return [4 /*yield*/, wait_for_failure_count(sdk, initialCount + 1)];
182
+ case 8:
183
+ _b.apply(void 0, [(_j.sent()) === initialCount + 1,
184
+ 'deliveryFailureCount not incremented after ENOTFOUND',
185
+ 'deliveryFailureCount incremented after ENOTFOUND']);
186
+ // Scenario 2a: HTTP 400 from the receiver
187
+ return [4 /*yield*/, sdk.api.webhooks.update({ url: "".concat(receiverBase, "/fail-400") })];
188
+ case 9:
189
+ // Scenario 2a: HTTP 400 from the receiver
190
+ _j.sent();
191
+ return [4 /*yield*/, trigger_delivery('http400')];
192
+ case 10:
193
+ _j.sent();
194
+ return [4 /*yield*/, find_log_for_url(sdk, "".concat(receiverBase, "/fail-400"))];
195
+ case 11:
196
+ log400 = _j.sent();
197
+ (0, testing_1.assert)((log400 === null || log400 === void 0 ? void 0 : log400.responseCode) === 400, "expected responseCode 400, got ".concat(log400 === null || log400 === void 0 ? void 0 : log400.responseCode), 'HTTP 400 responseCode recorded');
198
+ _c = testing_1.assert;
199
+ return [4 /*yield*/, wait_for_failure_count(sdk, initialCount + 2)];
200
+ case 12:
201
+ _c.apply(void 0, [(_j.sent()) === initialCount + 2,
202
+ 'deliveryFailureCount not incremented after HTTP 400',
203
+ 'deliveryFailureCount incremented after HTTP 400']);
204
+ // Scenario 2b: HTTP 500 from the receiver
205
+ return [4 /*yield*/, sdk.api.webhooks.update({ url: "".concat(receiverBase, "/fail-500") })];
206
+ case 13:
207
+ // Scenario 2b: HTTP 500 from the receiver
208
+ _j.sent();
209
+ return [4 /*yield*/, trigger_delivery('http500')];
210
+ case 14:
211
+ _j.sent();
212
+ return [4 /*yield*/, find_log_for_url(sdk, "".concat(receiverBase, "/fail-500"))];
213
+ case 15:
214
+ log500 = _j.sent();
215
+ (0, testing_1.assert)((log500 === null || log500 === void 0 ? void 0 : log500.responseCode) === 500, "expected responseCode 500, got ".concat(log500 === null || log500 === void 0 ? void 0 : log500.responseCode), 'HTTP 500 responseCode recorded');
216
+ _d = testing_1.assert;
217
+ return [4 /*yield*/, wait_for_failure_count(sdk, initialCount + 3)];
218
+ case 16:
219
+ _d.apply(void 0, [(_j.sent()) === initialCount + 3,
220
+ 'deliveryFailureCount not incremented after HTTP 500',
221
+ 'deliveryFailureCount incremented after HTTP 500']);
222
+ // Scenario 3 (timeout): skipped — WEBHOOK_TIMEOUT_MS is a constant (15s), not env-overridable,
223
+ // and a 15s+ non-responding receiver would make this suite unacceptably slow.
224
+ // Covered by security/F-0155-webhook-timeout.test.ts via send_automation_webhook.
225
+ // Scenario 4: success path unchanged — 200 logged, counter untouched
226
+ return [4 /*yield*/, sdk.api.webhooks.update({ url: "".concat(receiverBase, "/success") })];
227
+ case 17:
228
+ // Scenario 3 (timeout): skipped — WEBHOOK_TIMEOUT_MS is a constant (15s), not env-overridable,
229
+ // and a 15s+ non-responding receiver would make this suite unacceptably slow.
230
+ // Covered by security/F-0155-webhook-timeout.test.ts via send_automation_webhook.
231
+ // Scenario 4: success path unchanged — 200 logged, counter untouched
232
+ _j.sent();
233
+ return [4 /*yield*/, trigger_delivery('success')];
234
+ case 18:
235
+ _j.sent();
236
+ return [4 /*yield*/, find_log_for_url(sdk, "".concat(receiverBase, "/success"))];
237
+ case 19:
238
+ successLog = _j.sent();
239
+ (0, testing_1.assert)((successLog === null || successLog === void 0 ? void 0 : successLog.responseCode) === 200, "expected responseCode 200, got ".concat(successLog === null || successLog === void 0 ? void 0 : successLog.responseCode), 'success responseCode recorded');
240
+ (0, testing_1.assert)(successIntegrityVerified, 'integrity check failed on success delivery', 'success delivery integrity verified');
241
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 1000)]; // allow any (erroneous) counter update to land before checking
242
+ case 20:
243
+ _j.sent(); // allow any (erroneous) counter update to land before checking
244
+ _e = testing_1.assert;
245
+ return [4 /*yield*/, get_failure_count(sdk)];
246
+ case 21:
247
+ _e.apply(void 0, [(_j.sent()) === initialCount + 3,
248
+ 'deliveryFailureCount changed on successful delivery',
249
+ 'deliveryFailureCount untouched on success']);
250
+ return [4 /*yield*/, sdk.api.webhooks.getSome()];
251
+ case 22:
252
+ configs = _j.sent();
253
+ webhookId = (_h = configs[0]) === null || _h === void 0 ? void 0 : _h.id;
254
+ return [4 /*yield*/, sdk.api.webhooks.updateOne(webhookId, { deliveryFailureCount: 9999 }).catch(function () { })]; // may reject (readonly)
255
+ case 23:
256
+ _j.sent(); // may reject (readonly)
257
+ _f = testing_1.assert;
258
+ return [4 /*yield*/, get_failure_count(sdk)];
259
+ case 24:
260
+ _f.apply(void 0, [(_j.sent()) === initialCount + 3,
261
+ 'customer was able to overwrite deliveryFailureCount',
262
+ 'deliveryFailureCount not customer-settable']);
263
+ return [3 /*break*/, 33];
264
+ case 25:
265
+ // stop deliveries for subsequent tests and shut down the local receiver
266
+ return [4 /*yield*/, sdk.api.webhooks.update({ subscriptionUpdates: { endusers: { create: false, update: false, delete: false } } }).catch(function () { })];
267
+ case 26:
268
+ // stop deliveries for subsequent tests and shut down the local receiver
269
+ _j.sent();
270
+ server.close();
271
+ _i = 0, enduserIds_1 = enduserIds;
272
+ _j.label = 27;
273
+ case 27:
274
+ if (!(_i < enduserIds_1.length)) return [3 /*break*/, 32];
275
+ id = enduserIds_1[_i];
276
+ _j.label = 28;
277
+ case 28:
278
+ _j.trys.push([28, 30, , 31]);
279
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(id)];
280
+ case 29:
281
+ _j.sent();
282
+ return [3 /*break*/, 31];
283
+ case 30:
284
+ _g = _j.sent();
285
+ return [3 /*break*/, 31];
286
+ case 31:
287
+ _i++;
288
+ return [3 /*break*/, 27];
289
+ case 32: return [7 /*endfinally*/];
290
+ case 33: return [2 /*return*/];
291
+ }
292
+ });
293
+ });
294
+ };
295
+ exports.webhook_error_handling_tests = webhook_error_handling_tests;
296
+ // Allow running this test file independently
297
+ if (require.main === module) {
298
+ console.log("\uD83C\uDF10 Using API URL: ".concat(host));
299
+ var sdk_2 = new sdk_1.Session({ host: host });
300
+ var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
301
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
302
+ return __generator(this, function (_a) {
303
+ switch (_a.label) {
304
+ case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
305
+ case 1:
306
+ _a.sent();
307
+ return [4 /*yield*/, (0, exports.webhook_error_handling_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
308
+ case 2:
309
+ _a.sent();
310
+ return [2 /*return*/];
311
+ }
312
+ });
313
+ }); };
314
+ runTests()
315
+ .then(function () {
316
+ console.log("✅ Webhook error handling test suite completed successfully");
317
+ process.exit(0);
318
+ })
319
+ .catch(function (error) {
320
+ console.error("❌ Webhook error handling test suite failed:", error);
321
+ process.exit(1);
322
+ });
323
+ }
324
+ //# sourceMappingURL=webhook_error_handling.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook_error_handling.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/webhook_error_handling.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["../../../src/tests/tests.ts"],"names":[],"mappings":"AAg0EA,eAAO,MAAM,kCAAkC,qBAgJ9C,CAAA;AAED,eAAO,MAAM,mCAAmC,qBA2K/C,CAAA;AAGD,eAAO,MAAM,oBAAoB,qBAoHhC,CAAA;AAED,eAAO,MAAM,+BAA+B,qBAsF3C,CAAA;AAID,eAAO,MAAM,0BAA0B,qBAqCtC,CAAA;AAu1FD,eAAO,MAAM,cAAc,qBAqC1B,CAAA;AAotBD,eAAO,MAAM,0BAA0B,qBAmFtC,CAAA;AAqED,eAAO,MAAM,eAAe,qBAmD3B,CAAA;AAED,eAAO,MAAM,oBAAoB,6BAsBhC,CAAA;AAED,eAAO,MAAM,oCAAoC,qBA4pBhD,CAAA;AAED,eAAO,MAAM,mCAAmC,qBAkE/C,CAAA;AAw7CD,eAAO,MAAM,yBAAyB,qBA0DrC,CAAA;AAED,eAAO,MAAM,kBAAkB,qBAmK9B,CAAA;AAED,eAAO,MAAM,sBAAsB,qBA0BlC,CAAA;AAGD,eAAO,MAAM,mBAAmB,qBAmC/B,CAAA;AAED,eAAO,MAAM,gCAAgC,mCA8C5C,CAAA;AAED,eAAO,MAAM,cAAc,qBAwb1B,CAAA;AAGD,eAAO,MAAM,oBAAoB,uBAuBhC,CAAA;AA4wBD,eAAO,MAAM,4BAA4B,qBAoExC,CAAA;AAED,eAAO,MAAM,+BAA+B,qBA4U3C,CAAA;AAED,eAAO,MAAM,gDAAgD,qBAwC5D,CAAA;AAED,eAAO,MAAM,qBAAqB,qBAwIjC,CAAA"}
1
+ {"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["../../../src/tests/tests.ts"],"names":[],"mappings":"AAi0EA,eAAO,MAAM,kCAAkC,qBAgJ9C,CAAA;AAED,eAAO,MAAM,mCAAmC,qBA2K/C,CAAA;AAGD,eAAO,MAAM,oBAAoB,qBAoHhC,CAAA;AAED,eAAO,MAAM,+BAA+B,qBAsF3C,CAAA;AAID,eAAO,MAAM,0BAA0B,qBAqCtC,CAAA;AAu1FD,eAAO,MAAM,cAAc,qBAqC1B,CAAA;AAotBD,eAAO,MAAM,0BAA0B,qBAmFtC,CAAA;AAqED,eAAO,MAAM,eAAe,qBAmD3B,CAAA;AAED,eAAO,MAAM,oBAAoB,6BAsBhC,CAAA;AAED,eAAO,MAAM,oCAAoC,qBA4pBhD,CAAA;AAED,eAAO,MAAM,mCAAmC,qBAkE/C,CAAA;AAw7CD,eAAO,MAAM,yBAAyB,qBA0DrC,CAAA;AAED,eAAO,MAAM,kBAAkB,qBAmK9B,CAAA;AAED,eAAO,MAAM,sBAAsB,qBA0BlC,CAAA;AAGD,eAAO,MAAM,mBAAmB,qBAmC/B,CAAA;AAED,eAAO,MAAM,gCAAgC,mCA8C5C,CAAA;AAED,eAAO,MAAM,cAAc,qBAwb1B,CAAA;AAGD,eAAO,MAAM,oBAAoB,uBAuBhC,CAAA;AA4wBD,eAAO,MAAM,4BAA4B,qBAoExC,CAAA;AAED,eAAO,MAAM,+BAA+B,qBA4U3C,CAAA;AAED,eAAO,MAAM,gDAAgD,qBAwC5D,CAAA;AAED,eAAO,MAAM,qBAAqB,qBAwIjC,CAAA"}