@tellescope/sdk 1.250.1 → 1.251.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 (96) hide show
  1. package/lib/cjs/sdk.d.ts +9 -0
  2. package/lib/cjs/sdk.d.ts.map +1 -1
  3. package/lib/cjs/sdk.js +3 -0
  4. package/lib/cjs/sdk.js.map +1 -1
  5. package/lib/cjs/tests/api_tests/account_switcher.test.d.ts.map +1 -1
  6. package/lib/cjs/tests/api_tests/account_switcher.test.js +1700 -306
  7. package/lib/cjs/tests/api_tests/account_switcher.test.js.map +1 -1
  8. package/lib/cjs/tests/api_tests/enduser_cross_access_isolation.test.d.ts.map +1 -1
  9. package/lib/cjs/tests/api_tests/enduser_cross_access_isolation.test.js +28 -15
  10. package/lib/cjs/tests/api_tests/enduser_cross_access_isolation.test.js.map +1 -1
  11. package/lib/cjs/tests/api_tests/enduser_login.test.d.ts +6 -0
  12. package/lib/cjs/tests/api_tests/enduser_login.test.d.ts.map +1 -0
  13. package/lib/cjs/tests/api_tests/enduser_login.test.js +315 -0
  14. package/lib/cjs/tests/api_tests/enduser_login.test.js.map +1 -0
  15. package/lib/cjs/tests/api_tests/medication_added_trigger.test.d.ts.map +1 -1
  16. package/lib/cjs/tests/api_tests/medication_added_trigger.test.js +556 -105
  17. package/lib/cjs/tests/api_tests/medication_added_trigger.test.js.map +1 -1
  18. package/lib/cjs/tests/api_tests/outbound_chat_sent_trigger.test.d.ts +7 -0
  19. package/lib/cjs/tests/api_tests/outbound_chat_sent_trigger.test.d.ts.map +1 -0
  20. package/lib/cjs/tests/api_tests/outbound_chat_sent_trigger.test.js +436 -0
  21. package/lib/cjs/tests/api_tests/outbound_chat_sent_trigger.test.js.map +1 -0
  22. package/lib/cjs/tests/api_tests/push_forms_to_portal_group_completion.test.d.ts +6 -0
  23. package/lib/cjs/tests/api_tests/push_forms_to_portal_group_completion.test.d.ts.map +1 -0
  24. package/lib/cjs/tests/api_tests/push_forms_to_portal_group_completion.test.js +370 -0
  25. package/lib/cjs/tests/api_tests/push_forms_to_portal_group_completion.test.js.map +1 -0
  26. package/lib/cjs/tests/api_tests/set_fields_order_templates.test.d.ts +6 -0
  27. package/lib/cjs/tests/api_tests/set_fields_order_templates.test.d.ts.map +1 -0
  28. package/lib/cjs/tests/api_tests/set_fields_order_templates.test.js +373 -0
  29. package/lib/cjs/tests/api_tests/set_fields_order_templates.test.js.map +1 -0
  30. package/lib/cjs/tests/setup.d.ts.map +1 -1
  31. package/lib/cjs/tests/setup.js +47 -32
  32. package/lib/cjs/tests/setup.js.map +1 -1
  33. package/lib/cjs/tests/tests.d.ts.map +1 -1
  34. package/lib/cjs/tests/tests.js +190 -161
  35. package/lib/cjs/tests/tests.js.map +1 -1
  36. package/lib/cjs/tests/unit_tests/conditional_logic_medication.test.d.ts +3 -0
  37. package/lib/cjs/tests/unit_tests/conditional_logic_medication.test.d.ts.map +1 -0
  38. package/lib/cjs/tests/unit_tests/conditional_logic_medication.test.js +114 -0
  39. package/lib/cjs/tests/unit_tests/conditional_logic_medication.test.js.map +1 -0
  40. package/lib/esm/sdk.d.ts +9 -0
  41. package/lib/esm/sdk.d.ts.map +1 -1
  42. package/lib/esm/sdk.js +3 -0
  43. package/lib/esm/sdk.js.map +1 -1
  44. package/lib/esm/tests/api_tests/account_switcher.test.d.ts.map +1 -1
  45. package/lib/esm/tests/api_tests/account_switcher.test.js +1702 -305
  46. package/lib/esm/tests/api_tests/account_switcher.test.js.map +1 -1
  47. package/lib/esm/tests/api_tests/enduser_cross_access_isolation.test.d.ts.map +1 -1
  48. package/lib/esm/tests/api_tests/enduser_cross_access_isolation.test.js +28 -15
  49. package/lib/esm/tests/api_tests/enduser_cross_access_isolation.test.js.map +1 -1
  50. package/lib/esm/tests/api_tests/enduser_login.test.d.ts +6 -0
  51. package/lib/esm/tests/api_tests/enduser_login.test.d.ts.map +1 -0
  52. package/lib/esm/tests/api_tests/enduser_login.test.js +308 -0
  53. package/lib/esm/tests/api_tests/enduser_login.test.js.map +1 -0
  54. package/lib/esm/tests/api_tests/enduser_login_phi_disclosure.test.d.ts +6 -0
  55. package/lib/esm/tests/api_tests/enduser_login_phi_disclosure.test.d.ts.map +1 -0
  56. package/lib/esm/tests/api_tests/enduser_login_phi_disclosure.test.js +268 -0
  57. package/lib/esm/tests/api_tests/enduser_login_phi_disclosure.test.js.map +1 -0
  58. package/lib/esm/tests/api_tests/medication_added_trigger.test.d.ts.map +1 -1
  59. package/lib/esm/tests/api_tests/medication_added_trigger.test.js +556 -105
  60. package/lib/esm/tests/api_tests/medication_added_trigger.test.js.map +1 -1
  61. package/lib/esm/tests/api_tests/outbound_chat_sent_trigger.test.d.ts +7 -0
  62. package/lib/esm/tests/api_tests/outbound_chat_sent_trigger.test.d.ts.map +1 -0
  63. package/lib/esm/tests/api_tests/outbound_chat_sent_trigger.test.js +432 -0
  64. package/lib/esm/tests/api_tests/outbound_chat_sent_trigger.test.js.map +1 -0
  65. package/lib/esm/tests/api_tests/push_forms_to_portal_group_completion.test.d.ts +6 -0
  66. package/lib/esm/tests/api_tests/push_forms_to_portal_group_completion.test.d.ts.map +1 -0
  67. package/lib/esm/tests/api_tests/push_forms_to_portal_group_completion.test.js +366 -0
  68. package/lib/esm/tests/api_tests/push_forms_to_portal_group_completion.test.js.map +1 -0
  69. package/lib/esm/tests/api_tests/set_fields_order_templates.test.d.ts +6 -0
  70. package/lib/esm/tests/api_tests/set_fields_order_templates.test.d.ts.map +1 -0
  71. package/lib/esm/tests/api_tests/set_fields_order_templates.test.js +369 -0
  72. package/lib/esm/tests/api_tests/set_fields_order_templates.test.js.map +1 -0
  73. package/lib/esm/tests/setup.d.ts.map +1 -1
  74. package/lib/esm/tests/setup.js +47 -32
  75. package/lib/esm/tests/setup.js.map +1 -1
  76. package/lib/esm/tests/tests.d.ts.map +1 -1
  77. package/lib/esm/tests/tests.js +190 -161
  78. package/lib/esm/tests/tests.js.map +1 -1
  79. package/lib/esm/tests/unit_tests/conditional_logic_medication.test.d.ts +3 -0
  80. package/lib/esm/tests/unit_tests/conditional_logic_medication.test.d.ts.map +1 -0
  81. package/lib/esm/tests/unit_tests/conditional_logic_medication.test.js +111 -0
  82. package/lib/esm/tests/unit_tests/conditional_logic_medication.test.js.map +1 -0
  83. package/lib/tsconfig.tsbuildinfo +1 -1
  84. package/package.json +10 -10
  85. package/src/sdk.ts +12 -0
  86. package/src/tests/api_tests/account_switcher.test.ts +1283 -0
  87. package/src/tests/api_tests/enduser_cross_access_isolation.test.ts +26 -0
  88. package/src/tests/api_tests/enduser_login.test.ts +215 -0
  89. package/src/tests/api_tests/medication_added_trigger.test.ts +345 -4
  90. package/src/tests/api_tests/outbound_chat_sent_trigger.test.ts +339 -0
  91. package/src/tests/api_tests/push_forms_to_portal_group_completion.test.ts +198 -0
  92. package/src/tests/api_tests/set_fields_order_templates.test.ts +258 -0
  93. package/src/tests/setup.ts +8 -1
  94. package/src/tests/tests.ts +23 -6
  95. package/src/tests/unit_tests/conditional_logic_medication.test.ts +133 -0
  96. package/test_generated.pdf +0 -0
