@tellescope/sdk 1.247.0 → 1.248.0

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 (72) hide show
  1. package/lib/cjs/sdk.d.ts +6 -1
  2. package/lib/cjs/sdk.d.ts.map +1 -1
  3. package/lib/cjs/sdk.js +2 -0
  4. package/lib/cjs/sdk.js.map +1 -1
  5. package/lib/cjs/tests/api_tests/date_string_validation.test.d.ts +6 -0
  6. package/lib/cjs/tests/api_tests/date_string_validation.test.d.ts.map +1 -0
  7. package/lib/cjs/tests/api_tests/date_string_validation.test.js +142 -0
  8. package/lib/cjs/tests/api_tests/date_string_validation.test.js.map +1 -0
  9. package/lib/cjs/tests/api_tests/enduser_session_invalidation.test.d.ts +6 -0
  10. package/lib/cjs/tests/api_tests/enduser_session_invalidation.test.d.ts.map +1 -0
  11. package/lib/cjs/tests/api_tests/enduser_session_invalidation.test.js +243 -0
  12. package/lib/cjs/tests/api_tests/enduser_session_invalidation.test.js.map +1 -0
  13. package/lib/cjs/tests/api_tests/field_redaction.test.d.ts +13 -0
  14. package/lib/cjs/tests/api_tests/field_redaction.test.d.ts.map +1 -0
  15. package/lib/cjs/tests/api_tests/field_redaction.test.js +818 -0
  16. package/lib/cjs/tests/api_tests/field_redaction.test.js.map +1 -0
  17. package/lib/cjs/tests/api_tests/form_submitted_trigger.test.d.ts +6 -0
  18. package/lib/cjs/tests/api_tests/form_submitted_trigger.test.d.ts.map +1 -0
  19. package/lib/cjs/tests/api_tests/form_submitted_trigger.test.js +429 -0
  20. package/lib/cjs/tests/api_tests/form_submitted_trigger.test.js.map +1 -0
  21. package/lib/cjs/tests/api_tests/integrations_redacted.test.d.ts +6 -0
  22. package/lib/cjs/tests/api_tests/integrations_redacted.test.d.ts.map +1 -0
  23. package/lib/cjs/tests/api_tests/integrations_redacted.test.js +273 -0
  24. package/lib/cjs/tests/api_tests/integrations_redacted.test.js.map +1 -0
  25. package/lib/cjs/tests/api_tests/openloop_webhooks.test.d.ts.map +1 -1
  26. package/lib/cjs/tests/api_tests/openloop_webhooks.test.js +108 -24
  27. package/lib/cjs/tests/api_tests/openloop_webhooks.test.js.map +1 -1
  28. package/lib/cjs/tests/tests.d.ts.map +1 -1
  29. package/lib/cjs/tests/tests.js +294 -183
  30. package/lib/cjs/tests/tests.js.map +1 -1
  31. package/lib/esm/sdk.d.ts +6 -1
  32. package/lib/esm/sdk.d.ts.map +1 -1
  33. package/lib/esm/sdk.js +2 -0
  34. package/lib/esm/sdk.js.map +1 -1
  35. package/lib/esm/tests/api_tests/date_string_validation.test.d.ts +6 -0
  36. package/lib/esm/tests/api_tests/date_string_validation.test.d.ts.map +1 -0
  37. package/lib/esm/tests/api_tests/date_string_validation.test.js +138 -0
  38. package/lib/esm/tests/api_tests/date_string_validation.test.js.map +1 -0
  39. package/lib/esm/tests/api_tests/enduser_session_invalidation.test.d.ts +6 -0
  40. package/lib/esm/tests/api_tests/enduser_session_invalidation.test.d.ts.map +1 -0
  41. package/lib/esm/tests/api_tests/enduser_session_invalidation.test.js +239 -0
  42. package/lib/esm/tests/api_tests/enduser_session_invalidation.test.js.map +1 -0
  43. package/lib/esm/tests/api_tests/field_redaction.test.d.ts +13 -0
  44. package/lib/esm/tests/api_tests/field_redaction.test.d.ts.map +1 -0
  45. package/lib/esm/tests/api_tests/field_redaction.test.js +814 -0
  46. package/lib/esm/tests/api_tests/field_redaction.test.js.map +1 -0
  47. package/lib/esm/tests/api_tests/form_submitted_trigger.test.d.ts +6 -0
  48. package/lib/esm/tests/api_tests/form_submitted_trigger.test.d.ts.map +1 -0
  49. package/lib/esm/tests/api_tests/form_submitted_trigger.test.js +425 -0
  50. package/lib/esm/tests/api_tests/form_submitted_trigger.test.js.map +1 -0
  51. package/lib/esm/tests/api_tests/integrations_redacted.test.d.ts +6 -0
  52. package/lib/esm/tests/api_tests/integrations_redacted.test.d.ts.map +1 -0
  53. package/lib/esm/tests/api_tests/integrations_redacted.test.js +269 -0
  54. package/lib/esm/tests/api_tests/integrations_redacted.test.js.map +1 -0
  55. package/lib/esm/tests/api_tests/openloop_webhooks.test.d.ts.map +1 -1
  56. package/lib/esm/tests/api_tests/openloop_webhooks.test.js +108 -24
  57. package/lib/esm/tests/api_tests/openloop_webhooks.test.js.map +1 -1
  58. package/lib/esm/tests/tests.d.ts.map +1 -1
  59. package/lib/esm/tests/tests.js +294 -183
  60. package/lib/esm/tests/tests.js.map +1 -1
  61. package/lib/tsconfig.tsbuildinfo +1 -1
  62. package/package.json +10 -10
  63. package/src/sdk.ts +10 -0
  64. package/src/tests/api_tests/date_string_validation.test.ts +107 -0
  65. package/src/tests/api_tests/enduser_session_invalidation.test.ts +138 -0
  66. package/src/tests/api_tests/field_redaction.test.ts +669 -0
  67. package/src/tests/api_tests/form_started_trigger.test.ts +1 -1
  68. package/src/tests/api_tests/form_submitted_trigger.test.ts +281 -0
  69. package/src/tests/api_tests/integrations_redacted.test.ts +245 -0
  70. package/src/tests/api_tests/openloop_webhooks.test.ts +64 -0
  71. package/src/tests/tests.ts +86 -6
  72. package/test_generated.pdf +0 -0
