@amityco/ts-sdk 7.26.1-e618fbd1.0 → 7.26.1-ecb8825d.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 (33) hide show
  1. package/dist/@types/core/events.d.ts +2 -0
  2. package/dist/@types/core/events.d.ts.map +1 -1
  3. package/dist/@types/core/payload.d.ts +21 -0
  4. package/dist/@types/core/payload.d.ts.map +1 -1
  5. package/dist/@types/domains/client.d.ts +1 -0
  6. package/dist/@types/domains/client.d.ts.map +1 -1
  7. package/dist/channelRepository/events/onChannelMemberRoleAdded.d.ts +22 -0
  8. package/dist/channelRepository/events/onChannelMemberRoleAdded.d.ts.map +1 -1
  9. package/dist/channelRepository/events/onChannelMemberRoleRemoved.d.ts +22 -0
  10. package/dist/channelRepository/events/onChannelMemberRoleRemoved.d.ts.map +1 -1
  11. package/dist/channelRepository/events/tests/onChannelMemberRoleAdded.test.d.ts +2 -0
  12. package/dist/channelRepository/events/tests/onChannelMemberRoleAdded.test.d.ts.map +1 -0
  13. package/dist/channelRepository/events/tests/onChannelMemberRoleRemoved.test.d.ts +2 -0
  14. package/dist/channelRepository/events/tests/onChannelMemberRoleRemoved.test.d.ts.map +1 -0
  15. package/dist/channelRepository/observers/getMyMembership.d.ts.map +1 -1
  16. package/dist/channelRepository/utils/applyChannelRolePayload.d.ts +21 -0
  17. package/dist/channelRepository/utils/applyChannelRolePayload.d.ts.map +1 -0
  18. package/dist/channelRepository/utils/index.d.ts +1 -0
  19. package/dist/channelRepository/utils/index.d.ts.map +1 -1
  20. package/dist/client/api/loginWithAccessToken.d.ts.map +1 -1
  21. package/dist/client/api/logout.d.ts.map +1 -1
  22. package/dist/client/api/renewTokenWithHandler.d.ts.map +1 -1
  23. package/dist/client/api/renewWithAccessToken.d.ts.map +1 -1
  24. package/dist/client/api/tests/renewTokenWithHandler.test.d.ts +2 -0
  25. package/dist/client/api/tests/renewTokenWithHandler.test.d.ts.map +1 -0
  26. package/dist/client/api/tests/renewWithAccessToken.test.d.ts +2 -0
  27. package/dist/client/api/tests/renewWithAccessToken.test.d.ts.map +1 -0
  28. package/dist/core/events.d.ts +3 -3
  29. package/dist/core/events.d.ts.map +1 -1
  30. package/dist/index.cjs.js +204 -78
  31. package/dist/index.esm.js +204 -78
  32. package/dist/index.umd.js +2 -2
  33. package/package.json +1 -1
package/dist/index.cjs.js CHANGED
@@ -3889,6 +3889,48 @@ const updatePinnedMessageCache = (channel, pinnedMessage, users) => {
3889
3889
  return updated;
3890
3890
  };
3891
3891
 
