@twilio/conversations 3.0.0-rc.7 → 3.0.0-rc.8

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/dist/client.js CHANGED
@@ -260,15 +260,18 @@ exports.Client = Client_1 = class Client extends replayEventEmitter.ReplayEventE
260
260
  this._rejectEnsureReady(error);
261
261
  this.emit("stateChanged", { state: "failed", error });
262
262
  };
263
+ const emitDisconnected = () => {
264
+ emitFailed({
265
+ terminal: true,
266
+ message: "Twilsock has disconnected.",
267
+ });
268
+ };
263
269
  this._services.twilsockClient.onceWithReplay("connectionError", emitFailed);
264
- this._services.twilsockClient.onceWithReplay("disconnected", () => emitFailed({
265
- terminal: true,
266
- message: "Twilsock has disconnected.",
267
- }));
270
+ this._services.twilsockClient.onceWithReplay("disconnected", emitDisconnected);
268
271
  this._services.twilsockClient.onceWithReplay("connected", async () => {
269
272
  Client_1._logger.debug(`ConversationsClient started INITIALIZING`);
270
273
  this._services.twilsockClient.off("connectionError", emitFailed);
271
- this._services.twilsockClient.off("disconnected", emitFailed);
274
+ this._services.twilsockClient.off("disconnected", emitDisconnected);
272
275
  try {
273
276
  const startupEvent = "conversations.client.startup";
274
277
  this._services.twilsockClient.addPartialTelemetryEvent(new twilsock.TelemetryEventDescription(startupEvent, "Conversations client startup", new Date()), startupEvent, twilsock.TelemetryPoint.Start);
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sources":["../src/client.ts"],"sourcesContent":["import { Logger } from \"./logger\";\nimport { Configuration } from \"./configuration\";\n\nimport { User, UserUpdatedEventArgs, UserUpdateReason } from \"./user\";\nimport { Network } from \"./services/network\";\n\nimport { NotificationTypes } from \"./interfaces/notification-types\";\n\nimport {\n TwilsockClient,\n InitRegistration,\n ConnectionState as TwilsockConnectionState,\n Transport,\n ConnectionError,\n} from \"twilsock\";\nimport {\n ChannelType,\n Notifications as NotificationClient,\n} from \"@twilio/notifications\";\nimport { SyncClient } from \"twilio-sync\";\nimport { McsClient } from \"@twilio/mcs-client\";\n\nimport {\n Conversation,\n Conversations,\n Conversations as ConversationsEntity,\n} from \"./data/conversations\";\n\nimport { Users } from \"./data/users\";\nimport { TypingIndicator } from \"./services/typing-indicator\";\nimport { Paginator } from \"./interfaces/paginator\";\nimport { PushNotification } from \"./push-notification\";\nimport { deepClone, parseToNumber } from \"./util\";\nimport {\n Participant,\n ParticipantUpdatedEventArgs,\n ParticipantUpdateReason,\n} from \"./participant\";\nimport {\n Message,\n MessageUpdatedEventArgs,\n MessageUpdateReason,\n} from \"./message\";\nimport { TelemetryEventDescription, TelemetryPoint } from \"twilsock\";\nimport {\n validateTypesAsync,\n validateTypes,\n literal,\n nonEmptyString,\n pureObject,\n objectSchema,\n validateConstructorTypes,\n nonEmptyArray,\n} from \"@twilio/declarative-type-validator\";\nimport { version as sdkVersion } from \"../package.json\";\nimport {\n ConversationUpdatedEventArgs,\n ConversationUpdateReason,\n} from \"./conversation\";\nimport { CommandExecutor } from \"./command-executor\";\nimport { ConfigurationResponse } from \"./interfaces/commands/configuration\";\nimport { ReplayEventEmitter } from \"@twilio/replay-event-emitter\";\nimport { JSONValue } from \"./types\";\nimport { Media } from \"./media\";\nimport { CancellablePromise } from \"@twilio/mcs-client\";\n\n/**\n * Client events.\n */\ntype ClientEvents = {\n conversationAdded: (conversation: Conversation) => void;\n conversationJoined: (conversation: Conversation) => void;\n conversationLeft: (conversation: Conversation) => void;\n conversationRemoved: (conversation: Conversation) => void;\n conversationUpdated: (data: {\n conversation: Conversation;\n updateReasons: ConversationUpdateReason[];\n }) => void;\n participantJoined: (participant: Participant) => void;\n participantLeft: (participant: Participant) => void;\n participantUpdated: (data: {\n participant: Participant;\n updateReasons: ParticipantUpdateReason[];\n }) => void;\n messageAdded: (message: Message) => void;\n messageRemoved: (message: Message) => void;\n messageUpdated: (data: {\n message: Message;\n updateReasons: MessageUpdateReason[];\n }) => void;\n tokenAboutToExpire: () => void;\n tokenExpired: () => void;\n typingEnded: (participant: Participant) => void;\n typingStarted: (participant: Participant) => void;\n pushNotification: (pushNotification: PushNotification) => void;\n userSubscribed: (user: User) => void;\n userUnsubscribed: (user: User) => void;\n userUpdated: (data: {\n user: User;\n updateReasons: UserUpdateReason[];\n }) => void;\n stateChanged: ({\n state,\n error,\n }: {\n state: State;\n error?: ConnectionError;\n }) => void;\n connectionStateChanged: (state: TwilsockConnectionState) => void;\n connectionError: (data: ConnectionError) => void;\n};\n\n/**\n * Connection state of the client. Possible values are as follows:\n * * `'connecting'` - client is offline and connection attempt is in process\n * * `'connected'` - client is online and ready\n * * `'disconnecting'` - client is going offline as disconnection is in process\n * * `'disconnected'` - client is offline and no connection attempt is in\n * process\n * * `'denied'` - client connection is denied because of invalid JWT access\n * token. User must refresh token in order to proceed\n */\ntype ConnectionState = TwilsockConnectionState;\n\n/**\n * State of the client. Possible values are as follows:\n * * `'failed'` - the client failed to initialize\n * * `'initialized'` - the client successfully initialized\n */\ntype State = \"failed\" | \"initialized\";\n\n/**\n * Notifications channel type. Possible values are as follows:\n * * `'fcm'`\n * * `'apn'`\n */\ntype NotificationsChannelType = ChannelType;\n\n/**\n * Level of logging.\n */\ntype LogLevel = \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"silent\";\n\n/**\n * Conversations client options.\n */\ninterface ClientOptions {\n /**\n * The level of logging to enable.\n */\n logLevel?: LogLevel;\n\n region?: string;\n productId?: string;\n twilsockClient?: TwilsockClient;\n transport?: Transport;\n notificationsClient?: NotificationClient;\n syncClient?: SyncClient;\n typingIndicatorTimeoutOverride?: number;\n consumptionReportIntervalOverride?: string;\n httpCacheIntervalOverride?: string;\n userInfosToSubscribeOverride?: number;\n retryWhenThrottledOverride?: boolean;\n backoffConfigOverride?: Record<string, unknown>;\n Chat?: ClientOptions;\n IPMessaging?: ClientOptions;\n Sync?: Record<string, unknown>;\n Notification?: Record<string, unknown>;\n Twilsock?: Record<string, unknown>;\n clientMetadata?: Record<string, unknown>;\n initRegistrations?: InitRegistration[];\n disableDeepClone?: boolean;\n typingUri?: string;\n apiUri?: string;\n}\n\n/**\n * Options for {@link Client.createConversation}.\n */\ninterface CreateConversationOptions {\n /**\n * Any custom attributes to attach to the conversation.\n */\n attributes?: JSONValue;\n\n /**\n * A non-unique display name of the conversation.\n */\n friendlyName?: string;\n\n /**\n * A unique identifier of the conversation.\n */\n uniqueName?: string;\n}\n\n/**\n * Client services.\n */\nclass ClientServices {\n commandExecutor!: CommandExecutor;\n twilsockClient!: TwilsockClient;\n users!: Users;\n notificationClient!: NotificationClient;\n network!: Network;\n typingIndicator!: TypingIndicator;\n syncClient!: SyncClient;\n mcsClient!: McsClient;\n transport!: Transport;\n}\n\n/**\n * A client is the starting point to the Twilio Conversations functionality.\n */\n@validateConstructorTypes(nonEmptyString, [pureObject, \"undefined\"])\nclass Client extends ReplayEventEmitter<ClientEvents> {\n /**\n * Fired when a conversation becomes visible to the client. The event is also\n * triggered when the client creates a new conversation.\n * Fired for all conversations that the client has joined.\n *\n * Parameters:\n * 1. {@link Conversation} `conversation` - the conversation in question\n * @event\n */\n public static readonly conversationAdded = \"conversationAdded\";\n\n /**\n * Fired when the client joins a conversation.\n *\n * Parameters:\n * 1. {@link Conversation} `conversation` - the conversation in question\n * @event\n */\n public static readonly conversationJoined = \"conversationJoined\";\n\n /**\n * Fired when the client leaves a conversation.\n *\n * Parameters:\n * 1. {@link Conversation} `conversation` - the conversation in question\n * @event\n */\n public static readonly conversationLeft = \"conversationLeft\";\n\n /**\n * Fired when a conversation is no longer visible to the client.\n *\n * Parameters:\n * 1. {@link Conversation} `conversation` - the conversation in question\n * @event\n */\n public static readonly conversationRemoved = \"conversationRemoved\";\n\n /**\n * Fired when the attributes or the metadata of a conversation have been\n * updated. During conversation's creation and initialization, this event\n * might be fired multiple times for same joined or created conversation as\n * new data is arriving from different sources.\n *\n * Parameters:\n * 1. object `data` - info object provided with the event. It has the\n * following properties:\n * * {@link Conversation} `conversation` - the conversation in question\n * * {@link ConversationUpdateReason}[] `updateReasons` - array of reasons\n * for the update\n * @event\n */\n public static readonly conversationUpdated = \"conversationUpdated\";\n\n /**\n * Fired when a participant has joined a conversation.\n *\n * Parameters:\n * 1. {@link Participant} `participant` - the participant in question\n * @event\n */\n public static readonly participantJoined = \"participantJoined\";\n\n /**\n * Fired when a participant has left a conversation.\n *\n * Parameters:\n * 1. {@link Participant} `participant` - the participant in question\n * @event\n */\n public static readonly participantLeft = \"participantLeft\";\n\n /**\n * Fired when a participant's fields have been updated.\n *\n * Parameters:\n * 1. object `data` - info object provided with the event. It has the\n * following properties:\n * * {@link Participant} `participant` - the participant in question\n * * {@link ParticipantUpdateReason}[] `updateReasons` - array of reasons\n * for the update\n * @event\n */\n public static readonly participantUpdated = \"participantUpdated\";\n\n /**\n * Fired when a new message has been added to the conversation on the server.\n *\n * Parameters:\n * 1. {@link Message} `message` - the message in question\n * @event\n */\n public static readonly messageAdded = \"messageAdded\";\n\n /**\n * Fired when a message is removed from the message list of a conversation.\n *\n * Parameters:\n * 1. {@link Message} `message` - the message in question\n * @event\n */\n public static readonly messageRemoved = \"messageRemoved\";\n\n /**\n * Fired when the fields of an existing message are updated with new values.\n *\n * Parameters:\n * 1. object `data` - info object provided with the event. It has the\n * following properties:\n * * {@link Message} `message` - the message in question\n * * {@link MessageUpdateReason}[] `updateReasons` - array of reasons for\n * the update\n * @event\n */\n public static readonly messageUpdated = \"messageUpdated\";\n\n /**\n * Fired when the token is about to expire and needs to be updated.\n * @event\n */\n public static readonly tokenAboutToExpire = \"tokenAboutToExpire\";\n\n /**\n * Fired when the token has expired.\n * @event\n */\n public static readonly tokenExpired = \"tokenExpired\";\n\n /**\n * Fired when a participant has stopped typing.\n *\n * Parameters:\n * 1. {@link Participant} `participant` - the participant in question\n * @event\n */\n public static readonly typingEnded = \"typingEnded\";\n\n /**\n * Fired when a participant has started typing.\n *\n * Parameters:\n * 1. {@link Participant} `participant` - the participant in question\n * @event\n */\n public static readonly typingStarted = \"typingStarted\";\n\n /**\n * Fired when the client has received (and parsed) a push notification via one\n * of the push channels (apn or fcm).\n *\n * Parameters:\n * 1. {@link PushNotification} `pushNotification` - the push notification in\n * question\n * @event\n */\n public static readonly pushNotification = \"pushNotification\";\n\n /**\n * Fired when the client has subscribed to a user.\n *\n * Parameters:\n * 1. {@link User} `user` - the user in question\n * @event\n */\n public static readonly userSubscribed = \"userSubscribed\";\n\n /**\n * Fired when the client has unsubscribed from a user.\n *\n * Parameters:\n * 1. {@link User} `user` - the user in question\n * @event\n */\n public static readonly userUnsubscribed = \"userUnsubscribed\";\n\n /**\n * Fired when the properties or the reachability status of a user have been\n * updated.\n *\n * Parameters:\n * 1. object `data` - info object provided with the event. It has the\n * following properties:\n * * {@link User} `user` - the user in question\n * * {@link UserUpdateReason}[] `updateReasons` - array of reasons for the\n * update\n * @event\n */\n public static readonly userUpdated = \"userUpdated\";\n\n /**\n * Fired when the state of the client has been changed.\n *\n * Parameters:\n * 1. object `data` - info object provided with the event. It has the\n * following properties:\n * * {@link State} `state` - the new client state\n * * Error? `error` - the initialization error if present\n * @event\n */\n public static readonly stateChanged = \"stateChanged\";\n\n /**\n * Fired when the connection state of the client has been changed.\n *\n * Parameters:\n * 1. {@link ConnectionState} `state` - the new connection state\n * @event\n */\n public static readonly connectionStateChanged = \"connectionStateChanged\";\n\n /**\n * Fired when the connection is interrupted for an unexpected reason.\n *\n * Parameters:\n * 1. object `data` - info object provided with the event. It has the\n * following properties:\n * * boolean `terminal` - Twilsock will stop connection attempts if true\n * * string `message` - the error message of the root cause\n * * number? `httpStatusCode` - http status code if available\n * * number? `errorCode` - Twilio public error code if available\n * @event\n */\n public static readonly connectionError = \"connectionError\";\n\n /**\n * Current version of the Conversations client.\n */\n public static readonly version: string = sdkVersion;\n\n /**\n * Logger instance.\n */\n private static readonly _logger = Logger.scope(\"Client\");\n\n /**\n * Supported push notification channels.\n */\n private static readonly _supportedPushChannels: NotificationsChannelType[] = [\n \"fcm\",\n \"apn\",\n ];\n\n /**\n * Supported push data fields.\n */\n private static readonly _supportedPushDataFields = {\n conversation_sid: \"conversationSid\", // string\n conversation_title: \"conversationTitle\", // string\n message_sid: \"messageSid\", // string\n message_index: \"messageIndex\", // integer\n media_count: \"mediaCount\", // integer\n media: \"media\", // object\n };\n\n /**\n * Current version of the Conversations client.\n */\n public readonly version: string = sdkVersion;\n\n /**\n * Client connection state.\n */\n public connectionState: ConnectionState = \"unknown\";\n\n /**\n * Promise that resolves on successful initialization.\n */\n private readonly _ensureReady!: Promise<void>;\n\n /**\n * Options passed to the client.\n */\n private readonly _options: Partial<ClientOptions>;\n\n /**\n * Client service objects.\n */\n private readonly _services: ClientServices;\n\n /**\n * The user of the client.\n */\n private readonly _myself: User;\n\n /**\n * Resolves the {@link Client._ensureReady} promise.\n */\n private _resolveEnsureReady!: () => void;\n\n /**\n * Rejects the {@link Client._ensureReady} promise.\n */\n private _rejectEnsureReady!: (err?: ConnectionError) => void;\n\n /**\n * The current token of the client.\n */\n private _fpaToken: string;\n\n /**\n * The constructed configuration object.\n */\n private _configuration!: Configuration;\n\n /**\n * The Conversations entity.\n */\n private _conversationsEntity!: Conversations;\n\n /**\n * Promise that resolves when initial conversations are fetched.\n */\n private _conversationsPromise!: Promise<Conversations>;\n\n /**\n * Returned Conversations instance is not yet fully initialized. Calling any\n * operations will block until it is. Use connection events to monitor when\n * client becomes fully available (connectionStateChanged with state\n * 'connected') or not available (connectionStateChange with state 'denied',\n * event tokenExpired, event connectionError).\n *\n * @param fpaToken Access token\n * @param options Options to customize the Client\n * @returns A not yet fully-initialized client.\n */\n public constructor(fpaToken: string, options: ClientOptions | null = {}) {\n super();\n\n this._fpaToken = fpaToken ?? \"\";\n this._options = options ?? {};\n\n if (!this._options.disableDeepClone) {\n let options: Partial<ClientOptions> = {\n ...this._options,\n transport: undefined,\n twilsockClient: undefined,\n };\n\n options = deepClone(options);\n options.transport = this._options.transport;\n options.twilsockClient = this._options.twilsockClient;\n\n this._options = options;\n }\n\n this._options.logLevel = this._options.logLevel ?? \"silent\";\n Client._logger.setLevel(this._options.logLevel);\n\n const productId = (this._options.productId = \"ip_messaging\");\n\n // Filling ClientMetadata\n this._options.clientMetadata = this._options.clientMetadata || {};\n\n if (!this._options.clientMetadata.hasOwnProperty(\"type\")) {\n this._options.clientMetadata.type = \"conversations\";\n }\n\n if (!this._options.clientMetadata.hasOwnProperty(\"sdk\")) {\n this._options.clientMetadata.sdk = \"JS\";\n this._options.clientMetadata.sdkv = sdkVersion;\n }\n\n // Enable session local storage for Sync\n this._options.Sync = this._options.Sync || {};\n\n if (typeof this._options.Sync.enableSessionStorage === \"undefined\") {\n this._options.Sync.enableSessionStorage = true;\n }\n\n if (this._options.region) {\n this._options.Sync.region = this._options.region;\n }\n\n if (!fpaToken) {\n throw new Error(\"A valid Twilio token should be provided\");\n }\n\n this._services = new ClientServices();\n\n this._myself = new User(\"\", \"\", null, this._services);\n\n const startTwilsock = !this._options.twilsockClient;\n\n // Create default init registrations if none were provided.\n // Otherwise, the outside party have to list all the init registrations they\n // need.\n // Init registrations passed to the Conversations client will be passed down\n // to the Sync client as well.\n if (!this._options.initRegistrations) {\n const initRegistration = new InitRegistration(productId);\n Client.populateInitRegistrations(initRegistration);\n this._options.initRegistrations = [initRegistration];\n }\n\n this._services.twilsockClient = this._options.twilsockClient =\n this._options.twilsockClient ??\n new TwilsockClient(fpaToken, productId, this._options);\n\n this._services.twilsockClient.on(\"tokenAboutToExpire\", () =>\n this.emit(\"tokenAboutToExpire\")\n );\n this._services.twilsockClient.on(\"tokenExpired\", () =>\n this.emit(\"tokenExpired\")\n );\n this._services.twilsockClient.on(\"connectionError\", (error) =>\n this.emit(\"connectionError\", error)\n );\n this._services.twilsockClient.on(\n \"stateChanged\",\n (state: ConnectionState) => {\n Client._logger.debug(\n `Handling stateChanged for ConversationsClient: new state ${state}`\n );\n if (state !== this.connectionState) {\n this.connectionState = state;\n this.emit(\"connectionStateChanged\", this.connectionState);\n }\n }\n );\n\n this._services.transport = this._options.transport = (this._options\n .transport ?? this._options.twilsockClient) as Transport;\n this._services.notificationClient = this._options.notificationsClient =\n this._options.notificationsClient ??\n new NotificationClient(fpaToken, this._options);\n this._services.syncClient = this._options.syncClient =\n this._options.syncClient ?? new SyncClient(fpaToken, this._options);\n\n const configurationOptions =\n options?.Chat || options?.IPMessaging || options || {};\n const region = configurationOptions.region || options?.region;\n const baseUrl: string =\n configurationOptions.apiUri ||\n configurationOptions.typingUri ||\n `https://aim.${region || \"us1\"}.twilio.com`;\n\n this._services.commandExecutor = new CommandExecutor(\n baseUrl,\n { transport: this._options.transport },\n productId\n );\n\n const emitFailed = (error?: ConnectionError): void => {\n this._rejectEnsureReady(error);\n this.emit(\"stateChanged\", { state: \"failed\", error });\n };\n\n this._services.twilsockClient.onceWithReplay(\"connectionError\", emitFailed);\n this._services.twilsockClient.onceWithReplay(\"disconnected\", () =>\n emitFailed({\n terminal: true,\n message: \"Twilsock has disconnected.\",\n })\n );\n this._services.twilsockClient.onceWithReplay(\"connected\", async () => {\n Client._logger.debug(`ConversationsClient started INITIALIZING`);\n this._services.twilsockClient.off(\"connectionError\", emitFailed);\n this._services.twilsockClient.off(\"disconnected\", emitFailed);\n try {\n const startupEvent = \"conversations.client.startup\";\n\n this._services.twilsockClient.addPartialTelemetryEvent(\n new TelemetryEventDescription(\n startupEvent,\n \"Conversations client startup\",\n new Date()\n ),\n startupEvent,\n TelemetryPoint.Start\n );\n\n await this._initialize();\n\n this._services.twilsockClient.addPartialTelemetryEvent(\n new TelemetryEventDescription(\"\", \"\", new Date()),\n startupEvent,\n TelemetryPoint.End\n );\n } catch (err) {\n // Fail ChatClient if initialization is incomplete\n const connectionError = {\n terminal: true,\n message: err.message,\n };\n this._rejectEnsureReady(connectionError);\n this.emit(\"stateChanged\", { state: \"failed\", error: connectionError });\n }\n });\n\n this._ensureReady = new Promise<void>((resolve, reject) => {\n this._resolveEnsureReady = resolve;\n this._rejectEnsureReady = reject;\n }).catch(() => void 0); // @todo How to process unhandled rejection here?\n\n if (startTwilsock) {\n this._services.twilsockClient.connect();\n }\n }\n\n /**\n * Information of the logged-in user. Before client initialization, returns an\n * uninitialized user. Will trigger a {@link Client.userUpdated} event after\n * initialization.\n */\n public get user(): User {\n return this._myself;\n }\n\n /**\n * Client reachability state. Throws an error if accessed before the client\n * initialization was completed.\n */\n public get reachabilityEnabled(): boolean {\n if (!this._configuration) {\n throw new Error(\n \"Reachability information could not yet be accessed as the client \" +\n \"has not yet been initialized. Subscribe to the 'stateChanged' event \" +\n \"to properly react to the client initialization.\"\n );\n }\n\n return this._configuration.reachabilityEnabled;\n }\n\n /**\n * @deprecated Call constructor directly.\n *\n * Factory method to create a Conversations client instance.\n *\n * The factory method will automatically trigger connection.\n * Do not use it if you need finer-grained control.\n *\n * Since this method returns an already-initialized client, some of the events\n * will be lost because they happen *before* the initialization. It is\n * recommended that `client.onWithReplay` is used as opposed to `client.on`\n * for subscribing to client events. The `client.onWithReplay` will re-emit\n * the most recent value for a given event if it emitted before the\n * subscription.\n *\n * @param token Access token.\n * @param options Options to customize the client.\n * @returns Returns a fully initialized client.\n */\n @validateTypesAsync(\"string\", [\"undefined\", pureObject])\n public static async create(\n token: string,\n options?: ClientOptions | null\n ): Promise<Client> {\n // The logic is as follows:\n // - If twilsock is not passed in, then the ConversationsClient constructor will call twilsock.connect() by itself\n // and we do not need to do it here.\n // - If twilsock was passed in from the outside, but customer called ConversationsClient.create() then they are\n // using an obsolete workflow and the startup sequence will never complete.\n if (options?.twilsockClient) {\n throw new Error(\n \"Obsolete usage of ConversationsClient.create() \" +\n \"factory method: if you pass twilsock from the outside then you must \" +\n \"use ConversationsClient constructor and be prepared to work with \" +\n \"uninitialized client.\"\n );\n }\n\n const client = new Client(token, options);\n await client._ensureReady;\n\n return client;\n }\n\n /**\n * Static method for push notification payload parsing. Returns parsed push as\n * a {@link PushNotification} object.\n * @param notificationPayload Push notification payload.\n */\n @validateTypes(pureObject)\n public static parsePushNotification(notificationPayload): PushNotification {\n Client._logger.debug(\n \"parsePushNotification, notificationPayload=\",\n notificationPayload\n );\n\n // APNS specifics\n if (typeof notificationPayload.aps !== \"undefined\") {\n if (!notificationPayload.twi_message_type) {\n throw new Error(\n \"Provided push notification payload does not contain Programmable Chat push notification type\"\n );\n }\n\n const data = Client._parsePushNotificationChatData(notificationPayload);\n\n const apsPayload = notificationPayload.aps;\n let body: string | null;\n let title: string | null = null;\n if (typeof apsPayload.alert === \"string\") {\n body = apsPayload.alert || null;\n } else {\n body = apsPayload.alert?.body || null;\n title = apsPayload.alert?.title || null;\n }\n\n return new PushNotification({\n title,\n body,\n sound: apsPayload.sound || null,\n badge: apsPayload.badge || null,\n action: apsPayload.category || null,\n type: notificationPayload.twi_message_type,\n data: data,\n });\n }\n\n // FCM specifics\n if (typeof notificationPayload.data !== \"undefined\") {\n const dataPayload = notificationPayload.data;\n if (!dataPayload.twi_message_type) {\n throw new Error(\n \"Provided push notification payload does not contain Programmable Chat push notification type\"\n );\n }\n\n const data = Client._parsePushNotificationChatData(\n notificationPayload.data\n );\n return new PushNotification({\n title: dataPayload.twi_title || null,\n body: dataPayload.twi_body || null,\n sound: dataPayload.twi_sound || null,\n badge: null,\n action: dataPayload.twi_action || null,\n type: dataPayload.twi_message_type,\n data: data,\n });\n }\n\n throw new Error(\n \"Provided push notification payload is not Programmable Chat notification\"\n );\n }\n\n /**\n * Static method for parsing push notification chat data.\n * @param data Data to parse\n */\n private static _parsePushNotificationChatData(\n data: Record<string, unknown>\n ): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const key in Client._supportedPushDataFields) {\n const value = data[key];\n if (typeof value === \"undefined\" || value === null) {\n continue;\n }\n\n if (key === \"message_index\" || key === \"media_count\") {\n const number = parseToNumber(value);\n if (number !== null) {\n result[Client._supportedPushDataFields[key]] = number;\n }\n continue;\n }\n\n if (key === \"media\") {\n if (typeof value === \"string\") {\n try {\n result[Client._supportedPushDataFields[key]] = JSON.parse(value);\n } catch {\n Client._logger.debug(\"Media message notification parsing error\");\n }\n }\n continue;\n }\n\n result[Client._supportedPushDataFields[key]] = value;\n }\n\n return result;\n }\n\n /**\n * Populate the client with init registrations.\n * @param reg The init registration to populate.\n */\n public static populateInitRegistrations(reg: InitRegistration) {\n reg.populateInitRegistrations([NotificationTypes.TYPING_INDICATOR]);\n SyncClient.populateInitRegistrations(reg);\n }\n\n /**\n * Gracefully shut down the client.\n */\n public async shutdown(): Promise<void> {\n await this._ensureReady;\n await this._services.twilsockClient.disconnect();\n }\n\n /**\n * Update the token used by the client and re-register with the Conversations services.\n * @param token New access token.\n */\n @validateTypesAsync(nonEmptyString)\n public async updateToken(token: string): Promise<Client> {\n await this._ensureReady;\n Client._logger.info(\"updateToken\");\n\n if (this._fpaToken === token) {\n return this;\n }\n\n await this._services.twilsockClient.updateToken(token);\n await this._services.notificationClient.updateToken(token);\n await this._services.mcsClient.updateToken(token);\n this._fpaToken = token;\n\n return this;\n }\n\n /**\n * Get a known conversation by its SID.\n * @param conversationSid Conversation sid\n */\n @validateTypesAsync(nonEmptyString)\n public async getConversationBySid(\n conversationSid: string\n ): Promise<Conversation> {\n await this._ensureReady;\n await this._conversationsEntity.myConversationsRead.promise;\n\n const conversation = await this._conversationsEntity.getConversation(\n conversationSid\n );\n\n if (!conversation) {\n throw new Error(\n `Conversation with SID ${conversationSid} was not found.`\n );\n }\n\n return conversation;\n }\n\n /**\n * Peek a conversation by its SID.\n * @param conversationSid Conversation sid\n * @internal\n */\n @validateTypesAsync(nonEmptyString)\n public async peekConversationBySid(\n conversationSid: string\n ): Promise<Conversation> {\n await this._ensureReady;\n\n const conversation = await this._conversationsEntity.peekConversation(\n conversationSid\n );\n\n if (!conversation) {\n throw new Error(\n `Conversation with SID ${conversationSid} was not found.`\n );\n }\n\n return conversation;\n }\n\n /**\n * Get a known conversation by its unique identifier name.\n * @param uniqueName The unique identifier name of the conversation.\n */\n @validateTypesAsync(nonEmptyString)\n public async getConversationByUniqueName(\n uniqueName: string\n ): Promise<Conversation> {\n await this._ensureReady;\n await this._conversationsEntity.myConversationsRead.promise;\n const conversation =\n await this._conversationsEntity.getConversationByUniqueName(uniqueName);\n\n if (!conversation) {\n throw new Error(\n `Conversation with unique name ${uniqueName} was not found.`\n );\n }\n\n return conversation;\n }\n\n /**\n * Get the current list of all the subscribed conversations.\n */\n public async getSubscribedConversations(): Promise<Paginator<Conversation>> {\n await this._ensureReady;\n return this._conversationsPromise.then((conversations) =>\n conversations.getConversations()\n );\n }\n\n /**\n * Create a conversation on the server and subscribe to its events.\n * The default is a conversation with an empty friendly name.\n * @param options Options for the conversation.\n */\n @validateTypesAsync([\n \"undefined\",\n objectSchema(\"conversation options\", {\n friendlyName: [\"string\", \"undefined\"],\n isPrivate: [\"boolean\", \"undefined\"],\n uniqueName: [\"string\", \"undefined\"],\n }),\n ])\n public async createConversation(\n options?: CreateConversationOptions\n ): Promise<Conversation> {\n await this._ensureReady;\n options = options || {};\n return this._conversationsPromise.then((conversationsEntity) =>\n conversationsEntity.addConversation(options)\n );\n }\n\n /**\n * Register for push notifications.\n * @param channelType Channel type.\n * @param registrationId Push notification ID provided by the FCM/APNS service\n * on the platform.\n */\n @validateTypesAsync(literal(\"fcm\", \"apn\"), \"string\")\n public async setPushRegistrationId(\n channelType: NotificationsChannelType,\n registrationId: string\n ): Promise<void> {\n await this._ensureReady;\n this._subscribeToPushNotifications(channelType);\n this._services.notificationClient.setPushRegistrationId(\n channelType,\n registrationId\n );\n await this._services.notificationClient.commitChanges(); // Committing before this point is useless because we have no push id\n }\n\n /**\n * Unregister from push notifications.\n * @param channelType Channel type.\n * @deprecated Use removePushRegistrations() instead.\n */\n @validateTypesAsync(literal(\"fcm\", \"apn\"))\n public async unsetPushRegistrationId(\n channelType: NotificationsChannelType\n ): Promise<void> {\n await this._ensureReady;\n this._unsubscribeFromPushNotifications(channelType);\n await this._services.notificationClient.commitChanges();\n }\n\n /**\n * Clear existing registrations directly using provided device token.\n * This is useful to ensure stopped subscriptions without resubscribing.\n *\n * This function goes completely beside the state machine and removes all\n * registrations.\n * Use with caution: if it races with current state machine operations,\n * madness will ensue.\n *\n * @param channelType Channel type.\n * @param registrationId Push notification ID provided by the FCM/APNS service\n * on the platform.\n */\n @validateTypesAsync(literal(\"fcm\", \"apn\"), nonEmptyString)\n public async removePushRegistrations(\n channelType: ChannelType,\n registrationId: string\n ): Promise<void> {\n // do not await this._ensureReady() here - it could be called at any moment\n await this._services.notificationClient.removeRegistrations(\n channelType,\n registrationId\n );\n }\n\n /**\n * Current version of the Conversations client.\n */\n public parsePushNotification = Client.parsePushNotification;\n\n /**\n * Handle push notification payload parsing and emit the\n * {@link Client.pushNotification} event on this {@link Client} instance.\n * @param notificationPayload Push notification payload\n */\n @validateTypesAsync(pureObject)\n public async handlePushNotification(notificationPayload): Promise<void> {\n await this._ensureReady;\n Client._logger.debug(\n \"handlePushNotification, notificationPayload=\",\n notificationPayload\n );\n this.emit(\n \"pushNotification\",\n Client.parsePushNotification(notificationPayload)\n );\n }\n\n /**\n * Gets a user with the given identity. If it's in the subscribed list, then\n * return the user object from it;\n * if not, then subscribe and add user to the subscribed list.\n * @param identity Identity of the user.\n * @returns A fully initialized user.\n */\n @validateTypesAsync(nonEmptyString)\n public async getUser(identity: string): Promise<User> {\n await this._ensureReady;\n return this._services.users.getUser(identity);\n }\n\n /**\n * Get a list of subscribed user objects.\n */\n public async getSubscribedUsers(): Promise<Array<User>> {\n await this._ensureReady;\n return this._services.users.getSubscribedUsers();\n }\n\n /**\n * Get content URLs for all media attachments in the given set of media sids\n * using a single operation.\n * @param mediaSids Set of media sids to query for the content URL.\n */\n @validateTypesAsync(nonEmptyArray(\"strings\", \"string\"))\n public getTemporaryContentUrlsForMediaSids(\n mediaSids: string[]\n ): CancellablePromise<Map<string, string>> {\n return new CancellablePromise(async (resolve, reject, onCancel) => {\n if (!this._services.mcsClient || !mediaSids) {\n reject(new Error(\"Media Content Service is unavailable\"));\n return;\n }\n\n const request =\n this._services.mcsClient.mediaSetGetContentUrls(mediaSids);\n\n onCancel(() => {\n request.cancel();\n });\n\n try {\n const urls = await request;\n resolve(urls);\n } catch (e) {\n reject(e);\n }\n });\n }\n\n /**\n * Get content URLs for all media attachments in the given set using a single\n * operation.\n * @param contentSet Set of media attachments to query content URLs.\n */\n @validateTypesAsync(nonEmptyArray(\"media\", Media))\n public getTemporaryContentUrlsForMedia(\n contentSet: Media[]\n ): CancellablePromise<Map<string, string>> {\n // We ignore existing mcsMedia members of each of the media entries.\n // Instead, we just collect their sids and pull new descriptors from a\n // mediaSet GET endpoint.\n const sids = contentSet.map((m) => m.sid);\n return this.getTemporaryContentUrlsForMediaSids(sids);\n }\n\n /**\n * Initialize the client.\n */\n private async _initialize() {\n const configurationResponse =\n await this._services.commandExecutor.fetchResource<\n void,\n ConfigurationResponse\n >(\"Client/v2/Configuration\");\n\n this._configuration = new Configuration(\n this._options as ClientOptions,\n configurationResponse,\n Client._logger\n );\n\n this._myself._resolveInitialization(\n this._configuration,\n this._configuration.userIdentity,\n this._configuration.userInfo,\n true\n );\n\n this._services.typingIndicator = new TypingIndicator(\n this.getConversationBySid.bind(this),\n this._configuration,\n this._services\n );\n this._services.network = new Network(this._configuration, this._services);\n\n this._services.users = new Users(\n this._myself,\n this._configuration,\n this._services\n );\n this._services.users.on(\"userSubscribed\", (user) => {\n this.emit(\"userSubscribed\", user);\n });\n this._services.users.on(\"userUpdated\", (args: UserUpdatedEventArgs) =>\n this.emit(\"userUpdated\", args)\n );\n this._services.users.on(\"userUnsubscribed\", (user) => {\n this.emit(\"userUnsubscribed\", user);\n });\n\n this._conversationsEntity = new ConversationsEntity(\n this._configuration,\n this._services\n );\n\n this._conversationsEntity.on(\"conversationAdded\", (conversation) => {\n this.emit(\"conversationAdded\", conversation);\n });\n this._conversationsEntity.on(\"conversationRemoved\", (conversation) => {\n this.emit(\"conversationRemoved\", conversation);\n });\n this._conversationsEntity.on(\"conversationJoined\", (conversation) => {\n this.emit(\"conversationJoined\", conversation);\n });\n this._conversationsEntity.on(\"conversationLeft\", (conversation) => {\n this.emit(\"conversationLeft\", conversation);\n });\n this._conversationsEntity.on(\n \"conversationUpdated\",\n (args: ConversationUpdatedEventArgs) =>\n this.emit(\"conversationUpdated\", args)\n );\n\n this._conversationsEntity.on(\"participantJoined\", (participant) => {\n this.emit(\"participantJoined\", participant);\n });\n this._conversationsEntity.on(\"participantLeft\", (participant) => {\n this.emit(\"participantLeft\", participant);\n });\n this._conversationsEntity.on(\n \"participantUpdated\",\n (args: ParticipantUpdatedEventArgs) =>\n this.emit(\"participantUpdated\", args)\n );\n\n this._conversationsEntity.on(\"messageAdded\", (message) =>\n this.emit(\"messageAdded\", message)\n );\n this._conversationsEntity.on(\n \"messageUpdated\",\n (args: MessageUpdatedEventArgs) => this.emit(\"messageUpdated\", args)\n );\n this._conversationsEntity.on(\"messageRemoved\", (message) =>\n this.emit(\"messageRemoved\", message)\n );\n\n this._conversationsEntity.on(\"typingStarted\", (participant) =>\n this.emit(\"typingStarted\", participant)\n );\n this._conversationsEntity.on(\"typingEnded\", (participant) =>\n this.emit(\"typingEnded\", participant)\n );\n\n this._conversationsPromise = this._conversationsEntity\n .fetchConversations()\n .then(() => this._conversationsEntity)\n .catch((error) => {\n throw error;\n });\n\n await this._services.users.myself._ensureFetched();\n\n Client._supportedPushChannels.forEach((channelType) =>\n this._subscribeToPushNotifications(channelType)\n );\n this._services.typingIndicator.initialize();\n\n this._services.mcsClient = new McsClient(\n this._fpaToken,\n this._configuration.links.mediaService,\n this._configuration.links.mediaSetService,\n {\n ...this._options,\n transport: undefined,\n }\n );\n\n this._resolveEnsureReady();\n this.emit(\"stateChanged\", { state: \"initialized\" });\n }\n\n /**\n * Subscribe to push notifications.\n * @param channelType The channel type to subscribe to.\n */\n private _subscribeToPushNotifications(channelType: NotificationsChannelType) {\n [\n NotificationTypes.NEW_MESSAGE,\n NotificationTypes.ADDED_TO_CONVERSATION,\n NotificationTypes.REMOVED_FROM_CONVERSATION,\n NotificationTypes.TYPING_INDICATOR,\n NotificationTypes.CONSUMPTION_UPDATE,\n ].forEach((messageType) => {\n this._services.notificationClient.subscribe(channelType, messageType);\n });\n }\n\n /**\n * Unsubscribe from push notifications.\n * @param channelType The channel type to unsubscribe from.\n */\n private _unsubscribeFromPushNotifications(\n channelType: NotificationsChannelType\n ) {\n [\n NotificationTypes.NEW_MESSAGE,\n NotificationTypes.ADDED_TO_CONVERSATION,\n NotificationTypes.REMOVED_FROM_CONVERSATION,\n NotificationTypes.TYPING_INDICATOR,\n NotificationTypes.CONSUMPTION_UPDATE,\n ].forEach((messageType) => {\n this._services.notificationClient.unsubscribe(channelType, messageType);\n });\n }\n}\n\nexport {\n Client,\n State,\n ConnectionState,\n NotificationsChannelType,\n LogLevel,\n ClientOptions,\n CreateConversationOptions,\n};\n"],"names":["Client","ReplayEventEmitter","sdkVersion","deepClone","User","InitRegistration","TwilsockClient","NotificationClient","SyncClient","CommandExecutor","TelemetryEventDescription","TelemetryPoint","PushNotification","parseToNumber","NotificationTypes","CancellablePromise","Configuration","TypingIndicator","Network","Users","ConversationsEntity","McsClient","Logger","__decorate","validateTypesAsync","nonEmptyString","objectSchema","literal","pureObject","nonEmptyArray","Media","validateTypes","validateConstructorTypes"],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sources":["../src/client.ts"],"sourcesContent":["import { Logger } from \"./logger\";\nimport { Configuration } from \"./configuration\";\n\nimport { User, UserUpdatedEventArgs, UserUpdateReason } from \"./user\";\nimport { Network } from \"./services/network\";\n\nimport { NotificationTypes } from \"./interfaces/notification-types\";\n\nimport {\n TwilsockClient,\n InitRegistration,\n ConnectionState as TwilsockConnectionState,\n Transport,\n ConnectionError,\n} from \"twilsock\";\nimport {\n ChannelType,\n Notifications as NotificationClient,\n} from \"@twilio/notifications\";\nimport { SyncClient } from \"twilio-sync\";\nimport { McsClient } from \"@twilio/mcs-client\";\n\nimport {\n Conversation,\n Conversations,\n Conversations as ConversationsEntity,\n} from \"./data/conversations\";\n\nimport { Users } from \"./data/users\";\nimport { TypingIndicator } from \"./services/typing-indicator\";\nimport { Paginator } from \"./interfaces/paginator\";\nimport { PushNotification } from \"./push-notification\";\nimport { deepClone, parseToNumber } from \"./util\";\nimport {\n Participant,\n ParticipantUpdatedEventArgs,\n ParticipantUpdateReason,\n} from \"./participant\";\nimport {\n Message,\n MessageUpdatedEventArgs,\n MessageUpdateReason,\n} from \"./message\";\nimport { TelemetryEventDescription, TelemetryPoint } from \"twilsock\";\nimport {\n validateTypesAsync,\n validateTypes,\n literal,\n nonEmptyString,\n pureObject,\n objectSchema,\n validateConstructorTypes,\n nonEmptyArray,\n} from \"@twilio/declarative-type-validator\";\nimport { version as sdkVersion } from \"../package.json\";\nimport {\n ConversationUpdatedEventArgs,\n ConversationUpdateReason,\n} from \"./conversation\";\nimport { CommandExecutor } from \"./command-executor\";\nimport { ConfigurationResponse } from \"./interfaces/commands/configuration\";\nimport { ReplayEventEmitter } from \"@twilio/replay-event-emitter\";\nimport { JSONValue } from \"./types\";\nimport { Media } from \"./media\";\nimport { CancellablePromise } from \"@twilio/mcs-client\";\n\n/**\n * Client events.\n */\ntype ClientEvents = {\n conversationAdded: (conversation: Conversation) => void;\n conversationJoined: (conversation: Conversation) => void;\n conversationLeft: (conversation: Conversation) => void;\n conversationRemoved: (conversation: Conversation) => void;\n conversationUpdated: (data: {\n conversation: Conversation;\n updateReasons: ConversationUpdateReason[];\n }) => void;\n participantJoined: (participant: Participant) => void;\n participantLeft: (participant: Participant) => void;\n participantUpdated: (data: {\n participant: Participant;\n updateReasons: ParticipantUpdateReason[];\n }) => void;\n messageAdded: (message: Message) => void;\n messageRemoved: (message: Message) => void;\n messageUpdated: (data: {\n message: Message;\n updateReasons: MessageUpdateReason[];\n }) => void;\n tokenAboutToExpire: () => void;\n tokenExpired: () => void;\n typingEnded: (participant: Participant) => void;\n typingStarted: (participant: Participant) => void;\n pushNotification: (pushNotification: PushNotification) => void;\n userSubscribed: (user: User) => void;\n userUnsubscribed: (user: User) => void;\n userUpdated: (data: {\n user: User;\n updateReasons: UserUpdateReason[];\n }) => void;\n stateChanged: ({\n state,\n error,\n }: {\n state: State;\n error?: ConnectionError;\n }) => void;\n connectionStateChanged: (state: TwilsockConnectionState) => void;\n connectionError: (data: ConnectionError) => void;\n};\n\n/**\n * Connection state of the client. Possible values are as follows:\n * * `'connecting'` - client is offline and connection attempt is in process\n * * `'connected'` - client is online and ready\n * * `'disconnecting'` - client is going offline as disconnection is in process\n * * `'disconnected'` - client is offline and no connection attempt is in\n * process\n * * `'denied'` - client connection is denied because of invalid JWT access\n * token. User must refresh token in order to proceed\n */\ntype ConnectionState = TwilsockConnectionState;\n\n/**\n * State of the client. Possible values are as follows:\n * * `'failed'` - the client failed to initialize\n * * `'initialized'` - the client successfully initialized\n */\ntype State = \"failed\" | \"initialized\";\n\n/**\n * Notifications channel type. Possible values are as follows:\n * * `'fcm'`\n * * `'apn'`\n */\ntype NotificationsChannelType = ChannelType;\n\n/**\n * Level of logging.\n */\ntype LogLevel = \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"silent\";\n\n/**\n * Conversations client options.\n */\ninterface ClientOptions {\n /**\n * The level of logging to enable.\n */\n logLevel?: LogLevel;\n\n region?: string;\n productId?: string;\n twilsockClient?: TwilsockClient;\n transport?: Transport;\n notificationsClient?: NotificationClient;\n syncClient?: SyncClient;\n typingIndicatorTimeoutOverride?: number;\n consumptionReportIntervalOverride?: string;\n httpCacheIntervalOverride?: string;\n userInfosToSubscribeOverride?: number;\n retryWhenThrottledOverride?: boolean;\n backoffConfigOverride?: Record<string, unknown>;\n Chat?: ClientOptions;\n IPMessaging?: ClientOptions;\n Sync?: Record<string, unknown>;\n Notification?: Record<string, unknown>;\n Twilsock?: Record<string, unknown>;\n clientMetadata?: Record<string, unknown>;\n initRegistrations?: InitRegistration[];\n disableDeepClone?: boolean;\n typingUri?: string;\n apiUri?: string;\n}\n\n/**\n * Options for {@link Client.createConversation}.\n */\ninterface CreateConversationOptions {\n /**\n * Any custom attributes to attach to the conversation.\n */\n attributes?: JSONValue;\n\n /**\n * A non-unique display name of the conversation.\n */\n friendlyName?: string;\n\n /**\n * A unique identifier of the conversation.\n */\n uniqueName?: string;\n}\n\n/**\n * Client services.\n */\nclass ClientServices {\n commandExecutor!: CommandExecutor;\n twilsockClient!: TwilsockClient;\n users!: Users;\n notificationClient!: NotificationClient;\n network!: Network;\n typingIndicator!: TypingIndicator;\n syncClient!: SyncClient;\n mcsClient!: McsClient;\n transport!: Transport;\n}\n\n/**\n * A client is the starting point to the Twilio Conversations functionality.\n */\n@validateConstructorTypes(nonEmptyString, [pureObject, \"undefined\"])\nclass Client extends ReplayEventEmitter<ClientEvents> {\n /**\n * Fired when a conversation becomes visible to the client. The event is also\n * triggered when the client creates a new conversation.\n * Fired for all conversations that the client has joined.\n *\n * Parameters:\n * 1. {@link Conversation} `conversation` - the conversation in question\n * @event\n */\n public static readonly conversationAdded = \"conversationAdded\";\n\n /**\n * Fired when the client joins a conversation.\n *\n * Parameters:\n * 1. {@link Conversation} `conversation` - the conversation in question\n * @event\n */\n public static readonly conversationJoined = \"conversationJoined\";\n\n /**\n * Fired when the client leaves a conversation.\n *\n * Parameters:\n * 1. {@link Conversation} `conversation` - the conversation in question\n * @event\n */\n public static readonly conversationLeft = \"conversationLeft\";\n\n /**\n * Fired when a conversation is no longer visible to the client.\n *\n * Parameters:\n * 1. {@link Conversation} `conversation` - the conversation in question\n * @event\n */\n public static readonly conversationRemoved = \"conversationRemoved\";\n\n /**\n * Fired when the attributes or the metadata of a conversation have been\n * updated. During conversation's creation and initialization, this event\n * might be fired multiple times for same joined or created conversation as\n * new data is arriving from different sources.\n *\n * Parameters:\n * 1. object `data` - info object provided with the event. It has the\n * following properties:\n * * {@link Conversation} `conversation` - the conversation in question\n * * {@link ConversationUpdateReason}[] `updateReasons` - array of reasons\n * for the update\n * @event\n */\n public static readonly conversationUpdated = \"conversationUpdated\";\n\n /**\n * Fired when a participant has joined a conversation.\n *\n * Parameters:\n * 1. {@link Participant} `participant` - the participant in question\n * @event\n */\n public static readonly participantJoined = \"participantJoined\";\n\n /**\n * Fired when a participant has left a conversation.\n *\n * Parameters:\n * 1. {@link Participant} `participant` - the participant in question\n * @event\n */\n public static readonly participantLeft = \"participantLeft\";\n\n /**\n * Fired when a participant's fields have been updated.\n *\n * Parameters:\n * 1. object `data` - info object provided with the event. It has the\n * following properties:\n * * {@link Participant} `participant` - the participant in question\n * * {@link ParticipantUpdateReason}[] `updateReasons` - array of reasons\n * for the update\n * @event\n */\n public static readonly participantUpdated = \"participantUpdated\";\n\n /**\n * Fired when a new message has been added to the conversation on the server.\n *\n * Parameters:\n * 1. {@link Message} `message` - the message in question\n * @event\n */\n public static readonly messageAdded = \"messageAdded\";\n\n /**\n * Fired when a message is removed from the message list of a conversation.\n *\n * Parameters:\n * 1. {@link Message} `message` - the message in question\n * @event\n */\n public static readonly messageRemoved = \"messageRemoved\";\n\n /**\n * Fired when the fields of an existing message are updated with new values.\n *\n * Parameters:\n * 1. object `data` - info object provided with the event. It has the\n * following properties:\n * * {@link Message} `message` - the message in question\n * * {@link MessageUpdateReason}[] `updateReasons` - array of reasons for\n * the update\n * @event\n */\n public static readonly messageUpdated = \"messageUpdated\";\n\n /**\n * Fired when the token is about to expire and needs to be updated.\n * @event\n */\n public static readonly tokenAboutToExpire = \"tokenAboutToExpire\";\n\n /**\n * Fired when the token has expired.\n * @event\n */\n public static readonly tokenExpired = \"tokenExpired\";\n\n /**\n * Fired when a participant has stopped typing.\n *\n * Parameters:\n * 1. {@link Participant} `participant` - the participant in question\n * @event\n */\n public static readonly typingEnded = \"typingEnded\";\n\n /**\n * Fired when a participant has started typing.\n *\n * Parameters:\n * 1. {@link Participant} `participant` - the participant in question\n * @event\n */\n public static readonly typingStarted = \"typingStarted\";\n\n /**\n * Fired when the client has received (and parsed) a push notification via one\n * of the push channels (apn or fcm).\n *\n * Parameters:\n * 1. {@link PushNotification} `pushNotification` - the push notification in\n * question\n * @event\n */\n public static readonly pushNotification = \"pushNotification\";\n\n /**\n * Fired when the client has subscribed to a user.\n *\n * Parameters:\n * 1. {@link User} `user` - the user in question\n * @event\n */\n public static readonly userSubscribed = \"userSubscribed\";\n\n /**\n * Fired when the client has unsubscribed from a user.\n *\n * Parameters:\n * 1. {@link User} `user` - the user in question\n * @event\n */\n public static readonly userUnsubscribed = \"userUnsubscribed\";\n\n /**\n * Fired when the properties or the reachability status of a user have been\n * updated.\n *\n * Parameters:\n * 1. object `data` - info object provided with the event. It has the\n * following properties:\n * * {@link User} `user` - the user in question\n * * {@link UserUpdateReason}[] `updateReasons` - array of reasons for the\n * update\n * @event\n */\n public static readonly userUpdated = \"userUpdated\";\n\n /**\n * Fired when the state of the client has been changed.\n *\n * Parameters:\n * 1. object `data` - info object provided with the event. It has the\n * following properties:\n * * {@link State} `state` - the new client state\n * * Error? `error` - the initialization error if present\n * @event\n */\n public static readonly stateChanged = \"stateChanged\";\n\n /**\n * Fired when the connection state of the client has been changed.\n *\n * Parameters:\n * 1. {@link ConnectionState} `state` - the new connection state\n * @event\n */\n public static readonly connectionStateChanged = \"connectionStateChanged\";\n\n /**\n * Fired when the connection is interrupted for an unexpected reason.\n *\n * Parameters:\n * 1. object `data` - info object provided with the event. It has the\n * following properties:\n * * boolean `terminal` - Twilsock will stop connection attempts if true\n * * string `message` - the error message of the root cause\n * * number? `httpStatusCode` - http status code if available\n * * number? `errorCode` - Twilio public error code if available\n * @event\n */\n public static readonly connectionError = \"connectionError\";\n\n /**\n * Current version of the Conversations client.\n */\n public static readonly version: string = sdkVersion;\n\n /**\n * Logger instance.\n */\n private static readonly _logger = Logger.scope(\"Client\");\n\n /**\n * Supported push notification channels.\n */\n private static readonly _supportedPushChannels: NotificationsChannelType[] = [\n \"fcm\",\n \"apn\",\n ];\n\n /**\n * Supported push data fields.\n */\n private static readonly _supportedPushDataFields = {\n conversation_sid: \"conversationSid\", // string\n conversation_title: \"conversationTitle\", // string\n message_sid: \"messageSid\", // string\n message_index: \"messageIndex\", // integer\n media_count: \"mediaCount\", // integer\n media: \"media\", // object\n };\n\n /**\n * Current version of the Conversations client.\n */\n public readonly version: string = sdkVersion;\n\n /**\n * Client connection state.\n */\n public connectionState: ConnectionState = \"unknown\";\n\n /**\n * Promise that resolves on successful initialization.\n */\n private readonly _ensureReady!: Promise<void>;\n\n /**\n * Options passed to the client.\n */\n private readonly _options: Partial<ClientOptions>;\n\n /**\n * Client service objects.\n */\n private readonly _services: ClientServices;\n\n /**\n * The user of the client.\n */\n private readonly _myself: User;\n\n /**\n * Resolves the {@link Client._ensureReady} promise.\n */\n private _resolveEnsureReady!: () => void;\n\n /**\n * Rejects the {@link Client._ensureReady} promise.\n */\n private _rejectEnsureReady!: (err?: ConnectionError) => void;\n\n /**\n * The current token of the client.\n */\n private _fpaToken: string;\n\n /**\n * The constructed configuration object.\n */\n private _configuration!: Configuration;\n\n /**\n * The Conversations entity.\n */\n private _conversationsEntity!: Conversations;\n\n /**\n * Promise that resolves when initial conversations are fetched.\n */\n private _conversationsPromise!: Promise<Conversations>;\n\n /**\n * Returned Conversations instance is not yet fully initialized. Calling any\n * operations will block until it is. Use connection events to monitor when\n * client becomes fully available (connectionStateChanged with state\n * 'connected') or not available (connectionStateChange with state 'denied',\n * event tokenExpired, event connectionError).\n *\n * @param fpaToken Access token\n * @param options Options to customize the Client\n * @returns A not yet fully-initialized client.\n */\n public constructor(fpaToken: string, options: ClientOptions | null = {}) {\n super();\n\n this._fpaToken = fpaToken ?? \"\";\n this._options = options ?? {};\n\n if (!this._options.disableDeepClone) {\n let options: Partial<ClientOptions> = {\n ...this._options,\n transport: undefined,\n twilsockClient: undefined,\n };\n\n options = deepClone(options);\n options.transport = this._options.transport;\n options.twilsockClient = this._options.twilsockClient;\n\n this._options = options;\n }\n\n this._options.logLevel = this._options.logLevel ?? \"silent\";\n Client._logger.setLevel(this._options.logLevel);\n\n const productId = (this._options.productId = \"ip_messaging\");\n\n // Filling ClientMetadata\n this._options.clientMetadata = this._options.clientMetadata || {};\n\n if (!this._options.clientMetadata.hasOwnProperty(\"type\")) {\n this._options.clientMetadata.type = \"conversations\";\n }\n\n if (!this._options.clientMetadata.hasOwnProperty(\"sdk\")) {\n this._options.clientMetadata.sdk = \"JS\";\n this._options.clientMetadata.sdkv = sdkVersion;\n }\n\n // Enable session local storage for Sync\n this._options.Sync = this._options.Sync || {};\n\n if (typeof this._options.Sync.enableSessionStorage === \"undefined\") {\n this._options.Sync.enableSessionStorage = true;\n }\n\n if (this._options.region) {\n this._options.Sync.region = this._options.region;\n }\n\n if (!fpaToken) {\n throw new Error(\"A valid Twilio token should be provided\");\n }\n\n this._services = new ClientServices();\n\n this._myself = new User(\"\", \"\", null, this._services);\n\n const startTwilsock = !this._options.twilsockClient;\n\n // Create default init registrations if none were provided.\n // Otherwise, the outside party have to list all the init registrations they\n // need.\n // Init registrations passed to the Conversations client will be passed down\n // to the Sync client as well.\n if (!this._options.initRegistrations) {\n const initRegistration = new InitRegistration(productId);\n Client.populateInitRegistrations(initRegistration);\n this._options.initRegistrations = [initRegistration];\n }\n\n this._services.twilsockClient = this._options.twilsockClient =\n this._options.twilsockClient ??\n new TwilsockClient(fpaToken, productId, this._options);\n\n this._services.twilsockClient.on(\"tokenAboutToExpire\", () =>\n this.emit(\"tokenAboutToExpire\")\n );\n this._services.twilsockClient.on(\"tokenExpired\", () =>\n this.emit(\"tokenExpired\")\n );\n this._services.twilsockClient.on(\"connectionError\", (error) =>\n this.emit(\"connectionError\", error)\n );\n this._services.twilsockClient.on(\n \"stateChanged\",\n (state: ConnectionState) => {\n Client._logger.debug(\n `Handling stateChanged for ConversationsClient: new state ${state}`\n );\n if (state !== this.connectionState) {\n this.connectionState = state;\n this.emit(\"connectionStateChanged\", this.connectionState);\n }\n }\n );\n\n this._services.transport = this._options.transport = (this._options\n .transport ?? this._options.twilsockClient) as Transport;\n this._services.notificationClient = this._options.notificationsClient =\n this._options.notificationsClient ??\n new NotificationClient(fpaToken, this._options);\n this._services.syncClient = this._options.syncClient =\n this._options.syncClient ?? new SyncClient(fpaToken, this._options);\n\n const configurationOptions =\n options?.Chat || options?.IPMessaging || options || {};\n const region = configurationOptions.region || options?.region;\n const baseUrl: string =\n configurationOptions.apiUri ||\n configurationOptions.typingUri ||\n `https://aim.${region || \"us1\"}.twilio.com`;\n\n this._services.commandExecutor = new CommandExecutor(\n baseUrl,\n { transport: this._options.transport },\n productId\n );\n\n const emitFailed = (error?: ConnectionError): void => {\n this._rejectEnsureReady(error);\n this.emit(\"stateChanged\", { state: \"failed\", error });\n };\n\n const emitDisconnected = () => {\n emitFailed({\n terminal: true,\n message: \"Twilsock has disconnected.\",\n });\n };\n\n this._services.twilsockClient.onceWithReplay(\"connectionError\", emitFailed);\n this._services.twilsockClient.onceWithReplay(\n \"disconnected\",\n emitDisconnected\n );\n this._services.twilsockClient.onceWithReplay(\"connected\", async () => {\n Client._logger.debug(`ConversationsClient started INITIALIZING`);\n this._services.twilsockClient.off(\"connectionError\", emitFailed);\n this._services.twilsockClient.off(\"disconnected\", emitDisconnected);\n try {\n const startupEvent = \"conversations.client.startup\";\n\n this._services.twilsockClient.addPartialTelemetryEvent(\n new TelemetryEventDescription(\n startupEvent,\n \"Conversations client startup\",\n new Date()\n ),\n startupEvent,\n TelemetryPoint.Start\n );\n\n await this._initialize();\n\n this._services.twilsockClient.addPartialTelemetryEvent(\n new TelemetryEventDescription(\"\", \"\", new Date()),\n startupEvent,\n TelemetryPoint.End\n );\n } catch (err) {\n // Fail ChatClient if initialization is incomplete\n const connectionError = {\n terminal: true,\n message: err.message,\n };\n this._rejectEnsureReady(connectionError);\n this.emit(\"stateChanged\", { state: \"failed\", error: connectionError });\n }\n });\n\n this._ensureReady = new Promise<void>((resolve, reject) => {\n this._resolveEnsureReady = resolve;\n this._rejectEnsureReady = reject;\n }).catch(() => void 0); // @todo How to process unhandled rejection here?\n\n if (startTwilsock) {\n this._services.twilsockClient.connect();\n }\n }\n\n /**\n * Information of the logged-in user. Before client initialization, returns an\n * uninitialized user. Will trigger a {@link Client.userUpdated} event after\n * initialization.\n */\n public get user(): User {\n return this._myself;\n }\n\n /**\n * Client reachability state. Throws an error if accessed before the client\n * initialization was completed.\n */\n public get reachabilityEnabled(): boolean {\n if (!this._configuration) {\n throw new Error(\n \"Reachability information could not yet be accessed as the client \" +\n \"has not yet been initialized. Subscribe to the 'stateChanged' event \" +\n \"to properly react to the client initialization.\"\n );\n }\n\n return this._configuration.reachabilityEnabled;\n }\n\n /**\n * @deprecated Call constructor directly.\n *\n * Factory method to create a Conversations client instance.\n *\n * The factory method will automatically trigger connection.\n * Do not use it if you need finer-grained control.\n *\n * Since this method returns an already-initialized client, some of the events\n * will be lost because they happen *before* the initialization. It is\n * recommended that `client.onWithReplay` is used as opposed to `client.on`\n * for subscribing to client events. The `client.onWithReplay` will re-emit\n * the most recent value for a given event if it emitted before the\n * subscription.\n *\n * @param token Access token.\n * @param options Options to customize the client.\n * @returns Returns a fully initialized client.\n */\n @validateTypesAsync(\"string\", [\"undefined\", pureObject])\n public static async create(\n token: string,\n options?: ClientOptions | null\n ): Promise<Client> {\n // The logic is as follows:\n // - If twilsock is not passed in, then the ConversationsClient constructor will call twilsock.connect() by itself\n // and we do not need to do it here.\n // - If twilsock was passed in from the outside, but customer called ConversationsClient.create() then they are\n // using an obsolete workflow and the startup sequence will never complete.\n if (options?.twilsockClient) {\n throw new Error(\n \"Obsolete usage of ConversationsClient.create() \" +\n \"factory method: if you pass twilsock from the outside then you must \" +\n \"use ConversationsClient constructor and be prepared to work with \" +\n \"uninitialized client.\"\n );\n }\n\n const client = new Client(token, options);\n await client._ensureReady;\n\n return client;\n }\n\n /**\n * Static method for push notification payload parsing. Returns parsed push as\n * a {@link PushNotification} object.\n * @param notificationPayload Push notification payload.\n */\n @validateTypes(pureObject)\n public static parsePushNotification(notificationPayload): PushNotification {\n Client._logger.debug(\n \"parsePushNotification, notificationPayload=\",\n notificationPayload\n );\n\n // APNS specifics\n if (typeof notificationPayload.aps !== \"undefined\") {\n if (!notificationPayload.twi_message_type) {\n throw new Error(\n \"Provided push notification payload does not contain Programmable Chat push notification type\"\n );\n }\n\n const data = Client._parsePushNotificationChatData(notificationPayload);\n\n const apsPayload = notificationPayload.aps;\n let body: string | null;\n let title: string | null = null;\n if (typeof apsPayload.alert === \"string\") {\n body = apsPayload.alert || null;\n } else {\n body = apsPayload.alert?.body || null;\n title = apsPayload.alert?.title || null;\n }\n\n return new PushNotification({\n title,\n body,\n sound: apsPayload.sound || null,\n badge: apsPayload.badge || null,\n action: apsPayload.category || null,\n type: notificationPayload.twi_message_type,\n data: data,\n });\n }\n\n // FCM specifics\n if (typeof notificationPayload.data !== \"undefined\") {\n const dataPayload = notificationPayload.data;\n if (!dataPayload.twi_message_type) {\n throw new Error(\n \"Provided push notification payload does not contain Programmable Chat push notification type\"\n );\n }\n\n const data = Client._parsePushNotificationChatData(\n notificationPayload.data\n );\n return new PushNotification({\n title: dataPayload.twi_title || null,\n body: dataPayload.twi_body || null,\n sound: dataPayload.twi_sound || null,\n badge: null,\n action: dataPayload.twi_action || null,\n type: dataPayload.twi_message_type,\n data: data,\n });\n }\n\n throw new Error(\n \"Provided push notification payload is not Programmable Chat notification\"\n );\n }\n\n /**\n * Static method for parsing push notification chat data.\n * @param data Data to parse\n */\n private static _parsePushNotificationChatData(\n data: Record<string, unknown>\n ): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const key in Client._supportedPushDataFields) {\n const value = data[key];\n if (typeof value === \"undefined\" || value === null) {\n continue;\n }\n\n if (key === \"message_index\" || key === \"media_count\") {\n const number = parseToNumber(value);\n if (number !== null) {\n result[Client._supportedPushDataFields[key]] = number;\n }\n continue;\n }\n\n if (key === \"media\") {\n if (typeof value === \"string\") {\n try {\n result[Client._supportedPushDataFields[key]] = JSON.parse(value);\n } catch {\n Client._logger.debug(\"Media message notification parsing error\");\n }\n }\n continue;\n }\n\n result[Client._supportedPushDataFields[key]] = value;\n }\n\n return result;\n }\n\n /**\n * Populate the client with init registrations.\n * @param reg The init registration to populate.\n */\n public static populateInitRegistrations(reg: InitRegistration) {\n reg.populateInitRegistrations([NotificationTypes.TYPING_INDICATOR]);\n SyncClient.populateInitRegistrations(reg);\n }\n\n /**\n * Gracefully shut down the client.\n */\n public async shutdown(): Promise<void> {\n await this._ensureReady;\n await this._services.twilsockClient.disconnect();\n }\n\n /**\n * Update the token used by the client and re-register with the Conversations services.\n * @param token New access token.\n */\n @validateTypesAsync(nonEmptyString)\n public async updateToken(token: string): Promise<Client> {\n await this._ensureReady;\n Client._logger.info(\"updateToken\");\n\n if (this._fpaToken === token) {\n return this;\n }\n\n await this._services.twilsockClient.updateToken(token);\n await this._services.notificationClient.updateToken(token);\n await this._services.mcsClient.updateToken(token);\n this._fpaToken = token;\n\n return this;\n }\n\n /**\n * Get a known conversation by its SID.\n * @param conversationSid Conversation sid\n */\n @validateTypesAsync(nonEmptyString)\n public async getConversationBySid(\n conversationSid: string\n ): Promise<Conversation> {\n await this._ensureReady;\n await this._conversationsEntity.myConversationsRead.promise;\n\n const conversation = await this._conversationsEntity.getConversation(\n conversationSid\n );\n\n if (!conversation) {\n throw new Error(\n `Conversation with SID ${conversationSid} was not found.`\n );\n }\n\n return conversation;\n }\n\n /**\n * Peek a conversation by its SID.\n * @param conversationSid Conversation sid\n * @internal\n */\n @validateTypesAsync(nonEmptyString)\n public async peekConversationBySid(\n conversationSid: string\n ): Promise<Conversation> {\n await this._ensureReady;\n\n const conversation = await this._conversationsEntity.peekConversation(\n conversationSid\n );\n\n if (!conversation) {\n throw new Error(\n `Conversation with SID ${conversationSid} was not found.`\n );\n }\n\n return conversation;\n }\n\n /**\n * Get a known conversation by its unique identifier name.\n * @param uniqueName The unique identifier name of the conversation.\n */\n @validateTypesAsync(nonEmptyString)\n public async getConversationByUniqueName(\n uniqueName: string\n ): Promise<Conversation> {\n await this._ensureReady;\n await this._conversationsEntity.myConversationsRead.promise;\n const conversation =\n await this._conversationsEntity.getConversationByUniqueName(uniqueName);\n\n if (!conversation) {\n throw new Error(\n `Conversation with unique name ${uniqueName} was not found.`\n );\n }\n\n return conversation;\n }\n\n /**\n * Get the current list of all the subscribed conversations.\n */\n public async getSubscribedConversations(): Promise<Paginator<Conversation>> {\n await this._ensureReady;\n return this._conversationsPromise.then((conversations) =>\n conversations.getConversations()\n );\n }\n\n /**\n * Create a conversation on the server and subscribe to its events.\n * The default is a conversation with an empty friendly name.\n * @param options Options for the conversation.\n */\n @validateTypesAsync([\n \"undefined\",\n objectSchema(\"conversation options\", {\n friendlyName: [\"string\", \"undefined\"],\n isPrivate: [\"boolean\", \"undefined\"],\n uniqueName: [\"string\", \"undefined\"],\n }),\n ])\n public async createConversation(\n options?: CreateConversationOptions\n ): Promise<Conversation> {\n await this._ensureReady;\n options = options || {};\n return this._conversationsPromise.then((conversationsEntity) =>\n conversationsEntity.addConversation(options)\n );\n }\n\n /**\n * Register for push notifications.\n * @param channelType Channel type.\n * @param registrationId Push notification ID provided by the FCM/APNS service\n * on the platform.\n */\n @validateTypesAsync(literal(\"fcm\", \"apn\"), \"string\")\n public async setPushRegistrationId(\n channelType: NotificationsChannelType,\n registrationId: string\n ): Promise<void> {\n await this._ensureReady;\n this._subscribeToPushNotifications(channelType);\n this._services.notificationClient.setPushRegistrationId(\n channelType,\n registrationId\n );\n await this._services.notificationClient.commitChanges(); // Committing before this point is useless because we have no push id\n }\n\n /**\n * Unregister from push notifications.\n * @param channelType Channel type.\n * @deprecated Use removePushRegistrations() instead.\n */\n @validateTypesAsync(literal(\"fcm\", \"apn\"))\n public async unsetPushRegistrationId(\n channelType: NotificationsChannelType\n ): Promise<void> {\n await this._ensureReady;\n this._unsubscribeFromPushNotifications(channelType);\n await this._services.notificationClient.commitChanges();\n }\n\n /**\n * Clear existing registrations directly using provided device token.\n * This is useful to ensure stopped subscriptions without resubscribing.\n *\n * This function goes completely beside the state machine and removes all\n * registrations.\n * Use with caution: if it races with current state machine operations,\n * madness will ensue.\n *\n * @param channelType Channel type.\n * @param registrationId Push notification ID provided by the FCM/APNS service\n * on the platform.\n */\n @validateTypesAsync(literal(\"fcm\", \"apn\"), nonEmptyString)\n public async removePushRegistrations(\n channelType: ChannelType,\n registrationId: string\n ): Promise<void> {\n // do not await this._ensureReady() here - it could be called at any moment\n await this._services.notificationClient.removeRegistrations(\n channelType,\n registrationId\n );\n }\n\n /**\n * Current version of the Conversations client.\n */\n public parsePushNotification = Client.parsePushNotification;\n\n /**\n * Handle push notification payload parsing and emit the\n * {@link Client.pushNotification} event on this {@link Client} instance.\n * @param notificationPayload Push notification payload\n */\n @validateTypesAsync(pureObject)\n public async handlePushNotification(notificationPayload): Promise<void> {\n await this._ensureReady;\n Client._logger.debug(\n \"handlePushNotification, notificationPayload=\",\n notificationPayload\n );\n this.emit(\n \"pushNotification\",\n Client.parsePushNotification(notificationPayload)\n );\n }\n\n /**\n * Gets a user with the given identity. If it's in the subscribed list, then\n * return the user object from it;\n * if not, then subscribe and add user to the subscribed list.\n * @param identity Identity of the user.\n * @returns A fully initialized user.\n */\n @validateTypesAsync(nonEmptyString)\n public async getUser(identity: string): Promise<User> {\n await this._ensureReady;\n return this._services.users.getUser(identity);\n }\n\n /**\n * Get a list of subscribed user objects.\n */\n public async getSubscribedUsers(): Promise<Array<User>> {\n await this._ensureReady;\n return this._services.users.getSubscribedUsers();\n }\n\n /**\n * Get content URLs for all media attachments in the given set of media sids\n * using a single operation.\n * @param mediaSids Set of media sids to query for the content URL.\n */\n @validateTypesAsync(nonEmptyArray(\"strings\", \"string\"))\n public getTemporaryContentUrlsForMediaSids(\n mediaSids: string[]\n ): CancellablePromise<Map<string, string>> {\n return new CancellablePromise(async (resolve, reject, onCancel) => {\n if (!this._services.mcsClient || !mediaSids) {\n reject(new Error(\"Media Content Service is unavailable\"));\n return;\n }\n\n const request =\n this._services.mcsClient.mediaSetGetContentUrls(mediaSids);\n\n onCancel(() => {\n request.cancel();\n });\n\n try {\n const urls = await request;\n resolve(urls);\n } catch (e) {\n reject(e);\n }\n });\n }\n\n /**\n * Get content URLs for all media attachments in the given set using a single\n * operation.\n * @param contentSet Set of media attachments to query content URLs.\n */\n @validateTypesAsync(nonEmptyArray(\"media\", Media))\n public getTemporaryContentUrlsForMedia(\n contentSet: Media[]\n ): CancellablePromise<Map<string, string>> {\n // We ignore existing mcsMedia members of each of the media entries.\n // Instead, we just collect their sids and pull new descriptors from a\n // mediaSet GET endpoint.\n const sids = contentSet.map((m) => m.sid);\n return this.getTemporaryContentUrlsForMediaSids(sids);\n }\n\n /**\n * Initialize the client.\n */\n private async _initialize() {\n const configurationResponse =\n await this._services.commandExecutor.fetchResource<\n void,\n ConfigurationResponse\n >(\"Client/v2/Configuration\");\n\n this._configuration = new Configuration(\n this._options as ClientOptions,\n configurationResponse,\n Client._logger\n );\n\n this._myself._resolveInitialization(\n this._configuration,\n this._configuration.userIdentity,\n this._configuration.userInfo,\n true\n );\n\n this._services.typingIndicator = new TypingIndicator(\n this.getConversationBySid.bind(this),\n this._configuration,\n this._services\n );\n this._services.network = new Network(this._configuration, this._services);\n\n this._services.users = new Users(\n this._myself,\n this._configuration,\n this._services\n );\n this._services.users.on(\"userSubscribed\", (user) => {\n this.emit(\"userSubscribed\", user);\n });\n this._services.users.on(\"userUpdated\", (args: UserUpdatedEventArgs) =>\n this.emit(\"userUpdated\", args)\n );\n this._services.users.on(\"userUnsubscribed\", (user) => {\n this.emit(\"userUnsubscribed\", user);\n });\n\n this._conversationsEntity = new ConversationsEntity(\n this._configuration,\n this._services\n );\n\n this._conversationsEntity.on(\"conversationAdded\", (conversation) => {\n this.emit(\"conversationAdded\", conversation);\n });\n this._conversationsEntity.on(\"conversationRemoved\", (conversation) => {\n this.emit(\"conversationRemoved\", conversation);\n });\n this._conversationsEntity.on(\"conversationJoined\", (conversation) => {\n this.emit(\"conversationJoined\", conversation);\n });\n this._conversationsEntity.on(\"conversationLeft\", (conversation) => {\n this.emit(\"conversationLeft\", conversation);\n });\n this._conversationsEntity.on(\n \"conversationUpdated\",\n (args: ConversationUpdatedEventArgs) =>\n this.emit(\"conversationUpdated\", args)\n );\n\n this._conversationsEntity.on(\"participantJoined\", (participant) => {\n this.emit(\"participantJoined\", participant);\n });\n this._conversationsEntity.on(\"participantLeft\", (participant) => {\n this.emit(\"participantLeft\", participant);\n });\n this._conversationsEntity.on(\n \"participantUpdated\",\n (args: ParticipantUpdatedEventArgs) =>\n this.emit(\"participantUpdated\", args)\n );\n\n this._conversationsEntity.on(\"messageAdded\", (message) =>\n this.emit(\"messageAdded\", message)\n );\n this._conversationsEntity.on(\n \"messageUpdated\",\n (args: MessageUpdatedEventArgs) => this.emit(\"messageUpdated\", args)\n );\n this._conversationsEntity.on(\"messageRemoved\", (message) =>\n this.emit(\"messageRemoved\", message)\n );\n\n this._conversationsEntity.on(\"typingStarted\", (participant) =>\n this.emit(\"typingStarted\", participant)\n );\n this._conversationsEntity.on(\"typingEnded\", (participant) =>\n this.emit(\"typingEnded\", participant)\n );\n\n this._conversationsPromise = this._conversationsEntity\n .fetchConversations()\n .then(() => this._conversationsEntity)\n .catch((error) => {\n throw error;\n });\n\n await this._services.users.myself._ensureFetched();\n\n Client._supportedPushChannels.forEach((channelType) =>\n this._subscribeToPushNotifications(channelType)\n );\n this._services.typingIndicator.initialize();\n\n this._services.mcsClient = new McsClient(\n this._fpaToken,\n this._configuration.links.mediaService,\n this._configuration.links.mediaSetService,\n {\n ...this._options,\n transport: undefined,\n }\n );\n\n this._resolveEnsureReady();\n this.emit(\"stateChanged\", { state: \"initialized\" });\n }\n\n /**\n * Subscribe to push notifications.\n * @param channelType The channel type to subscribe to.\n */\n private _subscribeToPushNotifications(channelType: NotificationsChannelType) {\n [\n NotificationTypes.NEW_MESSAGE,\n NotificationTypes.ADDED_TO_CONVERSATION,\n NotificationTypes.REMOVED_FROM_CONVERSATION,\n NotificationTypes.TYPING_INDICATOR,\n NotificationTypes.CONSUMPTION_UPDATE,\n ].forEach((messageType) => {\n this._services.notificationClient.subscribe(channelType, messageType);\n });\n }\n\n /**\n * Unsubscribe from push notifications.\n * @param channelType The channel type to unsubscribe from.\n */\n private _unsubscribeFromPushNotifications(\n channelType: NotificationsChannelType\n ) {\n [\n NotificationTypes.NEW_MESSAGE,\n NotificationTypes.ADDED_TO_CONVERSATION,\n NotificationTypes.REMOVED_FROM_CONVERSATION,\n NotificationTypes.TYPING_INDICATOR,\n NotificationTypes.CONSUMPTION_UPDATE,\n ].forEach((messageType) => {\n this._services.notificationClient.unsubscribe(channelType, messageType);\n });\n }\n}\n\nexport {\n Client,\n State,\n ConnectionState,\n NotificationsChannelType,\n LogLevel,\n ClientOptions,\n CreateConversationOptions,\n};\n"],"names":["Client","ReplayEventEmitter","sdkVersion","deepClone","User","InitRegistration","TwilsockClient","NotificationClient","SyncClient","CommandExecutor","TelemetryEventDescription","TelemetryPoint","PushNotification","parseToNumber","NotificationTypes","CancellablePromise","Configuration","TypingIndicator","Network","Users","ConversationsEntity","McsClient","Logger","__decorate","validateTypesAsync","nonEmptyString","objectSchema","literal","pureObject","nonEmptyArray","Media","validateTypes","validateConstructorTypes"],"mappings":"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"}
@@ -215,7 +215,7 @@ class Participants extends replayEventEmitter.ReplayEventEmitter {
215
215
  var _a;
216
216
  const { sid, attributes: responseAttributes, date_created: dateCreated, date_updated: dateUpdated, identity: responseIdentity, role_sid: roleSid, messaging_binding: messagingBinding, } = data;
217
217
  return await this.upsertParticipant(sid, {
218
- attributes: JSON.parse(responseAttributes),
218
+ attributes: responseAttributes,
219
219
  dateCreated: new Date(dateCreated),
220
220
  dateUpdated: new Date(dateUpdated),
221
221
  identity: responseIdentity,
@@ -1 +1 @@
1
- {"version":3,"file":"participants.js","sources":["../../src/data/participants.ts"],"sourcesContent":["import {\n ParticipantDescriptor,\n Participant,\n ParticipantUpdatedEventArgs,\n ParticipantUpdateReason,\n ParticipantEmailBinding,\n} from \"../participant\";\nimport { Logger } from \"../logger\";\n\nimport { Conversation } from \"../conversation\";\n\nimport { SyncMap, SyncClient } from \"twilio-sync\";\nimport { Users } from \"./users\";\nimport { CommandExecutor } from \"../command-executor\";\nimport { AddParticipantRequest } from \"../interfaces/commands/add-participant\";\nimport { Configuration } from \"../configuration\";\nimport { ParticipantResponse } from \"../interfaces/commands/participant-response\";\nimport { ReplayEventEmitter } from \"@twilio/replay-event-emitter\";\nimport { JSONValue } from \"../types\";\n\ntype ParticipantsEvents = {\n participantJoined: (participant: Participant) => void;\n participantLeft: (participant: Participant) => void;\n participantUpdated: (data: {\n participant: Participant;\n updateReasons: ParticipantUpdateReason[];\n }) => void;\n};\n\nconst log = Logger.scope(\"Participants\");\n\nexport interface ParticipantsServices {\n syncClient: SyncClient;\n users: Users;\n commandExecutor: CommandExecutor;\n}\n\ninterface ParticipantsLinks {\n participants: string;\n}\n\nexport interface ParticipantBindingOptions {\n email?: ParticipantEmailBinding;\n}\n\n/**\n * @classdesc Represents the collection of participants for the conversation\n * @fires Participants#participantJoined\n * @fires Participants#participantLeft\n * @fires Participants#participantUpdated\n */\nclass Participants extends ReplayEventEmitter<ParticipantsEvents> {\n private readonly configuration: Configuration;\n private readonly services: ParticipantsServices;\n private readonly links: ParticipantsLinks;\n\n rosterEntityPromise: Promise<SyncMap> | null = null;\n\n public readonly conversation: Conversation;\n public readonly participants: Map<string, Participant>;\n\n constructor(\n conversation: Conversation,\n participants: Map<string, Participant>,\n links: ParticipantsLinks,\n configuration: Configuration,\n services: ParticipantsServices\n ) {\n super();\n this.conversation = conversation;\n this.participants = participants;\n this.links = links;\n this.configuration = configuration;\n this.services = services;\n }\n\n async unsubscribe(): Promise<void> {\n if (this.rosterEntityPromise) {\n const entity = await this.rosterEntityPromise;\n entity.close();\n this.rosterEntityPromise = null;\n }\n }\n\n subscribe(rosterObjectName: string) {\n return (this.rosterEntityPromise =\n this.rosterEntityPromise ||\n this.services.syncClient\n .map({ id: rosterObjectName, mode: \"open_existing\" })\n .then((rosterMap) => {\n rosterMap.on(\"itemAdded\", (args) => {\n log.debug(this.conversation.sid + \" itemAdded: \" + args.item.key);\n this.upsertParticipant(args.item.key, args.item.data).then(\n (participant) => {\n this.emit(\"participantJoined\", participant);\n }\n );\n });\n\n rosterMap.on(\"itemRemoved\", (args) => {\n log.debug(this.conversation.sid + \" itemRemoved: \" + args.key);\n const participantSid = args.key;\n if (!this.participants.has(participantSid)) {\n return;\n }\n const leftParticipant = this.participants.get(participantSid);\n this.participants.delete(participantSid);\n if (!leftParticipant) {\n return;\n }\n this.emit(\"participantLeft\", leftParticipant);\n });\n\n rosterMap.on(\"itemUpdated\", (args) => {\n log.debug(this.conversation.sid + \" itemUpdated: \" + args.item.key);\n this.upsertParticipant(args.item.key, args.item.data);\n });\n\n const participantsPromises: Promise<Participant>[] = [];\n const rosterMapHandler = (paginator) => {\n paginator.items.forEach((item) => {\n participantsPromises.push(\n this.upsertParticipant(item.key, item.data)\n );\n });\n return paginator.hasNextPage\n ? paginator.nextPage().then(rosterMapHandler)\n : null;\n };\n\n return rosterMap\n .getItems()\n .then(rosterMapHandler)\n .then(() => Promise.all(participantsPromises))\n .then(() => rosterMap);\n })\n .catch((err) => {\n this.rosterEntityPromise = null;\n if (this.services.syncClient.connectionState != \"disconnected\") {\n log.error(\n \"Failed to get roster object for conversation\",\n this.conversation.sid,\n err\n );\n }\n log.debug(\n \"ERROR: Failed to get roster object for conversation\",\n this.conversation.sid,\n err\n );\n throw err;\n }));\n }\n\n async upsertParticipantFromResponse(\n data: ParticipantResponse\n ): Promise<Participant> {\n const {\n sid,\n attributes: responseAttributes,\n date_created: dateCreated,\n date_updated: dateUpdated,\n identity: responseIdentity,\n role_sid: roleSid,\n messaging_binding: messagingBinding,\n } = data;\n\n return await this.upsertParticipant(sid, {\n attributes: JSON.parse(responseAttributes),\n dateCreated: new Date(dateCreated),\n dateUpdated: new Date(dateUpdated),\n identity: responseIdentity,\n roleSid,\n lastConsumedMessageIndex: null,\n lastConsumptionTimestamp: null,\n type: messagingBinding?.type ?? \"chat\",\n });\n }\n\n async upsertParticipant(\n participantSid: string,\n data: ParticipantDescriptor\n ): Promise<Participant> {\n let participant = this.participants.get(participantSid);\n if (participant) {\n return participant._update(data);\n }\n\n const links = {\n self: `${this.links.participants}/${participantSid}`,\n };\n\n participant = new Participant(\n data,\n participantSid,\n this.conversation,\n links,\n this.services\n );\n this.participants.set(participantSid, participant);\n participant.on(\"updated\", (args: ParticipantUpdatedEventArgs) =>\n this.emit(\"participantUpdated\", args)\n );\n return participant;\n }\n\n /**\n * @returns {Promise<Array<Participant>>} returns list of participants {@see Participant}\n */\n async getParticipants(): Promise<Participant[]> {\n return this.rosterEntityPromise\n ? this.rosterEntityPromise.then(() => {\n const participants: Participant[] = [];\n this.participants.forEach((participant) =>\n participants.push(participant)\n );\n return participants;\n })\n : [];\n }\n\n /**\n * Get participant by SID from conversation\n * @returns {Promise<Participant>}\n */\n async getParticipantBySid(\n participantSid: string\n ): Promise<Participant | null> {\n return this.rosterEntityPromise\n ? this.rosterEntityPromise.then(() => {\n const participant = this.participants.get(participantSid);\n if (!participant) {\n throw new Error(\n \"Participant with SID \" + participantSid + \" was not found\"\n );\n }\n return participant;\n })\n : null;\n }\n\n /**\n * Get participant by identity from conversation\n * @returns {Promise<Participant>}\n */\n async getParticipantByIdentity(\n identity: string\n ): Promise<Participant | null> {\n let foundParticipant: Participant | null = null;\n return this.rosterEntityPromise\n ? this.rosterEntityPromise.then(() => {\n this.participants.forEach((participant) => {\n if (participant.identity === identity) {\n foundParticipant = participant;\n }\n });\n if (!foundParticipant) {\n throw new Error(\n \"Participant with identity \" + identity + \" was not found\"\n );\n }\n return foundParticipant;\n })\n : null;\n }\n\n /**\n * Add a chat participant to the conversation\n */\n async add(identity: string, attributes: JSONValue): Promise<Participant> {\n const participantResponse =\n await this.services.commandExecutor.mutateResource<\n AddParticipantRequest,\n ParticipantResponse\n >(\"post\", this.links.participants, {\n identity,\n attributes:\n typeof attributes !== \"undefined\"\n ? JSON.stringify(attributes)\n : undefined,\n });\n\n return await this.upsertParticipantFromResponse(participantResponse);\n }\n\n /**\n * Add a non-chat participant to the conversation.\n */\n async addNonChatParticipant(\n proxyAddress: string,\n address: string,\n attributes: JSONValue = {},\n bindingOptions: ParticipantBindingOptions = {}\n ): Promise<Participant> {\n const participantResponse =\n await this.services.commandExecutor.mutateResource<\n AddParticipantRequest,\n ParticipantResponse\n >(\"post\", this.links.participants, {\n attributes:\n typeof attributes !== \"undefined\"\n ? JSON.stringify(attributes)\n : undefined,\n messaging_binding: {\n address,\n proxy_address: proxyAddress,\n name: bindingOptions?.email?.name,\n level: bindingOptions?.email?.level,\n },\n });\n\n return await this.upsertParticipantFromResponse(participantResponse);\n }\n\n /**\n * Remove the participant with a given identity from a conversation.\n */\n remove(identity: string): Promise<void> {\n return this.services.commandExecutor.mutateResource(\n \"delete\",\n `${this.links.participants}/${identity}`\n );\n }\n}\n\nexport { Participants };\n\n/**\n * Fired when participant joined conversation\n * @event Participants#participantJoined\n * @type {Participant}\n */\n\n/**\n * Fired when participant left conversation\n * @event Participants#participantLeft\n * @type {Participant}\n */\n\n/**\n * Fired when participant updated\n * @event Participants#participantUpdated\n * @type {Object}\n * @property {Participant} participant - Updated Participant\n * @property {Participant#UpdateReason[]} updateReasons - Array of Participant's updated event reasons\n */\n"],"names":["Logger","ReplayEventEmitter","participant","Participant"],"mappings":"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"}
1
+ {"version":3,"file":"participants.js","sources":["../../src/data/participants.ts"],"sourcesContent":["import {\n ParticipantDescriptor,\n Participant,\n ParticipantUpdatedEventArgs,\n ParticipantUpdateReason,\n ParticipantEmailBinding,\n} from \"../participant\";\nimport { Logger } from \"../logger\";\n\nimport { Conversation } from \"../conversation\";\n\nimport { SyncMap, SyncClient } from \"twilio-sync\";\nimport { Users } from \"./users\";\nimport { CommandExecutor } from \"../command-executor\";\nimport { AddParticipantRequest } from \"../interfaces/commands/add-participant\";\nimport { Configuration } from \"../configuration\";\nimport { ParticipantResponse } from \"../interfaces/commands/participant-response\";\nimport { ReplayEventEmitter } from \"@twilio/replay-event-emitter\";\nimport { JSONValue } from \"../types\";\n\ntype ParticipantsEvents = {\n participantJoined: (participant: Participant) => void;\n participantLeft: (participant: Participant) => void;\n participantUpdated: (data: {\n participant: Participant;\n updateReasons: ParticipantUpdateReason[];\n }) => void;\n};\n\nconst log = Logger.scope(\"Participants\");\n\nexport interface ParticipantsServices {\n syncClient: SyncClient;\n users: Users;\n commandExecutor: CommandExecutor;\n}\n\ninterface ParticipantsLinks {\n participants: string;\n}\n\nexport interface ParticipantBindingOptions {\n email?: ParticipantEmailBinding;\n}\n\n/**\n * @classdesc Represents the collection of participants for the conversation\n * @fires Participants#participantJoined\n * @fires Participants#participantLeft\n * @fires Participants#participantUpdated\n */\nclass Participants extends ReplayEventEmitter<ParticipantsEvents> {\n private readonly configuration: Configuration;\n private readonly services: ParticipantsServices;\n private readonly links: ParticipantsLinks;\n\n rosterEntityPromise: Promise<SyncMap> | null = null;\n\n public readonly conversation: Conversation;\n public readonly participants: Map<string, Participant>;\n\n constructor(\n conversation: Conversation,\n participants: Map<string, Participant>,\n links: ParticipantsLinks,\n configuration: Configuration,\n services: ParticipantsServices\n ) {\n super();\n this.conversation = conversation;\n this.participants = participants;\n this.links = links;\n this.configuration = configuration;\n this.services = services;\n }\n\n async unsubscribe(): Promise<void> {\n if (this.rosterEntityPromise) {\n const entity = await this.rosterEntityPromise;\n entity.close();\n this.rosterEntityPromise = null;\n }\n }\n\n subscribe(rosterObjectName: string) {\n return (this.rosterEntityPromise =\n this.rosterEntityPromise ||\n this.services.syncClient\n .map({ id: rosterObjectName, mode: \"open_existing\" })\n .then((rosterMap) => {\n rosterMap.on(\"itemAdded\", (args) => {\n log.debug(this.conversation.sid + \" itemAdded: \" + args.item.key);\n this.upsertParticipant(args.item.key, args.item.data).then(\n (participant) => {\n this.emit(\"participantJoined\", participant);\n }\n );\n });\n\n rosterMap.on(\"itemRemoved\", (args) => {\n log.debug(this.conversation.sid + \" itemRemoved: \" + args.key);\n const participantSid = args.key;\n if (!this.participants.has(participantSid)) {\n return;\n }\n const leftParticipant = this.participants.get(participantSid);\n this.participants.delete(participantSid);\n if (!leftParticipant) {\n return;\n }\n this.emit(\"participantLeft\", leftParticipant);\n });\n\n rosterMap.on(\"itemUpdated\", (args) => {\n log.debug(this.conversation.sid + \" itemUpdated: \" + args.item.key);\n this.upsertParticipant(args.item.key, args.item.data);\n });\n\n const participantsPromises: Promise<Participant>[] = [];\n const rosterMapHandler = (paginator) => {\n paginator.items.forEach((item) => {\n participantsPromises.push(\n this.upsertParticipant(item.key, item.data)\n );\n });\n return paginator.hasNextPage\n ? paginator.nextPage().then(rosterMapHandler)\n : null;\n };\n\n return rosterMap\n .getItems()\n .then(rosterMapHandler)\n .then(() => Promise.all(participantsPromises))\n .then(() => rosterMap);\n })\n .catch((err) => {\n this.rosterEntityPromise = null;\n if (this.services.syncClient.connectionState != \"disconnected\") {\n log.error(\n \"Failed to get roster object for conversation\",\n this.conversation.sid,\n err\n );\n }\n log.debug(\n \"ERROR: Failed to get roster object for conversation\",\n this.conversation.sid,\n err\n );\n throw err;\n }));\n }\n\n async upsertParticipantFromResponse(\n data: ParticipantResponse\n ): Promise<Participant> {\n const {\n sid,\n attributes: responseAttributes,\n date_created: dateCreated,\n date_updated: dateUpdated,\n identity: responseIdentity,\n role_sid: roleSid,\n messaging_binding: messagingBinding,\n } = data;\n\n return await this.upsertParticipant(sid, {\n attributes: responseAttributes,\n dateCreated: new Date(dateCreated),\n dateUpdated: new Date(dateUpdated),\n identity: responseIdentity,\n roleSid,\n lastConsumedMessageIndex: null,\n lastConsumptionTimestamp: null,\n type: messagingBinding?.type ?? \"chat\",\n });\n }\n\n async upsertParticipant(\n participantSid: string,\n data: ParticipantDescriptor\n ): Promise<Participant> {\n let participant = this.participants.get(participantSid);\n if (participant) {\n return participant._update(data);\n }\n\n const links = {\n self: `${this.links.participants}/${participantSid}`,\n };\n\n participant = new Participant(\n data,\n participantSid,\n this.conversation,\n links,\n this.services\n );\n this.participants.set(participantSid, participant);\n participant.on(\"updated\", (args: ParticipantUpdatedEventArgs) =>\n this.emit(\"participantUpdated\", args)\n );\n return participant;\n }\n\n /**\n * @returns {Promise<Array<Participant>>} returns list of participants {@see Participant}\n */\n async getParticipants(): Promise<Participant[]> {\n return this.rosterEntityPromise\n ? this.rosterEntityPromise.then(() => {\n const participants: Participant[] = [];\n this.participants.forEach((participant) =>\n participants.push(participant)\n );\n return participants;\n })\n : [];\n }\n\n /**\n * Get participant by SID from conversation\n * @returns {Promise<Participant>}\n */\n async getParticipantBySid(\n participantSid: string\n ): Promise<Participant | null> {\n return this.rosterEntityPromise\n ? this.rosterEntityPromise.then(() => {\n const participant = this.participants.get(participantSid);\n if (!participant) {\n throw new Error(\n \"Participant with SID \" + participantSid + \" was not found\"\n );\n }\n return participant;\n })\n : null;\n }\n\n /**\n * Get participant by identity from conversation\n * @returns {Promise<Participant>}\n */\n async getParticipantByIdentity(\n identity: string\n ): Promise<Participant | null> {\n let foundParticipant: Participant | null = null;\n return this.rosterEntityPromise\n ? this.rosterEntityPromise.then(() => {\n this.participants.forEach((participant) => {\n if (participant.identity === identity) {\n foundParticipant = participant;\n }\n });\n if (!foundParticipant) {\n throw new Error(\n \"Participant with identity \" + identity + \" was not found\"\n );\n }\n return foundParticipant;\n })\n : null;\n }\n\n /**\n * Add a chat participant to the conversation\n */\n async add(identity: string, attributes: JSONValue): Promise<Participant> {\n const participantResponse =\n await this.services.commandExecutor.mutateResource<\n AddParticipantRequest,\n ParticipantResponse\n >(\"post\", this.links.participants, {\n identity,\n attributes:\n typeof attributes !== \"undefined\"\n ? JSON.stringify(attributes)\n : undefined,\n });\n\n return await this.upsertParticipantFromResponse(participantResponse);\n }\n\n /**\n * Add a non-chat participant to the conversation.\n */\n async addNonChatParticipant(\n proxyAddress: string,\n address: string,\n attributes: JSONValue = {},\n bindingOptions: ParticipantBindingOptions = {}\n ): Promise<Participant> {\n const participantResponse =\n await this.services.commandExecutor.mutateResource<\n AddParticipantRequest,\n ParticipantResponse\n >(\"post\", this.links.participants, {\n attributes:\n typeof attributes !== \"undefined\"\n ? JSON.stringify(attributes)\n : undefined,\n messaging_binding: {\n address,\n proxy_address: proxyAddress,\n name: bindingOptions?.email?.name,\n level: bindingOptions?.email?.level,\n },\n });\n\n return await this.upsertParticipantFromResponse(participantResponse);\n }\n\n /**\n * Remove the participant with a given identity from a conversation.\n */\n remove(identity: string): Promise<void> {\n return this.services.commandExecutor.mutateResource(\n \"delete\",\n `${this.links.participants}/${identity}`\n );\n }\n}\n\nexport { Participants };\n\n/**\n * Fired when participant joined conversation\n * @event Participants#participantJoined\n * @type {Participant}\n */\n\n/**\n * Fired when participant left conversation\n * @event Participants#participantLeft\n * @type {Participant}\n */\n\n/**\n * Fired when participant updated\n * @event Participants#participantUpdated\n * @type {Object}\n * @property {Participant} participant - Updated Participant\n * @property {Participant#UpdateReason[]} updateReasons - Array of Participant's updated event reasons\n */\n"],"names":["Logger","ReplayEventEmitter","participant","Participant"],"mappings":"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"}
@@ -130,7 +130,7 @@ This software includes platform.js under the following license.
130
130
 
131
131
  Object.defineProperty(exports, '__esModule', { value: true });
132
132
 
133
- var version = "3.0.0-rc.7";
133
+ var version = "3.0.0-rc.8";
134
134
 
135
135
  exports.version = version;
136
136
  //# sourceMappingURL=package.json.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"push-notification.js","sources":["../src/push-notification.ts"],"sourcesContent":["/**\n * Push notification type.\n */\nimport { Media } from \"./media\";\n\ntype PushNotificationType =\n | \"twilio.conversations.new_message\"\n | \"twilio.conversations.added_to_conversation\"\n | \"twilio.conversations.removed_from_conversation\";\n\ninterface PushNotificationDescriptor {\n title: string | null;\n body: string | null;\n sound: string | null;\n badge: number | null;\n action: string | null;\n type: PushNotificationType;\n data: Record<string, unknown>;\n}\n\n/**\n * Additional data for a given push notification.\n */\ninterface PushNotificationData {\n /**\n * SID of the conversation.\n */\n conversationSid?: string;\n\n /**\n * Title of the conversation.\n */\n conversationTitle?: string;\n\n /**\n * Index of the message in the conversation.\n */\n messageIndex?: number;\n\n /**\n * SID of the message in the conversation.\n */\n messageSid?: string;\n\n /**\n * Media of the notification\n */\n media?: Media;\n\n /**\n * Amount of the attached media of the message.\n */\n mediaCount?: number;\n}\n\n/**\n * Push notification for a Conversations client.\n */\nclass PushNotification {\n /**\n * Title of the notification.\n */\n public readonly title: string | null;\n\n /**\n * Text of the notification.\n */\n public readonly body: string | null;\n\n /**\n * Sound of the notification.\n */\n public readonly sound: string | null;\n\n /**\n * Number of the badge.\n */\n public readonly badge: number | null;\n\n /**\n * Notification action (`click_action` in FCM terms and `category` in APN terms).\n */\n public readonly action: string | null;\n\n /**\n * Type of the notification.\n */\n public readonly type: PushNotificationType;\n\n /**\n * Additional data of the conversation.\n */\n public readonly data: PushNotificationData;\n\n /**\n * @internal\n */\n constructor(data: PushNotificationDescriptor) {\n this.title = data.title || null;\n this.body = data.body || null;\n this.sound = data.sound || null;\n this.badge = data.badge || null;\n this.action = data.action || null;\n this.type = data.type || null;\n this.data = data.data || {};\n }\n}\n\nexport {\n PushNotification,\n PushNotificationType,\n PushNotificationDescriptor,\n PushNotificationData,\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDA;;AAEG;AACH,MAAM,gBAAgB,CAAA;AAoCpB;;AAEG;AACH,IAAA,WAAA,CAAY,IAAgC,EAAA;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;KAC7B;AACF;;;;"}
1
+ {"version":3,"file":"push-notification.js","sources":["../src/push-notification.ts"],"sourcesContent":["/**\n * Push notification type.\n */\nimport { Media } from \"./media\";\n\ntype PushNotificationType =\n | \"twilio.conversations.new_message\"\n | \"twilio.conversations.added_to_conversation\"\n | \"twilio.conversations.removed_from_conversation\";\n\ninterface PushNotificationDescriptor {\n title: string | null;\n body: string | null;\n sound: string | null;\n badge: number | null;\n action: string | null;\n type: PushNotificationType;\n data: Record<string, unknown>;\n}\n\n/**\n * Additional data for a given push notification.\n */\ninterface PushNotificationData {\n /**\n * SID of the conversation.\n */\n conversationSid?: string;\n\n /**\n * Title of the conversation.\n */\n conversationTitle?: string;\n\n /**\n * Index of the message in the conversation.\n */\n messageIndex?: number;\n\n /**\n * SID of the message in the conversation.\n */\n messageSid?: string;\n\n /**\n * Media of the notification\n */\n media?: Media;\n\n /**\n * Count of the attached media of the message.\n */\n mediaCount?: number;\n}\n\n/**\n * Push notification for a Conversations client.\n */\nclass PushNotification {\n /**\n * Title of the notification.\n */\n public readonly title: string | null;\n\n /**\n * Text of the notification.\n */\n public readonly body: string | null;\n\n /**\n * Sound of the notification.\n */\n public readonly sound: string | null;\n\n /**\n * Number of the badge.\n */\n public readonly badge: number | null;\n\n /**\n * Notification action (`click_action` in FCM terms and `category` in APN terms).\n */\n public readonly action: string | null;\n\n /**\n * Type of the notification.\n */\n public readonly type: PushNotificationType;\n\n /**\n * Additional data of the conversation.\n */\n public readonly data: PushNotificationData;\n\n /**\n * @internal\n */\n constructor(data: PushNotificationDescriptor) {\n this.title = data.title || null;\n this.body = data.body || null;\n this.sound = data.sound || null;\n this.badge = data.badge || null;\n this.action = data.action || null;\n this.type = data.type || null;\n this.data = data.data || {};\n }\n}\n\nexport {\n PushNotification,\n PushNotificationType,\n PushNotificationDescriptor,\n PushNotificationData,\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDA;;AAEG;AACH,MAAM,gBAAgB,CAAA;AAoCpB;;AAEG;AACH,IAAA,WAAA,CAAY,IAAgC,EAAA;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;KAC7B;AACF;;;;"}
package/docs/index.html CHANGED
@@ -2875,7 +2875,7 @@ img {
2875
2875
  <span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0070C1">client</span><span style="color: #000000"> = </span><span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #795E26">Client</span><span style="color: #000000">(</span><span style="color: #001080">token</span><span style="color: #000000">);</span>
2876
2876
  <span style="color: #008000">// Before you use the client, subscribe to the `'stateChanged'` event and wait </span>
2877
2877
  <span style="color: #008000">// for the `'initialized'` state to be reported.</span>
2878
- <span style="color: #001080">client</span><span style="color: #000000">.</span><span style="color: #795E26">on</span><span style="color: #000000">(</span><span style="color: #A31515">'stateChanged'</span><span style="color: #000000">, (</span><span style="color: #001080">state</span><span style="color: #000000">) </span><span style="color: #0000FF">=&gt;</span><span style="color: #000000"> {</span>
2878
+ <span style="color: #001080">client</span><span style="color: #000000">.</span><span style="color: #795E26">on</span><span style="color: #000000">(</span><span style="color: #A31515">'stateChanged'</span><span style="color: #000000">, ({ </span><span style="color: #001080">state</span><span style="color: #000000">, </span><span style="color: #001080">error</span><span style="color: #000000"> }) </span><span style="color: #0000FF">=&gt;</span><span style="color: #000000"> {</span>
2879
2879
  <span style="color: #000000"> </span><span style="color: #AF00DB">if</span><span style="color: #000000"> (</span><span style="color: #001080">state</span><span style="color: #000000"> === </span><span style="color: #A31515">'initialized'</span><span style="color: #000000">) {</span>
2880
2880
  <span style="color: #000000"> </span><span style="color: #008000">// Use the client</span>
2881
2881
  <span style="color: #000000"> }</span>
@@ -2886,7 +2886,7 @@ img {
2886
2886
  </a>
2887
2887
  <p>Releases of <code>twilio-conversations.js</code> are hosted on a CDN, and you can include these
2888
2888
  directly in your web app using a <code>&lt;script&gt;</code> tag.</p>
2889
- <pre><code class="language-html"><span style="color: #800000">&lt;script</span><span style="color: #000000FF"> </span><span style="color: #FF0000">src</span><span style="color: #000000FF">=</span><span style="color: #0000FF">"https://media.twiliocdn.com/sdk/js/conversations/v3.0.0/twilio-conversations.min.js"</span><span style="color: #800000">&gt;&lt;/script&gt;</span>
2889
+ <pre><code class="language-html"><span style="color: #800000">&lt;script</span><span style="color: #000000FF"> </span><span style="color: #FF0000">src</span><span style="color: #000000FF">=</span><span style="color: #0000FF">"https://media.twiliocdn.com/sdk/js/conversations/v3.0/twilio-conversations.min.js"</span><span style="color: #800000">&gt;&lt;/script&gt;</span>
2890
2890
  </code></pre>
2891
2891
  <p>Using this method, <code>twilio-conversations.js</code> will set a browser global <code>Twilio.Conversations</code> through which you can use the client:</p>
2892
2892
  <pre><code><span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0070C1">client</span><span style="color: #000000"> = </span><span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #001080">Twilio</span><span style="color: #000000">.</span><span style="color: #001080">Conversations</span><span style="color: #000000">.</span><span style="color: #795E26">Client</span><span style="color: #000000">(</span><span style="color: #001080">token</span><span style="color: #000000">);</span>
@@ -2905,7 +2905,7 @@ img {
2905
2905
  </code></pre>
2906
2906
  <p>Find the hash of each release published on the <a href="#Changelog">Changelog</a> page.</p>
2907
2907
  <a href="#changelog" id="changelog" style="color: inherit; text-decoration: none;">
2908
- <h2>Supported Browsers</h2><table><thead><tr><th>Browser</th><th>Supported Versions</th></tr></thead><tbody><tr><td>Chrome for Android</td><td>99</td></tr><tr><td>Firefox for Android</td><td>96</td></tr><tr><td>UC Browser for Android</td><td>12.12</td></tr><tr><td>Chrome</td><td>99, 98, 97</td></tr><tr><td>Edge</td><td>99, 98, 97</td></tr><tr><td>Firefox</td><td>98, 97, 96</td></tr><tr><td>Internet Explorer</td><td>11</td></tr><tr><td>Safari for iOS</td><td>15.4, 15.2-15.3</td></tr><tr><td>Safari</td><td>15.4, 15.2-15.3, 15.1</td></tr><tr><td>Samsung Internet</td><td>16.0, 15.0</td></tr></tbody></table><h3>Changelog</h3>
2908
+ <h2>Supported Browsers</h2><table><thead><tr><th>Browser</th><th>Supported Versions</th></tr></thead><tbody><tr><td>Chrome for Android</td><td>100</td></tr><tr><td>Firefox for Android</td><td>99</td></tr><tr><td>UC Browser for Android</td><td>12.12</td></tr><tr><td>Chrome</td><td>100, 99, 98</td></tr><tr><td>Edge</td><td>100, 99, 98</td></tr><tr><td>Firefox</td><td>99, 98, 97</td></tr><tr><td>Internet Explorer</td><td>11</td></tr><tr><td>Safari for iOS</td><td>15.4, 15.2-15.3</td></tr><tr><td>Safari</td><td>15.4, 15.2-15.3, 15.1</td></tr><tr><td>Samsung Internet</td><td>16.0, 15.0</td></tr></tbody></table><h3>Changelog</h3>
2909
2909
  </a>
2910
2910
  <p>See this <a href="https://www.twilio.com/docs/conversations/javascript/changelog">link</a>.</p>
2911
2911
  </div>
@@ -2808,7 +2808,7 @@ img {
2808
2808
  </aside>
2809
2809
  <div class="tsd-comment tsd-typography">
2810
2810
  <div class="lead">
2811
- <p>Amount of the attached media of the message.</p>
2811
+ <p>Count of the attached media of the message.</p>
2812
2812
  </div>
2813
2813
  </div>
2814
2814
  </section>
package/docs/modules.html CHANGED
@@ -2877,7 +2877,7 @@ img {
2877
2877
  <span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0070C1">client</span><span style="color: #000000"> = </span><span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #795E26">Client</span><span style="color: #000000">(</span><span style="color: #001080">token</span><span style="color: #000000">);</span>
2878
2878
  <span style="color: #008000">// Before you use the client, subscribe to the `&#039;stateChanged&#039;` event and wait </span>
2879
2879
  <span style="color: #008000">// for the `&#039;initialized&#039;` state to be reported.</span>
2880
- <span style="color: #001080">client</span><span style="color: #000000">.</span><span style="color: #795E26">on</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;stateChanged&#039;</span><span style="color: #000000">, (</span><span style="color: #001080">state</span><span style="color: #000000">) </span><span style="color: #0000FF">=&gt;</span><span style="color: #000000"> {</span>
2880
+ <span style="color: #001080">client</span><span style="color: #000000">.</span><span style="color: #795E26">on</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;stateChanged&#039;</span><span style="color: #000000">, ({ </span><span style="color: #001080">state</span><span style="color: #000000">, </span><span style="color: #001080">error</span><span style="color: #000000"> }) </span><span style="color: #0000FF">=&gt;</span><span style="color: #000000"> {</span>
2881
2881
  <span style="color: #000000"> </span><span style="color: #AF00DB">if</span><span style="color: #000000"> (</span><span style="color: #001080">state</span><span style="color: #000000"> === </span><span style="color: #A31515">&#039;initialized&#039;</span><span style="color: #000000">) {</span>
2882
2882
  <span style="color: #000000"> </span><span style="color: #008000">// Use the client</span>
2883
2883
  <span style="color: #000000"> }</span>
@@ -2888,7 +2888,7 @@ img {
2888
2888
  </a>
2889
2889
  <p>Releases of <code>twilio-conversations.js</code> are hosted on a CDN, and you can include these
2890
2890
  directly in your web app using a <code>&lt;script&gt;</code> tag.</p>
2891
- <pre><code class="language-html"><span style="color: #800000">&lt;script</span><span style="color: #000000FF"> </span><span style="color: #FF0000">src</span><span style="color: #000000FF">=</span><span style="color: #0000FF">&quot;https://media.twiliocdn.com/sdk/js/conversations/v3.0.0/twilio-conversations.min.js&quot;</span><span style="color: #800000">&gt;&lt;/script&gt;</span>
2891
+ <pre><code class="language-html"><span style="color: #800000">&lt;script</span><span style="color: #000000FF"> </span><span style="color: #FF0000">src</span><span style="color: #000000FF">=</span><span style="color: #0000FF">&quot;https://media.twiliocdn.com/sdk/js/conversations/v3.0/twilio-conversations.min.js&quot;</span><span style="color: #800000">&gt;&lt;/script&gt;</span>
2892
2892
  </code></pre>
2893
2893
  <p>Using this method, <code>twilio-conversations.js</code> will set a browser global <code>Twilio.Conversations</code> through which you can use the client:</p>
2894
2894
  <pre><code><span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0070C1">client</span><span style="color: #000000"> = </span><span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #001080">Twilio</span><span style="color: #000000">.</span><span style="color: #001080">Conversations</span><span style="color: #000000">.</span><span style="color: #795E26">Client</span><span style="color: #000000">(</span><span style="color: #001080">token</span><span style="color: #000000">);</span>