stream-chat 9.27.2 → 9.29.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.
@@ -66,6 +66,7 @@ __export(index_exports, {
66
66
  BuiltinRoles: () => BuiltinRoles,
67
67
  Campaign: () => Campaign,
68
68
  Channel: () => Channel,
69
+ ChannelBatchUpdater: () => ChannelBatchUpdater,
69
70
  ChannelManager: () => ChannelManager,
70
71
  ChannelSearchSource: () => ChannelSearchSource,
71
72
  ChannelState: () => ChannelState,
@@ -335,6 +336,190 @@ var Campaign = class {
335
336
  }
336
337
  };
337
338
 
339
+ // src/channel_batch_updater.ts
340
+ var ChannelBatchUpdater = class {
341
+ constructor(client) {
342
+ this.client = client;
343
+ }
344
+ // Member operations
345
+ /**
346
+ * addMembers - Add members to channels matching the filter
347
+ *
348
+ * @param {UpdateChannelsBatchFilters} filter Filter to select channels
349
+ * @param {string[] | NewMemberPayload[]} members Members to add
350
+ * @return {Promise<APIResponse & UpdateChannelsBatchResponse>} The server response
351
+ */
352
+ async addMembers(filter, members) {
353
+ return await this.client.updateChannelsBatch({
354
+ operation: "addMembers",
355
+ filter,
356
+ members
357
+ });
358
+ }
359
+ /**
360
+ * removeMembers - Remove members from channels matching the filter
361
+ *
362
+ * @param {UpdateChannelsBatchFilters} filter Filter to select channels
363
+ * @param {string[]} members Member IDs to remove
364
+ * @return {Promise<APIResponse & UpdateChannelsBatchResponse>} The server response
365
+ */
366
+ async removeMembers(filter, members) {
367
+ return await this.client.updateChannelsBatch({
368
+ operation: "removeMembers",
369
+ filter,
370
+ members
371
+ });
372
+ }
373
+ /**
374
+ * inviteMembers - Invite members to channels matching the filter
375
+ *
376
+ * @param {UpdateChannelsBatchFilters} filter Filter to select channels
377
+ * @param {string[] | NewMemberPayload[]} members Members to invite
378
+ * @return {Promise<APIResponse & UpdateChannelsBatchResponse>} The server response
379
+ */
380
+ async inviteMembers(filter, members) {
381
+ return await this.client.updateChannelsBatch({
382
+ operation: "inviteMembers",
383
+ filter,
384
+ members
385
+ });
386
+ }
387
+ /**
388
+ * addModerators - Add moderators to channels matching the filter
389
+ *
390
+ * @param {UpdateChannelsBatchFilters} filter Filter to select channels
391
+ * @param {string[]} members Member IDs to promote to moderator
392
+ * @return {Promise<APIResponse & UpdateChannelsBatchResponse>} The server response
393
+ */
394
+ async addModerators(filter, members) {
395
+ return await this.client.updateChannelsBatch({
396
+ operation: "addModerators",
397
+ filter,
398
+ members
399
+ });
400
+ }
401
+ /**
402
+ * demoteModerators - Remove moderator role from members in channels matching the filter
403
+ *
404
+ * @param {UpdateChannelsBatchFilters} filter Filter to select channels
405
+ * @param {string[]} members Member IDs to demote
406
+ * @return {Promise<APIResponse & UpdateChannelsBatchResponse>} The server response
407
+ */
408
+ async demoteModerators(filter, members) {
409
+ return await this.client.updateChannelsBatch({
410
+ operation: "demoteModerators",
411
+ filter,
412
+ members
413
+ });
414
+ }
415
+ /**
416
+ * assignRoles - Assign roles to members in channels matching the filter
417
+ *
418
+ * @param {UpdateChannelsBatchFilters} filter Filter to select channels
419
+ * @param {NewMemberPayload[]} members Members with role assignments
420
+ * @return {Promise<APIResponse & UpdateChannelsBatchResponse>} The server response
421
+ */
422
+ async assignRoles(filter, members) {
423
+ return await this.client.updateChannelsBatch({
424
+ operation: "assignRoles",
425
+ filter,
426
+ members
427
+ });
428
+ }
429
+ // Visibility operations
430
+ /**
431
+ * hide - Hide channels matching the filter
432
+ *
433
+ * @param {UpdateChannelsBatchFilters} filter Filter to select channels
434
+ * @return {Promise<APIResponse & UpdateChannelsBatchResponse>} The server response
435
+ */
436
+ async hide(filter) {
437
+ return await this.client.updateChannelsBatch({
438
+ operation: "hide",
439
+ filter
440
+ });
441
+ }
442
+ /**
443
+ * show - Show channels matching the filter
444
+ *
445
+ * @param {UpdateChannelsBatchFilters} filter Filter to select channels
446
+ * @return {Promise<APIResponse & UpdateChannelsBatchResponse>} The server response
447
+ */
448
+ async show(filter) {
449
+ return await this.client.updateChannelsBatch({
450
+ operation: "show",
451
+ filter
452
+ });
453
+ }
454
+ /**
455
+ * archive - Archive channels matching the filter
456
+ *
457
+ * @param {UpdateChannelsBatchFilters} filter Filter to select channels
458
+ * @return {Promise<APIResponse & UpdateChannelsBatchResponse>} The server response
459
+ */
460
+ async archive(filter) {
461
+ return await this.client.updateChannelsBatch({
462
+ operation: "archive",
463
+ filter
464
+ });
465
+ }
466
+ /**
467
+ * unarchive - Unarchive channels matching the filter
468
+ *
469
+ * @param {UpdateChannelsBatchFilters} filter Filter to select channels
470
+ * @return {Promise<APIResponse & UpdateChannelsBatchResponse>} The server response
471
+ */
472
+ async unarchive(filter) {
473
+ return await this.client.updateChannelsBatch({
474
+ operation: "unarchive",
475
+ filter
476
+ });
477
+ }
478
+ // Data operations
479
+ /**
480
+ * updateData - Update data on channels matching the filter
481
+ *
482
+ * @param {UpdateChannelsBatchFilters} filter Filter to select channels
483
+ * @param {BatchChannelDataUpdate} data Data to update
484
+ * @return {Promise<APIResponse & UpdateChannelsBatchResponse>} The server response
485
+ */
486
+ async updateData(filter, data) {
487
+ return await this.client.updateChannelsBatch({
488
+ operation: "updateData",
489
+ filter,
490
+ data
491
+ });
492
+ }
493
+ /**
494
+ * addFilterTags - Add filter tags to channels matching the filter
495
+ *
496
+ * @param {UpdateChannelsBatchFilters} filter Filter to select channels
497
+ * @param {string[]} tags Tags to add
498
+ * @return {Promise<APIResponse & UpdateChannelsBatchResponse>} The server response
499
+ */
500
+ async addFilterTags(filter, tags) {
501
+ return await this.client.updateChannelsBatch({
502
+ operation: "addFilterTags",
503
+ filter,
504
+ filter_tags_update: tags
505
+ });
506
+ }
507
+ /**
508
+ * removeFilterTags - Remove filter tags from channels matching the filter
509
+ *
510
+ * @param {UpdateChannelsBatchFilters} filter Filter to select channels
511
+ * @param {string[]} tags Tags to remove
512
+ * @return {Promise<APIResponse & UpdateChannelsBatchResponse>} The server response
513
+ */
514
+ async removeFilterTags(filter, tags) {
515
+ return await this.client.updateChannelsBatch({
516
+ operation: "removeFilterTags",
517
+ filter,
518
+ filter_tags_update: tags
519
+ });
520
+ }
521
+ };
522
+
338
523
  // src/client.ts
339
524
  var import_axios3 = __toESM(require("axios"));
340
525
  var import_https = __toESM(require_https());
@@ -5375,10 +5560,11 @@ var getTriggerCharWithToken = ({
5375
5560
  isCommand = false,
5376
5561
  acceptTrailingSpaces = true
5377
5562
  }) => {
5378
- const triggerNorWhitespace = `[^\\s${trigger}]*`;
5563
+ const escapedTrigger = escapeRegExp(trigger);
5564
+ const triggerNorWhitespace = `[^\\s${escapedTrigger}]*`;
5379
5565
  const match = text.match(
5380
5566
  new RegExp(
5381
- isCommand ? `^[${trigger}]${triggerNorWhitespace}$` : acceptTrailingSpaces ? `(?!^|\\W)?[${trigger}]${triggerNorWhitespace}\\s?${triggerNorWhitespace}$` : `(?!^|\\W)?[${trigger}]${triggerNorWhitespace}$`,
5567
+ isCommand ? `^[${escapedTrigger}]${triggerNorWhitespace}$` : acceptTrailingSpaces ? `(?!^|\\W)?[${escapedTrigger}]${triggerNorWhitespace}\\s?${triggerNorWhitespace}$` : `(?!^|\\W)?[${escapedTrigger}]${triggerNorWhitespace}$`,
5382
5568
  "g"
5383
5569
  )
5384
5570
  );
@@ -9003,11 +9189,13 @@ var Channel = class {
9003
9189
  * unbanUser - Removes the bans for a user on a channel
9004
9190
  *
9005
9191
  * @param {string} targetUserID
9192
+ * @param {UnBanUserOptions} options
9006
9193
  * @returns {Promise<APIResponse>}
9007
9194
  */
9008
- async unbanUser(targetUserID) {
9195
+ async unbanUser(targetUserID, options) {
9009
9196
  this._checkInitialized();
9010
9197
  return await this.getClient().unbanUser(targetUserID, {
9198
+ ...options,
9011
9199
  type: this.type,
9012
9200
  id: this.id
9013
9201
  });
@@ -13593,6 +13781,20 @@ var StreamChat = class _StreamChat {
13593
13781
  }
13594
13782
  });
13595
13783
  }
13784
+ /**
13785
+ * queryFutureChannelBans - Query future channel bans created by a user
13786
+ *
13787
+ * @param {QueryFutureChannelBansOptions} options Option object with user_id, exclude_expired_bans, limit, offset
13788
+ * @returns {Promise<FutureChannelBansResponse>} Future Channel Bans Response
13789
+ */
13790
+ async queryFutureChannelBans(options = {}) {
13791
+ return await this.get(
13792
+ this.baseURL + "/query_future_channel_bans",
13793
+ {
13794
+ payload: options
13795
+ }
13796
+ );
13797
+ }
13596
13798
  /**
13597
13799
  * queryMessageFlags - Query message flags
13598
13800
  *
@@ -13612,10 +13814,10 @@ var StreamChat = class _StreamChat {
13612
13814
  /**
13613
13815
  * queryChannelsRequest - Queries channels and returns the raw response
13614
13816
  *
13615
- * @param {ChannelFilters} filterConditions object MongoDB style filters
13817
+ * @param {ChannelFilters} filterConditions object MongoDB style filters. Can be empty object when using predefined_filter in options.
13616
13818
  * @param {ChannelSort} [sort] Sort options, for instance {created_at: -1}.
13617
13819
  * When using multiple fields, make sure you use array of objects to guarantee field order, for instance [{last_updated: -1}, {created_at: 1}]
13618
- * @param {ChannelOptions} [options] Options object
13820
+ * @param {ChannelOptions} [options] Options object. Can include predefined_filter, filter_values, and sort_values for using predefined filters.
13619
13821
  *
13620
13822
  * @return {Promise<Array<ChannelAPIResponse>>} search channels response
13621
13823
  */
@@ -13629,11 +13831,18 @@ var StreamChat = class _StreamChat {
13629
13831
  if (!this._hasConnectionID()) {
13630
13832
  defaultOptions.watch = false;
13631
13833
  }
13632
- const payload = {
13834
+ const { predefined_filter, filter_values, sort_values, ...restOptions } = options;
13835
+ const payload = predefined_filter ? {
13836
+ predefined_filter,
13837
+ filter_values,
13838
+ sort_values,
13839
+ ...defaultOptions,
13840
+ ...restOptions
13841
+ } : {
13633
13842
  filter_conditions: filterConditions,
13634
13843
  sort: normalizeQuerySort(sort),
13635
13844
  ...defaultOptions,
13636
- ...options
13845
+ ...restOptions
13637
13846
  };
13638
13847
  const data = await this.post(
13639
13848
  this.baseURL + "/channels",
@@ -14740,7 +14949,7 @@ var StreamChat = class _StreamChat {
14740
14949
  if (this.userAgent) {
14741
14950
  return this.userAgent;
14742
14951
  }
14743
- const version = "9.27.2";
14952
+ const version = "9.29.0";
14744
14953
  const clientBundle = "browser-cjs";
14745
14954
  let userAgentString = "";
14746
14955
  if (this.sdkIdentifier) {
@@ -15039,6 +15248,14 @@ var StreamChat = class _StreamChat {
15039
15248
  }
15040
15249
  return new Campaign(this, idOrData, data);
15041
15250
  }
15251
+ /**
15252
+ * channelBatchUpdater - Returns a ChannelBatchUpdater instance for batch channel operations
15253
+ *
15254
+ * @return {ChannelBatchUpdater} A ChannelBatchUpdater instance
15255
+ */
15256
+ channelBatchUpdater() {
15257
+ return new ChannelBatchUpdater(this);
15258
+ }
15042
15259
  segment(type, idOrData, data) {
15043
15260
  if (typeof idOrData === "string") {
15044
15261
  return new Segment(this, type, idOrData, data);
@@ -15048,7 +15265,7 @@ var StreamChat = class _StreamChat {
15048
15265
  validateServerSideAuth() {
15049
15266
  if (!this.secret) {
15050
15267
  throw new Error(
15051
- "Campaigns is a server-side only feature. Please initialize the client with a secret to use this feature."
15268
+ "This feature can be used server-side only. Please initialize the client with a secret to use this feature."
15052
15269
  );
15053
15270
  }
15054
15271
  }
@@ -15901,6 +16118,91 @@ var StreamChat = class _StreamChat {
15901
16118
  syncDeliveredCandidates(collections) {
15902
16119
  this.messageDeliveryReporter.syncDeliveredCandidates(collections);
15903
16120
  }
16121
+ /**
16122
+ * Update Channels Batch
16123
+ *
16124
+ * @param {UpdateChannelsBatchOptions} payload for updating channels in batch
16125
+ * @return {Promise<APIResponse & UpdateChannelsBatchResponse>} The server response
16126
+ */
16127
+ async updateChannelsBatch(payload) {
16128
+ return await this.put(
16129
+ this.baseURL + `/channels/batch`,
16130
+ payload
16131
+ );
16132
+ }
16133
+ /**
16134
+ * createPredefinedFilter - Creates a new predefined filter (server-side only)
16135
+ *
16136
+ * @param {CreatePredefinedFilterOptions} options Predefined filter options
16137
+ *
16138
+ * @return {Promise<PredefinedFilterResponse>} The created predefined filter
16139
+ */
16140
+ async createPredefinedFilter(options) {
16141
+ this.validateServerSideAuth();
16142
+ return await this.post(
16143
+ `${this.baseURL}/predefined_filters`,
16144
+ options
16145
+ );
16146
+ }
16147
+ /**
16148
+ * getPredefinedFilter - Gets a predefined filter by name (server-side only)
16149
+ *
16150
+ * @param {string} name Predefined filter name
16151
+ *
16152
+ * @return {Promise<PredefinedFilterResponse>} The predefined filter
16153
+ */
16154
+ async getPredefinedFilter(name) {
16155
+ this.validateServerSideAuth();
16156
+ return await this.get(
16157
+ `${this.baseURL}/predefined_filters/${encodeURIComponent(name)}`
16158
+ );
16159
+ }
16160
+ /**
16161
+ * updatePredefinedFilter - Updates a predefined filter (server-side only)
16162
+ *
16163
+ * @param {string} name Predefined filter name
16164
+ * @param {UpdatePredefinedFilterOptions} options Predefined filter options
16165
+ *
16166
+ * @return {Promise<PredefinedFilterResponse>} The updated predefined filter
16167
+ */
16168
+ async updatePredefinedFilter(name, options) {
16169
+ this.validateServerSideAuth();
16170
+ return await this.put(
16171
+ `${this.baseURL}/predefined_filters/${encodeURIComponent(name)}`,
16172
+ options
16173
+ );
16174
+ }
16175
+ /**
16176
+ * deletePredefinedFilter - Deletes a predefined filter (server-side only)
16177
+ *
16178
+ * @param {string} name Predefined filter name
16179
+ *
16180
+ * @return {Promise<APIResponse>} The server response
16181
+ */
16182
+ async deletePredefinedFilter(name) {
16183
+ this.validateServerSideAuth();
16184
+ return await this.delete(
16185
+ `${this.baseURL}/predefined_filters/${encodeURIComponent(name)}`
16186
+ );
16187
+ }
16188
+ /**
16189
+ * listPredefinedFilters - Lists all predefined filters (server-side only)
16190
+ *
16191
+ * @param {ListPredefinedFiltersOptions} options Query options
16192
+ *
16193
+ * @return {Promise<ListPredefinedFiltersResponse>} The list of predefined filters
16194
+ */
16195
+ async listPredefinedFilters(options = {}) {
16196
+ this.validateServerSideAuth();
16197
+ const { sort, ...paginationOptions } = options;
16198
+ return await this.get(
16199
+ `${this.baseURL}/predefined_filters`,
16200
+ {
16201
+ ...paginationOptions,
16202
+ ...sort ? { sort: JSON.stringify(sort) } : {}
16203
+ }
16204
+ );
16205
+ }
15904
16206
  };
15905
16207
 
15906
16208
  // src/events.ts