@novu/js 3.14.1 → 3.15.0-rc.cd43306f31

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.
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkCCAUG7YI_js = require('./chunk-CCAUG7YI.js');
3
+ var chunkYPTYVCVE_js = require('./chunk-YPTYVCVE.js');
4
4
  var chunk7B52C2XE_js = require('./chunk-7B52C2XE.js');
5
5
  var mitt = require('mitt');
6
6
  require('event-target-polyfill');
@@ -25,8 +25,145 @@ var arrayValuesEqual = (arr1, arr2) => {
25
25
  }
26
26
  return arr1.every((value, index) => value === arr2[index]);
27
27
  };
28
+ var MAX_TAG_GROUPS = 30;
29
+ var MAX_TAGS_PER_GROUP = 100;
30
+ var MAX_TOTAL_TAGS = 200;
31
+ var TagsFilterValidationError = class extends Error {
32
+ constructor(message) {
33
+ super(message);
34
+ this.name = "TagsFilterValidationError";
35
+ }
36
+ };
37
+ function validateOrGroupStrings(group, maxLen) {
38
+ if (group.length > maxLen) {
39
+ throw new TagsFilterValidationError(`At most ${maxLen} tags are allowed in a single OR-group`);
40
+ }
41
+ for (const t of group) {
42
+ if (typeof t !== "string") {
43
+ throw new TagsFilterValidationError("Tags must be strings");
44
+ }
45
+ }
46
+ return group;
47
+ }
48
+ function normalizeTagGroupsFromObject(obj) {
49
+ const keys = Object.keys(obj);
50
+ const hasOr = Object.prototype.hasOwnProperty.call(obj, "or");
51
+ const hasAnd = Object.prototype.hasOwnProperty.call(obj, "and");
52
+ if (hasOr && hasAnd) {
53
+ throw new TagsFilterValidationError('Tags filter cannot have both "or" and "and"');
54
+ }
55
+ if (hasOr) {
56
+ if (keys.length !== 1) {
57
+ throw new TagsFilterValidationError("Invalid tags filter object");
58
+ }
59
+ const orVal = obj["or"];
60
+ if (!Array.isArray(orVal)) {
61
+ throw new TagsFilterValidationError('"or" must be an array of strings');
62
+ }
63
+ if (orVal.length === 0) {
64
+ return [];
65
+ }
66
+ const group = validateOrGroupStrings(orVal, MAX_TAGS_PER_GROUP);
67
+ return [group];
68
+ }
69
+ if (hasAnd) {
70
+ if (keys.length !== 1) {
71
+ throw new TagsFilterValidationError("Invalid tags filter object");
72
+ }
73
+ const andVal = obj["and"];
74
+ if (!Array.isArray(andVal)) {
75
+ throw new TagsFilterValidationError('"and" must be an array');
76
+ }
77
+ if (andVal.length === 0) {
78
+ return [];
79
+ }
80
+ if (andVal.length > MAX_TAG_GROUPS) {
81
+ throw new TagsFilterValidationError(`At most ${MAX_TAG_GROUPS} tag groups are allowed`);
82
+ }
83
+ const groups = [];
84
+ let total = 0;
85
+ for (const item of andVal) {
86
+ if (typeof item !== "object" || item === null || Array.isArray(item)) {
87
+ throw new TagsFilterValidationError('Each "and" entry must be an object { or: string[] }');
88
+ }
89
+ const itemKeys = Object.keys(item);
90
+ if (itemKeys.length !== 1 || !Object.prototype.hasOwnProperty.call(item, "or")) {
91
+ throw new TagsFilterValidationError('Each "and" entry must be { or: string[] }');
92
+ }
93
+ const innerOr = item.or;
94
+ if (!Array.isArray(innerOr)) {
95
+ throw new TagsFilterValidationError('"or" must be an array of strings');
96
+ }
97
+ if (innerOr.length === 0) {
98
+ throw new TagsFilterValidationError("Each tag group must be a non-empty array of strings");
99
+ }
100
+ const group = validateOrGroupStrings(innerOr, MAX_TAGS_PER_GROUP);
101
+ total += group.length;
102
+ groups.push(group);
103
+ }
104
+ if (total > MAX_TOTAL_TAGS) {
105
+ throw new TagsFilterValidationError(`At most ${MAX_TOTAL_TAGS} total tag values are allowed`);
106
+ }
107
+ return groups;
108
+ }
109
+ throw new TagsFilterValidationError('Tags filter object must have "or" or "and"');
110
+ }
111
+ function normalizeTagGroups(tags) {
112
+ if (tags === void 0) {
113
+ return [];
114
+ }
115
+ if (tags === null) {
116
+ throw new TagsFilterValidationError("Tags must be an array or object");
117
+ }
118
+ if (typeof tags === "object" && !Array.isArray(tags)) {
119
+ return normalizeTagGroupsFromObject(tags);
120
+ }
121
+ if (!Array.isArray(tags)) {
122
+ throw new TagsFilterValidationError("Tags must be an array or object");
123
+ }
124
+ if (tags.length === 0) {
125
+ return [];
126
+ }
127
+ if (Array.isArray(tags[0])) {
128
+ throw new TagsFilterValidationError(
129
+ "Nested tag arrays are not supported; use { and: [{ or: string[] }, ...] } for multiple OR-groups"
130
+ );
131
+ }
132
+ const flat = tags;
133
+ if (flat.length > MAX_TAGS_PER_GROUP) {
134
+ throw new TagsFilterValidationError(`At most ${MAX_TAGS_PER_GROUP} tags are allowed in a single OR-group`);
135
+ }
136
+ for (const t of flat) {
137
+ if (typeof t !== "string") {
138
+ throw new TagsFilterValidationError("Tags must be strings");
139
+ }
140
+ }
141
+ return [flat];
142
+ }
143
+ function tagsFilterComparableString(tags) {
144
+ if (tags === void 0) {
145
+ return "";
146
+ }
147
+ const groups = normalizeTagGroups(tags);
148
+ if (groups.length === 0) {
149
+ return "";
150
+ }
151
+ const sortedGroups = Array.from(
152
+ new Map(
153
+ groups.map((group) => {
154
+ const canonicalGroup = Array.from(new Set(group)).sort((a, b) => a.localeCompare(b));
155
+ return [JSON.stringify(canonicalGroup), canonicalGroup];
156
+ })
157
+ ).values()
158
+ ).sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b)));
159
+ return JSON.stringify(sortedGroups);
160
+ }
28
161
  var areTagsEqual = (tags1, tags2) => {
29
- return arrayValuesEqual(tags1, tags2) || !tags1 && (tags2 == null ? void 0 : tags2.length) === 0 || (tags1 == null ? void 0 : tags1.length) === 0 && !tags2;
162
+ try {
163
+ return tagsFilterComparableString(tags1) === tagsFilterComparableString(tags2);
164
+ } catch (e) {
165
+ return false;
166
+ }
30
167
  };