@@ -45,9 +45,9 @@ var host = process.env.API_URL || "http://localhost:8080";
45
45
  var medication_added_trigger_tests = function (_a) {
46
46
  var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
47
47
  return __awaiter(void 0, void 0, void 0, function () {
48
- var t1, t2, t3, t4, t5, enduser1, enduser2, enduser3, enduser4, enduser5, enduser6, med1, med2, med3, med4, med5, med6, belugaForm, belugaEnduser, belugaFormResponse, belugaTrigger, webhookResponse, _b, _c, _d, belugaMeds, belugaMed, setFieldsTrigger, setFieldsEnduser, setFieldsMed, setFieldsTriggerFiltered, setFieldsEnduser2, setFieldsMed2;
49
- return __generator(this, function (_e) {
50
- switch (_e.label) {
48
+ var t1, t2, t3, t4, t5, enduser1, enduser2, enduser3, enduser4, enduser5, enduser6, med1, med2, med3, med4, med5, med6, belugaForm, belugaEnduser, belugaFormResponse, belugaTrigger, webhookResponse, _b, _c, _d, belugaMeds, belugaMedSemaglutide, belugaMedMetformin, belugaFormNoCategory, belugaEnduserNoCategory, belugaFormResponseNoCategory, webhookResponseNoCategory, _e, _f, _g, belugaMedsNoCategory, belugaMedNoCategory, setFieldsTrigger, setFieldsEnduser, setFieldsMed, setFieldsTriggerFiltered, setFieldsEnduser2, setFieldsMed2, setFieldsCategoryTrigger, setFieldsCategoryEnduser, setFieldsCategoryMed, setFieldsCategoryEnduserEmpty, setFieldsCategoryMedEmpty, c1Trigger, c1MatchEnduser, c1MissEnduser, c2Trigger, c2MatchEnduser, c2MissEnduser, c3Trigger, c3MatchEnduser, c3MissEnduser, c4Trigger, c4MatchA, c4MatchB, c4Miss, c5Trigger, c5Match, c5Miss, c6Trigger, c6Match;
49
+ return __generator(this, function (_h) {
50
+ switch (_h.label) {
51
51
  case 0:
52
52
  (0, testing_1.log_header)("Automation Trigger Tests (Medication Added)");
53
53
  return [4 /*yield*/, sdk.api.automation_triggers.createOne({
@@ -59,7 +59,7 @@ var medication_added_trigger_tests = function (_a) {
59
59
  // T2: Title filter only
60
60
  ];
61
61
  case 1:
62
- t1 = _e.sent();
62
+ t1 = _h.sent();
63
63
  return [4 /*yield*/, sdk.api.automation_triggers.createOne({
64
64
  event: { type: 'Medication Added', info: { titles: ['Lisinopril'], protocols: [] } },
65
65
  action: { type: 'Add Tags', info: { tags: ['Med-Title-Match'] } },
@@ -69,7 +69,7 @@ var medication_added_trigger_tests = function (_a) {
69
69
  // T3: Protocol filter only
70
70
  ];
71
71
  case 2:
72
- t2 = _e.sent();
72
+ t2 = _h.sent();
73
73
  return [4 /*yield*/, sdk.api.automation_triggers.createOne({
74
74
  event: { type: 'Medication Added', info: { titles: [], protocols: ['Weight Loss'] } },
75
75
  action: { type: 'Add Tags', info: { tags: ['Med-Protocol-Match'] } },
@@ -79,7 +79,7 @@ var medication_added_trigger_tests = function (_a) {
79
79
  // T4: Title + protocol filter
80
80
  ];
81
81
  case 3:
82
- t3 = _e.sent();
82
+ t3 = _h.sent();
83
83
  return [4 /*yield*/, sdk.api.automation_triggers.createOne({
84
84
  event: { type: 'Medication Added', info: { titles: ['Metformin'], protocols: ['Diabetes'] } },
85
85
  action: { type: 'Add Tags', info: { tags: ['Med-Title-And-Protocol'] } },
@@ -89,7 +89,7 @@ var medication_added_trigger_tests = function (_a) {
89
89
  // T5: Protocol filter that won't match
90
90
  ];
91
91
  case 4:
92
- t4 = _e.sent();
92
+ t4 = _h.sent();
93
93
  return [4 /*yield*/, sdk.api.automation_triggers.createOne({
94
94
  event: { type: 'Medication Added', info: { titles: [], protocols: ['Dermatology'] } },
95
95
  action: { type: 'Add Tags', info: { tags: ['Med-Derm-Protocol'] } },
@@ -99,154 +99,154 @@ var medication_added_trigger_tests = function (_a) {
99
99
  // Create separate endusers to avoid trigger throttling (1 minute per trigger per enduser)
100
100
  ];
101
101
  case 5:
102
- t5 = _e.sent();
102
+ t5 = _h.sent();
103
103
  return [4 /*yield*/, sdk.api.endusers.createOne({})];
104
104
  case 6:
105
- enduser1 = _e.sent();
105
+ enduser1 = _h.sent();
106
106
  return [4 /*yield*/, sdk.api.endusers.createOne({})];
107
107
  case 7:
108
- enduser2 = _e.sent();
108
+ enduser2 = _h.sent();
109
109
  return [4 /*yield*/, sdk.api.endusers.createOne({})];
110
110
  case 8:
111
- enduser3 = _e.sent();
111
+ enduser3 = _h.sent();
112
112
  return [4 /*yield*/, sdk.api.endusers.createOne({})];
113
113
  case 9:
114
- enduser4 = _e.sent();
114
+ enduser4 = _h.sent();
115
115
  return [4 /*yield*/, sdk.api.endusers.createOne({})];
116
116
  case 10:
117
- enduser5 = _e.sent();
117
+ enduser5 = _h.sent();
118
118
  return [4 /*yield*/, sdk.api.endusers.createOne({})
119
119
  // Test 1: Any medication — empty titles + empty protocols → fires for any medication
120
120
  ];
121
121
  case 11:
122
- enduser6 = _e.sent();
122
+ enduser6 = _h.sent();
123
123
  return [4 /*yield*/, sdk.api.enduser_medications.createOne({
124
124
  enduserId: enduser1.id,
125
125
  title: 'Aspirin',
126
126
  })];
127
127
  case 12:
128
- med1 = _e.sent();
128
+ med1 = _h.sent();
129
129
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
130
130
  case 13:
131
- _e.sent();
131
+ _h.sent();
132
132
  return [4 /*yield*/, (0, testing_1.async_test)("Medication Added - Any medication (no filters)", function () { return sdk.api.endusers.getOne(enduser1.id); }, { onResult: function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Any')); } })
133
133
  // Test 2: Title filter only — matching title, no protocol filter → fires
134
134
  ];
135
135
  case 14:
136
- _e.sent();
136
+ _h.sent();
137
137
  return [4 /*yield*/, sdk.api.enduser_medications.createOne({
138
138
  enduserId: enduser2.id,
139
139
  title: 'Lisinopril',
140
140
  })];
141
141
  case 15:
142
- med2 = _e.sent();
142
+ med2 = _h.sent();
143
143
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
144
144
  case 16:
145
- _e.sent();
145
+ _h.sent();
146
146
  return [4 /*yield*/, (0, testing_1.async_test)("Medication Added - Title filter match", function () { return sdk.api.endusers.getOne(enduser2.id); }, { onResult: function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Title-Match')); } })
147
147
  // Test 3: Protocol filter only — matching protocol, no title filter → fires
148
148
  ];
149
149
  case 17:
150
- _e.sent();
150
+ _h.sent();
151
151
  return [4 /*yield*/, sdk.api.enduser_medications.createOne({
152
152
  enduserId: enduser3.id,
153
153
  title: 'Semaglutide',
154
154
  protocol: 'Weight Loss',
155
155
  })];
156
156
  case 18:
157
- med3 = _e.sent();
157
+ med3 = _h.sent();
158
158
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
159
159
  case 19:
160
- _e.sent();
160
+ _h.sent();
161
161
  return [4 /*yield*/, (0, testing_1.async_test)("Medication Added - Protocol filter match", function () { return sdk.api.endusers.getOne(enduser3.id); }, { onResult: function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Protocol-Match')); } })
162
162
  // Test 4: Title + protocol filter — both match → fires
163
163
  ];
164
164
  case 20:
165
- _e.sent();
165
+ _h.sent();
166
166
  return [4 /*yield*/, sdk.api.enduser_medications.createOne({
167
167
  enduserId: enduser4.id,
168
168
  title: 'Metformin',
169
169
  protocol: 'Diabetes',
170
170
  })];
171
171
  case 21:
172
- med4 = _e.sent();
172
+ med4 = _h.sent();
173
173
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
174
174
  case 22:
175
- _e.sent();
175
+ _h.sent();
176
176
  return [4 /*yield*/, (0, testing_1.async_test)("Medication Added - Title and protocol filter match", function () { return sdk.api.endusers.getOne(enduser4.id); }, { onResult: function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Title-And-Protocol')); } })
177
177
  // Test 5: Non-matching protocol — protocol filter doesn't match → does NOT fire
178
178
  ];
179
179
  case 23:
180
- _e.sent();
180
+ _h.sent();
181
181
  return [4 /*yield*/, sdk.api.enduser_medications.createOne({
182
182
  enduserId: enduser5.id,
183
183
  title: 'Ibuprofen',
184
184
  protocol: 'Pain Management',
185
185
  })];
186
186
  case 24:
187
- med5 = _e.sent();
187
+ med5 = _h.sent();
188
188
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
189
189
  case 25:
190
- _e.sent();
190
+ _h.sent();
191
191
  return [4 /*yield*/, (0, testing_1.async_test)("Medication Added - Non-matching protocol does NOT fire", function () { return sdk.api.endusers.getOne(enduser5.id); }, { onResult: function (e) { var _a, _b; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Any')) && !((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Med-Derm-Protocol')); } })
192
192
  // Test 6: No protocol on medication — trigger has protocol filter, medication has no protocol → does NOT fire
193
193
  ];
194
194
  case 26:
195
- _e.sent();
195
+ _h.sent();
196
196
  return [4 /*yield*/, sdk.api.enduser_medications.createOne({
197
197
  enduserId: enduser6.id,
198
198
  title: 'Amoxicillin',
199
199
  })];
200
200
  case 27:
201
- med6 = _e.sent();
201
+ med6 = _h.sent();
202
202
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
203
203
  case 28:
204
- _e.sent();
204
+ _h.sent();
205
205
  return [4 /*yield*/, (0, testing_1.async_test)("Medication Added - No protocol on med, protocol filter does NOT fire", function () { return sdk.api.endusers.getOne(enduser6.id); }, { onResult: function (e) { var _a, _b, _c; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Any')) && !((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Med-Protocol-Match')) && !((_c = e.tags) === null || _c === void 0 ? void 0 : _c.includes('Med-Derm-Protocol')); } })];
206
206
  case 29:
207
- _e.sent();
208
- _e.label = 30;
207
+ _h.sent();
208
+ _h.label = 30;
209
209
  case 30:
210
- _e.trys.push([30, , 42, 43]);
210
+ _h.trys.push([30, , 42, 43]);
211
211
  // Clean up test data - triggers first
212
212
  return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(t1.id)];
213
213
  case 31:
214
214
  // Clean up test data - triggers first
215
- _e.sent();
215
+ _h.sent();
216
216
  return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(t2.id)];
217
217
  case 32:
218
- _e.sent();
218
+ _h.sent();
219
219
  return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(t3.id)];
220
220
  case 33:
221
- _e.sent();
221
+ _h.sent();
222
222
  return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(t4.id)];
223
223
  case 34:
224
- _e.sent();
224
+ _h.sent();
225
225
  return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(t5.id)
226
226
  // Clean up endusers (also cleans up medications)
227
227
  ];
228
228
  case 35:
229
- _e.sent();
229
+ _h.sent();
230
230
  // Clean up endusers (also cleans up medications)
231
231
  return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser1.id)];
232
232
  case 36:
233
233
  // Clean up endusers (also cleans up medications)
234
- _e.sent();
234
+ _h.sent();
235
235
  return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser2.id)];
236
236
  case 37:
237
- _e.sent();
237
+ _h.sent();
238
238
  return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser3.id)];
239
239
  case 38:
240
- _e.sent();
240
+ _h.sent();
241
241
  return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser4.id)];
242
242
  case 39:
243
- _e.sent();
243
+ _h.sent();
244
244
  return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser5.id)];
245
245
  case 40:
246
- _e.sent();
246
+ _h.sent();
247
247
  return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser6.id)];
248
248
  case 41:
249
- _e.sent();
249
+ _h.sent();
250
250
  return [3 /*break*/, 43];
251
251
  case 42: return [7 /*endfinally*/];
252
252
  case 43:
@@ -257,12 +257,12 @@ var medication_added_trigger_tests = function (_a) {
257
257
  belugaVisitType: 'Weight Loss',
258
258
  })];
259
259
  case 44:
260
- belugaForm = _e.sent();
260
+ belugaForm = _h.sent();
261
261
  return [4 /*yield*/, sdk.api.endusers.createOne({})
262
262
  // Create a form response that the webhook can look up by masterId
263
263
  ];
264
264
  case 45:
265
- belugaEnduser = _e.sent();
265
+ belugaEnduser = _h.sent();
266
266
  return [4 /*yield*/, sdk.api.form_responses.createOne({
267
267
  formId: belugaForm.id,
268
268
  enduserId: belugaEnduser.id,
@@ -276,17 +276,17 @@ var medication_added_trigger_tests = function (_a) {
276
276
  // Create a trigger that filters on protocol 'Weight Loss'
277
277
  ];
278
278
  case 46:
279
- belugaFormResponse = _e.sent();
279
+ belugaFormResponse = _h.sent();
280
280
  return [4 /*yield*/, sdk.api.automation_triggers.createOne({
281
281
  event: { type: 'Medication Added', info: { titles: [], protocols: ['Weight Loss'] } },
282
282
  action: { type: 'Add Tags', info: { tags: ['Med-Beluga-Protocol'] } },
283
283
  status: 'Active',
284
284
  title: "Medication - Beluga Protocol Test"
285
285
  })
286
- // Simulate the Beluga RX_WRITTEN webhook
286
+ // Simulate the Beluga RX_WRITTEN webhook with two meds covering category present (typical) and "N/A"
287
287
  ];
288
288
  case 47:
289
- belugaTrigger = _e.sent();
289
+ belugaTrigger = _h.sent();
290
290
  return [4 /*yield*/, fetch("".concat(host, "/v1/webhooks/beluga"), {
291
291
  method: 'POST',
292
292
  headers: { 'Content-Type': 'application/json' },
@@ -301,54 +301,142 @@ var medication_added_trigger_tests = function (_a) {
301
301
  quantity: '1',
302
302
  medId: 'test-ndc-123',
303
303
  rxId: 'test-rx-456',
304
+ category: 'weightloss1',
305
+ }, {
306
+ name: 'Metformin',
307
+ strength: '500mg',
308
+ refills: '2',
309
+ quantity: '1',
310
+ medId: 'test-ndc-789',
311
+ rxId: 'test-rx-789',
312
+ category: 'N/A',
304
313
  }],
305
314
  }),
306
315
  })];
307
316
  case 48:
308
- webhookResponse = _e.sent();
317
+ webhookResponse = _h.sent();
309
318
  if (!!webhookResponse.ok) return [3 /*break*/, 50];
310
319
  _b = Error.bind;
311
320
  _d = (_c = "Beluga webhook failed with status ".concat(webhookResponse.status, ": ")).concat;
312
321
  return [4 /*yield*/, webhookResponse.text()];
313
- case 49: throw new (_b.apply(Error, [void 0, _d.apply(_c, [_e.sent()])]))();
322
+ case 49: throw new (_b.apply(Error, [void 0, _d.apply(_c, [_h.sent()])]))();
314
323
  case 50: return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)
315
324
  // Verify the trigger fired (enduser got the tag)
316
325
  ];
317
326
  case 51:
318
- _e.sent();
327
+ _h.sent();
319
328
  // Verify the trigger fired (enduser got the tag)
320
329
  return [4 /*yield*/, (0, testing_1.async_test)("Beluga RX_WRITTEN - Protocol trigger fires", function () { return sdk.api.endusers.getOne(belugaEnduser.id); }, { onResult: function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Beluga-Protocol')); } })
321
330
  // Verify the medication was created with correct protocol and source
322
331
  ];
323
332
  case 52:
324
333
  // Verify the trigger fired (enduser got the tag)
325
- _e.sent();
334
+ _h.sent();
326
335
  return [4 /*yield*/, sdk.api.enduser_medications.getSome({ filter: { enduserId: belugaEnduser.id } })];
327
336
  case 53:
328
- belugaMeds = _e.sent();
329
- belugaMed = belugaMeds[0];
337
+ belugaMeds = _h.sent();
338
+ belugaMedSemaglutide = belugaMeds.find(function (m) { return m.title === 'Semaglutide'; });
339
+ belugaMedMetformin = belugaMeds.find(function (m) { return m.title === 'Metformin'; });
340
+ if (!belugaMedSemaglutide || !belugaMedMetformin) {
341
+ throw new Error("Beluga RX_WRITTEN - expected medications missing. Got: ".concat(belugaMeds.map(function (m) { return m.title; }).join(', ')));
342
+ }
330
343
  return [4 /*yield*/, (0, testing_1.async_test)("Beluga RX_WRITTEN - Medication has protocol from form belugaVisitType", function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
331
- return [2 /*return*/, belugaMed];
332
- }); }); }, { onResult: function (m) { return m.protocol === 'Weight Loss' && m.source === 'Beluga' && m.title === 'Semaglutide'; } })];
344
+ return [2 /*return*/, belugaMedSemaglutide];
345
+ }); }); }, { onResult: function (m) { return (m === null || m === void 0 ? void 0 : m.protocol) === 'Weight Loss' && (m === null || m === void 0 ? void 0 : m.source) === 'Beluga' && (m === null || m === void 0 ? void 0 : m.title) === 'Semaglutide'; } })];
333
346
  case 54:
