@twilio/conversations 3.0.0-rc.8 → 3.0.1-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/README.md +38 -28
  2. package/builds/browser.js +4327 -7903
  3. package/builds/browser.js.map +1 -1
  4. package/builds/lib.d.ts +629 -102
  5. package/builds/lib.js +4319 -7904
  6. package/builds/lib.js.map +1 -1
  7. package/builds/twilio-conversations.js +27540 -41958
  8. package/builds/twilio-conversations.min.js +200 -1
  9. package/dist/aggregated-delivery-receipt.js +10 -1
  10. package/dist/aggregated-delivery-receipt.js.map +1 -1
  11. package/dist/channel-metadata-client.js +192 -0
  12. package/dist/channel-metadata-client.js.map +1 -0
  13. package/dist/client.js +75 -123
  14. package/dist/client.js.map +1 -1
  15. package/dist/command-executor.js +81 -20
  16. package/dist/command-executor.js.map +1 -1
  17. package/dist/configuration.js +14 -3
  18. package/dist/configuration.js.map +1 -1
  19. package/dist/content-client.js +184 -0
  20. package/dist/content-client.js.map +1 -0
  21. package/dist/content-template.js +310 -0
  22. package/dist/content-template.js.map +1 -0
  23. package/dist/conversation.js +105 -22
  24. package/dist/conversation.js.map +1 -1
  25. package/dist/data/conversations.js +43 -5
  26. package/dist/data/conversations.js.map +1 -1
  27. package/dist/data/messages.js +26 -19
  28. package/dist/data/messages.js.map +1 -1
  29. package/dist/data/participants.js +15 -4
  30. package/dist/data/participants.js.map +1 -1
  31. package/dist/data/users.js +11 -2
  32. package/dist/data/users.js.map +1 -1
  33. package/dist/detailed-delivery-receipt.js +9 -0
  34. package/dist/detailed-delivery-receipt.js.map +1 -1
  35. package/dist/index.js +20 -2
  36. package/dist/index.js.map +1 -1
  37. package/dist/interfaces/notification-types.js +9 -0
  38. package/dist/interfaces/notification-types.js.map +1 -1
  39. package/dist/interfaces/{attributes.js → rules.js} +26 -7
  40. package/dist/interfaces/rules.js.map +1 -0
  41. package/dist/logger.js +9 -0
  42. package/dist/logger.js.map +1 -1
  43. package/dist/media.js +9 -0
  44. package/dist/media.js.map +1 -1
  45. package/dist/message-builder.js +77 -6
  46. package/dist/message-builder.js.map +1 -1
  47. package/dist/message.js +115 -22
  48. package/dist/message.js.map +1 -1
  49. package/dist/node_modules/quick-lru/index.js +265 -0
  50. package/dist/node_modules/quick-lru/index.js.map +1 -0
  51. package/dist/node_modules/tslib/tslib.es6.js +9 -0
  52. package/dist/node_modules/tslib/tslib.es6.js.map +1 -1
  53. package/dist/packages/conversations/package.json.js +10 -1
  54. package/dist/packages/conversations/package.json.js.map +1 -1
  55. package/dist/participant.js +45 -36
  56. package/dist/participant.js.map +1 -1
  57. package/dist/push-notification.js +9 -0
  58. package/dist/push-notification.js.map +1 -1
  59. package/dist/rest-paginator.js +20 -11
  60. package/dist/rest-paginator.js.map +1 -1
  61. package/dist/services/network.js +110 -11
  62. package/dist/services/network.js.map +1 -1
  63. package/dist/services/typing-indicator.js +22 -5
  64. package/dist/services/typing-indicator.js.map +1 -1
  65. package/dist/unsent-message.js +9 -0
  66. package/dist/unsent-message.js.map +1 -1
  67. package/dist/user.js +20 -3
  68. package/dist/user.js.map +1 -1
  69. package/dist/util/deferred.js +9 -0
  70. package/dist/util/deferred.js.map +1 -1
  71. package/dist/util/index.js +9 -0
  72. package/dist/util/index.js.map +1 -1
  73. package/docs/.nojekyll +1 -0
  74. package/docs/assets/highlight.css +113 -0
  75. package/docs/assets/main.js +58 -0
  76. package/docs/assets/search.js +1 -0
  77. package/docs/assets/style.css +1279 -0
  78. package/docs/classes/AggregatedDeliveryReceipt.html +144 -3182
  79. package/docs/classes/CancellablePromise.html +224 -3209
  80. package/docs/classes/CancellationError.html +112 -0
  81. package/docs/classes/ChannelMetadata.html +67 -0
  82. package/docs/classes/Client.html +701 -4237
  83. package/docs/classes/ContentTemplate.html +97 -0
  84. package/docs/classes/ContentTemplateVariable.html +90 -0
  85. package/docs/classes/Conversation.html +768 -4352
  86. package/docs/classes/DetailedDeliveryReceipt.html +116 -3162
  87. package/docs/classes/Media.html +119 -3165
  88. package/docs/classes/Message.html +417 -3730
  89. package/docs/classes/MessageBuilder.html +208 -3274
  90. package/docs/classes/Participant.html +258 -3442
  91. package/docs/classes/PushNotification.html +101 -3129
  92. package/docs/classes/RestPaginator.html +120 -3158
  93. package/docs/classes/UnsentMessage.html +63 -3040
  94. package/docs/classes/User.html +209 -3347
  95. package/docs/index.html +146 -3502
  96. package/docs/interfaces/ClientOptions.html +66 -3033
  97. package/docs/interfaces/ConversationBindings.html +109 -3000
  98. package/docs/interfaces/ConversationEmailBinding.html +109 -3000
  99. package/docs/interfaces/ConversationLimits.html +87 -3097
  100. package/docs/interfaces/ConversationState.html +66 -3049
  101. package/docs/interfaces/ConversationUpdatedEventArgs.html +109 -3000
  102. package/docs/interfaces/CreateConversationOptions.html +73 -3065
  103. package/docs/interfaces/LastMessage.html +66 -3049
  104. package/docs/interfaces/Paginator.html +110 -3139
  105. package/docs/interfaces/ParticipantBindingOptions.html +110 -0
  106. package/docs/interfaces/ParticipantBindings.html +109 -3000
  107. package/docs/interfaces/ParticipantEmailBinding.html +109 -3000
  108. package/docs/interfaces/PushNotificationData.html +94 -3113
  109. package/docs/interfaces/SendEmailOptions.html +59 -3033
  110. package/docs/interfaces/SendMediaOptions.html +75 -3067
  111. package/docs/modules.html +180 -3509
  112. package/docs/types/ChannelType.html +106 -0
  113. package/docs/types/ConnectionState.html +115 -0
  114. package/docs/types/ContentData.html +106 -0
  115. package/docs/types/ContentDataAction.html +107 -0
  116. package/docs/types/ContentDataActionOther.html +121 -0
  117. package/docs/types/ContentDataActionPhone.html +128 -0
  118. package/docs/types/ContentDataActionReply.html +133 -0
  119. package/docs/types/ContentDataActionUrl.html +128 -0
  120. package/docs/types/ContentDataCallToAction.html +131 -0
  121. package/docs/types/ContentDataCard.html +137 -0
  122. package/docs/types/ContentDataListItem.html +121 -0
  123. package/docs/types/ContentDataListPicker.html +134 -0
  124. package/docs/types/ContentDataLocation.html +134 -0
  125. package/docs/types/ContentDataMedia.html +129 -0
  126. package/docs/types/ContentDataOther.html +121 -0
  127. package/docs/types/ContentDataQuickReply.html +131 -0
  128. package/docs/types/ContentDataReply.html +119 -0
  129. package/docs/types/ContentDataText.html +125 -0
  130. package/docs/types/ConversationStatus.html +107 -0
  131. package/docs/types/ConversationUpdateReason.html +106 -0
  132. package/docs/types/DeliveryAmount.html +106 -0
  133. package/docs/types/DeliveryStatus.html +106 -0
  134. package/docs/types/JSONArray.html +106 -0
  135. package/docs/types/JSONObject.html +111 -0
  136. package/docs/types/JSONValue.html +106 -0
  137. package/docs/types/LogLevel.html +106 -0
  138. package/docs/types/MediaCategory.html +106 -0
  139. package/docs/types/MessageType.html +106 -0
  140. package/docs/types/MessageUpdateReason.html +106 -0
  141. package/docs/types/NotificationLevel.html +109 -0
  142. package/docs/types/NotificationsChannelType.html +110 -0
  143. package/docs/types/ParticipantEmailLevel.html +108 -0
  144. package/docs/types/ParticipantType.html +107 -0
  145. package/docs/types/ParticipantUpdateReason.html +106 -0
  146. package/docs/types/PushNotificationType.html +106 -0
  147. package/docs/types/State.html +110 -0
  148. package/docs/types/UserUpdateReason.html +106 -0
  149. package/package.json +22 -17
  150. package/CHANGELOG.md +0 -501
  151. package/dist/interfaces/attributes.js.map +0 -1
  152. package/docs/assets/css/main.css +0 -2660
  153. package/docs/assets/images/icons.png +0 -0
  154. package/docs/assets/images/icons@2x.png +0 -0
  155. package/docs/assets/images/widgets.png +0 -0
  156. package/docs/assets/images/widgets@2x.png +0 -0
  157. package/docs/assets/js/main.js +0 -248
  158. package/docs/assets/js/search.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"users.js","sources":["../../src/data/users.ts"],"sourcesContent":["import { User, UserUpdatedEventArgs, UserUpdateReason } from \"../user\";\nimport { Network } from \"../services/network\";\nimport { SyncClient } from \"twilio-sync\";\nimport { UriBuilder } from \"../util\";\nimport { Configuration } from \"../configuration\";\nimport { CommandExecutor } from \"../command-executor\";\nimport { ReplayEventEmitter } from \"@twilio/replay-event-emitter\";\nimport { UserResponse } from \"../interfaces/commands/user\";\n\ntype UsersEvents = {\n userUpdated: (data: {\n user: User;\n updateReasons: UserUpdateReason[];\n }) => void;\n userSubscribed: (user: User) => void;\n userUnsubscribed: (user: User) => void;\n};\n\nexport interface UsersServices {\n network: Network;\n syncClient: SyncClient;\n commandExecutor: CommandExecutor;\n}\n\n/**\n * Container for known users\n */\nclass Users extends ReplayEventEmitter<UsersEvents> {\n private readonly configuration: Configuration;\n private readonly services: UsersServices;\n\n private subscribedUsers: Map<string, User>;\n private fifoStack: string[];\n public readonly myself: User;\n\n constructor(\n myself: User,\n configuration: Configuration,\n services: UsersServices\n ) {\n super();\n\n this.configuration = configuration;\n this.services = services;\n\n this.fifoStack = [];\n this.myself = myself;\n this.myself.on(\"updated\", (args: UserUpdatedEventArgs) =>\n this.emit(\"userUpdated\", args)\n );\n this.myself.on(\"userSubscribed\", () =>\n this.emit(\"userSubscribed\", this.myself)\n );\n this.myself.on(\"userUnsubscribed\", () => {\n this.emit(\"userUnsubscribed\", this.myself);\n this.myself._ensureFetched();\n });\n\n this.subscribedUsers = new Map<string, User>();\n }\n\n private handleUnsubscribeUser(user: User): void {\n if (this.subscribedUsers.has(user.identity)) {\n this.subscribedUsers.delete(user.identity);\n }\n let foundItemIndex = 0;\n const foundItem = this.fifoStack.find((item, index) => {\n if (item == user.identity) {\n foundItemIndex = index;\n return true;\n }\n return false;\n });\n if (foundItem) {\n this.fifoStack.splice(foundItemIndex, 1);\n }\n this.emit(\"userUnsubscribed\", user);\n }\n\n private handleSubscribeUser(user: User): void {\n if (this.subscribedUsers.has(user.identity)) {\n return;\n }\n if (this.fifoStack.length >= this.configuration.userInfosToSubscribe) {\n const item = this.fifoStack.shift() as string;\n this.subscribedUsers?.get(item)?.unsubscribe();\n }\n this.fifoStack.push(user.identity);\n this.subscribedUsers.set(user.identity, user);\n this.emit(\"userSubscribed\", user);\n }\n\n /**\n * Gets user, if it's in subscribed list - then return the user object from it,\n * if not - then subscribes and adds user to the FIFO stack\n * @returns {Promise<User>} Fully initialized user\n */\n async getUser(identity: string, entityName?: string): Promise<User> {\n await this.myself._ensureFetched();\n\n if (identity == this.myself.identity) {\n return this.myself;\n }\n\n const user = this.subscribedUsers.get(identity);\n\n if (user) {\n return user;\n }\n\n entityName ??= await this.getSyncUniqueName(identity);\n\n const newUser = new User(\n identity,\n entityName,\n this.configuration,\n this.services\n );\n\n newUser.on(\"updated\", (args: UserUpdatedEventArgs) =>\n this.emit(\"userUpdated\", args)\n );\n newUser.on(\"userSubscribed\", () => this.handleSubscribeUser(newUser));\n newUser.on(\"userUnsubscribed\", () => this.handleUnsubscribeUser(newUser));\n await newUser._ensureFetched();\n\n return newUser;\n }\n\n /**\n * @returns {Promise<Array<User>>} returns list of subscribed User objects {@see User}\n */\n async getSubscribedUsers(): Promise<Array<User>> {\n await this.myself._ensureFetched();\n\n const users = [this.myself];\n this.subscribedUsers.forEach((user) => users.push(user));\n\n return users;\n }\n\n /**\n * @returns {Promise<string>} User's sync unique name\n */\n private async getSyncUniqueName(identity: string): Promise<string> {\n const url = new UriBuilder(this.configuration.links.users)\n .path(identity)\n .build();\n const response = await this.services.network.get<UserResponse>(url);\n return response.body?.sync_objects.user_info_map ?? \"\";\n }\n}\n\nexport { Users };\n"],"names":["ReplayEventEmitter","user","User","UriBuilder"],"mappings":"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"}