31
168
  var areSeveritiesEqual = (el1, el2) => {
32
169
  const severity1 = Array.isArray(el1) ? el1 : el1 ? [el1] : [];
@@ -76,13 +213,19 @@ function checkNotificationDataFilter(notificationData, filterData) {
76
213
  });
77
214
  }
78
215
  function checkNotificationTagFilter(notificationTags, filterTags) {
79
- if (!filterTags || filterTags.length === 0) {
216
+ let groups;
217
+ try {
218
+ groups = normalizeTagGroups(filterTags);
219
+ } catch (e) {
220
+ return false;
221
+ }
222
+ if (groups.length === 0) {
80
223
  return true;
81
224
  }
82
225
  if (!notificationTags || notificationTags.length === 0) {
83
226
  return false;
84
227
  }
85
- return filterTags.some((tag) => notificationTags.includes(tag));
228
+ return groups.every((group) => group.some((tag) => notificationTags.includes(tag)));
86
229
  }
87
230
  function checkBasicFilters(notification, filter) {
88
231
  if (filter.read !== void 0 && notification.isRead !== filter.read) {
@@ -156,7 +299,7 @@ var TopicSubscription = class {
156
299
  return chunk7B52C2XE_js.__async(this, null, function* () {
157
300
  if (chunk7B52C2XE_js.__privateGet(this, _isStale)) {
158
301
  return {
159
- error: new chunkCCAUG7YI_js.NovuError("Cannot update a deleted subscription", new Error("Subscription is stale"))
302
+ error: new chunkYPTYVCVE_js.NovuError("Cannot update a deleted subscription", new Error("Subscription is stale"))
160
303
  };
161
304
  }
162
305
  return updateSubscriptionPreference({
@@ -172,7 +315,7 @@ var TopicSubscription = class {
172
315
  return chunk7B52C2XE_js.__async(this, null, function* () {
173
316
  if (chunk7B52C2XE_js.__privateGet(this, _isStale)) {
174
317
  return {
175
- error: new chunkCCAUG7YI_js.NovuError("Cannot bulk update a deleted subscription", new Error("Subscription is stale"))
318
+ error: new chunkYPTYVCVE_js.NovuError("Cannot bulk update a deleted subscription", new Error("Subscription is stale"))
176
319
  };
177
320
  }
178
321
  return bulkUpdateSubscriptionPreference({
@@ -188,7 +331,7 @@ var TopicSubscription = class {
188
331
  return chunk7B52C2XE_js.__async(this, null, function* () {
189
332
  if (chunk7B52C2XE_js.__privateGet(this, _isStale)) {
190
333
  return {
191
- error: new chunkCCAUG7YI_js.NovuError("Cannot delete an already deleted subscription", new Error("Subscription is stale"))
334
+ error: new chunkYPTYVCVE_js.NovuError("Cannot delete an already deleted subscription", new Error("Subscription is stale"))
192
335
  };
193
336
  }
194
337
  return deleteSubscription({
@@ -206,7 +349,7 @@ _useCache = new WeakMap();
206
349
  _isStale = new WeakMap();
207
350
 
208
351
  // src/subscriptions/helpers.ts
209
- var listSubscriptions = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function* ({
352
+ var listSubscriptions = (_0) => chunk7B52C2XE_js.__async(null, [_0], function* ({
210
353
  emitter,
211
354
  apiService,
212
355
  cache,
@@ -231,10 +374,10 @@ var listSubscriptions = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function*
231
374
  return { data };
232
375
  } catch (error) {
233
376
  emitter.emit("subscriptions.list.resolved", { args, error });
234
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to fetch subscriptions", error) };
377
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to fetch subscriptions", error) };
235
378
  }
236
379
  });
237
- var getSubscription = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function* ({
380
+ var getSubscription = (_0) => chunk7B52C2XE_js.__async(null, [_0], function* ({
238
381
  emitter,
239
382
  apiService,
240
383
  cache,
@@ -261,10 +404,10 @@ var getSubscription = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function* (
261
404
  return { data };
262
405
  } catch (error) {
263
406
  emitter.emit("subscription.get.resolved", { args, error });
264
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to fetch subscription", error) };
407
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to fetch subscription", error) };
265
408
  }
266
409
  });
267
- var createSubscription = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function* ({
410
+ var createSubscription = (_0) => chunk7B52C2XE_js.__async(null, [_0], function* ({
268
411
  emitter,
269
412
  apiService,
270
413
  cache,
@@ -292,10 +435,10 @@ var createSubscription = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function
292
435
  return { data: subscription };
293
436
  } catch (error) {
294
437
  emitter.emit("subscription.create.resolved", { args, error });
295
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to create subscription", error) };
438
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to create subscription", error) };
296
439
  }
297
440
  });
298
- var updateSubscription = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function* ({
441
+ var updateSubscription = (_0) => chunk7B52C2XE_js.__async(null, [_0], function* ({
299
442
  emitter,
300
443
  apiService,
301
444
  cache,
@@ -319,10 +462,10 @@ var updateSubscription = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function
319
462
  return { data: updatedSubscription };
320
463
  } catch (error) {
321
464
  emitter.emit("subscription.update.resolved", { args, error });
322
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to update subscription", error) };
465
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to update subscription", error) };
323
466
  }
324
467
  });
325
- var updateSubscriptionPreference = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function* ({
468
+ var updateSubscriptionPreference = (_0) => chunk7B52C2XE_js.__async(null, [_0], function* ({
326
469
  emitter,
327
470
  apiService,
328
471
  cache,
@@ -358,10 +501,10 @@ var updateSubscriptionPreference = (_0) => chunk7B52C2XE_js.__async(void 0, [_0]
358
501
  return { data: updatedSubscription };
359
502
  } catch (error) {
360
503
  emitter.emit("subscription.preference.update.resolved", { args, error });
361
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to update subscription", error) };
504
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to update subscription", error) };
362
505
  }
363
506
  });
364
- var bulkUpdateSubscriptionPreference = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function* ({
507
+ var bulkUpdateSubscriptionPreference = (_0) => chunk7B52C2XE_js.__async(null, [_0], function* ({
365
508
  emitter,
366
509
  apiService,
367
510
  cache,
@@ -395,10 +538,10 @@ var bulkUpdateSubscriptionPreference = (_0) => chunk7B52C2XE_js.__async(void 0,
395
538
  return { data: preferences };
396
539
  } catch (error) {
397
540
  emitter.emit("subscription.preferences.bulk_update.resolved", { args, error });
398
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to bulk update subscription preferences", error) };
541
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to bulk update subscription preferences", error) };
399
542
  }
400
543
  });
401
- var deleteSubscription = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function* ({
544
+ var deleteSubscription = (_0) => chunk7B52C2XE_js.__async(null, [_0], function* ({
402
545
  emitter,
403
546
  apiService,
404
547
  args
@@ -412,7 +555,7 @@ var deleteSubscription = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function
412
555
  return { data: void 0 };
413
556
  } catch (error) {
414
557
  emitter.emit("subscription.delete.resolved", { args, error });
415
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to delete subscription", error) };
558
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to delete subscription", error) };
416
559
  }
417
560
  });
418
561
 
@@ -479,7 +622,7 @@ var BaseModule = class {
479
622
  this.onSessionError(error);
480
623
  chunk7B52C2XE_js.__privateSet(this, _sessionError, error);
481
624
  chunk7B52C2XE_js.__privateGet(this, _callsQueue).forEach(({ resolve }) => {
482
- resolve({ error: new chunkCCAUG7YI_js.NovuError("Failed to initialize session, please contact the support", error) });
625
+ resolve({ error: new chunkYPTYVCVE_js.NovuError("Failed to initialize session, please contact the support", error) });
483
626
  });
484
627
  chunk7B52C2XE_js.__privateSet(this, _callsQueue, []);
485
628
  }
@@ -496,7 +639,7 @@ var BaseModule = class {
496
639
  }
497
640
  if (chunk7B52C2XE_js.__privateGet(this, _sessionError)) {
498
641
  return Promise.resolve({
499
- error: new chunkCCAUG7YI_js.NovuError("Failed to initialize session, please contact the support", chunk7B52C2XE_js.__privateGet(this, _sessionError))
642
+ error: new chunkYPTYVCVE_js.NovuError("Failed to initialize session, please contact the support", chunk7B52C2XE_js.__privateGet(this, _sessionError))
500
643
  });
501
644
  }
502
645
  return new Promise((resolve, reject) => {
@@ -845,7 +988,7 @@ var Subscriptions = class extends BaseModule {
845
988
  useCache: (_a = options == null ? void 0 : options.useCache) != null ? _a : chunk7B52C2XE_js.__privateGet(this, _useCache4)
846
989
  }),
847
990
  args: chunk7B52C2XE_js.__spreadProps(chunk7B52C2XE_js.__spreadValues({}, args), {
848
- identifier: (_b = args.identifier) != null ? _b : chunkCCAUG7YI_js.buildSubscriptionIdentifier({
991
+ identifier: (_b = args.identifier) != null ? _b : chunkYPTYVCVE_js.buildSubscriptionIdentifier({
849
992
  topicKey: args.topicKey,
850
993
  subscriberId: chunk7B52C2XE_js.__privateGet(this, _subscriber).subscriberId,
851
994
  contextKey: chunk7B52C2XE_js.__privateGet(this, _contextKey)
@@ -900,7 +1043,7 @@ _contextKey = new WeakMap();
900
1043
 
901
1044
  // src/api/http-client.ts
902
1045
  var DEFAULT_API_VERSION = "v1";
903
- var DEFAULT_CLIENT_VERSION = `${"@novu/js"}@${"3.14.1"}`;
1046
+ var DEFAULT_CLIENT_VERSION = `${"@novu/js"}@${"3.15.0-rc.cd43306f31"}`;
904
1047
  var HttpClient = class {
905
1048
  constructor(options = {}) {
906
1049
  // Environment variable for local development that overrides the default API endpoint without affecting the Inbox DX
@@ -1014,6 +1157,39 @@ function combineUrl(...args) {
1014
1157
  // src/api/inbox-service.ts
1015
1158
  var INBOX_ROUTE = "/inbox";
1016
1159
  var INBOX_NOTIFICATIONS_ROUTE = `${INBOX_ROUTE}/notifications`;
1160
+ function appendTagsToSearchParams(searchParams, tags) {
1161
+ if (tags === void 0) {
1162
+ return;
1163
+ }
1164
+ if (Array.isArray(tags)) {
1165
+ if (tags.length === 0) {
1166
+ return;
1167
+ }
1168
+ for (const tag of tags) {
1169
+ searchParams.append("tags[]", tag);
1170
+ }
1171
+ return;
1172
+ }
1173
+ if ("or" in tags) {
1174
+ if (tags.or.length === 0) {
1175
+ return;
1176
+ }
1177
+ for (const tag of tags.or) {
1178
+ searchParams.append("tags[]", tag);
1179
+ }
1180
+ return;
1181
+ }
1182
+ if ("and" in tags) {
1183
+ if (tags.and.length === 0) {
1184
+ return;
1185
+ }
1186
+ tags.and.forEach((group, groupIndex) => {
1187
+ for (const tag of group.or) {
1188
+ searchParams.append(`tags[${groupIndex}][]`, tag);
1189
+ }
1190
+ });
1191
+ }
1192
+ }
1017
1193
  var _httpClient;
1018
1194
  var InboxService = class {
1019
1195
  constructor(options = {}) {
@@ -1065,11 +1241,7 @@ var InboxService = class {
1065
1241
  if (offset) {
1066
1242
  searchParams.append("offset", `${offset}`);
1067
1243
  }
1068
- if (tags) {
1069
- for (const tag of tags) {
1070
- searchParams.append("tags[]", tag);
1071
- }
1072
- }
1244
+ appendTagsToSearchParams(searchParams, tags);
1073
1245
  if (read2 !== void 0) {
1074
1246
  searchParams.append("read", `${read2}`);
1075
1247
  }
@@ -1533,7 +1705,7 @@ var NotificationsCache = class {
1533
1705
  filter: getFilter(cacheKey),
1534
1706
  notifications: []
1535
1707
  };
1536
- const notificationInstance = chunkCCAUG7YI_js.createNotification({
1708
+ const notificationInstance = chunkYPTYVCVE_js.createNotification({
1537
1709
  notification: chunk7B52C2XE_js.__spreadValues({}, notification),
1538
1710
  emitter: chunk7B52C2XE_js.__privateGet(this, _emitter4),
1539
1711
  inboxService: chunk7B52C2XE_js.__privateGet(this, _inboxService4)
@@ -1640,7 +1812,7 @@ var Notifications = class extends BaseModule {
1640
1812
  data = {
1641
1813
  hasMore: response.hasMore,
1642
1814
  filter: response.filter,
1643
- notifications: response.data.map((el) => new chunkCCAUG7YI_js.Notification(el, this._emitter, this._inboxService))
1815
+ notifications: response.data.map((el) => new chunkYPTYVCVE_js.Notification(el, this._emitter, this._inboxService))
1644
1816
  };
1645
1817
  if (shouldUseCache) {
1646
1818
  this.cache.set(args, data);
@@ -1651,7 +1823,7 @@ var Notifications = class extends BaseModule {
1651
1823
  return { data };
1652
1824
  } catch (error) {
1653
1825
  this._emitter.emit("notifications.list.resolved", { args, error });
1654
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to fetch notifications", error) };
1826
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to fetch notifications", error) };
1655
1827
  }
1656
1828
  }));
1657
1829
  });
@@ -1673,7 +1845,7 @@ var Notifications = class extends BaseModule {
1673
1845
  return { data };
1674
1846
  } catch (error) {
1675
1847
  this._emitter.emit("notifications.count.resolved", { args, error });
1676
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to count notifications", error) };
1848
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to count notifications", error) };
1677
1849
  }
1678
1850
  }));
1679
1851
  });
@@ -1682,7 +1854,7 @@ var Notifications = class extends BaseModule {
1682
1854
  return chunk7B52C2XE_js.__async(this, null, function* () {
1683
1855
  return this.callWithSession(
1684
1856
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1685
- return chunkCCAUG7YI_js.read({
1857
+ return chunkYPTYVCVE_js.read({
1686
1858
  emitter: this._emitter,
1687
1859
  apiService: this._inboxService,
1688
1860
  args
@@ -1695,7 +1867,7 @@ var Notifications = class extends BaseModule {
1695
1867
  return chunk7B52C2XE_js.__async(this, null, function* () {
1696
1868
  return this.callWithSession(
1697
1869
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1698
- return chunkCCAUG7YI_js.unread({
1870
+ return chunkYPTYVCVE_js.unread({
1699
1871
  emitter: this._emitter,
1700
1872
  apiService: this._inboxService,
1701
1873
  args
@@ -1708,7 +1880,7 @@ var Notifications = class extends BaseModule {
1708
1880
  return chunk7B52C2XE_js.__async(this, null, function* () {
1709
1881
  return this.callWithSession(
1710
1882
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1711
- return chunkCCAUG7YI_js.seen({
1883
+ return chunkYPTYVCVE_js.seen({
1712
1884
  emitter: this._emitter,
1713
1885
  apiService: this._inboxService,
1714
1886
  args
@@ -1721,7 +1893,7 @@ var Notifications = class extends BaseModule {
1721
1893
  return chunk7B52C2XE_js.__async(this, null, function* () {
1722
1894
  return this.callWithSession(
1723
1895
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1724
- return chunkCCAUG7YI_js.archive({
1896
+ return chunkYPTYVCVE_js.archive({
1725
1897
  emitter: this._emitter,
1726
1898
  apiService: this._inboxService,
1727
1899
  args
@@ -1734,7 +1906,7 @@ var Notifications = class extends BaseModule {
1734
1906
  return chunk7B52C2XE_js.__async(this, null, function* () {
1735
1907
  return this.callWithSession(
1736
1908
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1737
- return chunkCCAUG7YI_js.unarchive({
1909
+ return chunkYPTYVCVE_js.unarchive({
1738
1910
  emitter: this._emitter,
1739
1911
  apiService: this._inboxService,
1740
1912
  args
@@ -1747,7 +1919,7 @@ var Notifications = class extends BaseModule {
1747
1919
  return chunk7B52C2XE_js.__async(this, null, function* () {
1748
1920
  return this.callWithSession(
1749
1921
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1750
- return chunkCCAUG7YI_js.deleteNotification({
1922
+ return chunkYPTYVCVE_js.deleteNotification({
1751
1923
  emitter: this._emitter,
1752
1924
  apiService: this._inboxService,
1753
1925
  args
@@ -1760,7 +1932,7 @@ var Notifications = class extends BaseModule {
1760
1932
  return chunk7B52C2XE_js.__async(this, null, function* () {
1761
1933
  return this.callWithSession(
1762
1934
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1763
- return chunkCCAUG7YI_js.snooze({
1935
+ return chunkYPTYVCVE_js.snooze({
1764
1936
  emitter: this._emitter,
1765
1937
  apiService: this._inboxService,
1766
1938
  args
@@ -1773,7 +1945,7 @@ var Notifications = class extends BaseModule {
1773
1945
  return chunk7B52C2XE_js.__async(this, null, function* () {
1774
1946
  return this.callWithSession(
1775
1947
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1776
- return chunkCCAUG7YI_js.unsnooze({
1948
+ return chunkYPTYVCVE_js.unsnooze({
1777
1949
  emitter: this._emitter,
1778
1950
  apiService: this._inboxService,
1779
1951
  args
@@ -1786,7 +1958,7 @@ var Notifications = class extends BaseModule {
1786
1958
  return chunk7B52C2XE_js.__async(this, null, function* () {
1787
1959
  return this.callWithSession(
1788
1960
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1789
- return chunkCCAUG7YI_js.completeAction({
1961
+ return chunkYPTYVCVE_js.completeAction({
1790
1962
  emitter: this._emitter,
1791
1963
  apiService: this._inboxService,
1792
1964
  args,
@@ -1800,7 +1972,7 @@ var Notifications = class extends BaseModule {
1800
1972
  return chunk7B52C2XE_js.__async(this, null, function* () {
1801
1973
  return this.callWithSession(
1802
1974
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1803
- return chunkCCAUG7YI_js.completeAction({
1975
+ return chunkYPTYVCVE_js.completeAction({
1804
1976
  emitter: this._emitter,
1805
1977
  apiService: this._inboxService,
1806
1978
  args,
@@ -1814,7 +1986,7 @@ var Notifications = class extends BaseModule {
1814
1986
  return chunk7B52C2XE_js.__async(this, null, function* () {
1815
1987
  return this.callWithSession(
1816
1988
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1817
- return chunkCCAUG7YI_js.revertAction({
1989
+ return chunkYPTYVCVE_js.revertAction({
1818
1990
  emitter: this._emitter,
1819
1991
  apiService: this._inboxService,
1820
1992
  args,
@@ -1828,7 +2000,7 @@ var Notifications = class extends BaseModule {
1828
2000
  return chunk7B52C2XE_js.__async(this, null, function* () {
1829
2001
  return this.callWithSession(
1830
2002
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1831
- return chunkCCAUG7YI_js.revertAction({
2003
+ return chunkYPTYVCVE_js.revertAction({
1832
2004
  emitter: this._emitter,
1833
2005
  apiService: this._inboxService,
1834
2006
  args,
@@ -1845,7 +2017,7 @@ var Notifications = class extends BaseModule {
1845
2017
  } = {}) {
1846
2018
  return this.callWithSession(
1847
2019
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1848
- return chunkCCAUG7YI_js.readAll({
2020
+ return chunkYPTYVCVE_js.readAll({
1849
2021
  emitter: this._emitter,
1850
2022
  inboxService: this._inboxService,
1851
2023
  notificationsCache: this.cache,
@@ -1860,14 +2032,14 @@ var Notifications = class extends BaseModule {
1860
2032
  return chunk7B52C2XE_js.__async(this, arguments, function* (args = {}) {
1861
2033
  return this.callWithSession(() => chunk7B52C2XE_js.__async(this, null, function* () {
1862
2034
  if ("notificationIds" in args) {
1863
- return chunkCCAUG7YI_js.seenAll({
2035
+ return chunkYPTYVCVE_js.seenAll({
1864
2036
  emitter: this._emitter,
1865
2037
  inboxService: this._inboxService,
1866
2038
  notificationsCache: this.cache,
1867
2039
  notificationIds: args.notificationIds
1868
2040
  });
1869
2041
  } else {
1870
- return chunkCCAUG7YI_js.seenAll({
2042
+ return chunkYPTYVCVE_js.seenAll({
1871
2043
  emitter: this._emitter,
1872
2044
  inboxService: this._inboxService,
1873
2045
  notificationsCache: this.cache,
@@ -1885,7 +2057,7 @@ var Notifications = class extends BaseModule {
1885
2057
  } = {}) {
1886
2058
  return this.callWithSession(
1887
2059
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1888
- return chunkCCAUG7YI_js.archiveAll({
2060
+ return chunkYPTYVCVE_js.archiveAll({
1889
2061
  emitter: this._emitter,
1890
2062
  inboxService: this._inboxService,
1891
2063
  notificationsCache: this.cache,
@@ -1897,10 +2069,13 @@ var Notifications = class extends BaseModule {
1897
2069
  });
1898
2070
  }
1899
2071
  archiveAllRead() {
1900
- return chunk7B52C2XE_js.__async(this, arguments, function* ({ tags, data } = {}) {
2072
+ return chunk7B52C2XE_js.__async(this, arguments, function* ({
2073
+ tags,
2074
+ data
2075
+ } = {}) {
1901
2076
  return this.callWithSession(
1902
2077
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1903
- return chunkCCAUG7YI_js.archiveAllRead({
2078
+ return chunkYPTYVCVE_js.archiveAllRead({
1904
2079
  emitter: this._emitter,
1905
2080
  inboxService: this._inboxService,
1906
2081
  notificationsCache: this.cache,
@@ -1918,7 +2093,7 @@ var Notifications = class extends BaseModule {
1918
2093
  } = {}) {
1919
2094
  return this.callWithSession(
1920
2095
  () => chunk7B52C2XE_js.__async(this, null, function* () {
1921
- return chunkCCAUG7YI_js.deleteAll({
2096
+ return chunkYPTYVCVE_js.deleteAll({
1922
2097
  emitter: this._emitter,
1923
2098
  inboxService: this._inboxService,
1924
2099
  notificationsCache: this.cache,
@@ -2042,7 +2217,7 @@ _scheduleCache = new WeakMap();
2042
2217
  _useCache7 = new WeakMap();
2043
2218
 
2044
2219
  // src/preferences/helpers.ts
2045
- var updatePreference = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function* ({
2220
+ var updatePreference = (_0) => chunk7B52C2XE_js.__async(null, [_0], function* ({
2046
2221
  emitter,
2047
2222
  apiService,
2048
2223
  cache,
@@ -2087,10 +2262,10 @@ var updatePreference = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function*
2087
2262
  return { data: preference };
2088
2263
  } catch (error) {
2089
2264
  emitter.emit("preference.update.resolved", { args, error });
2090
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to update preference", error) };
2265
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to update preference", error) };
2091
2266
  }
2092
2267
  });
2093
- var bulkUpdatePreference = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function* ({
2268
+ var bulkUpdatePreference = (_0) => chunk7B52C2XE_js.__async(null, [_0], function* ({
2094
2269
  emitter,
2095
2270
  apiService,
2096
2271
  cache,
@@ -2100,7 +2275,7 @@ var bulkUpdatePreference = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], functi
2100
2275
  }) {
2101
2276
  const globalPreference = args.find((arg) => "preference" in arg && arg.preference.level === "global" /* GLOBAL */);
2102
2277
  if (globalPreference) {
2103
- return { error: new chunkCCAUG7YI_js.NovuError("Global preference is not supported in bulk update", "") };
2278
+ return { error: new chunkYPTYVCVE_js.NovuError("Global preference is not supported in bulk update", "") };
2104
2279
  }
2105
2280
  try {
2106
2281
  const optimisticallyUpdatedPreferences = args.map(
@@ -2141,7 +2316,7 @@ var bulkUpdatePreference = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], functi
2141
2316
  return { data: preferences };
2142
2317
  } catch (error) {
2143
2318
  emitter.emit("preferences.bulk_update.resolved", { args, error });
2144
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to bulk update preferences", error) };
2319
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to bulk update preferences", error) };
2145
2320
  }
2146
2321
  });
2147
2322
  var optimisticUpdateWorkflowPreferences = ({
@@ -2183,7 +2358,7 @@ var optimisticUpdateWorkflowPreferences = ({
2183
2358
  }
2184
2359
  });
2185
2360
  };
2186
- var updateSchedule = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function* ({
2361
+ var updateSchedule = (_0) => chunk7B52C2XE_js.__async(null, [_0], function* ({
2187
2362
  emitter,
2188
2363
  apiService,
2189
2364
  cache,
@@ -2231,7 +2406,7 @@ var updateSchedule = (_0) => chunk7B52C2XE_js.__async(void 0, [_0], function* ({
2231
2406
  return { data: updatedSchedule };
2232
2407
  } catch (error) {
2233
2408
  emitter.emit("preference.schedule.update.resolved", { args, error });
2234
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to update preference", error) };
2409
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to update preference", error) };
2235
2410
  }
2236
2411
  });
2237
2412
 
@@ -2821,7 +2996,7 @@ var PartySocketClient = class extends BaseModule {
2821
2996
  const data = JSON.parse(event.data);
2822
2997
  if (data.event === "notification_received" /* RECEIVED */) {
2823
2998
  chunk7B52C2XE_js.__privateGet(this, _emitter10).emit(NOTIFICATION_RECEIVED, {
2824
- result: new chunkCCAUG7YI_js.Notification(mapToNotification(data.data.message), chunk7B52C2XE_js.__privateGet(this, _emitter10), this._inboxService)
2999
+ result: new chunkYPTYVCVE_js.Notification(mapToNotification(data.data.message), chunk7B52C2XE_js.__privateGet(this, _emitter10), this._inboxService)
2825
3000
  });
2826
3001
  }
2827
3002
  } catch (error) {
@@ -2930,7 +3105,7 @@ handleConnectSocket_fn = function() {
2930
3105
  yield chunk7B52C2XE_js.__privateMethod(this, _PartySocketClient_instances, initializeSocket_fn).call(this);
2931
3106
  return {};
2932
3107
  } catch (error) {
2933
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to initialize the PartySocket", error) };
3108
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to initialize the PartySocket", error) };
2934
3109
  }
2935
3110
  });
2936
3111
  };
@@ -2942,7 +3117,7 @@ handleDisconnectSocket_fn = function() {
2942
3117
  chunk7B52C2XE_js.__privateSet(this, _partySocket, void 0);
2943
3118
  return {};
2944
3119
  } catch (error) {
2945
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to disconnect from the PartySocket", error) };
3120
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to disconnect from the PartySocket", error) };
2946
3121
  }
2947
3122
  });
2948
3123
  };
@@ -3057,7 +3232,7 @@ var Socket = class extends BaseModule {
3057
3232
  chunk7B52C2XE_js.__privateAdd(this, _socketOptions2);
3058
3233
  chunk7B52C2XE_js.__privateAdd(this, _notificationReceived2, ({ message }) => {
3059
3234
  chunk7B52C2XE_js.__privateGet(this, _emitter11).emit(NOTIFICATION_RECEIVED2, {
3060
- result: new chunkCCAUG7YI_js.Notification(mapToNotification2(message), chunk7B52C2XE_js.__privateGet(this, _emitter11), this._inboxService)
3235
+ result: new chunkYPTYVCVE_js.Notification(mapToNotification2(message), chunk7B52C2XE_js.__privateGet(this, _emitter11), this._inboxService)
3061
3236
  });
3062
3237
  });
3063
3238
  chunk7B52C2XE_js.__privateAdd(this, _unseenCountChanged2, ({ unseenCount }) => {
@@ -3138,7 +3313,7 @@ handleConnectSocket_fn2 = function() {
3138
3313
  yield chunk7B52C2XE_js.__privateMethod(this, _Socket_instances, initializeSocket_fn2).call(this);
3139
3314
  return {};
3140
3315
  } catch (error) {
3141
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to initialize the socket", error) };
3316
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to initialize the socket", error) };
3142
3317
  }
3143
3318
  });
3144
3319
  };
@@ -3150,7 +3325,7 @@ handleDisconnectSocket_fn2 = function() {
3150
3325
  chunk7B52C2XE_js.__privateSet(this, _socketIo, void 0);
3151
3326
  return {};
3152
3327
  } catch (error) {
3153
- return { error: new chunkCCAUG7YI_js.NovuError("Failed to disconnect from the socket", error) };
3328
+ return { error: new chunkYPTYVCVE_js.NovuError("Failed to disconnect from the socket", error) };
3154
3329
  }
3155
3330
  });
3156
3331
  };
@@ -3226,8 +3401,8 @@ var Novu = class {
3226
3401
  apiUrl: options.apiUrl || options.backendUrl
3227
3402
  }));
3228
3403
  chunk7B52C2XE_js.__privateSet(this, _emitter12, new NovuEventEmitter());
3229
- const subscriber = chunkCCAUG7YI_js.buildSubscriber({ subscriberId: options.subscriberId, subscriber: options.subscriber });
3230
- const contextKey = chunkCCAUG7YI_js.buildContextKey(options.context);
3404
+ const subscriber = chunkYPTYVCVE_js.buildSubscriber({ subscriberId: options.subscriberId, subscriber: options.subscriber });
3405
+ const contextKey = chunkYPTYVCVE_js.buildContextKey(options.context);
3231
3406
  chunk7B52C2XE_js.__privateSet(this, _session, new Session(
3232
3407
  {
3233
3408
  applicationIdentifier: options.applicationIdentifier || "",
@@ -3290,7 +3465,7 @@ var Novu = class {
3290
3465
  return chunk7B52C2XE_js.__privateGet(this, _options2);
3291
3466
  }
3292
3467
  get contextKey() {
3293
- return chunkCCAUG7YI_js.buildContextKey(chunk7B52C2XE_js.__privateGet(this, _session).context);
3468
+ return chunkYPTYVCVE_js.buildContextKey(chunk7B52C2XE_js.__privateGet(this, _session).context);
3294
3469
  }
3295
3470
  clearCache() {
3296
3471
  this.notifications.cache.clearAll();
@@ -3359,3 +3534,4 @@ exports.checkNotificationMatchesFilter = checkNotificationMatchesFilter;
3359
3534
  exports.checkNotificationTagFilter = checkNotificationTagFilter;
3360
3535
  exports.isBrowser = isBrowser;
3361
3536
  exports.isSameFilter = isSameFilter;
3537
+ exports.normalizeTagGroups = normalizeTagGroups;