334
- _e.sent();
335
- _e.label = 55;
347
+ _h.sent();
348
+ return [4 /*yield*/, (0, testing_1.async_test)("Beluga RX_WRITTEN - Medication has category from webhook", function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
349
+ return [2 /*return*/, belugaMedSemaglutide];
350
+ }); }); }, { onResult: function (m) { return (m === null || m === void 0 ? void 0 : m.category) === 'weightloss1'; } })];
336
351
  case 55:
337
- _e.trys.push([55, , 59, 60]);
352
+ _h.sent();
353
+ return [4 /*yield*/, (0, testing_1.async_test)("Beluga RX_WRITTEN - Medication preserves N/A category verbatim", function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
354
+ return [2 /*return*/, belugaMedMetformin];
355
+ }); }); }, { onResult: function (m) { return (m === null || m === void 0 ? void 0 : m.category) === 'N/A'; } })
356
+ // Backwards-compatibility: a webhook with no category on any med should result in undefined category
357
+ ];
358
+ case 56:
359
+ _h.sent();
360
+ return [4 /*yield*/, sdk.api.forms.createOne({
361
+ title: 'Beluga Protocol Test Form (no category)',
362
+ belugaVisitType: 'Weight Loss',
363
+ })];
364
+ case 57:
365
+ belugaFormNoCategory = _h.sent();
366
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
367
+ case 58:
368
+ belugaEnduserNoCategory = _h.sent();
369
+ return [4 /*yield*/, sdk.api.form_responses.createOne({
370
+ formId: belugaFormNoCategory.id,
371
+ enduserId: belugaEnduserNoCategory.id,
372
+ formTitle: belugaFormNoCategory.title,
373
+ responses: [{
374
+ fieldId: constants_1.PLACEHOLDER_ID,
375
+ fieldTitle: 'placeholder',
376
+ answer: { type: 'string', value: 'test' },
377
+ }],
378
+ })];
379
+ case 59:
380
+ belugaFormResponseNoCategory = _h.sent();
381
+ return [4 /*yield*/, fetch("".concat(host, "/v1/webhooks/beluga"), {
382
+ method: 'POST',
383
+ headers: { 'Content-Type': 'application/json' },
384
+ body: JSON.stringify({
385
+ masterId: "tellescope_".concat(belugaFormResponseNoCategory.id),
386
+ event: 'RX_WRITTEN',
387
+ docName: 'Dr. Test',
388
+ medsPrescribed: [{
389
+ name: 'Ibuprofen',
390
+ strength: '200mg',
391
+ refills: '1',
392
+ quantity: '1',
393
+ medId: 'test-ndc-nocat',
394
+ rxId: 'test-rx-nocat',
395
+ }],
396
+ }),
397
+ })];
398
+ case 60:
399
+ webhookResponseNoCategory = _h.sent();
400
+ if (!!webhookResponseNoCategory.ok) return [3 /*break*/, 62];
401
+ _e = Error.bind;
402
+ _g = (_f = "Beluga webhook (no category) failed with status ".concat(webhookResponseNoCategory.status, ": ")).concat;
403
+ return [4 /*yield*/, webhookResponseNoCategory.text()];
404
+ case 61: throw new (_e.apply(Error, [void 0, _g.apply(_f, [_h.sent()])]))();
405
+ case 62: return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
406
+ case 63:
407
+ _h.sent();
408
+ return [4 /*yield*/, sdk.api.enduser_medications.getSome({ filter: { enduserId: belugaEnduserNoCategory.id } })];
409
+ case 64:
410
+ belugaMedsNoCategory = _h.sent();
411
+ belugaMedNoCategory = belugaMedsNoCategory[0];
412
+ return [4 /*yield*/, (0, testing_1.async_test)("Beluga RX_WRITTEN - Medication omits category when not provided", function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
413
+ return [2 /*return*/, belugaMedNoCategory];
414
+ }); }); }, { onResult: function (m) { return (m === null || m === void 0 ? void 0 : m.category) === undefined || (m === null || m === void 0 ? void 0 : m.category) === null; } })];
415
+ case 65:
416
+ _h.sent();
417
+ _h.label = 66;
418
+ case 66:
419
+ _h.trys.push([66, , 72, 73]);
338
420
  // Clean up Beluga test data