@@ -0,0 +1,269 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ 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;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ require('source-map-support').install();
38
+ import { Session } from "../../sdk";
39
+ import { async_test, log_header, } from "@tellescope/testing";
40
+ import { setup_tests } from "../setup";
41
+ import { INTEGRATION_SENSITIVE_FIELDS } from "@tellescope/constants";
42
+ var host = process.env.API_URL || 'http://localhost:8080';
43
+ var hasNoSensitiveFields = function (integration) {
44
+ for (var _i = 0, INTEGRATION_SENSITIVE_FIELDS_1 = INTEGRATION_SENSITIVE_FIELDS; _i < INTEGRATION_SENSITIVE_FIELDS_1.length; _i++) {
45
+ var field = INTEGRATION_SENSITIVE_FIELDS_1[_i];
46
+ if (field in integration)
47
+ return false;
48
+ }
49
+ return true;
50
+ };
51
+ export var integrations_redacted_tests = function (_a) {
52
+ var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
53
+ return __awaiter(void 0, void 0, void 0, function () {
54
+ var integrationId, sensitiveIntegrationId, created, sensitiveIntegration, error_1, error_2;
55
+ return __generator(this, function (_b) {
56
+ switch (_b.label) {
57
+ case 0:
58
+ log_header("Integrations Redacted Endpoints Tests");
59
+ integrationId = '';
60
+ sensitiveIntegrationId = '';
61
+ _b.label = 1;
62
+ case 1:
63
+ _b.trys.push([1, , 26, 35]);
64
+ return [4 /*yield*/, sdk.api.integrations.createOne({
65
+ title: 'Test Redacted Integration',
66
+ authentication: { type: 'oauth2', info: { access_token: 'test-access-token', refresh_token: 'test-refresh-token', scope: '', token_type: 'Bearer', expiry_date: new Date().getTime() } },
67
+ webhooksSecret: 'super-secret-webhook',
68
+ emailDisabled: false,
69
+ })];
70
+ case 2:
71
+ created = _b.sent();
72
+ integrationId = created.id;
73
+ // load_redacted as creator — verify integration is returned, no sensitive fields present
74
+ return [4 /*yield*/, async_test("load_redacted as creator returns redacted integrations", function () { return sdk.api.integrations.load_redacted({}); }, { onResult: function (r) {
75
+ var found = r.integrations.find(function (i) { return i.id === integrationId; });
76
+ return !!found && hasNoSensitiveFields(found) && found.title === 'Test Redacted Integration';
77
+ } })
78
+ // load_redacted as non-creator — verify same integration visible and redacted
79
+ ];
80
+ case 3:
81
+ // load_redacted as creator — verify integration is returned, no sensitive fields present
82
+ _b.sent();
83
+ // load_redacted as non-creator — verify same integration visible and redacted
84
+ return [4 /*yield*/, async_test("load_redacted as non-creator returns redacted integrations (bypasses CREATOR_ONLY)", function () { return sdkNonAdmin.api.integrations.load_redacted({}); }, { onResult: function (r) {
85
+ var found = r.integrations.find(function (i) { return i.id === integrationId; });
86
+ return !!found && hasNoSensitiveFields(found) && found.title === 'Test Redacted Integration';
87
+ } })
88
+ // Standard load endpoints enforce CREATOR_ONLY — creator gets full object, non-creator gets nothing
89
+ ];
90
+ case 4:
91
+ // load_redacted as non-creator — verify same integration visible and redacted
92
+ _b.sent();
93
+ // Standard load endpoints enforce CREATOR_ONLY — creator gets full object, non-creator gets nothing
94
+ return [4 /*yield*/, async_test("getOne as creator returns full integration including sensitive fields", function () { return sdk.api.integrations.getOne(integrationId); }, { onResult: function (i) { return !!i && 'authentication' in i && 'webhooksSecret' in i; } })];
95
+ case 5:
96
+ // Standard load endpoints enforce CREATOR_ONLY — creator gets full object, non-creator gets nothing
97
+ _b.sent();
98
+ return [4 /*yield*/, async_test("getOne as non-creator returns 404 (CREATOR_ONLY access control)", function () { return sdkNonAdmin.api.integrations.getOne(integrationId); }, { shouldError: true, onError: function () { return true; } })];
99
+ case 6:
100
+ _b.sent();
101
+ return [4 /*yield*/, async_test("getSome as non-creator returns empty list (CREATOR_ONLY access control)", function () { return sdkNonAdmin.api.integrations.getSome(); }, { onResult: function (r) { return Array.isArray(r) && r.find(function (i) { return i.id === integrationId; }) === undefined; } })
102
+ // update_settings as creator — update a non-sensitive field
103
+ ];
104
+ case 7:
105
+ _b.sent();
106
+ // update_settings as creator — update a non-sensitive field
107
+ return [4 /*yield*/, async_test("update_settings as creator updates non-sensitive field", function () { return sdk.api.integrations.update_settings({ id: integrationId, updates: { emailDisabled: true } }); }, { onResult: function (r) {
108
+ return !!r.integration && r.integration.emailDisabled === true && hasNoSensitiveFields(r.integration);
109
+ } })
110
+ // update_settings as non-creator — update another field
111
+ ];
112
+ case 8:
113
+ // update_settings as creator — update a non-sensitive field
114
+ _b.sent();
115
+ // update_settings as non-creator — update another field
116
+ return [4 /*yield*/, async_test("update_settings as non-creator updates non-sensitive field", function () { return sdkNonAdmin.api.integrations.update_settings({ id: integrationId, updates: { disableEnduserAutoSync: true } }); }, { onResult: function (r) {
117
+ return !!r.integration && r.integration.disableEnduserAutoSync === true && hasNoSensitiveFields(r.integration);
118
+ } })
119
+ // update_settings rejects sensitive fields
120
+ ];
121
+ case 9:
122
+ // update_settings as non-creator — update another field
123
+ _b.sent();
124
+ // update_settings rejects sensitive fields
125
+ return [4 /*yield*/, async_test("update_settings rejects authentication update", function () { return sdkNonAdmin.api.integrations.update_settings({ id: integrationId, updates: { authentication: { type: 'apiKey', info: { api_key: 'hacked' } } } }); }, { shouldError: true, onError: function () { return true; } })];
126
+ case 10:
127
+ // update_settings rejects sensitive fields
128
+ _b.sent();
129
+ return [4 /*yield*/, async_test("update_settings rejects webhooksSecret update", function () { return sdkNonAdmin.api.integrations.update_settings({ id: integrationId, updates: { webhooksSecret: 'hacked' } }); }, { shouldError: true, onError: function () { return true; } })];
130
+ case 11:
131
+ _b.sent();
132
+ return [4 /*yield*/, async_test("update_settings rejects fhirClientSecret update", function () { return sdkNonAdmin.api.integrations.update_settings({ id: integrationId, updates: { fhirClientSecret: 'hacked' } }); }, { shouldError: true, onError: function () { return true; } })
133
+ // Group 1: Dot-notation bypass tests (validates the allowlist fix)
134
+ ];
135
+ case 12:
136
+ _b.sent();
137
+ // Group 1: Dot-notation bypass tests (validates the allowlist fix)
138
+ return [4 /*yield*/, async_test("update_settings rejects dot-notation authentication.info.api_key update", function () { return sdk.api.integrations.update_settings({ id: integrationId, updates: { "authentication.info.api_key": "hacked" } }); }, { shouldError: true, onError: function () { return true; } })];
139
+ case 13:
140
+ // Group 1: Dot-notation bypass tests (validates the allowlist fix)
141
+ _b.sent();
142
+ return [4 /*yield*/, async_test("update_settings rejects dot-notation authentication.type update", function () { return sdk.api.integrations.update_settings({ id: integrationId, updates: { "authentication.type": "hacked" } }); }, { shouldError: true, onError: function () { return true; } })
143
+ // Group 2: Remaining sensitive field rejections
144
+ ];
145
+ case 14:
146
+ _b.sent();
147
+ // Group 2: Remaining sensitive field rejections
148
+ return [4 /*yield*/, async_test("update_settings rejects fhirClientId update", function () { return sdk.api.integrations.update_settings({ id: integrationId, updates: { fhirClientId: 'hacked' } }); }, { shouldError: true, onError: function () { return true; } })];
149
+ case 15:
150
+ // Group 2: Remaining sensitive field rejections
151
+ _b.sent();
152
+ return [4 /*yield*/, async_test("update_settings rejects fhirAccessToken update", function () { return sdk.api.integrations.update_settings({ id: integrationId, updates: { fhirAccessToken: 'hacked' } }); }, { shouldError: true, onError: function () { return true; } })
153
+ // Group 3: Non-allowlisted field rejections
154
+ ];
155
+ case 16:
156
+ _b.sent();
157
+ // Group 3: Non-allowlisted field rejections
158
+ return [4 /*yield*/, async_test("update_settings rejects title update (not in allowlist)", function () { return sdk.api.integrations.update_settings({ id: integrationId, updates: { title: 'hacked' } }); }, { shouldError: true, onError: function () { return true; } })];
159
+ case 17:
160
+ // Group 3: Non-allowlisted field rejections
161
+ _b.sent();
162
+ return [4 /*yield*/, async_test("update_settings rejects environment update (not in allowlist)", function () { return sdk.api.integrations.update_settings({ id: integrationId, updates: { environment: 'hacked' } }); }, { shouldError: true, onError: function () { return true; } })];
163
+ case 18:
164
+ _b.sent();
165
+ return [4 /*yield*/, async_test("update_settings rejects unknown field update", function () { return sdk.api.integrations.update_settings({ id: integrationId, updates: { unknownField: 'hacked' } }); }, { shouldError: true, onError: function () { return true; } })
166
+ // Group 4: Verify additional allowlisted fields can be updated
167
+ ];
168
+ case 19:
169
+ _b.sent();
170
+ // Group 4: Verify additional allowlisted fields can be updated
171
+ return [4 /*yield*/, async_test("update_settings allows syncUnrecognizedSenders update", function () { return sdk.api.integrations.update_settings({ id: integrationId, updates: { syncUnrecognizedSenders: true } }); }, { onResult: function (r) { return !!r.integration && r.integration.syncUnrecognizedSenders === true && hasNoSensitiveFields(r.integration); } })];
172
+ case 20:
173
+ // Group 4: Verify additional allowlisted fields can be updated
174
+ _b.sent();
175
+ return [4 /*yield*/, async_test("update_settings allows pushCalendarDetails update", function () { return sdk.api.integrations.update_settings({ id: integrationId, updates: { pushCalendarDetails: true } }); }, { onResult: function (r) { return !!r.integration && r.integration.pushCalendarDetails === true && hasNoSensitiveFields(r.integration); } })
176
+ // Group 5: Explicit per-field redaction verification
177
+ // Note: fhirClientId/fhirClientSecret/fhirAccessToken are set server-side via OAuth flows only,
178
+ // so we test redaction of the fields that can be set via createOne (authentication, webhooksSecret)
179
+ ];
180
+ case 21:
181
+ _b.sent();
182
+ return [4 /*yield*/, sdk.api.integrations.createOne({
183
+ title: 'Test All Sensitive Fields',
184
+ authentication: { type: 'oauth2', info: { access_token: 'secret-access-token', refresh_token: 'secret-refresh-token', scope: '', token_type: 'Bearer', expiry_date: new Date().getTime() } },
185
+ webhooksSecret: 'super-secret-webhook-456',
186
+ emailDisabled: true,
187
+ })];
188
+ case 22:
189
+ sensitiveIntegration = _b.sent();
190
+ sensitiveIntegrationId = sensitiveIntegration.id;
191
+ return [4 /*yield*/, async_test("load_redacted omits authentication field individually", function () { return sdk.api.integrations.load_redacted({}); }, { onResult: function (r) {
192
+ var found = r.integrations.find(function (i) { return i.id === sensitiveIntegrationId; });
193
+ return !!found && !('authentication' in found);
194
+ } })];
195
+ case 23:
196
+ _b.sent();
197
+ return [4 /*yield*/, async_test("load_redacted omits webhooksSecret field individually", function () { return sdk.api.integrations.load_redacted({}); }, { onResult: function (r) {
198
+ var found = r.integrations.find(function (i) { return i.id === sensitiveIntegrationId; });
199
+ return !!found && !('webhooksSecret' in found);
200
+ } })];
201
+ case 24:
202
+ _b.sent();
203
+ return [4 /*yield*/, async_test("load_redacted still returns non-sensitive fields", function () { return sdk.api.integrations.load_redacted({}); }, { onResult: function (r) {
204
+ var found = r.integrations.find(function (i) { return i.id === sensitiveIntegrationId; });
205
+ return !!found && found.emailDisabled === true && found.title === 'Test All Sensitive Fields';
206
+ } })];
207
+ case 25:
208
+ _b.sent();
209
+ return [3 /*break*/, 35];
210
+ case 26:
211
+ if (!integrationId) return [3 /*break*/, 30];
212
+ _b.label = 27;
213
+ case 27:
214
+ _b.trys.push([27, 29, , 30]);
215
+ return [4 /*yield*/, sdk.api.integrations.deleteOne(integrationId)];
216
+ case 28:
217
+ _b.sent();
218
+ return [3 /*break*/, 30];
219
+ case 29:
220
+ error_1 = _b.sent();
221
+ console.error('Cleanup error:', error_1);
222
+ return [3 /*break*/, 30];
223
+ case 30:
224
+ if (!sensitiveIntegrationId) return [3 /*break*/, 34];
225
+ _b.label = 31;
226
+ case 31:
227
+ _b.trys.push([31, 33, , 34]);
228
+ return [4 /*yield*/, sdk.api.integrations.deleteOne(sensitiveIntegrationId)];
229
+ case 32:
230
+ _b.sent();
231
+ return [3 /*break*/, 34];
232
+ case 33:
233
+ error_2 = _b.sent();
234
+ console.error('Cleanup error (sensitive integration):', error_2);
235
+ return [3 /*break*/, 34];
236
+ case 34: return [7 /*endfinally*/];
237
+ case 35: return [2 /*return*/];
238
+ }
239
+ });
240
+ });
241
+ };
242
+ if (require.main === module) {
243
+ console.log("Using API URL: ".concat(host));
244
+ var sdk_1 = new Session({ host: host });
245
+ var sdkNonAdmin_1 = new Session({ host: host });
246
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
247
+ return __generator(this, function (_a) {
248
+ switch (_a.label) {
249
+ case 0: return [4 /*yield*/, setup_tests(sdk_1, sdkNonAdmin_1)];
250
+ case 1:
251
+ _a.sent();
252
+ return [4 /*yield*/, integrations_redacted_tests({ sdk: sdk_1, sdkNonAdmin: sdkNonAdmin_1 })];
253
+ case 2:
254
+ _a.sent();
255
+ return [2 /*return*/];
256
+ }
257
+ });
258
+ }); };
259
+ runTests()
260
+ .then(function () {
261
+ console.log("Integrations redacted test suite completed successfully");
262
+ process.exit(0);
263
+ })
264
+ .catch(function (error) {
265
+ console.error("Integrations redacted test suite failed:", error);
266
+ process.exit(1);
267
+ });
268
+ }
269
+ //# sourceMappingURL=integrations_redacted.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations_redacted.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/integrations_redacted.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"openloop_webhooks.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/openloop_webhooks.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA2EnC,eAAO,MAAM,uBAAuB;SAAuC,OAAO;iBAAe,OAAO;mBAkjBvG,CAAA"}
1
+ {"version":3,"file":"openloop_webhooks.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/openloop_webhooks.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA2EnC,eAAO,MAAM,uBAAuB;SAAuC,OAAO;iBAAe,OAAO;mBAknBvG,CAAA"}
@@ -113,7 +113,7 @@ export var openloop_webhooks_tests = function (_a) {
113
113
  enduser2 = _b.sent();
114
114
  _b.label = 3;
115
115
  case 3:
116
- _b.trys.push([3, , 25, 28]);
116
+ _b.trys.push([3, , 28, 31]);
117
117
  // ===== SECTION A: V1 Validation =====
118
118
  log_header("V1 Validation");
119
119
  return [4 /*yield*/, async_test('V1: missing patientID returns 400', function () { return __awaiter(void 0, void 0, void 0, function () {
@@ -185,6 +185,33 @@ export var openloop_webhooks_tests = function (_a) {
185
185
  });
186
186
  }); }, { onResult: function (r) { return r === true; } })];