3892
+ /**
3893
+ * Applies a `channel.roleAdded` / `channel.roleRemoved` realtime payload to the cache.
3894
+ *
3895
+ * The event names every member the role request affected together with the
3896
+ * roles and channel-scoped permissions each of them is left holding. That is a
3897
+ * full state, not a delta, so it is written straight over the cached membership.
3898
+ *
3899
+ * Members the SDK has not fetched yet are skipped: the payload does not carry
3900
+ * enough to build a full {@link Amity.Membership} and the live collections only
3901
+ * emit rows that already exist in cache.
3902
+ *
3903
+ * @param payload the `data` of the realtime event
3904
+ * @returns the refreshed channel (when resolvable) and the updated cached memberships
3905
+ *
3906
+ * @hidden
3907
+ */
3908
+ const applyChannelRolePayload = (payload) => {
3909
+ var _a, _b, _c;
3910
+ const { channelId, users = [], channels = [] } = payload;
3911
+ const rawChannel = (_a = channels.find(channel => channel.channelId === channelId)) !== null && _a !== void 0 ? _a : channels[0];
3912
+ let channel;
3913
+ if (rawChannel) {
3914
+ const channelKey = ['channel', 'get', getResolver('channel')(rawChannel)];
3915
+ // the role event does not touch message previews, keep whatever preview is cached
3916
+ const converted = convertFromRaw(rawChannel, { isMessagePreviewUpdated: false });
3917
+ upsertInCache(channelKey, converted);
3918
+ channel = (_c = (_b = pullFromCache(channelKey)) === null || _b === void 0 ? void 0 : _b.data) !== null && _c !== void 0 ? _c : converted;
3919
+ }
3920
+ const members = [];
3921
+ users.forEach(({ userId, roles, permissions }) => {
3922
+ var _a, _b, _c;
3923
+ const memberKey = ['channelUsers', 'get', getResolver('channelUsers')({ channelId, userId })];
3924
+ const cached = (_a = pullFromCache(memberKey)) === null || _a === void 0 ? void 0 : _a.data;
3925
+ if (!cached)
3926
+ return;
3927
+ const updated = Object.assign(Object.assign({}, cached), { roles, permissions });
3928
+ pushToCache(memberKey, updated);
3929
+ members.push((_c = (_b = pullFromCache(memberKey)) === null || _b === void 0 ? void 0 : _b.data) !== null && _c !== void 0 ? _c : updated);
3930
+ });
3931
+ return { channel, members };
3932
+ };
3933
+
3892
3934
  /**
3893
3935
  * ```js
3894
3936
  * import { getSubChannelMarkers } from '@amityco/ts-sdk'
@@ -4074,32 +4116,6 @@ const channelMemberLinkedObject = (channelMember) => {
4074
4116
  } });
4075
4117
  };
4076
4118
 
4077
- /**
4078
- *
4079
- * get current user's membership data
4080
- *
4081
- * @returns the {@link Amity.Membership<'channel'>} objects
4082
- *
4083
- * @category Channel API
4084
- * @async
4085
- */
4086
- const getMyMembership$1 = (channelId) => {
4087
- const client = getActiveClient();
4088
- client.log('channel/getMyMembership.locally');
4089
- const cacheChannelUser = pullFromCache([
4090
- 'channelUsers',
4091
- 'get',
4092
- `${channelId}#${client.userId}`,
4093
- ]);
4094
- if (!cacheChannelUser) {
4095
- throw new ASCApiError('Item not found!', 400400 /* Amity.ServerError.ITEM_NOT_FOUND */, "error" /* Amity.ErrorLevel.ERROR */);
4096
- }
4097
- return {
4098
- data: cacheChannelUser.data,
4099
- cachedAt: cacheChannelUser.cachedAt,
4100
- };
4101
- };
4102
-
4103
4119
  /**
4104
4120
  * ```js
4105
4121
  * import { isEqual } from '~/utils/isEqual'
@@ -4170,15 +4186,41 @@ function isEqual(x, y) {
4170
4186
  }));
4171
4187
  }
4172
4188
 
4189
+ /**
4190
+ *
4191
+ * get current user's membership data
4192
+ *
4193
+ * @returns the {@link Amity.Membership<'channel'>} objects
4194
+ *
4195
+ * @category Channel API
4196
+ * @async
4197
+ */
4198
+ const getMyMembership$1 = (channelId) => {
4199
+ const client = getActiveClient();
4200
+ client.log('channel/getMyMembership.locally');
4201
+ const cacheChannelUser = pullFromCache([
4202
+ 'channelUsers',
4203
+ 'get',
4204
+ `${channelId}#${client.userId}`,
4205
+ ]);
4206
+ if (!cacheChannelUser) {
4207
+ throw new ASCApiError('Item not found!', 400400 /* Amity.ServerError.ITEM_NOT_FOUND */, "error" /* Amity.ErrorLevel.ERROR */);
4208
+ }
4209
+ return {
4210
+ data: cacheChannelUser.data,
4211
+ cachedAt: cacheChannelUser.cachedAt,
4212
+ };
4213
+ };
4214
+
4173
4215
  const callbacks$e = [];
4174
- let mainDisposer$d = null;
4216
+ let mainDisposer$b = null;
4175
4217
  const dispose$e = (cb) => {
4176
4218
  const index = callbacks$e.indexOf(cb);
4177
4219
  if (index > -1) {
4178
4220
  callbacks$e.splice(index, 1);
4179
4221
  }
4180
4222
  if (callbacks$e.length === 0) {
4181
- mainDisposer$d === null || mainDisposer$d === void 0 ? void 0 : mainDisposer$d();
4223
+ mainDisposer$b === null || mainDisposer$b === void 0 ? void 0 : mainDisposer$b();
4182
4224
  }
4183
4225
  };
4184
4226
  const onChannelCreated = (callback) => {
@@ -4189,21 +4231,21 @@ const onChannelCreated = (callback) => {
4189
4231
  ingestInCache(data);
4190
4232
  callbacks$e.forEach(cb => cb(data.channels[0]));
4191
4233
  };
4192
- mainDisposer$d = createEventSubscriber(client, 'onChannelCreated', 'channel.created', filter);
4234
+ mainDisposer$b = createEventSubscriber(client, 'onChannelCreated', 'channel.created', filter);
4193
4235
  }