339
421
  return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(belugaTrigger.id)];
340
- case 56:
422
+ case 67:
341
423
  // Clean up Beluga test data
342
- _e.sent();
424
+ _h.sent();
343
425
  return [4 /*yield*/, sdk.api.forms.deleteOne(belugaForm.id)];
344
- case 57:
345
- _e.sent();
426
+ case 68:
427
+ _h.sent();
428
+ return [4 /*yield*/, sdk.api.forms.deleteOne(belugaFormNoCategory.id)];
429
+ case 69:
430
+ _h.sent();
346
431
  return [4 /*yield*/, sdk.api.endusers.deleteOne(belugaEnduser.id)]; // also cleans up form response and medications
347
- case 58:
348
- _e.sent(); // also cleans up form response and medications
349
- return [3 /*break*/, 60];
350
- case 59: return [7 /*endfinally*/];
351
- case 60:
432
+ case 70:
433
+ _h.sent(); // also cleans up form response and medications
434
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(belugaEnduserNoCategory.id)]; // also cleans up form response and medications
435
+ case 71:
436
+ _h.sent(); // also cleans up form response and medications
437
+ return [3 /*break*/, 73];
438
+ case 72: return [7 /*endfinally*/];
439
+ case 73:
352
440
  // ---- Set Fields with {{medication.name}} Test ----