187
187
  case 6:
188
+ _b.sent();
189
+ return [4 /*yield*/, async_test('V1: order_confirmation maps program_code to protocol field', function () { return __awaiter(void 0, void 0, void 0, function () {
190
+ var orderNum, res, orders;
191
+ return __generator(this, function (_a) {
192
+ switch (_a.label) {
193
+ case 0:
194
+ orderNum = "ol-conf-protocol-".concat(uid());
195
+ return [4 /*yield*/, postV1(makeV1Confirmation({
196
+ patientID: healthieId1,
197
+ orderNumber: orderNum,
198
+ program_code: 'Weight-Loss',
199
+ }))];
200
+ case 1:
201
+ res = _a.sent();
202
+ assert(res.status === 200, "Expected 200, got ".concat(res.status));
203
+ return [4 /*yield*/, sdk.api.enduser_orders.getSome({
204
+ filter: { source: 'OpenLoop', externalId: orderNum }
205
+ })];
206
+ case 2:
207
+ orders = _a.sent();
208
+ assert(orders.length === 1, "Expected 1 order, got ".concat(orders.length));
209
+ assert(orders[0].protocol === 'Weight-Loss', "protocol mismatch: ".concat(orders[0].protocol));
210
+ return [2 /*return*/, true];
211
+ }
212
+ });
213
+ }); }, { onResult: function (r) { return r === true; } })];
214
+ case 7:
188
215
  _b.sent();