4194
4236
  callbacks$e.push(callback);
4195
4237
  return () => dispose$e(callback);
4196
4238
  };
4197
4239
 
4198
4240
  const callbacks$d = [];
4199
- const mainDisposers = [];
4241
+ const mainDisposers$2 = [];
4200
4242
  const dispose$d = (cb) => {
4201
4243
  const index = callbacks$d.indexOf(cb);
4202
4244
  if (index > -1) {
4203
4245
  callbacks$d.splice(index, 1);
4204
4246
  }
4205
4247
  if (callbacks$d.length === 0) {
4206
- mainDisposers.forEach(fn => fn());
4248
+ mainDisposers$2.forEach(fn => fn());
4207
4249
  }
4208
4250
  };
4209
4251
  const onChannelUpdated = (callback) => {
@@ -4214,8 +4256,8 @@ const onChannelUpdated = (callback) => {
4214
4256
  ingestInCache(data);
4215
4257
  callbacks$d.forEach(cb => cb(data.channels[0]));
4216
4258
  };
4217
- mainDisposers.push(createEventSubscriber(client, 'onChannelUpdated', 'channel.updated', filter));
4218
- mainDisposers.push(createEventSubscriber(client, 'onChannelUpdated', 'local.channel.updated', payload => callbacks$d.forEach(cb => cb(payload.channels[0]))));
4259
+ mainDisposers$2.push(createEventSubscriber(client, 'onChannelUpdated', 'channel.updated', filter));
4260
+ mainDisposers$2.push(createEventSubscriber(client, 'onChannelUpdated', 'local.channel.updated', payload => callbacks$d.forEach(cb => cb(payload.channels[0]))));
4219
4261
  }
4220
4262
  callbacks$d.push(callback);
4221
4263
  return () => dispose$d(callback);
@@ -4242,14 +4284,14 @@ const deleteChannelUnreadByChannelId = (channelId) => {
4242
4284
  };
4243
4285
 
4244
4286
  const callbacks$c = [];
4245
- let mainDisposer$c = null;
4287
+ let mainDisposer$a = null;
4246
4288
  const dispose$c = (cb) => {
4247
4289
  const index = callbacks$c.indexOf(cb);
4248
4290
  if (index > -1) {
4249
4291
  callbacks$c.splice(index, 1);
4250
4292
  }
4251
4293
  if (callbacks$c.length === 0) {
4252
- mainDisposer$c === null || mainDisposer$c === void 0 ? void 0 : mainDisposer$c();
4294
+ mainDisposer$a === null || mainDisposer$a === void 0 ? void 0 : mainDisposer$a();
4253
4295
  }
4254
4296
  };
4255
4297
  const onChannelDeleted = (callback) => {
@@ -4275,21 +4317,21 @@ const onChannelDeleted = (callback) => {
4275
4317
  ingestInCache(data);
4276
4318
  callbacks$c.forEach(cb => cb(data.channels[0]));
4277
4319
  };
4278
- mainDisposer$c = createEventSubscriber(client, 'onChannelDeleted', 'channel.deleted', filter);
4320
+ mainDisposer$a = createEventSubscriber(client, 'onChannelDeleted', 'channel.deleted', filter);
4279
4321
  }
4280
4322
  callbacks$c.push(callback);
4281
4323
  return () => dispose$c(callback);
4282
4324
  };
4283
4325
 
4284
4326
  const callbacks$b = [];
4285
- let mainDisposer$b = null;
4327
+ let mainDisposer$9 = null;
4286
4328
  const dispose$b = (cb) => {
4287
4329
  const index = callbacks$b.indexOf(cb);
4288
4330
  if (index > -1) {
4289
4331
  callbacks$b.splice(index, 1);
4290
4332
  }
4291
4333
  if (callbacks$b.length === 0) {
4292
- mainDisposer$b === null || mainDisposer$b === void 0 ? void 0 : mainDisposer$b();
4334
+ mainDisposer$9 === null || mainDisposer$9 === void 0 ? void 0 : mainDisposer$9();
4293
4335
  }
4294
4336
  };
4295
4337
  const onChannelJoined = (callback) => {
@@ -4301,21 +4343,21 @@ const onChannelJoined = (callback) => {
4301
4343
  ingestInCache(preparedPayload);
4302
4344
  callbacks$b.forEach(cb => cb(channels[0], channelUsers[0]));
4303
4345
  };
4304
- mainDisposer$b = createEventSubscriber(client, 'onChannelJoined', 'channel.joined', filter);
4346
+ mainDisposer$9 = createEventSubscriber(client, 'onChannelJoined', 'channel.joined', filter);
4305
4347
  }