353
441
  (0, testing_1.log_header)("Medication Added - Set Fields with {{medication.name}}");
354
442
  return [4 /*yield*/, sdk.api.automation_triggers.createOne({
@@ -357,66 +445,429 @@ var medication_added_trigger_tests = function (_a) {
357
445
  status: 'Active',
358
446
  title: "Medication - Set Fields medication.name"
359
447
  })];
360
- case 61:
361
- setFieldsTrigger = _e.sent();
448
+ case 74:
449
+ setFieldsTrigger = _h.sent();
362
450
  return [4 /*yield*/, sdk.api.endusers.createOne({})];
363
- case 62:
364
- setFieldsEnduser = _e.sent();
451
+ case 75:
452
+ setFieldsEnduser = _h.sent();
365
453
  return [4 /*yield*/, sdk.api.enduser_medications.createOne({
366
454
  enduserId: setFieldsEnduser.id,
367
455
  title: 'Lisinopril 10mg',
368
456
  })];
369
- case 63:
370
- setFieldsMed = _e.sent();
457
+ case 76:
458
+ setFieldsMed = _h.sent();
371
459
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
372
- case 64:
373
- _e.sent();
460
+ case 77:
461
+ _h.sent();
374
462
  return [4 /*yield*/, (0, testing_1.async_test)("Medication Added - Set Fields copies medication.name to enduser field", function () { return sdk.api.endusers.getOne(setFieldsEnduser.id); }, { onResult: function (e) { var _a; return ((_a = e.fields) === null || _a === void 0 ? void 0 : _a['Medication Name']) === 'Lisinopril 10mg'; } })
375
463
  // Test with title-filtered trigger to verify medication context is passed correctly
376
464
  ];
377
- case 65:
378
- _e.sent();
465
+ case 78:
466
+ _h.sent();
379
467
  return [4 /*yield*/, sdk.api.automation_triggers.createOne({
380
468
  event: { type: 'Medication Added', info: { titles: ['Metformin 500mg'], protocols: [] } },
381
469
  action: { type: 'Set Fields', info: { fields: [{ name: 'Specific Med', type: 'Custom Value', value: '{{medication.name}}' }] } },
382
470
  status: 'Active',
383
471
  title: "Medication - Set Fields filtered"
384
472
  })];
385
- case 66:
386
- setFieldsTriggerFiltered = _e.sent();
473
+ case 79:
474
+ setFieldsTriggerFiltered = _h.sent();
387
475
  return [4 /*yield*/, sdk.api.endusers.createOne({})];
388
- case 67:
389
- setFieldsEnduser2 = _e.sent();
476
+ case 80:
477
+ setFieldsEnduser2 = _h.sent();
390
478
  return [4 /*yield*/, sdk.api.enduser_medications.createOne({
391
479
  enduserId: setFieldsEnduser2.id,
392
480
  title: 'Metformin 500mg',
393
481
  })];
394
- case 68:
395
- setFieldsMed2 = _e.sent();
482
+ case 81:
483
+ setFieldsMed2 = _h.sent();
396
484
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
397
- case 69:
398
- _e.sent();
399
- return [4 /*yield*/, (0, testing_1.async_test)("Medication Added - Set Fields with title filter copies medication.name", function () { return sdk.api.endusers.getOne(setFieldsEnduser2.id); }, { onResult: function (e) { var _a; return ((_a = e.fields) === null || _a === void 0 ? void 0 : _a['Specific Med']) === 'Metformin 500mg'; } })];
400
- case 70:
401
- _e.sent();
402
- _e.label = 71;
403
- case 71:
404
- _e.trys.push([71, , 76, 77]);
485
+ case 82:
486
+ _h.sent();
487
+ return [4 /*yield*/, (0, testing_1.async_test)("Medication Added - Set Fields with title filter copies medication.name", function () { return sdk.api.endusers.getOne(setFieldsEnduser2.id); }, { onResult: function (e) { var _a; return ((_a = e.fields) === null || _a === void 0 ? void 0 : _a['Specific Med']) === 'Metformin 500mg'; } })
488
+ // ---- Set Fields with {{medication.category}} Test ----
489
+ ];
490
+ case 83:
491
+ _h.sent();
492
+ // ---- Set Fields with {{medication.category}} Test ----
493
+ (0, testing_1.log_header)("Medication Added - Set Fields with {{medication.category}}");
494
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
495
+ event: { type: 'Medication Added', info: { titles: [], protocols: [] } },
496
+ action: { type: 'Set Fields', info: { fields: [{ name: 'Medication Category', type: 'Custom Value', value: '{{medication.category}}' }] } },
497
+ status: 'Active',
498
+ title: "Medication - Set Fields medication.category"
499
+ })];
500
+ case 84:
501
+ setFieldsCategoryTrigger = _h.sent();
502
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
503
+ case 85:
504
+ setFieldsCategoryEnduser = _h.sent();
505
+ return [4 /*yield*/, sdk.api.enduser_medications.createOne({
506
+ enduserId: setFieldsCategoryEnduser.id,
507
+ title: 'Ozempic 0.5mg',
508
+ category: 'weightloss1',
509
+ })];
510
+ case 86:
511
+ setFieldsCategoryMed = _h.sent();
512
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
513
+ case 87:
514
+ _h.sent();
515
+ return [4 /*yield*/, (0, testing_1.async_test)("Medication Added - Set Fields copies medication.category to enduser field", function () { return sdk.api.endusers.getOne(setFieldsCategoryEnduser.id); }, { onResult: function (e) { var _a; return ((_a = e.fields) === null || _a === void 0 ? void 0 : _a['Medication Category']) === 'weightloss1'; } })
516
+ // Category absent on medication → placeholder resolves to empty string
517
+ ];
518
+ case 88:
519
+ _h.sent();
520
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
521
+ case 89:
522
+ setFieldsCategoryEnduserEmpty = _h.sent();
523
+ return [4 /*yield*/, sdk.api.enduser_medications.createOne({
524
+ enduserId: setFieldsCategoryEnduserEmpty.id,
525
+ title: 'Lisinopril 20mg',
526
+ })];
527
+ case 90:
528
+ setFieldsCategoryMedEmpty = _h.sent();
529
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
530
+ case 91:
531
+ _h.sent();
532
+ return [4 /*yield*/, (0, testing_1.async_test)("Medication Added - Set Fields with no category resolves to empty string", function () { return sdk.api.endusers.getOne(setFieldsCategoryEnduserEmpty.id); }, { onResult: function (e) { var _a; return ((_a = e.fields) === null || _a === void 0 ? void 0 : _a['Medication Category']) === ''; } })];
533
+ case 92:
534
+ _h.sent();
535
+ _h.label = 93;
536
+ case 93:
537
+ _h.trys.push([93, , 101, 102]);
405
538
  return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(setFieldsTrigger.id)];