189
216
  return [4 /*yield*/, async_test('V1: order_confirmation idempotency - same order not duplicated', function () { return __awaiter(void 0, void 0, void 0, function () {
190
217
  var res, orders;
@@ -212,7 +239,7 @@ export var openloop_webhooks_tests = function (_a) {
212
239
  }
213
240
  });
214
241
  }); }, { onResult: function (r) { return r === true; } })];
215
- case 7:
242
+ case 8:
216
243
  _b.sent();
217
244
  return [4 /*yield*/, async_test('V1: order_confirmation without sku_med falls back to pharmacy name', function () { return __awaiter(void 0, void 0, void 0, function () {
218
245
  var orderNum, res, orders;
@@ -242,7 +269,7 @@ export var openloop_webhooks_tests = function (_a) {
242
269
  }); }, { onResult: function (r) { return r === true; } })
243
270
  // ===== SECTION C: V1 order_shipped =====
244
271
  ];
245
- case 8:
272
+ case 9:
246
273
  _b.sent();
247
274
  // ===== SECTION C: V1 order_shipped =====
248
275
  log_header("V1 order_shipped");
@@ -285,7 +312,7 @@ export var openloop_webhooks_tests = function (_a) {
285
312
  }
286
313
  });
287
314
  }); }, { onResult: function (r) { return r === true; } })];