4306
4348
  callbacks$b.push(callback);
4307
4349
  return () => dispose$b(callback);
4308
4350
  };
4309
4351
 
4310
4352
  const callbacks$a = [];
4311
- let mainDisposer$a = null;
4353
+ let mainDisposer$8 = null;
4312
4354
  const dispose$a = (cb) => {
4313
4355
  const index = callbacks$a.indexOf(cb);
4314
4356
  if (index > -1) {
4315
4357
  callbacks$a.splice(index, 1);
4316
4358
  }
4317
4359
  if (callbacks$a.length === 0) {
4318
- mainDisposer$a === null || mainDisposer$a === void 0 ? void 0 : mainDisposer$a();
4360
+ mainDisposer$8 === null || mainDisposer$8 === void 0 ? void 0 : mainDisposer$8();
4319
4361
  }
4320
4362
  };
4321
4363
  const onChannelLeft = (callback) => {
@@ -4345,21 +4387,21 @@ const onChannelLeft = (callback) => {
4345
4387
  ingestInCache(preparedPayload);
4346
4388
  callbacks$a.forEach(cb => cb(channels[0], channelUsers[0]));
4347
4389
  };
4348
- mainDisposer$a = createEventSubscriber(client, 'onChannelLeft', 'channel.left', filter);
4390
+ mainDisposer$8 = createEventSubscriber(client, 'onChannelLeft', 'channel.left', filter);
4349
4391
  }
4350
4392
  callbacks$a.push(callback);
4351
4393
  return () => dispose$a(callback);
4352
4394
  };
4353
4395
 
4354
4396
  const callbacks$9 = [];
4355
- let mainDisposer$9 = null;
4397
+ let mainDisposer$7 = null;
4356
4398
  const dispose$9 = (cb) => {
4357
4399
  const index = callbacks$9.indexOf(cb);
4358
4400
  if (index > -1) {
4359
4401
  callbacks$9.splice(index, 1);
4360
4402
  }
4361
4403
  if (callbacks$9.length === 0) {
4362
- mainDisposer$9 === null || mainDisposer$9 === void 0 ? void 0 : mainDisposer$9();
4404
+ mainDisposer$7 === null || mainDisposer$7 === void 0 ? void 0 : mainDisposer$7();
4363
4405
  }
4364
4406
  };
4365
4407
  const onChannelSetMuted = (callback) => {
@@ -4381,21 +4423,21 @@ const onChannelSetMuted = (callback) => {
4381
4423
  callbacks$9.forEach(cb => cb(channel));
4382
4424
  }
4383
4425
  };
4384
- mainDisposer$9 = createEventSubscriber(client, 'onChannelMute', 'channel.setMuted', filter);
4426
+ mainDisposer$7 = createEventSubscriber(client, 'onChannelMute', 'channel.setMuted', filter);
4385
4427
  }
4386
4428
  callbacks$9.push(callback);
4387
4429
  return () => dispose$9(callback);
4388
4430
  };
4389
4431
 
4390
4432
  const callbacks$8 = [];
4391
- let mainDisposer$8 = null;
4433
+ let mainDisposer$6 = null;
4392
4434
  const dispose$8 = (cb) => {
4393
4435
  const index = callbacks$8.indexOf(cb);
4394
4436
  if (index > -1) {
4395
4437
  callbacks$8.splice(index, 1);
4396
4438
  }
4397
4439
  if (callbacks$8.length === 0) {
4398
- mainDisposer$8 === null || mainDisposer$8 === void 0 ? void 0 : mainDisposer$8();
4440
+ mainDisposer$6 === null || mainDisposer$6 === void 0 ? void 0 : mainDisposer$6();
4399
4441
  }
4400
4442
  };
4401
4443
  /* begin_public_function
@@ -4432,7 +4474,7 @@ const onChannelMessagePinned = (callback) => {
4432
4474
  const updated = updatePinnedMessageCache(channel, (_a = payload.pinnedMessage) !== null && _a !== void 0 ? _a : null, payload.users);
4433
4475
  callbacks$8.forEach(cb => cb(updated));
4434
4476
  };
4435
- mainDisposer$8 = createEventSubscriber(client, 'onChannelMessagePinned', 'channel.messagePinned', filter);
4477
+ mainDisposer$6 = createEventSubscriber(client, 'onChannelMessagePinned', 'channel.messagePinned', filter);
4436
4478
  }
4437
4479
  callbacks$8.push(callback);
4438
4480
  return () => dispose$8(callback);
@@ -4440,14 +4482,14 @@ const onChannelMessagePinned = (callback) => {
4440
4482
  /* end_public_function */
