k2-im 0.1.57 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. package/README.md +3 -1
  2. package/dist/browser.d.ts +1 -1
  3. package/dist/browser.js +1 -1
  4. package/dist/chat-kit-pinia.d.ts +227 -170
  5. package/dist/chat-kit-pinia.js +1 -1
  6. package/dist/chat-kit-vue.d.ts +64 -44
  7. package/dist/chat-kit-vue.js +1 -1
  8. package/dist/chat-kit.d.ts +244 -173
  9. package/dist/chat-kit.js +1 -1
  10. package/dist/crypto.worker.js +17 -25
  11. package/dist/i18n.d.ts +61 -41
  12. package/dist/i18n.js +1 -1
  13. package/dist/index.d.ts +259 -188
  14. package/dist/index.js +1 -1
  15. package/dist/modules/api-protocol-client/src/bi-feedback.js +1 -0
  16. package/dist/modules/api-protocol-client/src/browser.js +1 -0
  17. package/dist/modules/api-protocol-client/src/client.js +1 -0
  18. package/dist/modules/api-protocol-client/src/config.js +1 -0
  19. package/dist/modules/api-protocol-client/src/constants.js +1 -0
  20. package/dist/modules/api-protocol-client/src/json.js +1 -0
  21. package/dist/modules/api-protocol-client/src/nonce.js +1 -0
  22. package/dist/modules/api-protocol-client/src/transports/axios.js +1 -0
  23. package/dist/modules/api-protocol-client/src/utils.js +1 -0
  24. package/dist/modules/crypto/browser.js +1 -0
  25. package/dist/modules/crypto/driver.js +1 -0
  26. package/dist/modules/crypto/vendor/crypto/index_bg.js +1 -0
  27. package/dist/modules/im-browser/src/crypto/channel-key-service.js +1 -0
  28. package/dist/modules/im-browser/src/crypto/collect-tea.js +1 -0
  29. package/dist/modules/im-browser/src/crypto/crypto-task-executor.js +1 -0
  30. package/dist/modules/im-browser/src/crypto/crypto-worker-factory.js +1 -0
  31. package/dist/modules/im-browser/src/crypto/crypto-worker-protocol.js +1 -0
  32. package/dist/modules/im-browser/src/crypto/encrypt-key-service.js +1 -0
  33. package/dist/modules/im-browser/src/crypto/group-key-service.js +1 -0
  34. package/dist/modules/im-browser/src/crypto/peer-public-key-service.js +1 -0
  35. package/dist/modules/im-browser/src/crypto/rsa-private-key.js +1 -0
  36. package/dist/modules/im-browser/src/crypto/rsa-tea-crypto-adapter.js +1 -0
  37. package/dist/modules/im-browser/src/crypto/stale-key-refresh.js +1 -0
  38. package/dist/modules/im-browser/src/crypto/tea.js +1 -0
  39. package/dist/modules/im-browser/src/crypto/wait-for-key-signal.js +1 -0
  40. package/dist/modules/im-browser/src/http/application-http-adapters.js +1 -0
  41. package/dist/modules/im-browser/src/http/channel-http-adapter.js +1 -0
  42. package/dist/modules/im-browser/src/http/channel-join-application-http-adapter.js +1 -0
  43. package/dist/modules/im-browser/src/http/channel-member-http-adapter.js +1 -0
  44. package/dist/modules/im-browser/src/http/channel-mention-member-http-adapter.js +1 -0
  45. package/dist/modules/im-browser/src/http/cm-http-adapter.js +1 -0
  46. package/dist/modules/im-browser/src/http/directory-http-adapter.js +1 -0
  47. package/dist/modules/im-browser/src/http/expression-http-adapter.js +1 -0
  48. package/dist/modules/im-browser/src/http/lazy-api-protocol-client.js +1 -0
  49. package/dist/modules/im-browser/src/http/profile-http-adapter.js +1 -0
  50. package/dist/modules/im-browser/src/http/requests/applications.js +1 -0
  51. package/dist/modules/im-browser/src/http/requests/bind-robot-conversation.js +1 -0
  52. package/dist/modules/im-browser/src/http/requests/board-pinned-message-validation.js +1 -0
  53. package/dist/modules/im-browser/src/http/requests/channel-join-applications.js +1 -0
  54. package/dist/modules/im-browser/src/http/requests/channel-management.js +1 -0
  55. package/dist/modules/im-browser/src/http/requests/channel-members.js +1 -0
  56. package/dist/modules/im-browser/src/http/requests/channel-mention-members.js +1 -0
  57. package/dist/modules/im-browser/src/http/requests/channel-message-context.js +1 -0
  58. package/dist/modules/im-browser/src/http/requests/channel-mini-program-rel.js +1 -0
  59. package/dist/modules/im-browser/src/http/requests/channel-profile.js +1 -0
  60. package/dist/modules/im-browser/src/http/requests/channel-read-index.js +1 -0
  61. package/dist/modules/im-browser/src/http/requests/contact-blocklist.js +1 -0
  62. package/dist/modules/im-browser/src/http/requests/contact-friendship.js +1 -0
  63. package/dist/modules/im-browser/src/http/requests/contact-report.js +1 -0
  64. package/dist/modules/im-browser/src/http/requests/core-json-request.js +1 -0
  65. package/dist/modules/im-browser/src/http/requests/create-channel.js +1 -0
  66. package/dist/modules/im-browser/src/http/requests/create-face-to-face-group.js +1 -0
  67. package/dist/modules/im-browser/src/http/requests/create-group.js +1 -0
  68. package/dist/modules/im-browser/src/http/requests/customer-service-profile.js +1 -0
  69. package/dist/modules/im-browser/src/http/requests/get-board-pinned-message.js +1 -0
  70. package/dist/modules/im-browser/src/http/requests/get-channel-board-pinned-message.js +1 -0
  71. package/dist/modules/im-browser/src/http/requests/get-channel-secret-key.js +1 -0
  72. package/dist/modules/im-browser/src/http/requests/get-conversation-background-presets.js +1 -0
  73. package/dist/modules/im-browser/src/http/requests/get-group-encrypt-info.js +1 -0
  74. package/dist/modules/im-browser/src/http/requests/get-group-info.js +1 -0
  75. package/dist/modules/im-browser/src/http/requests/get-group-member-list.js +1 -0
  76. package/dist/modules/im-browser/src/http/requests/get-user-encrypt-info.js +1 -0
  77. package/dist/modules/im-browser/src/http/requests/get-user-info-friend.js +1 -0
  78. package/dist/modules/im-browser/src/http/requests/get-user-info-other.js +1 -0
  79. package/dist/modules/im-browser/src/http/requests/group-management.js +1 -0
  80. package/dist/modules/im-browser/src/http/requests/mark-group-read-all.js +1 -0
  81. package/dist/modules/im-browser/src/http/requests/membership-join.js +1 -0
  82. package/dist/modules/im-browser/src/http/requests/pin-board-message.js +1 -0
  83. package/dist/modules/im-browser/src/http/requests/pin-channel-board-message.js +1 -0
  84. package/dist/modules/im-browser/src/http/requests/pull-messages-by-id.js +1 -0
  85. package/dist/modules/im-browser/src/http/requests/pull-offline-channel.js +1 -0
  86. package/dist/modules/im-browser/src/http/requests/pull-offline-chat.js +1 -0
  87. package/dist/modules/im-browser/src/http/requests/pull-offline-group.js +1 -0
  88. package/dist/modules/im-browser/src/http/requests/pull-offline-signal.js +1 -0
  89. package/dist/modules/im-browser/src/http/requests/robot-menu-reply.js +1 -0
  90. package/dist/modules/im-browser/src/http/requests/robot-profile.js +1 -0
  91. package/dist/modules/im-browser/src/http/requests/search-robots.js +1 -0
  92. package/dist/modules/im-browser/src/http/requests/set-conversation-undisturb.js +1 -0
  93. package/dist/modules/im-browser/src/http/requests/set-friend-remark.js +1 -0
  94. package/dist/modules/im-browser/src/http/requests/set-group-nickname.js +1 -0
  95. package/dist/modules/im-browser/src/http/requests/unpin-board-message.js +1 -0
  96. package/dist/modules/im-browser/src/http/requests/unpin-channel-board-message.js +1 -0
  97. package/dist/modules/im-browser/src/http/requests/update-group-info.js +1 -0
  98. package/dist/modules/im-browser/src/http/session-favorite-http-adapter.js +1 -0
  99. package/dist/modules/im-browser/src/media/file-md5.js +1 -0
  100. package/dist/modules/im-browser/src/media/image-clipboard.js +1 -0
  101. package/dist/modules/im-browser/src/media/image-header-dimensions.js +1 -0
  102. package/dist/modules/im-browser/src/media/media-downloader.js +1 -0
  103. package/dist/modules/im-browser/src/media/media-preview-adapter.js +1 -0
  104. package/dist/modules/im-browser/src/media/media-preview-preparation-executor.js +1 -0
  105. package/dist/modules/im-browser/src/media/media-request-limiter.js +1 -0
  106. package/dist/modules/im-browser/src/media/media-transfer-adapter.js +1 -0
  107. package/dist/modules/im-browser/src/media/media-transfer-errors.js +1 -0
  108. package/dist/modules/im-browser/src/media/media-transfer-policy.js +1 -0
  109. package/dist/modules/im-browser/src/media/media-upload-credentials.js +1 -0
  110. package/dist/modules/im-browser/src/media/media-upload-recovery-codec.js +1 -0
  111. package/dist/modules/im-browser/src/media/media-upload-recovery-store.js +1 -0
  112. package/dist/modules/im-browser/src/media/media-upload-source-fingerprint.js +1 -0
  113. package/dist/modules/im-browser/src/media/s3-multipart-uploader.js +1 -0
  114. package/dist/modules/im-browser/src/media/xhr-upload-idle-timeout.js +1 -0
  115. package/dist/modules/im-browser/src/network/browser-connection-ownership.js +1 -0
  116. package/dist/modules/im-browser/src/network/network-monitor.js +1 -0
  117. package/dist/modules/im-browser/src/scheduling/yield-to-browser.js +1 -0
  118. package/dist/modules/im-browser/src/storage/indexed-db-storage-adapter.js +1 -0
  119. package/dist/modules/im-browser/src/transport/ws-transport.js +1 -0
  120. package/dist/modules/im-browser/src/voice/voice-amplitude.js +1 -0
  121. package/dist/modules/im-browser/src/voice/voice-capabilities.js +1 -0
  122. package/dist/modules/im-browser/src/voice/voice-codec.js +1 -0
  123. package/dist/modules/im-browser/src/voice/voice-errors.js +1 -0
  124. package/dist/modules/im-browser/src/voice/voice-playback.js +1 -0
  125. package/dist/modules/im-browser/src/voice/voice-player.js +1 -0
  126. package/dist/modules/im-browser/src/voice/voice-recorder.js +1 -0
  127. package/dist/modules/im-chat-kit/src/i18n/use-im-text.js +1 -0
  128. package/dist/modules/im-chat-kit/src/pinia/applications.store.js +1 -0
  129. package/dist/modules/im-chat-kit/src/pinia/capabilities.store.js +1 -0
  130. package/dist/modules/im-chat-kit/src/pinia/composer.store.js +1 -0
  131. package/dist/modules/im-chat-kit/src/pinia/context.js +1 -0
  132. package/dist/modules/im-chat-kit/src/pinia/conversation-activation.js +1 -0
  133. package/dist/modules/im-chat-kit/src/pinia/conversation-deletion.js +1 -0
  134. package/dist/modules/im-chat-kit/src/pinia/conversation-list.store.js +1 -0
  135. package/dist/modules/im-chat-kit/src/pinia/expression.store.js +1 -0
  136. package/dist/modules/im-chat-kit/src/pinia/history-return-after-send.js +1 -0
  137. package/dist/modules/im-chat-kit/src/pinia/media-transfer-estimate.js +1 -0
  138. package/dist/modules/im-chat-kit/src/pinia/media.store.js +1 -0
  139. package/dist/modules/im-chat-kit/src/pinia/message-operations.store.js +1 -0
  140. package/dist/modules/im-chat-kit/src/pinia/profile-directory.store.js +1 -0
  141. package/dist/modules/im-chat-kit/src/pinia/quoted-message.store.js +1 -0
  142. package/dist/modules/im-chat-kit/src/pinia/reaction.store.js +1 -0
  143. package/dist/modules/im-chat-kit/src/pinia/search-senders.js +1 -0
  144. package/dist/modules/im-chat-kit/src/pinia/search.store.js +1 -0
  145. package/dist/modules/im-chat-kit/src/pinia/session-favorites.store.js +1 -0
  146. package/dist/modules/im-chat-kit/src/pinia/session.store.js +1 -0
  147. package/dist/modules/im-chat-kit/src/pinia/thread-paging.store.js +1 -0
  148. package/dist/modules/im-chat-kit/src/pinia/thread-return-to-latest.js +1 -0
  149. package/dist/modules/im-chat-kit/src/pinia/thread.store.js +1 -0
  150. package/dist/modules/im-chat-kit/src/presentation/channel-mini-program-open.js +1 -0
  151. package/dist/modules/im-chat-kit/src/presentation/channel-mini-program-rels.js +1 -0
  152. package/dist/modules/im-chat-kit/src/presentation/conversation-list.js +1 -0
  153. package/dist/modules/im-chat-kit/src/presentation/conversation-unread.js +1 -0
  154. package/dist/modules/im-chat-kit/src/presentation/delayed-loading-indicator.js +1 -0
  155. package/dist/modules/im-chat-kit/src/presentation/media-source-priority.js +1 -0
  156. package/dist/modules/im-chat-kit/src/presentation/message-notification.js +1 -0
  157. package/dist/modules/im-chat-kit/src/presentation/message-search.js +1 -0
  158. package/dist/modules/im-chat-kit/src/presentation/mini-program-game-preview.js +1 -0
  159. package/dist/modules/im-chat-kit/src/presentation/mini-program-open-url.js +1 -0
  160. package/dist/modules/im-chat-kit/src/runtime/chat-runtime.js +1 -0
  161. package/dist/modules/im-chat-kit/src/runtime/conversation-prefetch-controller.js +1 -0
  162. package/dist/modules/im-chat-kit/src/runtime/media-object-url-registry.js +1 -0
  163. package/dist/modules/im-chat-kit/src/runtime/runtime-operation.js +1 -0
  164. package/dist/modules/im-chat-kit/src/services/capabilities.js +1 -0
  165. package/dist/modules/im-chat-kit/src/services/channel-member-management.service.js +1 -0
  166. package/dist/modules/im-chat-kit/src/services/channel-profile-management.service.js +1 -0
  167. package/dist/modules/im-chat-kit/src/services/channel-send-restriction.js +1 -0
  168. package/dist/modules/im-chat-kit/src/services/direct-contact-management.service.js +1 -0
  169. package/dist/modules/im-chat-kit/src/services/forward.service.js +1 -0
  170. package/dist/modules/im-chat-kit/src/services/group-member-management.service.js +1 -0
  171. package/dist/modules/im-chat-kit/src/services/group-profile-management.service.js +1 -0
  172. package/dist/modules/im-chat-kit/src/services/image-copy.service.js +1 -0
  173. package/dist/modules/im-chat-kit/src/services/media-file-classification.js +1 -0
  174. package/dist/modules/im-chat-kit/src/services/media.service.js +1 -0
  175. package/dist/modules/im-chat-kit/src/services/message.service.js +1 -0
  176. package/dist/modules/im-chat-kit/src/services/pinned-message-rules.js +1 -0
  177. package/dist/modules/im-chat-kit/src/services/pinned-message.service.js +1 -0
  178. package/dist/modules/im-chat-kit/src/services/profile-access.service.js +1 -0
  179. package/dist/modules/im-chat-kit/src/services/profile-directory.service.js +1 -0
  180. package/dist/modules/im-chat-kit/src/services/profile-display.js +1 -0
  181. package/dist/modules/im-chat-kit/src/services/profile.service.js +1 -0
  182. package/dist/modules/im-chat-kit/src/services/read.service.js +1 -0
  183. package/dist/modules/im-chat-kit/src/services/robot-sender-profile.js +1 -0
  184. package/dist/modules/im-chat-kit/src/services/search.service.js +1 -0
  185. package/dist/modules/im-chat-kit/src/services/send.service.js +1 -0
  186. package/dist/modules/im-chat-kit/src/thread/active-date.js +1 -0
  187. package/dist/modules/im-chat-kit/src/thread/create-thread-items.js +1 -0
  188. package/dist/modules/im-chat-kit/src/thread/message-locate-result.js +1 -0
  189. package/dist/modules/im-chat-kit/src/thread/new-message-badge.js +1 -0
  190. package/dist/modules/im-chat-kit/src/thread/resolve-message-body-kind.js +1 -0
  191. package/dist/modules/im-chat-kit/src/thread/resolve-quoted-message-presentation.js +1 -0
  192. package/dist/modules/im-chat-kit/src/thread/viewport-rules.js +1 -0
  193. package/dist/modules/im-chat-kit/src/utils/emoji/emoji-legacy-catalog.json.js +1 -0
  194. package/dist/modules/im-chat-kit/src/utils/emoji/index.js +1 -0
  195. package/dist/modules/im-chat-kit/src/utils/emoji/recent.js +1 -0
  196. package/dist/modules/im-chat-kit/src/utils/emoji/unicode-emoji-catalog.json.js +1 -0
  197. package/dist/modules/im-chat-kit/src/utils/emoji/unicode.js +1 -0
  198. package/dist/modules/im-chat-kit/src/utils/highlight.js +1 -0
  199. package/dist/modules/im-chat-kit/src/utils/link.js +1 -0
  200. package/dist/modules/im-chat-kit/src/utils/media-batch.js +1 -0
  201. package/dist/modules/im-chat-kit/src/utils/media-dimensions.js +1 -0
  202. package/dist/modules/im-chat-kit/src/utils/media-format.js +1 -0
  203. package/dist/modules/im-chat-kit/src/utils/media-transfer-presentation.js +1 -0
  204. package/dist/modules/im-chat-kit/src/utils/time-display.js +1 -0
  205. package/dist/modules/im-chat-kit/src/utils/waveform.js +1 -0
  206. package/dist/modules/im-chat-kit/src/vue/thread/ImThreadBodySwitch.js +1 -0
  207. package/dist/modules/im-chat-kit/src/vue/thread/ImThreadItems.js +1 -0
  208. package/dist/modules/im-chat-kit/src/vue/thread/ImThreadSurface.js +1 -0
  209. package/dist/modules/im-chat-kit/src/vue/thread/ImThreadViewport.js +1 -0
  210. package/dist/modules/im-chat-kit/src/vue/thread/message-renderer-registry.js +1 -0
  211. package/dist/modules/im-chat-kit/src/vue/thread/thread-idle-task.js +1 -0
  212. package/dist/modules/im-chat-kit/src/vue/thread/thread-layout-measurements.js +1 -0
  213. package/dist/modules/im-chat-kit/src/vue/thread/thread-read-actions-context.js +1 -0
  214. package/dist/modules/im-chat-kit/src/vue/thread/thread-surface-context.js +1 -0
  215. package/dist/modules/im-chat-kit/src/vue/thread/thread-viewport-context.js +1 -0
  216. package/dist/modules/im-chat-kit/src/vue/thread/thread-visibility-target-group.js +1 -0
  217. package/dist/modules/im-chat-kit/src/vue/thread/thread-visibility-targets.js +1 -0
  218. package/dist/modules/im-chat-kit/src/vue/thread/use-im-thread-layout-measurement.js +1 -0
  219. package/dist/modules/im-core/src/abort.js +1 -0
  220. package/dist/modules/im-core/src/cache-namespace.js +1 -0
  221. package/dist/modules/im-core/src/connection/backoff.js +1 -0
  222. package/dist/modules/im-core/src/connection/connection-manager.js +1 -0
  223. package/dist/modules/im-core/src/connection/heartbeat-manager.js +1 -0
  224. package/dist/modules/im-core/src/conversation-identity.js +1 -0
  225. package/dist/modules/im-core/src/diagnostics.js +1 -0
  226. package/dist/modules/im-core/src/event-emitter.js +1 -0
  227. package/dist/modules/im-core/src/login/login-handler.js +1 -0
  228. package/dist/modules/im-core/src/mapping/bot-sender.js +1 -0
  229. package/dist/modules/im-core/src/mapping/call-record-body.js +1 -0
  230. package/dist/modules/im-core/src/mapping/channel-message-mapper.js +1 -0
  231. package/dist/modules/im-core/src/mapping/channel-notify-mapper.js +1 -0
  232. package/dist/modules/im-core/src/mapping/channel-offline-mapper.js +1 -0
  233. package/dist/modules/im-core/src/mapping/channel-pinned-message-mapper.js +1 -0
  234. package/dist/modules/im-core/src/mapping/channel-read-position.js +1 -0
  235. package/dist/modules/im-core/src/mapping/contact-body.js +1 -0
  236. package/dist/modules/im-core/src/mapping/content-body.js +1 -0
  237. package/dist/modules/im-core/src/mapping/conversation.js +1 -0
  238. package/dist/modules/im-core/src/mapping/crypto-batch-preparation.js +1 -0
  239. package/dist/modules/im-core/src/mapping/customer-service-body.js +1 -0
  240. package/dist/modules/im-core/src/mapping/customer-service-message-mapper.js +1 -0
  241. package/dist/modules/im-core/src/mapping/decrypt-recovery.js +1 -0
  242. package/dist/modules/im-core/src/mapping/file-body.js +1 -0
  243. package/dist/modules/im-core/src/mapping/files-album-body.js +1 -0
  244. package/dist/modules/im-core/src/mapping/game-body.js +1 -0
  245. package/dist/modules/im-core/src/mapping/gift-body.js +1 -0
  246. package/dist/modules/im-core/src/mapping/group-message-mapper.js +1 -0
  247. package/dist/modules/im-core/src/mapping/group-notify-mapper.js +1 -0
  248. package/dist/modules/im-core/src/mapping/group-offline-mapper.js +1 -0
  249. package/dist/modules/im-core/src/mapping/image-body.js +1 -0
  250. package/dist/modules/im-core/src/mapping/live-room-body.js +1 -0
  251. package/dist/modules/im-core/src/mapping/media-album-body.js +1 -0
  252. package/dist/modules/im-core/src/mapping/merge.js +1 -0
  253. package/dist/modules/im-core/src/mapping/mes-chat-mapper.js +1 -0
  254. package/dist/modules/im-core/src/mapping/message-id.js +1 -0
  255. package/dist/modules/im-core/src/mapping/message-mapper.js +1 -0
  256. package/dist/modules/im-core/src/mapping/messages-by-id.js +1 -0
  257. package/dist/modules/im-core/src/mapping/mini-program-body.js +1 -0
  258. package/dist/modules/im-core/src/mapping/offline-mapper.js +1 -0
  259. package/dist/modules/im-core/src/mapping/pinned-message-mapper.js +1 -0
  260. package/dist/modules/im-core/src/mapping/profile-mapper.js +1 -0
  261. package/dist/modules/im-core/src/mapping/reaction-mapper.js +1 -0
  262. package/dist/modules/im-core/src/mapping/recall-mapper.js +1 -0
  263. package/dist/modules/im-core/src/mapping/red-packet-body.js +1 -0
  264. package/dist/modules/im-core/src/mapping/robot-body.js +1 -0
  265. package/dist/modules/im-core/src/mapping/robot-message-mapper.js +1 -0
  266. package/dist/modules/im-core/src/mapping/search-text.js +1 -0
  267. package/dist/modules/im-core/src/mapping/session-mapper.js +1 -0
  268. package/dist/modules/im-core/src/mapping/signal-offline-mapper.js +1 -0
  269. package/dist/modules/im-core/src/mapping/sort.js +1 -0
  270. package/dist/modules/im-core/src/mapping/sticker-body.js +1 -0
  271. package/dist/modules/im-core/src/mapping/stored-message.js +1 -0
  272. package/dist/modules/im-core/src/mapping/system-event-timeline-policy.js +1 -0
  273. package/dist/modules/im-core/src/mapping/text-segments.js +1 -0
  274. package/dist/modules/im-core/src/mapping/transfer-body.js +1 -0
  275. package/dist/modules/im-core/src/mapping/transfer-status.js +1 -0
  276. package/dist/modules/im-core/src/mapping/unread-divider.js +1 -0
  277. package/dist/modules/im-core/src/mapping/video-body.js +1 -0
  278. package/dist/modules/im-core/src/mapping/voice-body.js +1 -0
  279. package/dist/modules/im-core/src/message-flow/call/direct-call-manager.js +1 -0
  280. package/dist/modules/im-core/src/message-flow/call/direct-call-record.js +1 -0
  281. package/dist/modules/im-core/src/message-flow/call/direct-p2p-call.js +1 -0
  282. package/dist/modules/im-core/src/message-flow/call/group-call-manager.js +1 -0
  283. package/dist/modules/im-core/src/message-flow/call/group-call-record.js +1 -0
  284. package/dist/modules/im-core/src/message-flow/conversation-support.js +1 -0
  285. package/dist/modules/im-core/src/message-flow/edit/edit-frame.js +1 -0
  286. package/dist/modules/im-core/src/message-flow/edit/edit-manager.js +1 -0
  287. package/dist/modules/im-core/src/message-flow/edit/edit-receive-handlers.js +1 -0
  288. package/dist/modules/im-core/src/message-flow/edit/edit-strategy.js +1 -0
  289. package/dist/modules/im-core/src/message-flow/expression/expression-message.js +1 -0
  290. package/dist/modules/im-core/src/message-flow/forward/can-transmit.js +1 -0
  291. package/dist/modules/im-core/src/message-flow/forward/forward-content-spec.js +1 -0
  292. package/dist/modules/im-core/src/message-flow/forward/forward-messages.js +1 -0
  293. package/dist/modules/im-core/src/message-flow/game/game-message.js +1 -0
  294. package/dist/modules/im-core/src/message-flow/gift/gift-message.js +1 -0
  295. package/dist/modules/im-core/src/message-flow/live-room/live-room-message.js +1 -0
  296. package/dist/modules/im-core/src/message-flow/media/media-sender.js +1 -0
  297. package/dist/modules/im-core/src/message-flow/mini-program/mini-program-message.js +1 -0
  298. package/dist/modules/im-core/src/message-flow/reaction/can-react.js +1 -0
  299. package/dist/modules/im-core/src/message-flow/reaction/reaction-manager.js +1 -0
  300. package/dist/modules/im-core/src/message-flow/reaction/reaction-receive-handlers.js +1 -0
  301. package/dist/modules/im-core/src/message-flow/read/channel-read-receive-handlers.js +1 -0
  302. package/dist/modules/im-core/src/message-flow/read/channel-read-strategy.js +1 -0
  303. package/dist/modules/im-core/src/message-flow/read/customer-service-read-strategy.js +1 -0
  304. package/dist/modules/im-core/src/message-flow/read/direct-read-sync.js +1 -0
  305. package/dist/modules/im-core/src/message-flow/read/group-read-strategy.js +1 -0
  306. package/dist/modules/im-core/src/message-flow/read/read-strategy.js +1 -0
  307. package/dist/modules/im-core/src/message-flow/read/robot-read-strategy.js +1 -0
  308. package/dist/modules/im-core/src/message-flow/recall/channel-message-deletion-manager.js +1 -0
  309. package/dist/modules/im-core/src/message-flow/recall/recall-frame.js +1 -0
  310. package/dist/modules/im-core/src/message-flow/recall/recall-manager.js +1 -0
  311. package/dist/modules/im-core/src/message-flow/recall/recall-receive-handlers.js +1 -0
  312. package/dist/modules/im-core/src/message-flow/recall/recall-strategy.js +1 -0
  313. package/dist/modules/im-core/src/message-flow/receive/channel-application-receive-handlers.js +1 -0
  314. package/dist/modules/im-core/src/message-flow/receive/channel-notify-receive-handlers.js +1 -0
  315. package/dist/modules/im-core/src/message-flow/receive/channel-receive-handlers.js +1 -0
  316. package/dist/modules/im-core/src/message-flow/receive/command-handler-registry.js +1 -0
  317. package/dist/modules/im-core/src/message-flow/receive/contact-application-answer-receive-handlers.js +1 -0
  318. package/dist/modules/im-core/src/message-flow/receive/contact-application-receive-handlers.js +1 -0
  319. package/dist/modules/im-core/src/message-flow/receive/direct-receive-handlers.js +1 -0
  320. package/dist/modules/im-core/src/message-flow/receive/friend-action-receive-handlers.js +1 -0
  321. package/dist/modules/im-core/src/message-flow/receive/group-event-receive-handlers.js +1 -0
  322. package/dist/modules/im-core/src/message-flow/receive/group-receive-handlers.js +1 -0
  323. package/dist/modules/im-core/src/message-flow/receive/mes-chat-receive-handlers.js +1 -0
  324. package/dist/modules/im-core/src/message-flow/receive/robot-receive-handlers.js +1 -0
  325. package/dist/modules/im-core/src/message-flow/receive/session-favorite-receive-handlers.js +1 -0
  326. package/dist/modules/im-core/src/message-flow/receive/wallet-notify-receive-handlers.js +1 -0
  327. package/dist/modules/im-core/src/message-flow/send/channel-outgoing-frame.js +1 -0
  328. package/dist/modules/im-core/src/message-flow/send/channel-send-strategy.js +1 -0
  329. package/dist/modules/im-core/src/message-flow/send/direct-outgoing-frame.js +1 -0
  330. package/dist/modules/im-core/src/message-flow/send/direct-send-strategy.js +1 -0
  331. package/dist/modules/im-core/src/message-flow/send/group-outgoing-frame.js +1 -0
  332. package/dist/modules/im-core/src/message-flow/send/group-send-strategy.js +1 -0
  333. package/dist/modules/im-core/src/message-flow/send/robot-outgoing-frame.js +1 -0
  334. package/dist/modules/im-core/src/message-flow/send/robot-send-strategy.js +1 -0
  335. package/dist/modules/im-core/src/message-flow/send/send-strategy-registry.js +1 -0
  336. package/dist/modules/im-core/src/message-flow/transfer/transfer-message.js +1 -0
  337. package/dist/modules/im-core/src/outbox/outbox-manager.js +1 -0
  338. package/dist/modules/im-core/src/packet-router.js +1 -0
  339. package/dist/modules/im-core/src/ports/crypto-port.js +1 -0
  340. package/dist/modules/im-core/src/ports/crypto-task-executor.js +1 -0
  341. package/dist/modules/im-core/src/ports/http-port.js +1 -0
  342. package/dist/modules/im-core/src/ports/media-asset-cache-port.js +1 -0
  343. package/dist/modules/im-core/src/push/push-registration.js +1 -0
  344. package/dist/modules/im-core/src/read/read-reporter.js +1 -0
  345. package/dist/modules/im-core/src/request-tracker.js +1 -0
  346. package/dist/modules/im-core/src/session-favorite-album.js +1 -0
  347. package/dist/modules/im-core/src/session-favorite-files.js +1 -0
  348. package/dist/modules/im-core/src/state/channel-permissions.js +1 -0
  349. package/dist/modules/im-core/src/state/channel-restriction-coordinator.js +1 -0
  350. package/dist/modules/im-core/src/state/domain-state.js +1 -0
  351. package/dist/modules/im-core/src/state/draft-store.js +1 -0
  352. package/dist/modules/im-core/src/state/group-restriction-coordinator.js +1 -0
  353. package/dist/modules/im-core/src/state/local-message-window-read-error.js +1 -0
  354. package/dist/modules/im-core/src/state/message-reactions.js +1 -0
  355. package/dist/modules/im-core/src/state/message-store.js +1 -0
  356. package/dist/modules/im-core/src/state/message-window-store.js +1 -0
  357. package/dist/modules/im-core/src/state/pinned-message-coordinator.js +1 -0
  358. package/dist/modules/im-core/src/state/pinned-message-store.js +1 -0
  359. package/dist/modules/im-core/src/state/read-store.js +1 -0
  360. package/dist/modules/im-core/src/state/session-sort.js +1 -0
  361. package/dist/modules/im-core/src/state/session-store.js +1 -0
  362. package/dist/modules/im-core/src/sync/channel-sync-checkpoint.js +1 -0
  363. package/dist/modules/im-core/src/sync/sync-manager.js +1 -0
  364. package/dist/modules/im-i18n/src/catalog/en-US.js +1 -0
  365. package/dist/modules/im-i18n/src/catalog/index.js +1 -0
  366. package/dist/modules/im-i18n/src/catalog/th-TH.js +1 -0
  367. package/dist/modules/im-i18n/src/catalog/vi-VN.js +1 -0
  368. package/dist/modules/im-i18n/src/catalog/zh-CN.js +1 -0
  369. package/dist/modules/im-i18n/src/catalog/zh-TW.js +1 -0
  370. package/dist/modules/im-i18n/src/create-im-i18n.js +1 -0
  371. package/dist/modules/im-i18n/src/format/failure.js +1 -0
  372. package/dist/modules/im-i18n/src/format/last-message.js +1 -0
  373. package/dist/modules/im-i18n/src/format/media.js +1 -0
  374. package/dist/modules/im-i18n/src/format/mention.js +1 -0
  375. package/dist/modules/im-i18n/src/format/service-text.js +1 -0
  376. package/dist/modules/im-i18n/src/format/system-message.js +1 -0
  377. package/dist/modules/im-i18n/src/internal/duration.js +1 -0
  378. package/dist/modules/im-i18n/src/internal/interpolate.js +1 -0
  379. package/dist/modules/im-i18n/src/locale.js +1 -0
  380. package/dist/modules/im-protocol/src/board-pinned-message.js +1 -0
  381. package/dist/modules/im-protocol/src/frame-codec.js +1 -0
  382. package/dist/modules/im-protocol/src/protobuf/gen/channel_pb.js +1 -0
  383. package/dist/modules/im-protocol/src/protobuf/gen/group_pb.js +1 -0
  384. package/dist/modules/im-protocol/src/protobuf/gen/im.app.msg_pb.js +1 -0
  385. package/dist/modules/im-protocol/src/protobuf/gen/im.channel_pb.js +1 -0
  386. package/dist/modules/im-protocol/src/protobuf/gen/im.group_pb.js +1 -0
  387. package/dist/modules/im-protocol/src/protobuf/gen/im.login_pb.js +1 -0
  388. package/dist/modules/im-protocol/src/protobuf/gen/im.msg_pb.js +1 -0
  389. package/dist/modules/im-protocol/src/protobuf/gen/im.pub_pb.js +1 -0
  390. package/dist/modules/im-protocol/src/protobuf/gen/im.robot_pb.js +1 -0
  391. package/dist/modules/im-protocol/src/protobuf/gen/im.sig_pb.js +1 -0
  392. package/dist/modules/im-protocol/src/protobuf/gen/msg_pb.js +1 -0
  393. package/dist/modules/im-protocol/src/protobuf/registry.js +1 -0
  394. package/dist/modules/im-sdk/src/cache-prefix-migration.js +1 -0
  395. package/dist/modules/im-sdk/src/create-im-client.js +1 -0
  396. package/dist/modules/im-sdk/src/domains/channel.js +1 -0
  397. package/dist/modules/im-sdk/src/domains/contact.js +1 -0
  398. package/dist/modules/im-sdk/src/domains/conversation.js +1 -0
  399. package/dist/modules/im-sdk/src/domains/group.js +1 -0
  400. package/dist/modules/im-sdk/src/domains/media-byte-computation.js +1 -0
  401. package/dist/modules/im-sdk/src/domains/media.js +1 -0
  402. package/dist/modules/im-sdk/src/domains/message.js +1 -0
  403. package/dist/modules/im-sdk/src/domains/pinned-message-source.js +1 -0
  404. package/dist/modules/im-sdk/src/domains/pinned-message.js +1 -0
  405. package/dist/modules/im-sdk/src/domains/session.js +1 -0
  406. package/dist/modules/im-sdk/src/product/applications.js +1 -0
  407. package/dist/modules/im-sdk/src/product/calls.js +1 -0
  408. package/dist/modules/im-sdk/src/product/capabilities.js +1 -0
  409. package/dist/modules/im-sdk/src/product/channel-mention-candidates.js +1 -0
  410. package/dist/modules/im-sdk/src/product/conversation-background.js +1 -0
  411. package/dist/modules/im-sdk/src/product/conversation-entry-unread.js +1 -0
  412. package/dist/modules/im-sdk/src/product/conversation-handle.js +1 -0
  413. package/dist/modules/im-sdk/src/product/conversations.js +1 -0
  414. package/dist/modules/im-sdk/src/product/customer-service.js +1 -0
  415. package/dist/modules/im-sdk/src/product/diagnostic-memory-buffer.js +1 -0
  416. package/dist/modules/im-sdk/src/product/diagnostics.js +1 -0
  417. package/dist/modules/im-sdk/src/product/directory.js +1 -0
  418. package/dist/modules/im-sdk/src/product/draft.js +1 -0
  419. package/dist/modules/im-sdk/src/product/emoji-catalog.js +1 -0
  420. package/dist/modules/im-sdk/src/product/emoji-catalog.json.js +1 -0
  421. package/dist/modules/im-sdk/src/product/events.js +1 -0
  422. package/dist/modules/im-sdk/src/product/expressions.js +1 -0
  423. package/dist/modules/im-sdk/src/product/face-to-face-group.js +1 -0
  424. package/dist/modules/im-sdk/src/product/group-calls.js +1 -0
  425. package/dist/modules/im-sdk/src/product/image-format.js +1 -0
  426. package/dist/modules/im-sdk/src/product/local-data.js +1 -0
  427. package/dist/modules/im-sdk/src/product/media.js +1 -0
  428. package/dist/modules/im-sdk/src/product/mention.js +1 -0
  429. package/dist/modules/im-sdk/src/product/message.js +1 -0
  430. package/dist/modules/im-sdk/src/product/messages-by-id.js +1 -0
  431. package/dist/modules/im-sdk/src/product/outbox.js +1 -0
  432. package/dist/modules/im-sdk/src/product/profiles.js +1 -0
  433. package/dist/modules/im-sdk/src/product/resource-uploader.js +1 -0
  434. package/dist/modules/im-sdk/src/product/robots.js +1 -0
  435. package/dist/modules/im-sdk/src/product/search.js +1 -0
  436. package/dist/modules/im-sdk/src/product/session-favorites.js +1 -0
  437. package/dist/modules/im-sdk/src/product/settings.js +1 -0
  438. package/dist/modules/im-sdk/src/runtime/advanced-message-diagnostics.js +1 -0
  439. package/dist/modules/im-sdk/src/runtime/channel-read-summary-refresh.js +1 -0
  440. package/dist/modules/im-sdk/src/runtime/customer-service-legacy-recovery.js +1 -0
  441. package/dist/modules/im-sdk/src/runtime/decrypt-diagnostics.js +1 -0
  442. package/dist/modules/im-sdk/src/runtime/foreground-work-coordinator.js +1 -0
  443. package/dist/modules/im-sdk/src/runtime/group-history-page-boundary.js +1 -0
  444. package/dist/modules/im-sdk/src/runtime/key-prefetch.js +1 -0
  445. package/dist/modules/im-sdk/src/runtime/local-media-preview.js +1 -0
  446. package/dist/modules/im-sdk/src/runtime/media-cache-maintenance.js +1 -0
  447. package/dist/modules/im-sdk/src/runtime/media-upload-recovery.js +1 -0
  448. package/dist/modules/im-sdk/src/runtime/protobuf-wire-shape.js +1 -0
  449. package/dist/modules/im-sdk/src/runtime/receiving-activity.js +1 -0
  450. package/dist/modules/im-sdk/src/runtime/recent-history-fetcher.js +1 -0
  451. package/dist/modules/im-sdk/src/runtime/recent-history-prefetch.js +1 -0
  452. package/dist/modules/im-sdk/src/runtime/session-http-clients.js +1 -0
  453. package/dist/modules/im-sdk/src/runtime/session-runtime.js +1 -0
  454. package/dist/modules/im-sdk/src/runtime/signal-offline-poller.js +1 -0
  455. package/dist/request-crypto.js +1 -1
  456. package/dist/sdk.d.ts +170 -111
  457. package/dist/sdk.js +1 -1
  458. package/package.json +2 -2
  459. package/dist/browser-2MUNHRDS.js +0 -1
  460. package/dist/browser-RTCHWSQ2.js +0 -2
  461. package/dist/chunk-2OCWQHFJ.js +0 -2
  462. package/dist/chunk-46ARFR7U.js +0 -8
  463. package/dist/chunk-HQDLYL3K.js +0 -2
  464. package/dist/chunk-IC6HI33O.js +0 -1
  465. package/dist/chunk-IDECJJXC.js +0 -0
  466. package/dist/chunk-J3TLOAQI.js +0 -2
  467. package/dist/chunk-Q2DEFN53.js +0 -1
  468. package/dist/chunk-SXY56EVC.js +0 -0
  469. package/dist/chunk-WL3NFQ7Y.js +0 -1
  470. package/dist/chunk-WOT6VMZA.js +0 -1
  471. package/dist/chunk-WS7BWP7C.js +0 -1
