@tellescope/sdk 1.256.6 → 1.256.7

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 (115) hide show
  1. package/lib/cjs/enduser.d.ts +1 -1
  2. package/lib/cjs/enduser.d.ts.map +1 -1
  3. package/lib/cjs/enduser.js +1 -0
  4. package/lib/cjs/enduser.js.map +1 -1
  5. package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts +6 -0
  6. package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts.map +1 -0
  7. package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js +505 -0
  8. package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js.map +1 -0
  9. package/lib/cjs/tests/api_tests/configurations_public_read.test.d.ts +6 -0
  10. package/lib/cjs/tests/api_tests/configurations_public_read.test.d.ts.map +1 -0
  11. package/lib/cjs/tests/api_tests/configurations_public_read.test.js +173 -0
  12. package/lib/cjs/tests/api_tests/configurations_public_read.test.js.map +1 -0
  13. package/lib/cjs/tests/api_tests/form_started_trigger.test.d.ts.map +1 -1
  14. package/lib/cjs/tests/api_tests/form_started_trigger.test.js +87 -24
  15. package/lib/cjs/tests/api_tests/form_started_trigger.test.js.map +1 -1
  16. package/lib/cjs/tests/api_tests/form_translations.test.d.ts +6 -0
  17. package/lib/cjs/tests/api_tests/form_translations.test.d.ts.map +1 -0
  18. package/lib/cjs/tests/api_tests/form_translations.test.js +259 -0
  19. package/lib/cjs/tests/api_tests/form_translations.test.js.map +1 -0
  20. package/lib/cjs/tests/api_tests/group_event_attendee_status_triggers.test.d.ts.map +1 -1
  21. package/lib/cjs/tests/api_tests/group_event_attendee_status_triggers.test.js +340 -124
  22. package/lib/cjs/tests/api_tests/group_event_attendee_status_triggers.test.js.map +1 -1
  23. package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.d.ts +6 -0
  24. package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.d.ts.map +1 -0
  25. package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.js +277 -0
  26. package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.js.map +1 -0
  27. package/lib/cjs/tests/api_tests/purchase_made_trigger.test.d.ts.map +1 -1
  28. package/lib/cjs/tests/api_tests/purchase_made_trigger.test.js +262 -78
  29. package/lib/cjs/tests/api_tests/purchase_made_trigger.test.js.map +1 -1
  30. package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts +31 -0
  31. package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts.map +1 -0
  32. package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js +230 -0
  33. package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js.map +1 -0
  34. package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.d.ts.map +1 -1
  35. package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.js +206 -198
  36. package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.js.map +1 -1
  37. package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.d.ts.map +1 -1
  38. package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.js +343 -80
  39. package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.js.map +1 -1
  40. package/lib/cjs/tests/api_tests/welle_partner_token.test.d.ts.map +1 -1
  41. package/lib/cjs/tests/api_tests/welle_partner_token.test.js +74 -35
  42. package/lib/cjs/tests/api_tests/welle_partner_token.test.js.map +1 -1
  43. package/lib/cjs/tests/stripe_webhook_helpers.d.ts +134 -0
  44. package/lib/cjs/tests/stripe_webhook_helpers.d.ts.map +1 -1
  45. package/lib/cjs/tests/stripe_webhook_helpers.js +126 -1
  46. package/lib/cjs/tests/stripe_webhook_helpers.js.map +1 -1
  47. package/lib/cjs/tests/tests.d.ts.map +1 -1
  48. package/lib/cjs/tests/tests.js +238 -212
  49. package/lib/cjs/tests/tests.js.map +1 -1
  50. package/lib/esm/enduser.d.ts +1 -1
  51. package/lib/esm/enduser.d.ts.map +1 -1
  52. package/lib/esm/enduser.js +1 -0
  53. package/lib/esm/enduser.js.map +1 -1
  54. package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts +6 -0
  55. package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts.map +1 -0
  56. package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js +501 -0
  57. package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js.map +1 -0
  58. package/lib/esm/tests/api_tests/configurations_public_read.test.d.ts +6 -0
  59. package/lib/esm/tests/api_tests/configurations_public_read.test.d.ts.map +1 -0
  60. package/lib/esm/tests/api_tests/configurations_public_read.test.js +169 -0
  61. package/lib/esm/tests/api_tests/configurations_public_read.test.js.map +1 -0
  62. package/lib/esm/tests/api_tests/form_started_trigger.test.d.ts.map +1 -1
  63. package/lib/esm/tests/api_tests/form_started_trigger.test.js +87 -24
  64. package/lib/esm/tests/api_tests/form_started_trigger.test.js.map +1 -1
  65. package/lib/esm/tests/api_tests/form_translations.test.d.ts +6 -0
  66. package/lib/esm/tests/api_tests/form_translations.test.d.ts.map +1 -0
  67. package/lib/esm/tests/api_tests/form_translations.test.js +255 -0
  68. package/lib/esm/tests/api_tests/form_translations.test.js.map +1 -0
  69. package/lib/esm/tests/api_tests/group_event_attendee_status_triggers.test.d.ts.map +1 -1
  70. package/lib/esm/tests/api_tests/group_event_attendee_status_triggers.test.js +340 -124
  71. package/lib/esm/tests/api_tests/group_event_attendee_status_triggers.test.js.map +1 -1
  72. package/lib/esm/tests/api_tests/mdi_trigger_refill.test.d.ts +6 -0
  73. package/lib/esm/tests/api_tests/mdi_trigger_refill.test.d.ts.map +1 -0
  74. package/lib/esm/tests/api_tests/mdi_trigger_refill.test.js +273 -0
  75. package/lib/esm/tests/api_tests/mdi_trigger_refill.test.js.map +1 -0
  76. package/lib/esm/tests/api_tests/purchase_made_trigger.test.d.ts.map +1 -1
  77. package/lib/esm/tests/api_tests/purchase_made_trigger.test.js +262 -78
  78. package/lib/esm/tests/api_tests/purchase_made_trigger.test.js.map +1 -1
  79. package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts +31 -0
  80. package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts.map +1 -0
  81. package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js +226 -0
  82. package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js.map +1 -0
  83. package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.d.ts.map +1 -1
  84. package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.js +206 -198
  85. package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.js.map +1 -1
  86. package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.d.ts.map +1 -1
  87. package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.js +344 -81
  88. package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.js.map +1 -1
  89. package/lib/esm/tests/api_tests/welle_partner_token.test.d.ts.map +1 -1
  90. package/lib/esm/tests/api_tests/welle_partner_token.test.js +74 -35
  91. package/lib/esm/tests/api_tests/welle_partner_token.test.js.map +1 -1
  92. package/lib/esm/tests/stripe_webhook_helpers.d.ts +134 -0
  93. package/lib/esm/tests/stripe_webhook_helpers.d.ts.map +1 -1
  94. package/lib/esm/tests/stripe_webhook_helpers.js +119 -0
  95. package/lib/esm/tests/stripe_webhook_helpers.js.map +1 -1
  96. package/lib/esm/tests/tests.d.ts.map +1 -1
  97. package/lib/esm/tests/tests.js +238 -212
  98. package/lib/esm/tests/tests.js.map +1 -1
  99. package/lib/tsconfig.tsbuildinfo +1 -1
  100. package/package.json +10 -10
  101. package/src/enduser.ts +4 -2
  102. package/src/tests/api_tests/calendar_event_create_and_bulk_triggers.test.ts +293 -0
  103. package/src/tests/api_tests/configurations_public_read.test.ts +116 -0
  104. package/src/tests/api_tests/form_started_trigger.test.ts +49 -1
  105. package/src/tests/api_tests/form_translations.test.ts +205 -0
  106. package/src/tests/api_tests/group_event_attendee_status_triggers.test.ts +135 -0
  107. package/src/tests/api_tests/mdi_trigger_refill.test.ts +184 -0
  108. package/src/tests/api_tests/purchase_made_trigger.test.ts +137 -0
  109. package/src/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.ts +144 -0
  110. package/src/tests/api_tests/security/public_endpoint_auth_field_lock.test.ts +16 -6
  111. package/src/tests/api_tests/stripe_webhook_triggers.test.ts +221 -0
  112. package/src/tests/api_tests/welle_partner_token.test.ts +49 -6
  113. package/src/tests/stripe_webhook_helpers.ts +116 -0
  114. package/src/tests/tests.ts +27 -12
  115. package/test_generated.pdf +0 -0
