@webex/plugin-memberships 3.0.0-beta.8 → 3.0.0-bnr.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.
package/README.md CHANGED
@@ -29,15 +29,12 @@ npm install --save @webex/plugin-memberships
29
29
  ## Usage
30
30
 
31
31
  ```js
32
-
33
32
  const Webex = require('webex');
34
33
 
35
34
  const webex = Webex.init();
36
- webex.memberships.get(id)
37
- .then((membership) => {
38
- console.log(membership);
39
- })
40
-
35
+ webex.memberships.get(id).then((membership) => {
36
+ console.log(membership);
37
+ });
41
38
  ```
42
39
 
43
40
  ## Maintainers
package/dist/index.js CHANGED
@@ -1,26 +1,19 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.default = void 0;
12
-
13
9
  require("@webex/internal-plugin-conversation");
14
-
15
10
  require("@webex/internal-plugin-mercury");
16
-
17
11
  var _webexCore = require("@webex/webex-core");
18
-
19
12
  var _memberships = _interopRequireDefault(require("./memberships"));
20
-
21
13
  /*!
22
14
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
23
15
  */
16
+
24
17
  (0, _webexCore.registerPlugin)('memberships', _memberships.default);
25
18
  var _default = _memberships.default;
26
19
  exports.default = _default;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["registerPlugin","Memberships"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-conversation';\nimport '@webex/internal-plugin-mercury';\n\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Memberships from './memberships';\n\nregisterPlugin('memberships', Memberships);\n\nexport default Memberships;\n"],"mappings":";;;;;;;;;;;;AAIA;;AACA;;AAEA;;AAEA;;AATA;AACA;AACA;AASA,IAAAA,yBAAA,EAAe,aAAf,EAA8BC,oBAA9B;eAEeA,oB"}
1
+ {"version":3,"names":["registerPlugin","Memberships"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-conversation';\nimport '@webex/internal-plugin-mercury';\n\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Memberships from './memberships';\n\nregisterPlugin('memberships', Memberships);\n\nexport default Memberships;\n"],"mappings":";;;;;;;;AAIA;AACA;AAEA;AAEA;AATA;AACA;AACA;;AASA,IAAAA,yBAAc,EAAC,aAAa,EAAEC,oBAAW,CAAC;AAAC,eAE5BA,oBAAW;AAAA"}
@@ -1,29 +1,22 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.default = void 0;
12
-
13
9
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
14
-
15
10
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
16
-
17
11
  var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
18
-
19
12
  var _common = require("@webex/common");
20
-
21
13
  var _webexCore = require("@webex/webex-core");
22
-
23
14
  /*!
24
15
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
25
16
  */
17
+
26
18
  var debug = require('debug')('memberships');
19
+
27
20
  /**
28
21
  * @typedef {Object} MembershipObject
29
22
  * @property {string} id - Unique identifier for the membership
@@ -43,8 +36,6 @@ var debug = require('debug')('memberships');
43
36
  * @class
44
37
  * @name Memberships
45
38
  */
46
-
47
-
48
39
  var Memberships = _webexCore.WebexPlugin.extend({
49
40
  /**
50
41
  * Register to listen for incoming membership events
@@ -91,11 +82,11 @@ var Memberships = _webexCore.WebexPlugin.extend({
91
82
  */
92
83
  listen: function listen() {
93
84
  var _this = this;
94
-
95
85
  // Create a common envelope that we will wrap all events in
96
86
  return (0, _common.createEventEnvelope)(this.webex, _common.SDK_EVENT.EXTERNAL.RESOURCE.MEMBERSHIPS).then(function (envelope) {
97
- _this.eventEnvelope = envelope; // Register to listen to events
87
+ _this.eventEnvelope = envelope;
98
88
 
89
+ // Register to listen to events
99
90
  return _this.webex.internal.mercury.connect().then(function () {
100
91
  _this.listenTo(_this.webex.internal.mercury, _common.SDK_EVENT.INTERNAL.WEBEX_ACTIVITY, function (event) {
101
92
  return _this.onWebexApiEvent(event);
@@ -103,7 +94,6 @@ var Memberships = _webexCore.WebexPlugin.extend({
103
94
  });
104
95
  });
105
96
  },
106
-
107
97
  /**
108
98
  * Adds a person to a room. The person can be added by ID (`personId`) or by
109
99
  * Email Address (`personEmail`). The person can be optionally added to the room
@@ -143,7 +133,6 @@ var Memberships = _webexCore.WebexPlugin.extend({
143
133
  return res.body;
144
134
  });
145
135
  },
146
-
147
136
  /**
148
137
  * Returns a single membership.
149
138
  * @instance
@@ -179,7 +168,6 @@ var Memberships = _webexCore.WebexPlugin.extend({
179
168
  return res.body.items || res.body;
180
169
  });
181
170
  },
182
-
183
171
  /**
184
172
  * Returns a list of memberships. In most cases the results will only contain
185
173
  * rooms that the authenticated user is a member of. You can filter the results
@@ -218,7 +206,6 @@ var Memberships = _webexCore.WebexPlugin.extend({
218
206
  */
219
207
  list: function list(options) {
220
208
  var _this2 = this;
221
-
222
209
  return this.request({
223
210
  service: 'hydra',
224
211
  resource: 'memberships',
@@ -227,7 +214,6 @@ var Memberships = _webexCore.WebexPlugin.extend({
227
214
  return new _webexCore.Page(res, _this2.webex);
228
215
  });
229
216
  },
230
-
231
217
  /**
232
218
  * Returns a list of memberships with details about the lastSeenId for each
233
219
  * user, allowing a client to indicate "read status" in a space GUI
@@ -257,7 +243,6 @@ var Memberships = _webexCore.WebexPlugin.extend({
257
243
  */
258
244
  listWithReadStatus: function listWithReadStatus(options) {
259
245
  var _this3 = this;
260
-
261
246
  var deconstructedId = (0, _common.deconstructHydraId)(options.roomId);
262
247
  var conversation = {
263
248
  id: deconstructedId.id,
@@ -269,7 +254,6 @@ var Memberships = _webexCore.WebexPlugin.extend({
269
254
  participantAckFilter: 'all',
270
255
  // show lastAck info for each participant
271
256
  activitiesLimit: 0 // don't send the whole history of activity
272
-
273
257
  }).then(function (resp) {
274
258
  try {
275
259
  // We keep track of the last read message by each user
@@ -282,7 +266,6 @@ var Memberships = _webexCore.WebexPlugin.extend({
282
266
  var roomType = (0, _common.getHydraRoomType)(resp.tags);
283
267
  var myId = _this3.webex.internal.me.id;
284
268
  var isRoomHidden = resp.tags.includes(_common.SDK_EVENT.INTERNAL.ACTIVITY_TAG.HIDDEN);
285
-
286
269
  for (var i = 0; i < participants.length; i += 1) {
287
270
  var participant = participants[i];
288
271
  var participantInfo = {
@@ -294,28 +277,24 @@ var Memberships = _webexCore.WebexPlugin.extend({
294
277
  personOrgId: (0, _common.buildHydraOrgId)(participant.orgId, conversation.cluster),
295
278
  isMonitor: false,
296
279
  // deprecated, but included for completeness
297
- roomType: roomType // created is not available in the conversations payload
298
-
280
+ roomType: roomType
281
+ // created is not available in the conversations payload
299
282
  };
300
283
 
301
284
  if (isRoomHidden && participantInfo.personId === myId) {
302
285
  participantInfo.isRoomHidden = isRoomHidden;
303
286
  }
304
-
305
287
  if ('roomProperties' in participant) {
306
288
  if ('lastSeenActivityDate' in participant.roomProperties) {
307
289
  participantInfo.lastSeenId = (0, _common.buildHydraMessageId)(participant.roomProperties.lastSeenActivityUUID, conversation.cluster);
308
290
  participantInfo.lastSeenDate = participant.roomProperties.lastSeenActivityDate;
309
291
  }
310
-
311
292
  if ('isModerator' in participant.roomProperties) {
312
293
  participantInfo.isModerator = participant.roomProperties.isModerator;
313
294
  }
314
295
  }
315
-
316
296
  lastReadInfo.items.push(participantInfo);
317
297
  }
318
-
319
298
  return _promise.default.resolve(lastReadInfo);
320
299
  } catch (e) {
321
300
  return _promise.default.reject(e);
@@ -324,7 +303,6 @@ var Memberships = _webexCore.WebexPlugin.extend({
324
303
  });
325
304
  });
326
305
  },
327
-
328
306
  /**
329
307
  * Deletes a single membership.
330
308
  * @instance
@@ -372,11 +350,9 @@ var Memberships = _webexCore.WebexPlugin.extend({
372
350
  if (res.statusCode === 204) {
373
351
  return undefined;
374
352
  }
375
-
376
353
  return res.body;
377
354
  });
378
355
  },
379
-
380
356
  /**
381
357
  * Used to update a single membership's properties
382
358
  * @instance
@@ -450,7 +426,6 @@ var Memberships = _webexCore.WebexPlugin.extend({
450
426
  return res.body;
451
427
  });
452
428
  },
453
-
454
429
  /**
455
430
  * Updates the lastSeenId attribute of a membership.
456
431
  * Call this method to send a "read receipt" for a given message.
@@ -463,7 +438,6 @@ var Memberships = _webexCore.WebexPlugin.extend({
463
438
  */
464
439
  updateLastSeen: function updateLastSeen(message) {
465
440
  var _this4 = this;
466
-
467
441
  var activity = {
468
442
  id: (0, _common.deconstructHydraId)(message.id).id
469
443
  };
@@ -492,7 +466,6 @@ var Memberships = _webexCore.WebexPlugin.extend({
492
466
  });
493
467
  });
494
468
  },
495
-
496
469
  /**
497
470
  * This function is called when an internal membership events fires,
498
471
  * if the user registered for these events with the public listen() method.
@@ -504,10 +477,9 @@ var Memberships = _webexCore.WebexPlugin.extend({
504
477
  */
505
478
  onWebexApiEvent: function onWebexApiEvent(event) {
506
479
  var _this5 = this;
507
-
508
480
  var activity = event.data.activity;
509
- /* eslint-disable no-case-declarations */
510
481
 
482
+ /* eslint-disable no-case-declarations */
511
483
  switch (activity.verb) {
512
484
  case _common.SDK_EVENT.INTERNAL.ACTIVITY_VERB.CREATE:
513
485
  var membershipCreatedEventDataArray = activity.object.participants.items.map(function (participant) {
@@ -519,59 +491,44 @@ var Memberships = _webexCore.WebexPlugin.extend({
519
491
  membershipCreatedEventDataArray.forEach(function (data) {
520
492
  if (data) {
521
493
  debug("membership \"created\" payload: ".concat((0, _stringify.default)(data)));
522
-
523
494
  _this5.trigger(_common.SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED, data);
524
495
  }
525
496
  });
526
497
  break;
527
-
528
498
  case _common.SDK_EVENT.INTERNAL.ACTIVITY_VERB.ADD:
529
499
  var membershipCreatedEventData = this.getMembershipEvent(activity, _common.SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED);
530
-
531
500
  if (membershipCreatedEventData) {
532
501
  debug("membership \"created\" payload: ".concat((0, _stringify.default)(membershipCreatedEventData)));
533
502
  this.trigger(_common.SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED, membershipCreatedEventData);
534
503
  }
535
-
536
504
  break;
537
-
538
505
  case _common.SDK_EVENT.INTERNAL.ACTIVITY_VERB.LEAVE:
539
506
  var membershipDeletedEventData = this.getMembershipEvent(activity, _common.SDK_EVENT.EXTERNAL.EVENT_TYPE.DELETED);
540
-
541
507
  if (membershipDeletedEventData) {
542
508
  debug("membership \"deleted\" payload: ".concat((0, _stringify.default)(membershipDeletedEventData)));
543
509
  this.trigger(_common.SDK_EVENT.EXTERNAL.EVENT_TYPE.DELETED, membershipDeletedEventData);
544
510
  }
545
-
546
511
  break;
547
-
548
512
  case _common.SDK_EVENT.INTERNAL.ACTIVITY_VERB.ADD_MODERATOR:
549
513
  case _common.SDK_EVENT.INTERNAL.ACTIVITY_VERB.REMOVE_MODERATOR:
550
514
  case _common.SDK_EVENT.INTERNAL.ACTIVITY_VERB.HIDE:
551
515
  var membershipUpdatedEventData = this.getMembershipEvent(activity, _common.SDK_EVENT.EXTERNAL.EVENT_TYPE.UPDATED);
552
-
553
516
  if (membershipUpdatedEventData) {
554
517
  debug("membership \"updated\" payload: ".concat((0, _stringify.default)(membershipUpdatedEventData)));
555
518
  this.trigger(_common.SDK_EVENT.EXTERNAL.EVENT_TYPE.UPDATED, membershipUpdatedEventData);
556
519
  }
557
-
558
520
  break;
559
-
560
521
  case _common.SDK_EVENT.INTERNAL.ACTIVITY_VERB.ACKNOWLEDGE:
561
522
  var membershipSeenEventData = this.getMembershipEvent(activity, _common.SDK_EVENT.EXTERNAL.EVENT_TYPE.SEEN);
562
-
563
523
  if (membershipSeenEventData) {
564
524
  debug("membership \"updated\" payload: ".concat((0, _stringify.default)(membershipSeenEventData)));
565
525
  this.trigger(_common.SDK_EVENT.EXTERNAL.EVENT_TYPE.SEEN, membershipSeenEventData);
566
526
  }
567
-
568
527
  break;
569
-
570
528
  default:
571
529
  break;
572
530
  }
573
531
  },
574
-
575
532
  /**
576
533
  * Constructs the data object for an event on the memberships resource,
577
534
  * adhering to Hydra's Webhook data structure memberships.
@@ -591,48 +548,45 @@ var Memberships = _webexCore.WebexPlugin.extend({
591
548
  sdkEvent.event = event;
592
549
  sdkEvent.data.created = activity.published;
593
550
  sdkEvent.actorId = (0, _common.buildHydraPersonId)(activity.actor.entryUUID, cluster);
594
-
595
551
  if (activity.verb !== _common.SDK_EVENT.INTERNAL.ACTIVITY_VERB.HIDE) {
596
552
  sdkEvent.data.roomId = (0, _common.buildHydraRoomId)(activity.target.id, cluster);
597
553
  sdkEvent.data.roomType = (0, _common.getHydraRoomType)(activity.target.tags);
598
554
  sdkEvent.data.isRoomHidden = false; // any activity unhides a space.
599
555
  } else {
600
556
  sdkEvent.data.roomId = (0, _common.buildHydraRoomId)(activity.object.id, cluster);
601
- sdkEvent.data.roomType = _common.SDK_EVENT.EXTERNAL.SPACE_TYPE.DIRECT; // currently hidden attribute is only set on 1-1
602
-
557
+ sdkEvent.data.roomType = _common.SDK_EVENT.EXTERNAL.SPACE_TYPE.DIRECT;
558
+ // currently hidden attribute is only set on 1-1
603
559
  sdkEvent.data.isRoomHidden = true;
604
560
  }
605
-
606
561
  if (activity.verb !== _common.SDK_EVENT.INTERNAL.ACTIVITY_VERB.ACKNOWLEDGE) {
607
562
  if (activity.object.roomProperties && activity.object.roomProperties.isModerator) {
608
563
  sdkEvent.data.isModerator = true;
609
564
  } else {
610
565
  sdkEvent.data.isModerator = false;
611
566
  }
612
- } // This is deprecated but still sent in the webhooks
567
+ }
568
+ // This is deprecated but still sent in the webhooks
613
569
  // We won't send it for our new SDK events
614
570
  // sdkEvent.data.isMonitor = false;
615
571
 
616
-
617
572
  if (activity.verb === _common.SDK_EVENT.INTERNAL.ACTIVITY_VERB.ACKNOWLEDGE) {
618
573
  // For a read receipt the person is the "actor" or the one who did the reading
619
- member = _common.SDK_EVENT.INTERNAL.ACTIVITY_FIELD.ACTOR; // The space with the read message is the "target"
620
-
621
- space = _common.SDK_EVENT.INTERNAL.ACTIVITY_FIELD.TARGET; // And the "object" is the message that was last seen
622
-
574
+ member = _common.SDK_EVENT.INTERNAL.ACTIVITY_FIELD.ACTOR;
575
+ // The space with the read message is the "target"
576
+ space = _common.SDK_EVENT.INTERNAL.ACTIVITY_FIELD.TARGET;
577
+ // And the "object" is the message that was last seen
623
578
  sdkEvent.data.lastSeenId = (0, _common.buildHydraMessageId)(activity.object.id, cluster);
624
579
  } else if (activity.verb === _common.SDK_EVENT.INTERNAL.ACTIVITY_VERB.HIDE) {
625
580
  // For a hide activity the person is also the "actor"
626
- member = _common.SDK_EVENT.INTERNAL.ACTIVITY_FIELD.ACTOR; // But the space is now the "object"
627
-
581
+ member = _common.SDK_EVENT.INTERNAL.ACTIVITY_FIELD.ACTOR;
582
+ // But the space is now the "object"
628
583
  space = _common.SDK_EVENT.INTERNAL.ACTIVITY_FIELD.OBJECT;
629
584
  } else {
630
585
  // For most memberships events the person is the 'object"
631
- member = _common.SDK_EVENT.INTERNAL.ACTIVITY_FIELD.OBJECT; // and the space is the "target"
632
-
586
+ member = _common.SDK_EVENT.INTERNAL.ACTIVITY_FIELD.OBJECT;
587
+ // and the space is the "target"
633
588
  space = _common.SDK_EVENT.INTERNAL.ACTIVITY_FIELD.TARGET;
634
589
  }
635
-
636
590
  sdkEvent.data.id = (0, _common.buildHydraMembershipId)(activity[member].entryUUID, activity[space].id, cluster);
637
591
  sdkEvent.data.personId = (0, _common.buildHydraPersonId)(activity[member].entryUUID, cluster);
638
592
  sdkEvent.data.personEmail = activity[member].emailAddress || activity[member].entryEmail;
@@ -644,9 +598,8 @@ var Memberships = _webexCore.WebexPlugin.extend({
644
598
  return null;
645
599
  }
646
600
  },
647
- version: "3.0.0-beta.8"
601
+ version: "3.0.0-bnr.0"
648
602
  });
649
-
650
603
  var _default = Memberships;
651
604
  exports.default = _default;
652
605
  //# sourceMappingURL=memberships.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["debug","require","Memberships","WebexPlugin","extend","listen","createEventEnvelope","webex","SDK_EVENT","EXTERNAL","RESOURCE","MEMBERSHIPS","then","envelope","eventEnvelope","internal","mercury","connect","listenTo","INTERNAL","WEBEX_ACTIVITY","event","onWebexApiEvent","create","membership","request","method","service","resource","body","res","get","id","items","list","options","qs","Page","listWithReadStatus","deconstructedId","deconstructHydraId","roomId","conversation","cluster","ensureMyIdIsAvailable","services","waitForCatalog","participantAckFilter","activitiesLimit","resp","roomUUID","buildHydraRoomId","participants","lastReadInfo","roomType","getHydraRoomType","tags","myId","me","isRoomHidden","includes","ACTIVITY_TAG","HIDDEN","i","length","participant","participantInfo","buildHydraMembershipId","entryUUID","personId","buildHydraPersonId","personEmail","entryEmailAddress","entryEmail","personDisplayName","displayName","personOrgId","buildHydraOrgId","orgId","isMonitor","roomProperties","lastSeenId","buildHydraMessageId","lastSeenActivityUUID","lastSeenDate","lastSeenActivityDate","isModerator","push","resolve","e","reject","remove","statusCode","undefined","update","updateLastSeen","message","activity","acknowledge","ack","object","actor","target","emailAddress","created","published","data","verb","ACTIVITY_VERB","CREATE","membershipCreatedEventDataArray","map","output","getMembershipEvent","EVENT_TYPE","CREATED","forEach","trigger","ADD","membershipCreatedEventData","LEAVE","membershipDeletedEventData","DELETED","ADD_MODERATOR","REMOVE_MODERATOR","HIDE","membershipUpdatedEventData","UPDATED","ACKNOWLEDGE","membershipSeenEventData","SEEN","sdkEvent","getHydraClusterString","url","member","space","actorId","SPACE_TYPE","DIRECT","ACTIVITY_FIELD","ACTOR","TARGET","OBJECT","logger","error"],"sources":["memberships.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {\n SDK_EVENT,\n createEventEnvelope,\n ensureMyIdIsAvailable,\n buildHydraMembershipId,\n buildHydraMessageId,\n buildHydraOrgId,\n buildHydraPersonId,\n buildHydraRoomId,\n getHydraClusterString,\n getHydraRoomType,\n deconstructHydraId\n} from '@webex/common';\nimport {WebexPlugin, Page} from '@webex/webex-core';\nimport {cloneDeep} from 'lodash';\n\nconst debug = require('debug')('memberships');\n\n/**\n * @typedef {Object} MembershipObject\n * @property {string} id - Unique identifier for the membership\n * @property {string} roomId - The room ID\n * @property {string} personId - The person ID\n * @property {email} personEmail - The email address of the person / room member\n * @property {boolean} isModerator - Indicates whether the specified person should be a room moderator\n * @property {boolean} isMonitor - Indicates whether the specified member is a room monitor\n * @property {isoDate} created - The date and time that this membership was created\n */\n\n/**\n * Memberships represent a person's relationship to a room. Use this API to list\n * members of any room that you're in or create memberships to invite someone\n * to a room. Memberships can also be updated to make someone a moderator\n * or deleted to remove them from the room.\n * @class\n * @name Memberships\n */\nconst Memberships = WebexPlugin.extend({\n /**\n * Register to listen for incoming membership events\n * This is an alternate approach to registering for membership webhooks.\n * The events passed to any registered handlers will be similar to the webhook JSON,\n * but will omit webhook specific fields such as name, secret, url, etc.\n * To utilize the `listen()` method, the authorization token used\n * will need to have `spark:all` and `spark:kms` scopes enabled.\n * Note that by configuring your application to enable or disable `spark:all`\n * via its configuration page will also enable or disable `spark:kms`.\n * See the <a href=\"https://webex.github.io/webex-js-sdk/samples/browser-socket/\">Sample App</a>\n * for more details.\n * @instance\n * @memberof Memberships\n * @returns {Promise}\n * @example\n * webex.memberships.listen()\n * .then(() => {\n * console.log('listening to membership events');\n * webex.memberships.on('created', (event) => {\n * console.log(`Got a membership:created event:\\n${event}`);\n * }\n * webex.memberships.on('updated', (event) => {\n * console.log(`Got a membership:updated event:\\n${event}`);\n * }\n * webex.memberships.on('seen', (event) => {\n * // This represents a \"read receipt\" and will include a\n * // lastSeenId for the message this member has just \"read\",\n * // There is currently no equivalent webhook for this event.\n * console.log(`Got a membership:seen event:\\n${event}`);\n * }\n * webex.memberships.on('deleted', (event) => => {\n * console.log(`Got a membership:created event:\\n${event}`);\n * }\n * })\n * .catch((e) => console.error(`Unable to register for membership events: ${e}`));\n * // App logic goes here...\n * // Later when it is time to clean up\n * webex.memberships.stopListening();\n * webex.memberships.off('created');\n * webex.memberships.off('updated');\n * webex.memberships.off('seen');\n * webex.memberships.off('deleted');\n\n */\n listen() {\n // Create a common envelope that we will wrap all events in\n return createEventEnvelope(this.webex,\n SDK_EVENT.EXTERNAL.RESOURCE.MEMBERSHIPS)\n .then((envelope) => {\n this.eventEnvelope = envelope;\n\n // Register to listen to events\n return this.webex.internal.mercury.connect().then(() => {\n this.listenTo(this.webex.internal.mercury,\n SDK_EVENT.INTERNAL.WEBEX_ACTIVITY,\n (event) => this.onWebexApiEvent(event));\n });\n });\n },\n\n /**\n * Adds a person to a room. The person can be added by ID (`personId`) or by\n * Email Address (`personEmail`). The person can be optionally added to the room\n * as a moderator.\n * @instance\n * @memberof Memberships\n * @param {MembershipObject} membership\n * @returns {Promise<MembershipObject>}\n * @example\n * webex.rooms.create({title: 'Create Membership Example'})\n * .then(function(room) {\n * return webex.memberships.create({\n * personEmail: 'alice@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function(membership) {\n * var assert = require('assert');\n * assert(membership.id);\n * assert(membership.roomId);\n * assert(membership.personId);\n * assert(membership.personEmail);\n * assert('isModerator' in membership);\n * assert('isMonitor' in membership);\n * assert(membership.created);\n * return 'success';\n * });\n * // => success\n */\n create(membership) {\n return this.request({\n method: 'POST',\n service: 'hydra',\n resource: 'memberships',\n body: membership\n })\n .then((res) => res.body);\n },\n\n /**\n * Returns a single membership.\n * @instance\n * @memberof Memberships\n * @param {MembershipObject|uuid} membership\n * @returns {Promise<MembershipObject>}\n * @example\n * var membership;\n * webex.rooms.create({title: 'Get Membership Example'})\n * .then(function(room) {\n * return webex.memberships.create({\n * personEmail: 'alice@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function(m) {\n * membership = m;\n * return webex.memberships.get(m.id);\n * })\n * .then(function(m) {\n * var assert = require('assert');\n * assert.deepEqual(m, membership);\n * return 'success';\n * });\n * // => success\n */\n get(membership) {\n const id = membership.id || membership;\n\n return this.request({\n service: 'hydra',\n resource: `memberships/${id}`\n })\n .then((res) => res.body.items || res.body);\n },\n\n /**\n * Returns a list of memberships. In most cases the results will only contain\n * rooms that the authenticated user is a member of. You can filter the results\n * by room to list people in a room or by person to find rooms that a\n * specific person is a member of.\n * @instance\n * @memberof Memberships\n * @param {Object} options\n * @param {string} options.personId\n * @param {string} options.personEmail\n * @param {string} options.roomId\n * @param {number} options.max\n * @returns {Promise<Page<MembershipObject>>}\n * @example\n * var room;\n * webex.rooms.create({title: 'List Membership Example'})\n * .then(function(r) {\n * room = r;\n * return webex.memberships.create({\n * personEmail: 'alice@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function() {\n * return webex.memberships.list({roomId: room.id});\n * })\n * .then(function(memberships) {\n * var assert = require('assert');\n * assert.equal(memberships.length, 2);\n * for (var i = 0; i < memberships.length; i+= 1) {\n * assert.equal(memberships.items[i].roomId, room.id);\n * }\n * return 'success';\n * });\n * // => success\n */\n list(options) {\n return this.request({\n service: 'hydra',\n resource: 'memberships',\n qs: options\n })\n .then((res) => new Page(res, this.webex));\n },\n\n /**\n * Returns a list of memberships with details about the lastSeenId for each\n * user, allowing a client to indicate \"read status\" in a space GUI\n *\n * This differs from the memberships.list() function in the following ways:\n * -- it accepts only a room or object with a valid roomId\n * -- no other options, eg: max, are considered\n * -- results are not paginated\n * -- memberships in the return do not include the\n * \"created\", \"isRoomHidden\", fields\n * -- memberships in the return do include the new\n * \"lastSeenId\", and \"lastSeenDate\" fields\n * these will not exist if the member has never \"seen\" the space\n *\n * In general this function should be used only when the\n * client needs to access read status info.\n *\n * This function may be deprecated when this info is provided in the membership\n * objects returned in the list function.\n *\n *\n * @instance\n * @memberof Memberships\n * @param {Object} options\n * @param {string} options.roomId\n * @returns {Promise<MembershipObjectList>}\n */\n listWithReadStatus(options) {\n const deconstructedId = deconstructHydraId(options.roomId);\n const conversation = {\n id: deconstructedId.id,\n cluster: deconstructedId.cluster\n };\n\n return ensureMyIdIsAvailable(this.webex)\n .then(() => this.webex.internal.services.waitForCatalog('postauth')\n .then(() => this.webex.internal.conversation.get(conversation,\n {\n participantAckFilter: 'all', // show lastAck info for each participant\n activitiesLimit: 0 // don't send the whole history of activity\n })\n .then((resp) => {\n try {\n // We keep track of the last read message by each user\n const roomUUID = resp.id;\n const roomId = buildHydraRoomId(roomUUID, conversation.cluster);\n const participants = resp.participants.items;\n const lastReadInfo = {items: []};\n const roomType = getHydraRoomType(resp.tags);\n const myId = this.webex.internal.me.id;\n const isRoomHidden = resp.tags.includes(SDK_EVENT.INTERNAL.ACTIVITY_TAG.HIDDEN);\n\n for (let i = 0; i < participants.length; i += 1) {\n const participant = participants[i];\n const participantInfo = {\n id: buildHydraMembershipId(participant.entryUUID, roomUUID,\n conversation.cluster),\n roomId,\n personId: buildHydraPersonId(participant.entryUUID),\n personEmail: participant.entryEmailAddress ||\n participant.entryEmail,\n personDisplayName: participant.displayName,\n personOrgId: buildHydraOrgId(participant.orgId,\n conversation.cluster),\n isMonitor: false, // deprecated, but included for completeness\n roomType\n // created is not available in the conversations payload\n };\n\n if ((isRoomHidden) && (participantInfo.personId === myId)) {\n participantInfo.isRoomHidden = isRoomHidden;\n }\n\n if ('roomProperties' in participant) {\n if ('lastSeenActivityDate' in participant.roomProperties) {\n participantInfo.lastSeenId =\n buildHydraMessageId(participant.roomProperties.lastSeenActivityUUID,\n conversation.cluster);\n participantInfo.lastSeenDate =\n participant.roomProperties.lastSeenActivityDate;\n }\n if ('isModerator' in participant.roomProperties) {\n participantInfo.isModerator = participant.roomProperties.isModerator;\n }\n }\n\n lastReadInfo.items.push(participantInfo);\n }\n\n return Promise.resolve(lastReadInfo);\n }\n catch (e) {\n return Promise.reject(e);\n }\n })));\n },\n\n /**\n * Deletes a single membership.\n * @instance\n * @memberof Memberships\n * @param {MembershipObject|uuid} membership\n * @returns {Promise}\n * @example\n * var membership, room;\n * webex.rooms.create({title: 'Remove Membership Example'})\n * .then(function(r) {\n * room = r;\n * return webex.memberships.create({\n * personEmail: 'alice@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function(m) {\n * membership = m;\n * return webex.memberships.list({roomId: room.id});\n * })\n * .then(function(memberships) {\n * var assert = require('assert');\n * assert.equal(memberships.length, 2);\n * return webex.memberships.remove(membership);\n * })\n * .then(function() {\n * return webex.memberships.list({roomId: room.id});\n * })\n * .then(function(memberships) {\n * var assert = require('assert');\n * assert.equal(memberships.length, 1);\n * return 'success';\n * });\n * // => success\n */\n remove(membership) {\n const id = membership.id || membership;\n\n return this.request({\n method: 'DELETE',\n service: 'hydra',\n resource: `memberships/${id}`\n })\n .then((res) => {\n // Firefox has some issues with 204s and/or DELETE. This should move to\n // http-core\n if (res.statusCode === 204) {\n return undefined;\n }\n\n return res.body;\n });\n },\n\n /**\n * Used to update a single membership's properties\n * @instance\n * @memberof Memberships\n * @param {MembershipObject|uuid} membership\n * @returns {Promise<MembershipObject>}\n * @example\n * // Change membership to make user a moderator\n * var membership, room;\n * webex.rooms.create({title: 'Memberships Example'})\n * .then(function(r) {\n * room = r;\n * return webex.memberships.list({roomId: room.id});\n * })\n * .then(function(memberships) {\n * membership = memberships.items[0];\n * var assert = require('assert');\n * assert.equal(membership.isModerator, false);\n * membership.isModerator = true;\n * return webex.memberships.update(membership);\n * })\n * .then(function() {\n * return webex.memberships.get(membership.id);\n * })\n * .then(function(membership) {\n * var assert = require('assert');\n * assert.equal(membership.isModerator, true);\n * return 'success';\n * });\n * // => success\n * @example\n * // Hide a one on one space\n * var assert = require('assert');\n * var membership, myId;\n * webex.people.get('me')\n * .then(function(person) {\n * myId = personId;\n * return webex.messages.create({\n * toPersonEmail: 'otherUser@acme.com',\n * text: 'This message will create a 1-1 space'\n * });\n * })\n * then(function(message) {\n * return webex.memberships.list({\n * roomId: message.roomId,\n * personId: myId\n * });\n * })\n * .then((memberships) => {\n * membership = memberships.items[0];\n * assert.equal(membership.isRoomHidden, false);\n * membership.isRoomHidden = true;\n * // This will generate a memberships:updated event\n * // that will only be seen by this user\n * return webex.memberships.update(membership);\n * })\n * .then(function(membership) {\n * assert.equal(membership.isRoomHidden, true);\n * return 'success';\n * });\n * // => success\n */\n update(membership) {\n const id = membership.id || membership;\n\n return this.request({\n method: 'PUT',\n service: 'hydra',\n resource: `memberships/${id}`,\n body: membership\n })\n .then((res) => res.body);\n },\n\n /**\n * Updates the lastSeenId attribute of a membership.\n * Call this method to send a \"read receipt\" for a given message.\n * This will update the lastSeenId for the user's membership in\n * space where the message is.\n * @instance\n * @memberof Memberships\n * @param {string} message\n * @returns {Promise<MembershipObject>}\n */\n updateLastSeen(message) {\n const activity = {\n id: deconstructHydraId(message.id).id\n };\n const deconstructedId = deconstructHydraId(message.roomId);\n const conversation = {\n id: deconstructedId.id,\n cluster: deconstructedId.cluster\n };\n\n return this.webex.internal.services.waitForCatalog('postauth')\n .then(() => this.webex.internal.conversation.acknowledge(conversation, activity)\n .then((ack) => ({\n lastSeenId: buildHydraMessageId(ack.object.id, conversation.cluster),\n id: buildHydraMembershipId(ack.actor.entryUUID,\n ack.target.id, conversation.cluster),\n personId: buildHydraPersonId(ack.actor.entryUUID, conversation.cluster),\n personEmail: ack.actor.emailAddress || ack.actor.entryEmail,\n personDisplayName: ack.actor.displayName,\n personOrgId: buildHydraOrgId(ack.actor.orgId, conversation.cluster),\n roomId: buildHydraRoomId(ack.target.id, conversation.cluster),\n roomType: getHydraRoomType(ack.target.tags),\n isRoomHidden: false, // any activity unhides a space.\n isMonitor: false, // deprecated, returned for back compat\n created: ack.published\n })));\n },\n\n /**\n * This function is called when an internal membership events fires,\n * if the user registered for these events with the public listen() method.\n * External users of the SDK should not call this function\n * @private\n * @memberof Memberships\n * @param {Object} event\n * @returns {void}\n */\n onWebexApiEvent(event) {\n const {activity} = event.data;\n\n /* eslint-disable no-case-declarations */\n switch (activity.verb) {\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.CREATE:\n const membershipCreatedEventDataArray =\n activity.object.participants.items.map((participant) => {\n const output = cloneDeep(activity);\n\n output.target = cloneDeep(activity.object);\n output.object = cloneDeep(participant);\n\n return this.getMembershipEvent(output,\n SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED);\n });\n\n membershipCreatedEventDataArray.forEach((data) => {\n if (data) {\n debug(`membership \"created\" payload: ${JSON.stringify(data)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED, data);\n }\n });\n break;\n\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.ADD:\n const membershipCreatedEventData =\n this.getMembershipEvent(activity, SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED);\n\n if (membershipCreatedEventData) {\n debug(`membership \"created\" payload: \\\n ${JSON.stringify(membershipCreatedEventData)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED, membershipCreatedEventData);\n }\n break;\n\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.LEAVE:\n const membershipDeletedEventData =\n this.getMembershipEvent(activity, SDK_EVENT.EXTERNAL.EVENT_TYPE.DELETED);\n\n if (membershipDeletedEventData) {\n debug(`membership \"deleted\" payload: \\\n ${JSON.stringify(membershipDeletedEventData)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.DELETED, membershipDeletedEventData);\n }\n break;\n\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.ADD_MODERATOR:\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.REMOVE_MODERATOR:\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.HIDE:\n const membershipUpdatedEventData =\n this.getMembershipEvent(activity, SDK_EVENT.EXTERNAL.EVENT_TYPE.UPDATED);\n\n if (membershipUpdatedEventData) {\n debug(`membership \"updated\" payload: \\\n ${JSON.stringify(membershipUpdatedEventData)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.UPDATED, membershipUpdatedEventData);\n }\n break;\n\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.ACKNOWLEDGE:\n const membershipSeenEventData =\n this.getMembershipEvent(activity, SDK_EVENT.EXTERNAL.EVENT_TYPE.SEEN);\n\n if (membershipSeenEventData) {\n debug(`membership \"updated\" payload: \\\n ${JSON.stringify(membershipSeenEventData)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.SEEN, membershipSeenEventData);\n }\n break;\n\n default:\n break;\n }\n },\n\n /**\n * Constructs the data object for an event on the memberships resource,\n * adhering to Hydra's Webhook data structure memberships.\n * External users of the SDK should not call this function\n * @private\n * @memberof Memberships\n * @param {Object} activity from mercury\n * @param {Object} event type of \"webhook\" event\n * @returns {Object} constructed event\n */\n getMembershipEvent(activity, event) {\n try {\n const sdkEvent = cloneDeep(this.eventEnvelope);\n const cluster = (activity.verb !== SDK_EVENT.INTERNAL.ACTIVITY_VERB.HIDE) ?\n getHydraClusterString(this.webex, activity.target.url) :\n getHydraClusterString(this.webex, activity.url);\n let member;\n let space;\n\n sdkEvent.event = event;\n sdkEvent.data.created = activity.published;\n sdkEvent.actorId = buildHydraPersonId(activity.actor.entryUUID, cluster);\n if (activity.verb !== SDK_EVENT.INTERNAL.ACTIVITY_VERB.HIDE) {\n sdkEvent.data.roomId = buildHydraRoomId(activity.target.id, cluster);\n sdkEvent.data.roomType = getHydraRoomType(activity.target.tags);\n sdkEvent.data.isRoomHidden = false; // any activity unhides a space.\n }\n else {\n sdkEvent.data.roomId = buildHydraRoomId(activity.object.id, cluster);\n sdkEvent.data.roomType = SDK_EVENT.EXTERNAL.SPACE_TYPE.DIRECT;\n // currently hidden attribute is only set on 1-1\n sdkEvent.data.isRoomHidden = true;\n }\n if (activity.verb !== SDK_EVENT.INTERNAL.ACTIVITY_VERB.ACKNOWLEDGE) {\n if ((activity.object.roomProperties) && (activity.object.roomProperties.isModerator)) {\n sdkEvent.data.isModerator = true;\n }\n else {\n sdkEvent.data.isModerator = false;\n }\n }\n // This is deprecated but still sent in the webhooks\n // We won't send it for our new SDK events\n // sdkEvent.data.isMonitor = false;\n\n if (activity.verb === SDK_EVENT.INTERNAL.ACTIVITY_VERB.ACKNOWLEDGE) {\n // For a read receipt the person is the \"actor\" or the one who did the reading\n member = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.ACTOR;\n // The space with the read message is the \"target\"\n space = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.TARGET;\n // And the \"object\" is the message that was last seen\n sdkEvent.data.lastSeenId = buildHydraMessageId(activity.object.id, cluster);\n }\n else if (activity.verb === SDK_EVENT.INTERNAL.ACTIVITY_VERB.HIDE) {\n // For a hide activity the person is also the \"actor\"\n member = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.ACTOR;\n // But the space is now the \"object\"\n space = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.OBJECT;\n }\n else {\n // For most memberships events the person is the 'object\"\n member = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.OBJECT;\n // and the space is the \"target\"\n space = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.TARGET;\n }\n\n sdkEvent.data.id = buildHydraMembershipId(activity[member].entryUUID,\n activity[space].id, cluster);\n sdkEvent.data.personId = buildHydraPersonId(activity[member].entryUUID, cluster);\n sdkEvent.data.personEmail =\n activity[member].emailAddress || activity[member].entryEmail;\n sdkEvent.data.personDisplayName = activity[member].displayName;\n sdkEvent.data.personOrgId = buildHydraOrgId(activity[member].orgId, cluster);\n\n return sdkEvent;\n }\n catch (e) {\n this.webex.logger.error(`Unable to generate SDK event from mercury \\\n'socket activity for memberships:${event} event: ${e.message}`);\n\n return null;\n }\n }\n\n});\n\nexport default Memberships;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAIA;;AAaA;;AAjBA;AACA;AACA;AAkBA,IAAMA,KAAK,GAAGC,OAAO,CAAC,OAAD,CAAP,CAAiB,aAAjB,CAAd;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,IAAMC,WAAW,GAAGC,sBAAA,CAAYC,MAAZ,CAAmB;EACrC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAEEC,MA7CqC,oBA6C5B;IAAA;;IACP;IACA,OAAO,IAAAC,2BAAA,EAAoB,KAAKC,KAAzB,EACLC,iBAAA,CAAUC,QAAV,CAAmBC,QAAnB,CAA4BC,WADvB,EAEJC,IAFI,CAEC,UAACC,QAAD,EAAc;MAClB,KAAI,CAACC,aAAL,GAAqBD,QAArB,CADkB,CAGlB;;MACA,OAAO,KAAI,CAACN,KAAL,CAAWQ,QAAX,CAAoBC,OAApB,CAA4BC,OAA5B,GAAsCL,IAAtC,CAA2C,YAAM;QACtD,KAAI,CAACM,QAAL,CAAc,KAAI,CAACX,KAAL,CAAWQ,QAAX,CAAoBC,OAAlC,EACER,iBAAA,CAAUW,QAAV,CAAmBC,cADrB,EAEE,UAACC,KAAD;UAAA,OAAW,KAAI,CAACC,eAAL,CAAqBD,KAArB,CAAX;QAAA,CAFF;MAGD,CAJM,CAAP;IAKD,CAXI,CAAP;EAYD,CA3DoC;;EA6DrC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEE,MA1FqC,kBA0F9BC,UA1F8B,EA0FlB;IACjB,OAAO,KAAKC,OAAL,CAAa;MAClBC,MAAM,EAAE,MADU;MAEl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"}
1
+ {"version":3,"names":["debug","require","Memberships","WebexPlugin","extend","listen","createEventEnvelope","webex","SDK_EVENT","EXTERNAL","RESOURCE","MEMBERSHIPS","then","envelope","eventEnvelope","internal","mercury","connect","listenTo","INTERNAL","WEBEX_ACTIVITY","event","onWebexApiEvent","create","membership","request","method","service","resource","body","res","get","id","items","list","options","qs","Page","listWithReadStatus","deconstructedId","deconstructHydraId","roomId","conversation","cluster","ensureMyIdIsAvailable","services","waitForCatalog","participantAckFilter","activitiesLimit","resp","roomUUID","buildHydraRoomId","participants","lastReadInfo","roomType","getHydraRoomType","tags","myId","me","isRoomHidden","includes","ACTIVITY_TAG","HIDDEN","i","length","participant","participantInfo","buildHydraMembershipId","entryUUID","personId","buildHydraPersonId","personEmail","entryEmailAddress","entryEmail","personDisplayName","displayName","personOrgId","buildHydraOrgId","orgId","isMonitor","roomProperties","lastSeenId","buildHydraMessageId","lastSeenActivityUUID","lastSeenDate","lastSeenActivityDate","isModerator","push","resolve","e","reject","remove","statusCode","undefined","update","updateLastSeen","message","activity","acknowledge","ack","object","actor","target","emailAddress","created","published","data","verb","ACTIVITY_VERB","CREATE","membershipCreatedEventDataArray","map","output","getMembershipEvent","EVENT_TYPE","CREATED","forEach","trigger","ADD","membershipCreatedEventData","LEAVE","membershipDeletedEventData","DELETED","ADD_MODERATOR","REMOVE_MODERATOR","HIDE","membershipUpdatedEventData","UPDATED","ACKNOWLEDGE","membershipSeenEventData","SEEN","sdkEvent","getHydraClusterString","url","member","space","actorId","SPACE_TYPE","DIRECT","ACTIVITY_FIELD","ACTOR","TARGET","OBJECT","logger","error"],"sources":["memberships.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {\n SDK_EVENT,\n createEventEnvelope,\n ensureMyIdIsAvailable,\n buildHydraMembershipId,\n buildHydraMessageId,\n buildHydraOrgId,\n buildHydraPersonId,\n buildHydraRoomId,\n getHydraClusterString,\n getHydraRoomType,\n deconstructHydraId,\n} from '@webex/common';\nimport {WebexPlugin, Page} from '@webex/webex-core';\nimport {cloneDeep} from 'lodash';\n\nconst debug = require('debug')('memberships');\n\n/**\n * @typedef {Object} MembershipObject\n * @property {string} id - Unique identifier for the membership\n * @property {string} roomId - The room ID\n * @property {string} personId - The person ID\n * @property {email} personEmail - The email address of the person / room member\n * @property {boolean} isModerator - Indicates whether the specified person should be a room moderator\n * @property {boolean} isMonitor - Indicates whether the specified member is a room monitor\n * @property {isoDate} created - The date and time that this membership was created\n */\n\n/**\n * Memberships represent a person's relationship to a room. Use this API to list\n * members of any room that you're in or create memberships to invite someone\n * to a room. Memberships can also be updated to make someone a moderator\n * or deleted to remove them from the room.\n * @class\n * @name Memberships\n */\nconst Memberships = WebexPlugin.extend({\n /**\n * Register to listen for incoming membership events\n * This is an alternate approach to registering for membership webhooks.\n * The events passed to any registered handlers will be similar to the webhook JSON,\n * but will omit webhook specific fields such as name, secret, url, etc.\n * To utilize the `listen()` method, the authorization token used\n * will need to have `spark:all` and `spark:kms` scopes enabled.\n * Note that by configuring your application to enable or disable `spark:all`\n * via its configuration page will also enable or disable `spark:kms`.\n * See the <a href=\"https://webex.github.io/webex-js-sdk/samples/browser-socket/\">Sample App</a>\n * for more details.\n * @instance\n * @memberof Memberships\n * @returns {Promise}\n * @example\n * webex.memberships.listen()\n * .then(() => {\n * console.log('listening to membership events');\n * webex.memberships.on('created', (event) => {\n * console.log(`Got a membership:created event:\\n${event}`);\n * }\n * webex.memberships.on('updated', (event) => {\n * console.log(`Got a membership:updated event:\\n${event}`);\n * }\n * webex.memberships.on('seen', (event) => {\n * // This represents a \"read receipt\" and will include a\n * // lastSeenId for the message this member has just \"read\",\n * // There is currently no equivalent webhook for this event.\n * console.log(`Got a membership:seen event:\\n${event}`);\n * }\n * webex.memberships.on('deleted', (event) => => {\n * console.log(`Got a membership:created event:\\n${event}`);\n * }\n * })\n * .catch((e) => console.error(`Unable to register for membership events: ${e}`));\n * // App logic goes here...\n * // Later when it is time to clean up\n * webex.memberships.stopListening();\n * webex.memberships.off('created');\n * webex.memberships.off('updated');\n * webex.memberships.off('seen');\n * webex.memberships.off('deleted');\n\n */\n listen() {\n // Create a common envelope that we will wrap all events in\n return createEventEnvelope(this.webex, SDK_EVENT.EXTERNAL.RESOURCE.MEMBERSHIPS).then(\n (envelope) => {\n this.eventEnvelope = envelope;\n\n // Register to listen to events\n return this.webex.internal.mercury.connect().then(() => {\n this.listenTo(this.webex.internal.mercury, SDK_EVENT.INTERNAL.WEBEX_ACTIVITY, (event) =>\n this.onWebexApiEvent(event)\n );\n });\n }\n );\n },\n\n /**\n * Adds a person to a room. The person can be added by ID (`personId`) or by\n * Email Address (`personEmail`). The person can be optionally added to the room\n * as a moderator.\n * @instance\n * @memberof Memberships\n * @param {MembershipObject} membership\n * @returns {Promise<MembershipObject>}\n * @example\n * webex.rooms.create({title: 'Create Membership Example'})\n * .then(function(room) {\n * return webex.memberships.create({\n * personEmail: 'alice@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function(membership) {\n * var assert = require('assert');\n * assert(membership.id);\n * assert(membership.roomId);\n * assert(membership.personId);\n * assert(membership.personEmail);\n * assert('isModerator' in membership);\n * assert('isMonitor' in membership);\n * assert(membership.created);\n * return 'success';\n * });\n * // => success\n */\n create(membership) {\n return this.request({\n method: 'POST',\n service: 'hydra',\n resource: 'memberships',\n body: membership,\n }).then((res) => res.body);\n },\n\n /**\n * Returns a single membership.\n * @instance\n * @memberof Memberships\n * @param {MembershipObject|uuid} membership\n * @returns {Promise<MembershipObject>}\n * @example\n * var membership;\n * webex.rooms.create({title: 'Get Membership Example'})\n * .then(function(room) {\n * return webex.memberships.create({\n * personEmail: 'alice@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function(m) {\n * membership = m;\n * return webex.memberships.get(m.id);\n * })\n * .then(function(m) {\n * var assert = require('assert');\n * assert.deepEqual(m, membership);\n * return 'success';\n * });\n * // => success\n */\n get(membership) {\n const id = membership.id || membership;\n\n return this.request({\n service: 'hydra',\n resource: `memberships/${id}`,\n }).then((res) => res.body.items || res.body);\n },\n\n /**\n * Returns a list of memberships. In most cases the results will only contain\n * rooms that the authenticated user is a member of. You can filter the results\n * by room to list people in a room or by person to find rooms that a\n * specific person is a member of.\n * @instance\n * @memberof Memberships\n * @param {Object} options\n * @param {string} options.personId\n * @param {string} options.personEmail\n * @param {string} options.roomId\n * @param {number} options.max\n * @returns {Promise<Page<MembershipObject>>}\n * @example\n * var room;\n * webex.rooms.create({title: 'List Membership Example'})\n * .then(function(r) {\n * room = r;\n * return webex.memberships.create({\n * personEmail: 'alice@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function() {\n * return webex.memberships.list({roomId: room.id});\n * })\n * .then(function(memberships) {\n * var assert = require('assert');\n * assert.equal(memberships.length, 2);\n * for (var i = 0; i < memberships.length; i+= 1) {\n * assert.equal(memberships.items[i].roomId, room.id);\n * }\n * return 'success';\n * });\n * // => success\n */\n list(options) {\n return this.request({\n service: 'hydra',\n resource: 'memberships',\n qs: options,\n }).then((res) => new Page(res, this.webex));\n },\n\n /**\n * Returns a list of memberships with details about the lastSeenId for each\n * user, allowing a client to indicate \"read status\" in a space GUI\n *\n * This differs from the memberships.list() function in the following ways:\n * -- it accepts only a room or object with a valid roomId\n * -- no other options, eg: max, are considered\n * -- results are not paginated\n * -- memberships in the return do not include the\n * \"created\", \"isRoomHidden\", fields\n * -- memberships in the return do include the new\n * \"lastSeenId\", and \"lastSeenDate\" fields\n * these will not exist if the member has never \"seen\" the space\n *\n * In general this function should be used only when the\n * client needs to access read status info.\n *\n * This function may be deprecated when this info is provided in the membership\n * objects returned in the list function.\n *\n *\n * @instance\n * @memberof Memberships\n * @param {Object} options\n * @param {string} options.roomId\n * @returns {Promise<MembershipObjectList>}\n */\n listWithReadStatus(options) {\n const deconstructedId = deconstructHydraId(options.roomId);\n const conversation = {\n id: deconstructedId.id,\n cluster: deconstructedId.cluster,\n };\n\n return ensureMyIdIsAvailable(this.webex).then(() =>\n this.webex.internal.services.waitForCatalog('postauth').then(() =>\n this.webex.internal.conversation\n .get(conversation, {\n participantAckFilter: 'all', // show lastAck info for each participant\n activitiesLimit: 0, // don't send the whole history of activity\n })\n .then((resp) => {\n try {\n // We keep track of the last read message by each user\n const roomUUID = resp.id;\n const roomId = buildHydraRoomId(roomUUID, conversation.cluster);\n const participants = resp.participants.items;\n const lastReadInfo = {items: []};\n const roomType = getHydraRoomType(resp.tags);\n const myId = this.webex.internal.me.id;\n const isRoomHidden = resp.tags.includes(SDK_EVENT.INTERNAL.ACTIVITY_TAG.HIDDEN);\n\n for (let i = 0; i < participants.length; i += 1) {\n const participant = participants[i];\n const participantInfo = {\n id: buildHydraMembershipId(participant.entryUUID, roomUUID, conversation.cluster),\n roomId,\n personId: buildHydraPersonId(participant.entryUUID),\n personEmail: participant.entryEmailAddress || participant.entryEmail,\n personDisplayName: participant.displayName,\n personOrgId: buildHydraOrgId(participant.orgId, conversation.cluster),\n isMonitor: false, // deprecated, but included for completeness\n roomType,\n // created is not available in the conversations payload\n };\n\n if (isRoomHidden && participantInfo.personId === myId) {\n participantInfo.isRoomHidden = isRoomHidden;\n }\n\n if ('roomProperties' in participant) {\n if ('lastSeenActivityDate' in participant.roomProperties) {\n participantInfo.lastSeenId = buildHydraMessageId(\n participant.roomProperties.lastSeenActivityUUID,\n conversation.cluster\n );\n participantInfo.lastSeenDate = participant.roomProperties.lastSeenActivityDate;\n }\n if ('isModerator' in participant.roomProperties) {\n participantInfo.isModerator = participant.roomProperties.isModerator;\n }\n }\n\n lastReadInfo.items.push(participantInfo);\n }\n\n return Promise.resolve(lastReadInfo);\n } catch (e) {\n return Promise.reject(e);\n }\n })\n )\n );\n },\n\n /**\n * Deletes a single membership.\n * @instance\n * @memberof Memberships\n * @param {MembershipObject|uuid} membership\n * @returns {Promise}\n * @example\n * var membership, room;\n * webex.rooms.create({title: 'Remove Membership Example'})\n * .then(function(r) {\n * room = r;\n * return webex.memberships.create({\n * personEmail: 'alice@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function(m) {\n * membership = m;\n * return webex.memberships.list({roomId: room.id});\n * })\n * .then(function(memberships) {\n * var assert = require('assert');\n * assert.equal(memberships.length, 2);\n * return webex.memberships.remove(membership);\n * })\n * .then(function() {\n * return webex.memberships.list({roomId: room.id});\n * })\n * .then(function(memberships) {\n * var assert = require('assert');\n * assert.equal(memberships.length, 1);\n * return 'success';\n * });\n * // => success\n */\n remove(membership) {\n const id = membership.id || membership;\n\n return this.request({\n method: 'DELETE',\n service: 'hydra',\n resource: `memberships/${id}`,\n }).then((res) => {\n // Firefox has some issues with 204s and/or DELETE. This should move to\n // http-core\n if (res.statusCode === 204) {\n return undefined;\n }\n\n return res.body;\n });\n },\n\n /**\n * Used to update a single membership's properties\n * @instance\n * @memberof Memberships\n * @param {MembershipObject|uuid} membership\n * @returns {Promise<MembershipObject>}\n * @example\n * // Change membership to make user a moderator\n * var membership, room;\n * webex.rooms.create({title: 'Memberships Example'})\n * .then(function(r) {\n * room = r;\n * return webex.memberships.list({roomId: room.id});\n * })\n * .then(function(memberships) {\n * membership = memberships.items[0];\n * var assert = require('assert');\n * assert.equal(membership.isModerator, false);\n * membership.isModerator = true;\n * return webex.memberships.update(membership);\n * })\n * .then(function() {\n * return webex.memberships.get(membership.id);\n * })\n * .then(function(membership) {\n * var assert = require('assert');\n * assert.equal(membership.isModerator, true);\n * return 'success';\n * });\n * // => success\n * @example\n * // Hide a one on one space\n * var assert = require('assert');\n * var membership, myId;\n * webex.people.get('me')\n * .then(function(person) {\n * myId = personId;\n * return webex.messages.create({\n * toPersonEmail: 'otherUser@acme.com',\n * text: 'This message will create a 1-1 space'\n * });\n * })\n * then(function(message) {\n * return webex.memberships.list({\n * roomId: message.roomId,\n * personId: myId\n * });\n * })\n * .then((memberships) => {\n * membership = memberships.items[0];\n * assert.equal(membership.isRoomHidden, false);\n * membership.isRoomHidden = true;\n * // This will generate a memberships:updated event\n * // that will only be seen by this user\n * return webex.memberships.update(membership);\n * })\n * .then(function(membership) {\n * assert.equal(membership.isRoomHidden, true);\n * return 'success';\n * });\n * // => success\n */\n update(membership) {\n const id = membership.id || membership;\n\n return this.request({\n method: 'PUT',\n service: 'hydra',\n resource: `memberships/${id}`,\n body: membership,\n }).then((res) => res.body);\n },\n\n /**\n * Updates the lastSeenId attribute of a membership.\n * Call this method to send a \"read receipt\" for a given message.\n * This will update the lastSeenId for the user's membership in\n * space where the message is.\n * @instance\n * @memberof Memberships\n * @param {string} message\n * @returns {Promise<MembershipObject>}\n */\n updateLastSeen(message) {\n const activity = {\n id: deconstructHydraId(message.id).id,\n };\n const deconstructedId = deconstructHydraId(message.roomId);\n const conversation = {\n id: deconstructedId.id,\n cluster: deconstructedId.cluster,\n };\n\n return this.webex.internal.services.waitForCatalog('postauth').then(() =>\n this.webex.internal.conversation.acknowledge(conversation, activity).then((ack) => ({\n lastSeenId: buildHydraMessageId(ack.object.id, conversation.cluster),\n id: buildHydraMembershipId(ack.actor.entryUUID, ack.target.id, conversation.cluster),\n personId: buildHydraPersonId(ack.actor.entryUUID, conversation.cluster),\n personEmail: ack.actor.emailAddress || ack.actor.entryEmail,\n personDisplayName: ack.actor.displayName,\n personOrgId: buildHydraOrgId(ack.actor.orgId, conversation.cluster),\n roomId: buildHydraRoomId(ack.target.id, conversation.cluster),\n roomType: getHydraRoomType(ack.target.tags),\n isRoomHidden: false, // any activity unhides a space.\n isMonitor: false, // deprecated, returned for back compat\n created: ack.published,\n }))\n );\n },\n\n /**\n * This function is called when an internal membership events fires,\n * if the user registered for these events with the public listen() method.\n * External users of the SDK should not call this function\n * @private\n * @memberof Memberships\n * @param {Object} event\n * @returns {void}\n */\n onWebexApiEvent(event) {\n const {activity} = event.data;\n\n /* eslint-disable no-case-declarations */\n switch (activity.verb) {\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.CREATE:\n const membershipCreatedEventDataArray = activity.object.participants.items.map(\n (participant) => {\n const output = cloneDeep(activity);\n\n output.target = cloneDeep(activity.object);\n output.object = cloneDeep(participant);\n\n return this.getMembershipEvent(output, SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED);\n }\n );\n\n membershipCreatedEventDataArray.forEach((data) => {\n if (data) {\n debug(`membership \"created\" payload: ${JSON.stringify(data)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED, data);\n }\n });\n break;\n\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.ADD:\n const membershipCreatedEventData = this.getMembershipEvent(\n activity,\n SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED\n );\n\n if (membershipCreatedEventData) {\n debug(`membership \"created\" payload: \\\n ${JSON.stringify(membershipCreatedEventData)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED, membershipCreatedEventData);\n }\n break;\n\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.LEAVE:\n const membershipDeletedEventData = this.getMembershipEvent(\n activity,\n SDK_EVENT.EXTERNAL.EVENT_TYPE.DELETED\n );\n\n if (membershipDeletedEventData) {\n debug(`membership \"deleted\" payload: \\\n ${JSON.stringify(membershipDeletedEventData)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.DELETED, membershipDeletedEventData);\n }\n break;\n\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.ADD_MODERATOR:\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.REMOVE_MODERATOR:\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.HIDE:\n const membershipUpdatedEventData = this.getMembershipEvent(\n activity,\n SDK_EVENT.EXTERNAL.EVENT_TYPE.UPDATED\n );\n\n if (membershipUpdatedEventData) {\n debug(`membership \"updated\" payload: \\\n ${JSON.stringify(membershipUpdatedEventData)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.UPDATED, membershipUpdatedEventData);\n }\n break;\n\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.ACKNOWLEDGE:\n const membershipSeenEventData = this.getMembershipEvent(\n activity,\n SDK_EVENT.EXTERNAL.EVENT_TYPE.SEEN\n );\n\n if (membershipSeenEventData) {\n debug(`membership \"updated\" payload: \\\n ${JSON.stringify(membershipSeenEventData)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.SEEN, membershipSeenEventData);\n }\n break;\n\n default:\n break;\n }\n },\n\n /**\n * Constructs the data object for an event on the memberships resource,\n * adhering to Hydra's Webhook data structure memberships.\n * External users of the SDK should not call this function\n * @private\n * @memberof Memberships\n * @param {Object} activity from mercury\n * @param {Object} event type of \"webhook\" event\n * @returns {Object} constructed event\n */\n getMembershipEvent(activity, event) {\n try {\n const sdkEvent = cloneDeep(this.eventEnvelope);\n const cluster =\n activity.verb !== SDK_EVENT.INTERNAL.ACTIVITY_VERB.HIDE\n ? getHydraClusterString(this.webex, activity.target.url)\n : getHydraClusterString(this.webex, activity.url);\n let member;\n let space;\n\n sdkEvent.event = event;\n sdkEvent.data.created = activity.published;\n sdkEvent.actorId = buildHydraPersonId(activity.actor.entryUUID, cluster);\n if (activity.verb !== SDK_EVENT.INTERNAL.ACTIVITY_VERB.HIDE) {\n sdkEvent.data.roomId = buildHydraRoomId(activity.target.id, cluster);\n sdkEvent.data.roomType = getHydraRoomType(activity.target.tags);\n sdkEvent.data.isRoomHidden = false; // any activity unhides a space.\n } else {\n sdkEvent.data.roomId = buildHydraRoomId(activity.object.id, cluster);\n sdkEvent.data.roomType = SDK_EVENT.EXTERNAL.SPACE_TYPE.DIRECT;\n // currently hidden attribute is only set on 1-1\n sdkEvent.data.isRoomHidden = true;\n }\n if (activity.verb !== SDK_EVENT.INTERNAL.ACTIVITY_VERB.ACKNOWLEDGE) {\n if (activity.object.roomProperties && activity.object.roomProperties.isModerator) {\n sdkEvent.data.isModerator = true;\n } else {\n sdkEvent.data.isModerator = false;\n }\n }\n // This is deprecated but still sent in the webhooks\n // We won't send it for our new SDK events\n // sdkEvent.data.isMonitor = false;\n\n if (activity.verb === SDK_EVENT.INTERNAL.ACTIVITY_VERB.ACKNOWLEDGE) {\n // For a read receipt the person is the \"actor\" or the one who did the reading\n member = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.ACTOR;\n // The space with the read message is the \"target\"\n space = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.TARGET;\n // And the \"object\" is the message that was last seen\n sdkEvent.data.lastSeenId = buildHydraMessageId(activity.object.id, cluster);\n } else if (activity.verb === SDK_EVENT.INTERNAL.ACTIVITY_VERB.HIDE) {\n // For a hide activity the person is also the \"actor\"\n member = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.ACTOR;\n // But the space is now the \"object\"\n space = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.OBJECT;\n } else {\n // For most memberships events the person is the 'object\"\n member = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.OBJECT;\n // and the space is the \"target\"\n space = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.TARGET;\n }\n\n sdkEvent.data.id = buildHydraMembershipId(\n activity[member].entryUUID,\n activity[space].id,\n cluster\n );\n sdkEvent.data.personId = buildHydraPersonId(activity[member].entryUUID, cluster);\n sdkEvent.data.personEmail = activity[member].emailAddress || activity[member].entryEmail;\n sdkEvent.data.personDisplayName = activity[member].displayName;\n sdkEvent.data.personOrgId = buildHydraOrgId(activity[member].orgId, cluster);\n\n return sdkEvent;\n } catch (e) {\n this.webex.logger.error(`Unable to generate SDK event from mercury \\\n'socket activity for memberships:${event} event: ${e.message}`);\n\n return null;\n }\n },\n});\n\nexport default Memberships;\n"],"mappings":";;;;;;;;;;;AAIA;AAaA;AAjBA;AACA;AACA;;AAkBA,IAAMA,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,WAAW,GAAGC,sBAAW,CAACC,MAAM,CAAC;EACrC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAEEC,MAAM,oBAAG;IAAA;IACP;IACA,OAAO,IAAAC,2BAAmB,EAAC,IAAI,CAACC,KAAK,EAAEC,iBAAS,CAACC,QAAQ,CAACC,QAAQ,CAACC,WAAW,CAAC,CAACC,IAAI,CAClF,UAACC,QAAQ,EAAK;MACZ,KAAI,CAACC,aAAa,GAAGD,QAAQ;;MAE7B;MACA,OAAO,KAAI,CAACN,KAAK,CAACQ,QAAQ,CAACC,OAAO,CAACC,OAAO,EAAE,CAACL,IAAI,CAAC,YAAM;QACtD,KAAI,CAACM,QAAQ,CAAC,KAAI,CAACX,KAAK,CAACQ,QAAQ,CAACC,OAAO,EAAER,iBAAS,CAACW,QAAQ,CAACC,cAAc,EAAE,UAACC,KAAK;UAAA,OAClF,KAAI,CAACC,eAAe,CAACD,KAAK,CAAC;QAAA,EAC5B;MACH,CAAC,CAAC;IACJ,CAAC,CACF;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEE,MAAM,kBAACC,UAAU,EAAE;IACjB,OAAO,IAAI,CAACC,OAAO,CAAC;MAClBC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE,OAAO;MAChBC,QAAQ,EAAE,aAAa;MACvBC,IAAI,EAAEL;IACR,CAAC,CAAC,CAACZ,IAAI,CAAC,UAACkB,GAAG;MAAA,OAAKA,GAAG,CAACD,IAAI;IAAA,EAAC;EAC5B,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEE,GAAG,eAACP,UAAU,EAAE;IACd,IAAMQ,EAAE,GAAGR,UAAU,CAACQ,EAAE,IAAIR,UAAU;IAEtC,OAAO,IAAI,CAACC,OAAO,CAAC;MAClBE,OAAO,EAAE,OAAO;MAChBC,QAAQ,wBAAiBI,EAAE;IAC7B,CAAC,CAAC,CAACpB,IAAI,CAAC,UAACkB,GAAG;MAAA,OAAKA,GAAG,CAACD,IAAI,CAACI,KAAK,IAAIH,GAAG,CAACD,IAAI;IAAA,EAAC;EAC9C,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEK,IAAI,gBAACC,OAAO,EAAE;IAAA;IACZ,OAAO,IAAI,CAACV,OAAO,CAAC;MAClBE,OAAO,EAAE,OAAO;MAChBC,QAAQ,EAAE,aAAa;MACvBQ,EAAE,EAAED;IACN,CAAC,CAAC,CAACvB,IAAI,CAAC,UAACkB,GAAG;MAAA,OAAK,IAAIO,eAAI,CAACP,GAAG,EAAE,MAAI,CAACvB,KAAK,CAAC;IAAA,EAAC;EAC7C,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE+B,kBAAkB,8BAACH,OAAO,EAAE;IAAA;IAC1B,IAAMI,eAAe,GAAG,IAAAC,0BAAkB,EAACL,OAAO,CAACM,MAAM,CAAC;IAC1D,IAAMC,YAAY,GAAG;MACnBV,EAAE,EAAEO,eAAe,CAACP,EAAE;MACtBW,OAAO,EAAEJ,eAAe,CAACI;IAC3B,CAAC;IAED,OAAO,IAAAC,6BAAqB,EAAC,IAAI,CAACrC,KAAK,CAAC,CAACK,IAAI,CAAC;MAAA,OAC5C,MAAI,CAACL,KAAK,CAACQ,QAAQ,CAAC8B,QAAQ,CAACC,cAAc,CAAC,UAAU,CAAC,CAAClC,IAAI,CAAC;QAAA,OAC3D,MAAI,CAACL,KAAK,CAACQ,QAAQ,CAAC2B,YAAY,CAC7BX,GAAG,CAACW,YAAY,EAAE;UACjBK,oBAAoB,EAAE,KAAK;UAAE;UAC7BC,eAAe,EAAE,CAAC,CAAE;QACtB,CAAC,CAAC,CACDpC,IAAI,CAAC,UAACqC,IAAI,EAAK;UACd,IAAI;YACF;YACA,IAAMC,QAAQ,GAAGD,IAAI,CAACjB,EAAE;YACxB,IAAMS,MAAM,GAAG,IAAAU,wBAAgB,EAACD,QAAQ,EAAER,YAAY,CAACC,OAAO,CAAC;YAC/D,IAAMS,YAAY,GAAGH,IAAI,CAACG,YAAY,CAACnB,KAAK;YAC5C,IAAMoB,YAAY,GAAG;cAACpB,KAAK,EAAE;YAAE,CAAC;YAChC,IAAMqB,QAAQ,GAAG,IAAAC,wBAAgB,EAACN,IAAI,CAACO,IAAI,CAAC;YAC5C,IAAMC,IAAI,GAAG,MAAI,CAAClD,KAAK,CAACQ,QAAQ,CAAC2C,EAAE,CAAC1B,EAAE;YACtC,IAAM2B,YAAY,GAAGV,IAAI,CAACO,IAAI,CAACI,QAAQ,CAACpD,iBAAS,CAACW,QAAQ,CAAC0C,YAAY,CAACC,MAAM,CAAC;YAE/E,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGX,YAAY,CAACY,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;cAC/C,IAAME,WAAW,GAAGb,YAAY,CAACW,CAAC,CAAC;cACnC,IAAMG,eAAe,GAAG;gBACtBlC,EAAE,EAAE,IAAAmC,8BAAsB,EAACF,WAAW,CAACG,SAAS,EAAElB,QAAQ,EAAER,YAAY,CAACC,OAAO,CAAC;gBACjFF,MAAM,EAANA,MAAM;gBACN4B,QAAQ,EAAE,IAAAC,0BAAkB,EAACL,WAAW,CAACG,SAAS,CAAC;gBACnDG,WAAW,EAAEN,WAAW,CAACO,iBAAiB,IAAIP,WAAW,CAACQ,UAAU;gBACpEC,iBAAiB,EAAET,WAAW,CAACU,WAAW;gBAC1CC,WAAW,EAAE,IAAAC,uBAAe,EAACZ,WAAW,CAACa,KAAK,EAAEpC,YAAY,CAACC,OAAO,CAAC;gBACrEoC,SAAS,EAAE,KAAK;gBAAE;gBAClBzB,QAAQ,EAARA;gBACA;cACF,CAAC;;cAED,IAAIK,YAAY,IAAIO,eAAe,CAACG,QAAQ,KAAKZ,IAAI,EAAE;gBACrDS,eAAe,CAACP,YAAY,GAAGA,YAAY;cAC7C;cAEA,IAAI,gBAAgB,IAAIM,WAAW,EAAE;gBACnC,IAAI,sBAAsB,IAAIA,WAAW,CAACe,cAAc,EAAE;kBACxDd,eAAe,CAACe,UAAU,GAAG,IAAAC,2BAAmB,EAC9CjB,WAAW,CAACe,cAAc,CAACG,oBAAoB,EAC/CzC,YAAY,CAACC,OAAO,CACrB;kBACDuB,eAAe,CAACkB,YAAY,GAAGnB,WAAW,CAACe,cAAc,CAACK,oBAAoB;gBAChF;gBACA,IAAI,aAAa,IAAIpB,WAAW,CAACe,cAAc,EAAE;kBAC/Cd,eAAe,CAACoB,WAAW,GAAGrB,WAAW,CAACe,cAAc,CAACM,WAAW;gBACtE;cACF;cAEAjC,YAAY,CAACpB,KAAK,CAACsD,IAAI,CAACrB,eAAe,CAAC;YAC1C;YAEA,OAAO,iBAAQsB,OAAO,CAACnC,YAAY,CAAC;UACtC,CAAC,CAAC,OAAOoC,CAAC,EAAE;YACV,OAAO,iBAAQC,MAAM,CAACD,CAAC,CAAC;UAC1B;QACF,CAAC,CAAC;MAAA,EACL;IAAA,EACF;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEE,MAAM,kBAACnE,UAAU,EAAE;IACjB,IAAMQ,EAAE,GAAGR,UAAU,CAACQ,EAAE,IAAIR,UAAU;IAEtC,OAAO,IAAI,CAACC,OAAO,CAAC;MAClBC,MAAM,EAAE,QAAQ;MAChBC,OAAO,EAAE,OAAO;MAChBC,QAAQ,wBAAiBI,EAAE;IAC7B,CAAC,CAAC,CAACpB,IAAI,CAAC,UAACkB,GAAG,EAAK;MACf;MACA;MACA,IAAIA,GAAG,CAAC8D,UAAU,KAAK,GAAG,EAAE;QAC1B,OAAOC,SAAS;MAClB;MAEA,OAAO/D,GAAG,CAACD,IAAI;IACjB,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEiE,MAAM,kBAACtE,UAAU,EAAE;IACjB,IAAMQ,EAAE,GAAGR,UAAU,CAACQ,EAAE,IAAIR,UAAU;IAEtC,OAAO,IAAI,CAACC,OAAO,CAAC;MAClBC,MAAM,EAAE,KAAK;MACbC,OAAO,EAAE,OAAO;MAChBC,QAAQ,wBAAiBI,EAAE,CAAE;MAC7BH,IAAI,EAAEL;IACR,CAAC,CAAC,CAACZ,IAAI,CAAC,UAACkB,GAAG;MAAA,OAAKA,GAAG,CAACD,IAAI;IAAA,EAAC;EAC5B,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEkE,cAAc,0BAACC,OAAO,EAAE;IAAA;IACtB,IAAMC,QAAQ,GAAG;MACfjE,EAAE,EAAE,IAAAQ,0BAAkB,EAACwD,OAAO,CAAChE,EAAE,CAAC,CAACA;IACrC,CAAC;IACD,IAAMO,eAAe,GAAG,IAAAC,0BAAkB,EAACwD,OAAO,CAACvD,MAAM,CAAC;IAC1D,IAAMC,YAAY,GAAG;MACnBV,EAAE,EAAEO,eAAe,CAACP,EAAE;MACtBW,OAAO,EAAEJ,eAAe,CAACI;IAC3B,CAAC;IAED,OAAO,IAAI,CAACpC,KAAK,CAACQ,QAAQ,CAAC8B,QAAQ,CAACC,cAAc,CAAC,UAAU,CAAC,CAAClC,IAAI,CAAC;MAAA,OAClE,MAAI,CAACL,KAAK,CAACQ,QAAQ,CAAC2B,YAAY,CAACwD,WAAW,CAACxD,YAAY,EAAEuD,QAAQ,CAAC,CAACrF,IAAI,CAAC,UAACuF,GAAG;QAAA,OAAM;UAClFlB,UAAU,EAAE,IAAAC,2BAAmB,EAACiB,GAAG,CAACC,MAAM,CAACpE,EAAE,EAAEU,YAAY,CAACC,OAAO,CAAC;UACpEX,EAAE,EAAE,IAAAmC,8BAAsB,EAACgC,GAAG,CAACE,KAAK,CAACjC,SAAS,EAAE+B,GAAG,CAACG,MAAM,CAACtE,EAAE,EAAEU,YAAY,CAACC,OAAO,CAAC;UACpF0B,QAAQ,EAAE,IAAAC,0BAAkB,EAAC6B,GAAG,CAACE,KAAK,CAACjC,SAAS,EAAE1B,YAAY,CAACC,OAAO,CAAC;UACvE4B,WAAW,EAAE4B,GAAG,CAACE,KAAK,CAACE,YAAY,IAAIJ,GAAG,CAACE,KAAK,CAAC5B,UAAU;UAC3DC,iBAAiB,EAAEyB,GAAG,CAACE,KAAK,CAAC1B,WAAW;UACxCC,WAAW,EAAE,IAAAC,uBAAe,EAACsB,GAAG,CAACE,KAAK,CAACvB,KAAK,EAAEpC,YAAY,CAACC,OAAO,CAAC;UACnEF,MAAM,EAAE,IAAAU,wBAAgB,EAACgD,GAAG,CAACG,MAAM,CAACtE,EAAE,EAAEU,YAAY,CAACC,OAAO,CAAC;UAC7DW,QAAQ,EAAE,IAAAC,wBAAgB,EAAC4C,GAAG,CAACG,MAAM,CAAC9C,IAAI,CAAC;UAC3CG,YAAY,EAAE,KAAK;UAAE;UACrBoB,SAAS,EAAE,KAAK;UAAE;UAClByB,OAAO,EAAEL,GAAG,CAACM;QACf,CAAC;MAAA,CAAC,CAAC;IAAA,EACJ;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEnF,eAAe,2BAACD,KAAK,EAAE;IAAA;IACrB,IAAO4E,QAAQ,GAAI5E,KAAK,CAACqF,IAAI,CAAtBT,QAAQ;;IAEf;IACA,QAAQA,QAAQ,CAACU,IAAI;MACnB,KAAKnG,iBAAS,CAACW,QAAQ,CAACyF,aAAa,CAACC,MAAM;QAC1C,IAAMC,+BAA+B,GAAGb,QAAQ,CAACG,MAAM,CAAChD,YAAY,CAACnB,KAAK,CAAC8E,GAAG,CAC5E,UAAC9C,WAAW,EAAK;UACf,IAAM+C,MAAM,GAAG,yBAAUf,QAAQ,CAAC;UAElCe,MAAM,CAACV,MAAM,GAAG,yBAAUL,QAAQ,CAACG,MAAM,CAAC;UAC1CY,MAAM,CAACZ,MAAM,GAAG,yBAAUnC,WAAW,CAAC;UAEtC,OAAO,MAAI,CAACgD,kBAAkB,CAACD,MAAM,EAAExG,iBAAS,CAACC,QAAQ,CAACyG,UAAU,CAACC,OAAO,CAAC;QAC/E,CAAC,CACF;QAEDL,+BAA+B,CAACM,OAAO,CAAC,UAACV,IAAI,EAAK;UAChD,IAAIA,IAAI,EAAE;YACR1G,KAAK,2CAAkC,wBAAe0G,IAAI,CAAC,EAAG;YAC9D,MAAI,CAACW,OAAO,CAAC7G,iBAAS,CAACC,QAAQ,CAACyG,UAAU,CAACC,OAAO,EAAET,IAAI,CAAC;UAC3D;QACF,CAAC,CAAC;QACF;MAEF,KAAKlG,iBAAS,CAACW,QAAQ,CAACyF,aAAa,CAACU,GAAG;QACvC,IAAMC,0BAA0B,GAAG,IAAI,CAACN,kBAAkB,CACxDhB,QAAQ,EACRzF,iBAAS,CAACC,QAAQ,CAACyG,UAAU,CAACC,OAAO,CACtC;QAED,IAAII,0BAA0B,EAAE;UAC9BvH,KAAK,uDACD,wBAAeuH,0BAA0B,CAAC,EAAG;UACjD,IAAI,CAACF,OAAO,CAAC7G,iBAAS,CAACC,QAAQ,CAACyG,UAAU,CAACC,OAAO,EAAEI,0BAA0B,CAAC;QACjF;QACA;MAEF,KAAK/G,iBAAS,CAACW,QAAQ,CAACyF,aAAa,CAACY,KAAK;QACzC,IAAMC,0BAA0B,GAAG,IAAI,CAACR,kBAAkB,CACxDhB,QAAQ,EACRzF,iBAAS,CAACC,QAAQ,CAACyG,UAAU,CAACQ,OAAO,CACtC;QAED,IAAID,0BAA0B,EAAE;UAC9BzH,KAAK,uDACD,wBAAeyH,0BAA0B,CAAC,EAAG;UACjD,IAAI,CAACJ,OAAO,CAAC7G,iBAAS,CAACC,QAAQ,CAACyG,UAAU,CAACQ,OAAO,EAAED,0BAA0B,CAAC;QACjF;QACA;MAEF,KAAKjH,iBAAS,CAACW,QAAQ,CAACyF,aAAa,CAACe,aAAa;MACnD,KAAKnH,iBAAS,CAACW,QAAQ,CAACyF,aAAa,CAACgB,gBAAgB;MACtD,KAAKpH,iBAAS,CAACW,QAAQ,CAACyF,aAAa,CAACiB,IAAI;QACxC,IAAMC,0BAA0B,GAAG,IAAI,CAACb,kBAAkB,CACxDhB,QAAQ,EACRzF,iBAAS,CAACC,QAAQ,CAACyG,UAAU,CAACa,OAAO,CACtC;QAED,IAAID,0BAA0B,EAAE;UAC9B9H,KAAK,uDACD,wBAAe8H,0BAA0B,CAAC,EAAG;UACjD,IAAI,CAACT,OAAO,CAAC7G,iBAAS,CAACC,QAAQ,CAACyG,UAAU,CAACa,OAAO,EAAED,0BAA0B,CAAC;QACjF;QACA;MAEF,KAAKtH,iBAAS,CAACW,QAAQ,CAACyF,aAAa,CAACoB,WAAW;QAC/C,IAAMC,uBAAuB,GAAG,IAAI,CAAChB,kBAAkB,CACrDhB,QAAQ,EACRzF,iBAAS,CAACC,QAAQ,CAACyG,UAAU,CAACgB,IAAI,CACnC;QAED,IAAID,uBAAuB,EAAE;UAC3BjI,KAAK,uDACD,wBAAeiI,uBAAuB,CAAC,EAAG;UAC9C,IAAI,CAACZ,OAAO,CAAC7G,iBAAS,CAACC,QAAQ,CAACyG,UAAU,CAACgB,IAAI,EAAED,uBAAuB,CAAC;QAC3E;QACA;MAEF;QACE;IAAM;EAEZ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEhB,kBAAkB,8BAAChB,QAAQ,EAAE5E,KAAK,EAAE;IAClC,IAAI;MACF,IAAM8G,QAAQ,GAAG,yBAAU,IAAI,CAACrH,aAAa,CAAC;MAC9C,IAAM6B,OAAO,GACXsD,QAAQ,CAACU,IAAI,KAAKnG,iBAAS,CAACW,QAAQ,CAACyF,aAAa,CAACiB,IAAI,GACnD,IAAAO,6BAAqB,EAAC,IAAI,CAAC7H,KAAK,EAAE0F,QAAQ,CAACK,MAAM,CAAC+B,GAAG,CAAC,GACtD,IAAAD,6BAAqB,EAAC,IAAI,CAAC7H,KAAK,EAAE0F,QAAQ,CAACoC,GAAG,CAAC;MACrD,IAAIC,MAAM;MACV,IAAIC,KAAK;MAETJ,QAAQ,CAAC9G,KAAK,GAAGA,KAAK;MACtB8G,QAAQ,CAACzB,IAAI,CAACF,OAAO,GAAGP,QAAQ,CAACQ,SAAS;MAC1C0B,QAAQ,CAACK,OAAO,GAAG,IAAAlE,0BAAkB,EAAC2B,QAAQ,CAACI,KAAK,CAACjC,SAAS,EAAEzB,OAAO,CAAC;MACxE,IAAIsD,QAAQ,CAACU,IAAI,KAAKnG,iBAAS,CAACW,QAAQ,CAACyF,aAAa,CAACiB,IAAI,EAAE;QAC3DM,QAAQ,CAACzB,IAAI,CAACjE,MAAM,GAAG,IAAAU,wBAAgB,EAAC8C,QAAQ,CAACK,MAAM,CAACtE,EAAE,EAAEW,OAAO,CAAC;QACpEwF,QAAQ,CAACzB,IAAI,CAACpD,QAAQ,GAAG,IAAAC,wBAAgB,EAAC0C,QAAQ,CAACK,MAAM,CAAC9C,IAAI,CAAC;QAC/D2E,QAAQ,CAACzB,IAAI,CAAC/C,YAAY,GAAG,KAAK,CAAC,CAAC;MACtC,CAAC,MAAM;QACLwE,QAAQ,CAACzB,IAAI,CAACjE,MAAM,GAAG,IAAAU,wBAAgB,EAAC8C,QAAQ,CAACG,MAAM,CAACpE,EAAE,EAAEW,OAAO,CAAC;QACpEwF,QAAQ,CAACzB,IAAI,CAACpD,QAAQ,GAAG9C,iBAAS,CAACC,QAAQ,CAACgI,UAAU,CAACC,MAAM;QAC7D;QACAP,QAAQ,CAACzB,IAAI,CAAC/C,YAAY,GAAG,IAAI;MACnC;MACA,IAAIsC,QAAQ,CAACU,IAAI,KAAKnG,iBAAS,CAACW,QAAQ,CAACyF,aAAa,CAACoB,WAAW,EAAE;QAClE,IAAI/B,QAAQ,CAACG,MAAM,CAACpB,cAAc,IAAIiB,QAAQ,CAACG,MAAM,CAACpB,cAAc,CAACM,WAAW,EAAE;UAChF6C,QAAQ,CAACzB,IAAI,CAACpB,WAAW,GAAG,IAAI;QAClC,CAAC,MAAM;UACL6C,QAAQ,CAACzB,IAAI,CAACpB,WAAW,GAAG,KAAK;QACnC;MACF;MACA;MACA;MACA;;MAEA,IAAIW,QAAQ,CAACU,IAAI,KAAKnG,iBAAS,CAACW,QAAQ,CAACyF,aAAa,CAACoB,WAAW,EAAE;QAClE;QACAM,MAAM,GAAG9H,iBAAS,CAACW,QAAQ,CAACwH,cAAc,CAACC,KAAK;QAChD;QACAL,KAAK,GAAG/H,iBAAS,CAACW,QAAQ,CAACwH,cAAc,CAACE,MAAM;QAChD;QACAV,QAAQ,CAACzB,IAAI,CAACzB,UAAU,GAAG,IAAAC,2BAAmB,EAACe,QAAQ,CAACG,MAAM,CAACpE,EAAE,EAAEW,OAAO,CAAC;MAC7E,CAAC,MAAM,IAAIsD,QAAQ,CAACU,IAAI,KAAKnG,iBAAS,CAACW,QAAQ,CAACyF,aAAa,CAACiB,IAAI,EAAE;QAClE;QACAS,MAAM,GAAG9H,iBAAS,CAACW,QAAQ,CAACwH,cAAc,CAACC,KAAK;QAChD;QACAL,KAAK,GAAG/H,iBAAS,CAACW,QAAQ,CAACwH,cAAc,CAACG,MAAM;MAClD,CAAC,MAAM;QACL;QACAR,MAAM,GAAG9H,iBAAS,CAACW,QAAQ,CAACwH,cAAc,CAACG,MAAM;QACjD;QACAP,KAAK,GAAG/H,iBAAS,CAACW,QAAQ,CAACwH,cAAc,CAACE,MAAM;MAClD;MAEAV,QAAQ,CAACzB,IAAI,CAAC1E,EAAE,GAAG,IAAAmC,8BAAsB,EACvC8B,QAAQ,CAACqC,MAAM,CAAC,CAAClE,SAAS,EAC1B6B,QAAQ,CAACsC,KAAK,CAAC,CAACvG,EAAE,EAClBW,OAAO,CACR;MACDwF,QAAQ,CAACzB,IAAI,CAACrC,QAAQ,GAAG,IAAAC,0BAAkB,EAAC2B,QAAQ,CAACqC,MAAM,CAAC,CAAClE,SAAS,EAAEzB,OAAO,CAAC;MAChFwF,QAAQ,CAACzB,IAAI,CAACnC,WAAW,GAAG0B,QAAQ,CAACqC,MAAM,CAAC,CAAC/B,YAAY,IAAIN,QAAQ,CAACqC,MAAM,CAAC,CAAC7D,UAAU;MACxF0D,QAAQ,CAACzB,IAAI,CAAChC,iBAAiB,GAAGuB,QAAQ,CAACqC,MAAM,CAAC,CAAC3D,WAAW;MAC9DwD,QAAQ,CAACzB,IAAI,CAAC9B,WAAW,GAAG,IAAAC,uBAAe,EAACoB,QAAQ,CAACqC,MAAM,CAAC,CAACxD,KAAK,EAAEnC,OAAO,CAAC;MAE5E,OAAOwF,QAAQ;IACjB,CAAC,CAAC,OAAO1C,CAAC,EAAE;MACV,IAAI,CAAClF,KAAK,CAACwI,MAAM,CAACC,KAAK,sFACM3H,KAAK,qBAAWoE,CAAC,CAACO,OAAO,EAAG;MAEzD,OAAO,IAAI;IACb;EACF,CAAC;EAAA;AACH,CAAC,CAAC;AAAC,eAEY9F,WAAW;AAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Memberships represent a person's relationship to a room. Use this API to list
3
+ * members of any room that you're in or create memberships to invite someone
4
+ * to a room. Memberships can also be updated to make someone a moderator
5
+ * or deleted to remove them from the room.
6
+ * @class
7
+ * @name Memberships
8
+ */
9
+ declare const Memberships: any;
10
+ export default Memberships;
11
+
12
+ export { }
@@ -0,0 +1,11 @@
1
+ // This file is read by tools that parse documentation comments conforming to the TSDoc standard.
2
+ // It should be published with your NPM package. It should not be tracked by Git.
3
+ {
4
+ "tsdocVersion": "0.12",
5
+ "toolPackages": [
6
+ {
7
+ "packageName": "@microsoft/api-extractor",
8
+ "packageVersion": "7.34.4"
9
+ }
10
+ ]
11
+ }
@@ -0,0 +1,2 @@
1
+ export default Memberships;
2
+ import Memberships from "./memberships";