@@ -0,0 +1 @@
1
+ import{GroupHistoryPageBoundaryError as e}from"../runtime/group-history-page-boundary.js";import{resolveConversationEntryUnread as t}from"./conversation-entry-unread.js";import{isSupportedImageFile as o}from"./image-format.js";import{toMessageMention as r}from"./mention.js";import{createImSdkError as n,unknownOperationErrorToImSdkError as a,toProductMessage as s,toMessageView as i,areMessageViewsEqual as d,mediaFailureToImSdkError as c}from"./message.js";import{fetchMessagesByIdInBatches as l}from"./messages-by-id.js";import{throwIfAborted as g}from"../../../im-core/src/abort.js";import{isConversationUnreadMessage as m}from"../../../im-core/src/mapping/unread-divider.js";import{LocalMessageWindowReadError as v}from"../../../im-core/src/state/local-message-window-read-error.js";import{isValidLiveRoomBody as y}from"../../../im-core/src/mapping/live-room-body.js";import{isValidGiftBody as f}from"../../../im-core/src/mapping/gift-body.js";import{isValidTransferBody as u}from"../../../im-core/src/mapping/transfer-body.js";import{isValidMiniProgramBody as I}from"../../../im-core/src/mapping/mini-program-body.js";import{MEDIA_ALBUM_CAPTION_MAX_LENGTH as _,MEDIA_ALBUM_MAX_ITEMS as w}from"../../../im-core/src/mapping/media-album-body.js";import{isMessageVisibleInTimeline as p}from"../../../im-core/src/mapping/session-mapper.js";function E(t,o,r){return t instanceof e?n({code:t.code,category:t.category,retryable:t.retryable,operation:o,conversation:r,cause:t}):a(t,o,r)}const M=/* @__PURE__ */new WeakMap;function S(e,t){const o=M.get(t);if(void 0===o)throw new Error("ConversationHandle advanced 访问能力尚未注册");M.set(e,o)}const D={pinned:{code:"IM_SDK_MESSAGE_PINNED",category:"state",retryable:!1},"not-found":{code:"IM_SDK_MESSAGE_NOT_FOUND",category:"state",retryable:!1},"not-own":{code:"IM_SDK_RECALL_NOT_OWN",category:"permission",retryable:!1},"not-sent":{code:"IM_SDK_RECALL_NOT_SENT",category:"state",retryable:!1},expired:{code:"IM_SDK_RECALL_EXPIRED",category:"state",retryable:!1},"server-expired":{code:"IM_SDK_RECALL_EXPIRED",category:"state",retryable:!1},unsupported:{code:"IM_SDK_RECALL_UNSUPPORTED",category:"unsupported",retryable:!1},timeout:{code:"IM_SDK_RECALL_TIMEOUT",category:"network",retryable:!0},failed:{code:"IM_SDK_RECALL_FAILED",category:"state",retryable:!1},disconnected:{code:"IM_SDK_RECALL_DISCONNECTED",category:"network",retryable:!0}},T={pinned:{code:"IM_SDK_MESSAGE_PINNED",category:"state",retryable:!1},"not-found":{code:"IM_SDK_MESSAGE_NOT_FOUND",category:"state",retryable:!1},"not-own":{code:"IM_SDK_EDIT_NOT_OWN",category:"permission",retryable:!1},"not-sent":{code:"IM_SDK_EDIT_NOT_SENT",category:"state",retryable:!1},recalled:{code:"IM_SDK_EDIT_RECALLED",category:"state",retryable:!1},deleted:{code:"IM_SDK_EDIT_DELETED",category:"state",retryable:!1},expired:{code:"IM_SDK_EDIT_EXPIRED",category:"state",retryable:!1},unsupported:{code:"IM_SDK_EDIT_UNSUPPORTED",category:"unsupported",retryable:!1},empty:{code:"IM_SDK_EDIT_EMPTY",category:"validation",retryable:!1},restricted:{code:"IM_SDK_EDIT_RESTRICTED",category:"permission",retryable:!1},"unsupported-content":{code:"IM_SDK_EDIT_CONTENT_UNSUPPORTED",category:"unsupported",retryable:!1},"no-key":{code:"IM_SDK_EDIT_KEY_UNAVAILABLE",category:"state",retryable:!1},"encrypt-failed":{code:"IM_SDK_EDIT_ENCRYPT_FAILED",category:"state",retryable:!1},timeout:{code:"IM_SDK_EDIT_TIMEOUT",category:"network",retryable:!0},failed:{code:"IM_SDK_EDIT_FAILED",category:"state",retryable:!1},disconnected:{code:"IM_SDK_EDIT_DISCONNECTED",category:"network",retryable:!0}},h={"not-found":{code:"IM_SDK_MESSAGE_NOT_FOUND",category:"state",retryable:!1},"unsupported-message":{code:"IM_SDK_REACTION_MESSAGE_UNSUPPORTED",category:"unsupported",retryable:!1},"invalid-emoji":{code:"IM_SDK_REACTION_EMOJI_INVALID",category:"validation",retryable:!1},restricted:{code:"IM_SDK_REACTION_FORBIDDEN",category:"permission",retryable:!1},disconnected:{code:"IM_SDK_REACTION_DISCONNECTED",category:"network",retryable:!0},timeout:{code:"IM_SDK_REACTION_TIMEOUT",category:"network",retryable:!0},failed:{code:"IM_SDK_REACTION_FAILED",category:"state",retryable:!1}},A={pinned:{code:"IM_SDK_MESSAGE_PINNED",category:"state",retryable:!1},"not-found":{code:"IM_SDK_MESSAGE_NOT_FOUND",category:"state",retryable:!1},unsupported:{code:"IM_SDK_CHANNEL_DELETE_UNSUPPORTED",category:"unsupported",retryable:!1},"not-sent":{code:"IM_SDK_CHANNEL_DELETE_NOT_SENT",category:"state",retryable:!1},unavailable:{code:"IM_SDK_CHANNEL_DELETE_UNAVAILABLE",category:"state",retryable:!1},forbidden:{code:"IM_SDK_CHANNEL_DELETE_FORBIDDEN",category:"permission",retryable:!1},timeout:{code:"IM_SDK_CHANNEL_DELETE_TIMEOUT",category:"network",retryable:!0},failed:{code:"IM_SDK_CHANNEL_DELETE_FAILED",category:"state",retryable:!1},disconnected:{code:"IM_SDK_CHANNEL_DELETE_DISCONNECTED",category:"network",retryable:!0}};function b(e,t,o){const r=n({...t,operation:"messages.deleteForEveryone",conversation:e});return Object.assign(new Error(r.code,void 0),r)}function O(e,t,o,r){if(("group"===t.conversationType||"channel"===t.conversationType)&&e.getPinnedMessage(t)?.messageId===o){const e=n({code:"IM_SDK_MESSAGE_PINNED",category:"state",operation:r,retryable:!1,conversation:t,details:{messageId:o}});throw Object.assign(new Error(e.code),e)}}function N(e,t){const o=n({code:"IM_SDK_MESSAGE_ANCHOR_UNAVAILABLE",category:"state",operation:"history.loadAround",retryable:!0,conversation:e,details:{messageId:t}});return Object.assign(new Error(o.code),o)}const P=209715200,R=2147483648,C=31457280,L=4294967295;const K={"empty-input":{code:"IM_SDK_FORWARD_EMPTY_INPUT",category:"validation",retryable:!1},"too-many-targets":{code:"IM_SDK_FORWARD_TOO_MANY_TARGETS",category:"validation",retryable:!1},"unsupported-target-type":{code:"IM_SDK_FORWARD_TARGET_UNSUPPORTED",category:"unsupported",retryable:!1},"type-not-allowed":{code:"IM_SDK_FORWARD_CONTENT_UNSUPPORTED",category:"unsupported",retryable:!1},"media-not-ready":{code:"IM_SDK_FORWARD_MEDIA_NOT_READY",category:"state",retryable:!0},"album-item-not-found":{code:"IM_SDK_MEDIA_ALBUM_ITEM_INVALID",category:"validation",retryable:!1},"conversation-blocked":{code:"IM_SDK_FORWARD_TARGET_BLOCKED",category:"permission",retryable:!1},"send-failed":{code:"IM_SDK_FORWARD_SEND_FAILED",category:"state",retryable:!1}};async function U(e,r,S,A,b={},U={}){g(U.signal);const k=Object.freeze({...e}),x=r.pageSize??30,G={historySource:"group"===k.conversationType||"channel"===k.conversationType?"remote":"local",retention:{maxMessages:6*x},...void 0===b.shouldEstablishRemoteLatestOnOpen?{}:{shouldEstablishRemoteLatest:(e,t)=>!0===b.shouldEstablishRemoteLatestOnOpen?.(t)}};let F=r.domainState.createMessageWindow({...G});const j=/* @__PURE__ */new WeakSet,z=/* @__PURE__ */new WeakSet,B=/* @__PURE__ */new Set,H=/* @__PURE__ */new Set,W=/* @__PURE__ */new Map;let Y,$,X=!1,Q=!1,q=!1,J=!0,Z=0,ee=Object.freeze({state:"none"});const te=!0===U.captureEntryUnread&&"robot"!==k.conversationType,oe=te?r.domainState.getSession(k):void 0,re=Math.max(0,!0===oe?.manuallyUnread?0:oe?.unreadCount??0),ne=te?r.domainState.getReadState(k):void 0,ae=r.getSelfId(),se=/* @__PURE__ */new Map,ie=/* @__PURE__ */new Set;let de,ce,le,ge,me,ve=ne?.readCursorSortKey,ye=te?Object.freeze(re>0?{state:"pending",count:re}:{state:"none"}):void 0,fe=0;function ue(e=new DOMException("历史导航已被新的操作取代","AbortError")){const t=le;le=void 0;const o=++fe;return t?.controller.abort(e),o}function Ie(){const e={version:ue(),controller:new AbortController};return le=e,e}function _e(e){le===e&&(le=void 0)}let we,pe,Ee=0,Me=!1;if(te)for(const e of r.domainState.getLoadedMessagesByConversation(k))se.set(e.id,m(e,ae)),ne?.readCursor===("channel"===k.conversationType?e.extensions?.historyCursor:e.id)&&(ve=e.sortKey);const Se=new AbortController,De=/* @__PURE__ */new WeakMap;let Te,he=/* @__PURE__ */new Map;function Ae(){if(Q)throw new Error("ConversationHandle 已关闭")}function be(){const e=F.window.info();return{messages:F.window.list(),context:r.domainState.getConversationContext(k),draft:r.domainState.getDraft(k),loading:W.size>0,stale:X,hasOlder:e.hasMore,hasNewer:e.hasNewer,error:$,entryUnread:ee,entryUnreadNavigation:ye}}function Oe(e){const t=De.get(e);if(void 0!==t)return t;const o=i(e),r=he.get(e.id),n=void 0!==r&&d(r,o)?r:o;return De.set(e,n),n}function Ne(e){const t=e.context,o=Object.freeze(e.messages.map(Oe));return he=new Map(o.map(e=>[e.id,e])),{ref:k,...void 0===t?{}:{display:Object.freeze({title:t.title,...void 0===t.avatar?{}:{avatar:t.avatar}})},messages:o,entryUnread:e.entryUnread,...void 0===e.entryUnreadNavigation?{}:{entryUnreadNavigation:e.entryUnreadNavigation},draft:e.draft,loading:e.loading,stale:e.stale,hasOlder:e.hasOlder,hasNewer:e.hasNewer,...void 0===e.error?{}:{error:e.error}}}function Pe(){ze();const e=be();if(void 0!==Te&&(o=e,function(e,t){return e.length===t.length&&e.every((e,o)=>e===t[o])}((t=Te).messages,o.messages)&&(t.context?.title??"")===(o.context?.title??"")&&(t.context?.avatar??"")===(o.context?.avatar??"")&&t.draft===o.draft&&t.loading===o.loading&&t.stale===o.stale&&t.hasOlder===o.hasOlder&&t.hasNewer===o.hasNewer&&t.error===o.error&&t.entryUnread===o.entryUnread&&t.entryUnreadNavigation===o.entryUnreadNavigation))return;var t,o;Te=e;const n=Ne(e);for(const e of B)try{e(n)}catch(e){r.emitter.emit({type:"error",error:{scope:"unknown",message:"ConversationHandle 订阅者回调异常",cause:e}})}}async function Re(e){const t=F.window.list().find(t=>t.id===e)??r.domainState.getConversationMessage(k,e);if(void 0!==t)return{anchor:t,fallbackSeed:t};const o=await r.domainState.resolveConversationMessage(k,e,{throwOnStorageError:!0});return void 0===o?void 0:{anchor:o,fallbackSeed:o}}async function Ce(e,t,o,r=!1){o();const{anchor:n}=t;if(void 0!==t.remoteSeed)return Le(e,t.remoteSeed,o,r);const a=await e.openAt(k,{anchorSortKey:n.sortKey,limit:x});o();const s=e.list().find(e=>e.id===n.id);if(!0===e.info().remotePagination&&void 0!==s)return Le(e,s,o,r);if(e.list().some(e=>e.id===n.id))return a;if(void 0===t.fallbackSeed)throw N(k,n.id);if("local"===G.historySource){const o=e.info();return e.openAt(k,{anchorSortKey:n.sortKey,limit:x,seedMessages:[...a.messages,t.fallbackSeed],seedHasOlder:o.hasMore,seedHasNewer:o.hasNewer})}return Le(e,t.fallbackSeed,o,r)}async function Le(e,t,o,r){const n=await e.openAt(k,{anchorSortKey:t.sortKey,limit:x,seedMessages:[t],seedHasNewer:!0,seedRemotePagination:{}});return o(),r?(await Ke(e,t,o),{...n,messages:e.list()}):n}async function Ke(e,t,o){for(const r of["older","newer"])if(!e.list().some(e=>p(e)&&("older"===r?e.sortKey<t.sortKey:e.sortKey>t.sortKey)))for(let t=0;t<4;t+=1){o();const t=e.info();if(!("older"===r?t.hasMore:t.hasNewer))break;const n="older"===r?await e.loadOlder({limit:x}):await e.loadNewer({limit:x});if(o(),n.stale)throw new DOMException("消息定位窗口已失效","AbortError");if(n.messages.length>0)break}}function Ue(e,t,o){Ae();const n=F,a=o?.window??n.window,s=o?.isCurrent??(()=>!Q&&F===n),i=()=>{if(Ae(),!s())throw new DOMException("历史操作已被新的导航取代","AbortError")};if(void 0!==Y)return Promise.reject(new Error("清空本机会话历史期间拒绝启动新的历史加载"));const d=W.get(e);if(void 0!==d)return d;const c=r.beginReceiving?.();$=void 0;const l=Promise.resolve().then(()=>(i(),t())).then(e=>(i(),void 0===b.reconcilePage?e:b.reconcilePage(e,a))).then(e=>{i(),X=!0===e.stale}),g=(void 0===o?.cancelled?l:Promise.race([l,o.cancelled])).catch(t=>{const o=t instanceof v?t.cause:t;throw s()&&($=E(o,`history.${e}`,k)),J?t:o}).finally(()=>{c?.(),W.delete(e),Q||Pe()});return W.set(e,g),Pe(),g}function ke(){F.window.applyIncoming(r.domainState.getMessagesByConversation(k).slice(-x))}function xe(e){return!0===b.shouldEstablishRemoteLatestOnOpen?.(e.list())||!0===e.info().remotePagination&&(re>0||"first-unread"===U.initialPosition&&(r.domainState.getSession(k)?.unreadCount??0)>0)}async function Ge(){Me=!1,q?q=!1:await Ue("latest",()=>F.window.open(k,{limit:x})),ke(),xe(F.window)&&(await Ue("latest:remote",()=>F.window.loadOlder({limit:x,establishLatestOnly:!0})),ke()),Me=!X,je(F.window.list())}function Fe(){if(Ae(),me?.version===fe)return me.promise;const e=Ie(),{version:t}=e,o=async function({version:e,controller:t}){const o=F,n=r.domainState.createMessageWindow(G),a=()=>!Q&&!t.signal.aborted&&fe===e&&F===o,s=()=>{if(!a())throw new DOMException("回最新已被新的导航取代","AbortError")};let i,d=!1;const c=new Promise((e,t)=>{i=t}),l=()=>{d||n.dispose(),i(t.signal.reason)};t.signal.addEventListener("abort",l,{once:!0});const g={window:n.window,isCurrent:a,cancelled:c},m=(e,t)=>Ue(e,async()=>{const e=await t();if(e.stale)throw new DOMException("最新历史窗口已失效","AbortError");return e},g),v=(async()=>{await m(`latest:${e}`,()=>n.window.open(k,{limit:x})),s(),n.window.applyIncoming(r.domainState.getMessagesByConversation(k).slice(-x)),xe(n.window)&&(await m(`latest:remote:${e}`,()=>n.window.loadOlder({limit:x,establishLatestOnly:!0})),s(),n.window.applyIncoming(r.domainState.getMessagesByConversation(k).slice(-x))),F=n,d=!0,o.dispose(),Me=!0,X=!1,je(n.window.list()),Pe()})();try{await Promise.race([v,c])}finally{t.signal.removeEventListener("abort",l),d||n.dispose()}}(e).finally(()=>{_e(e),me?.version===t&&(me=void 0)});return me={version:t,promise:o},o}function je(e){const t=b.resolveReadMessageId?.(e);we=void 0===b.resolveReadMessageId?e.at(-1):e.find(e=>e.id===t)}function Ve(e){return!(ie.has(e.id)||void 0===de||e.sortKey>de||void 0!==ve&&e.sortKey<=ve)&&(se.get(e.id)??m(e,ae))}function ze(){if(!te||re<=0||void 0!==ce||void 0===de||"none"===ye?.state)return;const e=F.window.list();if(!e.some(e=>e.sortKey===de))return;const t=e.filter(e=>Ve(e)&&p(e)&&void 0===e.recalled&&void 0===e.deletedForEveryone);if(t.length<re)return;const o=t.slice(-re);if(o.every(e=>"system"===e.contentType))return void(ye=Object.freeze({state:"none"}));const r=o[0];ce=r.id,ee=Object.freeze({state:"located",firstMessageId:r.id,count:re}),ye=Object.freeze({state:"located",firstMessageId:r.id,count:re})}const Be=r.emitter.subscribe(e=>{if(!Q&&"conversation"in e&&void 0!==e.conversation&&e.conversation.conversationType===k.conversationType&&e.conversation.conversationId===k.conversationId){if("conversation-history:cleared"!==e.type&&"session:removed"!==e.type||(Se.abort(),ue(),ee=Object.freeze({state:"none"}),te&&(ye=Object.freeze({state:"none"})),Ee+=1,pe?.dispose(),pe=void 0,Me=!1,we=void 0),"message:received"===e.type&&"live"===e.source&&(te&&ie.add(e.message.id),Me&&(void 0===we||e.message.sortKey>we.sortKey)&&(void 0===b.resolveReadMessageId||b.resolveReadMessageId([e.message])===e.message.id)&&(we=e.message)),"draft:updated"===e.type||"draft:cleared"===e.type){const t="draft:updated"===e.type?e.draft:null;for(const e of H)try{e(t)}catch(e){r.emitter.emit({type:"error",error:{scope:"unknown",message:"ConversationHandle 草稿订阅者回调异常",cause:e}})}}Pe()}});function He(){return"first-unread"===U.initialPosition?async function(){const e=r.domainState.getSession(k),o=Math.max(0,!0===e?.manuallyUnread?0:e?.unreadCount??0),n=r.domainState.getReadState(k),a=n?.readCursor,s=void 0===a||""===a?void 0:"channel"===k.conversationType?r.domainState.getLoadedMessagesByConversation(k).find(e=>e.extensions?.historyCursor===a):r.domainState.getConversationMessage(k,a),i=s?.sortKey??n?.readCursorSortKey;if(ee=await t({conversation:k,pageSize:x,unreadCount:o,...void 0===i?{}:{readCursorSortKey:i},signal:Se.signal,..."channel"!==k.conversationType||void 0===a||""===a||void 0===r.loadEntryUnreadPage?{}:{loadReadCursorPage:async e=>{const t=F.window.getRevision(),o=()=>!Q&&!Se.signal.aborted&&F.window.getRevision()===t,n=await r.loadEntryUnreadPage({readCursor:a,...void 0===e?{}:{cursor:e},signal:Se.signal,isCurrent:o});if(g(Se.signal),!o())throw new DOMException("首未读定位已被新的窗口操作作废","AbortError");return n}},selfId:r.getSelfId(),list:()=>F.window.list(),hasOlder:()=>F.window.info().hasMore,hasNewer:()=>F.window.info().hasNewer,openLatest:Ge,openAt:(e,t)=>{if(void 0===t&&"channel"===k.conversationType&&void 0!==a&&""!==a&&void 0!==r.loadEntryUnreadPage)return Promise.resolve();q=!1;const o=t?.messages.map(e=>r.domainState.getConversationMessage(k,e.id)??e),n=t?.messages.find(t=>t.sortKey===e)?.id,s=void 0===n?e:o?.find(e=>e.id===n)?.sortKey??e;return Ue(`entry-unread:${e}`,()=>F.window.openAt(k,{anchorSortKey:s,limit:x,...void 0===t?{}:{seedMessages:o,seedHasNewer:t.hasNewer,seedRemotePagination:void 0===t.nextCursor?{}:{newerCursor:t.nextCursor}}}))},loadOlder:()=>Ue("entry-unread:older",()=>F.window.loadOlder({limit:x})),loadNewer:()=>Ue("entry-unread:newer",()=>F.window.loadNewer({limit:x}))}),"located"===ee.state&&!0===F.window.info().remotePagination){const e=ee.firstMessageId,t=F.window.list().find(t=>t.id===e);void 0!==t&&await Ue("entry-unread:context",async()=>(await Ke(F.window,t,()=>{g(Se.signal),Ae()}),{conversationId:k.conversationId,messages:F.window.list(),stale:!1}));const o=F.window.list().find(t=>t.id===e);void 0!==o&&p(o)&&void 0===o.recalled&&void 0===o.deletedForEveryone||(ee=Object.freeze({state:"unavailable"}))}}():Ge()}const We=()=>{Se.abort(U.signal?.reason),F.dispose()};U.signal?.addEventListener("abort",We,{once:!0});try{if(g(U.signal),"local-first"===U.initialLoad){await Ue("initial:local",()=>F.window.open(k,{limit:x})),g(U.signal),ke(),q=!0;try{await He()}catch(e){if(g(U.signal),e instanceof v)throw e;$=E(e,"history.initial",k),"first-unread"===U.initialPosition&&(ee=Object.freeze({state:"unavailable"}))}finally{q=!1}}else await He();g(U.signal)}catch(e){throw Q=!0,Se.abort(),Be(),B.clear(),F.dispose(),e instanceof v?e.cause:e}finally{U.signal?.removeEventListener("abort",We)}function Ye(e,t){const o=r.domainState.getConversationMessage(k,e);return void 0!==o&&o.conversationType===k.conversationType&&o.conversationId===k.conversationId?{ok:!0,message:s(o)}:{ok:!1,error:n({code:void 0===o?"IM_SDK_MESSAGE_STATE_MISSING":"IM_SDK_MESSAGE_STATE_MISMATCH",category:"state",operation:t,retryable:!1,conversation:k})}}async function $e(e,t,o){const r=await(b.getSendPermissionError?.(e));if(Ae(),void 0!==r){if(void 0===o||"customerService"===k.conversationType)return{ok:!1,error:r};const e=await o(r);return Ae(),e}try{const e=await t();return Ae(),e}catch(t){if(Q)throw t;return{ok:!1,error:a(t,e,k)}}}async function Xe(e,t={}){const o="name"in e?e.name:void 0,r=t.fileName??("string"==typeof o&&""!==o?o:void 0);return{...k,data:e,...""===e.type?{}:{mimeType:e.type},...void 0===r?{}:{filename:r},..."robot"===k.conversationType?{encrypted:!1}:{},...void 0===t.localPreviewUrl?{}:{localPreviewUrl:t.localPreviewUrl},...void 0===t.localPreviewMetadata?{}:{localPreviewMetadata:t.localPreviewMetadata},...void 0===t.replyToMessageId?{}:{refMessageId:t.replyToMessageId}}}function Qe(e){return void 0===e||Number.isFinite(e.width)&&e.width>0&&Number.isFinite(e.height)&&e.height>0}function qe(e){return Qe(e)&&(void 0===e?.duration||Number.isFinite(e.duration)&&e.duration>0)&&(void 0===e?.posterData||e.posterData instanceof Uint8Array&&e.posterData.length>0&&e.posterData.length<=16384)}function Je(e){return void 0!==e&&"duration"in e&&void 0!==e.duration&&Number.isFinite(e.duration)&&e.duration>0}function Ze(e,t,o){return{ok:!1,error:n({code:e,category:t,operation:o,retryable:!1,conversation:k})}}function et(e,t){if(null===e||"object"!=typeof e||e.kind!==t)return!1;if(!Number.isSafeInteger(e.width)||e.width<=0||e.width>L||!Number.isSafeInteger(e.height)||e.height<=0||e.height>L)return!1;let o;try{o=new URL(e.url)}catch{return!1}if("http:"!==o.protocol&&"https:"!==o.protocol||""!==o.username||""!==o.password)return!1;const r=e.resourceId;if(void 0!==r&&("string"!=typeof r||""===r.trim()))return!1;if("gif"===t)return!Object.prototype.hasOwnProperty.call(e,"packageId");const n=e.packageId;return"string"==typeof r&&""!==r.trim()&&"string"==typeof n&&""!==n.trim()}function tt(e){if("customerService"===k.conversationType)throw ot(n({code:"IM_SDK_CUSTOMER_SERVICE_READ_ONLY",category:"permission",operation:e,retryable:!1,conversation:k}))}function ot(e){return Object.assign(new Error(e.code),e,{name:"ImMessageActionError"})}function rt(e,t,o){if("direct"===e||"group"===e||"channel"===e||"robot"===e)return Object.freeze({conversationType:e,conversationId:t});throw ot(n({code:"IM_SDK_FORWARD_RESULT_INVALID",category:"contract",operation:o,retryable:!1,conversation:k,details:{targetConversationType:e,targetConversationId:t}}))}async function nt(e,t,o){let s;try{s=await r.forwardMessages({messages:t,targets:o.map(e=>{if("customerService"===e.conversationType)throw new Error("客服会话不能作为转发目标");return{conversationType:e.conversationType,conversationId:e.conversationId}})})}catch(t){throw ot(a(t,e,k))}return Ae(),Object.freeze({sent:Object.freeze(s.results.flatMap(t=>t.ok?[{conversation:rt(t.targetConversationType,t.targetConversationId,e),messageId:t.newMessageId}]:[])),failed:Object.freeze(s.results.flatMap(t=>t.ok?[]:[{sourceMessageId:t.sourceMessageId,conversation:Object.freeze({conversationType:t.targetConversationType,conversationId:t.targetConversationId}),error:n({...K[t.reason],operation:e,conversation:{conversationType:t.targetConversationType,conversationId:t.targetConversationId}})}])),skippedSourceMessageIds:Object.freeze([...s.skippedSourceIds])})}function at(e,t){const o=r.domainState.getConversationMessage(k,e);if(void 0===o){const o=r.domainState.getMessagesById(e)[0];throw ot(n({code:void 0===o?"IM_SDK_MESSAGE_NOT_FOUND":"IM_SDK_MESSAGE_STATE_MISMATCH",category:"state",operation:t,retryable:!1,conversation:k}))}if(o.conversationType!==k.conversationType||o.conversationId!==k.conversationId)throw ot(n({code:"IM_SDK_MESSAGE_STATE_MISMATCH",category:"state",operation:t,retryable:!1,conversation:k}));return o}function st(e,t){return ot(n({...t,operation:e,conversation:k}))}function it(e,t){const o=n({code:e,category:"state",operation:"messages.deleteLocal",retryable:!1,conversation:k,...void 0===t?{}:{cause:t}});return Object.assign(new Error(e),o,{name:"ImLocalMessageDeletionError"})}function dt(e,t){const o=n({code:e,category:"state",operation:"history.clearLocal",retryable:!1,conversation:k,...void 0===t?{}:{cause:t}});return Object.assign(new Error(e),o,{name:"ImLocalConversationHistoryClearError"})}async function ct(e,t){if(void 0!==e)try{await r.domainState.clearDraftIfUnchanged(k,e)}catch(e){r.emitter.emit({type:"error",error:{scope:"storage",message:`消息已被本地发送流程接受,但清理草稿失败(${t})`,cause:e}})}}async function lt(e,t,n,a,s){return $e(e,async()=>{if("image"===t){const t=await o(n);if(Ae(),!t)return Ze("IM_SDK_IMAGE_FORMAT_UNSUPPORTED","unsupported",e)}const i=await Xe(n,a);if(Ae(),void 0!==t&&void 0===i.localPreviewMetadata&&void 0!==r.prepareMediaPreview){const o=new AbortController,a=await r.prepareMediaPreview({operationId:`${k.conversationType}:${k.conversationId}:${e}:${++Z}`,kind:t,file:n,signal:o.signal});if(Ae(),void 0===a||("image"===t?!Qe(a):!qe(a)))return Ze("image"===t?"IM_SDK_IMAGE_PREVIEW_METADATA_INVALID":"IM_SDK_VIDEO_PREVIEW_METADATA_INVALID","validation",e);i.localPreviewMetadata=a}if("video"===t&&(void 0!==r.prepareMediaPreview||void 0!==i.localPreviewMetadata)&&!Je(i.localPreviewMetadata))return Ze("IM_SDK_VIDEO_DURATION_UNAVAILABLE","validation",e);const d=b.recheckSendPermissionError?.(e);if(void 0!==d)return{ok:!1,error:d};const l=await s({...i,...void 0===a.filesAlbum?{}:{filesAlbum:a.filesAlbum},...void 0===a.caption||""===a.caption?{}:{caption:a.caption}});return l.ok?(Ae(),Ye(l.messageId,e)):{ok:!1,error:c(l.reason,e,k)}})}function gt(e,t,o){const a=at(e,o);if(!(a.contentType===t||"file"===t&&"filesAlbum"===a.contentType&&1===a.body.filesAlbum?.items.length)||"failed"!==a.status||"media.uploadInterrupted"!==a.failure?.displayCode&&"media.cancelled"!==a.failure?.displayCode&&("media.uploadTimeout"!==a.failure?.displayCode||!1!==a.failure.retryable)||r.isOutboxOwned(e))throw ot(n({code:"IM_SDK_MESSAGE_STATE_MISMATCH",category:"state",operation:o,retryable:!1,conversation:k}));return a}async function mt(e,t,o,n,a,s){return gt(t,o,e),$e(e,async()=>{const i=await Xe(n,a);if("video"===o&&void 0===i.localPreviewMetadata&&void 0!==r.prepareMediaPreview){const t=new AbortController,o=await r.prepareMediaPreview({operationId:`${k.conversationType}:${k.conversationId}:${e}:${++Z}`,kind:"video",file:n,signal:t.signal});if(Ae(),void 0===o||!qe(o))return Ze("IM_SDK_VIDEO_PREVIEW_METADATA_INVALID","validation",e);i.localPreviewMetadata=o}if("video"===o&&(void 0!==r.prepareMediaPreview||void 0!==i.localPreviewMetadata)&&!Je(i.localPreviewMetadata))return Ze("IM_SDK_VIDEO_DURATION_UNAVAILABLE","validation",e);const d=b.recheckSendPermissionError?.(e);if(void 0!==d)return{ok:!1,error:d};gt(t,o,e);const l=await s(t,{...i,...void 0===a.caption||""===a.caption?{}:{caption:a.caption}});return l.ok?(Ae(),Ye(l.messageId,e)):{ok:!1,error:c(l.reason,e,k)}})}J=!1,function(){if(!te||re<=0)return;if(!0===F.window.info().remotePagination&&!Me&&"located"!==ee.state)return;z.add(F.window);const e=F.window.list().filter(e=>!ie.has(e.id));de=e.at(-1)?.sortKey;for(const t of e)se.has(t.id)||se.set(t.id,m(t,ae));if("first-unread"===U.initialPosition&&"located"===ee.state)return ce=ee.firstMessageId,void(ye=Object.freeze({state:"located",count:re,firstMessageId:ee.firstMessageId}));ze()}();const vt={ref:k,getSnapshot:function(){return Ae(),Ne(be())},subscribe:e=>(Ae(),B.add(e),()=>B.delete(e)),resolveMessage:async e=>{Ae();const t=F.window.list().find(t=>t.id===e)??await r.domainState.resolveConversationMessage(k,e);return void 0===t?null:Oe(t)},history:{loadEntryUnread:e=>function(e={}){if(Ae(),e.signal?.aborted)return Promise.reject(e.signal.reason);if(void 0!==ge){if(!ge.controller.signal.aborted&&ge.version===fe&&ge.callerSignal===e.signal)return ge.promise;ge.controller.abort()}if(void 0===ye||"none"===ye.state)return Promise.resolve(!1);const o=Ie(),{version:n,controller:a}=o,s=F.window.list(),i=s.find(e=>e.id===ce),d=F.window.info();if(void 0===Y&&0===W.size&&!X&&!Se.signal.aborted&&z.has(F.window)&&void 0!==i&&p(i)&&void 0===i.recalled&&void 0===i.deletedForEveryone&&(!d.hasMore||s.some(e=>p(e)&&e.sortKey<i.sortKey))&&(!d.hasNewer||s.some(e=>p(e)&&e.sortKey>i.sortKey)))return ee=Object.freeze({state:"located",firstMessageId:i.id,count:re}),ye=Object.freeze({state:"located",firstMessageId:i.id,count:re}),Pe(),_e(o),Promise.resolve(!0);const c=r.domainState.createMessageWindow(G),l=()=>!Q&&!a.signal.aborted&&fe===n,g=()=>{if(!l())throw new DOMException("进入未读定位已被新的导航取代","AbortError")},m=async e=>{g();let t=await e();if(g(),void 0!==b.reconcilePage&&(t=await b.reconcilePage(t,c.window)),g(),t.stale)throw new DOMException("进入未读窗口已失效","AbortError");c.window.applyIncoming(c.window.list().map(e=>r.domainState.getConversationMessage(k,e.id)??e))};let y,f=!1;const u=new Promise((e,t)=>{y=t}),I=()=>{f||c.dispose(),y(a.signal.reason)},_=()=>a.abort(e.signal?.reason),w=()=>a.abort(Se.signal.reason);a.signal.addEventListener("abort",I,{once:!0}),e.signal?.addEventListener("abort",_,{once:!0}),Se.signal.addEventListener("abort",w,{once:!0}),Se.signal.aborted&&w();const M=r.beginReceiving?.(),S=(async()=>{try{let e=!1;void 0===de&&(await m(()=>c.window.open(k,{limit:x})),xe(c.window)&&await m(()=>c.window.loadOlder({limit:x,establishLatestOnly:!0})),de=c.window.list().filter(e=>!ie.has(e.id)).at(-1)?.sortKey,e=!0);const o=ce,n=void 0===o?void 0:await Re(o);if(g(),void 0!==o&&void 0===n)return ye=Object.freeze({state:"unavailable",count:re}),!1;const s=void 0===n?await t({conversation:k,pageSize:x,maxExtraPages:Number.POSITIVE_INFINITY,preserveLocatedWindow:!0===c.window.info().remotePagination,...void 0===de?{}:{entryUpperSortKey:de},unreadCount:re,...void 0===ve?{}:{readCursorSortKey:ve},signal:a.signal,selfId:ae,isEntryUnread:Ve,..."channel"===k.conversationType&&ne?.readCursor&&void 0!==r.loadEntryUnreadPage?{loadReadCursorPage:async e=>{const t=await r.loadEntryUnreadPage({readCursor:ne.readCursor,...void 0===e?{}:{cursor:e},signal:a.signal,isCurrent:l});return g(),t}}:{},paginationKey:()=>c.window.getPaginationKey(),list:()=>c.window.list(),hasOlder:()=>c.window.info().hasMore,hasNewer:()=>c.window.info().hasNewer,openLatest:async()=>{e?e=!1:(await m(()=>c.window.open(k,{limit:x})),xe(c.window)&&await m(()=>c.window.loadOlder({limit:x,establishLatestOnly:!0})))},openAt:(t,o)=>(e=!1,m(()=>c.window.openAt(k,{anchorSortKey:t,limit:x,...void 0===o?{}:{seedMessages:o.messages.map(e=>r.domainState.getConversationMessage(k,e.id)??e),seedHasNewer:o.hasNewer,seedRemotePagination:void 0===o.nextCursor?{}:{newerCursor:o.nextCursor}}}))),loadOlder:()=>m(()=>c.window.loadOlder({limit:x})),loadNewer:()=>m(()=>c.window.loadNewer({limit:x}))}):await(async()=>(await m(()=>Ce(c.window,n,g)),{state:"located",firstMessageId:n.anchor.id,count:re}))();if(g(),"located"!==s.state)return ye=Object.freeze("none"===s.state?{state:"none"}:{state:"unavailable",count:re}),!1;const i=c.window.list().find(e=>e.id===s.firstMessageId);if(void 0===i||!p(i)||void 0!==i.recalled||void 0!==i.deletedForEveryone)return ye=Object.freeze({state:"unavailable",count:re}),!1;!0===c.window.info().remotePagination&&await m(async()=>(await Ke(c.window,i,g),{conversationId:k.conversationId,messages:c.window.list(),stale:!1})),g();const d=c.window.list().find(e=>e.id===s.firstMessageId);if(void 0===d||!p(d)||void 0!==d.recalled||void 0!==d.deletedForEveryone)return ye=Object.freeze({state:"unavailable",count:re}),!1;const v=F;return F=c,f=!0,v.dispose(),z.add(c.window),ce=s.firstMessageId,ee=s,ye=Object.freeze({state:"located",count:re,firstMessageId:s.firstMessageId}),$=void 0,!0}catch(e){const t=e instanceof v?e.cause:e;if(l()){const e=E(t,"history.loadEntryUnread",k);ye=Object.freeze({state:"failed",count:re,error:e})}throw t}})(),D=Promise.race([S,u]).finally(()=>{a.signal.removeEventListener("abort",I),_e(o),e.signal?.removeEventListener("abort",_),Se.signal.removeEventListener("abort",w),f||c.dispose(),M?.(),ge?.controller===a&&(ge=void 0),Q||Pe()});return ge={version:n,callerSignal:e.signal,controller:a,promise:D},D}(e),loadLatest:async()=>Fe(),loadOlder:async()=>(Ae(),ue(),Ue("older",()=>F.window.loadOlder({limit:x}))),loadNewer:async()=>{Ae(),ue(),await Ue("newer",()=>F.window.loadNewer({limit:x})),Ae(),F.window.info().hasNewer||(ke(),Pe())},loadAround:async(e,t={})=>{if(Ae(),!0===t.signal?.aborted)throw new DOMException("消息定位已取消","AbortError");const o=Ie(),{version:a,controller:s}=o;if(void 0===Y&&"channel"===k.conversationType&&j.has(F.window)&&r.domainState.getPinnedMessage(k)?.messageId===e&&F.window.list().some(t=>t.id===e&&V(t)))return void _e(o);const i=F,d=()=>!Q&&!s.signal.aborted&&fe===a&&F===i,c=()=>{if(Ae(),!d())throw new DOMException("消息定位已被新的导航取代","AbortError")};let l,g,m=!1;const v=new Promise((e,t)=>{g=t}),y=()=>{m||l?.dispose(),g(s.signal.reason)},f=()=>s.abort(t.signal?.reason);s.signal.addEventListener("abort",y,{once:!0}),t.signal?.addEventListener("abort",f,{once:!0});const u=(async()=>{const t=await async function(e,t){if(t(),void 0!==Y)throw new Error("清空本机会话历史期间拒绝启动新的历史加载");const o=await Re(e);t();const n=o?.fallbackSeed;if(void 0!==o&&("channel"!==k.conversationType||void 0!==n&&V(n)))return"channel"===k.conversationType&&!0===F.window.info().remotePagination?{...o,remoteSeed:n}:o;if(void 0===r.fetchMessagesByIdBatch)throw N(k,e);if(void 0!==Y)throw new Error("清空本机会话历史期间拒绝启动新的历史加载");const a=await r.fetchMessagesByIdBatch([e]);t();const s=a.messages.find(t=>t.id===e&&t.conversationType===k.conversationType&&t.conversationId===k.conversationId);if(void 0!==s){if("channel"===k.conversationType){if(!V(s))throw N(k,e);return{anchor:s,remoteSeed:s}}return{anchor:s,fallbackSeed:s}}if(!a.missingMessageIds.includes(e))throw N(k,e)}(e,c);if(c(),void 0===t)throw function(e,t){const o=n({code:"IM_SDK_MESSAGE_NOT_FOUND",category:"state",operation:"history.loadAround",retryable:!1,conversation:e,details:{messageId:t}});return Object.assign(new Error(o.code),o)}(k,e);if(t.anchor.conversationType!==k.conversationType||t.anchor.conversationId!==k.conversationId)throw N(k,e);l=r.domainState.createMessageWindow(G);const o=l.window;await Ue(`around:${e}:${a}`,async()=>(c(),Ce(o,t,c,!0)),{window:o,isCurrent:d,cancelled:v}),c(),F=l,void 0!==t.remoteSeed&&j.add(o),m=!0,i.dispose(),Pe()})();try{await Promise.race([u,v])}finally{t.signal?.removeEventListener("abort",f),s.signal.removeEventListener("abort",y),_e(o),m||l?.dispose()}},clearLocal:async()=>(Ae(),tt("history.clearLocal"),function(){if(Q)return Promise.reject(new Error("ConversationHandle 已关闭"));if(void 0!==Y)return Y;const e=new DOMException("本次清历史已取消旧窗口导航","AbortError");ue(e),r.invalidateHistory?.(k,e);const t=[...W.values()],o=Promise.all(t.map(t=>t.catch(t=>{if(t!==e)throw t}))).then(async()=>{Ae();const e=[...r.domainState.getMessagesByConversation(k),...F.window.list()];if(r.hasOutboxForConversation(k)||e.some(e=>r.isOutboxOwned(e.id)))throw dt("IM_SDK_LOCAL_HISTORY_CLEAR_OUTBOX_OWNED");if(e.some(e=>"pending"===e.status||"uploading"===e.status||"sending"===e.status))throw dt("IM_SDK_LOCAL_HISTORY_CLEAR_MESSAGE_IN_FLIGHT");return await r.domainState.clearLocalConversationHistory(k),Ae(),Object.freeze({scope:"local-only",remoteHistory:"remote-history-may-restore"})}).catch(e=>{if(e instanceof Error&&"ImLocalConversationHistoryClearError"===e.name)throw e;throw dt("IM_SDK_LOCAL_HISTORY_CLEAR_FAILED",e)}).finally(()=>{Y===o&&(Y=void 0)});return Y=o,o}())},messages:{sendText:async(e,t={})=>{Ae();const o=S(k,e,t);if("code"in o)return{ok:!1,error:o};const n=r.domainState.getDraft(k)?.updatedAt;return $e("messages.sendText",async()=>{const e=await r.sendText(o);return Ae(),await ct(n,"messages.sendText"),Ye(e.id,"messages.sendText")},async e=>{const t=b.appendTextPermissionFailure?.(o);return void 0===t?{ok:!1,error:e}:(await ct(n,"messages.sendText"),{ok:!0,message:s(t)})})},sendContact:async(e,t={})=>{Ae();const o=e.targetId.trim(),a=e.displayName.trim();if(""===o||""===a)return{ok:!1,error:n({code:""===o?"IM_SDK_CONTACT_CARD_TARGET_REQUIRED":"IM_SDK_CONTACT_CARD_NAME_REQUIRED",category:"validation",operation:"messages.sendContact",retryable:!1,conversation:k})};const s={...k,contact:{...e,targetId:o,displayName:a},encrypted:"direct"!==k.conversationType&&"robot"!==k.conversationType,...void 0===t.replyToMessageId?{}:{refMessageId:t.replyToMessageId}};return $e("messages.sendContact",async()=>Ye((await r.sendContact(s)).id,"messages.sendContact"))},sendImage:async(e,t={})=>(Ae(),e.size>C?Ze("IM_SDK_IMAGE_TOO_LARGE","validation","messages.sendImage"):void 0!==t.caption&&""!==t.caption?Ze("IM_SDK_IMAGE_CAPTION_UNSUPPORTED","unsupported","messages.sendImage"):Qe(t.localPreviewMetadata)?lt("messages.sendImage","image",e,t,r.sendImage):Ze("IM_SDK_IMAGE_PREVIEW_METADATA_INVALID","validation","messages.sendImage")),sendMediaAlbum:async(e,t={})=>(Ae(),async function(e,t){const n="messages.sendMediaAlbum";if(0===e.length)return Ze("IM_SDK_MEDIA_ALBUM_EMPTY","validation",n);if(e.length>w)return Ze("IM_SDK_MEDIA_ALBUM_TOO_MANY","validation",n);if(void 0!==t.caption&&Array.from(t.caption).length>_)return Ze("IM_SDK_MEDIA_ALBUM_CAPTION_TOO_LONG","validation",n);for(const t of e){if("image/gif"===t.file.type)return Ze("IM_SDK_MEDIA_ALBUM_GIF_UNSUPPORTED","unsupported",n);if("image"===t.kind){if(t.file.size>C)return Ze("IM_SDK_IMAGE_TOO_LARGE","validation",n);if(!Qe(t.localPreviewMetadata))return Ze("IM_SDK_IMAGE_PREVIEW_METADATA_INVALID","validation",n)}else{if(t.file.size>P)return Ze("IM_SDK_VIDEO_TOO_LARGE","validation",n);if(!qe(t.localPreviewMetadata))return Ze("IM_SDK_VIDEO_PREVIEW_METADATA_INVALID","validation",n)}}return $e(n,async()=>{for(const t of e){if("image"!==t.kind)continue;const e=await o(t.file);if(Ae(),!e)return Ze("IM_SDK_IMAGE_FORMAT_UNSUPPORTED","unsupported",n)}const a=await Promise.all(e.map(async e=>{if(void 0!==e.localPreviewMetadata||void 0===r.prepareMediaPreview)return e.localPreviewMetadata;const t=new AbortController;return r.prepareMediaPreview({operationId:`${k.conversationType}:${k.conversationId}:${n}:${++Z}`,kind:e.kind,file:e.file,signal:t.signal})}));Ae();const s=[];for(const[t,o]of e.entries()){const e=a[t];if("image"===o.kind&&!Qe(e))return Ze("IM_SDK_IMAGE_PREVIEW_METADATA_INVALID","validation",n);if("video"===o.kind){if(!qe(e))return Ze("IM_SDK_VIDEO_PREVIEW_METADATA_INVALID","validation",n);if(void 0!==r.prepareMediaPreview&&!Je(e))return Ze("IM_SDK_VIDEO_DURATION_UNAVAILABLE","validation",n)}const i="name"in o.file?o.file.name:void 0;s.push({kind:o.kind,data:o.file,...""===o.file.type?{}:{mimeType:o.file.type},..."string"==typeof i&&""!==i?{filename:i}:{},...void 0===o.localPreviewUrl?{}:{localPreviewUrl:o.localPreviewUrl},...void 0===e?{}:{localPreviewMetadata:e}})}const i=b.recheckSendPermissionError?.(n);if(void 0!==i)return{ok:!1,error:i};const d=await r.sendMediaAlbum({...k,items:s,...void 0===t.caption||""===t.caption.trim()?{}:{caption:t.caption},...void 0===t.hd?{}:{hd:t.hd},...void 0===t.replyToMessageId?{}:{refMessageId:t.replyToMessageId}});return d.ok?(Ae(),Ye(d.messageId,n)):{ok:!1,error:c(d.reason,n,k)}})}(e,t)),sendVideo:async(e,t={})=>(Ae(),e.size>P?Ze("IM_SDK_VIDEO_TOO_LARGE","validation","messages.sendVideo"):qe(t.localPreviewMetadata)?lt("messages.sendVideo","video",e,t,r.sendVideo):Ze("IM_SDK_VIDEO_PREVIEW_METADATA_INVALID","validation","messages.sendVideo")),replaceInterruptedVideo:async(e,t,o={})=>(Ae(),t.size>P?Ze("IM_SDK_VIDEO_TOO_LARGE","validation","messages.replaceInterruptedVideo"):qe(o.localPreviewMetadata)?mt("messages.replaceInterruptedVideo",e,"video",t,o,r.replaceVideo):Ze("IM_SDK_VIDEO_PREVIEW_METADATA_INVALID","validation","messages.replaceInterruptedVideo")),sendVoice:async(e,t)=>(Ae(),$e("messages.sendVoice",async()=>{const o=await Xe(e,t),n=b.recheckSendPermissionError?.("messages.sendVoice");if(void 0!==n)return{ok:!1,error:n};const a=await r.sendVoice({...o,durationMs:t.durationMs,...void 0===t.waveform?{}:{waveform:[...t.waveform]}});return a.ok?(Ae(),Ye(a.messageId,"messages.sendVoice")):{ok:!1,error:c(a.reason,"messages.sendVoice",k)}})),sendFile:async(e,t={})=>{if(Ae(),e.size>R)return Ze("IM_SDK_FILE_TOO_LARGE","validation","messages.sendFile");if(void 0!==t.caption&&Array.from(t.caption).length>_)return Ze("IM_SDK_MEDIA_ALBUM_CAPTION_TOO_LONG","validation","messages.sendFile");const o=t.fileName??("name"in e?e.name:void 0);return"string"!=typeof o||""===o.trim()?Ze("IM_SDK_FILE_NAME_REQUIRED","validation","messages.sendFile"):lt("messages.sendFile",void 0,e,t,r.sendFile)},sendGif:async(e,t={})=>(Ae(),e.size>3145728?Ze("IM_SDK_GIF_TOO_LARGE","validation","messages.sendGif"):await async function(e){const t=e.type.trim().toLowerCase();if(""!==t&&"image/gif"!==t)return!1;const o=new Uint8Array(await e.slice(0,6).arrayBuffer());if(6!==o.length)return!1;const r=String.fromCharCode(...o);return"GIF87a"===r||"GIF89a"===r}(e)?lt("messages.sendGif",void 0,e,t,e=>r.sendGif(e)):Ze("IM_SDK_GIF_INVALID","validation","messages.sendGif")),sendSticker:async(e,t={})=>(Ae(),et(e,"sticker")?$e("messages.sendSticker",async()=>Ye((await r.sendExpression({...k,asset:e,...void 0===t.replyToMessageId?{}:{refMessageId:t.replyToMessageId}})).id,"messages.sendSticker")):Ze("IM_SDK_EXPRESSION_ASSET_INVALID","validation","messages.sendSticker")),sendGifAsset:async(e,t={})=>(Ae(),et(e,"gif")?$e("messages.sendGifAsset",async()=>Ye((await r.sendExpression({...k,asset:e,...void 0===t.replyToMessageId?{}:{refMessageId:t.replyToMessageId}})).id,"messages.sendGifAsset")):Ze("IM_SDK_EXPRESSION_ASSET_INVALID","validation","messages.sendGifAsset")),sendGame:async(e,t={})=>(Ae(),"rock-paper-scissors"!==e&&"dice"!==e?Ze("IM_SDK_GAME_TYPE_INVALID","validation","messages.sendGame"):$e("messages.sendGame",async()=>Ye((await r.sendGame({...k,gameType:e,...void 0===t.replyToMessageId?{}:{refMessageId:t.replyToMessageId}})).id,"messages.sendGame"))),sendMiniProgram:async(e,t={})=>(Ae(),I(e)?$e("messages.sendMiniProgram",async()=>Ye((await r.sendMiniProgram({...k,miniProgram:e,encrypted:"direct"!==k.conversationType&&"robot"!==k.conversationType,...void 0===t.replyToMessageId?{}:{refMessageId:t.replyToMessageId}})).id,"messages.sendMiniProgram")):Ze("IM_SDK_MINI_PROGRAM_BODY_INVALID","validation","messages.sendMiniProgram")),sendTransfer:async(e,t={})=>(Ae(),"channel"===k.conversationType||"robot"===k.conversationType?Ze("IM_SDK_TRANSFER_CHANNEL_UNSUPPORTED","unsupported","messages.sendTransfer"):u(e)?$e("messages.sendTransfer",async()=>Ye((await r.sendTransfer({...k,transfer:e,...void 0===t.replyToMessageId?{}:{refMessageId:t.replyToMessageId}})).id,"messages.sendTransfer")):Ze("IM_SDK_TRANSFER_BODY_INVALID","validation","messages.sendTransfer")),sendGift:async(e,t={})=>(Ae(),"channel"===k.conversationType||"robot"===k.conversationType?Ze("IM_SDK_GIFT_CHANNEL_UNSUPPORTED","unsupported","messages.sendGift"):f(e)?$e("messages.sendGift",async()=>Ye((await r.sendGift({...k,gift:e,...void 0===t.replyToMessageId?{}:{refMessageId:t.replyToMessageId}})).id,"messages.sendGift")):Ze("IM_SDK_GIFT_BODY_INVALID","validation","messages.sendGift")),sendLiveRoom:async(e,t={})=>(Ae(),y(e)?$e("messages.sendLiveRoom",async()=>Ye((await r.sendLiveRoom({...k,liveRoom:e,encrypted:"direct"!==k.conversationType&&"robot"!==k.conversationType,...void 0===t.replyToMessageId?{}:{refMessageId:t.replyToMessageId}})).id,"messages.sendLiveRoom")):Ze("IM_SDK_LIVE_ROOM_BODY_INVALID","validation","messages.sendLiveRoom")),toggleReaction:async(e,t)=>{Ae(),tt("messages.toggleReaction"),at(e,"messages.toggleReaction");const o=await r.setReaction({conversation:k,parentMessageId:e,emoji:t,action:"toggle"});if(Ae(),!o.ok)throw st("messages.toggleReaction",h[o.reason]);return Object.freeze({messageId:e,eventId:o.event.id,emoji:o.event.emoji,action:0===o.event.action?"add":"remove"})},setReaction:async(e,t,o)=>{Ae(),tt("messages.setReaction"),at(e,"messages.setReaction");const n=await r.setReaction({conversation:k,parentMessageId:e,emoji:t,action:o});if(Ae(),!n.ok)throw st("messages.setReaction",h[n.reason]);return Object.freeze({messageId:e,eventId:n.event.id,emoji:n.event.emoji,action:0===n.event.action?"add":"remove"})},replaceInterruptedFile:async(e,t,o={})=>{if(Ae(),tt("messages.replaceInterruptedFile"),t.size>R)return Ze("IM_SDK_FILE_TOO_LARGE","validation","messages.replaceInterruptedFile");if(void 0!==o.caption&&""!==o.caption)return Ze("IM_SDK_FILE_CAPTION_UNSUPPORTED","unsupported","messages.replaceInterruptedFile");const n=o.fileName??("name"in t?t.name:void 0);return"string"!=typeof n||""===n.trim()?Ze("IM_SDK_FILE_NAME_REQUIRED","validation","messages.replaceInterruptedFile"):mt("messages.replaceInterruptedFile",e,"file",t,{...o,fileName:n},r.replaceFile)},editText:async(e,t,o={})=>{Ae(),tt("messages.editText"),at(e,"messages.editText"),O(r.domainState,k,e,"messages.editText");const n=A(k,e,t,o);if("code"in n)throw ot(n);let i;try{i=await r.editMessage(n)}catch(e){throw ot(a(e,"messages.editText",k))}if(Ae(),!i.ok)throw st("messages.editText",T[i.reason]);return s(at(e,"messages.editText"))},recall:async e=>{let t;Ae(),tt("messages.recall"),at(e,"messages.recall"),O(r.domainState,k,e,"messages.recall");try{t=await r.recallMessage({...k,messageId:e})}catch(e){throw ot(a(e,"messages.recall",k))}if(Ae(),!t.ok)throw st("messages.recall",D[t.reason])},deleteLocal:async e=>{Ae(),tt("messages.deleteLocal"),O(r.domainState,k,e,"messages.deleteLocal");const t=r.domainState.getConversationMessage(k,e);if(r.isOutboxOwned(e))throw it("IM_SDK_LOCAL_DELETE_OUTBOX_OWNED");if(void 0!==t&&t.conversationType===k.conversationType&&t.conversationId===k.conversationId&&("pending"===t.status||"uploading"===t.status||"sending"===t.status))throw it("IM_SDK_LOCAL_DELETE_MESSAGE_IN_FLIGHT");try{r.invalidateHistory?.(k);const t=await r.domainState.deleteLocalMessage(k,e);return Ae(),Object.freeze({scope:"local-only",messageId:e,deleted:t,remoteHistory:"remote-history-may-restore"})}catch(e){if(e instanceof Error&&"code"in e&&"IM_MESSAGE_PINNED"===e.code)throw it("IM_SDK_MESSAGE_PINNED",e);if(e instanceof Error&&"ImLocalMessageDeletionError"===e.name)throw e;throw it("IM_SDK_LOCAL_DELETE_FAILED",e)}},forward:async(e,t)=>{if(Ae(),tt("messages.forward"),0===e.length||0===t.length)throw ot(n({code:"IM_SDK_FORWARD_EMPTY_INPUT",category:"validation",operation:"messages.forward",retryable:!1,conversation:k}));return nt("messages.forward",e.map(e=>({id:e,...k})),t)},forwardMediaAlbumItem:async(e,t,o)=>{Ae(),tt("messages.forwardMediaAlbumItem");const r="messages.forwardMediaAlbumItem";if(""===e.trim()||0===o.length)throw ot(n({code:"IM_SDK_FORWARD_EMPTY_INPUT",category:"validation",operation:r,retryable:!1,conversation:k}));if(!Number.isInteger(t)||t<0)throw ot(n({code:"IM_SDK_MEDIA_ALBUM_ITEM_INVALID",category:"validation",operation:r,retryable:!1,conversation:k,details:{itemIndex:t}}));return nt(r,[{id:e,...k,itemIndex:t}],o)},fetchByIds:async e=>{Ae();const t=r.fetchMessagesByIdBatch;if(void 0===t)throw ot(n({code:"IM_SDK_MESSAGE_LOOKUP_UNSUPPORTED",category:"unsupported",operation:"messages.fetchByIds",retryable:!1,conversation:k}));const o=r.beginReceiving?.();try{const o=await l({messageIds:e,fetchBatch:t,isCurrent:()=>!Q,projectMessage:Oe});return Object.freeze({messages:Object.freeze([...o.messages]),missingMessageIds:Object.freeze([...o.missingMessageIds]),unresolvedMessageIds:Object.freeze([...o.unresolvedMessageIds]),...void 0===o.failure?{}:{failure:Object.freeze(o.failure)}})}finally{o?.()}}},draft:{get:async()=>(Ae(),"customerService"===k.conversationType?null:r.drafts.get(k)),save:async e=>{if(Ae(),"customerService"===k.conversationType)throw new Error("客服会话不支持草稿");return r.drafts.save(k,e)},clear:async()=>{Ae(),"customerService"!==k.conversationType&&await r.drafts.clear(k)},subscribe:e=>(Ae(),H.add(e),()=>H.delete(e))},markRead:async e=>{Ae();const t=F.window.list();if(void 0!==e&&!t.some(t=>t.id===e))throw new Error(`待标记已读消息不存在或不属于当前 handle 窗口:${e}`);const o=void 0===b.resolveReadMessageId?e??t.at(-1)?.id:b.resolveReadMessageId(t,e);void 0!==o&&await r.markRead({...k,readCursor:o})},markConversationRead:async()=>{if(Ae(),void 0===r.markConversationRead)throw new Error("当前会话未装配整会话已读能力");const e=Ee,t=await async function(){if(Me){const e=/* @__PURE__ */new Map,t=r.domainState.getLoadedMessagesByConversation(k);for(const o of[we,...t])void 0!==o&&e.set(o.id,r.domainState.getConversationMessage(k,o.id)??o);return je([...e.values()].sort((e,t)=>e.sortKey.localeCompare(t.sortKey))),we?.id}const e=Ee,t=r.domainState.createMessageWindow(G);try{const o=await t.window.open(k,{limit:x});if(Ae(),o.stale)throw new Error("无法确认会话最新已读边界");if(xe(t.window)){const e=await t.window.loadOlder({limit:x,establishLatestOnly:!0});if(Ae(),e.stale)throw new Error("无法确认会话远端最新已读边界")}if(e!==Ee)throw new DOMException("会话已读确认已失效","AbortError");je(t.window.list()),Me=!0;const r=t.window.list();return void 0===b.resolveReadMessageId?r.at(-1)?.id:b.resolveReadMessageId(r)}finally{t.dispose()}}();if(Ae(),e!==Ee)throw new DOMException("会话已读确认已失效","AbortError");if("channel"===k.conversationType&&void 0===t&&F.window.list().length>0)throw new Error("当前频道缺少可信的最新已读消息");if(void 0!==t&&void 0===r.domainState.getConversationMessage(k,t)){const o=we?.id===t?we:void 0;if(void 0===o)throw new Error("缺少会话最新已读边界的消息证明");pe??(pe=r.domainState.createMessageWindow({retention:{maxMessages:x}}));const n=await pe.window.openAt(k,{anchorSortKey:o.sortKey,limit:x,seedMessages:[o],seedHasNewer:!1});if(Ae(),n.stale||e!==Ee)throw new DOMException("会话已读确认已失效","AbortError")}await r.markConversationRead(k,t)},markVisibleMessages:async e=>{if(Ae(),void 0===r.markVisibleMessages)throw new Error("当前会话未装配可见消息回执能力");const t=[...new Set(e)];if(t.some(e=>!F.window.list().some(t=>t.id===e)))throw new Error("可见回执包含当前连续窗口之外的消息");t.length>0&&await r.markVisibleMessages(k,t)},setMuted:async e=>(Ae(),r.setMuted(k,e)),close(){Q||(Q=!0,Se.abort(),ue(),Be(),B.clear(),H.clear(),he.clear(),pe?.dispose(),F.dispose())}};return M.set(vt,{getMessages:()=>(Ae(),F.window.list()),resolveMessage:async e=>(Ae(),F.window.list().find(t=>t.id===e)??r.domainState.resolveConversationMessage(k,e))}),vt}async function k(e,t,o={}){let r,a,s=!1;function i(){const o=Date.now();if(void 0!==r&&o-r.checkedAt<5e3)return Promise.resolve(r.value);if(void 0!==a)return a;const n=t.getRelationship(e.conversationId).then(e=>(r={value:e,checkedAt:Date.now()},e)).catch(e=>(s=!0,t.emitter.emit({type:"error",error:{scope:"http",message:"direct 发送前关系查询失败,已降级为服务端 ACK 裁决",cause:e}}),r={value:"unknown",checkedAt:Date.now()},"unknown")).finally(()=>{a===n&&(a=void 0)});return a=n,n}t.shouldCheckRelationship()&&i();const d=await U(e,t,(e,t,o)=>void 0!==o.mentions&&o.mentions.length>0?n({code:"IM_SDK_DIRECT_MENTION_UNSUPPORTED",category:"unsupported",operation:"messages.sendText",retryable:!1,conversation:e}):{...e,text:t,encrypted:!0,...void 0===o.replyToMessageId?{}:{refMessageId:o.replyToMessageId}},(e,t,o,r)=>void 0!==r.mentions&&r.mentions.length>0?n({code:"IM_SDK_DIRECT_MENTION_UNSUPPORTED",category:"unsupported",operation:"messages.editText",retryable:!1,conversation:e}):{...e,messageId:t,text:o},{getSendPermissionError:async function(o){if(!t.shouldCheckRelationship())return;const r=await i();if("friend"!==r){if("unknown"!==r)return n({code:"IM_SDK_DIRECT_CONTACT_REQUIRED",category:"permission",operation:o,retryable:!1,conversation:e,details:Object.freeze({relationship:r})});s||(s=!0,t.emitter.emit({type:"error",error:{scope:"protocol",message:"direct 发送前关系状态未知,已降级为服务端 ACK 裁决",cause:{conversation:e,relationship:r}}}))}},appendTextPermissionFailure:t.appendContactRequiredTextFailure},o),c={...d,messages:{...d.messages,async markMediaConsumed(o){const r=t.domainState.getConversationMessage(e,o);if(void 0===r||r.senderId===t.getSelfId()||"voice"!==r.contentType&&"video"!==r.contentType){const t=n({code:"IM_SDK_MEDIA_CONSUMPTION_MESSAGE_INVALID",category:"validation",operation:"messages.markMediaConsumed",retryable:!1,conversation:e});throw Object.assign(new Error(t.code),t)}await t.markDirectMediaConsumed(e.conversationId,o)}}};return S(c,d),c}async function x(e,t,o={}){return U(e,t,(e,t,o)=>{const n=r(o.mentions);return{...e,text:t,encrypted:!0,...void 0===n?{}:{mention:n},...void 0===o.replyToMessageId?{}:{refMessageId:o.replyToMessageId}}},(e,t,o,n)=>{const a=r(n.mentions);return{...e,messageId:t,text:o,...void 0===a?{}:{mention:a}}},{getSendPermissionError:t.getSendPermissionError,recheckSendPermissionError:t.getSendPermissionError,shouldEstablishRemoteLatestOnOpen:r=>("first-unread"===o.initialPosition||!0===o.captureEntryUnread)&&void 0!==t.domainState.getConversationContext(e)&&j(r,t.pageSize??30)},o)}async function G(e,t,o={}){return U(e,t,(e,t,o)=>void 0!==o.mentions&&o.mentions.length>0?n({code:"IM_SDK_DIRECT_MENTION_UNSUPPORTED",category:"unsupported",operation:"messages.sendText",retryable:!1,conversation:e}):{...e,text:t,encrypted:!1,...void 0===o.replyToMessageId?{}:{refMessageId:o.replyToMessageId}},(e,t,o,r)=>void 0!==r.mentions&&r.mentions.length>0?n({code:"IM_SDK_DIRECT_MENTION_UNSUPPORTED",category:"unsupported",operation:"messages.editText",retryable:!1,conversation:e}):{...e,messageId:t,text:o},{shouldEstablishRemoteLatestOnOpen:()=>!1},o)}const F=/* @__PURE__ */new Set(["pending","uploading","sending"]);function j(e,t){return e.length<t}function V(e){const t=e.extensions?.historyCursor;return"string"==typeof t&&""!==t.trim()}async function z(e,t,o={}){const n=await U(e,t,(e,t,o)=>{const n=r(o.mentions);return{...e,text:t,encrypted:!0,...void 0===n?{}:{mention:n},...void 0===o.replyToMessageId?{}:{refMessageId:o.replyToMessageId}}},(e,t,o,n)=>{const a=r(n.mentions);return{...e,messageId:t,text:o,...void 0===a?{}:{mention:a}}},{getSendPermissionError:t.getSendPermissionError,recheckSendPermissionError:t.getSendPermissionError,shouldEstablishRemoteLatestOnOpen:r=>("first-unread"===o.initialPosition||!0===o.captureEntryUnread)&&void 0!==t.domainState.getConversationContext(e)&&j(r,t.pageSize??30)||function(e,t){let o=!1;for(const r of e){const e=r.body.system;if("channel"===r.conversationType&&!0===e?.targetUserIds?.includes(t))if("channel_member_left"!==e.eventType&&"channel_member_removed"!==e.eventType){if(o&&("channel_member_joined"===e.eventType||"channel_member_invited"===e.eventType))return!0}else o=!0}return!1}(r,t.getSelfId()),reconcilePage:t.reconcilePage,resolveReadMessageId:(e,o)=>function(e,t,o){const r=void 0===o?e.length-1:e.findIndex(e=>e.id===o),n=e[r];if(void 0===n||V(n))return n?.id;const a=e.slice(0,r).findLast(e=>V(e));return void 0!==a?a.id:n.senderId===t&&F.has(n.status)?void 0:n.id}(e,t.getSelfId(),o)},o),s={...n,messages:{...n.messages,deleteForEveryone:async o=>{if(void 0===t.domainState.getConversationMessage(e,o))throw b(e,A["not-found"]);let r;O(t.domainState,e,o,"messages.deleteForEveryone");try{r=await t.deleteMessageForEveryone({...e,messageId:o})}catch(t){const o=a(t,"messages.deleteForEveryone",e);throw Object.assign(new Error(o.code,{cause:t}),o)}if(!r.ok)throw b(e,A[r.reason])}}};return S(s,n),s}async function B(e,t,o={}){const r=t=>n({code:"IM_SDK_CUSTOMER_SERVICE_READ_ONLY",category:"permission",operation:t,retryable:!1,conversation:e});return U(e,t,()=>r("messages.sendText"),()=>r("messages.edit"),{getSendPermissionError:r,recheckSendPermissionError:r},o)}export{z as createChannelConversationHandle,B as createCustomerServiceConversationHandle,k as createDirectConversationHandle,x as createGroupConversationHandle,G as createRobotConversationHandle,S as linkConversationHandleDomainAccess};
@@ -0,0 +1 @@
1
+ import{createImSdkError as e}from"./message.js";const t=/* @__PURE__ */new Set(["connection:changed","session:updated","read:updated","session:removed","draft:updated","draft:cleared","sync:complete"]);function a(t,a){const n=t?.conversationType,s=t?.conversationId;if("supergroup"===n)throw e({code:"IM_SDK_SUPERGROUP_UNSUPPORTED",category:"unsupported",operation:a,retryable:!1,conversation:t});if("direct"!==n&&"group"!==n&&"channel"!==n&&"robot"!==n&&"customerService"!==n||"string"!=typeof s||""===s.trim())throw e({code:"IM_SDK_CONVERSATION_INVALID",category:"validation",operation:a,retryable:!1,...void 0===t?{}:{conversation:t}});return Object.freeze({conversationType:n,conversationId:s})}function n(e){const t=function(e){if(void 0!==e){if("text"===e.kind)return Object.freeze({kind:"text",text:e.text});if("voice"===e.kind)return Object.freeze({kind:"voice",...void 0===e.durationMs?{}:{durationMs:e.durationMs}});if("game"===e.kind)return Object.freeze({kind:"game",gameType:e.gameType});if("call"===e.kind)return Object.freeze({kind:"call",callKind:e.callKind});if("recalled"===e.kind)return Object.freeze({kind:"recalled",by:e.by});if("channel-moderation-deleted"===e.kind)return Object.freeze({kind:"channel-moderation-deleted",by:e.by});if("filesAlbum"===e.kind)return Object.freeze({kind:"filesAlbum",count:e.count,...void 0===e.caption?{}:{caption:e.caption}});if("mediaAlbum"===e.kind)return Object.freeze({kind:"mediaAlbum",imageCount:e.imageCount,videoCount:e.videoCount,...void 0===e.caption?{}:{caption:e.caption},...void 0===e.firstItemKind?{}:{firstItemKind:e.firstItemKind}});if("system"===e.kind){const t=e.system;return Object.freeze({kind:"system",system:Object.freeze({eventType:t.eventType,...void 0===t.operatorId?{}:{operatorId:t.operatorId},...void 0===t.targetUserIds?{}:{targetUserIds:Object.freeze([...t.targetUserIds])},...void 0===t.fallbackText?{}:{fallbackText:t.fallbackText}})})}if("liveRoom"===e.kind){const t=e.title?.trim()??"";return Object.freeze(""===t?{kind:"liveRoom"}:{kind:"liveRoom",title:t})}return Object.freeze({kind:e.kind})}}(e.lastMessageSummary),n=void 0===e.lastMessageMention?void 0:Object.freeze({atAll:e.lastMessageMention.atAll,atUserIds:Object.freeze([...e.lastMessageMention.atUserIds]),...void 0===e.lastMessageMention.atUsersName?{}:{atUsersName:Object.freeze({...e.lastMessageMention.atUsersName})}}),s=void 0===e.channelPermissions?void 0:Object.freeze({...e.channelPermissions}),o=void 0===e.channelAccessSnapshot?void 0:Object.freeze({...e.channelAccessSnapshot});return Object.freeze({ref:a({conversationType:e.type,conversationId:e.id},"conversations.list"),title:e.title,...void 0===e.avatar?{}:{avatar:e.avatar},lastMessagePreview:e.lastMessagePreview,...void 0===t?{}:{lastMessageSummary:t},...void 0===e.lastMessageSenderId?{}:{lastMessageSenderId:e.lastMessageSenderId},...void 0===e.lastMessageSystemEvent?{}:{lastMessageSystemEvent:e.lastMessageSystemEvent},...void 0===e.lastMessageSystemTargetsSelf?{}:{lastMessageSystemTargetsSelf:e.lastMessageSystemTargetsSelf},...void 0===n?{}:{lastMessageMention:n},...void 0===e.lastMessageRecalled?{}:{lastMessageRecalled:Object.freeze({...e.lastMessageRecalled})},...void 0===e.lastMessageDeletedForEveryone?{}:{lastMessageDeletedForEveryone:Object.freeze({...e.lastMessageDeletedForEveryone})},...void 0===e.lastMessageSendState?{}:{lastMessageSendState:e.lastMessageSendState},...void 0===e.lastMessageReceipt?{}:{lastMessageReceipt:e.lastMessageReceipt},timestamp:e.timestamp,unreadCount:e.unreadCount>0?e.unreadCount:!0===e.manuallyUnread?1:0,...!0===e.manuallyUnread?{manuallyUnread:!0}:{},mentionUnreadCount:e.mentionUnreadCount??0,pinned:e.pinned,muted:e.muted,..."group"===e.type&&void 0!==e.groupState?{groupState:e.groupState}:{},..."channel"===e.type&&void 0!==e.channelState?{channelState:e.channelState}:{},..."channel"===e.type&&void 0!==s?{channelPermissions:s}:{},..."channel"===e.type&&void 0!==o?{channelAccessSnapshot:o}:{},draft:(r=e.draft,null===r?null:Object.freeze({ref:a(r.ref,"conversations.list"),text:r.text,mentions:Object.freeze(r.mentions.map(e=>Object.freeze({...e}))),...void 0===r.replyToMessageId?{}:{replyToMessageId:r.replyToMessageId},attachments:Object.freeze([]),updatedAt:r.updatedAt}))});var r}function s(t,a,n,s){return"object"==typeof(o=t)&&null!==o&&"string"==typeof o.code&&"string"==typeof o.category&&"string"==typeof o.operation?t:e({code:"conversations.refresh"===a?"IM_SDK_CONVERSATIONS_REFRESH_FAILED":"IM_SDK_OPERATION_FAILED",category:"state",operation:a,retryable:n,...void 0===s?{}:{conversation:s},cause:t});var o}function o(e){const o=/* @__PURE__ */new Set;let r,i,c;function d(){return Object.freeze(e.getCompatibilityApi().list().map(n))}function l(){const t=e.getSessionState();return"preparing"===t?"loading":"ready"===t?"ready":"idle"}function g(){try{const t=d();return Object.freeze({state:i??l(),items:t,totalUnread:e.getCompatibilityApi().getTotalUnread(),...void 0===c?{}:{error:Object.freeze(c)}})}catch(e){const t=s(e,"conversations.getSnapshot",!1);return Object.freeze({state:"error",items:Object.freeze([]),totalUnread:0,error:Object.freeze(t)})}}function p(){const e=g();for(const t of[...o])t(e)}return{api:{list:d,getBackground:t=>e.getCompatibilityApi().getBackground(a(t,"conversations.getBackground")),setBackground:(t,n)=>e.getCompatibilityApi().setBackground(a(t,"conversations.setBackground"),n),resetBackground:t=>e.getCompatibilityApi().resetBackground(a(t,"conversations.resetBackground")),getDefaultBackground:()=>e.getCompatibilityApi().getDefaultBackground(),setDefaultBackground:t=>e.getCompatibilityApi().setDefaultBackground(t),resetDefaultBackground:()=>e.getCompatibilityApi().resetDefaultBackground(),listBackgroundPresets:t=>e.getCompatibilityApi().listBackgroundPresets(t),getSnapshot:g,subscribe:function(a){return o.add(a),a(g()),void 0===r&&(r=e.subscribeEvents(e=>{t.has(e.type)&&p()})),()=>{o.delete(a),0===o.size&&(r?.(),r=void 0)}},prefetchRecent:(t,n)=>e.getCompatibilityApi().prefetchRecent(t.map(e=>a(e,"conversations.prefetchRecent")),n),async refresh(){i="loading",c=void 0,p();try{await e.getCompatibilityApi().sync(),i=void 0,p()}catch(e){throw i="error",c=s(e,"conversations.refresh",!0),p(),c}},getTotalUnread:t=>(d(),e.getCompatibilityApi().getTotalUnread(t)),setPinned(t,n){const o=a(t,"conversations.setPinned");try{e.getCompatibilityApi().setPinned(o,n)}catch(e){throw s(e,"conversations.setPinned",!1,o)}},async setMuted(t,n){const o=a(t,"conversations.setMuted");try{await e.getCompatibilityApi().setMuted(o,n)}catch(e){throw s(e,"conversations.setMuted",!0,o)}},async markRead(t){const n=a(t,"conversations.markRead");try{await e.getCompatibilityApi().markConversationRead(n)}catch(e){throw s(e,"conversations.markRead",!0,n)}},markUnread(t){const n=a(t,"conversations.markUnread");try{e.getCompatibilityApi().markConversationUnread(n)}catch(e){throw s(e,"conversations.markUnread",!1,n)}},deleteLocal(t){const n=a(t,"conversations.deleteLocal");try{e.getCompatibilityApi().deleteConversation(n)}catch(e){throw s(e,"conversations.deleteLocal",!1,n)}}},dispose(){r?.(),r=void 0,o.clear()}}}export{o as createProductConversationsApi,n as toProductConversationListItem};
@@ -0,0 +1 @@
1
+ import{createImSdkError as e}from"./message.js";function t(t){const o=e(t);return Object.assign(new Error(o.code),o,{name:"ImCustomerServiceError"})}function o(e,o,r){return function(e){if(null===e||"object"!=typeof e)return!1;const t=e;return"string"==typeof t.code&&"string"==typeof t.operation&&"boolean"==typeof t.retryable&&["auth","network","protocol","permission","validation","state","unsupported","contract"].includes(t.category??"")}(e)?e instanceof Error?e:t(e):t({code:r,category:"network",operation:o,retryable:!0,cause:e})}function r(e){const r=/* @__PURE__ */new Map,n=/* @__PURE__ */new Map;let a,i=0;function c(o){if(!e.isActive())throw t({code:"IM_SDK_CUSTOMER_SERVICE_ACCOUNT_UNAVAILABLE",category:"state",operation:o,retryable:!1})}function s(e){const o="customerService.downloadFile";if(c(o),e?.aborted)throw t({code:"IM_SDK_CUSTOMER_SERVICE_CANCELLED",category:"state",operation:o,retryable:!1})}function E(e){const o="customerService.getProfile";if(c(o),e!==i)throw t({code:"IM_SDK_CUSTOMER_SERVICE_PROFILE_INVALIDATED",category:"state",operation:o,retryable:!1})}return{api:{async downloadFile(r){const n="customerService.downloadFile";if(s(r?.signal),"string"!=typeof r?.messageId||""===r.messageId.trim()||!Number.isInteger(r.itemIndex)||r.itemIndex<0)throw t({code:"IM_SDK_CUSTOMER_SERVICE_INVALID_FILE",category:"validation",operation:n,retryable:!1});try{const t=await e.download(r);return s(r.signal),t}catch(e){if(s(r.signal),e instanceof Error&&"AbortError"===e.name)throw t({code:"IM_SDK_CUSTOMER_SERVICE_CANCELLED",category:"state",operation:n,retryable:!1,cause:e});throw o(e,n,"IM_SDK_CUSTOMER_SERVICE_DOWNLOAD_FAILED")}},async getProfile(c){const s="customerService.getProfile",l=i;if(E(l),!Number.isInteger(c)||c<1||c>5)throw t({code:"IM_SDK_CUSTOMER_SERVICE_INVALID_LANGUAGE",category:"validation",operation:s,retryable:!1});let _;a=c;try{let t=r.get(c);return void 0===t&&(_=n.get(c),void 0===_&&(_=e.load(c).then(e=>Object.freeze({...e})),n.set(c,_)),t=await _,E(l),r.set(c,t)),a===c&&e.update(t),E(l),t}catch(e){throw E(l),o(e,s,"IM_SDK_CUSTOMER_SERVICE_PROFILE_FAILED")}finally{void 0!==_&&n.get(c)===_&&n.delete(c)}}},clearCache(){i++,a=void 0,r.clear(),n.clear()}}}export{r as createCustomerServiceApi,t as createCustomerServiceError};
@@ -0,0 +1 @@
1
+ const e=new TextEncoder;function t(e,t,o){if(void 0===e)return t;if(!Number.isSafeInteger(e)||e<=0)throw new RangeError(`${o} 必须为正安全整数`);return e}function o(e,t=/* @__PURE__ */new WeakSet){if("object"!=typeof e||null===e||t.has(e))return e;t.add(e);for(const n of Object.values(e))o(n,t);return Object.freeze(e)}function n(n={}){const r=t(n.maxRecords,200,"maxRecords"),i=t(n.maxEstimatedBytes,4194304,"maxEstimatedBytes"),s=/* @__PURE__ */new Set,a=[];let c=0,d=0,u=!1;function f(e){const t=a.map(e=>e.record).filter(t=>void 0===e||function(e,t){return!(void 0!==t.accountId&&e.accountId!==t.accountId||void 0!==t.generation&&e.generation!==t.generation||void 0!==t.category&&e.category!==t.category||void 0!==t.traceId&&e.traceId!==t.traceId||void 0!==t.operationId&&e.operationId!==t.operationId||void 0!==t.messageId&&function(e){if(void 0!==e.message?.id)return e.message.id;if("object"!=typeof e.data||null===e.data)return;const t=e.data.messageId;return"string"==typeof t?t:void 0}(e)!==t.messageId||void 0!==t.fromTimestamp&&e.timestamp<t.fromTimestamp||void 0!==t.toTimestamp&&e.timestamp>t.toTimestamp||void 0!==t.conversation&&(e.conversation?.conversationType!==t.conversation.conversationType||e.conversation.conversationId!==t.conversation.conversationId))}(t,e));return Object.freeze({records:Object.freeze(t),droppedCount:d,estimatedBytes:c,disposed:u})}function m(){const e=f();for(const t of s)try{t(e)}catch{}}function v(){a.length=0,c=0,d=0}return{write(t){if(u)return;const n=function(t){try{const n=structuredClone(t),r=JSON.stringify(n);if(void 0===r)return;return{record:o(n),estimatedBytes:e.encode(r).byteLength}}catch{return}}(t);if(void 0===n||n.estimatedBytes>i)return d+=1,void m();for(a.push(n),c+=n.estimatedBytes;a.length>r||c>i;){const e=a.shift();if(void 0===e)break;c-=e.estimatedBytes,d+=1}m()},getSnapshot:f,subscribe(e){if(u)return()=>{};s.add(e);let t=!0;return()=>{t&&(t=!1,s.delete(e))}},clear(){u||(v(),m())},dispose(){u||(u=!0,v(),s.clear())}}}export{n as createImDiagnosticMemoryBuffer};
@@ -0,0 +1 @@
1
+ import{createImDiagnosticWriter as e}from"../../../im-core/src/diagnostics.js";function o(e){const o={...void 0===e.body.text?{}:{text:e.body.text},...void 0===e.body.system?{}:{system:e.body.system},...void 0===e.body.image?{}:{image:{url:e.body.image.url,width:e.body.image.width,height:e.body.image.height,...void 0===e.body.image.md5?{}:{md5:e.body.image.md5},...void 0===e.body.image.imageType?{}:{imageType:e.body.image.imageType},...void 0===e.body.image.size?{}:{size:e.body.image.size}}},...void 0===e.body.video?{}:{video:{url:e.body.video.url,width:e.body.video.width,height:e.body.video.height,...void 0===e.body.video.duration?{}:{duration:e.body.video.duration},...void 0===e.body.video.md5?{}:{md5:e.body.video.md5},...void 0===e.body.video.size?{}:{size:e.body.video.size},...void 0===e.body.video.describe?{}:{describe:e.body.video.describe}}},...void 0===e.body.voice?{}:{voice:{url:e.body.voice.url,durationMs:e.body.voice.durationMs,...void 0===e.body.voice.md5?{}:{md5:e.body.voice.md5},...void 0===e.body.voice.size?{}:{size:e.body.voice.size},...void 0===e.body.voice.waveform?{}:{waveform:[...e.body.voice.waveform]}}},...void 0===e.body.file?{}:{file:{url:e.body.file.url,fileName:e.body.file.fileName,...void 0===e.body.file.size?{}:{size:e.body.file.size},...void 0===e.body.file.extension?{}:{extension:e.body.file.extension},...void 0===e.body.file.fileType?{}:{fileType:e.body.file.fileType},...void 0===e.body.file.mimeType?{}:{mimeType:e.body.file.mimeType},...void 0===e.body.file.md5?{}:{md5:e.body.file.md5}}},...void 0===e.body.sticker?{}:{sticker:{url:e.body.sticker.url,width:e.body.sticker.width,height:e.body.sticker.height,exprType:e.body.sticker.exprType,imageType:e.body.sticker.imageType,...void 0===e.body.sticker.size?{}:{size:e.body.sticker.size},...void 0===e.body.sticker.describe?{}:{describe:e.body.sticker.describe},...void 0===e.body.sticker.contentId?{}:{contentId:e.body.sticker.contentId},...void 0===e.body.sticker.packageName?{}:{packageName:e.body.sticker.packageName}}},...void 0===e.body.contact?{}:{contact:e.body.contact},...void 0===e.body.unknown?{}:{unknown:e.body.unknown}};return{id:e.id,conversationId:e.conversationId,conversationType:e.conversationType,senderId:e.senderId,contentType:e.contentType,body:o,createdAt:e.createdAt,status:e.status,...void 0===e.failure?{}:{failure:e.failure},...void 0===e.serverTime?{}:{serverTime:e.serverTime},receipt:e.receipt,encryption:e.encryption,...void 0===e.mention?{}:{mention:e.mention},...void 0===e.refMessageId?{}:{refMessageId:e.refMessageId},...void 0===e.edited?{}:{edited:e.edited},...void 0===e.recalled?{}:{recalled:e.recalled},...void 0===e.deletedForEveryone?{}:{deletedForEveryone:e.deletedForEveryone}}}const i=Object.freeze(["session","connection","protocol","sync","conversation","history","message","outbox","draft","search","media","profile","storage","crypto","call"]);function d(){return{write(e){("error"===e.level?console.error:"warn"===e.level?console.warn:"info"===e.level?console.info:console.debug)("[im]",e)}}}function t(o,t){const r=!0===o||"object"==typeof o&&o.enabled,y="object"==typeof o?o:void 0,n=d();return e({enabled:r,level:y?.level??"trace",categories:y?.categories??i,...r?{sink:y?.sink??n,fallbackSink:n}:{},getRuntimeContext:t})}export{i as IM_DIAGNOSTIC_CATEGORIES,d as createImConsoleDiagnosticSink,t as createSdkDiagnosticWriter,o as toImDiagnosticMessage};
@@ -0,0 +1 @@
1
+ import{createImTextSearchMatcher as e}from"../../../im-core/src/mapping/search-text.js";let r=0;function t(e){return"individual"===e?"联系人":"group"===e?"群组":"社群"}function n(e,r){return Object.freeze({field:e,method:r.method,ranges:r.ranges})}function i(i){const o=++r,a=/* @__PURE__ */new Map,s=/* @__PURE__ */new Map,c=/* @__PURE__ */new Map,d=/* @__PURE__ */new Map,u=/* @__PURE__ */new Map;let f=0,p=!0;function l(){if(!p)throw new Error("名片目录运行时已释放")}function g(e,r){let t=u.get(e);void 0===t&&(t=/* @__PURE__ */new Map,u.set(e,t));const n=r.map(e=>Object.freeze({...e}));for(const e of n)t.set(e.id,e);return Object.freeze(n)}async function m(e,r,n){if(l(),void 0===i.provider)throw new Error(`${t(e)}目录能力未启用:需配置 coreApi 或 directory provider`);const s=await i.provider.list({kind:e,page:r,pageSize:n});if(l(),s.exhausted===(void 0!==s.nextPage))throw new Error(`${t(e)}目录分页合同不一致`);const c=void 0===s.nextPage?void 0:function(e){const r=`im-directory:${o}:${++f}`;return a.set(r,e),r}({kind:e,page:s.nextPage,pageSize:n}),d=g(e,s.items);return Object.freeze({items:d,...void 0===c?{}:{nextPageToken:c},exhausted:s.exhausted})}function w(e){return{listFirstPage:r=>m(e,1,function(e){const r=e??40;if(!Number.isSafeInteger(r)||r<1||r>100)throw new Error("名片目录 pageSize 必须是 1-100 的整数");return r}(r?.pageSize)),listNextPage:r=>{l();const n=a.get(r);if(void 0===n)return Promise.reject(new Error("名片目录 token 无效或已过期"));if(n.kind!==e)return Promise.reject(new Error(`名片目录 token 属于${t(n.kind)},不能用于${t(e)}`));const i=s.get(r);if(void 0!==i)return i;const o=m(e,n.page,n.pageSize).then(e=>(a.delete(r),e)).finally(()=>{s.delete(r)});return s.set(r,o),o}}}function h(e){l();const r=c.get(e);if(void 0!==r)return Promise.resolve(r);const n=d.get(e);if(void 0!==n)return n;if(void 0===i.provider)return Promise.reject(new Error(`${t(e)}目录能力未启用:需配置 coreApi 或 directory provider`));const o=(async()=>{const r=[],n=/* @__PURE__ */new Map,o=/* @__PURE__ */new Set;let a=1;for(;;){if(l(),o.has(a))throw new Error(`${t(e)}目录分页出现循环`);o.add(a);const s=await i.provider.list({kind:e,page:a,pageSize:100});if(l(),s.exhausted===(void 0!==s.nextPage))throw new Error(`${t(e)}目录分页合同不一致`);for(const e of s.items)n.has(e.id)||r.push(e.id),n.set(e.id,e);if(void 0===s.nextPage)break;if(!Number.isSafeInteger(s.nextPage)||s.nextPage<1)throw new Error(`${t(e)}目录下一页页码无效`);a=s.nextPage}const s=g(e,r.map(e=>n.get(e)));return l(),c.set(e,s),s})().finally(()=>{d.delete(e)});return d.set(e,o),o}return{contacts:w("individual"),groups:w("group"),channels:w("channel"),search:{search:async function(r){if(l(),""===r.trim())throw new Error("通讯录搜索关键词不能为空");const[t,i,o,a]=await Promise.all([h("individual"),h("group"),h("channel"),e(r)]);function s(e,r){return Object.freeze(e.flatMap(e=>{const t=function(e,r){const t=[];for(const i of r){const r="displayName"===i?e.displayName:"username"===i?e.username:e.id;if(void 0===r||""===r)continue;const o=a.match(r,{pinyin:"displayName"===i});null!==o&&t.push(n(i,o))}return 0===t.length?null:Object.freeze({item:e,matches:Object.freeze(t)})}(e,r);return null===t?[]:[t]}))}return l(),Object.freeze({keyword:a.keyword,contacts:s(t,["displayName","username","id"]),groups:s(i,["displayName"]),channels:s(o,["displayName"])})}},peekItem:(e,r)=>(l(),u.get(e)?.get(r)),dispose:()=>{p=!1,a.clear(),s.clear(),c.clear(),d.clear(),u.clear()}}}export{i as createDirectoryRuntime};
@@ -0,0 +1 @@
1
+ import{createImSdkError as e}from"./message.js";function t(t){return function(t){if("supergroup"===t.conversationType)throw e({code:"IM_SDK_SUPERGROUP_UNSUPPORTED",category:"unsupported",operation:"drafts",retryable:!1,conversation:t});if(""===t.conversationId.trim())throw e({code:"IM_SDK_DRAFT_CONVERSATION_INVALID",category:"validation",operation:"drafts",retryable:!1,conversation:t})}(t),Object.freeze({conversationType:t.conversationType,conversationId:t.conversationId})}function o(o){const r=/* @__PURE__ */new Set;function n(){if(!o.isActive())throw new Error("IM SDK 账号运行时已释放,不能操作草稿")}return{api:{get:async e=>(n(),o.domainState.getDraft(t(e))),async save(r,a){if(n(),"customerService"===r.conversationType)throw e({code:"IM_SDK_CUSTOMER_SERVICE_READ_ONLY",category:"permission",operation:"drafts.save",retryable:!1,conversation:r});const s=t(r);return o.domainState.saveDraft(s,function(t,o){const r=o.attachments;if(void 0!==r&&r.length>0)throw e({code:"IM_SDK_DRAFT_ATTACHMENTS_UNSUPPORTED",category:"unsupported",operation:"drafts.save",retryable:!1,conversation:t});return{text:o.text,...void 0===o.mentions?{}:{mentions:o.mentions},...void 0===o.replyToMessageId?{}:{replyToMessageId:o.replyToMessageId},attachments:[]}}(s,a))},async clear(e){n(),await o.domainState.clearDraft(t(e))},subscribe(e,a){n();const s=t(e),i=o.emitter.subscribe(e=>{"draft:updated"!==e.type&&"draft:cleared"!==e.type||e.conversation.conversationType===s.conversationType&&e.conversation.conversationId===s.conversationId&&a("draft:updated"===e.type?e.draft:null)}),c=()=>{i(),r.delete(c)};return r.add(c),c}},dispose(){for(const e of[...r])e()}}}export{o as createDraftsRuntime};
@@ -0,0 +1 @@
1
+ import e from"./emoji-catalog.json.js";const t=Object.freeze(e.map(e=>Object.freeze({...e,tokens:Object.freeze([...e.tokens])}))),n=new Map(t.flatMap(e=>e.tokens.map(t=>[t,e])));function o(e){return n.get(e)}function r(e){return n.has(e)}export{t as IM_EMOJI_CATALOG,r as isImReactionEmojiToken,o as resolveImEmojiToken};
@@ -0,0 +1 @@
1
+ const e=/* @__PURE__ */JSON.parse('[{"code":"666","tokens":["[666]"],"file":"666.webp"},{"code":"AlmostCrying","tokens":["[AlmostCrying]","[要哭了]"],"file":"AlmostCrying.webp"},{"code":"Amazed","tokens":["[Amazed]","[惊讶]"],"file":"Amazed.webp"},{"code":"Anger","tokens":["[Anger]","[愤怒]"],"file":"Anger.webp"},{"code":"Arrogance","tokens":["[Arrogance]","[傲慢]"],"file":"Arrogance.webp"},{"code":"BearCried","tokens":["[BearCried]","[熊哭了]"],"file":"BearCried.webp"},{"code":"Bearish","tokens":["[Bearish]","[看跌]"],"file":"Bearish.webp"},{"code":"Bitter","tokens":["[Bitter]","[苦涩]"],"file":"Bitter.webp"},{"code":"Blink","tokens":["[Blink]","[眨眼]"],"file":"Blink.webp"},{"code":"Block","tokens":["[Block]","[方块]"],"file":"Block.webp"},{"code":"blush","tokens":["[blush]","[脸红]"],"file":"blush.webp"},{"code":"Bomb","tokens":["[Bomb]","[炸弹]"],"file":"Bomb.webp"},{"code":"Bullish","tokens":["[Bullish]","[看涨]"],"file":"Bullish.webp"},{"code":"BullMarket","tokens":["[BullMarket]","[牛市]"],"file":"BullMarket.webp"},{"code":"Cake","tokens":["[Cake]","[生日蛋糕]"],"file":"Cake.webp"},{"code":"Candy","tokens":["[Candy]","[糖果]"],"file":"Candy.webp"},{"code":"Celebration","tokens":["[Celebration]","[庆祝]"],"file":"Celebration.webp"},{"code":"Cheers","tokens":["[Cheers]","[干杯]"],"file":"Cheers.webp"},{"code":"Coffee","tokens":["[Coffee]","[咖啡]"],"file":"Coffee.webp"},{"code":"Cold","tokens":["[Cold]","[感冒]"],"file":"Cold.webp"},{"code":"Contemplation","tokens":["[Contemplation]","[鄙视]"],"file":"Contemplation.webp"},{"code":"Cool","tokens":["[Cool]","[酷]"],"file":"Cool.webp"},{"code":"Coveryourface","tokens":["[Coveryourface]","[捂脸]"],"file":"Coveryourface.webp"},{"code":"Cracking","tokens":["[Cracking]","[裂开]"],"file":"Cracking.webp"},{"code":"Crying","tokens":["[Crying]","[大哭]"],"file":"Crying.webp"},{"code":"Decline","tokens":["[Decline]","[衰]"],"file":"Decline.webp"},{"code":"Disappointed","tokens":["[Disappointed]","[失望]"],"file":"Disappointed.webp"},{"code":"Doghead","tokens":["[Doghead]","[狗头]"],"file":"Doghead.webp"},{"code":"Dull","tokens":["[Dull]","[呆滞]"],"file":"Dull.webp"},{"code":"EatingMelons","tokens":["[EatingMelons]","[吃瓜]"],"file":"EatingMelons.webp"},{"code":"Embrace","tokens":["[Embrace]","[拥抱]"],"file":"Embrace.webp"},{"code":"Faint","tokens":["[Faint]","[晕]"],"file":"Faint.webp"},{"code":"Farce","tokens":["[Farce]","[闹剧]"],"file":"Farce.webp"},{"code":"Favorite","tokens":["[Favorite]","[喜爱]"],"file":"Favorite.webp"},{"code":"Fear","tokens":["[Fear]","[恐惧]"],"file":"Fear.webp"},{"code":"Firecrackers","tokens":["[Firecrackers]","[爆竹]"],"file":"Firecrackers.webp"},{"code":"Fireworks","tokens":["[Fireworks]","[烟花]"],"file":"Fireworks.webp"},{"code":"FlyingKiss","tokens":["[FlyingKiss]","[飞吻]"],"file":"FlyingKiss.webp"},{"code":"Fortune","tokens":["[Fortune]","[福]"],"file":"Fortune.webp"},{"code":"Frowns","tokens":["[Frowns]","[皱眉]"],"file":"Frowns.webp"},{"code":"Gift","tokens":["[Gift]","[礼物]"],"file":"Gift.webp"},{"code":"Giggle","tokens":["[Giggle]","[傻笑]"],"file":"Giggle.webp"},{"code":"Goodbye","tokens":["[Goodbye]","[拜拜]"],"file":"Goodbye.webp"},{"code":"Great","tokens":["[Great]","[赞]"],"file":"Great.webp"},{"code":"Grieve","tokens":["[Grieve]","[伤心]"],"file":"Grieve.webp"},{"code":"Handshake","tokens":["[Handshake]","[握手]"],"file":"Handshake.webp"},{"code":"Harvesting","tokens":["[Harvesting]","[收割]"],"file":"Harvesting.webp"},{"code":"Heartbreak","tokens":["[Heartbreak]","[心碎]"],"file":"Heartbreak.webp"},{"code":"Heidi","tokens":["[Heidi]","[海蒂]"],"file":"Heidi.webp"},{"code":"Heyha","tokens":["[Heyha]","[嘿哈]"],"file":"Heyha.webp"},{"code":"Hugging","tokens":["[Hugging]","[抱拳]"],"file":"Hugging.webp"},{"code":"Idle","tokens":["[Idle]","[长草]"],"file":"Idle.webp"},{"code":"Injustice","tokens":["[Injustice]","[委屈]"],"file":"Injustice.webp"},{"code":"Knife","tokens":["[Knife]","[菜刀]"],"file":"Knife.webp"},{"code":"Laughingawkwardly","tokens":["[Laughingawkwardly]","[尬笑]"],"file":"Laughingawkwardly.webp"},{"code":"LaughingCrying","tokens":["[LaughingCrying]","[笑哭]"],"file":"LaughingCrying.webp"},{"code":"Laughing","tokens":["[Laughing]","[大笑]"],"file":"Laughing.webp"},{"code":"Lips","tokens":["[Lips]","[嘴唇]"],"file":"Lips.webp"},{"code":"Lockbox","tokens":["[Lockbox]","[锁箱]"],"file":"Lockbox.webp"},{"code":"Lostinthought","tokens":["[Lostinthought]","[发呆]"],"file":"Lostinthought.webp"},{"code":"Love","tokens":["[Love]","[爱心]"],"file":"Love.webp"},{"code":"Mahjong","tokens":["[Mahjong]","[麻将]"],"file":"Mahjong.webp"},{"code":"Mischievous","tokens":["[Mischievous]","[调皮]"],"file":"Mischievous.webp"},{"code":"Money","tokens":["[Money]","[金钱]"],"file":"Money.webp"},{"code":"Moon","tokens":["[Moon]","[月亮]"],"file":"Moon.webp"},{"code":"MovingBricks","tokens":["[MovingBricks]","[搬砖]"],"file":"MovingBricks.webp"},{"code":"Nosepicking","tokens":["[Nosepicking]","[抠鼻]"],"file":"Nosepicking.webp"},{"code":"OK","tokens":["[OK]"],"file":"OK.webp"},{"code":"Palmtogether","tokens":["[Palmtogether]","[合掌]"],"file":"Palmtogether.webp"},{"code":"Parachute","tokens":["[Parachute]","[降落伞]"],"file":"Parachute.webp"},{"code":"Pig","tokens":["[Pig]","[猪]"],"file":"Pig.webp"},{"code":"Pleasure","tokens":["[Pleasure]","[愉悦]"],"file":"Pleasure.webp"},{"code":"Poop","tokens":["[Poop]","[便便]"],"file":"Poop.webp"},{"code":"Poor","tokens":["[Poor]","[可怜]"],"file":"Poor.webp"},{"code":"Questionmark","tokens":["[Questionmark]","[问号]"],"file":"Questionmark.webp"},{"code":"Quickwitted","tokens":["[Quickwitted]","[机智]"],"file":"Quickwitted.webp"},{"code":"Received","tokens":["[Received]","[收到]"],"file":"Received.webp"},{"code":"Redenvelope","tokens":["[Redenvelope]","[红包]"],"file":"Redenvelope.webp"},{"code":"Regret","tokens":["[Regret]","[懊恼]"],"file":"Regret.webp"},{"code":"Rose","tokens":["[Rose]","[玫瑰]"],"file":"Rose.webp"},{"code":"Sad","tokens":["[Sad]","[难过]"],"file":"Sad.webp"},{"code":"Shy","tokens":["[Shy]","[害羞]"],"file":"Shy.webp"},{"code":"Sighs","tokens":["[Sighs]","[叹气]"],"file":"Sighs.webp"},{"code":"Skeleton","tokens":["[Skeleton]","[骷髅]"],"file":"Skeleton.webp"},{"code":"Sleepiness","tokens":["[Sleepiness]","[困]"],"file":"Sleepiness.webp"},{"code":"Sleep","tokens":["[Sleep]","[睡觉]"],"file":"Sleep.webp"},{"code":"smirk","tokens":["[smirk]","[奸笑]"],"file":"smirk.webp"},{"code":"Sneak","tokens":["[Sneak]","[偷笑]"],"file":"Sneak.webp"},{"code":"Society","tokens":["[Society]","[社会]"],"file":"Society.webp"},{"code":"Speechless","tokens":["[Speechless]","[无语]"],"file":"Speechless.webp"},{"code":"Step","tokens":["[Step]","[踩]"],"file":"Step.webp"},{"code":"Strike","tokens":["[Strike]","[打击]"],"file":"Strike.webp"},{"code":"Struggle","tokens":["[Struggle]","[奋斗]"],"file":"Struggle.webp"},{"code":"Sun","tokens":["[Sun]","[太阳]"],"file":"Sun.webp"},{"code":"Surprised","tokens":["[Surprised]","[吃惊]"],"file":"Surprised.webp"},{"code":"Swearing","tokens":["[Swearing]","[咒骂]"],"file":"Swearing.webp"},{"code":"Sweating","tokens":["[Sweating]","[冒汗]"],"file":"Sweating.webp"},{"code":"Sweat","tokens":["[Sweat]","[汗]"],"file":"Sweat.webp"},{"code":"Teasing","tokens":["[Teasing]","[戏弄]"],"file":"Teasing.webp"},{"code":"Trapped","tokens":["[Trapped]","[困住]"],"file":"Trapped.webp"},{"code":"Unscrupulous","tokens":["[Unscrupulous]","[阴险]"],"file":"Unscrupulous.webp"},{"code":"Vomit","tokens":["[Vomit]","[呕吐]"],"file":"Vomit.webp"},{"code":"WhiteEyes","tokens":["[WhiteEyes]","[白眼]"],"file":"WhiteEyes.webp"},{"code":"Withering","tokens":["[Withering]","[凋零]"],"file":"Withering.webp"},{"code":"Worried","tokens":["[Worried]","[担心]"],"file":"Worried.webp"},{"code":"Wow","tokens":["[Wow]","[哇]"],"file":"Wow.webp"},{"code":"Yeah2","tokens":["[Yeah2]"],"file":"Yeah2.webp"},{"code":"Yeah","tokens":["[Yeah]","[耶]"],"file":"Yeah.webp"},{"code":"ALLIN","tokens":["[ALLIN]"],"file":"ALLIN.webp"},{"code":"Dollarsfly","tokens":["[Dollarsfly]","[美元]"],"file":"Dollarsfly.webp"}]');export{e as default};
@@ -0,0 +1 @@
1
+ import{toProductMediaTaskUpdate as e}from"./media.js";import{createImSdkError as t,toProductMessage as r}from"./message.js";import{toProductOutboxUpdate as o}from"./outbox.js";import{isCryptoExecutionError as n}from"../../../im-core/src/ports/crypto-task-executor.js";function c(e){return Object.freeze({type:"error",error:Object.freeze(t(e))})}function a(e){throw t(e)}function s(e,t,r){return"string"==typeof e&&""!==e.trim()||a({code:"IM_SDK_EVENT_PAYLOAD_INVALID",category:"contract",operation:"events.project",retryable:!1,...void 0===r?{}:{conversation:r},details:Object.freeze({field:t})}),e}function p(e,t){const r=e,o=r?.conversationType,n=r?.conversationId;return"supergroup"===o&&a({code:"IM_SDK_SUPERGROUP_UNSUPPORTED",category:"unsupported",operation:"events.project",retryable:!1,conversation:{conversationType:o,conversationId:"string"==typeof n?n:""},details:Object.freeze({eventType:t})}),("direct"!==o&&"group"!==o&&"channel"!==o&&"robot"!==o&&"customerService"!==o||"string"!=typeof n||""===n.trim())&&a({code:"IM_SDK_EVENT_CONVERSATION_INVALID",category:"contract",operation:"events.project",retryable:!1,details:Object.freeze({eventType:t})}),Object.freeze({conversationType:o,conversationId:n})}function i(e,t){const r=p(e,t);return"direct"!==r.conversationType&&a({code:"IM_SDK_EVENT_CONVERSATION_INVALID",category:"contract",operation:"events.project",retryable:!1,conversation:r,details:Object.freeze({eventType:t})}),Object.freeze({conversationType:"direct",conversationId:r.conversationId})}function d(e,t){const r=p(e,t);return"group"!==r.conversationType&&a({code:"IM_SDK_EVENT_CONVERSATION_INVALID",category:"contract",operation:"events.project",retryable:!1,conversation:r,details:Object.freeze({eventType:t})}),Object.freeze({conversationType:"group",conversationId:r.conversationId})}function y(e,t,r){var o,n;n=t,((o=e).conversationType!==n.conversationType||o.conversationId!==n.conversationId)&&a({code:"IM_SDK_EVENT_CONVERSATION_MISMATCH",category:"contract",operation:"events.project",retryable:!1,conversation:t,details:Object.freeze({eventType:r})})}function l(e,t){return y(p(e.ref,"draft:updated"),t,"draft:updated"),Object.freeze({ref:t,text:e.text,mentions:Object.freeze(e.mentions.map(e=>Object.freeze({...e}))),...void 0===e.replyToMessageId?{}:{replyToMessageId:e.replyToMessageId},attachments:Object.freeze([]),updatedAt:e.updatedAt})}function I(e){const t=s(e?.applicationId,"application.ref.applicationId");if("contact"===e.domain)return Object.freeze({domain:"contact",applicationId:t});if("group"===e.domain){const r=p(e.conversation,"application:updated");"group"!==r.conversationType&&a({code:"IM_SDK_EVENT_APPLICATION_REF_INVALID",category:"contract",operation:"events.project",retryable:!1,conversation:r});const o=Object.freeze({conversationType:"group",conversationId:r.conversationId});return Object.freeze({domain:"group",applicationId:t,conversation:o})}if("channel"===e.domain){const r=p(e.conversation,"application:updated");"channel"!==r.conversationType&&a({code:"IM_SDK_EVENT_APPLICATION_REF_INVALID",category:"contract",operation:"events.project",retryable:!1,conversation:r});const o=Object.freeze({conversationType:"channel",conversationId:r.conversationId});return Object.freeze({domain:"channel",applicationId:t,conversation:o})}return a({code:"IM_SDK_EVENT_APPLICATION_REF_INVALID",category:"contract",operation:"events.project",retryable:!1})}function u(e){const t={token_expired:{code:"IM_SDK_AUTH_TOKEN_EXPIRED",reason:"token-expired"},kicked:{code:"IM_SDK_AUTH_KICKED",reason:"kicked"},banned:{code:"IM_SDK_AUTH_BANNED",reason:"banned"},unknown:{code:"IM_SDK_AUTH_INVALID",reason:"unknown"}},r=e.lastLoginTime;return Object.freeze(void 0===r||!Number.isFinite(r)||r<=0?t[e.reason]:{...t[e.reason],lastLoginTime:r})}function f(e){if(n(e.cause))return Object.freeze(t({code:"IM_SDK_CRYPTO_EXECUTION_FAILED",category:"state",operation:"crypto.execute",retryable:!1,details:Object.freeze({reason:e.cause.reason})}));return Object.freeze(t({...{transport:{code:"IM_SDK_TRANSPORT_ERROR",category:"network",retryable:!0},protocol:{code:"IM_SDK_PROTOCOL_ERROR",category:"protocol",retryable:!1},login:{code:"IM_SDK_AUTH_ERROR",category:"auth",retryable:!1},sync:{code:"IM_SDK_SYNC_ERROR",category:"network",retryable:!0},crypto:{code:"IM_SDK_CRYPTO_ERROR",category:"state",retryable:!1},http:{code:"IM_SDK_HTTP_ERROR",category:"network",retryable:!0},storage:{code:"IM_SDK_STORAGE_ERROR",category:"state",retryable:!0},unknown:{code:"IM_SDK_INTERNAL_ERROR",category:"state",retryable:!1}}[e.scope],operation:`core.${e.scope}`}))}function v(t,n){try{switch(t.type){case"conversation-context:updated":case"notification":return null;case"connection:changed":return Object.freeze({type:t.type,snapshot:(g=n.getLifecycleSnapshot(),Object.freeze({...g}))});case"session:replaced":case"session-favorites:changed":return Object.freeze({type:t.type});case"message:received":case"message:updated":{const e=p(t.conversation,t.type);return y(p({conversationType:t.message.conversationType,conversationId:t.message.conversationId},t.type),e,t.type),"offline"!==t.source&&"live"!==t.source&&a({code:"IM_SDK_EVENT_PAYLOAD_INVALID",category:"contract",operation:"events.project",retryable:!1,conversation:e,details:Object.freeze({field:"source"})}),Object.freeze({type:t.type,ref:e,message:Object.freeze(r(t.message)),source:t.source})}case"message:removed":{const e=p(t.conversation,t.type);return Object.freeze({type:t.type,ref:e,messageId:s(t.messageId,"messageId",e),scope:"local-only"})}case"conversation-history:cleared":{const e=p(t.conversation,t.type);return Object.freeze({type:t.type,ref:e,scope:"local-only"})}case"media:progress":{const e=p(t.conversation,t.type),r=Number.isFinite(t.percent)?Math.max(0,Math.min(100,Math.round(t.percent))):0;return Object.freeze({type:t.type,ref:e,messageId:s(t.messageId,"messageId",e),percent:r})}case"media-task:updated":{const r=p(t.conversation,t.type);y(p(t.task.ref,t.type),r,t.type);const o=e(t.task);return Object.freeze({type:t.type,ref:r,task:o})}case"session:updated":{const e=p(t.conversation,t.type);y(p({conversationType:t.session.type,conversationId:t.session.id},t.type),e,t.type);const r=n.getConversation(e);return void 0===r&&a({code:"IM_SDK_EVENT_CONVERSATION_NOT_FOUND",category:"contract",operation:"events.project",retryable:!1,conversation:e}),y(r.ref,e,t.type),Object.freeze({type:t.type,ref:e,conversation:r})}case"session:removed":{const e=p(t.conversation,t.type);return t.conversationId!==e.conversationId&&a({code:"IM_SDK_EVENT_CONVERSATION_MISMATCH",category:"contract",operation:"events.project",retryable:!1,conversation:e}),Object.freeze({type:t.type,ref:e})}case"pinned-message:updated":{const e=p(t.conversation,t.type);"group"!==e.conversationType&&"channel"!==e.conversationType&&a({code:"IM_SDK_PIN_EVENT_UNSUPPORTED",category:"unsupported",operation:"events.project",retryable:!1,conversation:e}),null!==t.pinnedMessage&&y(p({conversationType:t.pinnedMessage.conversationType,conversationId:t.pinnedMessage.conversationId},t.type),e,t.type);const r=Object.freeze({conversationType:e.conversationType,conversationId:e.conversationId});return Object.freeze({type:t.type,ref:r,messageId:t.pinnedMessage?.messageId??null})}case"profile:updated":{const e=s(t.id,"profile.id");return"user"===t.profileType?Object.freeze({type:t.type,profile:Object.freeze({profileType:"user",userId:e})}):Object.freeze({type:t.type,profile:Object.freeze({profileType:"group",ref:Object.freeze({conversationType:"group",conversationId:e})})})}case"channel-profile:updated":{const e=p(t.conversation,t.type);return"channel"===e.conversationType&&t.channelId===e.conversationId||a({code:"IM_SDK_EVENT_CONVERSATION_MISMATCH",category:"contract",operation:"events.project",retryable:!1,conversation:e}),Object.freeze({type:t.type,ref:Object.freeze({conversationType:"channel",conversationId:e.conversationId})})}case"channel-join-application:received":{const e=p(t.conversation,t.type);return"channel"===e.conversationType&&t.notification.channelId===e.conversationId||a({code:"IM_SDK_EVENT_CONVERSATION_MISMATCH",category:"contract",operation:"events.project",retryable:!1,conversation:e}),Object.freeze({type:t.type,ref:Object.freeze({conversationType:"channel",conversationId:e.conversationId})})}case"contact-application:received":return Object.freeze({type:t.type,applicantId:s(t.notification.applicantId,"contactApplication.applicantId")});case"contact-application:answered":return"ambiguous"===t.notification.result?a({code:"IM_SDK_CONTACT_APPLICATION_ANSWER_AMBIGUOUS",category:"state",operation:"events.project",retryable:!0}):Object.freeze({type:t.type,peerId:s(t.notification.responderId,"contactApplicationAnswer.responderId"),result:t.notification.result});case"read:updated":{const e=p(t.conversation,t.type);return(t.conversationId!==e.conversationId||!Number.isSafeInteger(t.unreadCount)||t.unreadCount<0)&&a({code:"IM_SDK_EVENT_PAYLOAD_INVALID",category:"contract",operation:"events.project",retryable:!1,conversation:e}),Object.freeze({type:t.type,ref:e,unreadCount:t.unreadCount>0?t.unreadCount:!0===t.manuallyUnread?1:0,...!0===t.manuallyUnread?{manuallyUnread:!0}:{}})}case"draft:updated":{const e=p(t.conversation,t.type);return Object.freeze({type:t.type,ref:e,draft:l(t.draft,e)})}case"draft:cleared":{const e=p(t.conversation,t.type);return Object.freeze({type:t.type,ref:e})}case"outbox:updated":{const e=p(t.conversation,t.type);return y(p(t.item.conversation,t.type),e,t.type),Object.freeze({type:t.type,ref:e,item:o(t.item)})}case"local-data:cleared":return Object.freeze({type:t.type,accountScope:s(t.accountScope,"accountScope"),category:t.category});case"application:updated":return Object.freeze({type:t.type,application:(v=t.application,Object.freeze({ref:I(v.ref),...void 0===v.createdAt?{}:{createdAt:v.createdAt},state:v.state}))});case"receiving:changed":return Object.freeze({type:t.type,receiving:t.receiving});case"syncing:changed":return Object.freeze({type:t.type,syncing:t.syncing});case"sync:complete":return Object.freeze({type:t.type,conversations:Object.freeze(t.conversations.map(e=>p(e,t.type)))});case"auth:invalid":return Object.freeze({type:t.type,...u(t.issue)});case"error":return Object.freeze({type:t.type,error:f(t.error)});case"call:incoming":{const e=i(t.conversation,t.type);return Object.freeze({type:t.type,ref:e,callId:s(t.callId,"callId",e),peerId:s(t.peerId,"peerId",e),callKind:t.callKind,createdAt:t.createdAt,expired:!0===t.expired})}case"call:answered":{const e=i(t.conversation,t.type);return Object.freeze({type:t.type,ref:e,callId:s(t.callId,"callId",e),peerId:s(t.peerId,"peerId",e),result:t.result})}case"call:hangup":{const e=i(t.conversation,t.type);return Object.freeze({type:t.type,ref:e,callId:s(t.callId,"callId",e),peerId:s(t.peerId,"peerId",e),outcome:t.outcome})}case"call:peer-audio-begin":case"call:peer-video-begin":{const e=i(t.conversation,t.type);return Object.freeze({type:t.type,ref:e,callId:s(t.callId,"callId",e),peerId:s(t.peerId,"peerId",e)})}case"call:failed":{const e=i(t.conversation,t.type);return Object.freeze({type:t.type,ref:e,callId:s(t.callId,"callId",e),peerId:s(t.peerId,"peerId",e),reason:t.reason})}case"group-call:incoming":{const e=d(t.conversation,t.type);return Object.freeze({type:t.type,ref:e,callId:s(t.callId,"callId",e),groupId:s(t.groupId,"groupId",e),inviterId:s(t.inviterId,"inviterId",e),inviteIds:Object.freeze(t.inviteIds.map(t=>s(t,"inviteId",e))),createdAt:t.createdAt,expired:!0===t.expired})}case"group-call:answered":{const e=d(t.conversation,t.type);return Object.freeze({type:t.type,ref:e,callId:s(t.callId,"callId",e),groupId:s(t.groupId,"groupId",e),userId:s(t.userId,"userId",e),agreed:!0===t.agreed})}case"group-call:joined":{const e=d(t.conversation,t.type);return Object.freeze({type:t.type,ref:e,callId:s(t.callId,"callId",e),groupId:s(t.groupId,"groupId",e),userId:s(t.userId,"userId",e),inviteIds:Object.freeze(t.inviteIds.map(t=>s(t,"inviteId",e))),isInvite:!0===t.isInvite})}case"group-call:left":case"group-call:finished":{const e=d(t.conversation,t.type);return Object.freeze({type:t.type,ref:e,callId:s(t.callId,"callId",e),groupId:s(t.groupId,"groupId",e),userId:s(t.userId,"userId",e)})}case"group-call:busy":{const e=d(t.conversation,t.type);return Object.freeze({type:t.type,ref:e,callId:s(t.callId,"callId",e),groupId:s(t.groupId,"groupId",e),userId:s(t.userId,"userId",e),hintUserId:s(t.hintUserId,"hintUserId",e)})}case"group-call:failed":{const e=d(t.conversation,t.type);return Object.freeze({type:t.type,ref:e,callId:s(t.callId,"callId",e),groupId:s(t.groupId,"groupId",e),reason:t.reason})}}}catch(e){return function(e,t){if("object"==typeof(r=e)&&null!==r&&"string"==typeof r.code&&"string"==typeof r.category&&"string"==typeof r.operation&&"boolean"==typeof r.retryable){const{cause:t,...r}=e;return c(r)}var r;return c({code:"IM_SDK_EVENT_PAYLOAD_INVALID",category:"contract",operation:"events.project",retryable:!1,details:Object.freeze({eventType:t.type})})}(e,t)}var v,g}function g(e){const t=/* @__PURE__ */new WeakMap;function r(r){let o=!0;const n=e.subscribeCore(n=>{if("contact-application:answered"===n.type&&"ambiguous"===n.notification.result){if(void 0===e.resolveContactApplicationAnswer)return void r(c({code:"IM_SDK_CONTACT_APPLICATION_ANSWER_AMBIGUOUS",category:"state",operation:"events.resolveContactApplicationAnswer",retryable:!0}));const a=s(n.notification.responderId,"contactApplicationAnswer.responderId");return void function(r,o){const n=t.get(r);if(void 0!==n)return n;const c=Promise.resolve().then(()=>e.resolveContactApplicationAnswer({peerId:o,messageId:r.notification.messageId}));return t.set(r,c),c}(n,a).then(e=>{if(!o||null===e)return;const t=Object.freeze({type:"contact-application:answered",peerId:a,result:e});r(t)}).catch(()=>{o&&r(c({code:"IM_SDK_CONTACT_APPLICATION_ANSWER_RESOLUTION_FAILED",category:"state",operation:"events.resolveContactApplicationAnswer",retryable:!0}))})}const a=v(n,e);null!==a&&r(a);const i=function(e){if("message:received"!==e.type||"group"!==e.message.conversationType||"system"!==e.message.contentType||"group_activated"!==e.message.body.system?.eventType)return null;const t=p(e.conversation,e.type);return"group"!==t.conversationType?null:Object.freeze({ref:Object.freeze({conversationType:"group",conversationId:t.conversationId})})}(n);null!==i&&r(Object.freeze({type:"group:activated",...i}))});return()=>{o=!1,n()}}return{subscribe:e=>r(e),on:(e,t)=>r(r=>{r.type===e&&t(function(e){const{type:t,...r}=e;return Object.freeze(r)}(r))})}}export{g as createProductEventsApi,v as toProductEvent};
@@ -0,0 +1 @@
1
+ import{createImSdkError as e}from"./message.js";import{ExpressionProviderUnavailableError as t,ExpressionMappingError as r,GiphyHttpError as o}from"../../../im-browser/src/http/expression-http-adapter.js";import{CoreJsonBusinessError as i,CoreJsonTransportError as n}from"../../../im-browser/src/http/requests/core-json-request.js";const s=4294967295;function c(t){const r=e(t);return Object.assign(new Error(r.code),r,{name:"ImExpressionOperationError"})}function a(e,t){return c({code:"IM_SDK_EXPRESSION_INPUT_INVALID",category:"validation",operation:e,retryable:!1,cause:new Error(t)})}function f(e,s){if(s instanceof t)return c({code:"core"===s.provider?"IM_SDK_CORE_API_UNAVAILABLE":"IM_SDK_GIPHY_API_KEY_MISSING",category:"contract",operation:e,retryable:!1,cause:s});if(s instanceof r)return c({code:"IM_SDK_EXPRESSION_RESULT_INVALID",category:"contract",operation:e,retryable:!1,cause:s});if(s instanceof i)return c({code:"IM_SDK_EXPRESSION_BUSINESS_ERROR",category:"state",operation:e,retryable:!1,details:Object.freeze({businessCode:s.businessCode}),cause:s});if(s instanceof n||s instanceof o){const t=s instanceof o?s.status:void 0;return c({code:s instanceof o?"IM_SDK_GIPHY_REQUEST_FAILED":"IM_SDK_EXPRESSION_REQUEST_FAILED",category:"network",operation:e,retryable:void 0===t||0===t||408===t||429===t||t>=500,...void 0===t?{}:{details:Object.freeze({status:t})},cause:s})}return c({code:"IM_SDK_EXPRESSION_REQUEST_FAILED",category:"state",operation:e,retryable:!1,cause:s})}function u(e,t,r){if("string"!=typeof e||""===e.trim())throw a(r,`${t} 必须是非空字符串`);return e.trim()}function d(e,t,r){const o=u(e,t,r);let i;try{i=new URL(o)}catch{throw a(r,`${t} 必须是合法 URL`)}if("https:"!==i.protocol&&"http:"!==i.protocol)throw a(r,`${t} 只支持 HTTP(S)`);if(""!==i.username||""!==i.password)throw a(r,`${t} 不允许包含 URL 凭据`);return o}function p(e,t,r){if(!Number.isSafeInteger(e)||Number(e)<=0||Number(e)>s)throw a(r,`${t} 必须是 1-4294967295 的整数`);return Number(e)}function I(e,t){if(null===e||"object"!=typeof e||"sticker"!==e.kind&&"gif"!==e.kind)throw a(t,"kind 必须是 sticker 或 gif");const r={url:d(e.url,"url",t),width:p(e.width,"width",t),height:p(e.height,"height",t)};if("sticker"===e.kind)return{kind:e.kind,...r,packageId:u(e.packageId,"packageId",t),resourceId:u(e.resourceId,"resourceId",t)};if(Object.prototype.hasOwnProperty.call(e,"packageId"))throw a(t,"GIF 不允许提供 packageId");const o=void 0===e.resourceId?void 0:u(e.resourceId,"resourceId",t);return{kind:e.kind,...r,...void 0===o?{}:{resourceId:o}}}function l(e,t){if(!Array.isArray(e))throw a(t,"recordIds 必须是数组");const r=[...new Set(e.map(e=>u(e,"recordId",t)))];if(r.some(e=>e.includes("|")))throw a(t,"recordId 不能包含竖线");if(0===r.length||r.length>30)throw a(t,"recordIds 去重后必须包含 1-30 个 id");return r}function w(e,t){const r=e?.offset??0,o=e?.pageSize??20;if(!Number.isSafeInteger(r)||r<0)throw a(t,"offset 必须是非负整数");if(!Number.isSafeInteger(o)||o<1||o>50)throw a(t,"pageSize 必须是 1-50 的整数");return{offset:r,limit:o}}function h(e){return Object.freeze({...e})}function m(e){return Object.freeze({...e})}function y(e){const t=Object.freeze(e.items.map(e=>Object.freeze({...e})));return Object.freeze({items:t,offset:e.offset,totalCount:e.totalCount,...void 0===e.nextOffset?{}:{nextOffset:e.nextOffset}})}function b(e){function o(t){if(!e.isActive())throw c({code:"IM_SDK_EXPRESSION_RUNTIME_INACTIVE",category:"state",operation:t,retryable:!1})}async function i(r,i){if(o(r),void 0===e.provider)throw f(r,new t("core"));let n;try{n=await i(e.provider)}catch(e){throw o(r),f(r,e)}return o(r),n}const n={packs:Object.freeze({list:async e=>{const t="expressions.packs.list",r=void 0===e?.version?void 0:function(e,t,r){if(void 0===e)return"";if("string"!=typeof e)throw a(r,`${t} 必须是字符串`);return e.trim()}(e.version,"version",t),o=await i(t,e=>e.listStickerPacks(r)),n=Object.freeze(o.items.map(e=>Object.freeze({...e})));return Object.freeze({version:o.version,items:n})},listItems:async e=>{const t="expressions.packs.listItems",r=u(e,"packageId",t),o=await i(t,e=>e.listStickerItems(r));return Object.freeze(o.map(h))}}),favorites:Object.freeze({list:async e=>{const t="expressions.favorites.list",r=await i(t,r=>r.listFavorites(function(e,t){if("sticker"!==e&&"gif"!==e)throw a(t,"kind 必须是 sticker 或 gif");return e}(e,t)));return Object.freeze(r.map(h))},add:async e=>{const t="expressions.favorites.add",r=I(e,t);await i(t,e=>e.addFavorite(r))},delete:async e=>{const t="expressions.favorites.delete",r=l(e,t);await i(t,e=>e.deleteFavorites(r))}}),recent:Object.freeze({list:async e=>{const t="expressions.recent.list",r=await i(t,r=>r.listRecent(function(e,t){if("sticker"!==e&&"gif"!==e&&"emoji"!==e)throw a(t,"kind 必须是 sticker、gif 或 emoji");return e}(e,t)));return Object.freeze(r.map(m))},report:async e=>{const t="expressions.recent.report",r=function(e,t){if(null===e||"object"!=typeof e)throw a(t,"recent input 必须是对象");return"emoji"===e.kind?{kind:"emoji",token:u(e.token,"token",t),resourceId:u(e.resourceId,"resourceId",t)}:I(e,t)}(e,t);await i(t,e=>e.reportRecent(r))},delete:async e=>{const t="expressions.recent.delete",r=l(e,t);await i(t,e=>e.deleteRecent(r))}}),reactions:Object.freeze({listTop:async e=>{const t="expressions.reactions.listTop",o=e?.limit;if(void 0!==o&&(!Number.isSafeInteger(o)||o<1||o>50))throw a(t,"limit 必须是 1-50 的整数");return i(t,async e=>{const t=await e.listReactionTop(o);if(!Array.isArray(t))throw new r("reaction top 必须是数组");return Object.freeze(t.map(e=>function(e,t){if("string"!=typeof e||""===e.trim())throw new r(`${t} 必须是非空字符串`);return e.trim()}(e,"reaction emoji")))})},report:async e=>{const t="expressions.reactions.report",r=u(e,"emoji",t);await i(t,e=>e.reportReaction(r))}}),giphy:Object.freeze({trending:async e=>{const t="expressions.giphy.trending";return y(await i(t,r=>r.listGiphyTrending(w(e,t))))},search:async(e,t)=>{const r="expressions.giphy.search",o=u(e,"query",r);return y(await i(r,e=>e.searchGiphy({query:o,...w(t,r)})))}})};return{api:Object.freeze(n)}}export{b as createExpressionsRuntime};
@@ -0,0 +1 @@
1
+ function t(t,r){const i={gId:t,cT:"2",...""===r?.trim()||void 0===r?{}:{url:r}};return`?t=2&d=${JSON.stringify(i)}`}export{t as createFaceToFaceGroupQrPayload};
@@ -0,0 +1 @@
1
+ import{createImSdkError as o}from"./message.js";function r(r,e,t){try{t()}catch(t){if((t instanceof Error?t.message:String(t)).includes("未鉴权"))throw o({code:"IM_SDK_CALL_UNAUTHENTICATED",category:"auth",operation:r,retryable:!1,conversation:{conversationType:"group",conversationId:e},cause:t});throw o({code:"IM_SDK_CALL_FAILED",category:"protocol",operation:r,retryable:!1,conversation:{conversationType:"group",conversationId:e},cause:t})}}function e(o){return{createRoom(e){r("groupCalls.createRoom",e.groupId,()=>o.createRoom(e.groupId,e.callId,e.inviteIds))},joinRoom(e){r("groupCalls.joinRoom",e.groupId,()=>o.joinRoom(e.groupId,e.callId,e.inviteIds,e.isInvite))},answer(e){r("groupCalls.answer",e.groupId,()=>o.answer(e.groupId,e.callId,e.agreed))},hangup(e){r("groupCalls.hangup",e.groupId,()=>o.hangup(e.groupId,e.callId))},finish(e){r("groupCalls.finish",e.groupId,()=>o.finish(e.groupId,e.callId))},setStatus(e){r("groupCalls.setStatus",e.groupId,()=>o.setStatus(e.groupId,e.callId,e.isMute,e.status))},busy(e){r("groupCalls.busy",e.groupId,()=>o.busy(e.groupId,e.callId,e.hintUserId))},inspectMeeting:r=>o.inspectMeeting(r)}}export{e as createGroupCallsApi};
@@ -0,0 +1 @@
1
+ const e="image/jpeg,image/png,image/webp";async function t(e){const t=new Uint8Array(await e.slice(0,12).arrayBuffer());let a;t.length>=3&&255===t[0]&&216===t[1]&&255===t[2]?a="image/jpeg":t.length>=8&&[137,80,78,71,13,10,26,10].every((e,a)=>t[a]===e)?a="image/png":t.length>=12&&82===t[0]&&73===t[1]&&70===t[2]&&70===t[3]&&87===t[8]&&69===t[9]&&66===t[10]&&80===t[11]&&(a="image/webp");const n=e.type.trim().toLowerCase();return void 0!==a&&(""===n||"application/octet-stream"===n||n===a)}export{e as IMAGE_MESSAGE_ACCEPT,t as isSupportedImageFile};
@@ -0,0 +1 @@
1
+ import{createImSdkError as e}from"./message.js";function a(a){const c=e({code:a.code,category:a.category,operation:a.operation,retryable:a.retryable,...void 0===a.accountScope?{}:{details:Object.freeze({accountScope:a.accountScope})},...void 0===a.cause?{}:{cause:a.cause}});return Object.assign(new Error(c.code),c,{name:"ImLocalDataOperationError"})}function c(e){function c(c){const t=e.getAccountId().trim();if(!e.isActive()||""===t)throw a({code:"IM_SDK_LOCAL_DATA_ACCOUNT_UNAVAILABLE",category:"state",operation:c,retryable:!1});return t}return{async getInfo(){const a=c("localData.getInfo");return Object.freeze({hostPrefix:e.namespaceFactory.hostPrefix,accountScope:a})},async clearRebuildableCaches(){const t=c("localData.clearRebuildableCaches");if(void 0!==e.storage&&void 0===e.storage.clearRebuildableCaches)throw a({code:"IM_SDK_LOCAL_DATA_CLEAR_UNAVAILABLE",category:"contract",operation:"localData.clearRebuildableCaches",retryable:!1,accountScope:t});try{e.clearMemoryCaches(),await(e.storage?.clearRebuildableCaches?.())}catch(e){throw a({code:"IM_SDK_LOCAL_DATA_CLEAR_FAILED",category:"state",operation:"localData.clearRebuildableCaches",retryable:!0,accountScope:t,cause:e})}e.emitter.emit({type:"local-data:cleared",accountScope:t,category:"rebuildable"})}}}function t(e){return{getInfo:()=>e.getRuntime().getInfo(),clearRebuildableCaches:()=>e.getRuntime().clearRebuildableCaches(),purgeCurrentAccount:e.purgeCurrentAccount}}export{t as createLocalDataApi,a as createLocalDataError,c as createLocalDataRuntime};
@@ -0,0 +1 @@
1
+ import{createImSdkError as e}from"./message.js";import{createMediaAssetCacheStrategyRegistry as t,mediaAssetResourceVersion as o}from"../../../im-core/src/ports/media-asset-cache-port.js";import{throwIfAborted as r}from"../../../im-core/src/abort.js";import{isCryptoExecutionError as a}from"../../../im-core/src/ports/crypto-task-executor.js";const i=6048e5,n=1048576;function s(e){let t=0,o=!1;const r=[];function a(){if(!o)for(;t<e&&r.length>0;){r.sort((e,t)=>t.getPriority()-e.getPriority());const e=r.shift();if(e.signal.removeEventListener("abort",e.onAbort),e.signal.aborted){e.reject(new DOMException("媒体下载已取消","AbortError"));continue}t+=1;let o=!1;e.resolve(()=>{o||(o=!0,t=Math.max(0,t-1),a())})}}return{acquire:(e,t)=>o?Promise.reject(new Error("媒体下载并发控制器已释放")):new Promise((o,i)=>{const n={resolve:o,reject:i,signal:e,getPriority:t,onAbort:()=>{const e=r.indexOf(n);e>=0&&r.splice(e,1),i(new DOMException("媒体下载已取消","AbortError"))}};e.addEventListener("abort",n.onAbort,{once:!0}),r.push(n),a()}),dispose(){o=!0;for(const e of r.splice(0))e.signal.removeEventListener("abort",e.onAbort),e.reject(new Error("媒体下载并发控制器已释放"))}}}function d(){return t([{kind:"image",softMaxBytes:512*n,maxEntries:512,maxEntryBytes:30*n,maxIdleMs:i},{kind:"video",softMaxBytes:1792*n,maxEntries:64,maxEntryBytes:200*n,maxIdleMs:i}])}function c(e){return Number.isFinite(e)?Math.max(0,Math.min(100,Math.round(e))):0}function l(e){return Object.freeze({conversationType:e.conversationType,conversationId:e.conversationId})}function m(e,t,o,r){const a=`${e}:${encodeURIComponent(t.conversationType)}:${encodeURIComponent(t.conversationId)}:${encodeURIComponent(o)}`;return void 0===r?a:`${a}:${r}`}function p(e){const t=e.ref.conversationType,o=e.ref.conversationId;if("direct"!==t&&"group"!==t&&"channel"!==t||""===o.trim())throw u({code:"supergroup"===t?"IM_SDK_SUPERGROUP_UNSUPPORTED":"IM_SDK_MEDIA_TASK_REF_INVALID",category:"supergroup"===t?"unsupported":"contract",operation:"media.tasks.project",retryable:!1});const r=l({conversationType:t,conversationId:o});return I({id:m(e.direction,r,e.messageId),messageId:e.messageId,ref:r,direction:e.direction,state:e.state,percent:c(e.percent),...void 0===e.items?{}:{items:e.items},...void 0===e.attempt?{}:{attempt:e.attempt},...void 0===e.maxAttempts?{}:{maxAttempts:e.maxAttempts},...void 0===e.bytesTransferred?{}:{bytesTransferred:e.bytesTransferred},...void 0===e.bytesTotal?{}:{bytesTotal:e.bytesTotal},...void 0===e.recovery?{}:{recovery:e.recovery},...void 0===e.recoveryReason?{}:{recoveryReason:e.recoveryReason},...void 0===e.phase?{}:{phase:e.phase},...void 0===e.failure?{}:{error:f(e.failure,r)}})}function u(t){const o=e(t);return Object.assign(new Error(o.code),o,{name:"ImMediaTaskOperationError"})}function y(e){return!(void 0!==e.recalled||void 0!==e.deletedForEveryone||"failed"!==e.status&&"uploading"!==e.status||"media.cancelled"===e.failure?.displayCode&&!0!==e.failure.retryable||"media.uploadTimeout"===e.failure?.displayCode&&!1===e.failure.retryable)}function f(t,o){if(void 0===t)return;const r=t.displayCode,a=void 0===r?void 0:{"media.empty":{code:"IM_SDK_MEDIA_EMPTY",category:"validation",retryable:!1},"media.noCrypto":{code:"IM_SDK_MEDIA_CRYPTO_UNAVAILABLE",category:"contract",retryable:!1},"media.previewFailed":{code:"IM_SDK_MEDIA_PREVIEW_FAILED",category:"state",retryable:!1},"media.encryptFailed":{code:"IM_SDK_MEDIA_ENCRYPT_FAILED",category:"state",retryable:!1},"media.uploadFailed":{code:"IM_SDK_MEDIA_UPLOAD_FAILED",category:"network",retryable:!0},"media.uploadTimeout":{code:"IM_SDK_MEDIA_UPLOAD_TIMEOUT",category:"network",retryable:!0},"media.resumeUnavailable":{code:"IM_SDK_MEDIA_UPLOAD_RESTART_REQUIRED",category:"state",retryable:!0},"media.cleanupUnconfirmed":{code:"IM_SDK_MEDIA_UPLOAD_CLEANUP_UNCONFIRMED",category:"state",retryable:!0},"media.cancelled":{code:"IM_SDK_MEDIA_UPLOAD_CANCELED",category:"state",retryable:!0},"media.invalidDuration":{code:"IM_SDK_VOICE_DURATION_INVALID",category:"validation",retryable:!1},"media.uploadInterrupted":{code:"IM_SDK_MEDIA_UPLOAD_INTERRUPTED",category:"network",retryable:!0}}[r];return Object.freeze(e({...a??{code:"IM_SDK_MEDIA_UPLOAD_FAILED",category:"state",retryable:t.retryable??!1},...!1===t.retryable?{retryable:!1}:{},operation:"media.upload",conversation:o}))}function I(e){return Object.freeze({...e,ref:l(e.ref),...void 0===e.items?{}:{items:Object.freeze(e.items.map(e=>Object.freeze({...e})))},...void 0===e.error?{}:{error:Object.freeze({...e.error})}})}function g(e){const t=e?.conversation,o=t?.conversationType,r=t?.conversationId;if("supergroup"===o)throw u({code:"IM_SDK_SUPERGROUP_UNSUPPORTED",category:"unsupported",operation:"media.download",retryable:!1});if("direct"!==o&&"group"!==o&&"channel"!==o||"string"!=typeof r||""===r.trim()||"string"!=typeof e?.messageId||""===e.messageId.trim())throw u({code:"IM_SDK_MEDIA_MESSAGE_REF_INVALID",category:"validation",operation:"media.download",retryable:!1});return l({conversationType:o,conversationId:r})}function v(e){let t=!0;const n=e.now??Date.now;let d=0,f=0;const v=/* @__PURE__ */new Map,_=/* @__PURE__ */new Set,E=/* @__PURE__ */new Map,h=/* @__PURE__ */new Map,A=/* @__PURE__ */new Map,D=/* @__PURE__ */new Map,b=/* @__PURE__ */new Map,M=/* @__PURE__ */new Set;let w=!1;const T=/* @__PURE__ */new Map,L=/* @__PURE__ */new Set,S=e.maxDownloadCheckpointBytes??536870912;function C(e){return u({code:"IM_SDK_MEDIA_DOWNLOAD_RESTART_REQUIRED",category:"state",operation:"media.download",retryable:!0,conversation:e})}function K(e,t){T.delete(e),L.add(e);const o=v.get(e);if(void 0!==o){const e={...o,recoveryReason:t,..."failed"===o.state||"canceled"===o.state?{error:C(o.ref)}:{}};"running"===o.state?J(e):G(e)}}const O=s(3);let R;const U=e.maxCachedBlobs??8,P=e.maxCachedBlobBytes??67108864;let N=0;function k(){if(!t||!e.isActive())throw u({code:"IM_SDK_MEDIA_RUNTIME_INACTIVE",category:"state",operation:"media.tasks",retryable:!1})}function V(){return Object.freeze([...v.values()])}function x(){const t=V();for(const o of[..._])try{o(t)}catch(t){e.emitter.emit({type:"error",error:{scope:"unknown",message:"媒体任务订阅者回调异常",cause:t}})}}function F(){!w&&t&&e.isActive()&&(w=!0,queueMicrotask(()=>{if(w=!1,t&&e.isActive())for(const t of[...M])try{t()}catch(t){e.emitter.emit({type:"error",error:{scope:"unknown",message:"媒体缓存订阅者回调异常",cause:t}})}}))}function j(e){const t=A.get(e);void 0!==t&&(N-=t.size,A.delete(e),D.delete(e),b.delete(e),F())}function z(){if(!t||!e.isActive())return;const o=n();for(const[e,t]of T)!h.has(e)&&void 0!==t.idleSince&&o-t.idleSince>=864e5&&K(e,"download-checkpoint-expired");for(const[e,t]of D)!h.has(e)&&o-t>=i&&j(e);F()}function B(e,t){const o=A.get(e);if(void 0!==o){if(!(b.get(e)!==t||n()-D.get(e)>=i))return A.delete(e),A.set(e,o),D.set(e,n()),o;j(e)}}function W(){d+=1,A.clear(),D.clear(),b.clear(),F(),N=0;for(const e of[...T.keys()])K(e,"download-checkpoint-cleared")}function Y(e){v.delete(e),E.delete(e),T.delete(e),L.delete(e),j(e)}function J(e){v.set(e.id,I(e)),function(){for(;v.size>128;){const e=[...v.values()].find(e=>"completed"===e.state||"failed"===e.state||"canceled"===e.state);if(void 0===e)return;Y(e.id)}}()}function G(o){if(!t||!e.isActive())return;J(o);const r=v.get(o.id);if(x(),!t||!e.isActive()||void 0===r||v.get(o.id)!==r)return;const a={id:r.id,messageId:r.messageId,ref:r.ref,direction:"download",state:r.state,percent:r.percent};e.emitter.emit({type:"media-task:updated",conversation:r.ref,task:a})}function H(e,t,o){if(j(e),!(t.size>P))for(A.set(e,t),b.set(e,o),F(),D.set(e,n()),N+=t.size;A.size>U||N>P;){const e=A.keys().next().value;if(void 0===e)break;j(e)}}function $(t,r=!0){const a=g(t),i=e.domainState.getConversationMessage(a,t.messageId);if(void 0===i)throw u({code:"IM_SDK_MEDIA_MESSAGE_NOT_FOUND",category:"state",operation:"media.download",retryable:!1,conversation:a});let n,s,d,c;if("image"===i.contentType)n=i.body.image,s=e.loaders?.loadImage,c="image";else if("video"===i.contentType)n=i.body.video,s=e.loaders?.loadVideo,c="video";else if("voice"===i.contentType)n=i.body.voice,s=e.loaders?.loadVoice;else if("file"===i.contentType)n=i.body.file,s=e.loaders?.loadFile,d=i.body.file?.mimeType;else if("filesAlbum"===i.contentType){const o=t.itemIndex;if(n=void 0===o?void 0:i.body.filesAlbum?.items[o],void 0===n)throw u({code:"IM_SDK_MEDIA_ALBUM_ITEM_INVALID",category:"validation",operation:"media.download",retryable:!1,conversation:a});s=e.loaders?.loadFile}else if("mediaAlbum"===i.contentType){const o=i.body.mediaAlbum?.items,r=t.itemIndex,d=void 0===r||void 0===o?void 0:o[r];if(void 0===d)throw u({code:"IM_SDK_MEDIA_ALBUM_ITEM_INVALID",category:"validation",operation:"media.download",retryable:!1,conversation:a});n=d,s="video"===d.kind?e.loaders?.loadVideo:e.loaders?.loadImage,c=d.kind}if("mediaAlbum"!==i.contentType&&"filesAlbum"!==i.contentType&&void 0!==t.itemIndex)throw u({code:"IM_SDK_MEDIA_ALBUM_ITEM_INVALID",category:"validation",operation:"media.download",retryable:!1,conversation:a});if(void 0===n)throw u({code:"IM_SDK_MEDIA_MESSAGE_UNSUPPORTED",category:"unsupported",operation:"media.download",retryable:!1,conversation:a});if(r&&void 0===s)throw u({code:"IM_SDK_MEDIA_DOWNLOAD_UNAVAILABLE",category:"contract",operation:"media.download",retryable:!1,conversation:a});if(""===n.url.trim()||n.url.startsWith("blob:"))throw u({code:"IM_SDK_MEDIA_REMOTE_URL_UNAVAILABLE",category:"state",operation:"media.download",retryable:!1,conversation:a});return{ref:a,messageId:i.id,...void 0===t.itemIndex?{}:{itemIndex:t.itemIndex},...void 0===d?{}:{mimeType:d},...void 0===c?{}:{cacheKind:c,resourceVersion:o(n.url,{conversation:a,itemIndex:t.itemIndex})},...void 0===s?{}:{load:s},input:{url:n.url,...void 0===n.size?{}:{expectedBytes:n.size},...void 0===n.teaKey?{}:{teaKey:n.teaKey},...void 0===n.fileEncryptType?{}:{fileEncryptType:n.fileEncryptType}}}}function q(e){return u({code:"IM_SDK_MEDIA_DOWNLOAD_CANCELED",category:"state",operation:"media.download",retryable:!0,conversation:e})}function Q(){return u({code:"IM_SDK_MEDIA_RUNTIME_INACTIVE",category:"state",operation:"media.download",retryable:!1})}async function X(t,o,r=d){if(k(),r!==d)return null;const a=m("download",t.ref,t.messageId,t.itemIndex),i=B(a,t.resourceVersion);if(void 0!==i)return i;if(void 0===e.assetCache||void 0===t.cacheKind||void 0===t.resourceVersion)return null;let n;try{n=await e.assetCache.get({kind:t.cacheKind,messageId:t.messageId,resourceVersion:t.resourceVersion}),e.onAssetCacheEvent?.({operation:"get",outcome:null===n?"miss":"hit",kind:t.cacheKind,messageId:t.messageId,...null===n?{}:{byteLength:n.blob.size}})}catch(r){if(e.onAssetCacheEvent?.({operation:"get",outcome:"failed",kind:t.cacheKind,messageId:t.messageId,cause:r}),o)throw u({code:"IM_SDK_MEDIA_CACHE_READ_FAILED",category:"state",operation:"media.getCached",retryable:!0,conversation:t.ref});return null}if(null===n)return null;if(k(),r!==d)return null;const s=n.blob,c=n.mimeType??t.mimeType??"",l=s.type===c?s:s.slice(0,s.size,c);return H(a,l,t.resourceVersion),l}function Z(e,t){z();const o=T.get(e);if(void 0!==o&&o.url!==t.input.url&&K(e,"download-object-changed"),L.has(e)){const o=C(t.ref),r=v.get(e);throw void 0===r||"failed"!==r.state&&"canceled"!==r.state||G({...r,error:o}),o}return o?.state}function ee(o,r=!1){const i=d,s=m("download",o.ref,o.messageId,o.itemIndex),p=h.get(s);if(void 0!==p&&!p.controller.signal.aborted)return p.promise;if(!r){const e=B(s,o.resourceVersion);if(void 0!==e)return G({id:s,ref:l(o.ref),messageId:o.messageId,...void 0===o.itemIndex?{}:{itemIndex:o.itemIndex},direction:"download",state:"completed",percent:100}),Promise.resolve(e)}j(s);const y=(()=>{const e=Z(s,o);return void 0===e?{percent:0}:{percent:Math.min(99,Math.round(e.bytesDownloaded/e.bytesTotal*100)),bytesTransferred:e.bytesDownloaded,bytesTotal:e.bytesTotal}})(),f=l(o.ref);E.set(s,Object.freeze({conversation:f,messageId:o.messageId,...void 0===o.itemIndex?{}:{itemIndex:o.itemIndex}}));const I={id:s,messageId:o.messageId,ref:f,direction:"download",...void 0===o.itemIndex?{}:{itemIndex:o.itemIndex}},g=new AbortController,_=Promise.resolve().then(async()=>{let l;try{if(!t||!e.isActive())throw Q();if(g.signal.aborted)throw q(f);if(l=await O.acquire(g.signal,()=>R===s?1:0),!t||!e.isActive())throw Q();if(g.signal.aborted)throw q(f);if(G({...I,...y,state:"running"}),!t||!e.isActive())throw Q();if(g.signal.aborted)throw q(f);if(!r&&void 0!==e.assetCache&&void 0!==o.cacheKind&&void 0!==o.resourceVersion){const e=await X(o,!1,i);if(null!==e){if(g.signal.aborted)throw q(f);return T.delete(s),L.delete(s),G({...v.get(s),...I,state:"completed",percent:100,error:void 0,recoveryReason:void 0}),e}}const a=o.load;if(void 0===a)throw u({code:"IM_SDK_MEDIA_DOWNLOAD_UNAVAILABLE",category:"contract",operation:"media.download",retryable:!1,conversation:f});const n=Z(s,o);if(void 0!==y.bytesTransferred&&(void 0===n||i!==d))throw K(s,"download-checkpoint-cleared"),C(f);const m=await a({...o.input,getPriority:()=>R===s?1:0,...void 0===n?{}:{resume:n},onResumable:r=>{t&&e.isActive()&&i===d&&h.get(s)?.controller===g&&function(e,t,o){T.delete(e),T.set(e,{url:t,state:o}),L.delete(e);let r=[...T.values()].reduce((e,t)=>e+t.state.bytesDownloaded,0);for(;T.size>8||r>S;){const e=T.entries().next().value;if(void 0===e)break;r-=e[1].state.bytesDownloaded,K(e[0],"download-checkpoint-limit")}}(s,o.input.url,r)},onResumeInvalidated:()=>{t&&e.isActive()&&i===d&&h.get(s)?.controller===g&&K(s,"download-checkpoint-invalid")},signal:g.signal,onTransferProgress:o=>{const r=v.get(s);t&&e.isActive()&&!g.signal.aborted&&h.get(s)?.controller===g&&"running"===r?.state&&G({...r,state:"running",percent:Math.min(99,c(o.percent)),bytesTransferred:o.bytesTransferred,bytesTotal:o.bytesTotal,phase:o.bytesTotal>0&&o.bytesTransferred>=o.bytesTotal?"finalizing":"transferring"})},onProgress:o=>{const r=v.get(s);if(!t||!e.isActive()||g.signal.aborted||h.get(s)?.controller!==g||"running"!==r?.state)return;const a=Math.min(99,c(o));a<=r.percent||G({...r,state:"running",percent:a})}});if(!t||!e.isActive())throw Q();if(g.signal.aborted)throw q(f);const p=m instanceof Blob?void 0:m;let _=void 0===p?m:new Blob([p],void 0===o.mimeType?void 0:{type:o.mimeType});if(void 0!==o.mimeType&&_.type!==o.mimeType&&(_=_.slice(0,_.size,o.mimeType)),i===d&&H(s,_,o.resourceVersion),i===d&&void 0!==e.assetCache&&void 0!==o.cacheKind&&void 0!==o.resourceVersion){const t=_.size;e.assetCache.put({kind:o.cacheKind,messageId:o.messageId,resourceVersion:o.resourceVersion,blob:_,...void 0===o.mimeType?{}:{mimeType:o.mimeType}}).then(r=>{F(),e.onAssetCacheEvent?.({operation:"put",outcome:r,kind:o.cacheKind,messageId:o.messageId,byteLength:t})}).catch(r=>{e.onAssetCacheEvent?.({operation:"put",outcome:"failed",kind:o.cacheKind,messageId:o.messageId,byteLength:t,cause:r})})}if(T.delete(s),L.delete(s),G({...v.get(s),...I,state:"completed",percent:100,error:void 0,recoveryReason:void 0}),!t||!e.isActive())throw Q();return _}catch(o){if(!t||!e.isActive())throw Q();if(g.signal.aborted||"object"==typeof o&&null!==o&&"code"in o&&"IM_SDK_MEDIA_DOWNLOAD_CANCELED"===o.code){const e=q(f);throw h.get(s)?.controller===g&&"canceled"!==v.get(s)?.state&&G({...v.get(s),...I,state:"canceled",percent:v.get(s)?.percent??0,error:L.has(s)?C(f):e}),e}const r=L.has(s)?C(f):a(o)?u({code:"IM_SDK_CRYPTO_EXECUTION_FAILED",category:"state",operation:"crypto.execute",retryable:"queue-full"===o.reason,conversation:f,details:{reason:o.reason}}):o instanceof Error&&"ImMediaTaskOperationError"===o.name?o:u({code:"IM_SDK_MEDIA_DOWNLOAD_FAILED",category:"network",operation:"media.download",retryable:!0,conversation:f});throw h.get(s)?.controller===g&&G({...v.get(s),...I,state:"failed",percent:v.get(s)?.percent??0,error:r}),r}finally{if(l?.(),h.get(s)?.controller===g){h.delete(s);const e=T.get(s);void 0!==e&&(e.idleSince=n())}}});return h.set(s,{controller:g,promise:_}),G({...I,...y,state:"queued"}),_}function te(e,t){k();const o=v.get(e);if(void 0===o)throw u({code:"IM_SDK_MEDIA_TASK_NOT_FOUND",category:"state",operation:t,retryable:!1});return o}function oe(e,t){return u({code:"IM_SDK_MEDIA_TASK_INVALID_STATE",category:"state",operation:t,retryable:!1,conversation:e.ref,details:Object.freeze({state:e.state,direction:e.direction})})}const re=e.emitter.subscribe(e=>{var o,r;t&&"media-task:updated"===e.type&&"upload"===e.task.direction&&(o=e.conversation,r=e.task.ref,o.conversationType===r.conversationType&&o.conversationId===r.conversationId&&(J(p(e.task)),x()))});return{api:{async clearCache(){k(),e.connection.invalidateMediaAssetCacheWrites?.(),W();try{await(e.assetCache?.clear())}catch(t){throw k(),e.emitter.emit({type:"error",error:{scope:"storage",message:"媒体缓存清理失败",cause:t}}),u({code:"IM_SDK_MEDIA_CACHE_CLEAR_FAILED",category:"state",operation:"media.clearCache",retryable:!0})}k(),F()},getSnapshot:()=>(k(),V()),subscribe:e=>(k(),_.add(e),()=>_.delete(e)),async cancel(t,o){const r=te(t,"media.cancel");if("queued"!==r.state&&"running"!==r.state&&("upload"!==r.direction||"paused"!==r.state))throw oe(r,"media.cancel");if("upload"===r.direction){if(!(void 0===o?e.connection.cancelMediaUpload(r.messageId):e.connection.cancelMediaUpload(r.messageId,o)))throw u({code:"IM_SDK_MEDIA_TASK_CONTROL_REJECTED",category:"state",operation:"media.cancel",retryable:!1,conversation:r.ref});return}const a=h.get(t);if(void 0===a)throw oe(r,"media.cancel");a.controller.abort();const i=L.has(t)?C(r.ref):q(r.ref);G({...r,state:"canceled",error:i})},async pause(t){const o=te(t,"media.pause");if("upload"!==o.direction||"queued"!==o.state&&"running"!==o.state)throw oe(o,"media.pause");if(!await(e.connection.pauseMediaUpload?.(o.messageId)))throw u({code:"IM_SDK_MEDIA_TASK_CONTROL_REJECTED",category:"state",operation:"media.pause",retryable:!1,conversation:o.ref});k()},async resume(t){const o=te(t,"media.resume");if("upload"!==o.direction||"paused"!==o.state)throw oe(o,"media.resume");if(!e.connection.resumeMediaUpload?.(o.messageId))throw u({code:"IM_SDK_MEDIA_TASK_CONTROL_REJECTED",category:"state",operation:"media.resume",retryable:!1,conversation:o.ref})},async retry(t,o){const r=te(t,"media.retry");if("failed"!==r.state&&"canceled"!==r.state)throw oe(r,"media.retry");if("upload"===r.direction){if(void 0!==o?.restartDownload)throw oe(r,"media.retry");if(("IM_SDK_MEDIA_UPLOAD_RESTART_REQUIRED"===r.error?.code||"IM_SDK_MEDIA_UPLOAD_CLEANUP_UNCONFIRMED"===r.error?.code)&&!0!==o?.restartUpload)throw u({code:"IM_SDK_MEDIA_UPLOAD_RESTART_REQUIRED",category:"state",operation:"media.retry",retryable:!0,conversation:r.ref});if(!(void 0===o?e.connection.retryMediaUpload(r.messageId):e.connection.retryMediaUpload(r.messageId,o)))throw u({code:"IM_SDK_MEDIA_TASK_CONTROL_REJECTED",category:"state",operation:"media.retry",retryable:!1,conversation:r.ref});return}if(void 0!==o?.restartUpload)throw oe(r,"media.retry");if(h.has(t)&&!h.get(t).controller.signal.aborted)throw u({code:"IM_SDK_MEDIA_TASK_IN_FLIGHT",category:"state",operation:"media.retry",retryable:!0,conversation:r.ref});const a=E.get(t);if(void 0===a)throw u({code:"IM_SDK_MEDIA_TASK_NOT_FOUND",category:"state",operation:"media.retry",retryable:!1});!0===o?.restartDownload&&(T.delete(t),L.delete(t)),await ee($(a),!0)},async getUploadRecovery(t){k();const o=g(t);if(void 0!==t.itemIndex)return{available:!1,reason:"unsupported"};const r=t.messageId;if(void 0===e.recoveryPort)return{available:!1,reason:"unavailable"};const a=e.domainState.getConversationMessage(o,r);if(void 0===a)return{available:!1,reason:"not-found"};if(!y(a))return{available:!1,reason:"invalid-state"};try{const t=await e.recoveryPort.get(o,r);k();const a=e.domainState.getConversationMessage(o,r);return void 0===a?{available:!1,reason:"not-found"}:y(a)?void 0===t?{available:!1,reason:"not-found"}:{available:!0,expiresAt:t.savedAt+864e5}:{available:!1,reason:"invalid-state"}}catch(e){k();return{available:!1,reason:"object"==typeof e&&null!==e&&"reason"in e?String(e.reason):"storage"}}},async resumeUpload(t,o){k();const r=g(t);if(void 0!==t.itemIndex||void 0===e.connection.recoverMediaUpload)throw u({code:"IM_SDK_MEDIA_RECOVERY_UNAVAILABLE",category:"state",operation:"media.resumeUpload",retryable:!1,conversation:r});try{const a=await e.connection.recoverMediaUpload(r,t.messageId,o.file);if(k(),!a.ok&&"paused"===a.reason)throw u({code:"IM_SDK_MEDIA_PAUSED",category:"state",operation:"media.resumeUpload",retryable:!1,conversation:r});if(!a.ok&&"cancelled"===a.reason)throw u({code:"IM_SDK_MEDIA_CANCELLED",category:"state",operation:"media.resumeUpload",retryable:!1,conversation:r});if(!a.ok)throw u({code:"IM_SDK_MEDIA_RECOVERY_UPLOAD_FAILED",category:"state",operation:"media.resumeUpload",retryable:!0,conversation:r})}catch(e){if(k(),"object"==typeof e&&null!==e&&"code"in e&&"string"==typeof e.code&&e.code.startsWith("IM_SDK_"))throw e;throw u({code:e instanceof Error&&"IM_MEDIA_RECOVERY_FILE_MISMATCH"===e.message?"IM_SDK_MEDIA_RECOVERY_FILE_MISMATCH":"IM_SDK_MEDIA_RECOVERY_FAILED",category:"state",operation:"media.resumeUpload",retryable:!1,conversation:r})}},download:function(e){try{return k(),ee($(e))}catch(e){return Promise.reject(e)}},prioritizeDownload:function(e){k();const t=g(e);R=m("download",t,e.messageId,e.itemIndex)},probeCached:async function(t){k();const o=d,r=t.map(e=>$(e,!1)),a=/* @__PURE__ */new Map,s=n(),c=r.map(e=>{const t=m("download",e.ref,e.messageId,e.itemIndex);return A.has(t)&&b.get(t)===e.resourceVersion&&s-(D.get(t)??0)<i});r.forEach((e,t)=>{if(c[t]||void 0===e.cacheKind||void 0===e.resourceVersion)return;const o={kind:e.cacheKind,messageId:e.messageId,resourceVersion:e.resourceVersion};a.set(JSON.stringify(o),o)});const l=[...a.values()];let p=l.map(()=>!1);if(l.length>0&&void 0!==e.assetCache){if(void 0===e.assetCache.hasMany)throw u({code:"IM_SDK_MEDIA_CACHE_PROBE_UNAVAILABLE",category:"contract",operation:"media.probeCached",retryable:!1});try{if(p=await e.assetCache.hasMany(l),p.length!==l.length||p.some(e=>"boolean"!=typeof e))throw new Error("媒体缓存查询结果数量或类型不符")}catch(t){throw k(),e.onAssetCacheEvent?.({operation:"get",outcome:"failed",kind:l[0].kind,messageId:l[0].messageId,cause:t}),u({code:"IM_SDK_MEDIA_CACHE_READ_FAILED",category:"state",operation:"media.probeCached",retryable:!0})}}if(k(),o!==d)throw u({code:"IM_SDK_MEDIA_CACHE_QUERY_STALE",category:"state",operation:"media.probeCached",retryable:!0});const y=new Map(l.map((e,t)=>[JSON.stringify(e),p[t]]));return Object.freeze(r.map((e,t)=>c[t]||!0===y.get(JSON.stringify({kind:e.cacheKind,messageId:e.messageId,resourceVersion:e.resourceVersion}))))},subscribeCacheChanges:e=>(k(),M.add(e),()=>M.delete(e)),getCached:async function(e){const t=$(e,!1);return void 0===t.cacheKind?null:await X(t,!0)},prepareLocalPreview:async function(t){if(k(),r(t.signal),void 0===e.preparePreview)throw u({code:"IM_SDK_MEDIA_PREVIEW_UNAVAILABLE",category:"contract",operation:"media.prepareLocalPreview",retryable:!1});let o;try{o=await e.preparePreview({operationId:"media.prepareLocalPreview:"+ ++f,kind:t.kind,file:t.file,..."video"===t.kind&&t.includeDisplayPoster?{includeDisplayPoster:!0}:{},...void 0===t.signal?{}:{signal:t.signal}})}catch(o){if(!0===t.signal?.aborted||o instanceof Error&&"AbortError"===o.name)throw o;return e.onLocalPreviewError?.({kind:t.kind,byteLength:t.file.size,cause:o}),null}return k(),r(t.signal),!Number.isFinite(o.width)||!Number.isFinite(o.height)||o.width<=0||o.height<=0?(e.onLocalPreviewError?.({kind:t.kind,byteLength:t.file.size,cause:new Error(`预览端口返回了不可用的尺寸 ${o.width}×${o.height}`)}),null):"video"===t.kind?{width:o.width,height:o.height,...void 0===o.duration?{}:{duration:o.duration},...void 0===o.posterData?{}:{posterData:o.posterData},...t.includeDisplayPoster&&o.displayPosterData?.byteLength?{displayPoster:new Blob([o.displayPosterData],{type:"image/jpeg"})}:{}}:{width:o.width,height:o.height}},prepareLocalVideoPoster:async function(t){if(k(),r(t.signal),void 0===e.prepareVideoPoster)throw u({code:"IM_SDK_MEDIA_PREVIEW_UNAVAILABLE",category:"contract",operation:"media.prepareLocalVideoPoster",retryable:!1});let o;try{o=await e.prepareVideoPoster({operationId:"media.prepareLocalVideoPoster:"+ ++f,kind:"video",file:t.file,...void 0===t.signal?{}:{signal:t.signal}})}catch(o){if(r(t.signal),o instanceof Error&&"AbortError"===o.name)throw o;return k(),e.onLocalPreviewError?.({kind:"video",byteLength:t.file.size,cause:o}),null}return r(t.signal),k(),!Number.isFinite(o.width)||!Number.isFinite(o.height)||o.width<=0||o.height<=0||!o.posterData?.byteLength?(e.onLocalPreviewError?.({kind:"video",byteLength:t.file.size,cause:new Error("视频封面解码没有返回有效尺寸和 JPEG 字节")}),null):new Blob([o.posterData],{type:"image/jpeg"})},prepareLocalImageThumbnail:async function(t){if(k(),r(t.signal),void 0===e.prepareImageThumbnail)throw u({code:"IM_SDK_MEDIA_PREVIEW_UNAVAILABLE",category:"contract",operation:"media.prepareLocalImageThumbnail",retryable:!1});try{const o=new Uint8Array(await t.file.slice(0,3).arrayBuffer());if(r(t.signal),k(),255!==o[0]||216!==o[1]||255!==o[2])return t.file;const a="image/jpeg"===t.file.type?t.file:t.file.slice(0,t.file.size,"image/jpeg"),i=await e.prepareImageThumbnail({operationId:"media.prepareLocalImageThumbnail:"+ ++f,kind:"image",file:a,...void 0===t.signal?{}:{signal:t.signal}});if(r(t.signal),k(),!Number.isFinite(i.width)||!Number.isFinite(i.height)||i.width<=0||i.height<=0||!i.posterData?.byteLength)throw new Error("图片缩略图解码没有返回有效尺寸和 JPEG 字节");return new Blob([i.posterData],{type:"image/jpeg"})}catch(o){if(r(t.signal),o instanceof Error&&"AbortError"===o.name)throw o;return k(),e.onLocalPreviewError?.({kind:"image",byteLength:t.file.size,cause:o}),null}}},clearCache:W,prune:z,dispose(){if(t){t=!1,d+=1,re();for(const e of h.values())e.controller.abort();O.dispose(),R=void 0,h.clear(),_.clear(),M.clear(),b.clear(),v.clear(),E.clear(),A.clear(),D.clear(),T.clear(),L.clear(),N=0}}}}export{d as createDefaultMediaAssetCacheStrategyRegistry,v as createMediaTasksRuntime,p as toProductMediaTaskUpdate};
@@ -0,0 +1 @@
1
+ function e(e){if(void 0===e||0===e.length)return;let s=!1;const t=[],r={},d=/* @__PURE__ */new Set;for(const a of e)"0"!==a.userId?d.has(a.userId)||(d.add(a.userId),t.push(a.userId),""!==a.displayName.trim()&&(r[a.userId]=a.displayName)):s=!0;return{atAll:s,atUserIds:t,...0===Object.keys(r).length?{}:{atUsersName:r}}}export{e as toMessageMention};
@@ -0,0 +1 @@
1
+ import{isCryptoExecutionError as e}from"../../../im-core/src/ports/crypto-task-executor.js";import{extractSearchText as t}from"../../../im-core/src/mapping/search-text.js";function r(e){const{teaKey:t,fileEncryptType:r,...o}=e;return o}function o(e){return Object.freeze({id:e.id,conversationId:e.conversationId,conversationType:e.conversationType,senderId:e.senderId,contentType:e.contentType,body:(o=e.body,Object.freeze({...void 0===o.customerService?{}:{customerService:Object.freeze({text:o.customerService.text,images:Object.freeze([...o.customerService.images]),files:Object.freeze(o.customerService.files.map(e=>Object.freeze({...e})))})},...void 0===o.text?{}:{text:o.text},...void 0===o.system?{}:{system:Object.freeze({...o.system})},...void 0===o.image?{}:{image:Object.freeze(r(o.image))},...void 0===o.video?{}:{video:Object.freeze(r(o.video))},...void 0===o.voice?{}:{voice:Object.freeze(r(o.voice))},...void 0===o.filesAlbum?{}:{filesAlbum:Object.freeze({...void 0===o.filesAlbum.caption?{}:{caption:o.filesAlbum.caption},items:Object.freeze(o.filesAlbum.items.map(e=>Object.freeze(r(e))))})},...void 0===o.file?{}:{file:Object.freeze(r(o.file))},...void 0===o.sticker?{}:{sticker:Object.freeze({...o.sticker})},...void 0===o.game?{}:{game:Object.freeze({...o.game})},...void 0===o.miniProgram?{}:{miniProgram:Object.freeze({...o.miniProgram})},...void 0===o.robot?{}:{robot:Object.freeze({modules:Object.freeze([...o.robot.modules]),commands:Object.freeze(o.robot.commands.map(e=>Object.freeze([...e])))})},...void 0===o.transfer?{}:{transfer:Object.freeze({...o.transfer})},...void 0===o.gift?{}:{gift:Object.freeze({...o.gift})},...void 0===o.liveRoom?{}:{liveRoom:Object.freeze({...o.liveRoom})},...void 0===o.redPacket?{}:{redPacket:Object.freeze({...o.redPacket})},...void 0===o.contact?{}:{contact:Object.freeze({...o.contact})},...void 0===o.call?{}:{call:Object.freeze({...o.call})},...void 0===o.mediaAlbum?{}:{mediaAlbum:Object.freeze({...void 0===o.mediaAlbum.caption?{}:{caption:o.mediaAlbum.caption},items:Object.freeze(o.mediaAlbum.items.map(e=>Object.freeze(r(e))))})},...void 0===o.unknown?{}:{unknown:Object.freeze({...o.unknown})}})),createdAt:e.createdAt,status:e.status,receipt:e.receipt,encryption:Object.freeze({...e.encryption}),...void 0===e.failure?{}:{failure:Object.freeze({...e.failure})},...void 0===e.serverTime?{}:{serverTime:e.serverTime},...void 0===e.mention?{}:{mention:Object.freeze({...e.mention,atUserIds:[...e.mention.atUserIds],...void 0===e.mention.ranges?{}:{ranges:e.mention.ranges.map(e=>({...e}))},...void 0===e.mention.atUsersName?{}:{atUsersName:Object.freeze({...e.mention.atUsersName})}})},...void 0===e.refMessageId?{}:{refMessageId:e.refMessageId},...void 0===e.edited?{}:{edited:e.edited},...void 0===e.recalled?{}:{recalled:Object.freeze({...e.recalled})},...void 0===e.deletedForEveryone?{}:{deletedForEveryone:Object.freeze({...e.deletedForEveryone})},...void 0===e.reactions?{}:{reactions:(t=e.reactions,Object.freeze({version:t.version,total:t.total,...void 0===t.currentUserEmoji?{}:{currentUserEmoji:t.currentUserEmoji},aggregates:Object.freeze(t.aggregates.map(e=>Object.freeze({emoji:e.emoji,count:e.count,mine:e.mine,latestAt:e.latestAt,participantIds:Object.freeze([...e.participantIds])})))}))}});var t,o}function i(e,t){return c(e,t)}function c(e,t){if(Object.is(e,t))return!0;if(null===e||null===t||"object"!=typeof e||"object"!=typeof t)return!1;if(e instanceof Uint8Array||t instanceof Uint8Array){if(!(e instanceof Uint8Array&&t instanceof Uint8Array&&e.byteLength===t.byteLength))return!1;for(let r=0;r<e.byteLength;r+=1)if(e[r]!==t[r])return!1;return!0}if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((e,r)=>c(e,t[r]));const r=Object.getPrototypeOf(e),o=Object.getPrototypeOf(t);if(r!==Object.prototype&&null!==r||o!==Object.prototype&&null!==o)return!1;const i=e,n=t,a=Object.keys(i);return a.length===Object.keys(n).length&&a.every(e=>Object.prototype.hasOwnProperty.call(n,e)&&c(i[e],n[e]))}function n(e){return{id:e.id,ref:Object.freeze({conversationType:e.conversationType,conversationId:e.conversationId}),senderId:e.senderId,contentType:e.contentType,createdAt:e.createdAt,status:e.status,preview:t(e)||("video"===e.contentType?e.body.video?.describe??"":"")}}function a(t){const r=e(t.cause)?t.cause.reason:"IM_SDK_CRYPTO_EXECUTION_FAILED"===t.code?t.details?.reason:void 0,o="unavailable"===r||"load-failed"===r||"messageerror"===r||"crashed"===r||"timeout"===r||"protocol-mismatch"===r;return{...t,...o?{recovery:"reload-app",retryable:!1}:{},...void 0===t.conversation?{}:{conversation:Object.freeze({...t.conversation})}}}function s(e,t,r){return a({...{"no-crypto":{code:"IM_SDK_MEDIA_CRYPTO_UNAVAILABLE",category:"contract",retryable:!1},"preview-failed":{code:"IM_SDK_MEDIA_PREVIEW_FAILED",category:"state",retryable:!1},"encrypt-failed":{code:"IM_SDK_MEDIA_ENCRYPT_FAILED",category:"state",retryable:!1},"upload-failed":{code:"IM_SDK_MEDIA_UPLOAD_FAILED",category:"network",retryable:!0},offline:{code:"IM_SDK_MEDIA_UPLOAD_FAILED",category:"network",retryable:!0},empty:{code:"IM_SDK_MEDIA_EMPTY",category:"validation",retryable:!1},cancelled:{code:"IM_SDK_MEDIA_CANCELLED",category:"state",retryable:!1},paused:{code:"IM_SDK_MEDIA_PAUSED",category:"state",retryable:!1},"invalid-duration":{code:"IM_SDK_VOICE_DURATION_INVALID",category:"validation",retryable:!1},"content-too-large":{code:"IM_SDK_MEDIA_CONTENT_TOO_LARGE",category:"validation",retryable:!1}}[e],operation:t,conversation:r})}function d(e,t,r){return a({code:"IM_SDK_OPERATION_FAILED",category:"state",operation:t,retryable:!1,conversation:r,cause:e})}export{i as areMessageViewsEqual,a as createImSdkError,s as mediaFailureToImSdkError,o as toMessageView,n as toProductMessage,d as unknownOperationErrorToImSdkError};
@@ -0,0 +1 @@
1
+ import{encodeConversationKey as s}from"../../../im-core/src/conversation-identity.js";import{mergeMessage as e}from"../../../im-core/src/mapping/merge.js";import{MESSAGES_BY_ID_BATCH_LIMIT as r,toWireMessageIds as t}from"../../../im-core/src/mapping/messages-by-id.js";import{fromWireMsgId as o,isWireMsgId as n}from"../../../im-core/src/mapping/message-id.js";import{ImHttpRequestError as i}from"../../../im-core/src/ports/http-port.js";function a(s){return n(s)?[.../* @__PURE__ */new Set([s.toLowerCase(),s.toUpperCase(),s])]:[s]}function c(s){const e=/* @__PURE__ */new Map;for(const n of s){const s=n.trim(),i=t([s])[0];if(void 0===i)continue;const c=o(i),u=e.get(c)??{sourceIds:/* @__PURE__ */new Map,queryIds:/* @__PURE__ */new Set};u.sourceIds.has(i)||u.sourceIds.set(i,s);for(const s of a(i))u.queryIds.add(s);if(u.queryIds.size>r)throw new RangeError("同一消息的查询形式超过单次请求上限");e.set(c,u)}return[...e].map(([s,e])=>({id:s,sourceIds:[...e.sourceIds.values()],queryIds:[...e.queryIds]}))}function u(s){const e=[];let t=[],o=0;for(const n of s)o+n.queryIds.length>r&&(e.push(t),t=[],o=0),t.push(n),o+=n.queryIds.length;return t.length>0&&e.push(t),e}async function d(r,t){const o=/* @__PURE__ */new Map,n=/* @__PURE__ */new Set;for(const i of u(c(r))){const r=i.flatMap(s=>s.queryIds),a=await t(r);if(a.messages.some(s=>a.missingMessageIds.includes(s.id)))throw new Error("按 ID 查询同时返回原消息与该消息全部形式缺失");for(const r of a.messages){const t=`${s(r)}:${r.id}`,n=o.get(t);o.set(t,void 0===n?r:e(n,r))}for(const s of a.missingMessageIds)n.add(s)}return{messages:[...o.values()],missingMessageIds:[...n]}}function f(s){return s instanceof i&&(403===s.status||400===s.status)?{retryable:!1,error:s}:{retryable:!0,error:s}}async function m(s){const e=c(s.messageIds);if(0===e.length)return{messages:[],missingMessageIds:[],unresolvedMessageIds:[]};const r=[],t=[],o=[];let n;for(const i of u(e)){const e=i.map(s=>s.id);if(s.isCurrent())try{const n=await s.fetchBatch(i.flatMap(s=>s.sourceIds));if(!s.isCurrent()){o.push(...e);continue}const a=new Set(e),c=n.messages.filter(s=>a.has(s.id)),u=new Set(c.map(s=>s.id)),d=new Set(n.missingMessageIds.filter(s=>a.has(s)));r.push(...c.map(s.projectMessage)),t.push(...d);for(const s of e)u.has(s)||d.has(s)||o.push(s)}catch(s){o.push(...e),n=f(s)}else o.push(...e)}return{messages:r,missingMessageIds:t,unresolvedMessageIds:o,...void 0===n?{}:{failure:n}}}export{m as fetchMessagesByIdInBatches,d as fetchMessagesByIdWithCaseVariants};
@@ -0,0 +1 @@
1
+ import{createImSdkError as e}from"./message.js";const t={timeout:{code:"IM_SDK_OUTBOX_TIMEOUT",category:"network"},rejected:{code:"IM_SDK_OUTBOX_REJECTED",category:"state"},encrypt_failed:{code:"IM_SDK_OUTBOX_ENCRYPT_FAILED",category:"state"},network:{code:"IM_SDK_OUTBOX_NETWORK_FAILED",category:"network"},unsupported:{code:"IM_SDK_OUTBOX_UNSUPPORTED",category:"unsupported"},unknown:{code:"IM_SDK_OUTBOX_FAILED",category:"state"}},r={"not-found":"IM_SDK_OUTBOX_NOT_FOUND","in-flight":"IM_SDK_OUTBOX_IN_FLIGHT","not-retryable":"IM_SDK_OUTBOX_NOT_RETRYABLE","invalid-state":"IM_SDK_OUTBOX_INVALID_STATE","delivery-uncertain":"IM_SDK_OUTBOX_DELIVERY_UNCERTAIN"};function o(e){return Object.freeze({conversationType:e.conversationType,conversationId:e.conversationId})}function n(r,o){const n=t[r.reason];return Object.freeze(e({...n,operation:"outbox.send",retryable:r.retryable??!0,conversation:o}))}function a(e){const t=Object.freeze({...e.conversation});return Object.freeze({messageId:e.messageId,ref:t,state:e.state,...void 0===e.failure?{}:{error:n(e.failure,t)}})}function s(e){const t=o(e);return a({messageId:e.id,conversation:t,state:"pending"===e.status?"queued":e.status,...void 0===e.lastError?{}:{failure:{reason:e.lastError.reason,retryable:e.lastError.retryable}}})}function c(t){let n=!0;const a=/* @__PURE__ */new Set;function c(){if(!n||!t.isActive())throw new Error("Outbox facade 已随账号 runtime teardown 失效")}function i(){return c(),Object.freeze(t.operations.getPending().map(s))}async function d(n,a){c();const s=t.operations.getPending().find(e=>e.id===a),i="outbox.retry"===n?t.operations.retry(a):t.operations.cancel(a);if(!i.accepted)throw function(t,o,n){const a=e({code:r[o],category:"state",operation:t,retryable:!1,...void 0===n?{}:{conversation:n},details:Object.freeze({reason:o})});return Object.assign(new Error(a.code),a,{name:"ImOutboxOperationError"})}(n,i.reason,void 0===s?void 0:o(s))}return{api:{getSnapshot:i,subscribe(e){c();const r=t.emitter.subscribe(t=>{"outbox:updated"===t.type&&n&&e(i())}),o=()=>{r(),a.delete(o)};return a.add(o),o},retry:e=>d("outbox.retry",e),cancel:e=>d("outbox.cancel",e)},dispose(){if(n){n=!1;for(const e of[...a])e()}}}}export{c as createOutboxRuntime,a as toProductOutboxUpdate};
@@ -0,0 +1 @@
1
+ import{createImSdkError as e,toMessageView as r}from"./message.js";function n(r,n,t,i){return e({code:"IM_SDK_PROFILE_ID_MISMATCH",category:"contract",operation:r,retryable:!1,...void 0===i?{}:{conversation:i},details:Object.freeze({expectedId:n,actualId:t})})}function t(e){return Object.freeze({conversationType:"group",conversationId:e.conversationId})}function i(e){return Object.freeze({conversationType:"channel",conversationId:e.conversationId})}function a(e,r){if(r.id!==e)throw n("contacts.getProfile",e,r.id);const t=r.remark?.trim(),i=r.nickname;return Object.freeze({userId:e,displayName:void 0===t||""===t?i||e:r.remark,nickname:i,...void 0===r.remark?{}:{remark:r.remark},...void 0===r.avatar?{}:{avatar:r.avatar},...void 0===r.signature?{}:{signature:r.signature},...void 0===r.miCallId?{}:{miCallId:r.miCallId},...void 0===r.birthday?{}:{birthday:r.birthday},...void 0===r.age?{}:{age:r.age},...void 0===r.remarkEmail?{}:{remarkEmails:Object.freeze([...r.remarkEmail])},...void 0===r.remarkPhones?{}:{remarkPhones:Object.freeze(r.remarkPhones.map(e=>Object.freeze({countryCode:e.countryCode,mobile:e.mobile})))}})}function o(e,r){if(r.id!==e.conversationId)throw n("groups.getProfile",e.conversationId,r.id,e);return Object.freeze({ref:t(e),name:r.name,...void 0===r.avatar?{}:{avatar:r.avatar},...void 0===r.memberCount?{}:{memberCount:r.memberCount},...void 0===r.ownerId?{}:{ownerId:r.ownerId},...void 0===r.verifyWay?{}:{verifyWay:r.verifyWay},...void 0===r.inviteCode?{}:{inviteCode:r.inviteCode},...void 0===r.isInGroup?{}:{isInGroup:r.isInGroup}})}function s(e,r){if(r.id!==e.conversationId)throw n("channels.getProfile",e.conversationId,r.id,e);return Object.freeze({ref:i(e),name:r.name,...void 0===r.avatar?{}:{avatar:r.avatar},...void 0===r.description?{}:{description:r.description},...void 0===r.announcement?{}:{announcement:r.announcement},...void 0===r.ownerId?{}:{ownerId:r.ownerId},...void 0===r.memberCount?{}:{memberCount:r.memberCount},...void 0===r.verifyType?{}:{verifyType:r.verifyType},...void 0===r.inviteCode?{}:{inviteCode:r.inviteCode},role:r.role,permissions:(t=r.permissions,Object.freeze({sendMessages:t.sendMessages,...void 0===t.mentionAll?{}:{mentionAll:t.mentionAll},...void 0===t.editProfile?{}:{editProfile:t.editProfile},...void 0===t.manageMembers?{}:{manageMembers:t.manageMembers},...void 0===t.manageAdmins?{}:{manageAdmins:t.manageAdmins},...void 0===t.moderateMessages?{}:{moderateMessages:t.moderateMessages},...void 0===t.manageMute?{}:{manageMute:t.manageMute},...void 0===t.dismissChannel?{}:{dismissChannel:t.dismissChannel},...void 0===t.transferOwnership?{}:{transferOwnership:t.transferOwnership}})),state:r.channelState,...void 0===r.allMembersMuted?{}:{allMembersMuted:r.allMembersMuted},...void 0===r.memberPrivateChatDisabled?{}:{memberPrivateChatDisabled:r.memberPrivateChatDisabled},...void 0===r.miniProgramRels?{}:{miniProgramRels:Object.freeze(r.miniProgramRels.map(e=>Object.freeze({...e})))}});var t}function d(e){return"ready"===e.state?Object.freeze({state:"ready",message:r(e.message)}):Object.freeze({state:"partial",...void 0===e.senderId?{}:{senderId:e.senderId},...void 0===e.createdAt?{}:{createdAt:e.createdAt},...void 0===e.previewText?{}:{previewText:e.previewText},reason:e.reason})}function c(e,r){if("group"!==r.conversationType||r.conversationId!==e.conversationId)throw n("groups.getPinnedMessage",e.conversationId,r.conversationId,e);return Object.freeze({group:t(e),messageId:r.messageId,preview:d(r.preview)})}function v(e,r){if("channel"!==r.conversationType||r.conversationId!==e.conversationId)throw n("channels.getPinnedMessage",e.conversationId,r.conversationId,e);return Object.freeze({channel:i(e),messageId:r.messageId,preview:d(r.preview)})}function m(e){switch(e){case"forbidden":return"permission";case"network":return"network";case"contract":return"contract";case"unsupported":return"unsupported";case"invalid-input":return"validation";default:return"state"}}function u(r,n,t){return"object"==typeof(i=r)&&null!==i&&"string"==typeof i.code&&"string"==typeof i.category&&"string"==typeof i.operation?r:(n.includes("PinnedMessage")||n.endsWith(".pinMessage")||n.endsWith(".unpinMessage"))&&function(e){return"object"==typeof e&&null!==e&&"string"==typeof e.kind}(r)?e({code:`IM_SDK_PINNED_MESSAGE_${r.kind.replaceAll("-","_").toUpperCase()}`,category:m(r.kind),operation:n,retryable:!0===r.retryable,...void 0===t?{}:{conversation:t},cause:r}):e({code:n.endsWith(".getProfile")?"IM_SDK_PROFILE_READ_FAILED":"IM_SDK_PROFILE_OPERATION_FAILED",category:"state",operation:n,retryable:!1,...void 0===t?{}:{conversation:t},cause:r});var i}export{v as toProductChannelPinnedMessage,s as toProductChannelProfile,a as toProductContactProfile,c as toProductGroupPinnedMessage,o as toProductGroupProfile,u as toProductProfileError};
@@ -0,0 +1 @@
1
+ import{createMediaTransferAdapter as e}from"../../../im-browser/src/media/media-transfer-adapter.js";import{MediaTransferError as r}from"../../../im-browser/src/media/media-transfer-errors.js";function t(t){let o=e({buckets:{...t.buckets},getUploadCredentials:t.getUploadCredentials,...void 0===t.useAccelerateEndpoint?{}:{useAccelerateEndpoint:t.useAccelerateEndpoint},...void 0===t.multipartTransfer?{}:{multipartTransfer:t.multipartTransfer},...void 0===t.multipartUpload?{}:{multipartUpload:t.multipartUpload}});const n=/* @__PURE__ */new Map;let i;return{upload:function(e){const t=o;if(void 0===t)return Promise.reject(Object.assign(new Error("Resource uploader has been disposed"),{code:"IM_SDK_RESOURCE_UPLOADER_DISPOSED"}));if(!(e.file instanceof Blob))return Promise.reject(new r("upload-source-invalid","Resource upload requires a File or Blob"));if(e.signal?.aborted)return Promise.reject(new DOMException("Resource upload canceled","AbortError"));const i=new AbortController,a=()=>i.abort();e.signal?.addEventListener("abort",a,{once:!0});let l=!0;const s=()=>{if(i.signal.aborted)throw new DOMException("Resource upload canceled","AbortError")},d=e.filename??("undefined"!=typeof File&&e.file instanceof File?e.file.name:void 0),c=(async()=>{try{const r=await t.uploadResource({data:e.file,kind:e.kind,...void 0===d?{}:{filename:d},...""===e.file.type?{}:{mimeType:e.file.type},signal:i.signal,onProgress:r=>{l&&!i.signal.aborted&&e.onProgress?.(r)}});if(s(),""===r.url.trim())throw new Error("Resource upload returned an empty URL");return{url:r.url}}catch(e){throw e instanceof r&&"multipart-abort-failed"===e.code||s(),e}finally{l=!1,e.signal?.removeEventListener("abort",a)}})();return n.set(i,c),c.then(()=>n.delete(i),()=>n.delete(i)),c},dispose:function(){if(void 0!==i)return i;o=void 0;const e=[...n.values()];for(const e of n.keys())e.abort();return i=Promise.allSettled(e).then(()=>{}),i}}}export{t as createImResourceUploader};
@@ -0,0 +1 @@
1
+ let e=0;function r(e){return Object.freeze({id:e.id,displayName:e.displayName,...void 0===e.username?{}:{username:e.username},...void 0===e.avatarUrl?{}:{avatarUrl:e.avatarUrl},...void 0===e.bound?{}:{bound:e.bound}})}function o(e){const r=e.robotId.trim(),o=e.conversationId.trim();if(""===r)throw new Error("绑定机器人 robotId 不能为空");if(""===o)throw new Error("绑定机器人 conversationId 不能为空");if("group"!==e.conversationType&&"channel"!==e.conversationType)throw new Error("绑定机器人只支持群组和社群");return Object.freeze({robotId:r,conversationType:e.conversationType,conversationId:o})}function t(e){return Object.freeze({id:e.id,displayName:e.displayName,...void 0===e.username?{}:{username:e.username},...void 0===e.avatarUrl?{}:{avatarUrl:e.avatarUrl},...void 0===e.developerName?{}:{developerName:e.developerName},...void 0===e.description?{}:{description:e.description},...void 0===e.userCount?{}:{userCount:e.userCount},...void 0===e.firstChat?{}:{firstChat:e.firstChat},...void 0===e.appId?{}:{appId:e.appId},...void 0===e.developerId?{}:{developerId:e.developerId},...void 0===e.appName?{}:{appName:e.appName},...void 0===e.domain?{}:{domain:e.domain},...void 0===e.suffixAddress?{}:{suffixAddress:e.suffixAddress},...void 0===e.h5Url?{}:{h5Url:e.h5Url},...void 0===e.dynamicHost?{}:{dynamicHost:e.dynamicHost}})}function n(e){return Object.freeze({id:e.id,name:e.name,kind:e.kind,...void 0===e.requestsReply?{}:{requestsReply:e.requestsReply},...void 0===e.appId?{}:{appId:e.appId},...void 0===e.domain?{}:{domain:e.domain},...void 0===e.path?{}:{path:e.path}})}function i(i){const a=++e,d=/* @__PURE__ */new Map,s=/* @__PURE__ */new Map,c=/* @__PURE__ */new Map,u=/* @__PURE__ */new Map;let p=0,v=0,l=!0;function m(){if(!l)throw new Error("机器人目录运行时已释放")}function f(e){const r=e??20;if(!Number.isSafeInteger(r)||r<1||r>100)throw new Error("机器人目录 pageSize 必须是 1-100 的整数");return r}async function w(e,o){m();const t=o?i.bind:i.unbind;if(void 0===t)throw new Error("机器人绑定能力未启用:需配置 coreApi");await t(function(e){return{robotId:e.robotId,conversationId:e.conversationId,groupType:"group"===e.conversationType?1:2}}(e)),m(),function(e,o){const t=c.get(e);void 0!==t&&c.set(e,r({id:t.id,displayName:t.displayName,...void 0===t.username?{}:{username:t.username},...void 0===t.avatarUrl?{}:{avatarUrl:t.avatarUrl},bound:o}))}(e.robotId,o)}async function y(e){if(m(),void 0===i.search)throw new Error("机器人目录能力未启用:需配置 coreApi");const o=++p,n=await i.search(function(e){const r={page:e.page,pageSize:e.pageSize,...""===e.keyword?{}:{keyword:e.keyword}};return"catalog"===e.scope.kind?r:{...r,groupId:e.scope.conversationId,groupType:"group"===e.scope.conversationType?1:2,..."bound"===e.scope.filter?{boundOnly:!0}:{}}}(e));m();const s=function(e,o){return Object.freeze(e.map(e=>{m();const n=c.get(e.id),a=o<(u.get(e.id)??0),d=r(a&&void 0!==n?{id:n.id,displayName:n.displayName,...void 0===n.username?{}:{username:n.username},...void 0===n.avatarUrl?{}:{avatarUrl:n.avatarUrl},...void 0===e.bound?{}:{bound:e.bound}}:e);return a||u.set(e.id,o),c.set(d.id,d),a||i.onProfileUpdated?.(t(d)),d}))}(n.items,o),l=n.exhausted?void 0:function(e){const r=`im-robots:${a}:${++v}`;return d.set(r,e),r}({...e,page:e.page+1});return Object.freeze({items:s,...void 0===l?{}:{nextPageToken:l},exhausted:n.exhausted})}return{api:{listFirstPage:e=>{try{const r=function(e){if("catalog"===e.kind)return Object.freeze({kind:"catalog"});const r=e.conversationId.trim();if(""===r)throw new Error("机器人目录 conversationId 不能为空");return Object.freeze({kind:"conversation",conversationType:e.conversationType,conversationId:r,...void 0===e.filter?{}:{filter:e.filter}})}(e?.scope??{kind:"catalog"});return y({page:1,pageSize:f(e?.pageSize),keyword:e?.keyword?.trim()??"",scope:r})}catch(e){return Promise.reject(e)}},listNextPage:e=>{m();const r=d.get(e);if(void 0===r)return Promise.reject(new Error("机器人目录 token 无效或已过期"));const o=s.get(e);if(void 0!==o)return o;const t=y(r).then(r=>(d.delete(e),r)).finally(()=>{s.delete(e)});return s.set(e,t),t},bindToConversation:e=>{try{return w(o(e),!0)}catch(e){return Promise.reject(e)}},unbindFromConversation:e=>{try{return w(o(e),!1)}catch(e){return Promise.reject(e)}},getProfile:async e=>{if(m(),void 0===i.getProfile)throw new Error("机器人资料能力未启用:需配置 coreApi");const o=e.robotId.trim();if(""===o)throw new Error("机器人资料 robotId 不能为空");const n=++p;u.set(o,n);const a=await i.getProfile({robotId:o,...void 0===e.lang?{}:{lang:e.lang}});if(m(),a.id!==o)throw new Error("机器人资料响应 robotId 与请求不一致");const d=t(a);if(u.get(o)===n){const e=c.get(o);c.set(o,r({id:d.id,displayName:d.displayName,...void 0===d.username?{}:{username:d.username},...void 0===d.avatarUrl?{}:{avatarUrl:d.avatarUrl},...void 0===e?.bound?{}:{bound:e.bound}})),i.onProfileUpdated?.(d)}return d},confirmChat:async e=>{if(m(),void 0===i.confirmChat)throw new Error("机器人开聊能力未启用:需配置 coreApi");const r=e.trim();if(""===r)throw new Error("确认机器人开聊 robotId 不能为空");await i.confirmChat(r),m()},listChatMenus:async e=>{if(m(),void 0===i.listChatMenus)throw new Error("机器人指令能力未启用:需配置 coreApi");const r=e.trim();if(""===r)throw new Error("机器人指令 robotId 不能为空");const o=await i.listChatMenus(r);return m(),Object.freeze(o.map(n))},requestMenuReply:async e=>{if(m(),void 0===i.requestMenuReply)throw new Error("机器人指令回复能力未启用:需配置 coreApi");const r=e.robotId.trim(),o=e.menuId.trim();if(""===r||""===o)throw new Error("机器人指令回复 robotId 和 menuId 不能为空");await i.requestMenuReply({robotId:r,menuId:o}),m()}},peek:e=>{const r=e.trim();return""===r?void 0:c.get(r)},dispose:()=>{l=!1,d.clear(),s.clear(),c.clear(),u.clear()}}}export{i as createRobotDirectoryRuntime};
@@ -0,0 +1 @@
1
+ import{createImSdkError as e}from"./message.js";import{extractSearchText as t}from"../../../im-core/src/mapping/search-text.js";import{resolveMessageTimestamp as o}from"../../../im-core/src/mapping/sort.js";let r=0;function n(e,t){const o="text"===e.contentType||"mediaAlbum"===e.contentType?t:"filesAlbum"===e.contentType?e.body.filesAlbum?.caption:void 0;if(void 0===o||""===o)return Object.freeze([Object.freeze({kind:"plain",text:t})]);const r=e.mention,n=[Object.freeze({kind:"rich-text",text:o,...void 0===r?{}:{mention:Object.freeze({atAll:r.atAll,atUserIds:[...r.atUserIds],...void 0===r.atUsersName?{}:{atUsersName:Object.freeze({...r.atUsersName})}})}})];return o.length<t.length&&n.push(Object.freeze({kind:"plain",text:t.slice(o.length)})),Object.freeze(n)}function s(t){const o=e({code:t.code,category:t.category,operation:t.operation,retryable:t.retryable,...void 0===t.cause?{}:{cause:t.cause}});return Object.assign(new Error(o.code),o,{name:"ImSearchOperationError"})}function i(e){const i=e.now??(()=>Date.now()),a=e.pageSize??30,c=e.tokenTtlMs??3e5,d=e.maxTokens??64;if(!Number.isInteger(a)||a<=0)throw new Error("搜索 pageSize 必须为正整数");if(!Number.isFinite(c)||c<=0)throw new Error("搜索 tokenTtlMs 必须为正数");if(!Number.isInteger(d)||d<=0)throw new Error("搜索 maxTokens 必须为正整数");const f=++r,p=/* @__PURE__ */new Map;let y=0,l=!0;function m(t){if(!l)throw s({code:"IM_SDK_SEARCH_RUNTIME_RELEASED",category:"state",operation:t,retryable:!1});if(!1===e.isAvailable?.())throw s({code:"IM_SDK_SEARCH_ACCOUNT_UNAVAILABLE",category:"state",operation:t,retryable:!1})}function u(e,t){const o=e.trim();if(""===o)throw s({code:"IM_SDK_SEARCH_KEYWORD_EMPTY",category:"validation",operation:t,retryable:!1});return o}function v(e){const t=`im-search:${f}:${++y}`;for(p.set(t,{...e,expiresAt:i()+c});p.size>d;){const e=p.keys().next().value;if("string"!=typeof e)break;p.delete(e)}return t}function g(e,t){const o="conversation"===t?"search.conversations.next":"search.messages.next";m(o);const r=p.get(e);if(void 0===r||r.expiresAt<=i())throw p.delete(e),s({code:"IM_SDK_SEARCH_PAGE_TOKEN_INVALID",category:"validation",operation:o,retryable:!1});if(r.kind!==t)throw s({code:"IM_SDK_SEARCH_PAGE_TOKEN_INVALID",category:"validation",operation:o,retryable:!1});return r}function h(e){const t=e.draft?.text.trim();return void 0===t||""===t?e.lastMessagePreview:t}function b(e){const t=Object.freeze({conversationType:e.type,conversationId:e.id});return Object.freeze({ref:t,title:e.title,preview:h(e)})}function I(e,t){const o=Object.freeze(e.slice(t,t+a)),r=t+o.length,n=r>=e.length,s=n?void 0:v({kind:"conversation",items:e,offset:r});return Object.freeze({items:o,...void 0===s?{}:{nextPageToken:s},exhausted:n})}async function _(t,o,r){m(r);const n=u(o,r).toLowerCase();return I(Object.freeze(e.domainState.getConversationList().filter(e=>("direct"===e.type||"group"===e.type||"channel"===e.type||"robot"===e.type)&&(void 0===t||e.type===t)&&`${e.title}\n${e.id}`.toLowerCase().includes(n)).map(b)),0)}async function w(r){let i;m("search.messages");try{i=await e.domainState.searchMessages(r.ref,{...void 0===r.keyword?{}:{keyword:r.keyword},...void 0===r.contentTypes?{}:{contentTypes:r.contentTypes},limit:a,...void 0===r.beforeSortKey?{}:{beforeSortKey:r.beforeSortKey}})}catch(e){throw s({code:"IM_SDK_SEARCH_FAILED",category:"state",operation:"search.messages",retryable:!0,cause:e})}const c=/* @__PURE__ */new Set,d=[];for(const{message:e}of i.results){if(e.conversationType!==r.ref.conversationType||e.conversationId!==r.ref.conversationId||""===e.sortKey.trim()||void 0!==r.contentTypes&&!r.contentTypes.includes(e.contentType))throw s({code:"IM_SDK_SEARCH_RESULT_INVALID",category:"contract",operation:"search.messages",retryable:!1});if(c.has(e.id))continue;c.add(e.id);const i=t(e);d.push(Object.freeze({ref:r.ref,messageId:e.id,senderId:e.senderId,createdAt:o(e),contentType:e.contentType,preview:i,previewParts:n(e,i)}))}const f=i.nextBeforeSortKey?.trim();if(!i.exhausted&&(void 0===f||""===f)||i.exhausted&&void 0!==f)throw s({code:"IM_SDK_SEARCH_PAGE_INVALID",category:"contract",operation:"search.messages",retryable:!1});const p=void 0===f?void 0:v({kind:"message",ref:r.ref,...void 0===r.keyword?{}:{keyword:r.keyword},...void 0===r.contentTypes?{}:{contentTypes:r.contentTypes},beforeSortKey:f});return Object.freeze({items:Object.freeze(d),...void 0===p?{}:{nextPageToken:p},exhausted:i.exhausted})}async function A(e,t,o,r){m(r);const n=function(e,t,o){const r=e.conversationId.trim();if(e.conversationType!==t||""===r)throw s({code:"IM_SDK_SEARCH_CONVERSATION_INVALID",category:"validation",operation:o,retryable:!1});return Object.freeze({conversationType:t,conversationId:r})}(e,t,r);return w({ref:n,keyword:u(o,r)})}async function T(e,t,o,r){m(o);const n=function(e,t){const o=e.conversationType,r=e.conversationId.trim();if("direct"!==o&&"group"!==o&&"channel"!==o&&"robot"!==o||""===r)throw s({code:"IM_SDK_SEARCH_CONVERSATION_INVALID",category:"supergroup"===o?"unsupported":"validation",operation:t,retryable:!1});return Object.freeze({conversationType:o,conversationId:r})}(e,o),i=r?.trim();return w({ref:n,...void 0===i||""===i?{}:{keyword:i},contentTypes:Object.freeze([t])})}return{api:{conversations:{all:e=>_(void 0,e,"search.conversations.all"),direct:e=>_("direct",e,"search.conversations.direct"),groups:e=>_("group",e,"search.conversations.groups"),channels:e=>_("channel",e,"search.conversations.channels"),async next(e){const t=g(e,"conversation");return I(t.items,t.offset)}},messages:{inDirect:(e,t)=>A(e,"direct",t,"search.messages.inDirect"),inGroup:(e,t)=>A(e,"group",t,"search.messages.inGroup"),inChannel:(e,t)=>A(e,"channel",t,"search.messages.inChannel"),inRobot:(e,t)=>A(e,"robot",t,"search.messages.inRobot"),texts:async(e,t)=>(m("search.messages.texts"),T(e,"text","search.messages.texts",u(t,"search.messages.texts"))),files:(e,t)=>T(e,"file","search.messages.files",t),images:e=>T(e,"image","search.messages.images"),videos:e=>T(e,"video","search.messages.videos"),voices:e=>T(e,"voice","search.messages.voices"),next:async e=>w(g(e,"message"))}},dispose(){l&&(l=!1,p.clear())}}}export{i as createSearchRuntime};
@@ -0,0 +1 @@
1
+ import{createImSdkError as e}from"./message.js";import{SessionFavoriteProviderUnavailableError as t,SessionFavoriteMappingError as o}from"../../../im-browser/src/http/session-favorite-http-adapter.js";import{buildFilesAlbumSnapshotBody as i}from"../../../im-core/src/mapping/files-album-body.js";import{projectSessionFavoriteFilesBody as r}from"../../../im-core/src/session-favorite-files.js";import{parseSessionFavoriteFileItems as n}from"../../../im-core/src/session-favorite-files.js";import{CoreJsonBusinessError as a}from"../../../im-browser/src/http/requests/core-json-request.js";function s(t){const o=e(t);return Object.assign(new Error(o.code),o,{name:"ImSessionFavoriteOperationError"})}function c(e,i){return s(i instanceof t?{code:"IM_SDK_SESSION_FAVORITE_UNAVAILABLE",category:"contract",operation:e,retryable:!1,cause:i}:i instanceof o?{code:"IM_SDK_SESSION_FAVORITE_MAPPING_INVALID",category:"validation",operation:e,retryable:!1,cause:i}:i instanceof a?{code:"IM_SDK_SESSION_FAVORITE_REQUEST_FAILED",category:"network",operation:e,retryable:i.businessCode>=500,cause:i}:{code:"IM_SDK_SESSION_FAVORITE_REQUEST_FAILED",category:"network",operation:e,retryable:!0,cause:i})}function d(e){const t=e?.trim()??"";return/^https?:\/\//i.test(t)?t:""}function l(e){if(void 0===e||0===e.length)return"";const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";let o="";for(let i=0;i<e.length;i+=3){const r=(e[i]??0)<<16|(e[i+1]??0)<<8|(e[i+2]??0);o+=t.charAt(r>>>18&63),o+=t.charAt(r>>>12&63),o+=i+1<e.length?t.charAt(r>>>6&63):"=",o+=i+2<e.length?t.charAt(63&r):"="}return o}function u(e){if("customerService"===e.conversationType)return null;if(!0===e.encryption?.decryptFailed)return null;switch(e.contentType){case"text":case"image":case"video":case"voice":case"file":case"mediaAlbum":return e.contentType;case"liveRoom":default:return null;case"filesAlbum":{const t=e.body.filesAlbum;return void 0!==t&&t.items.length>0&&t.items.every(e=>""!==d(e.url)&&""!==e.fileName.trim())?"filesAlbum":null}}}function m(e){const t=u(e);if("text"===t){const t=(e.body.text??"").trim();return""===t?null:{content:t}}if("image"===t){const t=d(e.body.image?.url),o=l(e.body.image?.thumbData);return""===t||""===o?null:{content:t,imageURL:t,thumbData:o,width:e.body.image?.width??0,height:e.body.image?.height??0}}if("video"===t){const t=d(e.body.video?.url),o=l(e.body.video?.thumbData);return""===t||""===o?null:{content:t,videoURL:t,thumbData:o,width:e.body.video?.width??0,height:e.body.video?.height??0,duration:e.body.video?.duration??0}}if("voice"===t){const t=d(e.body.voice?.url);return""===t?null:{content:t,voiceURL:t,duration:e.body.voice?.durationMs??0}}if("file"===t){const t=d(e.body.file?.url),o=(e.body.file?.fileName??"").trim();return""===t||""===o?null:{content:o,fileURL:t,fileName:o,size:e.body.file?.size??0}}if("mediaAlbum"===t){const t=e.body.mediaAlbum;if(void 0===t||0===t.items.length)return null;const o=t.items.map(e=>({mediaType:"video"===e.kind?2:1,url:d(e.url),width:e.width,height:e.height,...void 0!==e.durationMs&&e.durationMs>0?{duration:e.durationMs}:{},...void 0!==e.thumbUrl&&""!==e.thumbUrl?{thumbUrl:e.thumbUrl}:{},...void 0!==e.thumbData&&e.thumbData.length>0?{thumbData:l(e.thumbData)}:{},...void 0!==e.md5&&""!==e.md5?{md5:e.md5}:{},...void 0!==e.size&&e.size>0?{fileSize:e.size}:{},...void 0!==e.hd?{hd:e.hd}:{}}));return o.some(e=>""===e.url)?null:{contentType:"28",items:o,...void 0!==t.caption&&""!==t.caption.trim()?{caption:t.caption}:{}}}return null}function f(e,t,o){return e.senderId.trim()===t.trim()?o:t.trim()}function b(e){return Object.freeze({...e,body:"filesAlbum"===e.kind?r(e.body):Object.freeze({...e.body}),conversation:null===e.conversation?null:Object.freeze({...e.conversation})})}function y(e){function o(t){if(!e.isActive())throw s({code:"IM_SDK_SESSION_FAVORITE_RUNTIME_INACTIVE",category:"state",operation:t,retryable:!1})}async function r(i,r){if(o(i),void 0===e.provider)throw c(i,new t);let n;try{n=await r(e.provider)}catch(e){throw o(i),c(i,e)}return o(i),n}return{api:{list:async()=>{const e=await r("sessionFavorites.list",e=>e.list());return Object.freeze(e.map(b))},addFromMessage:async t=>{const n="sessionFavorites.addFromMessage",a=u(t.message);let c=m(t.message);"filesAlbum"===a&&(c=await async function(t,r,n){let a;o(n);try{a=await(e.resolveMessage?.(t,r))}catch(e){throw o(n),s({code:"IM_SDK_SESSION_FAVORITE_SOURCE_READ_FAILED",category:"state",operation:n,retryable:!0,cause:e})}if(o(n),"filesAlbum"!==a?.contentType||void 0===a.body.filesAlbum||a.id!==r||a.conversationId!==t.conversationId||a.conversationType!==t.conversationType||"sent"!==a.status||void 0!==a.recalled||void 0!==a.deletedForEveryone||!0===a.encryption.decryptFailed)return null;try{return i(a.body.filesAlbum)}catch(e){throw s({code:"IM_SDK_SESSION_FAVORITE_MAPPING_INVALID",category:"validation",operation:n,retryable:!1,cause:e})}}(t.conversation,t.message.id,n));const d=t.selfId.trim(),l=t.message.id.trim();if(null===a||null===c||""===d||""===l)throw s({code:"IM_SDK_SESSION_FAVORITE_UNSUPPORTED",category:"validation",operation:n,retryable:!1});const y={messageId:l,conversation:t.conversation,senderId:t.message.senderId.trim(),createdAt:t.message.createdAt,kind:a,plainBody:c,peerId:f(t.message,d,t.conversation.conversationId)};return b(await r(n,e=>e.add(y)))},delete:async e=>{const t="sessionFavorites.delete",o=[...new Set(e.map(e=>e.trim()).filter(e=>""!==e))];if(0===o.length)throw s({code:"IM_SDK_SESSION_FAVORITE_INPUT_INVALID",category:"validation",operation:t,retryable:!1});await r(t,e=>e.delete(o))}}}}export{m as buildSessionFavoritePlainBody,y as createSessionFavoritesRuntime,n as parseSessionFavoriteFileItems,u as resolveSessionFavoriteKindFromMessage};
@@ -0,0 +1 @@
1
+ import{createImSdkError as e}from"./message.js";const t="settings:read-receipts:v1",o="settings:appearance:v1",r=[.875,1,1.125,1.25,1.375,1.5,1.725,1.85];function n(t){return e({...t,retryable:t.retryable??!1})}function a(){return{globalEnabled:!0,peerOverrides:/* @__PURE__ */Object.create(null)}}function c(e){return{globalEnabled:e.globalEnabled,peerOverrides:Object.assign(/* @__PURE__ */Object.create(null),e.peerOverrides)}}function i(e){return"number"==typeof e&&r.includes(e)}function s(e,t){if("direct"!==e?.conversationType||"string"!=typeof e.conversationId||""===e.conversationId.trim())throw n({code:"IM_SDK_READ_RECEIPT_CONVERSATION_INVALID",category:"validation",operation:t,...void 0===e?{}:{conversation:e}});return{conversationType:"direct",conversationId:e.conversationId}}function l(e,t){if(void 0!==e&&"function"==typeof e.getMeta&&"function"==typeof e.setMeta)return e;throw n({code:"IM_SDK_SETTINGS_STORAGE_UNAVAILABLE",category:"contract",operation:t})}function d(e){let d,f,p,u=!1,b=!1,v=!1,g=a(),y=Promise.resolve(),E=!1,I={fontScale:1},_=Promise.resolve();function S(e){return n({code:"IM_SDK_CLIENT_DISPOSED",category:"state",operation:e})}function O(e){if(u)throw S(e)}async function h(o,r){if(O(r),b)return;let c;try{c=l(e.storage,r)}catch(e){if(!o)return;throw e}try{const e=await c.getMeta(t);O(r),g=function(e){if("object"!=typeof e||null===e)return a();const t=e,o=/* @__PURE__ */Object.create(null);if("object"==typeof t.peerOverrides&&null!==t.peerOverrides)for(const[e,r]of Object.entries(t.peerOverrides))""!==e.trim()&&"boolean"==typeof r&&(o[e]=r);return{globalEnabled:"boolean"!=typeof t.globalEnabled||t.globalEnabled,peerOverrides:o}}(e),b=!0,v=!1}catch(e){if(u)throw S(r);throw v=!0,n({code:"IM_SDK_SETTINGS_STORAGE_FAILED",category:"state",operation:r,cause:e})}}function D(e){return O(e),b?Promise.resolve():(void 0===d&&(d=h(!0,e).finally(()=>{d=void 0})),d)}async function T(t){if(O(t),!E)try{const r=await l(e.storage,t).getMeta(o);O(t),I=function(e){if("object"!=typeof e||null===e)return{fontScale:1};const t=e.fontScale;return{fontScale:i(t)?t:1}}(r),E=!0}catch(e){if(u)throw S(t);if("object"==typeof e&&null!==e&&"code"in e)throw e;throw n({code:"IM_SDK_SETTINGS_STORAGE_FAILED",category:"state",operation:t,cause:e})}}function R(e){return O(e),E?Promise.resolve():(void 0===p&&(p=T(e).finally(()=>{p=void 0})),p)}async function w(o,r,a){O(o);const i=y.then(async()=>{O(o),await D(o),O(o);const i=c(g),s=r(c(g));try{await l(e.storage,o).setMeta(t,c(s))}catch(e){if(u)throw S(o);if("object"==typeof e&&null!==e&&"code"in e)throw e;throw n({code:"IM_SDK_SETTINGS_STORAGE_FAILED",category:"state",operation:o,cause:e})}O(o),g=s,a?.(i,s)});return y=i.catch(()=>{}),i}const j={async getGlobal(){const e="settings.readReceipts.getGlobal";return O(e),await D(e),O(e),g.globalEnabled},setGlobal:t=>"boolean"!=typeof t?Promise.reject(n({code:"IM_SDK_READ_RECEIPT_SETTING_INVALID",category:"validation",operation:"settings.readReceipts.setGlobal"})):w("settings.readReceipts.setGlobal",e=>({...e,globalEnabled:t}),(t,o)=>{t.globalEnabled&&!o.globalEnabled&&e.onDirectReadReceiptDisabled?.()}),async getConversation(e){const t="settings.readReceipts.getConversation";O(t);const o=s(e,t);await D(t),O(t);const r=g.peerOverrides[o.conversationId]??!0;return Object.freeze({enabled:r,effectiveEnabled:g.globalEnabled&&r})},setConversation(t,o){const r="settings.readReceipts.setConversation";let a;try{a=s(t,r)}catch(e){return Promise.reject(e)}return"boolean"!=typeof o?Promise.reject(n({code:"IM_SDK_READ_RECEIPT_SETTING_INVALID",category:"validation",operation:r,conversation:a})):w(r,e=>(e.peerOverrides[a.conversationId]=o,e),(t,o)=>{const r=a.conversationId,n=t.globalEnabled&&(t.peerOverrides[r]??!0),c=o.globalEnabled&&(o.peerOverrides[r]??!0);n&&!c&&e.onDirectReadReceiptDisabled?.(r)})},resetConversation(e){const t="settings.readReceipts.resetConversation";let o;try{o=s(e,t)}catch(e){return Promise.reject(e)}return w(t,e=>(delete e.peerOverrides[o.conversationId],e))}},A={fontScale:Object.freeze({async get(){const e="settings.appearance.fontScale.get";return await R(e),O(e),I.fontScale},set(t){const a="settings.appearance.fontScale.set";if(!i(t))return Promise.reject(n({code:"IM_SDK_CHAT_FONT_SCALE_INVALID",category:"validation",operation:a,details:{supportedValues:[...r]}}));const c=_.then(async()=>{O(a),await R(a),O(a);const r={fontScale:t};try{await l(e.storage,a).setMeta(o,r)}catch(e){if(u)throw S(a);if("object"==typeof e&&null!==e&&"code"in e)throw e;throw n({code:"IM_SDK_SETTINGS_STORAGE_FAILED",category:"state",operation:a,cause:e})}O(a),I=r});return _=c.catch(()=>{}),c}})};return{api:Object.freeze({readReceipts:Object.freeze(j),appearance:Object.freeze(A),conversationBackgrounds:e.conversationBackgrounds}),async hydrate(){O("settings.readReceipts.hydrate"),b||(void 0===d&&(d=h(!1,"settings.readReceipts.hydrate").finally(()=>{d=void 0})),await d)},isDirectReadReceiptEnabled:e=>!u&&!v&&g.globalEnabled&&(g.peerOverrides[e]??!0),dispose(){if(void 0!==f)return f;u=!0,g=a(),I={fontScale:1};const e=d,t=y,o=p,r=_;return f=Promise.allSettled([...void 0===e?[]:[e],t,...void 0===o?[]:[o],r]).then(()=>{}),f}}}export{r as IM_CHAT_FONT_SCALES,d as createImSettingsRuntime};
@@ -0,0 +1 @@
1
+ const n=/* @__PURE__ */new WeakMap;function e(e,t){n.set(e,t)}function t(e){const t=n.get(e);if(void 0===t)throw new Error("advanced message diagnostics 只能绑定由 SDK 工厂创建的 client");return t()}export{t as getAdvancedMessageDiagnosticOperations,e as registerAdvancedMessageDiagnosticOperations};
@@ -0,0 +1 @@
1
+ function e(e){const n=/* @__PURE__ */new Map,a=/* @__PURE__ */new Set,t=/* @__PURE__ */new Map,d=/* @__PURE__ */new Set;let r=!1;const o=e.schedule??(e=>{const n=setTimeout(e,120);return()=>clearTimeout(n)});function i(n,a,t){try{e.report(n,a,t)}catch{}}function s(c){r||d.has(c)||a.has(c)||t.has(c)||t.set(c,o(()=>{t.delete(c),async function(t){const o={conversationType:"channel",conversationId:t};a.add(t);try{for(let a=0;a<2;a+=1){const s=n.get(t);if(r||!e.isActive()||void 0===s||void 0===e.domainState.getConversationContext(o))return void n.delete(t);if(e.domainState.hasPendingChannelRead(o))return d.add(t),void i("channel-read-summary-deferred",o,{reason:"read-pending"});n.delete(t);const c=e.domainState.getReadState(o);if(c?.readCursor!==s)return;const l=e.domainState.getChannelReadRevision(o),h=Date.now();let u;try{u=await e.loadSummary({channelId:t,readCursor:s})}catch(n){return void(!r&&e.isActive()&&i("channel-read-summary-failed",o,{reason:"request-failed",durationMs:Date.now()-h,errorName:n instanceof Error?n.name:"Unknown",errorCode:"object"==typeof n&&null!==n&&"code"in n&&"string"==typeof n.code?n.code:void 0}))}if(r||!e.isActive()||void 0===e.domainState.getConversationContext(o))return;if(e.domainState.hasPendingChannelRead(o)||e.domainState.getChannelReadRevision(o)!==l){if(i("channel-read-summary-discarded",o,{reason:"read-changed"}),e.domainState.hasPendingChannelRead(o))return n.has(t)||n.set(t,s),void d.add(t);if(0===a&&!n.has(t)&&!e.domainState.hasPendingChannelRead(o)&&e.domainState.getReadState(o)?.readCursor===s){n.set(t,s);continue}return}return void 0===u||u.readCursor!==s?void i("channel-read-summary-discarded",o,{reason:void 0===u?"missing-channel":"cursor-mismatch"}):(e.domainState.applyChannelReadSummary(o,u),n.get(t)===s&&n.delete(t),void i("channel-read-summary-applied",o,{unreadCount:u.unreadCount,durationMs:Date.now()-h}))}}finally{a.delete(t),n.has(t)&&!d.has(t)&&s(t)}}(c)}))}return{settled(e){d.delete(e.channelId),n.has(e.channelId)&&s(e.channelId)},request(a){!r&&e.isActive()&&(e.domainState.hasPendingChannelRead({conversationType:"channel",conversationId:a.channelId})||d.delete(a.channelId),n.set(a.channelId,a.readCursor),s(a.channelId))},dispose(){r=!0;for(const e of t.values())e();t.clear(),n.clear(),d.clear()}}}export{e as createChannelReadSummaryRefresh};
@@ -0,0 +1 @@
1
+ import{isMessageEqual as e}from"../../../im-core/src/mapping/merge.js";const t="customerService",o="__customer_service__";function r(e,t){const o=e.raw?.chat;return"direct"===e.conversationType&&1e3===o?.msgType&&(o.sFromId===t||o.sToId===t)}function s(s){let n,i=!1;return{run:()=>(s.assertCurrent(),i?Promise.resolve():(n??(n=async function(){s.assertCurrent();const n=s.getSelfId(),i=()=>{if(s.assertCurrent(),s.getSelfId()!==n)throw new DOMException("客服历史恢复所属账号已改变","AbortError")},a=s.domainState;for(const d of a.getSessions().filter(e=>"direct"===e.type)){const c={conversationType:"direct",conversationId:d.id};let g,f=!1;for(;;){i();const d=void 0===s.storage?a.getLoadedMessagesByConversation(c).filter(e=>void 0===g||e.sortKey<g):await s.storage.getMessages(c,{limit:100,beforeSortKey:g});if(i(),0===d.length)break;const l=d.filter(e=>r(e,n));for(let d=0;d<l.length;d+=20){const g=l.slice(d,d+20),v=await s.fetch(g.map(e=>e.id));i();for(const d of g){const g=v.find(e=>e.id===d.id);if(void 0===g||g.conversationType!==t||g.conversationId!==o||g.encryption.decryptFailed||"unknown"===g.contentType)throw new Error(`客服历史原文不可恢复:${d.id}`);const l=void 0===s.storage?a.getConversationMessage(c,d.id):await s.storage.getMessage(c,d.id);if(i(),null==l||!r(l,n)||!e(l,d))continue;const y=a.getReadState(c),u=!0===d.readBySelf||y?.readCursor===d.id||void 0!==y?.readCursorSortKey&&d.sortKey<=y.readCursorSortKey;await a.commitReceivedMessages([{...g,...u?{readBySelf:!0}:{}}],"offline"),i(),await a.deleteLocalMessage(c,d.id),i(),f=!0}}const v=d[0].sortKey;if(void 0!==g&&v>=g)throw new Error("客服历史扫描分页位置没有前进");if(g=v,void 0===s.storage)break}if(!f)continue;const l=void 0===s.storage?[]:await s.storage.getMessages(c,{limit:1});i(),0!==l.length||0!==a.getLoadedMessagesByConversation(c).length||null!=a.getDraft(c)||s.hasPendingSend(c)||a.removeConversation(c)}}().then(()=>{i=!0}).finally(()=>{n=void 0})),n))}}export{s as createCustomerServiceLegacyRecovery};
@@ -0,0 +1 @@
1
+ function e(e,r){e.record("error","core","crypto","decrypt-failed",()=>{const e={...void 0===r.commandId?{}:{commandId:r.commandId},...void 0===r.payloadByteLength?{}:{payloadByteLength:r.payloadByteLength}};return{conversation:r.conversation,...void 0===r.operationId?{}:{operationId:r.operationId},data:{source:r.source,stage:"content-decrypt",strategy:r.conversation.conversationType,...void 0===r.endpoint?{}:{endpoint:r.endpoint},...void 0===r.surface?{}:{surface:r.surface},...void 0===r.decryptStage?{}:{decryptStage:r.decryptStage},messageId:r.messageId,...void 0===r.senderId?{}:{senderId:r.senderId},...void 0===r.receiverId?{}:{receiverId:r.receiverId},...void 0===r.messageType?{}:{messageType:r.messageType},...void 0===r.encrypt?{}:{encrypt:r.encrypt},...void 0===r.encryptVersion?{}:{encryptVersion:r.encryptVersion},...void 0===r.resolvedKeyVersion?{}:{resolvedKeyVersion:r.resolvedKeyVersion},reason:r.reason,resolverOutcome:"no-key"===r.reason?"miss":"decrypt-error",resolverSource:r.resolverSource,...void 0===r.keySource?{}:{keySource:r.keySource},...void 0===r.keyByteLength?{}:{keyByteLength:r.keyByteLength},...void 0===r.forceRefreshAttempted?{}:{forceRefreshAttempted:r.forceRefreshAttempted},...void 0===r.clientTypeHeader?{}:{clientTypeHeader:r.clientTypeHeader},...void 0===r.clientTypeBody?{}:{clientTypeBody:r.clientTypeBody},...void 0===r.cipherDataByteLength?{}:{cipherDataByteLength:r.cipherDataByteLength},...void 0===r.decryptedByteLength?{}:{decryptedByteLength:r.decryptedByteLength},...0===Object.keys(e).length?{}:{safeProtocolMetadata:e}},error:{message:"IM message decryption failed",code:"no-key"===r.reason?"IM_DECRYPT_NO_KEY":"IM_DECRYPT_FAILED",category:"crypto",...void 0===r.cause?{}:{data:r.cause}}}})}export{e as recordDecryptFailedDiagnostic};