288
- case 9:
315
+ case 10:
289
316
  _b.sent();
290
317
  return [4 /*yield*/, async_test('V1: order_shipped updates title and sku when provided', function () { return __awaiter(void 0, void 0, void 0, function () {
291
318
  var res, orders, order;
@@ -315,7 +342,7 @@ export var openloop_webhooks_tests = function (_a) {
315
342
  }
316
343
  });
317
344
  }); }, { onResult: function (r) { return r === true; } })];
318
- case 10:
345
+ case 11:
319
346
  _b.sent();
320
347
  return [4 /*yield*/, async_test('V1: order_shipped creates new order if none exists', function () { return __awaiter(void 0, void 0, void 0, function () {
321
348
  var newOrderNum, res, orders, order;
@@ -351,7 +378,7 @@ export var openloop_webhooks_tests = function (_a) {
351
378
  }
352
379
  });
353
380
  }); }, { onResult: function (r) { return r === true; } })];
354
- case 11:
381
+ case 12:
355
382
  _b.sent();
356
383
  return [4 /*yield*/, async_test('V1: order_shipped can re-ship with updated tracking', function () { return __awaiter(void 0, void 0, void 0, function () {
357
384
  var reshipOrderNum, res, orders;
@@ -394,10 +421,40 @@ export var openloop_webhooks_tests = function (_a) {
394
421
  return [2 /*return*/, true];
395
422
  }
396
423
  });
424
+ }); }, { onResult: function (r) { return r === true; } })];
425
+ case 13:
426
+ _b.sent();
427
+ return [4 /*yield*/, async_test('V1: order_shipped maps program_code to protocol field', function () { return __awaiter(void 0, void 0, void 0, function () {
428
+ var orderNum, res, orders;
429
+ return __generator(this, function (_a) {
430
+ switch (_a.label) {
431
+ case 0:
432
+ orderNum = "ol-ship-protocol-".concat(uid());
433
+ return [4 /*yield*/, postV1(makeV1Confirmation({ patientID: healthieId1, orderNumber: orderNum }))];
434
+ case 1:
435
+ _a.sent();
436
+ return [4 /*yield*/, postV1(makeV1Shipped({
437
+ patientID: healthieId1,
438
+ orderNumber: orderNum,
439
+ program_code: 'Diabetes',
440
+ }))];
441
+ case 2:
442
+ res = _a.sent();
443
+ assert(res.status === 200, "Expected 200, got ".concat(res.status));
444
+ return [4 /*yield*/, sdk.api.enduser_orders.getSome({
445
+ filter: { source: 'OpenLoop', externalId: orderNum }
446
+ })];
447
+ case 3:
448
+ orders = _a.sent();
449
+ assert(orders.length === 1, "Expected 1 order, got ".concat(orders.length));
450
+ assert(orders[0].protocol === 'Diabetes', "protocol mismatch: ".concat(orders[0].protocol));
451
+ return [2 /*return*/, true];
452
+ }
453
+ });
397
454
  }); }, { onResult: function (r) { return r === true; } })
398
455
  // ===== SECTION D: V1 enduserId Isolation =====
399
456
  ];