4441
4483
 
4442
4484
  const callbacks$7 = [];
4443
- let mainDisposer$7 = null;
4485
+ let mainDisposer$5 = null;
4444
4486
  const dispose$7 = (cb) => {
4445
4487
  const index = callbacks$7.indexOf(cb);
4446
4488
  if (index > -1) {
4447
4489
  callbacks$7.splice(index, 1);
4448
4490
  }
4449
4491
  if (callbacks$7.length === 0) {
4450
- mainDisposer$7 === null || mainDisposer$7 === void 0 ? void 0 : mainDisposer$7();
4492
+ mainDisposer$5 === null || mainDisposer$5 === void 0 ? void 0 : mainDisposer$5();
4451
4493
  }
4452
4494
  };
4453
4495
  /* begin_public_function
@@ -4480,7 +4522,7 @@ const onChannelMessageUnpinned = (callback) => {
4480
4522
  const updated = updatePinnedMessageCache(channel, null);
4481
4523
  callbacks$7.forEach(cb => cb(updated));
4482
4524
  };
4483
- mainDisposer$7 = createEventSubscriber(client, 'onChannelMessageUnpinned', 'channel.messageUnpinned', filter);
4525
+ mainDisposer$5 = createEventSubscriber(client, 'onChannelMessageUnpinned', 'channel.messageUnpinned', filter);
4484
4526
  }
4485
4527
  callbacks$7.push(callback);
4486
4528
  return () => dispose$7(callback);
@@ -4488,14 +4530,14 @@ const onChannelMessageUnpinned = (callback) => {
4488
4530
  /* end_public_function */
4489
4531
 
4490
4532
  const callbacks$6 = [];
4491
- let mainDisposer$6 = null;
4533
+ let mainDisposer$4 = null;
4492
4534
  const dispose$6 = (cb) => {
4493
4535
  const index = callbacks$6.indexOf(cb);
4494
4536
  if (index > -1) {
4495
4537
  callbacks$6.splice(index, 1);
4496
4538
  }
4497
4539
  if (callbacks$6.length === 0) {
4498
- mainDisposer$6 === null || mainDisposer$6 === void 0 ? void 0 : mainDisposer$6();
4540
+ mainDisposer$4 === null || mainDisposer$4 === void 0 ? void 0 : mainDisposer$4();
4499
4541
  }
4500
4542
  };
4501
4543
  const onChannelMemberAdded = (callback) => {
@@ -4507,21 +4549,21 @@ const onChannelMemberAdded = (callback) => {
4507
4549
  ingestInCache(preparedPayload);
4508
4550
  callbacks$6.forEach(cb => cb(channels[0], channelUsers.find(cu => cu.membership === 'member')));
4509
4551
  };
4510
- mainDisposer$6 = createEventSubscriber(client, 'onChannelMemberAdded', 'channel.membersAdded', filter);
4552
+ mainDisposer$4 = createEventSubscriber(client, 'onChannelMemberAdded', 'channel.membersAdded', filter);
4511
4553
  }
4512
4554
  callbacks$6.push(callback);
4513
4555
  return () => dispose$6(callback);
4514
4556
  };
4515
4557
 
4516
4558
  const callbacks$5 = [];
4517
- let mainDisposer$5 = null;
4559
+ let mainDisposer$3 = null;
4518
4560
  const dispose$5 = (cb) => {
4519
4561
  const index = callbacks$5.indexOf(cb);
4520
4562
  if (index > -1) {
4521
4563
  callbacks$5.splice(index, 1);
4522
4564
  }
4523
4565
  if (callbacks$5.length === 0) {
4524
- mainDisposer$5 === null || mainDisposer$5 === void 0 ? void 0 : mainDisposer$5();
4566
+ mainDisposer$3 === null || mainDisposer$3 === void 0 ? void 0 : mainDisposer$3();
4525
4567
  }
4526
4568
  };
4527
4569
  const onChannelMemberRemoved = (callback) => {
@@ -4533,21 +4575,21 @@ const onChannelMemberRemoved = (callback) => {
4533
4575
  ingestInCache(preparedPayload);
4534
4576
  callbacks$5.forEach(cb => cb(channels[0], channelUsers[0]));
4535
4577
  };
4536
- mainDisposer$5 = createEventSubscriber(client, 'onChannelMemberRemoved', 'channel.membersRemoved', filter);
4578
+ mainDisposer$3 = createEventSubscriber(client, 'onChannelMemberRemoved', 'channel.membersRemoved', filter);
4537
4579
  }