1
+ {"version":3,"file":"users.js","sources":["../../src/data/users.ts"],"sourcesContent":["import { User, UserUpdatedEventArgs, UserUpdateReason } from \"../user\";\nimport { Network } from \"../services/network\";\nimport { SyncClient } from \"twilio-sync\";\nimport { UriBuilder } from \"../util\";\nimport { Configuration } from \"../configuration\";\nimport { CommandExecutor } from \"../command-executor\";\nimport { ReplayEventEmitter } from \"@twilio/replay-event-emitter\";\nimport { UserResponse } from \"../interfaces/commands/user\";\n\ntype UsersEvents = {\n userUpdated: (data: {\n user: User;\n updateReasons: UserUpdateReason[];\n }) => void;\n userSubscribed: (user: User) => void;\n userUnsubscribed: (user: User) => void;\n};\n\nexport interface UsersServices {\n network: Network;\n syncClient: SyncClient;\n commandExecutor: CommandExecutor;\n}\n\n/**\n * Container for known users\n */\nclass Users extends ReplayEventEmitter<UsersEvents> {\n private readonly configuration: Configuration;\n private readonly services: UsersServices;\n\n private subscribedUsers: Map<string, User>;\n private fifoStack: string[];\n public readonly myself: User;\n\n constructor(\n myself: User,\n configuration: Configuration,\n services: UsersServices\n ) {\n super();\n\n this.configuration = configuration;\n this.services = services;\n\n this.fifoStack = [];\n this.myself = myself;\n this.myself.on(\"updated\", (args: UserUpdatedEventArgs) =>\n this.emit(\"userUpdated\", args)\n );\n this.myself.on(\"userSubscribed\", () =>\n this.emit(\"userSubscribed\", this.myself)\n );\n this.myself.on(\"userUnsubscribed\", () => {\n this.emit(\"userUnsubscribed\", this.myself);\n this.myself._ensureFetched();\n });\n\n this.subscribedUsers = new Map<string, User>();\n }\n\n private handleUnsubscribeUser(user: User): void {\n if (this.subscribedUsers.has(user.identity)) {\n this.subscribedUsers.delete(user.identity);\n }\n let foundItemIndex = 0;\n const foundItem = this.fifoStack.find((item, index) => {\n if (item == user.identity) {\n foundItemIndex = index;\n return true;\n }\n return false;\n });\n if (foundItem) {\n this.fifoStack.splice(foundItemIndex, 1);\n }\n this.emit(\"userUnsubscribed\", user);\n }\n\n private handleSubscribeUser(user: User): void {\n if (this.subscribedUsers.has(user.identity)) {\n return;\n }\n if (this.fifoStack.length >= this.configuration.userInfosToSubscribe) {\n const item = this.fifoStack.shift() as string;\n this.subscribedUsers?.get(item)?.unsubscribe();\n }\n this.fifoStack.push(user.identity);\n this.subscribedUsers.set(user.identity, user);\n this.emit(\"userSubscribed\", user);\n }\n\n /**\n * Gets user, if it's in subscribed list - then return the user object from it,\n * if not - then subscribes and adds user to the FIFO stack\n * @returns {Promise<User>} Fully initialized user\n */\n async getUser(identity: string, entityName?: string): Promise<User> {\n await this.myself._ensureFetched();\n\n if (identity == this.myself.identity) {\n return this.myself;\n }\n\n const user = this.subscribedUsers.get(identity);\n\n if (user) {\n return user;\n }\n\n entityName ??= await this.getSyncUniqueName(identity);\n\n const newUser = new User(\n identity,\n entityName,\n this.configuration,\n this.services\n );\n\n newUser.on(\"updated\", (args: UserUpdatedEventArgs) =>\n this.emit(\"userUpdated\", args)\n );\n newUser.on(\"userSubscribed\", () => this.handleSubscribeUser(newUser));\n newUser.on(\"userUnsubscribed\", () => this.handleUnsubscribeUser(newUser));\n await newUser._ensureFetched();\n\n return newUser;\n }\n\n /**\n * @returns {Promise<Array<User>>} returns list of subscribed User objects {@see User}\n */\n async getSubscribedUsers(): Promise<Array<User>> {\n await this.myself._ensureFetched();\n\n const users = [this.myself];\n this.subscribedUsers.forEach((user) => users.push(user));\n\n return users;\n }\n\n /**\n * @returns {Promise<string>} User's sync unique name\n */\n private async getSyncUniqueName(identity: string): Promise<string> {\n const url = new UriBuilder(this.configuration.links.users)\n .path(identity)\n .build();\n const response = await this.services.network.get(url);\n return response.body.sync_objects.user_info_map ?? \"\";\n }\n}\n\nexport { Users };\n"],"names":["ReplayEventEmitter","user","User","UriBuilder"],"mappings":"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"}
@@ -128,6 +128,15 @@ This software includes platform.js under the following license.
128
128
  */