400
- case 12:
457
+ case 14:
401
458
  _b.sent();
402
459
  // ===== SECTION D: V1 enduserId Isolation =====
403
460
  log_header("V1 enduserId Isolation");
@@ -436,7 +493,7 @@ export var openloop_webhooks_tests = function (_a) {
436
493
  }); }, { onResult: function (r) { return r === true; } })
437
494
  // ===== SECTION E: V2 Validation =====
438
495
  ];
439
- case 13:
496
+ case 15:
440
497
  _b.sent();
441
498
  // ===== SECTION E: V2 Validation =====
442
499
  log_header("V2 Validation");
@@ -454,7 +511,7 @@ export var openloop_webhooks_tests = function (_a) {
454
511
  }
455
512
  });
456
513
  }); }, { onResult: function (s) { return s === 400; } })];
457
- case 14:
514
+ case 16:
458
515
  _b.sent();
459
516
  return [4 /*yield*/, async_test('V2: invalid eventType returns 400', function () { return __awaiter(void 0, void 0, void 0, function () {
460
517
  var res;
@@ -467,7 +524,7 @@ export var openloop_webhooks_tests = function (_a) {
467
524
  }
468
525
  });
469
526
  }); }, { onResult: function (s) { return s === 400; } })];
470
- case 15:
527
+ case 17:
471
528
  _b.sent();
