@tellescope/sdk 1.247.0 → 1.249.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 (126) hide show
  1. package/.env +3 -0
  2. package/lib/cjs/sdk.d.ts +7 -1
  3. package/lib/cjs/sdk.d.ts.map +1 -1
  4. package/lib/cjs/sdk.js +3 -0
  5. package/lib/cjs/sdk.js.map +1 -1
  6. package/lib/cjs/tests/api_tests/chats_analytics.test.d.ts +6 -0
  7. package/lib/cjs/tests/api_tests/chats_analytics.test.d.ts.map +1 -0
  8. package/lib/cjs/tests/api_tests/chats_analytics.test.js +256 -0
  9. package/lib/cjs/tests/api_tests/chats_analytics.test.js.map +1 -0
  10. package/lib/cjs/tests/api_tests/cross_org_api_key.test.d.ts +6 -0
  11. package/lib/cjs/tests/api_tests/cross_org_api_key.test.d.ts.map +1 -0
  12. package/lib/cjs/tests/api_tests/cross_org_api_key.test.js +748 -0
  13. package/lib/cjs/tests/api_tests/cross_org_api_key.test.js.map +1 -0
  14. package/lib/cjs/tests/api_tests/date_string_validation.test.d.ts +6 -0
  15. package/lib/cjs/tests/api_tests/date_string_validation.test.d.ts.map +1 -0
  16. package/lib/cjs/tests/api_tests/date_string_validation.test.js +142 -0
  17. package/lib/cjs/tests/api_tests/date_string_validation.test.js.map +1 -0
  18. package/lib/cjs/tests/api_tests/enduser_session_invalidation.test.d.ts +6 -0
  19. package/lib/cjs/tests/api_tests/enduser_session_invalidation.test.d.ts.map +1 -0
  20. package/lib/cjs/tests/api_tests/enduser_session_invalidation.test.js +667 -0
  21. package/lib/cjs/tests/api_tests/enduser_session_invalidation.test.js.map +1 -0
  22. package/lib/cjs/tests/api_tests/eom_billing_codes.test.d.ts +6 -0
  23. package/lib/cjs/tests/api_tests/eom_billing_codes.test.d.ts.map +1 -0
  24. package/lib/cjs/tests/api_tests/eom_billing_codes.test.js +162 -0
  25. package/lib/cjs/tests/api_tests/eom_billing_codes.test.js.map +1 -0
  26. package/lib/cjs/tests/api_tests/eom_procedure_codes.test.d.ts +6 -0
  27. package/lib/cjs/tests/api_tests/eom_procedure_codes.test.d.ts.map +1 -0
  28. package/lib/cjs/tests/api_tests/eom_procedure_codes.test.js +339 -0
  29. package/lib/cjs/tests/api_tests/eom_procedure_codes.test.js.map +1 -0
  30. package/lib/cjs/tests/api_tests/field_redaction.test.d.ts +13 -0
  31. package/lib/cjs/tests/api_tests/field_redaction.test.d.ts.map +1 -0
  32. package/lib/cjs/tests/api_tests/field_redaction.test.js +818 -0
  33. package/lib/cjs/tests/api_tests/field_redaction.test.js.map +1 -0
  34. package/lib/cjs/tests/api_tests/form_submitted_trigger.test.d.ts +6 -0
  35. package/lib/cjs/tests/api_tests/form_submitted_trigger.test.d.ts.map +1 -0
  36. package/lib/cjs/tests/api_tests/form_submitted_trigger.test.js +429 -0
  37. package/lib/cjs/tests/api_tests/form_submitted_trigger.test.js.map +1 -0
  38. package/lib/cjs/tests/api_tests/integrations_redacted.test.d.ts +6 -0
  39. package/lib/cjs/tests/api_tests/integrations_redacted.test.d.ts.map +1 -0
  40. package/lib/cjs/tests/api_tests/integrations_redacted.test.js +273 -0
  41. package/lib/cjs/tests/api_tests/integrations_redacted.test.js.map +1 -0
  42. package/lib/cjs/tests/api_tests/managed_content_file_access.test.d.ts +13 -0
  43. package/lib/cjs/tests/api_tests/managed_content_file_access.test.d.ts.map +1 -0
  44. package/lib/cjs/tests/api_tests/managed_content_file_access.test.js +385 -0
  45. package/lib/cjs/tests/api_tests/managed_content_file_access.test.js.map +1 -0
  46. package/lib/cjs/tests/api_tests/openloop_webhooks.test.d.ts.map +1 -1
  47. package/lib/cjs/tests/api_tests/openloop_webhooks.test.js +108 -24
  48. package/lib/cjs/tests/api_tests/openloop_webhooks.test.js.map +1 -1
  49. package/lib/cjs/tests/api_tests/organization_settings_duplicates.test.d.ts.map +1 -1
  50. package/lib/cjs/tests/api_tests/organization_settings_duplicates.test.js +25 -2
  51. package/lib/cjs/tests/api_tests/organization_settings_duplicates.test.js.map +1 -1
  52. package/lib/cjs/tests/tests.d.ts.map +1 -1
  53. package/lib/cjs/tests/tests.js +310 -183
  54. package/lib/cjs/tests/tests.js.map +1 -1
  55. package/lib/esm/sdk.d.ts +9 -3
  56. package/lib/esm/sdk.d.ts.map +1 -1
  57. package/lib/esm/sdk.js +3 -0
  58. package/lib/esm/sdk.js.map +1 -1
  59. package/lib/esm/session.d.ts +1 -0
  60. package/lib/esm/session.d.ts.map +1 -1
  61. package/lib/esm/tests/api_tests/chats_analytics.test.d.ts +6 -0
  62. package/lib/esm/tests/api_tests/chats_analytics.test.d.ts.map +1 -0
  63. package/lib/esm/tests/api_tests/chats_analytics.test.js +252 -0
  64. package/lib/esm/tests/api_tests/chats_analytics.test.js.map +1 -0
  65. package/lib/esm/tests/api_tests/cross_org_api_key.test.d.ts +6 -0
  66. package/lib/esm/tests/api_tests/cross_org_api_key.test.d.ts.map +1 -0
  67. package/lib/esm/tests/api_tests/cross_org_api_key.test.js +744 -0
  68. package/lib/esm/tests/api_tests/cross_org_api_key.test.js.map +1 -0
  69. package/lib/esm/tests/api_tests/date_string_validation.test.d.ts +6 -0
  70. package/lib/esm/tests/api_tests/date_string_validation.test.d.ts.map +1 -0
  71. package/lib/esm/tests/api_tests/date_string_validation.test.js +138 -0
  72. package/lib/esm/tests/api_tests/date_string_validation.test.js.map +1 -0
  73. package/lib/esm/tests/api_tests/enduser_session_invalidation.test.d.ts +6 -0
  74. package/lib/esm/tests/api_tests/enduser_session_invalidation.test.d.ts.map +1 -0
  75. package/lib/esm/tests/api_tests/enduser_session_invalidation.test.js +663 -0
  76. package/lib/esm/tests/api_tests/enduser_session_invalidation.test.js.map +1 -0
  77. package/lib/esm/tests/api_tests/eom_billing_codes.test.d.ts +6 -0
  78. package/lib/esm/tests/api_tests/eom_billing_codes.test.d.ts.map +1 -0
  79. package/lib/esm/tests/api_tests/eom_billing_codes.test.js +158 -0
  80. package/lib/esm/tests/api_tests/eom_billing_codes.test.js.map +1 -0
  81. package/lib/esm/tests/api_tests/eom_procedure_codes.test.d.ts +6 -0
  82. package/lib/esm/tests/api_tests/eom_procedure_codes.test.d.ts.map +1 -0
  83. package/lib/esm/tests/api_tests/eom_procedure_codes.test.js +335 -0
  84. package/lib/esm/tests/api_tests/eom_procedure_codes.test.js.map +1 -0
  85. package/lib/esm/tests/api_tests/field_redaction.test.d.ts +13 -0
  86. package/lib/esm/tests/api_tests/field_redaction.test.d.ts.map +1 -0
  87. package/lib/esm/tests/api_tests/field_redaction.test.js +814 -0
  88. package/lib/esm/tests/api_tests/field_redaction.test.js.map +1 -0
  89. package/lib/esm/tests/api_tests/form_submitted_trigger.test.d.ts +6 -0
  90. package/lib/esm/tests/api_tests/form_submitted_trigger.test.d.ts.map +1 -0
  91. package/lib/esm/tests/api_tests/form_submitted_trigger.test.js +425 -0
  92. package/lib/esm/tests/api_tests/form_submitted_trigger.test.js.map +1 -0
  93. package/lib/esm/tests/api_tests/integrations_redacted.test.d.ts +6 -0
  94. package/lib/esm/tests/api_tests/integrations_redacted.test.d.ts.map +1 -0
  95. package/lib/esm/tests/api_tests/integrations_redacted.test.js +269 -0
  96. package/lib/esm/tests/api_tests/integrations_redacted.test.js.map +1 -0
  97. package/lib/esm/tests/api_tests/managed_content_file_access.test.d.ts +13 -0
  98. package/lib/esm/tests/api_tests/managed_content_file_access.test.d.ts.map +1 -0
  99. package/lib/esm/tests/api_tests/managed_content_file_access.test.js +358 -0
  100. package/lib/esm/tests/api_tests/managed_content_file_access.test.js.map +1 -0
  101. package/lib/esm/tests/api_tests/openloop_webhooks.test.d.ts.map +1 -1
  102. package/lib/esm/tests/api_tests/openloop_webhooks.test.js +108 -24
  103. package/lib/esm/tests/api_tests/openloop_webhooks.test.js.map +1 -1
  104. package/lib/esm/tests/api_tests/organization_settings_duplicates.test.d.ts.map +1 -1
  105. package/lib/esm/tests/api_tests/organization_settings_duplicates.test.js +25 -2
  106. package/lib/esm/tests/api_tests/organization_settings_duplicates.test.js.map +1 -1
  107. package/lib/esm/tests/tests.d.ts.map +1 -1
  108. package/lib/esm/tests/tests.js +310 -183
  109. package/lib/esm/tests/tests.js.map +1 -1
  110. package/lib/tsconfig.tsbuildinfo +1 -1
  111. package/package.json +10 -10
  112. package/src/sdk.ts +14 -0
  113. package/src/tests/api_tests/chats_analytics.test.ts +182 -0
  114. package/src/tests/api_tests/cross_org_api_key.test.ts +665 -0
  115. package/src/tests/api_tests/date_string_validation.test.ts +107 -0
  116. package/src/tests/api_tests/enduser_session_invalidation.test.ts +361 -0
  117. package/src/tests/api_tests/eom_procedure_codes.test.ts +296 -0
  118. package/src/tests/api_tests/field_redaction.test.ts +669 -0
  119. package/src/tests/api_tests/form_started_trigger.test.ts +1 -1
  120. package/src/tests/api_tests/form_submitted_trigger.test.ts +281 -0
  121. package/src/tests/api_tests/integrations_redacted.test.ts +245 -0
  122. package/src/tests/api_tests/managed_content_file_access.test.ts +214 -0
  123. package/src/tests/api_tests/openloop_webhooks.test.ts +64 -0
  124. package/src/tests/api_tests/organization_settings_duplicates.test.ts +14 -0
  125. package/src/tests/tests.ts +95 -7
  126. package/test_generated.pdf +0 -0