4538
4580
  callbacks$5.push(callback);
4539
4581
  return () => dispose$5(callback);
4540
4582
  };
4541
4583
 
4542
4584
  const callbacks$4 = [];
4543
- let mainDisposer$4 = null;
4585
+ let mainDisposer$2 = null;
4544
4586
  const dispose$4 = (cb) => {
4545
4587
  const index = callbacks$4.indexOf(cb);
4546
4588
  if (index > -1) {
4547
4589
  callbacks$4.splice(index, 1);
4548
4590
  }
4549
4591
  if (callbacks$4.length === 0) {
4550
- mainDisposer$4 === null || mainDisposer$4 === void 0 ? void 0 : mainDisposer$4();
4592
+ mainDisposer$2 === null || mainDisposer$2 === void 0 ? void 0 : mainDisposer$2();
4551
4593
  }
4552
4594
  };
4553
4595
  const onChannelMemberBanned = (callback) => {
@@ -4567,20 +4609,20 @@ const onChannelMemberBanned = (callback) => {
4567
4609
  ingestInCache(preparedPayload);
4568
4610
  callbacks$4.forEach(cb => cb(channels[0], channelUsers.find(cu => cu.membership === 'banned')));
4569
4611
  };
4570
- mainDisposer$4 = createEventSubscriber(client, 'onChannelMemberBanned', 'channel.banned', filter);
4612
+ mainDisposer$2 = createEventSubscriber(client, 'onChannelMemberBanned', 'channel.banned', filter);
4571
4613
  callbacks$4.push(callback);
4572
4614
  return () => dispose$4(callback);
4573
4615
  };
4574
4616
 
4575
4617
  const callbacks$3 = [];
4576
- let mainDisposer$3 = null;
4618
+ let mainDisposer$1 = null;
4577
4619
  const dispose$3 = (cb) => {
4578
4620
  const index = callbacks$3.indexOf(cb);
4579
4621
  if (index > -1) {
4580
4622
  callbacks$3.splice(index, 1);
4581
4623
  }
4582
4624
  if (callbacks$3.length === 0) {
4583
- mainDisposer$3 === null || mainDisposer$3 === void 0 ? void 0 : mainDisposer$3();
4625
+ mainDisposer$1 === null || mainDisposer$1 === void 0 ? void 0 : mainDisposer$1();
4584
4626
  }
4585
4627
  };
4586
4628
  const onChannelMemberUnbanned = (callback) => {
@@ -4592,59 +4634,127 @@ const onChannelMemberUnbanned = (callback) => {
4592
4634
  ingestInCache(preparedPayload);
4593
4635
  callbacks$3.forEach(cb => cb(channels[0], channelUsers.find(cu => cu.membership === 'none')));
4594
4636
  };
4595
- mainDisposer$3 = createEventSubscriber(client, 'onChannelMemberUnbanned', 'channel.unbanned', filter);
4637
+ mainDisposer$1 = createEventSubscriber(client, 'onChannelMemberUnbanned', 'channel.unbanned', filter);
4596
4638
  }
4597
4639
  callbacks$3.push(callback);
4598
4640
  return () => dispose$3(callback);
4599
4641
  };
4600
4642
 
4601
4643
  const callbacks$2 = [];
4602
- let mainDisposer$2 = null;
4644
+ const mainDisposers$1 = [];
4603
4645
  const dispose$2 = (cb) => {
4604
4646
  const index = callbacks$2.indexOf(cb);
4605
4647
  if (index > -1) {
4606
4648
  callbacks$2.splice(index, 1);
4607
4649
  }
4608
4650
  if (callbacks$2.length === 0) {
4609
- mainDisposer$2 === null || mainDisposer$2 === void 0 ? void 0 : mainDisposer$2();
4651
+ mainDisposers$1.forEach(fn => fn());
4652
+ mainDisposers$1.length = 0;
4610
4653
  }
4611
4654
  };