129
129
  'use strict';
130
130
 
131
+ var global =
132
+ typeof global !== "undefined"
133
+ ? global
134
+ : typeof self !== "undefined"
135
+ ? self
136
+ : typeof window !== "undefined"
137
+ ? window
138
+ : {};
139
+
131
140
  Object.defineProperty(exports, '__esModule', { value: true });
132
141
 
133
142
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"detailed-delivery-receipt.js","sources":["../src/detailed-delivery-receipt.ts"],"sourcesContent":["/**\n * Message delivery status.\n */\ntype DeliveryStatus =\n | \"sent\"\n | \"delivered\"\n | \"failed\"\n | \"read\"\n | \"undelivered\"\n | \"queued\";\n\ninterface DetailedDeliveryReceiptDescriptor {\n sid: string;\n message_sid: string;\n conversation_sid: string;\n channel_message_sid: string;\n participant_sid: string;\n status: DeliveryStatus;\n error_code: string | null;\n date_created: string;\n date_updated: string;\n}\n\n/**\n * Represents a delivery receipt of a message.\n */\nclass DetailedDeliveryReceipt {\n /**\n * Unique identifier for the delivery receipt.\n */\n sid: string;\n\n /**\n * Unique identifier for the message in the conversation.\n */\n messageSid: string;\n\n /**\n * Unique identifier for the conversation.\n */\n conversationSid: string;\n\n /**\n * Unique identifier for the `‘channel’` message (e.g., `WAxx` for WhatsApp, `SMxx` for SMS).\n */\n channelMessageSid: string;\n\n /**\n * Unique identifier for the participant.\n */\n participantSid: string;\n\n /**\n * Status of the message delivery.\n */\n status: DeliveryStatus;\n\n /**\n * Numeric error code mapped from Status callback code. Information about the error codes can be found\n * [here](https://www.twilio.com/docs/sms/api/message-resource#delivery-related-errors).\n */\n errorCode: string | 0;\n\n /**\n * Date this delivery receipt was created on.\n */\n dateCreated: string;\n\n /**\n * Date this delivery receipt was last updated on.\n */\n dateUpdated: string;\n\n /**\n * @internal\n */\n constructor(descriptor: DetailedDeliveryReceiptDescriptor) {\n this.sid = descriptor.sid;\n this.messageSid = descriptor.message_sid;\n this.conversationSid = descriptor.conversation_sid;\n this.channelMessageSid = descriptor.channel_message_sid;\n this.participantSid = descriptor.participant_sid;\n this.status = descriptor.status || \"queued\";\n this.errorCode = descriptor.error_code || 0;\n this.dateCreated = descriptor.date_created;\n this.dateUpdated = descriptor.date_updated;\n }\n}\n\nexport {\n DetailedDeliveryReceipt,\n DetailedDeliveryReceiptDescriptor,\n DeliveryStatus,\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA;;AAEG;AACH,MAAM,uBAAuB,CAAA;AA+C3B;;AAEG;AACH,IAAA,WAAA,CAAY,UAA6C,EAAA;AACvD,QAAA,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC;AACzC,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,gBAAgB,CAAC;AACnD,QAAA,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,mBAAmB,CAAC;AACxD,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,QAAQ,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC;AAC3C,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC;KAC5C;AACF;;;;"}
1
+ {"version":3,"file":"detailed-delivery-receipt.js","sources":["../src/detailed-delivery-receipt.ts"],"sourcesContent":["/**\n * Message delivery status.\n */\ntype DeliveryStatus =\n | \"sent\"\n | \"delivered\"\n | \"failed\"\n | \"read\"\n | \"undelivered\"\n | \"queued\";\n\ninterface DetailedDeliveryReceiptDescriptor {\n sid: string;\n message_sid: string;\n conversation_sid: string;\n channel_message_sid: string;\n participant_sid: string;\n status: DeliveryStatus;\n error_code: string | null;\n date_created: string;\n date_updated: string;\n}\n\n/**\n * Represents a delivery receipt of a message.\n */\nclass DetailedDeliveryReceipt {\n /**\n * Unique identifier for the delivery receipt.\n */\n sid: string;\n\n /**\n * Unique identifier for the message in the conversation.\n */\n messageSid: string;\n\n /**\n * Unique identifier for the conversation.\n */\n conversationSid: string;\n\n /**\n * Unique identifier for the `‘channel’` message (e.g., `WAxx` for WhatsApp, `SMxx` for SMS).\n */\n channelMessageSid: string;\n\n /**\n * Unique identifier for the participant.\n */\n participantSid: string;\n\n /**\n * Status of the message delivery.\n */\n status: DeliveryStatus;\n\n /**\n * Numeric error code mapped from Status callback code. Information about the error codes can be found\n * [here](https://www.twilio.com/docs/sms/api/message-resource#delivery-related-errors).\n */\n errorCode: string | 0;\n\n /**\n * Date this delivery receipt was created on.\n */\n dateCreated: string;\n\n /**\n * Date this delivery receipt was last updated on.\n */\n dateUpdated: string;\n\n /**\n * @internal\n */\n constructor(descriptor: DetailedDeliveryReceiptDescriptor) {\n this.sid = descriptor.sid;\n this.messageSid = descriptor.message_sid;\n this.conversationSid = descriptor.conversation_sid;\n this.channelMessageSid = descriptor.channel_message_sid;\n this.participantSid = descriptor.participant_sid;\n this.status = descriptor.status || \"queued\";\n this.errorCode = descriptor.error_code || 0;\n this.dateCreated = descriptor.date_created;\n this.dateUpdated = descriptor.date_updated;\n }\n}\n\nexport {\n DetailedDeliveryReceipt,\n DetailedDeliveryReceiptDescriptor,\n DeliveryStatus,\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA;;AAEG;AACH,MAAM,uBAAuB,CAAA;AA+C3B;;AAEG;AACH,IAAA,WAAA,CAAY,UAA6C,EAAA;AACvD,QAAA,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC;AACzC,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,gBAAgB,CAAC;AACnD,QAAA,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,mBAAmB,CAAC;AACxD,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,QAAQ,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC;AAC3C,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC;KAC5C;AACF;;;;"}
package/dist/index.js CHANGED
@@ -128,10 +128,19 @@ This software includes platform.js under the following license.
128
128
  */
129
129
  'use strict';
130
130
 
131
+ var global =
132
+ typeof global !== "undefined"
133
+ ? global
134
+ : typeof self !== "undefined"
135
+ ? self
136
+ : typeof window !== "undefined"
137
+ ? window
138
+ : {};
139
+
131
140
  Object.defineProperty(exports, '__esModule', { value: true });
132
141
 
133
142
  var client = require('./client.js');
134
- var mcsClient = require('@twilio/mcs-client');
143
+ var shared = require('@twilio/shared');
135
144
  var conversation = require('./conversation.js');
136
145
  var participant = require('./participant.js');
137
146
  var message = require('./message.js');
@@ -144,6 +153,8 @@ var unsentMessage = require('./unsent-message.js');
144
153
  var user = require('./user.js');
145
154
  var pushNotification = require('./push-notification.js');
146
155
  var notificationTypes = require('./interfaces/notification-types.js');
156
+ var contentTemplate = require('./content-template.js');
157
+ var channelMetadataClient = require('./channel-metadata-client.js');
147
158
 
148
159
 
149
160
 
@@ -153,7 +164,11 @@ Object.defineProperty(exports, 'Client', {
153
164
  });
154
165
  Object.defineProperty(exports, 'CancellablePromise', {
155
166
  enumerable: true,
156
- get: function () { return mcsClient.CancellablePromise; }
167
+ get: function () { return shared.CancellablePromise; }
168
+ });
169
+ Object.defineProperty(exports, 'CancellationError', {
170
+ enumerable: true,
171
+ get: function () { return shared.CancellationError; }
157
172
  });
158
173
  exports.Conversation = conversation.Conversation;
159
174
  exports.Participant = participant.Participant;
@@ -167,4 +182,7 @@ exports.UnsentMessage = unsentMessage.UnsentMessage;
167
182
  exports.User = user.User;
168
183
  exports.PushNotification = pushNotification.PushNotification;
169
184
  exports.NotificationTypes = notificationTypes.NotificationTypes;
185
+ exports.ContentTemplate = contentTemplate.ContentTemplate;
186
+ exports.ContentTemplateVariable = contentTemplate.ContentTemplateVariable;
187
+ exports.ChannelMetadata = channelMetadataClient.ChannelMetadata;
170
188
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -128,6 +128,15 @@ This software includes platform.js under the following license.
128
128
  */
129
129
  'use strict';
130
130
 
131
+ var global =
132
+ typeof global !== "undefined"
133
+ ? global
134
+ : typeof self !== "undefined"
135
+ ? self
136
+ : typeof window !== "undefined"
137
+ ? window
138
+ : {};
139
+
131
140
  Object.defineProperty(exports, '__esModule', { value: true });
132
141
 
133
142
  class NotificationTypes {
@@ -1 +1 @@
1
- {"version":3,"file":"notification-types.js","sources":["../../src/interfaces/notification-types.ts"],"sourcesContent":["class NotificationTypes {\n static readonly TYPING_INDICATOR = \"twilio.ipmsg.typing_indicator\";\n static readonly NEW_MESSAGE = \"twilio.conversations.new_message\";\n static readonly ADDED_TO_CONVERSATION =\n \"twilio.conversations.added_to_conversation\";\n // static readonly INVITED_TO_CHANNEL = 'twilio.channel.invited_to_channel';\n static readonly REMOVED_FROM_CONVERSATION =\n \"twilio.conversations.removed_from_conversation\";\n static readonly CONSUMPTION_UPDATE = \"twilio.channel.consumption_update\";\n}\n\nexport { NotificationTypes };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAM,iBAAiB,CAAA;;AACL,iBAAgB,CAAA,gBAAA,GAAG,+BAA+B,CAAC;AACnD,iBAAW,CAAA,WAAA,GAAG,kCAAkC,CAAC;AACjD,iBAAqB,CAAA,qBAAA,GACnC,4CAA4C,CAAC;AAC/C;AACgB,iBAAyB,CAAA,yBAAA,GACvC,gDAAgD,CAAC;AACnC,iBAAkB,CAAA,kBAAA,GAAG,mCAAmC;;;;"}
1
+ {"version":3,"file":"notification-types.js","sources":["../../src/interfaces/notification-types.ts"],"sourcesContent":["class NotificationTypes {\n static readonly TYPING_INDICATOR = \"twilio.ipmsg.typing_indicator\";\n static readonly NEW_MESSAGE = \"twilio.conversations.new_message\";\n static readonly ADDED_TO_CONVERSATION =\n \"twilio.conversations.added_to_conversation\";\n // static readonly INVITED_TO_CHANNEL = 'twilio.channel.invited_to_channel';\n static readonly REMOVED_FROM_CONVERSATION =\n \"twilio.conversations.removed_from_conversation\";\n static readonly CONSUMPTION_UPDATE = \"twilio.channel.consumption_update\";\n}\n\nexport { NotificationTypes };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAM,iBAAiB,CAAA;;AACL,iBAAgB,CAAA,gBAAA,GAAG,+BAA+B,CAAC;AACnD,iBAAW,CAAA,WAAA,GAAG,kCAAkC,CAAC;AACjD,iBAAqB,CAAA,qBAAA,GACnC,4CAA4C,CAAC;AAC/C;AACgB,iBAAyB,CAAA,yBAAA,GACvC,gDAAgD,CAAC;AACnC,iBAAkB,CAAA,kBAAA,GAAG,mCAAmC;;;;"}
@@ -128,20 +128,39 @@ This software includes platform.js under the following license.
128
128
  */
129
129
  'use strict';
130
130
 
131
+ var global =
132
+ typeof global !== "undefined"
133
+ ? global
134
+ : typeof self !== "undefined"
135
+ ? self
136
+ : typeof window !== "undefined"
137
+ ? window
138
+ : {};
139
+
131
140
  Object.defineProperty(exports, '__esModule', { value: true });
132
141
 
133
142
  var declarativeTypeValidator = require('@twilio/declarative-type-validator');
134
143
 
135
- // Any JSON value
136
- const attributesValidator = declarativeTypeValidator.custom((value) => [
144
+ const json = declarativeTypeValidator.custom((value) => [
137
145
  ["string", "number", "boolean", "object"].includes(typeof value),
138
146
  "a JSON type",
139
147
  ]);
140
- const optionalAttributesValidator = declarativeTypeValidator.custom((value) => [
148
+ const optionalJson = declarativeTypeValidator.custom((value) => [
141
149
  ["undefined", "string", "number", "boolean", "object"].includes(typeof value),
142
150
  "an optional JSON type",
143
151
  ]);
144
-
145
- exports.attributesValidator = attributesValidator;
146
- exports.optionalAttributesValidator = optionalAttributesValidator;
147
- //# sourceMappingURL=attributes.js.map
152
+ const sendMediaOptions = declarativeTypeValidator.objectSchema("send media options", {
153
+ contentType: [declarativeTypeValidator.literal(null), "string"],
154
+ filename: ["string", "undefined"],
155
+ media: [
156
+ declarativeTypeValidator.literal("null"),
157
+ "string",
158
+ ...(typeof Buffer === "function" ? [Buffer] : []),
159
+ ...(typeof Blob === "function" ? [Blob] : []),
160
+ ],
161
+ });
162
+
163
+ exports.json = json;
164
+ exports.optionalJson = optionalJson;
165
+ exports.sendMediaOptions = sendMediaOptions;
166
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sources":["../../src/interfaces/rules.ts"],"sourcesContent":["import {\n custom,\n literal,\n objectSchema,\n} from \"@twilio/declarative-type-validator\";\n\nexport const json = custom((value) => [\n [\"string\", \"number\", \"boolean\", \"object\"].includes(typeof value),\n \"a JSON type\",\n]);\n\nexport const optionalJson = custom((value) => [\n [\"undefined\", \"string\", \"number\", \"boolean\", \"object\"].includes(typeof value),\n \"an optional JSON type\",\n]);\n\nexport const sendMediaOptions = objectSchema(\"send media options\", {\n contentType: [literal(null), \"string\"],\n filename: [\"string\", \"undefined\"],\n media: [\n literal(\"null\"),\n \"string\",\n ...(typeof Buffer === \"function\" ? [Buffer] : []),\n ...(typeof Blob === \"function\" ? [Blob] : []),\n ],\n});\n"],"names":["custom","objectSchema","literal"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMa,MAAA,IAAI,GAAGA,+BAAM,CAAC,CAAC,KAAK,KAAK;AACpC,IAAA,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC;IAChE,aAAa;AACd,CAAA,EAAE;AAEU,MAAA,YAAY,GAAGA,+BAAM,CAAC,CAAC,KAAK,KAAK;AAC5C,IAAA,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC;IAC7E,uBAAuB;AACxB,CAAA,EAAE;AAEU,MAAA,gBAAgB,GAAGC,qCAAY,CAAC,oBAAoB,EAAE;IACjE,WAAW,EAAE,CAACC,gCAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;AACtC,IAAA,QAAQ,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC;AACjC,IAAA,KAAK,EAAE;QACLA,gCAAO,CAAC,MAAM,CAAC;QACf,QAAQ;AACR,QAAA,IAAI,OAAO,MAAM,KAAK,UAAU,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AACjD,QAAA,IAAI,OAAO,IAAI,KAAK,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC9C,KAAA;AACF,CAAA;;;;;;"}
package/dist/logger.js CHANGED
@@ -128,6 +128,15 @@ This software includes platform.js under the following license.
128
128
  */
129
129
  'use strict';
130
130
 
131
+ var global =
132
+ typeof global !== "undefined"
133
+ ? global
134
+ : typeof self !== "undefined"
135
+ ? self
136
+ : typeof window !== "undefined"
137
+ ? window
138
+ : {};
139
+
131
140
  Object.defineProperty(exports, '__esModule', { value: true });
132
141
 
133
142
  var loglevelLog = require('loglevel');
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sources":["../src/logger.ts"],"sourcesContent":["import * as loglevelLog from \"loglevel\";\nimport { LogLevelDesc } from \"loglevel\";\n\nfunction prepareLine(prefix, args) {\n return [`${new Date().toISOString()} Conversations ${prefix}:`].concat(\n Array.from(args)\n );\n}\n\nconst log: loglevelLog.Logger = loglevelLog.getLogger(\"twilio-conversations\"); // twilio-conversations is used by Flex SDK. Please DO NOT change\n\nclass Logger {\n private prefix = \"\";\n\n private constructor(prefix: string) {\n this.prefix =\n prefix !== null && prefix !== undefined && prefix.length > 0\n ? prefix + \" \"\n : \"\";\n }\n\n static scope(prefix: string): Logger {\n return new Logger(prefix);\n }\n\n setLevel(level: LogLevelDesc) {\n log.setLevel(level);\n }\n\n static setLevel(level: LogLevelDesc) {\n log.setLevel(level);\n }\n\n trace(...args) {\n log.trace.apply(null, prepareLine(this.prefix + \"T\", args));\n }\n\n debug(...args) {\n log.debug.apply(null, prepareLine(this.prefix + \"D\", args));\n }\n\n info(...args) {\n log.info.apply(null, prepareLine(this.prefix + \"I\", args));\n }\n\n warn(...args) {\n log.warn.apply(null, prepareLine(this.prefix + \"W\", args));\n }\n\n error(...args) {\n log.error.apply(null, prepareLine(this.prefix + \"E\", args));\n }\n\n static trace(...args) {\n log.trace.apply(null, prepareLine(\"T\", args));\n }\n\n static debug(...args) {\n log.debug.apply(null, prepareLine(\"D\", args));\n }\n\n static info(...args) {\n log.info.apply(null, prepareLine(\"I\", args));\n }\n\n static warn(...args) {\n log.warn.apply(null, prepareLine(\"W\", args));\n }\n\n static error(...args) {\n log.error.apply(null, prepareLine(\"E\", args));\n }\n}\n\nexport { Logger };\n"],"names":["loglevelLog"],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sources":["../src/logger.ts"],"sourcesContent":["import * as loglevelLog from \"loglevel\";\nimport { LogLevelDesc } from \"loglevel\";\n\nfunction prepareLine(prefix, args) {\n return [`${new Date().toISOString()} Conversations ${prefix}:`].concat(\n Array.from(args)\n );\n}\n\nconst log: loglevelLog.Logger = loglevelLog.getLogger(\"twilio-conversations\"); // twilio-conversations is used by Flex SDK. Please DO NOT change\n\nclass Logger {\n private prefix = \"\";\n\n private constructor(prefix: string) {\n this.prefix =\n prefix !== null && prefix !== undefined && prefix.length > 0\n ? prefix + \" \"\n : \"\";\n }\n\n static scope(prefix: string): Logger {\n return new Logger(prefix);\n }\n\n setLevel(level: LogLevelDesc) {\n log.setLevel(level);\n }\n\n static setLevel(level: LogLevelDesc) {\n log.setLevel(level);\n }\n\n trace(...args) {\n log.trace.apply(null, prepareLine(this.prefix + \"T\", args));\n }\n\n debug(...args) {\n log.debug.apply(null, prepareLine(this.prefix + \"D\", args));\n }\n\n info(...args) {\n log.info.apply(null, prepareLine(this.prefix + \"I\", args));\n }\n\n warn(...args) {\n log.warn.apply(null, prepareLine(this.prefix + \"W\", args));\n }\n\n error(...args) {\n log.error.apply(null, prepareLine(this.prefix + \"E\", args));\n }\n\n static trace(...args) {\n log.trace.apply(null, prepareLine(\"T\", args));\n }\n\n static debug(...args) {\n log.debug.apply(null, prepareLine(\"D\", args));\n }\n\n static info(...args) {\n log.info.apply(null, prepareLine(\"I\", args));\n }\n\n static warn(...args) {\n log.warn.apply(null, prepareLine(\"W\", args));\n }\n\n static error(...args) {\n log.error.apply(null, prepareLine(\"E\", args));\n }\n}\n\nexport { Logger };\n"],"names":["loglevelLog"],"mappings":"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"}
package/dist/media.js CHANGED
@@ -128,6 +128,15 @@ This software includes platform.js under the following license.
128
128
  */
129
129
  'use strict';
130
130
 
131
+ var global =
132
+ typeof global !== "undefined"
133
+ ? global
134
+ : typeof self !== "undefined"
135
+ ? self
136
+ : typeof window !== "undefined"
137
+ ? window
138
+ : {};
139
+
131
140
  Object.defineProperty(exports, '__esModule', { value: true });
132
141
 
133
142
  var mcsClient = require('@twilio/mcs-client');
package/dist/media.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"media.js","sources":["../src/media.ts"],"sourcesContent":["import {\n McsClient,\n McsMedia,\n MediaCategory as McsMediaCategory,\n CancellablePromise,\n} from \"@twilio/mcs-client\";\n\n/**\n * Category of media. Possible values are as follows:\n * * `'media'`\n * * `'body'`\n * * `'history'`\n */\ntype MediaCategory = McsMediaCategory;\n\ninterface MediaState {\n sid: string;\n category: MediaCategory;\n filename: string | null;\n contentType: string;\n size: number;\n}\n\ninterface MediaServices {\n mcsClient: McsClient;\n}\n\n/**\n * Represents a media information for a message in a conversation.\n */\nclass Media {\n private state: MediaState;\n private services: MediaServices;\n private mcsMedia: McsMedia | null = null;\n\n /**\n * @internal\n */\n constructor(data: MediaState | McsMedia, services: MediaServices) {\n this.services = services;\n\n if (data instanceof McsMedia) {\n this.mcsMedia = data as McsMedia;\n }\n\n this.state = {\n sid: data.sid,\n category: data.category,\n filename: data.filename,\n contentType: data.contentType,\n size: data.size,\n };\n }\n\n /**\n * Server-assigned unique identifier for the media.\n */\n public get sid(): string {\n return this.state.sid;\n }\n\n /**\n * File name. Null if absent.\n */\n public get filename(): string | null {\n return this.state.filename;\n }\n\n /**\n * Content type of the media.\n */\n public get contentType(): string {\n return this.state.contentType;\n }\n\n /**\n * Size of the media in bytes.\n */\n public get size(): number {\n return this.state.size;\n }\n\n /**\n * Media category, can be one of the {@link MediaCategory} values.\n */\n public get category(): MediaCategory {\n return this.state.category;\n }\n\n /**\n * Returns the direct content URL for the media.\n *\n * This URL is impermanent, it will expire in several minutes and cannot be cached.\n * If the URL becomes expired, you need to request a new one.\n * Each call to this function produces a new temporary URL.\n */\n public getContentTemporaryUrl(): CancellablePromise<string | null> {\n return new CancellablePromise(async (resolve, reject, onCancel) => {\n const fetchMediaRequest = this._fetchMcsMedia();\n let contentUrlRequest = this.mcsMedia?.getContentUrl();\n\n onCancel(() => {\n fetchMediaRequest.cancel();\n if (contentUrlRequest) {\n contentUrlRequest.cancel();\n }\n });\n\n try {\n if (!this.mcsMedia) {\n const mcsMedia = await fetchMediaRequest;\n contentUrlRequest = mcsMedia.getContentUrl();\n }\n resolve(contentUrlRequest ? await contentUrlRequest : null);\n } catch (e) {\n reject(e);\n }\n });\n }\n\n private _fetchMcsMedia(): CancellablePromise<McsMedia> {\n return new CancellablePromise(async (resolve, reject, onCancel) => {\n const request = this.services.mcsClient.get(this.state.sid);\n if (this.services.mcsClient) {\n onCancel(() => request.cancel());\n\n try {\n this.mcsMedia = await request;\n resolve(this.mcsMedia);\n } catch (e) {\n reject(e);\n }\n return;\n }\n\n reject(new Error(\"Media Content Service is unavailable\"));\n });\n }\n}\n\nexport { Media, MediaState, MediaServices, MediaCategory };\n"],"names":["McsMedia","CancellablePromise"],"mappings":"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"}
1
+ {"version":3,"file":"media.js","sources":["../src/media.ts"],"sourcesContent":["import {\n McsClient,\n McsMedia,\n MediaCategory,\n CancellablePromise,\n} from \"@twilio/mcs-client\";\n\ninterface MediaState {\n sid: string;\n category: MediaCategory;\n filename: string | null;\n contentType: string;\n size: number;\n}\n\ninterface MediaServices {\n mcsClient: McsClient;\n}\n\n/**\n * Represents a media information for a message in a conversation.\n */\nclass Media {\n private state: MediaState;\n private services: MediaServices;\n private mcsMedia: McsMedia | null = null;\n\n /**\n * @internal\n */\n constructor(data: MediaState | McsMedia, services: MediaServices) {\n this.services = services;\n\n if (data instanceof McsMedia) {\n this.mcsMedia = data as McsMedia;\n }\n\n this.state = {\n sid: data.sid,\n category: data.category,\n filename: data.filename,\n contentType: data.contentType,\n size: data.size,\n };\n }\n\n /**\n * Server-assigned unique identifier for the media.\n */\n public get sid(): string {\n return this.state.sid;\n }\n\n /**\n * File name. Null if absent.\n */\n public get filename(): string | null {\n return this.state.filename;\n }\n\n /**\n * Content type of the media.\n */\n public get contentType(): string {\n return this.state.contentType;\n }\n\n /**\n * Size of the media in bytes.\n */\n public get size(): number {\n return this.state.size;\n }\n\n /**\n * Media category, can be one of the {@link MediaCategory} values.\n */\n public get category(): MediaCategory {\n return this.state.category;\n }\n\n /**\n * Returns the direct content URL for the media.\n *\n * This URL is impermanent, it will expire in several minutes and cannot be cached.\n * If the URL becomes expired, you need to request a new one.\n * Each call to this function produces a new temporary URL.\n */\n public getContentTemporaryUrl(): CancellablePromise<string | null> {\n return new CancellablePromise(async (resolve, reject, onCancel) => {\n const fetchMediaRequest = this._fetchMcsMedia();\n let contentUrlRequest = this.mcsMedia?.getContentUrl();\n\n onCancel(() => {\n fetchMediaRequest.cancel();\n if (contentUrlRequest) {\n contentUrlRequest.cancel();\n }\n });\n\n try {\n if (!this.mcsMedia) {\n const mcsMedia = await fetchMediaRequest;\n contentUrlRequest = mcsMedia.getContentUrl();\n }\n resolve(contentUrlRequest ? await contentUrlRequest : null);\n } catch (e) {\n reject(e);\n }\n });\n }\n\n private _fetchMcsMedia(): CancellablePromise<McsMedia> {\n return new CancellablePromise(async (resolve, reject, onCancel) => {\n const request = this.services.mcsClient.get(this.state.sid);\n if (this.services.mcsClient) {\n onCancel(() => request.cancel());\n\n try {\n this.mcsMedia = await request;\n resolve(this.mcsMedia);\n } catch (e) {\n reject(e);\n }\n return;\n }\n\n reject(new Error(\"Media Content Service is unavailable\"));\n });\n }\n}\n\nexport { Media, MediaState, MediaServices, MediaCategory };\n"],"names":["McsMedia","CancellablePromise"],"mappings":"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"}
@@ -128,9 +128,22 @@ This software includes platform.js under the following license.
128
128
  */
129
129
  'use strict';
130
130
 
131
+ var global =
132
+ typeof global !== "undefined"
133
+ ? global
134
+ : typeof self !== "undefined"
135
+ ? self
136
+ : typeof window !== "undefined"
137
+ ? window
138
+ : {};
139
+
131
140
  Object.defineProperty(exports, '__esModule', { value: true });
132
141
 
142
+ var tslib_es6 = require('./node_modules/tslib/tslib.es6.js');
133
143
  var unsentMessage = require('./unsent-message.js');
144
+ var contentTemplate = require('./content-template.js');
145
+ var declarativeTypeValidator = require('@twilio/declarative-type-validator');
146
+ var rules = require('./interfaces/rules.js');
134
147
 
135
148
  /**
136
149
  * Message builder. Allows the message to be built and sent via method chaining.
@@ -199,6 +212,25 @@ class MessageBuilder {
199
212
  this.emailHistories.set(contentType, history);
200
213
  return this;
201
214
  }
215
+ /**
216
+ * Adds {@link ContentTemplate} SID for the message alongside optional
217
+ * variables. When no variables provided, the default values will be used.
218
+ *
219
+ * Adding the content SID converts the message to a rich message. In this
220
+ * case, other fields are ignored and the message is sent using the content
221
+ * from the the {@link ContentTemplate}.
222
+ *
223
+ * Use {@link Client.getContentTemplates} to request all available
224
+ * {@link ContentTemplate}s.
225
+ *
226
+ * @param contentSid SID of the {@link ContentTemplate}
227
+ * @param variables Custom variables to resolve the template.
228
+ */
229
+ setContentTemplate(contentSid, contentVariables = []) {
230
+ this.message.contentSid = contentSid;
231
+ this.message.contentVariables = contentVariables;
232
+ return this;
233
+ }
202
234
  /**
203
235
  * Adds media to the message.
204
236
  * @param payload Media to add.
@@ -256,13 +288,52 @@ class MessageBuilder {
256
288
  buildAndSend() {
257
289
  return this.build().send();
258
290
  }
259
- getPayloadContentType(payload) {
260
- if (typeof FormData !== "undefined" && payload instanceof FormData) {
261
- return payload.get("Content-Type");
262
- }
263
- return payload.contentType;
264
- }
265
291
  }
292
+ tslib_es6.__decorate([
293
+ declarativeTypeValidator.validateTypes("string"),
294
+ tslib_es6.__metadata("design:type", Function),
295
+ tslib_es6.__metadata("design:paramtypes", [String]),
296
+ tslib_es6.__metadata("design:returntype", MessageBuilder)
297
+ ], MessageBuilder.prototype, "setBody", null);
298
+ tslib_es6.__decorate([
299
+ declarativeTypeValidator.validateTypes("string"),
300
+ tslib_es6.__metadata("design:type", Function),
301
+ tslib_es6.__metadata("design:paramtypes", [String]),
302
+ tslib_es6.__metadata("design:returntype", MessageBuilder)
303
+ ], MessageBuilder.prototype, "setSubject", null);
304
+ tslib_es6.__decorate([
305
+ declarativeTypeValidator.validateTypes(rules.json),
306
+ tslib_es6.__metadata("design:type", Function),
307
+ tslib_es6.__metadata("design:paramtypes", [Object]),
308
+ tslib_es6.__metadata("design:returntype", MessageBuilder)
309
+ ], MessageBuilder.prototype, "setAttributes", null);
310
+ tslib_es6.__decorate([
311
+ declarativeTypeValidator.validateTypes("string", [FormData, rules.sendMediaOptions]),
312
+ tslib_es6.__metadata("design:type", Function),
313
+ tslib_es6.__metadata("design:paramtypes", [String, Object]),
314
+ tslib_es6.__metadata("design:returntype", MessageBuilder)
315
+ ], MessageBuilder.prototype, "setEmailBody", null);
316
+ tslib_es6.__decorate([
317
+ declarativeTypeValidator.validateTypes("string", [FormData, rules.sendMediaOptions]),
318
+ tslib_es6.__metadata("design:type", Function),
319
+ tslib_es6.__metadata("design:paramtypes", [String, Object]),
320
+ tslib_es6.__metadata("design:returntype", MessageBuilder)
321
+ ], MessageBuilder.prototype, "setEmailHistory", null);
322
+ tslib_es6.__decorate([
323
+ declarativeTypeValidator.validateTypes("string", [
324
+ declarativeTypeValidator.array("content variables", contentTemplate.ContentTemplateVariable),
325
+ "undefined",
326
+ ]),
327
+ tslib_es6.__metadata("design:type", Function),
328
+ tslib_es6.__metadata("design:paramtypes", [String, Array]),
329
+ tslib_es6.__metadata("design:returntype", MessageBuilder)
330
+ ], MessageBuilder.prototype, "setContentTemplate", null);
331
+ tslib_es6.__decorate([
332
+ declarativeTypeValidator.validateTypes([FormData, rules.sendMediaOptions]),
333
+ tslib_es6.__metadata("design:type", Function),
334
+ tslib_es6.__metadata("design:paramtypes", [Object]),
335
+ tslib_es6.__metadata("design:returntype", MessageBuilder)
336
+ ], MessageBuilder.prototype, "addMedia", null);
266
337
 
267
338
  exports.MessageBuilder = MessageBuilder;
268
339
  //# sourceMappingURL=message-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-builder.js","sources":["../src/message-builder.ts"],"sourcesContent":["import { CancellablePromise } from \"@twilio/mcs-client\";\nimport { ConversationLimits } from \"./interfaces/conversation-limits\";\nimport { SendMediaOptions } from \"./conversation\";\nimport { UnsentMessage } from \"./unsent-message\";\nimport { JSONValue } from \"./types\";\nimport { Messages } from \"./data/messages\";\n\n/**\n * Message builder. Allows the message to be built and sent via method chaining.\n *\n * Example:\n *\n * ```ts\n * await testConversation.prepareMessage()\n * .setBody('Hello!')\n * .setAttributes({foo: 'bar'})\n * .addMedia(media1)\n * .addMedia(media2)\n * .build()\n * .send();\n * ```\n */\nclass MessageBuilder {\n private readonly message: UnsentMessage;\n private emailBodies: Map<string, FormData | SendMediaOptions>;\n private emailHistories: Map<string, FormData | SendMediaOptions>;\n\n /**\n * @internal\n */\n constructor(\n private readonly limits: ConversationLimits,\n messagesEntity: Messages\n ) {\n this.message = new UnsentMessage(messagesEntity);\n this.emailBodies = new Map<string, FormData | SendMediaOptions>();\n this.emailHistories = new Map<string, FormData | SendMediaOptions>();\n }\n\n /**\n * Sets the message body.\n * @param text Contents of the body.\n */\n setBody(text: string): MessageBuilder {\n this.message.text = text;\n return this;\n }\n\n /**\n * Sets the message subject.\n * @param subject Contents of the subject.\n */\n setSubject(subject: string): MessageBuilder {\n this.message.emailOptions.subject = subject;\n return this;\n }\n\n /**\n * Sets the message attributes.\n * @param attributes Message attributes.\n */\n setAttributes(attributes: JSONValue): MessageBuilder {\n this.message.attributes = attributes;\n return this;\n }\n\n /**\n * Set the email body with a given content type.\n * @param contentType Format of the body to set (text/plain or text/html).\n * @param body Body payload in the selected format.\n */\n setEmailBody(\n contentType: string,\n body: FormData | SendMediaOptions\n ): MessageBuilder {\n this.emailBodies.set(contentType, body);\n return this;\n }\n\n /**\n * Set the email history with a given content type.\n * @param contentType Format of the history to set (text/plain or text/html).\n * @param history History payload in the selected format.\n */\n setEmailHistory(\n contentType: string,\n history: FormData | SendMediaOptions\n ): MessageBuilder {\n this.emailHistories.set(contentType, history);\n return this;\n }\n\n /**\n * Adds media to the message.\n * @param payload Media to add.\n */\n addMedia(payload: FormData | SendMediaOptions): MessageBuilder {\n if (typeof FormData === \"undefined\" && payload instanceof FormData) {\n throw new Error(\"Could not add FormData content whilst not in a browser\");\n }\n if (!(payload instanceof FormData)) {\n const mediaOptions = payload as SendMediaOptions;\n if (!mediaOptions.contentType || !mediaOptions.media) {\n throw new Error(\n \"Media content in SendMediaOptions must contain non-empty contentType and media\"\n );\n }\n }\n this.message.mediaContent.push([\"media\", payload]);\n return this;\n }\n\n /**\n * Builds the message, making it ready to be sent.\n */\n build(): UnsentMessage {\n this.emailBodies.forEach((_, key) => {\n if (!this.limits.emailBodiesAllowedContentTypes.includes(key)) {\n throw new Error(`Unsupported email body content type ${key}`);\n }\n });\n this.emailHistories.forEach((_, key) => {\n if (!this.limits.emailHistoriesAllowedContentTypes.includes(key)) {\n throw new Error(`Unsupported email history content type ${key}`);\n }\n });\n if (\n this.emailBodies.size > this.limits.emailBodiesAllowedContentTypes.length\n ) {\n throw new Error(\n `Too many email bodies attached to the message (${this.emailBodies.size} > ${this.limits.emailBodiesAllowedContentTypes.length})`\n );\n }\n if (\n this.emailHistories.size >\n this.limits.emailHistoriesAllowedContentTypes.length\n ) {\n throw new Error(\n `Too many email histories attached to the message (${this.emailHistories.size} > ${this.limits.emailHistoriesAllowedContentTypes.length})`\n );\n }\n\n if (\n this.message.mediaContent.length > this.limits.mediaAttachmentsCountLimit\n ) {\n throw new Error(\n `Too many media attachments in the message (${this.message.mediaContent.length} > ${this.limits.mediaAttachmentsCountLimit})`\n );\n }\n\n // @todo we don't know the sizes of the attachments in FormData\n // @todo insertion below makes build() method non-repeatable - probably move to UnsentMessage.send() or even sendV2()?\n\n this.emailBodies.forEach((body) => {\n this.message.mediaContent.push([\"body\", body]);\n });\n\n this.emailHistories.forEach((history) => {\n this.message.mediaContent.push([\"history\", history]);\n });\n\n return this.message;\n }\n\n /**\n * Prepares a message and sends it to the conversation.\n */\n buildAndSend(): CancellablePromise<number | null> {\n return this.build().send();\n }\n\n private getPayloadContentType(\n payload: FormData | SendMediaOptions\n ): string | null {\n if (typeof FormData !== \"undefined\" && payload instanceof FormData) {\n return payload.get(\"Content-Type\") as string;\n }\n return (payload as SendMediaOptions).contentType;\n }\n}\n\nexport { MessageBuilder };\n"],"names":["UnsentMessage"],"mappings":"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"}
1
+ {"version":3,"file":"message-builder.js","sources":["../src/message-builder.ts"],"sourcesContent":["import { CancellablePromise } from \"@twilio/mcs-client\";\nimport { ConversationLimits } from \"./interfaces/conversation-limits\";\nimport { SendMediaOptions } from \"./conversation\";\nimport { UnsentMessage } from \"./unsent-message\";\nimport { JSONValue } from \"@twilio/shared\";\nimport { Messages } from \"./data/messages\";\nimport { ContentTemplateVariable } from \"./content-template\";\nimport { array, validateTypes } from \"@twilio/declarative-type-validator\";\nimport { json, sendMediaOptions } from \"./interfaces/rules\";\n\n/**\n * Message builder. Allows the message to be built and sent via method chaining.\n *\n * Example:\n *\n * ```ts\n * await testConversation.prepareMessage()\n * .setBody('Hello!')\n * .setAttributes({foo: 'bar'})\n * .addMedia(media1)\n * .addMedia(media2)\n * .build()\n * .send();\n * ```\n */\nclass MessageBuilder {\n private readonly message: UnsentMessage;\n private emailBodies: Map<string, FormData | SendMediaOptions>;\n private emailHistories: Map<string, FormData | SendMediaOptions>;\n\n /**\n * @internal\n */\n constructor(\n private readonly limits: ConversationLimits,\n messagesEntity: Messages\n ) {\n this.message = new UnsentMessage(messagesEntity);\n this.emailBodies = new Map<string, FormData | SendMediaOptions>();\n this.emailHistories = new Map<string, FormData | SendMediaOptions>();\n }\n\n /**\n * Sets the message body.\n * @param text Contents of the body.\n */\n @validateTypes(\"string\")\n setBody(text: string): MessageBuilder {\n this.message.text = text;\n return this;\n }\n\n /**\n * Sets the message subject.\n * @param subject Contents of the subject.\n */\n @validateTypes(\"string\")\n setSubject(subject: string): MessageBuilder {\n this.message.emailOptions.subject = subject;\n return this;\n }\n\n /**\n * Sets the message attributes.\n * @param attributes Message attributes.\n */\n @validateTypes(json)\n setAttributes(attributes: JSONValue): MessageBuilder {\n this.message.attributes = attributes;\n return this;\n }\n\n /**\n * Set the email body with a given content type.\n * @param contentType Format of the body to set (text/plain or text/html).\n * @param body Body payload in the selected format.\n */\n @validateTypes(\"string\", [FormData, sendMediaOptions])\n setEmailBody(\n contentType: string,\n body: FormData | SendMediaOptions\n ): MessageBuilder {\n this.emailBodies.set(contentType, body);\n return this;\n }\n\n /**\n * Set the email history with a given content type.\n * @param contentType Format of the history to set (text/plain or text/html).\n * @param history History payload in the selected format.\n */\n @validateTypes(\"string\", [FormData, sendMediaOptions])\n setEmailHistory(\n contentType: string,\n history: FormData | SendMediaOptions\n ): MessageBuilder {\n this.emailHistories.set(contentType, history);\n return this;\n }\n\n /**\n * Adds {@link ContentTemplate} SID for the message alongside optional\n * variables. When no variables provided, the default values will be used.\n *\n * Adding the content SID converts the message to a rich message. In this\n * case, other fields are ignored and the message is sent using the content\n * from the the {@link ContentTemplate}.\n *\n * Use {@link Client.getContentTemplates} to request all available\n * {@link ContentTemplate}s.\n *\n * @param contentSid SID of the {@link ContentTemplate}\n * @param variables Custom variables to resolve the template.\n */\n @validateTypes(\"string\", [\n array(\"content variables\", ContentTemplateVariable),\n \"undefined\",\n ])\n setContentTemplate(\n contentSid: string,\n contentVariables: ContentTemplateVariable[] = []\n ): MessageBuilder {\n this.message.contentSid = contentSid;\n this.message.contentVariables = contentVariables;\n return this;\n }\n\n /**\n * Adds media to the message.\n * @param payload Media to add.\n */\n @validateTypes([FormData, sendMediaOptions])\n addMedia(payload: FormData | SendMediaOptions): MessageBuilder {\n if (typeof FormData === \"undefined\" && payload instanceof FormData) {\n throw new Error(\"Could not add FormData content whilst not in a browser\");\n }\n if (!(payload instanceof FormData)) {\n const mediaOptions = payload as SendMediaOptions;\n if (!mediaOptions.contentType || !mediaOptions.media) {\n throw new Error(\n \"Media content in SendMediaOptions must contain non-empty contentType and media\"\n );\n }\n }\n this.message.mediaContent.push([\"media\", payload]);\n return this;\n }\n\n /**\n * Builds the message, making it ready to be sent.\n */\n build(): UnsentMessage {\n this.emailBodies.forEach((_, key) => {\n if (!this.limits.emailBodiesAllowedContentTypes.includes(key)) {\n throw new Error(`Unsupported email body content type ${key}`);\n }\n });\n this.emailHistories.forEach((_, key) => {\n if (!this.limits.emailHistoriesAllowedContentTypes.includes(key)) {\n throw new Error(`Unsupported email history content type ${key}`);\n }\n });\n if (\n this.emailBodies.size > this.limits.emailBodiesAllowedContentTypes.length\n ) {\n throw new Error(\n `Too many email bodies attached to the message (${this.emailBodies.size} > ${this.limits.emailBodiesAllowedContentTypes.length})`\n );\n }\n if (\n this.emailHistories.size >\n this.limits.emailHistoriesAllowedContentTypes.length\n ) {\n throw new Error(\n `Too many email histories attached to the message (${this.emailHistories.size} > ${this.limits.emailHistoriesAllowedContentTypes.length})`\n );\n }\n\n if (\n this.message.mediaContent.length > this.limits.mediaAttachmentsCountLimit\n ) {\n throw new Error(\n `Too many media attachments in the message (${this.message.mediaContent.length} > ${this.limits.mediaAttachmentsCountLimit})`\n );\n }\n\n // @todo we don't know the sizes of the attachments in FormData\n // @todo insertion below makes build() method non-repeatable - probably move to UnsentMessage.send() or even sendV2()?\n\n this.emailBodies.forEach((body) => {\n this.message.mediaContent.push([\"body\", body]);\n });\n\n this.emailHistories.forEach((history) => {\n this.message.mediaContent.push([\"history\", history]);\n });\n\n return this.message;\n }\n\n /**\n * Prepares a message and sends it to the conversation.\n */\n buildAndSend(): CancellablePromise<number | null> {\n return this.build().send();\n }\n}\n\nexport { MessageBuilder };\n"],"names":["UnsentMessage","__decorate","validateTypes","json","sendMediaOptions","array","ContentTemplateVariable"],"mappings":"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"}