@@ -0,0 +1,358 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ 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;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ require('source-map-support').install();
49
+ import * as buffer from 'buffer';
50
+ import { Session, EnduserSession } from "../../sdk";
51
+ import { async_test, log_header, } from "@tellescope/testing";
52
+ import { setup_tests } from "../setup";
53
+ var host = process.env.API_URL || 'http://localhost:8080';
54
+ var businessId = '60398b1131a295e64f084ff6';
55
+ /**
56
+ * Tests for file_download_URL enduser access via managed content fallback.
57
+ *
58
+ * Verifies the backend fallback logic that allows endusers to access files
59
+ * attached to managed content records they have access to, even when the
60
+ * file itself does not have enduserId set or publicRead: true.
61
+ */
62
+ export var managed_content_file_access_tests = function (_a) {
63
+ var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
64
+ return __awaiter(void 0, void 0, void 0, function () {
65
+ var contentRecordIds, assignmentIds, fileIds, testEnduserId, otherEnduserId, enduserSDK, otherEnduserSDK, uploadFile, testEnduser, otherEnduser, fileForAll_1, contentAll, fileForIndividual_1, contentIndividual, fileNoContent_1, fileWithEnduser_1, filePublic_1, _i, assignmentIds_1, assignmentId, _b, contentRecordIds_1, recordId, _c, fileIds_1, fileId, error_1;
66
+ return __generator(this, function (_d) {
67
+ switch (_d.label) {
68
+ case 0:
69
+ log_header("Managed Content File Access Tests");
70
+ contentRecordIds = [];
71
+ assignmentIds = [];
72
+ fileIds = [];
73
+ uploadFile = function (name, opts) {
74
+ if (opts === void 0) { opts = {}; }
75
+ return __awaiter(void 0, void 0, void 0, function () {
76
+ var buff, _a, presignedUpload, file;
77
+ return __generator(this, function (_b) {
78
+ switch (_b.label) {
79
+ case 0:
80
+ buff = buffer.Buffer.from("test file content for ".concat(name));
81
+ return [4 /*yield*/, sdk.api.files.prepare_file_upload(__assign({ name: name, type: 'text/plain', size: buff.byteLength }, opts))];
82
+ case 1:
83
+ _a = _b.sent(), presignedUpload = _a.presignedUpload, file = _a.file;
84
+ return [4 /*yield*/, sdk.UPLOAD(presignedUpload, buff)];
85
+ case 2:
86
+ _b.sent();
87
+ return [4 /*yield*/, sdk.api.files.confirm_file_upload({ id: file.id })];
88
+ case 3:
89
+ _b.sent();
90
+ fileIds.push(file.id);
91
+ return [2 /*return*/, file];
92
+ }
93
+ });
94
+ });
95
+ };
96
+ _d.label = 1;
97
+ case 1:
98
+ _d.trys.push([1, , 21, 41]);
99
+ console.log("Setting up test data...");
100
+ return [4 /*yield*/, sdk.api.endusers.createOne({
101
+ email: "mcr_file_access_test_".concat(Date.now(), "@test.tellescope.com"),
102
+ })];
103
+ case 2:
104
+ testEnduser = _d.sent();
105
+ testEnduserId = testEnduser.id;
106
+ return [4 /*yield*/, sdk.api.endusers.set_password({ id: testEnduser.id, password: 'TestPassword123!' })];
107
+ case 3:
108
+ _d.sent();
109
+ return [4 /*yield*/, sdk.api.endusers.createOne({
110
+ email: "mcr_file_access_other_".concat(Date.now(), "@test.tellescope.com"),
111
+ })];
112
+ case 4:
113
+ otherEnduser = _d.sent();
114
+ otherEnduserId = otherEnduser.id;
115
+ return [4 /*yield*/, sdk.api.endusers.set_password({ id: otherEnduser.id, password: 'TestPassword123!' })];
116
+ case 5:
117
+ _d.sent();
118
+ enduserSDK = new EnduserSession({ host: host, businessId: businessId });
119
+ return [4 /*yield*/, enduserSDK.authenticate(testEnduser.email, 'TestPassword123!')];
120
+ case 6:
121
+ _d.sent();
122
+ otherEnduserSDK = new EnduserSession({ host: host, businessId: businessId });
123
+ return [4 /*yield*/, otherEnduserSDK.authenticate(otherEnduser.email, 'TestPassword123!')
124
+ // ===== Test 1: File attached to assignmentType: 'All' content - enduser CAN access =====
125
+ ];
126
+ case 7:
127
+ _d.sent();
128
+ return [4 /*yield*/, uploadFile('mcr-file-all.txt')];
129
+ case 8:
130
+ fileForAll_1 = _d.sent();
131
+ return [4 /*yield*/, sdk.api.managed_content_records.createOne({
132
+ title: 'MCR File Access - All',
133
+ htmlContent: '<p>All</p>',
134
+ textContent: 'All',
135
+ assignmentType: 'All',
136
+ attachments: [{ secureName: fileForAll_1.secureName, type: 'file', name: fileForAll_1.name }],
137
+ })];
138
+ case 9:
139
+ contentAll = _d.sent();
140
+ contentRecordIds.push(contentAll.id);
141
+ return [4 /*yield*/, async_test('staff-uploaded file in assignmentType:All content - enduser CAN access', function () { return __awaiter(void 0, void 0, void 0, function () {
142
+ var result;
143
+ return __generator(this, function (_a) {
144
+ switch (_a.label) {
145
+ case 0: return [4 /*yield*/, enduserSDK.api.files.file_download_URL({ secureName: fileForAll_1.secureName })];
146
+ case 1:
147
+ result = _a.sent();
148
+ return [2 /*return*/, !!(result === null || result === void 0 ? void 0 : result.downloadURL)];
149
+ }
150
+ });
151
+ }); }, { onResult: function (r) { return r === true; } })
152
+ // ===== Test 2: File attached to Individual content for enduser A - enduser B CANNOT access =====
153
+ ];
154
+ case 10:
155
+ _d.sent();
156
+ return [4 /*yield*/, uploadFile('mcr-file-individual.txt')];
157
+ case 11:
158
+ fileForIndividual_1 = _d.sent();
159
+ return [4 /*yield*/, sdk.api.managed_content_records.createOne({
160
+ title: 'MCR File Access - Individual',
161
+ htmlContent: '<p>Individual</p>',
162
+ textContent: 'Individual',
163
+ enduserId: testEnduser.id,
164
+ attachments: [{ secureName: fileForIndividual_1.secureName, type: 'file', name: fileForIndividual_1.name }],
165
+ })];
166
+ case 12:
167
+ contentIndividual = _d.sent();
168
+ contentRecordIds.push(contentIndividual.id);
169
+ return [4 /*yield*/, async_test('file attached to Individual content - assigned enduser CAN access', function () { return __awaiter(void 0, void 0, void 0, function () {
170
+ var result;
171
+ return __generator(this, function (_a) {
172
+ switch (_a.label) {
173
+ case 0: return [4 /*yield*/, enduserSDK.api.files.file_download_URL({ secureName: fileForIndividual_1.secureName })];
174
+ case 1:
175
+ result = _a.sent();
176
+ return [2 /*return*/, !!(result === null || result === void 0 ? void 0 : result.downloadURL)];
177
+ }
178
+ });
179
+ }); }, { onResult: function (r) { return r === true; } })];
180
+ case 13:
181
+ _d.sent();
182
+ return [4 /*yield*/, async_test('file attached to Individual content - unassigned enduser CANNOT access', function () { return __awaiter(void 0, void 0, void 0, function () {
183
+ var err_1;
184
+ return __generator(this, function (_a) {
185
+ switch (_a.label) {
186
+ case 0:
187
+ _a.trys.push([0, 2, , 3]);
188
+ return [4 /*yield*/, otherEnduserSDK.api.files.file_download_URL({ secureName: fileForIndividual_1.secureName })];
189
+ case 1:
190
+ _a.sent();
191
+ return [2 /*return*/, false];
192
+ case 2:
193
+ err_1 = _a.sent();
194
+ return [2 /*return*/, true];
195
+ case 3: return [2 /*return*/];
196
+ }
197
+ });
198
+ }); }, { onResult: function (r) { return r === true; } })
199
+ // ===== Test 3: File not attached to any managed content - enduser CANNOT access =====
200
+ ];
201
+ case 14:
202
+ _d.sent();
203
+ return [4 /*yield*/, uploadFile('mcr-file-no-content.txt')];
204
+ case 15:
205
+ fileNoContent_1 = _d.sent();
206
+ return [4 /*yield*/, async_test('file not attached to any managed content - enduser CANNOT access', function () { return __awaiter(void 0, void 0, void 0, function () {
207
+ var err_2;
208
+ return __generator(this, function (_a) {
209
+ switch (_a.label) {
210
+ case 0:
211
+ _a.trys.push([0, 2, , 3]);
212
+ return [4 /*yield*/, enduserSDK.api.files.file_download_URL({ secureName: fileNoContent_1.secureName })];
213
+ case 1:
214
+ _a.sent();
215
+ return [2 /*return*/, false];
216
+ case 2:
217
+ err_2 = _a.sent();
218
+ return [2 /*return*/, true];
219
+ case 3: return [2 /*return*/];
220
+ }
221
+ });
222
+ }); }, { onResult: function (r) { return r === true; } })
223
+ // ===== Test 4: File with enduserId set - existing behavior preserved =====
224
+ ];
225
+ case 16:
226
+ _d.sent();
227
+ return [4 /*yield*/, uploadFile('mcr-file-with-enduser.txt', { enduserId: testEnduser.id })];
228
+ case 17:
229
+ fileWithEnduser_1 = _d.sent();
230
+ return [4 /*yield*/, async_test('file with enduserId set - enduser CAN access (no fallback needed)', function () { return __awaiter(void 0, void 0, void 0, function () {
231
+ var result;
232
+ return __generator(this, function (_a) {
233
+ switch (_a.label) {
234
+ case 0: return [4 /*yield*/, enduserSDK.api.files.file_download_URL({ secureName: fileWithEnduser_1.secureName })];
235
+ case 1:
236
+ result = _a.sent();
237
+ return [2 /*return*/, !!(result === null || result === void 0 ? void 0 : result.downloadURL)];
238
+ }
239
+ });
240
+ }); }, { onResult: function (r) { return r === true; } })
241
+ // ===== Test 5: File with publicRead: true - existing behavior preserved =====
242
+ ];
243
+ case 18:
244
+ _d.sent();
245
+ return [4 /*yield*/, uploadFile('mcr-file-public.txt', { publicRead: true })];
246
+ case 19:
247
+ filePublic_1 = _d.sent();
248
+ return [4 /*yield*/, async_test('file with publicRead - enduser CAN access', function () { return __awaiter(void 0, void 0, void 0, function () {
249
+ var result;
250
+ return __generator(this, function (_a) {
251
+ switch (_a.label) {
252
+ case 0: return [4 /*yield*/, enduserSDK.api.files.file_download_URL({ secureName: filePublic_1.secureName })];
253
+ case 1:
254
+ result = _a.sent();
255
+ return [2 /*return*/, !!(result === null || result === void 0 ? void 0 : result.downloadURL)];
256
+ }
257
+ });
258
+ }); }, { onResult: function (r) { return r === true; } })];
259
+ case 20:
260
+ _d.sent();
261
+ console.log("All Managed Content File Access tests passed!");
262
+ return [3 /*break*/, 41];
263
+ case 21:
264
+ console.log("Cleaning up test data...");
265
+ _d.label = 22;
266
+ case 22:
267
+ _d.trys.push([22, 39, , 40]);
268
+ _i = 0, assignmentIds_1 = assignmentIds;
269
+ _d.label = 23;
270
+ case 23:
271
+ if (!(_i < assignmentIds_1.length)) return [3 /*break*/, 26];
272
+ assignmentId = assignmentIds_1[_i];
273
+ return [4 /*yield*/, sdk.api.managed_content_record_assignments.deleteOne(assignmentId).catch(function () { })];
274
+ case 24:
275
+ _d.sent();
276
+ _d.label = 25;
277
+ case 25:
278
+ _i++;
279
+ return [3 /*break*/, 23];
280
+ case 26:
281
+ _b = 0, contentRecordIds_1 = contentRecordIds;
282
+ _d.label = 27;
283
+ case 27:
284
+ if (!(_b < contentRecordIds_1.length)) return [3 /*break*/, 30];
285
+ recordId = contentRecordIds_1[_b];
286
+ return [4 /*yield*/, sdk.api.managed_content_records.deleteOne(recordId).catch(function () { })];
287
+ case 28:
288
+ _d.sent();
289
+ _d.label = 29;
290
+ case 29:
291
+ _b++;
292
+ return [3 /*break*/, 27];
293
+ case 30:
294
+ _c = 0, fileIds_1 = fileIds;
295
+ _d.label = 31;
296
+ case 31:
297
+ if (!(_c < fileIds_1.length)) return [3 /*break*/, 34];
298
+ fileId = fileIds_1[_c];
299
+ return [4 /*yield*/, sdk.api.files.deleteOne(fileId).catch(function () { })];
300
+ case 32:
301
+ _d.sent();
302
+ _d.label = 33;
303
+ case 33:
304
+ _c++;
305
+ return [3 /*break*/, 31];
306
+ case 34:
307
+ if (!testEnduserId) return [3 /*break*/, 36];
308
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(testEnduserId).catch(function () { })];
309
+ case 35:
310
+ _d.sent();
311
+ _d.label = 36;
312
+ case 36:
313
+ if (!otherEnduserId) return [3 /*break*/, 38];
314
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(otherEnduserId).catch(function () { })];
315
+ case 37:
316
+ _d.sent();
317
+ _d.label = 38;
318
+ case 38:
319
+ console.log("Cleanup completed");
320
+ return [3 /*break*/, 40];
321
+ case 39:
322
+ error_1 = _d.sent();
323
+ console.error('Cleanup error:', error_1);
324
+ return [3 /*break*/, 40];
325
+ case 40: return [7 /*endfinally*/];
326
+ case 41: return [2 /*return*/];
327
+ }
328
+ });
329
+ });
330
+ };
331
+ if (require.main === module) {
332
+ console.log("Using API URL: ".concat(host));
333
+ var sdk_1 = new Session({ host: host });
334
+ var sdkNonAdmin_1 = new Session({ host: host });
335
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
336
+ return __generator(this, function (_a) {
337
+ switch (_a.label) {
338
+ case 0: return [4 /*yield*/, setup_tests(sdk_1, sdkNonAdmin_1)];
339
+ case 1:
340
+ _a.sent();
341
+ return [4 /*yield*/, managed_content_file_access_tests({ sdk: sdk_1, sdkNonAdmin: sdkNonAdmin_1 })];
342
+ case 2:
343
+ _a.sent();
344
+ return [2 /*return*/];
345
+ }
346
+ });
347
+ }); };
348
+ runTests()
349
+ .then(function () {
350
+ console.log("Managed content file access test suite completed successfully");
351
+ process.exit(0);
352
+ })
353
+ .catch(function (error) {
354
+ console.error("Managed content file access test suite failed:", error);
355
+ process.exit(1);
356
+ });
357
+ }
358
+ //# sourceMappingURL=managed_content_file_access.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed_content_file_access.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/managed_content_file_access.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC;AAExC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EACL,UAAU,EACV,UAAU,GACX,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAEtC,IAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,uBAAgC,CAAA;AACpE,IAAM,UAAU,GAAG,0BAA0B,CAAA;AAE7C;;;;;;GAMG;AACH,MAAM,CAAC,IAAM,iCAAiC,GAAG,UAAO,EAA4D;QAA1D,GAAG,SAAA,EAAE,WAAW,iBAAA;;;;;;oBACxE,UAAU,CAAC,mCAAmC,CAAC,CAAA;oBAEzC,gBAAgB,GAAa,EAAE,CAAA;oBAC/B,aAAa,GAAa,EAAE,CAAA;oBAC5B,OAAO,GAAa,EAAE,CAAA;oBAMtB,UAAU,GAAG,UACjB,IAAY,EACZ,IAAuD;wBAAvD,qBAAA,EAAA,SAAuD;;;;;;wCAEjD,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAyB,IAAI,CAAE,CAAC,CAAA;wCAC9B,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,YACvE,IAAI,MAAA,EACJ,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,IAAI,CAAC,UAAU,IAClB,IAAI,EACP,EAAA;;wCALI,KAA4B,SAKhC,EALM,eAAe,qBAAA,EAAE,IAAI,UAAA;wCAM7B,qBAAM,GAAG,CAAC,MAAM,CAAC,eAAsB,EAAE,IAAI,CAAC,EAAA;;wCAA9C,SAA8C,CAAA;wCAC9C,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAA;;wCAAxD,SAAwD,CAAA;wCACxD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;wCACrB,sBAAO,IAAI,EAAA;;;;qBACZ,CAAA;;;;oBAGC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;oBAElB,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;4BACnD,KAAK,EAAE,+BAAwB,IAAI,CAAC,GAAG,EAAE,yBAAsB;yBAChE,CAAC,EAAA;;oBAFI,WAAW,GAAG,SAElB;oBACF,aAAa,GAAG,WAAW,CAAC,EAAE,CAAA;oBAC9B,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,EAAA;;oBAAzF,SAAyF,CAAA;oBAEpE,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;4BACpD,KAAK,EAAE,gCAAyB,IAAI,CAAC,GAAG,EAAE,yBAAsB;yBACjE,CAAC,EAAA;;oBAFI,YAAY,GAAG,SAEnB;oBACF,cAAc,GAAG,YAAY,CAAC,EAAE,CAAA;oBAChC,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,EAAA;;oBAA1F,SAA0F,CAAA;oBAE1F,UAAU,GAAG,IAAI,cAAc,CAAC,EAAE,IAAI,MAAA,EAAE,UAAU,YAAA,EAAE,CAAC,CAAA;oBACrD,qBAAM,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,KAAM,EAAE,kBAAkB,CAAC,EAAA;;oBAArE,SAAqE,CAAA;oBAErE,eAAe,GAAG,IAAI,cAAc,CAAC,EAAE,IAAI,MAAA,EAAE,UAAU,YAAA,EAAE,CAAC,CAAA;oBAC1D,qBAAM,eAAe,CAAC,YAAY,CAAC,YAAY,CAAC,KAAM,EAAE,kBAAkB,CAAC;wBAE3E,0FAA0F;sBAFf;;oBAA3E,SAA2E,CAAA;oBAGxD,qBAAM,UAAU,CAAC,kBAAkB,CAAC,EAAA;;oBAAjD,eAAa,SAAoC;oBACpC,qBAAM,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,SAAS,CAAC;4BACjE,KAAK,EAAE,uBAAuB;4BAC9B,WAAW,EAAE,YAAY;4BACzB,WAAW,EAAE,KAAK;4BAClB,cAAc,EAAE,KAAK;4BACrB,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,YAAU,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAU,CAAC,IAAI,EAAE,CAAC;yBAC1F,CAAC,EAAA;;oBANI,UAAU,GAAG,SAMjB;oBACF,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;oBAEpC,qBAAM,UAAU,CACd,wEAAwE,EACxE;;;;4CACiB,qBAAM,UAAW,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,UAAU,EAAE,YAAU,CAAC,UAAU,EAAE,CAAC,EAAA;;wCAA7F,MAAM,GAAG,SAAoF;wCACnG,sBAAO,CAAC,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAA,EAAA;;;6BAC7B,EACD,EAAE,QAAQ,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,EAAV,CAAU,EAAE,CAChC;wBAED,kGAAkG;sBAFjG;;oBAPD,SAOC,CAAA;oBAGyB,qBAAM,UAAU,CAAC,yBAAyB,CAAC,EAAA;;oBAA/D,sBAAoB,SAA2C;oBAC3C,qBAAM,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,SAAS,CAAC;4BACxE,KAAK,EAAE,8BAA8B;4BACrC,WAAW,EAAE,mBAAmB;4BAChC,WAAW,EAAE,YAAY;4BACzB,SAAS,EAAE,WAAW,CAAC,EAAE;4BACzB,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,mBAAiB,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAiB,CAAC,IAAI,EAAE,CAAC;yBACxG,CAAC,EAAA;;oBANI,iBAAiB,GAAG,SAMxB;oBACF,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAA;oBAE3C,qBAAM,UAAU,CACd,mEAAmE,EACnE;;;;4CACiB,qBAAM,UAAW,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,UAAU,EAAE,mBAAiB,CAAC,UAAU,EAAE,CAAC,EAAA;;wCAApG,MAAM,GAAG,SAA2F;wCAC1G,sBAAO,CAAC,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAA,EAAA;;;6BAC7B,EACD,EAAE,QAAQ,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,EAAV,CAAU,EAAE,CAChC,EAAA;;oBAPD,SAOC,CAAA;oBAED,qBAAM,UAAU,CACd,wEAAwE,EACxE;;;;;;wCAEI,qBAAM,eAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,UAAU,EAAE,mBAAiB,CAAC,UAAU,EAAE,CAAC,EAAA;;wCAAhG,SAAgG,CAAA;wCAChG,sBAAO,KAAK,EAAA;;;wCAEZ,sBAAO,IAAI,EAAA;;;;6BAEd,EACD,EAAE,QAAQ,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,EAAV,CAAU,EAAE,CAChC;wBAED,uFAAuF;sBAFtF;;oBAXD,SAWC,CAAA;oBAGqB,qBAAM,UAAU,CAAC,yBAAyB,CAAC,EAAA;;oBAA3D,kBAAgB,SAA2C;oBAEjE,qBAAM,UAAU,CACd,kEAAkE,EAClE;;;;;;wCAEI,qBAAM,UAAW,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,UAAU,EAAE,eAAa,CAAC,UAAU,EAAE,CAAC,EAAA;;wCAAvF,SAAuF,CAAA;wCACvF,sBAAO,KAAK,EAAA;;;wCAEZ,sBAAO,IAAI,EAAA;;;;6BAEd,EACD,EAAE,QAAQ,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,EAAV,CAAU,EAAE,CAChC;wBAED,4EAA4E;sBAF3E;;oBAXD,SAWC,CAAA;oBAGuB,qBAAM,UAAU,CAAC,2BAA2B,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,EAAA;;oBAA9F,oBAAkB,SAA4E;oBAEpG,qBAAM,UAAU,CACd,mEAAmE,EACnE;;;;4CACiB,qBAAM,UAAW,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,UAAU,EAAE,iBAAe,CAAC,UAAU,EAAE,CAAC,EAAA;;wCAAlG,MAAM,GAAG,SAAyF;wCACxG,sBAAO,CAAC,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAA,EAAA;;;6BAC7B,EACD,EAAE,QAAQ,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,EAAV,CAAU,EAAE,CAChC;wBAED,+EAA+E;sBAF9E;;oBAPD,SAOC,CAAA;oBAGkB,qBAAM,UAAU,CAAC,qBAAqB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAA;;oBAA1E,eAAa,SAA6D;oBAEhF,qBAAM,UAAU,CACd,2CAA2C,EAC3C;;;;4CACiB,qBAAM,UAAW,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,UAAU,EAAE,YAAU,CAAC,UAAU,EAAE,CAAC,EAAA;;wCAA7F,MAAM,GAAG,SAAoF;wCACnG,sBAAO,CAAC,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAA,EAAA;;;6BAC7B,EACD,EAAE,QAAQ,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,EAAV,CAAU,EAAE,CAChC,EAAA;;oBAPD,SAOC,CAAA;oBAED,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAA;;;oBAG5D,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;;;;0BAGG,EAAb,+BAAa;;;yBAAb,CAAA,2BAAa,CAAA;oBAA7B,YAAY;oBACrB,qBAAM,GAAG,CAAC,GAAG,CAAC,kCAAkC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,cAAO,CAAC,CAAC,EAAA;;oBAAxF,SAAwF,CAAA;;;oBAD/D,IAAa,CAAA;;;0BAID,EAAhB,qCAAgB;;;yBAAhB,CAAA,8BAAgB,CAAA;oBAA5B,QAAQ;oBACjB,qBAAM,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,cAAO,CAAC,CAAC,EAAA;;oBAAzE,SAAyE,CAAA;;;oBADpD,IAAgB,CAAA;;;0BAIX,EAAP,mBAAO;;;yBAAP,CAAA,qBAAO,CAAA;oBAAjB,MAAM;oBACf,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,cAAO,CAAC,CAAC,EAAA;;oBAArD,SAAqD,CAAA;;;oBADlC,IAAO,CAAA;;;yBAIxB,aAAa,EAAb,yBAAa;oBACf,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,cAAO,CAAC,CAAC,EAAA;;oBAA/D,SAA+D,CAAA;;;yBAE7D,cAAc,EAAd,yBAAc;oBAChB,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,cAAO,CAAC,CAAC,EAAA;;oBAAhE,SAAgE,CAAA;;;oBAGlE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;;;;oBAEhC,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,OAAK,CAAC,CAAA;;;;;;;CAG3C,CAAA;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IAC3B,OAAO,CAAC,GAAG,CAAC,yBAAkB,IAAI,CAAE,CAAC,CAAA;IACrC,IAAM,KAAG,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC,CAAA;IACjC,IAAM,aAAW,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC,CAAA;IAEzC,IAAM,QAAQ,GAAG;;;wBACf,qBAAM,WAAW,CAAC,KAAG,EAAE,aAAW,CAAC,EAAA;;oBAAnC,SAAmC,CAAA;oBACnC,qBAAM,iCAAiC,CAAC,EAAE,GAAG,OAAA,EAAE,WAAW,eAAA,EAAE,CAAC,EAAA;;oBAA7D,SAA6D,CAAA;;;;SAC9D,CAAA;IAED,QAAQ,EAAE;SACP,IAAI,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAA;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC;SACD,KAAK,CAAC,UAAC,KAAK;QACX,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAA;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;CACL"}
@@ -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
  });