4655
+ /* begin_public_function
4656
+ id: channel.event.member_role_added
4657
+ */
4658
+ /**
4659
+ * ```js
4660
+ * import { onChannelMemberRoleAdded } from '@amityco/ts-sdk'
4661
+ * const dispose = onChannelMemberRoleAdded((channel, member) => {
4662
+ * // member.roles and member.permissions are the member's resulting state
4663
+ * })
4664
+ * ```
4665
+ *
4666
+ * Fired when a role is added to a member of a {@link Amity.Channel}, either by the
4667
+ * local `ChannelRepository.Moderation.addRole` call or by the `channel.roleAdded` realtime
4668
+ * event coming from any client or the admin console.
4669
+ *
4670
+ * The realtime event reaches every subscriber of the channel topic (see `getChannelTopic`),
4671
+ * not only the actor or the affected members. It carries the affected members' resulting
4672
+ * channel roles and channel-scoped permissions, which are written to cache before the
4673
+ * callback runs. The callback is invoked once per affected member already held in cache.
4674
+ *
4675
+ * @param callback The function to call when the event was fired
4676
+ * @returns an {@link Amity.Unsubscriber} function to run when willing to stop listening
4677
+ *
4678
+ * @category Channel Events
4679
+ */
4612
4680
  const onChannelMemberRoleAdded = (callback) => {
4613
4681
  if (callbacks$2.length === 0) {
4614
4682
  const client = getActiveClient();
4615
- const filter = async (payload) => {
4683
+ const onLocal = async (payload) => {
4616
4684
  const { channels, channelUsers } = payload;
4617
4685
  callbacks$2.forEach(cb => cb(channels[0], channelUsers.find(channelUser => channelUser.membership === 'member')));
4618
4686
  };
4619
- mainDisposer$2 = createEventSubscriber(client, 'onChannelMemberRoleAdded', 'local.channel-moderator.role-added', filter);
4687
+ const onRealtime = (payload) => {
4688
+ const { channel, members } = applyChannelRolePayload(payload);
4689
+ if (!channel)
4690
+ return;
4691
+ members.forEach(member => callbacks$2.forEach(cb => cb(channel, member)));
4692
+ };
4693
+ mainDisposers$1.push(createEventSubscriber(client, 'onChannelMemberRoleAdded', 'local.channel-moderator.role-added', onLocal));
4694
+ mainDisposers$1.push(createEventSubscriber(client, 'onChannelMemberRoleAdded', 'channel.roleAdded', onRealtime));
4620
4695
  }
4621
4696
  callbacks$2.push(callback);
4622
4697
  return () => dispose$2(callback);
4623
4698
  };
4699
+ /* end_public_function */
4624
4700
 
4625
4701
  const callbacks$1 = [];
4626
- let mainDisposer$1 = null;
4702
+ const mainDisposers = [];
4627
4703
  const dispose$1 = (cb) => {
4628
4704
  const index = callbacks$1.indexOf(cb);
4629
4705
  if (index > -1) {
4630
4706
  callbacks$1.splice(index, 1);
4631
4707
  }
4632
4708
  if (callbacks$1.length === 0) {
4633
- mainDisposer$1 === null || mainDisposer$1 === void 0 ? void 0 : mainDisposer$1();
4709
+ mainDisposers.forEach(fn => fn());
4710
+ mainDisposers.length = 0;
4634
4711
  }
4635
4712
  };
4713
+ /* begin_public_function
4714
+ id: channel.event.member_role_removed
4715
+ */
4716
+ /**
4717
+ * ```js
4718
+ * import { onChannelMemberRoleRemoved } from '@amityco/ts-sdk'
4719
+ * const dispose = onChannelMemberRoleRemoved((channel, member) => {
4720
+ * // member.roles and member.permissions are the member's resulting state
4721
+ * })
4722
+ * ```
4723
+ *
4724
+ * Fired when a role is removed from a member of a {@link Amity.Channel}, either by the
4725
+ * local `ChannelRepository.Moderation.removeRole` call or by the `channel.roleRemoved` realtime
4726
+ * event coming from any client or the admin console.
4727
+ *
4728
+ * The realtime event reaches every subscriber of the channel topic (see `getChannelTopic`),
4729
+ * not only the actor or the affected members. It carries the affected members' resulting
4730
+ * channel roles and channel-scoped permissions, which are written to cache before the
4731
+ * callback runs. The callback is invoked once per affected member already held in cache.
4732
+ *
4733
+ * @param callback The function to call when the event was fired
4734
+ * @returns an {@link Amity.Unsubscriber} function to run when willing to stop listening
4735
+ *
4736
+ * @category Channel Events
4737
+ */
4636
4738
  const onChannelMemberRoleRemoved = (callback) => {
4637
4739
  if (callbacks$1.length === 0) {
4638
4740
  const client = getActiveClient();
4639
- const filter = async (payload) => {
4741
+ const onLocal = async (payload) => {
4640
4742
  const { channels, channelUsers } = payload;
4641
4743
  callbacks$1.forEach(cb => cb(channels[0], channelUsers.find(channelUser => channelUser.membership === 'member')));
4642
4744
  };
4643
- mainDisposer$1 = createEventSubscriber(client, 'onChannelMemberRoleRemoved', 'local.channel-moderator.role-removed', filter);
4745
+ const onRealtime = (payload) => {
4746
+ const { channel, members } = applyChannelRolePayload(payload);
4747
+ if (!channel)
4748
+ return;
4749
+ members.forEach(member => callbacks$1.forEach(cb => cb(channel, member)));
4750
+ };
4751
+ mainDisposers.push(createEventSubscriber(client, 'onChannelMemberRoleRemoved', 'local.channel-moderator.role-removed', onLocal));
4752
+ mainDisposers.push(createEventSubscriber(client, 'onChannelMemberRoleRemoved', 'channel.roleRemoved', onRealtime));
4644
4753
  }
4645
4754
  callbacks$1.push(callback);
4646
4755
  return () => dispose$1(callback);
4647
4756
  };
4757
+ /* end_public_function */
4648
4758
 
4649
4759
  /**
4650
4760
  * Fired when a {@link Amity.Channel} has been archived by the active user.
@@ -4768,6 +4878,8 @@ const getMyMembership = (channelId, callback) => {
4768
4878
  disposers.push(onChannelMemberBanned(realtimeRouter));
4769
4879
  disposers.push(onChannelMemberUnbanned(realtimeRouter));
4770
4880
  disposers.push(onChannelSetUserMuted(realtimeRouter));
4881
+ disposers.push(onChannelMemberRoleAdded(realtimeRouter));
4882
+ disposers.push(onChannelMemberRoleRemoved(realtimeRouter));
4771
4883
  onFetch();
4772
4884
  return () => {
4773
4885
  disposers.forEach(fn => fn());
@@ -5616,6 +5728,7 @@ const logout = async () => {
5616
5728
  client.userId = undefined;
5617
5729
  client.token = undefined;
5618
5730
  client.loginType = undefined;
5731
+ client.isGloballyBanned = false;
5619
5732
  client.http.defaults.headers.common.Authorization = '';
5620
5733
  client.http.defaults.metadata = {
5621
5734
  tokenExpiry: '',
@@ -8006,8 +8119,10 @@ const loginWithAccessToken = async (accessToken) => {
8006
8119
  catch (error) {
8007
8120
  // If error occurs, revert session state to not logged in
8008
8121
  setSessionState("notLoggedIn" /* Amity.SessionStates.NOT_LOGGED_IN */);
8009
- // Re-throw if it's already an ASCError
8010
8122
  if (error instanceof ASCError) {
8123
+ if (error.code === 400312 /* Amity.ServerError.GLOBAL_BAN */) {
8124
+ client.isGloballyBanned = true;
8125
+ }
8011
8126
  throw error;
8012
8127
  }
8013
8128
  // Wrap other errors
@@ -8075,11 +8190,18 @@ const renewWithAccessToken = async (accessToken) => {
8075
8190
  await loginWithAccessToken(accessToken);
8076
8191
  }
8077
8192
  else {
8078
- // about to expire
8079
- await validateAccessToken({
8080
- token: tokenObject,
8081
- userId,
8082
- });
8193
+ try {
8194
+ await validateAccessToken({
8195
+ token: tokenObject,
8196
+ userId,
8197
+ });
8198
+ }
8199
+ catch (error) {
8200
+ if (error instanceof ASCError && error.code === 400312 /* Amity.ServerError.GLOBAL_BAN */) {
8201
+ client.isGloballyBanned = true;
8202
+ }
8203
+ throw error;
8204
+ }
8083
8205
  }
8084
8206
  };
8085
8207
  /* end_public_function */
@@ -8096,6 +8218,9 @@ const renewTokenWithHandler = async ({ useScheduledTask = false, }) => {
8096
8218
  if (!client.userId || !client.accessTokenHandler) {
8097
8219
  return;
8098
8220
  }
8221
+ if (client.isGloballyBanned) {
8222
+ return;
8223
+ }
8099
8224
  try {
8100
8225
  const newToken = await client.accessTokenHandler.onTokenRenew(client.userId);
8101
8226
  if (useScheduledTask) {
@@ -22832,7 +22957,8 @@ var index$j = /*#__PURE__*/Object.freeze({
22832
22957
  prepareChannelPayload: prepareChannelPayload,
22833
22958
  findCachedChannelByAnyId: findCachedChannelByAnyId,
22834
22959
  findCachedChannelForPin: findCachedChannelForPin,
22835
- updatePinnedMessageCache: updatePinnedMessageCache
22960
+ updatePinnedMessageCache: updatePinnedMessageCache,
22961
+ applyChannelRolePayload: applyChannelRolePayload
22836
22962
  });
22837
22963
 
22838
22964
  const saveCommunityUsers = (communities, communityUsers) => {