@@ -151,6 +151,122 @@ export const invoice_payment_failed_event = ({ stripeCustomerId, lines = [], has
151
151
  },
152
152
  })
153
153
 
154
+ /**
155
+ * Embedded Stripe.Discount-shaped object with an *expanded* promotion_code object. Real webhook
156
+ * payloads carry promotion_code as a bare promo_... string (see discount_with_promo_code_ref);
157
+ * the expanded variant reflects the post-expansion shape (and the checkout-session breakdown
158
+ * shape), and matters here because this suite signs payloads with a real HMAC but a fake Stripe
159
+ * API key, so any fallback fetch (promotionCodes.retrieve on a promo_... string) would fail —
160
+ * expanded objects prove the handler extracts codes without outbound Stripe calls.
161
+ */
162
+ export const discount_with_promo_code = (code: string, couponName?: string) => ({
163
+ id: `di_test_${unique_suffix()}`,
164
+ object: 'discount',
165
+ coupon: {
166
+ id: `coupon_test_${unique_suffix()}`,
167
+ object: 'coupon',
168
+ name: couponName ?? null,
169
+ },
170
+ promotion_code: {
171
+ id: `promo_test_${unique_suffix()}`,
172
+ object: 'promotion_code',
173
+ code,
174
+ },
175
+ })
176
+
177
+ /**
178
+ * Mirrors a real invoice.paid webhook discount (verified against a live sandbox event): the
179
+ * embedded coupon carries id + name, but promotion_code is a bare promo_... string reference that
180
+ * only the retrieve fallback can resolve — which fails under this suite's fake API key, so a
181
+ * payload built from this captures the coupon name + id and (in tests) not the promo code.
182
+ */
183
+ export const discount_with_promo_code_ref = ({ couponId, couponName } : { couponId: string, couponName: string }) => ({
184
+ id: `di_test_${unique_suffix()}`,
185
+ object: 'discount',
186
+ coupon: { id: couponId, object: 'coupon', name: couponName },
187
+ promotion_code: `promo_test_${unique_suffix()}`,
188
+ })
189
+
190
+ /** An admin-applied coupon: a name but no promotion code. */
191
+ export const discount_with_coupon = (name: string) => ({
192
+ id: `di_test_${unique_suffix()}`,
193
+ object: 'discount',
194
+ coupon: {
195
+ id: `coupon_test_${unique_suffix()}`,
196
+ object: 'coupon',
197
+ name,
198
+ },
199
+ promotion_code: null,
200
+ })
201
+
202
+ /**
203
+ * An invoice line item for invoice.paid. `description` feeds purchase.title; the expanded
204
+ * price.product object (when a product id is given) avoids the handler's product-name
205
+ * stripe.products.retrieve network fallback.
206
+ */
207
+ export const invoice_paid_line = ({ description, stripeProductId } : {
208
+ description?: string,
209
+ stripeProductId?: string,
210
+ }) => ({
211
+ description: description ?? null,
212
+ price: stripeProductId
213
+ ? { product: { id: stripeProductId, object: 'product', name: description ?? 'Test Product' } }
214
+ : null,
215
+ })
216
+
217
+ /**
218
+ * Minimal invoice.paid envelope. The handler looks up the enduser by stripeCustomerId, so no
219
+ * customer_email/name are needed. Real webhooks embed the single-discount case at `discount` and
220
+ * carry only bare "di_..." string ids in `discounts` (verified against live sandbox events);
221
+ * cases may instead pass expanded objects in `discounts` to prove call-free extraction — see
222
+ * discount_with_promo_code.
223
+ */
224
+ export const invoice_paid_event = ({ stripeCustomerId, lines = [], discounts, discount, amount_paid = 1999 } : {
225
+ stripeCustomerId: string,
226
+ lines?: object[],
227
+ discounts?: (object | string)[],
228
+ discount?: object,
229
+ amount_paid?: number,
230
+ }) => ({
231
+ type: 'invoice.paid',
232
+ data: {
233
+ object: {
234
+ id: `in_test_${unique_suffix()}`,
235
+ customer: stripeCustomerId,
236
+ amount_paid,
237
+ lines: { object: 'list', data: lines, has_more: false },
238
+ discount: discount ?? null,
239
+ discounts: discounts ?? [],
240
+ },
241
+ },
242
+ })
243
+
244
+ /**
245
+ * Minimal charge.succeeded envelope. `customer` must be an embedded object — a bare string id makes
246
+ * the handler call stripe.customers.retrieve, an outbound call the fake API key cannot serve. The
247
+ * handler then matches the enduser by the embedded customer's email. `payment_intent: null` is the
248
+ * deterministic no-coupon case (the coupon lookup only runs for a payment_intent string).
249
+ */
250
+ export const charge_succeeded_event = ({ customer, amount = 1999, currency = 'usd', payment_intent = null } : {
251
+ customer: { id: string, email: string, name?: string },
252
+ amount?: number,
253
+ currency?: string,
254
+ payment_intent?: string | null,
255
+ }) => ({
256
+ type: 'charge.succeeded',
257
+ data: {
258
+ object: {
259
+ id: `ch_test_${unique_suffix()}`,
260
+ customer: { object: 'customer', ...customer },
261
+ amount,
262
+ currency,
263
+ payment_intent,
264
+ invoice: null,
265
+ metadata: {},
266
+ },
267
+ },
268
+ })
269
+
154
270
  /** Minimal customer.subscription.deleted envelope; the handler reads items.data[].plan.product. */