406
- case 72:
407
- _e.sent();
539
+ case 94:
540
+ _h.sent();
408
541
  return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(setFieldsTriggerFiltered.id)];
409
- case 73:
410
- _e.sent();
542
+ case 95:
543
+ _h.sent();
544
+ return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(setFieldsCategoryTrigger.id)];
545
+ case 96:
546
+ _h.sent();
411
547
  return [4 /*yield*/, sdk.api.endusers.deleteOne(setFieldsEnduser.id)];
412
- case 74:
413
- _e.sent();
548
+ case 97:
549
+ _h.sent();
414
550
  return [4 /*yield*/, sdk.api.endusers.deleteOne(setFieldsEnduser2.id)];
415
- case 75:
416
- _e.sent();
417
- return [3 /*break*/, 77];
418
- case 76: return [7 /*endfinally*/];
419
- case 77: return [2 /*return*/];
551
+ case 98:
552
+ _h.sent();
553
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(setFieldsCategoryEnduser.id)];
554
+ case 99:
555
+ _h.sent();
556
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(setFieldsCategoryEnduserEmpty.id)];
557
+ case 100:
558
+ _h.sent();
559
+ return [3 /*break*/, 102];
560
+ case 101: return [7 /*endfinally*/];
561
+ case 102:
562
+ // ---- titleCondition (compound conditional logic on title) ----
563
+ (0, testing_1.log_header)("Medication Added - titleCondition compound logic");
564
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
565
+ event: {
566
+ type: 'Medication Added',
567
+ info: {
568
+ titles: [],
569
+ protocols: [],
570
+ titleCondition: { condition: { title: { $contains: 'GLP' } } },
571
+ },
572
+ },
573
+ action: { type: 'Add Tags', info: { tags: ['Med-Cond-Contains-GLP'] } },
574
+ status: 'Active',
575
+ title: "Medication - titleCondition contains GLP"
576
+ })];
577
+ case 103:
578
+ c1Trigger = _h.sent();
579
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
580
+ case 104:
581
+ c1MatchEnduser = _h.sent();
582
+ return [4 /*yield*/, sdk.api.enduser_medications.createOne({ enduserId: c1MatchEnduser.id, title: 'Semaglutide GLP-1' })];
583
+ case 105:
584
+ _h.sent();
585
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
586
+ case 106:
587
+ _h.sent();
588
+ return [4 /*yield*/, (0, testing_1.async_test)("titleCondition $contains - matching medication fires", function () { return sdk.api.endusers.getOne(c1MatchEnduser.id); }, { onResult: function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Cond-Contains-GLP')); } })];
589
+ case 107:
590
+ _h.sent();
591
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
592
+ case 108:
593
+ c1MissEnduser = _h.sent();
594
+ return [4 /*yield*/, sdk.api.enduser_medications.createOne({ enduserId: c1MissEnduser.id, title: 'Aspirin' })];
595
+ case 109:
596
+ _h.sent();
597
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
598
+ case 110:
599
+ _h.sent();
600
+ return [4 /*yield*/, (0, testing_1.async_test)("titleCondition $contains - non-matching medication does NOT fire", function () { return sdk.api.endusers.getOne(c1MissEnduser.id); }, { onResult: function (e) { var _a; return !((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Cond-Contains-GLP')); } })
601
+ // C2: $ne — fires for everything except 'Placebo'
602
+ ];
603
+ case 111:
604
+ _h.sent();
605
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
606
+ event: {
607
+ type: 'Medication Added',
608
+ info: {
609
+ titles: [],
610
+ protocols: [],
611
+ titleCondition: { condition: { title: { $ne: 'Placebo' } } },
612
+ },
613
+ },
614
+ action: { type: 'Add Tags', info: { tags: ['Med-Cond-Ne-Placebo'] } },
615
+ status: 'Active',
616
+ title: "Medication - titleCondition ne Placebo"
617
+ })];
618
+ case 112:
619
+ c2Trigger = _h.sent();
620
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
621
+ case 113:
622
+ c2MatchEnduser = _h.sent();
623
+ return [4 /*yield*/, sdk.api.enduser_medications.createOne({ enduserId: c2MatchEnduser.id, title: 'Metformin' })];
624
+ case 114:
625
+ _h.sent();
626
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
627
+ case 115:
628
+ _h.sent();
629
+ return [4 /*yield*/, (0, testing_1.async_test)("titleCondition $ne - non-Placebo medication fires", function () { return sdk.api.endusers.getOne(c2MatchEnduser.id); }, { onResult: function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Cond-Ne-Placebo')); } })];
630
+ case 116:
631
+ _h.sent();
632
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
633
+ case 117:
634
+ c2MissEnduser = _h.sent();
635
+ return [4 /*yield*/, sdk.api.enduser_medications.createOne({ enduserId: c2MissEnduser.id, title: 'Placebo' })];
636
+ case 118:
637
+ _h.sent();
638
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
639
+ case 119:
640
+ _h.sent();
641
+ return [4 /*yield*/, (0, testing_1.async_test)("titleCondition $ne - Placebo medication does NOT fire", function () { return sdk.api.endusers.getOne(c2MissEnduser.id); }, { onResult: function (e) { var _a; return !((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Cond-Ne-Placebo')); } })
642
+ // C3: compound $and — contains 'mg' AND does not contain 'Placebo' (case-sensitive)
643
+ ];
644
+ case 120:
645
+ _h.sent();
646
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
647
+ event: {
648
+ type: 'Medication Added',
649
+ info: {
650
+ titles: [],
651
+ protocols: [],
652
+ titleCondition: {
653
+ $and: [
654
+ { condition: { title: { $contains: 'mg' } } },
655
+ { condition: { title: { $doesNotContain: 'Placebo' } } },
656
+ ],
657
+ },
658
+ },
659
+ },
660
+ action: { type: 'Add Tags', info: { tags: ['Med-Cond-And'] } },
661
+ status: 'Active',
662
+ title: "Medication - titleCondition compound AND"
663
+ })];
664
+ case 121:
665
+ c3Trigger = _h.sent();
666
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
667
+ case 122:
668
+ c3MatchEnduser = _h.sent();
669
+ return [4 /*yield*/, sdk.api.enduser_medications.createOne({ enduserId: c3MatchEnduser.id, title: 'Lisinopril 10mg' })];
670
+ case 123:
671
+ _h.sent();
672
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
673
+ case 124:
674
+ _h.sent();
675
+ return [4 /*yield*/, (0, testing_1.async_test)("titleCondition $and - both pass fires", function () { return sdk.api.endusers.getOne(c3MatchEnduser.id); }, { onResult: function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Cond-And')); } })];
676
+ case 125:
677
+ _h.sent();
678
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
679
+ case 126:
680
+ c3MissEnduser = _h.sent();
681
+ return [4 /*yield*/, sdk.api.enduser_medications.createOne({ enduserId: c3MissEnduser.id, title: 'Placebo 5mg' })];
682
+ case 127:
683
+ _h.sent();
684
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
685
+ case 128:
686
+ _h.sent();
687
+ return [4 /*yield*/, (0, testing_1.async_test)("titleCondition $and - second branch fails does NOT fire", function () { return sdk.api.endusers.getOne(c3MissEnduser.id); }, { onResult: function (e) { var _a; return !((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Cond-And')); } })
688
+ // C4: compound $or — equals 'Aspirin' OR contains 'pril'
689
+ ];
690
+ case 129:
691
+ _h.sent();
692
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
693
+ event: {
694
+ type: 'Medication Added',
695
+ info: {
696
+ titles: [],
697
+ protocols: [],
698
+ titleCondition: {
699
+ $or: [
700
+ { condition: { title: 'Aspirin' } },
701
+ { condition: { title: { $contains: 'pril' } } },
702
+ ],
703
+ },
704
+ },
705
+ },
706
+ action: { type: 'Add Tags', info: { tags: ['Med-Cond-Or'] } },
707
+ status: 'Active',
708
+ title: "Medication - titleCondition compound OR"
709
+ })];
710
+ case 130:
711
+ c4Trigger = _h.sent();
712
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
713
+ case 131:
714
+ c4MatchA = _h.sent();
715
+ return [4 /*yield*/, sdk.api.enduser_medications.createOne({ enduserId: c4MatchA.id, title: 'Aspirin' })];
716
+ case 132:
717
+ _h.sent();
718
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
719
+ case 133:
720
+ _h.sent();
721
+ return [4 /*yield*/, (0, testing_1.async_test)("titleCondition $or - first branch matches fires", function () { return sdk.api.endusers.getOne(c4MatchA.id); }, { onResult: function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Cond-Or')); } })];
722
+ case 134:
723
+ _h.sent();
724
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
725
+ case 135:
726
+ c4MatchB = _h.sent();
727
+ return [4 /*yield*/, sdk.api.enduser_medications.createOne({ enduserId: c4MatchB.id, title: 'Lisinopril' })];
728
+ case 136:
729
+ _h.sent();
730
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
731
+ case 137:
732
+ _h.sent();
733
+ return [4 /*yield*/, (0, testing_1.async_test)("titleCondition $or - second branch matches fires", function () { return sdk.api.endusers.getOne(c4MatchB.id); }, { onResult: function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Cond-Or')); } })];
734
+ case 138:
735
+ _h.sent();
736
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
737
+ case 139:
738
+ c4Miss = _h.sent();
739
+ return [4 /*yield*/, sdk.api.enduser_medications.createOne({ enduserId: c4Miss.id, title: 'Metformin' })];
740
+ case 140:
741
+ _h.sent();
742
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
743
+ case 141:
744
+ _h.sent();
745
+ return [4 /*yield*/, (0, testing_1.async_test)("titleCondition $or - neither branch matches does NOT fire", function () { return sdk.api.endusers.getOne(c4Miss.id); }, { onResult: function (e) { var _a; return !((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Cond-Or')); } })
746
+ // C5: backwards compatibility — no titleCondition, titles array still works
747
+ ];
748
+ case 142:
749
+ _h.sent();
750
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
751
+ event: { type: 'Medication Added', info: { titles: ['Atorvastatin'], protocols: [] } },
752
+ action: { type: 'Add Tags', info: { tags: ['Med-Cond-BackCompat'] } },
753
+ status: 'Active',
754
+ title: "Medication - titles array back-compat"
755
+ })];
756
+ case 143:
757
+ c5Trigger = _h.sent();
758
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
759
+ case 144:
760
+ c5Match = _h.sent();
761
+ return [4 /*yield*/, sdk.api.enduser_medications.createOne({ enduserId: c5Match.id, title: 'Atorvastatin' })];
762
+ case 145:
763
+ _h.sent();
764
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
765
+ case 146:
766
+ _h.sent();
767
+ return [4 /*yield*/, (0, testing_1.async_test)("titles back-compat - title match still fires without titleCondition", function () { return sdk.api.endusers.getOne(c5Match.id); }, { onResult: function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Cond-BackCompat')); } })];
768
+ case 147:
769
+ _h.sent();
770
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
771
+ case 148:
772
+ c5Miss = _h.sent();
773
+ return [4 /*yield*/, sdk.api.enduser_medications.createOne({ enduserId: c5Miss.id, title: 'Aspirin' })];
774
+ case 149:
775
+ _h.sent();
776
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
777
+ case 150:
778
+ _h.sent();
779
+ return [4 /*yield*/, (0, testing_1.async_test)("titles back-compat - non-match does NOT fire without titleCondition", function () { return sdk.api.endusers.getOne(c5Miss.id); }, { onResult: function (e) { var _a; return !((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Cond-BackCompat')); } })
780
+ // C6: combined — titles array AND titleCondition compose (both must pass)
781
+ ];
782
+ case 151:
783
+ _h.sent();
784
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
785
+ event: {
786
+ type: 'Medication Added',
787
+ info: {
788
+ titles: ['Lisinopril'],
789
+ protocols: [],
790
+ titleCondition: { condition: { title: { $contains: 'Lisin' } } },
791
+ },
792
+ },
793
+ action: { type: 'Add Tags', info: { tags: ['Med-Cond-Combined'] } },
794
+ status: 'Active',
795
+ title: "Medication - titles + titleCondition combined"
796
+ })];
797
+ case 152:
798
+ c6Trigger = _h.sent();
799
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
800
+ case 153:
801
+ c6Match = _h.sent();
802
+ return [4 /*yield*/, sdk.api.enduser_medications.createOne({ enduserId: c6Match.id, title: 'Lisinopril' })];
803
+ case 154:
804
+ _h.sent();
805
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)];
806
+ case 155:
807
+ _h.sent();
808
+ return [4 /*yield*/, (0, testing_1.async_test)("titleCondition combined - both pass fires", function () { return sdk.api.endusers.getOne(c6Match.id); }, { onResult: function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('Med-Cond-Combined')); } })];
809
+ case 156:
810
+ _h.sent();
811
+ _h.label = 157;
812
+ case 157:
813
+ _h.trys.push([157, , 176, 177]);
814
+ return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(c1Trigger.id)];
815
+ case 158:
816
+ _h.sent();
817
+ return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(c2Trigger.id)];
818
+ case 159:
819
+ _h.sent();
820
+ return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(c3Trigger.id)];
821
+ case 160:
822
+ _h.sent();
823
+ return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(c4Trigger.id)];
824
+ case 161:
825
+ _h.sent();
826
+ return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(c5Trigger.id)];
827
+ case 162:
828
+ _h.sent();
829
+ return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(c6Trigger.id)];
830
+ case 163:
831
+ _h.sent();
832
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(c1MatchEnduser.id)];
833
+ case 164:
834
+ _h.sent();
835
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(c1MissEnduser.id)];
836
+ case 165:
837
+ _h.sent();
838
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(c2MatchEnduser.id)];
839
+ case 166:
840
+ _h.sent();
841
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(c2MissEnduser.id)];
842
+ case 167:
843
+ _h.sent();
844
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(c3MatchEnduser.id)];
845
+ case 168:
846
+ _h.sent();
847
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(c3MissEnduser.id)];
848
+ case 169:
849
+ _h.sent();
850
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(c4MatchA.id)];
851
+ case 170:
852
+ _h.sent();
853
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(c4MatchB.id)];
854
+ case 171:
855
+ _h.sent();
856
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(c4Miss.id)];
857
+ case 172:
858
+ _h.sent();
859
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(c5Match.id)];
860
+ case 173:
861
+ _h.sent();
862
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(c5Miss.id)];
863
+ case 174:
864
+ _h.sent();
865
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(c6Match.id)];
866
+ case 175:
867
+ _h.sent();
868
+ return [3 /*break*/, 177];
869
+ case 176: return [7 /*endfinally*/];
870
+ case 177: return [2 /*return*/];
420
871
  }
421
872
  });
422
873
  });