472
529
  return [4 /*yield*/, async_test('V2: unknown patient returns 404', function () { return __awaiter(void 0, void 0, void 0, function () {
473
530
  var res;
@@ -482,7 +539,7 @@ export var openloop_webhooks_tests = function (_a) {
482
539
  }); }, { onResult: function (s) { return s === 404; } })
483
540
  // ===== SECTION F: V2 Order Lifecycle =====
484
541
  ];
485
- case 16:
542
+ case 18:
486
543
  _b.sent();
487
544
  // ===== SECTION F: V2 Order Lifecycle =====
488
545
  log_header("V2 Order Lifecycle");
@@ -517,7 +574,34 @@ export var openloop_webhooks_tests = function (_a) {
517
574
  }
518
575
  });
519
576
  }); }, { onResult: function (r) { return r === true; } })];
520
- case 17:
577
+ case 19:
578
+ _b.sent();
579
+ return [4 /*yield*/, async_test('V2: prescription-created maps program_code to protocol field', function () { return __awaiter(void 0, void 0, void 0, function () {
580
+ var orderNum, res, orders;
581
+ return __generator(this, function (_a) {
582
+ switch (_a.label) {
583
+ case 0:
584
+ orderNum = "v2-protocol-".concat(uid());
585
+ return [4 /*yield*/, postV2(makeV2Payload('prescription-created', {
586
+ id: orderNum,
587
+ patientId: healthieId1,
588
+ program_code: 'GLP-1',
589
+ }))];
590
+ case 1:
591
+ res = _a.sent();
592
+ assert(res.status === 200, "Expected 200, got ".concat(res.status));
593
+ return [4 /*yield*/, sdk.api.enduser_orders.getSome({
594
+ filter: { source: 'OpenLoop', externalId: orderNum }
595
+ })];
596
+ case 2:
597
+ orders = _a.sent();
598
+ assert(orders.length === 1, "Expected 1 order, got ".concat(orders.length));
599
+ assert(orders[0].protocol === 'GLP-1', "protocol mismatch: ".concat(orders[0].protocol));
600
+ return [2 /*return*/, true];
601
+ }
602
+ });
603
+ }); }, { onResult: function (r) { return r === true; } })];
604
+ case 20:
521
605
  _b.sent();