155
271
  export const subscription_deleted_event = ({ stripeCustomerId, stripeProductIds = [] } : {
156
272
  stripeCustomerId: string,
@@ -38,6 +38,8 @@ import {
38
38
  import { Session, APIQuery, EnduserSession } from "../sdk"
39
39
  import { enduser_observations_acknowledge_tests } from "./api_tests/enduser_observations_acknowledge.test"
40
40
  import { translations_tests } from "./api_tests/translations.test"
41
+ import { configurations_public_read_tests } from "./api_tests/configurations_public_read.test"
42
+ import { form_translations_tests } from "./api_tests/form_translations.test"
41
43
  import { embeddables_auth_token_tests } from "./api_tests/embeddables_auth_token.test"
42
44
  import { user_portal_settings_tests } from "./api_tests/user_portal_settings.test"
43
45
  import { integrations_redacted_tests } from "./api_tests/integrations_redacted.test"
@@ -56,6 +58,7 @@ import { purchase_made_trigger_tests } from "./api_tests/purchase_made_trigger.t
56
58
  import { appointment_rescheduled_trigger_tests } from "./api_tests/appointment_rescheduled_trigger.test"
57
59
  import { appointment_no_showed_trigger_tests } from "./api_tests/appointment_no_showed_trigger.test"
58
60
  import { group_event_attendee_status_triggers_tests } from "./api_tests/group_event_attendee_status_triggers.test"
61
+ import { calendar_event_create_and_bulk_triggers_tests } from "./api_tests/calendar_event_create_and_bulk_triggers.test"
59
62
  import { journey_error_branching_tests } from "./api_tests/journey_error_branching.test"
60
63
  import { journey_delete_cancels_actions_tests } from "./api_tests/journey_delete_cancels_actions.test"
61
64
  import { afteraction_day_of_month_delay_tests } from "./api_tests/afteraction_day_of_month_delay.test"
@@ -109,6 +112,7 @@ import { field_redaction_tests } from "./api_tests/field_redaction.test";
109
112
  import { data_sync_redaction_bypass_tests } from "./api_tests/security/F-0001-data-sync-redaction-bypass.test";
110
113
  import { enduser_write_restrictions_tests } from "./api_tests/security/F-0106-F-0110-enduser-write-restrictions.test";
111
114
  import { ai_conversations_rbac_tests } from "./api_tests/security/F-0005-ai-conversations-rbac.test";
115
+ import { develop_health_benefit_verification_rbac_tests } from "./api_tests/security/F-0006-develop-health-benefit-verification-rbac.test";
112
116
  import { cascade_role_rename_cross_tenant_tests } from "./api_tests/security/F-0053-cascade-role-rename-cross-tenant.test";
113
117
  import { self_admin_role_assignment_tests } from "./api_tests/security/F-0076-self-admin-role-assignment.test";
114
118
  import { invite_user_enumeration_tests } from "./api_tests/security/F-0007-invite-user-enumeration.test";
@@ -153,6 +157,7 @@ import { mdi_case_offerings_tests } from "./api_tests/mdi_case_offerings.test";
153
157
  import { beluga_manual_sync_tests } from "./api_tests/beluga_manual_sync.test";
154
158
  import { metriport_push_form_response_tests } from "./api_tests/metriport_push_form_response.test";
155
159
  import { beluga_trigger_refill_tests } from "./api_tests/beluga_trigger_refill.test";
160
+ import { mdi_trigger_refill_tests } from "./api_tests/mdi_trigger_refill.test";
156
161
  import { mdi_webhooks_tests } from "./api_tests/mdi_webhooks.test";
157
162
  import { stripe_webhook_triggers_tests } from "./api_tests/stripe_webhook_triggers.test";
158
163
  import { account_switcher_tests } from "./api_tests/account_switcher.test";
@@ -5752,6 +5757,7 @@ const automation_trigger_tests = async () => {
5752
5757
 
5753
5758
  await appointment_no_showed_trigger_tests({ sdk, sdkNonAdmin })
5754
5759
  await group_event_attendee_status_triggers_tests({ sdk, sdkNonAdmin })
5760
+ await calendar_event_create_and_bulk_triggers_tests({ sdk, sdkNonAdmin })
5755
5761
  await assign_care_team_tests()
5756
5762
  await push_forms_to_portal_group_completion_tests({ sdk, sdkNonAdmin })
5757
5763
  await order_status_equals_tests()
@@ -6994,18 +7000,23 @@ export const self_serve_appointment_booking_tests = async () => {
6994
7000
  restrictedByState: false,
6995
7001
  }),
6996
7002
  { onResult: r => {
6997
- if (r.availabilityBlocks.length !== 4) return false // 2 providers with 1 hour availability for 30 minute meetings
6998
-
6999
- const user1block1_ET = r.availabilityBlocks.find(b => b.userId === sdk.userInfo.id)
7000
- const user2block1_PT = r.availabilityBlocks.find(b => b.userId === sdkNonAdmin.userInfo.id)
7001
-
7002
- if (!(user1block1_ET && user2block1_PT)) return false // should be slots for both users
7003
-
7004
- if (user2block1_PT.startTimeInMS - user1block1_ET.startTimeInMS !== 1000 * 60 * 60 * 3) {
7005
- return false // difference should be three hours, since same availability in different timezones
7006
- }
7007
-
7008
- return true
7003
+ // without a state restriction this endpoint returns availability for EVERY user in the business
7004
+ // with weeklyAvailabilities set, so scope to the two users this test provisions. An unrelated
7005
+ // user (e.g. one stranded by an interrupted suite — reset_db does not clear the users
7006
+ // collection) must not break this assertion.
7007
+ const adminBlocks = r.availabilityBlocks.filter(b => b.userId === sdk.userInfo.id)
7008
+ const nonAdminBlocks = r.availabilityBlocks.filter(b => b.userId === sdkNonAdmin.userInfo.id)
7009
+
7010
+ // 1 hour of availability each for 30 minute meetings, and the admin's duplicate
7011
+ // weeklyAvailabilities entry must not produce extra slots
7012
+ if (adminBlocks.length !== 2) return false
7013
+ if (nonAdminBlocks.length !== 2) return false
7014
+
7015
+ // the server shuffles users, so compare earliest-to-earliest rather than relying on ordering
7016
+ const earliest = (bs: typeof adminBlocks) => Math.min(...bs.map(b => b.startTimeInMS))
7017
+
7018
+ // difference should be three hours, since same availability in different timezones
7019
+ return earliest(nonAdminBlocks) - earliest(adminBlocks) === 1000 * 60 * 60 * 3
7009
7020
  }},
7010
7021
  )
7011
7022
 
@@ -15298,6 +15309,7 @@ const ip_address_form_tests = async () => {
15298
15309
  await beluga_manual_sync_tests({ sdk, sdkNonAdmin })
15299
15310
  await metriport_push_form_response_tests({ sdk, sdkNonAdmin })
15300
15311
  await beluga_trigger_refill_tests({ sdk, sdkNonAdmin })
15312
+ await mdi_trigger_refill_tests({ sdk, sdkNonAdmin })
15301
15313
  await beluga_pharmacy_mappings_tests({ sdk, sdkNonAdmin })
15302
15314
  await mdi_case_offerings_tests({ sdk, sdkNonAdmin })
15303
15315
  await enduser_write_restrictions_tests({ sdk, sdkNonAdmin })
@@ -15317,6 +15329,7 @@ const ip_address_form_tests = async () => {
15317
15329
  await enduser_login_rate_limits_tests({ sdk, sdkNonAdmin })
15318
15330
  await data_sync_redaction_bypass_tests({ sdk, sdkNonAdmin })
15319
15331
  await ai_conversations_rbac_tests({ sdk, sdkNonAdmin })
15332
+ await develop_health_benefit_verification_rbac_tests({ sdk, sdkNonAdmin })
15320
15333
  await cascade_role_rename_cross_tenant_tests({ sdk, sdkNonAdmin })
15321
15334
  await self_admin_role_assignment_tests({ sdk, sdkNonAdmin })
15322
15335
  await sanitize_user_html_xss_tests()
@@ -15393,6 +15406,8 @@ const ip_address_form_tests = async () => {
15393
15406
  await enduser_observations_acknowledge_tests({ sdk, sdkNonAdmin })
15394
15407
  await nutrition_tracking_tests({ sdk, sdkNonAdmin })
15395
15408
  await translations_tests({ sdk, sdkNonAdmin })
15409
+ await configurations_public_read_tests({ sdk, sdkNonAdmin })
15410
+ await form_translations_tests({ sdk, sdkNonAdmin })
15396
15411
  await create_user_notifications_trigger_tests({ sdk })
15397
15412
  await group_mms_active_tests()
15398
15413
  await auto_reply_tests()
Binary file