522
606
  return [4 /*yield*/, async_test('V2: prescription-shipped updates with carrier and tracking', function () { return __awaiter(void 0, void 0, void 0, function () {
523
607
  var res, orders, order;
@@ -550,7 +634,7 @@ export var openloop_webhooks_tests = function (_a) {
550
634
  }
551
635
  });
552
636
  }); }, { onResult: function (r) { return r === true; } })];
553
- case 18:
637
+ case 21:
554
638
  _b.sent();
555
639
  v2CancelId_1 = "v2-cancel-".concat(uid());
556
640
  return [4 /*yield*/, async_test('V2: prescription-cancelled sets cancelledDate and reason', function () { return __awaiter(void 0, void 0, void 0, function () {
@@ -591,7 +675,7 @@ export var openloop_webhooks_tests = function (_a) {
591
675
  }
592
676
  });
593
677
  }); }, { onResult: function (r) { return r === true; } })];
594
- case 19:
678
+ case 22:
595
679
  _b.sent();
596
680
  v2RefundId_1 = "v2-refund-".concat(uid());
597
681
  return [4 /*yield*/, async_test('V2: prescription-refunded sets status', function () { return __awaiter(void 0, void 0, void 0, function () {
@@ -625,7 +709,7 @@ export var openloop_webhooks_tests = function (_a) {
625
709
  }); }, { onResult: function (r) { return r === true; } })
626
710
  // ===== SECTION G: V2 Idempotency & Isolation =====
627
711
  ];
628
- case 20:
712
+ case 23:
629
713
  _b.sent();
630
714
  // ===== SECTION G: V2 Idempotency & Isolation =====
631
715
  log_header("V2 Idempotency & Isolation");
@@ -657,7 +741,7 @@ export var openloop_webhooks_tests = function (_a) {
657
741
  }
658
742
  });
659
743
  }); }, { onResult: function (r) { return r === true; } })];
660
- case 21:
744
+ case 24:
661
745
  _b.sent();
662
746
  return [4 /*yield*/, async_test('V2: same id for different patients creates separate orders', function () { return __awaiter(void 0, void 0, void 0, function () {
663
747
  var sharedV2Id, res1, res2, orders, enduserIds, expected;
@@ -694,7 +778,7 @@ export var openloop_webhooks_tests = function (_a) {
694
778
  }); }, { onResult: function (r) { return r === true; } })
695
779
  // ===== SECTION H: V2 Full Lifecycle =====
696
780
  ];
697
- case 22:
781
+ case 25:
698
782
  _b.sent();
699
783
  // ===== SECTION H: V2 Full Lifecycle =====
700
784
  log_header("V2 Full Lifecycle");
@@ -738,7 +822,7 @@ export var openloop_webhooks_tests = function (_a) {
738
822
  }); }, { onResult: function (r) { return r === true; } })
739
823
  // ===== SECTION I: V2 Undefined Field Handling =====
740
824
  ];
741
- case 23:
825
+ case 26:
742
826
  _b.sent();
743
827
  // ===== SECTION I: V2 Undefined Field Handling =====
744
828
  log_header("V2 Undefined Field Handling");
@@ -782,18 +866,18 @@ export var openloop_webhooks_tests = function (_a) {
782
866
  }
783
867
  });
784
868
  }); }, { onResult: function (r) { return r === true; } })];
785
- case 24:
869
+ case 27:
786
870
  _b.sent();
787
871
  console.log("All OpenLoop webhook tests passed!");
788
- return [3 /*break*/, 28];
789
- case 25: return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser1.id).catch(console.error)];
790
- case 26:
872
+ return [3 /*break*/, 31];
873
+ case 28: return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser1.id).catch(console.error)];
874
+ case 29:
791
875
  _b.sent();
792
876
  return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser2.id).catch(console.error)];
793
- case 27:
877
+ case 30:
794
878
  _b.sent();
795
879
  return [7 /*endfinally*/];
796
- case 28: return [2 /*return*/];
880
+ case 31: return [2 /*return*/];
797
881
  }
798
882
  });
799
883
  });