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{useImComposerStore as e}from"./composer.store.js";import{getImChatKitContext as n,registerImChatKitStoreDisposer as o,resolveImChatKitPinia as t}from"./context.js";import{useImThreadStore as r}from"./thread.store.js";const a=/* @__PURE__ */new WeakMap;function i(e){return Object.freeze({conversationType:e.conversationType,conversationId:e.conversationId})}function c(e,n,o){const t="object"==typeof e&&null!==e?e:null,r="flush"===n?"IM_CHAT_KIT_DRAFT_SAVE_FAILED":"IM_CHAT_KIT_THREAD_OPERATION_FAILED";return Object.freeze({code:null!==t&&"string"==typeof t.code?t.code:r,category:null!==t&&(a=t.category,"auth"===a||"network"===a||"protocol"===a||"permission"===a||"validation"===a||"state"===a||"unsupported"===a||"contract"===a)?t.category:"state",operation:`conversation.activate.${n}`,retryable:null!==t&&"boolean"==typeof t.retryable?t.retryable:"flush"===n,conversation:i(o)});var a}function s(e,n){return e?.conversationType===n.conversationType&&e.conversationId===n.conversationId}function v(v=t()){const d=n(v),p=a.get(v);if(void 0!==p&&!p.disposed)return p.coordinator;const f=d.runtime,l=f.getDiagnostics(),u=e(v),g=r(v),b={conversation:null,epoch:0,disposed:!1,invalidatePendingOpen:g.invalidatePendingOpen};return b.coordinator=Object.freeze({activate:async function(e,n){const o=i(e),t=n?.signal;if(!0===t?.aborted)return Object.freeze({ok:!1,reason:"stale",conversation:o});b.conversation=o;const r=++b.epoch,a=f.getGeneration(),v=()=>!b.disposed&&b.epoch===r&&f.getGeneration()===a;g.invalidatePendingOpen();const d=()=>{v()&&(b.epoch+=1,g.invalidatePendingOpen())};t?.addEventListener("abort",d,{once:!0});try{if(l.record("debug","pinia","conversation","conversation-activation-start",()=>({generation:a,conversation:o})),"direct"!==(p=o).conversationType&&"group"!==p.conversationType&&"channel"!==p.conversationType&&"robot"!==p.conversationType&&"customerService"!==p.conversationType)return l.record("warn","pinia","conversation","conversation-activation-unsupported",()=>({generation:a,conversation:o})),Object.freeze({ok:!1,reason:"unsupported",conversation:o});const e=g.getHandle(),n=async()=>{if(void 0!==e)for(;v()&&u.hasPendingWork(e);)await u.flush(e)};if(void 0!==e&&u.hasPendingWork(e))try{await n()}catch(e){if(!v())return Object.freeze({ok:!1,reason:"stale",conversation:o});const n=c(e,"flush",o);return l.record("warn","pinia","conversation","conversation-activation-draft-save-failed",()=>({generation:a,conversation:o,error:{message:"会话激活前保存草稿失败",data:n}})),Object.freeze({ok:!1,reason:"draft-save-failed",conversation:o,error:n})}if(!v())return Object.freeze({ok:!1,reason:"stale",conversation:o});if(void 0!==g.getHandle()&&s(g.activeRef,o))return l.record("debug","pinia","conversation","conversation-activation-complete",()=>({generation:a,conversation:o,data:{reused:!0}})),Object.freeze({ok:!0,status:"opened",conversation:o});let t=!1;try{if(void 0===await g.open(o,{beforeCommit:async()=>{try{await n()}catch(e){throw t=!0,e}}})||!v())return Object.freeze({ok:!1,reason:"stale",conversation:o})}catch(e){if(!v())return Object.freeze({ok:!1,reason:"stale",conversation:o});const n=c(e,t?"flush":"open",o);return l.record("warn","pinia","conversation",t?"conversation-activation-draft-save-failed":"conversation-activation-open-failed",()=>({generation:a,conversation:o,error:{message:t?"切换前保存新增草稿失败,保留当前线程":"目标会话打开失败,保留当前线程",data:n}})),Object.freeze({ok:!1,reason:t?"draft-save-failed":"open-failed",conversation:o,error:n})}return l.record("debug","pinia","conversation","conversation-activation-complete",()=>({generation:a,conversation:o})),Object.freeze({ok:!0,status:"opened",conversation:o})}finally{t?.removeEventListener("abort",d)}var p}}),a.set(v,b),o(v,()=>{b.disposed=!0,b.conversation=null,b.epoch+=1,a.get(v)===b&&a.delete(v)}),b.coordinator}function d(e,n){const o=a.get(e);void 0!==o&&!o.disposed&&s(o.conversation,n)&&(o.epoch+=1,o.invalidatePendingOpen())}export{d as invalidateImConversationActivation,v as useImConversationActivationCoordinator};
@@ -0,0 +1 @@
1
+ import{useImComposerStore as e}from"./composer.store.js";import{getImChatKitContext as o,registerImChatKitStoreDisposer as t,resolveImChatKitPinia as r}from"./context.js";import{invalidateImConversationActivation as n}from"./conversation-activation.js";import{useImConversationListStore as a}from"./conversation-list.store.js";import{useImMessageOperationsStore as s}from"./message-operations.store.js";import{useImSearchStore as i}from"./search.store.js";import{useImThreadStore as c}from"./thread.store.js";const d=/* @__PURE__ */new WeakMap;function v(e){return Object.freeze({conversationType:e.conversationType,conversationId:e.conversationId})}function l(l=r()){const p=o(l),f=d.get(l);if(void 0!==f&&!f.disposed)return f.coordinator;const u=p.runtime,m=u.getDiagnostics(),g=a(l),y=c(l),b=e(l),j=s(l),T=i(l),O={disposed:!1};return O.coordinator=Object.freeze({deleteLocal:function(e){const o=v(e);if(O.disposed)return Object.freeze({ok:!1,reason:"stale",conversation:o});const t=u.getGeneration(),r=null!==y.activeRef&&y.activeRef.conversationType===o.conversationType&&y.activeRef.conversationId===o.conversationId;if(m.record("debug","pinia","conversation","conversation-delete-start",()=>({generation:t,conversation:o})),"direct"!==(a=o).conversationType&&"group"!==a.conversationType&&"channel"!==a.conversationType&&"robot"!==a.conversationType&&"customerService"!==a.conversationType)return Object.freeze({ok:!1,reason:"unsupported",conversation:o});var a;const s=g.deleteLocal(o);if(!s.ok){if("stale"===s.reason)return Object.freeze({ok:!1,reason:"stale",conversation:o});const e=function(e,o){const t="object"==typeof e&&null!==e?e:null;return Object.freeze({code:null!==t&&"string"==typeof t.code?t.code:"IM_CHAT_KIT_CONVERSATION_DELETE_FAILED",category:null!==t&&(r=t.category,"auth"===r||"network"===r||"protocol"===r||"permission"===r||"validation"===r||"state"===r||"unsupported"===r||"contract"===r)?t.category:"state",operation:"conversation.deleteLocal",retryable:null!==t&&"boolean"==typeof t.retryable&&t.retryable,conversation:v(o)});var r}(s.error,o);return m.record("warn","pinia","conversation","conversation-delete-failed",()=>({generation:t,conversation:o,error:{message:"本机会话删除失败,保留当前线程",data:e}})),Object.freeze({ok:!1,reason:"delete-failed",conversation:o,error:e})}if(O.disposed||u.getGeneration()!==t)return Object.freeze({ok:!1,reason:"stale",conversation:o});n(l,o);const i=y.closeActiveConversation(o),c=r||i;return c&&(b.reset(),j.reset(),T.reset()),m.record("debug","pinia","conversation","conversation-delete-complete",()=>({generation:t,conversation:o,data:{activeConversationCleared:c}})),Object.freeze({ok:!0,status:"deleted",conversation:o,activeConversationCleared:c})}}),d.set(l,O),t(l,()=>{O.disposed=!0,d.get(l)===O&&d.delete(l)}),O.coordinator}export{l as useImConversationDeletionCoordinator};
@@ -0,0 +1 @@
1
+ import{defineStore as e}from"pinia";import{ref as r,computed as t,shallowRef as n}from"vue";import{countUnreadConversations as o}from"../presentation/conversation-unread.js";import{getImChatKitContext as a,registerImChatKitStoreDisposer as i,resolveImChatKitPinia as s}from"./context.js";function c(e){return Object.freeze({conversationType:e.conversationType,conversationId:e.conversationId})}function u(e,r,t){const n="object"==typeof e&&null!==e?e:null;return Object.freeze({code:null!==n&&"string"==typeof n.code?n.code:"IM_CHAT_KIT_CONVERSATION_LIST_ACTION_FAILED",category:null!==n&&(o=n.category,"auth"===o||"network"===o||"protocol"===o||"permission"===o||"validation"===o||"state"===o||"unsupported"===o||"contract"===o)?n.category:"state",operation:null!==n&&"string"==typeof n.operation?n.operation:`conversation-list.${r}`,retryable:null!==n&&"boolean"==typeof n.retryable?n.retryable:"refresh"===r||"set-muted"===r||"mark-read"===r,...void 0===t?{}:{conversation:t}});var o}function l(i){return e("k2-im-conversation-list",()=>{const e=a(i).runtime,s=e.getDiagnostics(),l=r([]),f=r("idle"),d=r(0),p=t(()=>o(l.value)),v=n(null);let b,k=!1,j=null,O=0;function g(e="idle"){l.value=[],f.value=e,d.value=0,v.value=null}function m(r){if(k)throw new Error("Conversation List Store 已 dispose,不能重新绑定");if(j===r)return;if(b?.(),b=void 0,j=r,O+=1,g(),null===r)return;const t=e.getGeneration();b=r.conversations.subscribe(n=>function(r,t,n){k||j!==t||e.getGeneration()!==n||(l.value=r.items,f.value=r.state,d.value=r.totalUnread,v.value=r.error??null)}(n,r,t)),s.record("debug","pinia","conversation","conversation-list-subscribed",()=>({generation:t}))}function h(r){return!k&&j===r.client&&e.getProductClient()===r.client&&e.getGeneration()===r.generation&&O===r.bindingEpoch}function y(){const r=e.ensureProductClient();return m(r),{client:r,generation:e.getGeneration(),bindingEpoch:O}}function z(e,r,t){const n=c(r);if(k)return Object.freeze({ok:!1,operation:e,reason:"stale",conversation:n});let o;try{o=y()}catch(r){return Object.freeze({ok:!1,operation:e,reason:"failed",conversation:n,error:u(r,e,n)})}try{t(o.client,n)}catch(r){return h(o)?Object.freeze({ok:!1,operation:e,reason:"failed",conversation:n,error:u(r,e,n)}):Object.freeze({ok:!1,operation:e,reason:"stale",conversation:n})}return h(o)?Object.freeze({ok:!0,operation:e,conversation:n}):Object.freeze({ok:!1,operation:e,reason:"stale",conversation:n})}async function C(e,r,t){const n=c(r);if(k)return Object.freeze({ok:!1,operation:e,reason:"stale",conversation:n});let o;try{o=y()}catch(r){return Object.freeze({ok:!1,operation:e,reason:"failed",conversation:n,error:u(r,e,n)})}try{return await t(o.client,n),h(o)?Object.freeze({ok:!0,operation:e,conversation:n}):Object.freeze({ok:!1,operation:e,reason:"stale",conversation:n})}catch(r){return h(o)?Object.freeze({ok:!1,operation:e,reason:"failed",conversation:n,error:u(r,e,n)}):Object.freeze({ok:!1,operation:e,reason:"stale",conversation:n})}}return{items:l,state:f,totalUnread:d,unreadConversationCount:p,error:v,start:function(){m(e.getProductClient())},reset:function(){m(null)},refresh:async function(){if(k)return Object.freeze({ok:!1,operation:"refresh",reason:"stale"});let e;try{e=y()}catch(e){return Object.freeze({ok:!1,operation:"refresh",reason:"failed",error:u(e,"refresh")})}try{return await e.client.conversations.refresh(),h(e)?Object.freeze({ok:!0,operation:"refresh"}):Object.freeze({ok:!1,operation:"refresh",reason:"stale"})}catch(r){return h(e)?Object.freeze({ok:!1,operation:"refresh",reason:"failed",error:u(r,"refresh")}):Object.freeze({ok:!1,operation:"refresh",reason:"stale"})}},setPinned:function(e,r){return z("set-pinned",e,(e,t)=>e.conversations.setPinned(t,r))},setMuted:function(e,r){return C("set-muted",e,(e,t)=>e.conversations.setMuted(t,r))},markRead:function(e){return C("mark-read",e,(e,r)=>e.conversations.markRead(r))},markUnread:function(e){return z("mark-unread",e,(e,r)=>e.conversations.markUnread(r))},deleteLocal:function(e){return z("delete-local",e,(e,r)=>e.conversations.deleteLocal(r))},dispose:function(){k||(b?.(),b=void 0,j=null,g(),k=!0)}}})}const f=/* @__PURE__ */new WeakMap,d=/* @__PURE__ */new WeakMap;function p(e=s()){a(e);let r=f.get(e);void 0===r&&(r=l(e),f.set(e,r));const t=r(e);return d.get(e)!==t&&(d.set(e,t),i(e,()=>{t.dispose(),t.$dispose(),d.get(e)===t&&d.delete(e)})),t}export{p as useImConversationListStore};
@@ -0,0 +1 @@
1
+ import{defineStore as e}from"pinia";import{ref as t,reactive as r,computed as n}from"vue";import{resolveEmojiToken as o}from"../utils/emoji/index.js";import{getImChatKitContext as i,registerImChatKitStoreDisposer as s,resolveImChatKitPinia as c}from"./context.js";import{prependRecentEmoji as a,EMOJI_GAME_DICE_STABLE_KEY as l,EMOJI_GAME_RPS_STABLE_KEY as u,MAX_RECENT_EMOJI_COUNT as f}from"../utils/emoji/recent.js";import{resolveUnicodeEmoji as d}from"../utils/emoji/unicode.js";const p=/* @__PURE__ */new WeakMap;function v(e){return"object"==typeof e&&null!==e}function g(e,t){if("string"!=typeof e||""===e.trim())throw new TypeError(`expression recent persistence ${t} 必须是非空字符串`);return e.trim()}function k(e,t){if(!Number.isSafeInteger(e)||Number(e)<=0||Number(e)>4294967295)throw new TypeError(`expression recent persistence ${t} 必须是正 uint32`);return Number(e)}function j(e,t){if(!v(e)||e.kind!==t)throw new TypeError("expression recent persistence asset kind 无效");const r=g(e.url,"asset.url");let n;try{n=new URL(r)}catch{throw new TypeError("expression recent persistence asset.url 必须是合法 URL")}if("http:"!==n.protocol&&"https:"!==n.protocol||""!==n.username||""!==n.password)throw new TypeError("expression recent persistence asset.url 只允许无凭据 HTTP(S)");const o=k(e.width,"asset.width"),i=k(e.height,"asset.height");if("sticker"===t)return Object.freeze({kind:"sticker",packageId:g(e.packageId,"asset.packageId"),resourceId:g(e.resourceId,"asset.resourceId"),url:r,width:o,height:i});if(Object.prototype.hasOwnProperty.call(e,"packageId"))throw new TypeError("expression recent persistence GIF 不允许 packageId");const s=void 0===e.resourceId?void 0:g(e.resourceId,"asset.resourceId");return Object.freeze({kind:"gif",...void 0===s?{}:{resourceId:s},url:r,width:o,height:i})}function m(e,t){let r=p.get(e);void 0===r&&(r=/* @__PURE__ */new Map,p.set(e,r));let n=r.get(t);return void 0===n&&(n={revision:0,kindRevisions:{sticker:0,gif:0,emoji:0},status:"idle",tail:Promise.resolve(),latestSnapshot:null,error:null},r.set(t,n)),n}function h(e,t,r,n){const o=m(e,t),i=++o.revision;for(const e of n)o.kindRevisions[e]+=1;o.status="pending",o.latestSnapshot=r,o.error=null;const s=o.tail.catch(()=>{}).then(()=>e.save(t,r));return o.tail=s,s.then(()=>{o.revision===i&&(o.status="saved",o.error=null)},e=>{o.revision===i&&(o.status="failed",o.error=e)}),{coordinator:o,revision:i,promise:s}}const y=/* @__PURE__ */new WeakMap;function b(){return r({loading:!1,loaded:!1,error:null})}function w(e){return{sticker:e(),gif:e()}}function O(e){return{sticker:e(),gif:e(),emoji:e()}}function I(e,t){return Object.freeze({loading:e.loading,loaded:e.loaded,empty:e.loaded&&!e.loading&&null===e.error&&0===t,error:e.error})}function z(e,t){const r="object"==typeof e&&null!==e?e:null;return Object.freeze({code:null!==r&&"string"==typeof r.code?r.code:"IM_CHAT_KIT_EXPRESSION_OPERATION_FAILED",category:null!==r&&(n=r.category,"auth"===n||"network"===n||"protocol"===n||"permission"===n||"validation"===n||"state"===n||"unsupported"===n||"contract"===n)?r.category:"state",operation:null!==r&&"string"==typeof r.operation?r.operation:`expressions.${t}`,retryable:null!==r&&"boolean"==typeof r.retryable?r.retryable:"hydrate-recent"===t||t.startsWith("load-")});var n}function S(e){return Object.freeze({code:e.code,category:e.category??"state",operation:e.operation,retryable:e.retryable??!1})}function E(e){const t=e.trim();if(""===t)throw new TypeError("expression recordId 必须是非空字符串");return t}function x(e){return"recordId"in e?e.recordId:void 0}function T(e){return"gif"===e?20:15}function P(e){return"sticker"===e.kind?["sticker",e.packageId.trim(),e.resourceId.trim()].join("\0"):["gif",e.resourceId?.trim()||e.url].join("\0")}function R(e,t){const r=P(t);return Object.freeze([Object.freeze({...t}),...e.filter(e=>"emoji"===e.kind||P(e)!==r)].slice(0,T(t.kind)))}function M(e,t){const r=P(t);return Object.freeze([Object.freeze({...t}),...e.filter(e=>P(e)!==r)])}function _(e,t,r){const n=[],o=/* @__PURE__ */new Set;for(const i of[...r.values(),...t]){if("emoji"===i.kind)continue;const t=P(i);if(i.kind===e&&!o.has(t)&&(o.add(t),n.push(Object.freeze({...i})),n.length===T(e)))break}return Object.freeze(n)}function K(e){const t=/* @__PURE__ */new Set;return Object.freeze(e.filter(e=>!t.has(e.resourceId)&&(t.add(e.resourceId),!0)))}function A(e){const t=o(e.token);return void 0!==t?`token:${t.code}`:d(e.resourceId)?.stableKey??d(e.token)?.stableKey??`server:${e.resourceId}`}function C(e,t,r){const n=e.filter(e=>"emoji"===e.kind).slice(0,f).map(e=>Object.freeze({kind:"emoji",stableKey:A(e),token:e.token,resourceId:e.resourceId})),o=t.filter(e=>"game"===e.kind||r.has(e.stableKey)),i=[],s=/* @__PURE__ */new Set;for(const e of[...o,...n])if(!s.has(e.stableKey)&&(s.add(e.stableKey),i.push(e),i.length===f))break;return Object.freeze(i)}function G(e){return Object.freeze({kind:"game",gameType:e,stableKey:"dice"===e?l:u})}function F(o){return e("k2-im-expression",()=>{const e=i(o),s=e.runtime,c=e.expressionRecentPersistence,l=s.getDiagnostics(),u=t(""),d=t([]),p=t({}),k=b(),F=r({}),N=t({sticker:[],gif:[]}),H=w(b),D=t({sticker:[],gif:[]}),L=t({sticker:[],gif:[],emoji:[]}),$=O(b),W=t({sticker:[],gif:[],emoji:[]}),X=t([]),U=t("idle"),q=t(""),Q=t([]),V=t(0),B=b(),J=t(void 0),Y=n(()=>I(k,d.value.length)),Z=n(()=>{const e=/* @__PURE__ */new Set([...Object.keys(F),...Object.keys(p.value)]);return Object.fromEntries([...e].map(e=>[e,I(F[e]??{loading:!1,loaded:!0,error:null},p.value[e]?.length??0)]))}),ee=n(()=>({sticker:I(H.sticker,N.value.sticker.length),gif:I(H.gif,N.value.gif.length)})),te=n(()=>({sticker:I($.sticker,L.value.sticker.length),gif:I($.gif,L.value.gif.length),emoji:I($.emoji,X.value.length)})),re=n(()=>I(B,Q.value.length)),ne=n(()=>void 0!==J.value);let oe=!1,ie=0,se=0;const ce={},ae=w(()=>0),le=O(()=>0);let ue=0,fe=0,de=0,pe=0,ve=0,ge=null,ke=null,je=null,me="emoji";const he=/* @__PURE__ */new Set,ye=[];let be=null,we=null,Oe=null,Ie=null;const ze=w(()=>/* @__PURE__ */new Map),Se=w(()=>/* @__PURE__ */new Map),Ee=/* @__PURE__ */new Map,xe=/* @__PURE__ */new Map;let Te=w(()=>Promise.resolve());function Pe(){const e=s.getCredentials();return{client:s.ensureProductClient(),generation:s.getGeneration(),stateEpoch:ie,accountId:e.userId}}function Re(e){return!oe&&e.client===s.getProductClient()&&e.generation===s.getGeneration()&&e.stateEpoch===ie&&e.accountId===s.getCredentials().userId}function Me(e){return Object.freeze({ok:!1,operation:e,reason:"stale"})}function _e(e,t,r){const n=z(t,e);return r.error=n,Object.freeze({ok:!1,operation:e,reason:"failed",error:n})}function Ke(){return Object.freeze({ok:!1,reason:"stale"})}function Ae(){const e=e=>Object.freeze(L.value[e].flatMap(t=>{const r=function(e){return"emoji"===e.kind?null:"sticker"===e.kind?Object.freeze({kind:"sticker",packageId:e.packageId,resourceId:e.resourceId,url:e.url,width:e.width,height:e.height}):Object.freeze({kind:"gif",...void 0===e.resourceId||""===e.resourceId?{}:{resourceId:e.resourceId},url:e.url,width:e.width,height:e.height})}(t);return null===r?[]:[Object.freeze({asset:r,pendingSync:ze[e].has(P(r))})]}).slice(0,T(e)));return Object.freeze({version:1,sticker:e("sticker"),gif:e("gif"),emoji:Object.freeze(X.value.map(e=>"game"===e.kind?Object.freeze({...e}):Object.freeze({...e,pendingSync:Ee.has(e.stableKey)})))})}function Ce(){for(const e of["sticker","gif","emoji"])"IM_CHAT_KIT_EXPRESSION_RECENT_PERSIST_FAILED"===$[e].error?.code&&($[e].error=null)}function Ge(e,t){const r=S({code:"IM_CHAT_KIT_EXPRESSION_RECENT_PERSIST_FAILED",operation:"expressions.recent.persist",retryable:!0});return t.error=r,Object.freeze({ok:!1,operation:e,reason:"failed",error:r})}function Fe(e,t,r,n=[t]){const o=++de,i=h(c,e.accountId,r,n);ve=i.revision;const s=i.promise.then(()=>(Re(e)&&o===de&&Ce(),!0),r=>{if(!Re(e)||o!==de)return!1;const n=S({code:"IM_CHAT_KIT_EXPRESSION_RECENT_PERSIST_FAILED",operation:"expressions.recent.persist",retryable:!0});return $[t].error=n,l.record("warn","pinia","storage","expression-recent-persist-failed",()=>({generation:e.generation,error:{message:n.code,data:r}})),!1});return{...i,settled:s}}function Ne(e){return null!==ge&&Ue(ge,e)}function He(e,t,r){if(!Re(e))return Promise.resolve();if(pe+=1,void 0===c||""===e.accountId)return ge=e,Promise.resolve();const n=Ae();return Ne(e)?Fe(e,t,n).settled.then(()=>{}):(je=n,me=t,he.add(t),ye.push(r),function(e){if(null!==Oe)return Oe;const t=(async()=>{for(;Re(e)&&!Ne(e);){const t=null!==Ie&&Ue(Ie.context,e)?Ie:null;if(null!==t){const r=await t.promise;if(r.ok||!Re(e)||"stale"!==r.reason)return;continue}const r=await qe();if(r.ok||!Re(e)||"stale"!==r.reason)return}})();Oe=t;const r=()=>{Oe===t&&(Oe=null)};return t.then(r,r),t}(e))}function De(){return{sticker:Object.freeze([]),gif:Object.freeze([]),emoji:Object.freeze([]),pendingSticker:/* @__PURE__ */new Map,pendingGif:/* @__PURE__ */new Map,pendingEmoji:/* @__PURE__ */new Map}}function Le(e){if(!(v(e)&&1===e.version&&Array.isArray(e.sticker)&&Array.isArray(e.gif)&&Array.isArray(e.emoji)))throw new TypeError("expression recent persistence snapshot 格式或版本无效");const t=(e,t)=>{const r=[],n=/* @__PURE__ */new Map,o=/* @__PURE__ */new Set;for(const i of t){if(!v(i)||"boolean"!=typeof i.pendingSync)throw new TypeError("expression recent persistence asset entry 格式无效");const t=j(i.asset,e),s=P(t);o.has(s)||(o.add(s),r.length<T(e)&&(r.push(t),i.pendingSync&&n.set(s,t)))}return{items:Object.freeze(r),pending:n}},r=t("sticker",e.sticker),n=t("gif",e.gif),o=[],i=/* @__PURE__ */new Map,s=/* @__PURE__ */new Set;for(const t of e.emoji){if(!v(t)||"string"!=typeof t.stableKey||""===t.stableKey.trim()||"emoji"!==t.kind&&"game"!==t.kind)throw new TypeError("expression recent persistence emoji entry 格式无效");const e=t.stableKey.trim();let r,n=!1;if("game"===t.kind){if("dice"!==t.gameType&&"rock-paper-scissors"!==t.gameType)throw new TypeError("expression recent persistence gameType 无效");if(r=G(t.gameType),r.stableKey!==e)throw new TypeError("expression recent persistence game stableKey 无效")}else{const o=g(t.token,"emoji.token"),i=g(t.resourceId,"emoji.resourceId");if("boolean"!=typeof t.pendingSync)throw new TypeError("expression recent persistence emoji.pendingSync 无效");n=t.pendingSync,r=Object.freeze({kind:"emoji",stableKey:e,token:o,resourceId:i})}s.has(e)||(s.add(e),o.length<f&&(o.push(r),"emoji"===r.kind&&n&&i.set(e,r)))}return{sticker:r.items,gif:n.items,emoji:Object.freeze(o),pendingSticker:r.pending,pendingGif:n.pending,pendingEmoji:i}}function $e(e,t){if(void 0===c||""===e.accountId)return 0;const r=m(c,e.accountId);return void 0===t?r.revision:r.kindRevisions[t]}function We(e){if(void 0===c||""===e.accountId||!Ne(e))return;const t=m(c,e.accountId);if(t.revision===ve)return;const r=null===t.latestSnapshot?De():Le(t.latestSnapshot),n=(e,t)=>{const n="sticker"===e?r.pendingSticker:r.pendingGif,o=new Map(L.value[e].flatMap(t=>"emoji"===t.kind||t.kind!==e?[]:[[P(t),t]]));return Object.freeze(t.map(t=>{if("emoji"===t.kind||t.kind!==e)return t;const r=P(t);if(n.has(r))return t;const i=x(o.get(r)??t);return Object.freeze({...t,...void 0===i?{}:{recordId:i}})}))};L.value={sticker:n("sticker",r.sticker),gif:n("gif",r.gif),emoji:L.value.emoji},X.value=r.emoji,ze.sticker.clear(),ze.gif.clear(),Ee.clear();for(const[e,t]of r.pendingSticker)ze.sticker.set(e,t);for(const[e,t]of r.pendingGif)ze.gif.set(e,t);for(const[e,t]of r.pendingEmoji)Ee.set(e,t);for(const e of["sticker","gif"]){const t=new Set(L.value[e].flatMap(e=>void 0===x(e)?[]:[x(e)]));W.value={...W.value,[e]:Object.freeze(W.value[e].filter(e=>t.has(e)))}}ve=t.revision}async function Xe(e,t,r,n){const o="hydrate-recent";$.emoji.error=null;try{let i=null,s=0;if(void 0!==c&&""!==e.accountId){i=m(c,e.accountId);const a=i.latestSnapshot;if(!n&&"failed"===i.status&&null!==a&&h(c,e.accountId,a,[]),s=i.revision,await i.tail.catch(()=>{}),t!==fe||!Re(e)||pe!==r||i.revision!==s)return Me(o);if(!n&&"failed"===i.status)return Ge(o,$.emoji);"saved"===i.status&&null!==be&&i.latestSnapshot===be&&je===we&&(je=null,he.clear(),ye.length=0,be=null,we=null)}const l=void 0===c||""===e.accountId?null:await c.load(e.accountId);if(t!==fe||!Re(e)||pe!==r||null!==i&&i.revision!==s)return Me(o);let u;try{u=null===l?De():Le(l)}catch(t){const r=c?.clearInvalid;if(null!==l&&""!==e.accountId&&void 0!==r)try{await r(e.accountId,l)}catch(e){throw new Error("expression recent persistence 损坏快照清理失败",{cause:e})}throw t}const f=n?null:je,d=new Set(he),p=[...ye],v=null===f?u:function(e,t){let r=[...e.sticker],n=[...e.gif],o=[...e.emoji];const i=new Map(e.pendingSticker),s=new Map(e.pendingGif),c=new Map(e.pendingEmoji);for(const e of t){if("prepend-asset"===e.type){("sticker"===e.kind?i:s).set(P(e.asset),e.asset),"sticker"===e.kind?r=[...R(r,e.asset)]:n=[...R(n,e.asset)];continue}if("prepend-emoji"===e.type||"prepend-emojis"===e.type){const t="prepend-emoji"===e.type?[e.entry]:e.entries;for(const e of t)"emoji"===e.kind&&c.set(e.stableKey,e),o=[...a(o,e)];continue}if("authoritative"===e.type){if("emoji"===e.kind){for(const t of e.items)if("emoji"===t.kind)for(const[e,r]of c)r.resourceId===t.resourceId&&c.delete(e);o=[...C(e.items,o,new Set(c.keys()))]}else{const t="sticker"===e.kind?i:s;for(const r of e.items)r.kind===e.kind&&t.delete(P(r));const o=_(e.kind,e.items,t);"sticker"===e.kind?r=[...o]:n=[...o]}continue}if("delete-assets"===e.type){const t=new Set(e.identities),o="sticker"===e.kind?i:s,c=e=>"emoji"===e.kind||!t.has(P(e))||o.has(P(e));"sticker"===e.kind?r=r.filter(c):n=n.filter(c);continue}const t=new Set(e.resourceIds);o=o.filter(e=>"game"===e.kind||!t.has(e.resourceId)||c.has(e.stableKey))}return{sticker:Object.freeze(r),gif:Object.freeze(n),emoji:Object.freeze(o),pendingSticker:i,pendingGif:s,pendingEmoji:c}}(u,p);if(function(e){L.value={sticker:e.sticker,gif:e.gif,emoji:[]},W.value={sticker:[],gif:[],emoji:[]},X.value=e.emoji,ze.sticker.clear(),ze.gif.clear(),Ee.clear();for(const[t,r]of e.pendingSticker)ze.sticker.set(t,r);for(const[t,r]of e.pendingGif)ze.gif.set(t,r);for(const[t,r]of e.pendingEmoji)Ee.set(t,r);for(const e of["sticker","gif","emoji"])Object.assign($[e],{loading:!1,loaded:!0,error:null})}(v),ve=s,n){if(je=null,he.clear(),ye.length=0,be=null,we=null,null!==i){i.revision+=1;for(const e of["sticker","gif","emoji"])i.kindRevisions[e]+=1;i.status="saved",i.latestSnapshot=l,i.error=null,ve=i.revision}return ge=e,Ce(),Object.freeze({ok:!0,operation:o})}if(null!==f&&void 0!==c&&""!==e.accountId){const n=Ae();be=n,we=f;const i=Fe(e,me,n,[...d]),s=await i.settled;if(t!==fe||!Re(e)||pe!==r||i.coordinator.revision!==i.revision)return Me(o);if(!s)return Ge(o,$.emoji);je===f&&(je=null,he.clear(),ye.length=0,be=null,we=null)}return ge=e,Object.freeze({ok:!0,operation:o})}catch(r){return t===fe&&Re(e)?_e(o,r,$.emoji):Me(o)}}function Ue(e,t){return e.client===t.client&&e.generation===t.generation&&e.stateEpoch===t.stateEpoch&&e.accountId===t.accountId}function qe(e={}){const t="hydrate-recent";if(oe)return Promise.resolve(Me(t));let r;try{r=Pe()}catch(e){const r=_e(t,e,$.emoji);return r.ok||"failed"!==r.reason||(ke=r.error??$.emoji.error),Promise.resolve(r)}const n=void 0===c||""===r.accountId?null:m(c,r.accountId);if(!e.force&&Ne(r)&&null===je&&(null===n||("idle"===n.status||"saved"===n.status)&&n.revision===ve))return ke=null,Promise.resolve(Object.freeze({ok:!0,operation:t}));if(!e.force&&null!==Ie&&!Ie.force&&Ie.stateRevision===pe&&Ue(Ie.context,r))return Ie.promise;const o=++fe,i=pe,s=Xe(r,o,i,!0===e.force).then(e=>(e.ok?ke=null:"failed"===e.reason&&(ke=e.error??$.emoji.error),e)),a={context:r,stateRevision:i,force:!0===e.force,promise:s};Ie=a;const l=()=>{Ie===a&&(Ie=null)};return s.then(l,l),s}function Qe(e,t){for(const r of t)Se[e].delete(P(r));const r=[],n=/* @__PURE__ */new Set;for(const o of[...Se[e].values(),...t]){const e=P(o);n.has(e)||(n.add(e),r.push(Object.freeze({...o})))}N.value={...N.value,[e]:Object.freeze(r)};const o=new Set(t.flatMap(e=>void 0===e.recordId?[]:[e.recordId]));D.value={...D.value,[e]:Object.freeze(D.value[e].filter(e=>o.has(e)))}}async function Ve(e,t,r){const n=H[t];try{const o=await e.client.expressions.favorites.list(t);if(ae[t]!==r||!Re(e))return;Qe(t,o),n.loaded=!0}catch(o){ae[t]===r&&Re(e)&&(n.error=z(o,"load-favorites"))}}function Be(e,t){const r="set-favorite";if(oe)return Promise.resolve(Me(r));const n=P(e),o=xe.get(n);if(o?.desired===t)return o.promise;let i;try{i=Pe()}catch(t){return Promise.resolve(_e(r,t,H[e.kind]))}const s=o?.promise.catch(()=>{})??Promise.resolve(),c=Te[e.kind].catch(()=>{}),a=Promise.all([s,c]).then(async()=>{if(!Re(i))return Me(r);const o=e.kind,s=H[o];s.error=null;const c=N.value[o].find(e=>P(e)===n);if(t&&void 0!==c)return Object.freeze({ok:!0,operation:r});if(!t&&void 0===c?.recordId){const e=S({code:"IM_CHAT_KIT_EXPRESSION_FAVORITE_RECORD_REQUIRED",operation:"expressions.favorites.unset",retryable:!0});return s.error=e,Object.freeze({ok:!1,operation:r,reason:"failed",error:e})}let a=++ae[o];try{if(t?await i.client.expressions.favorites.add(e):await i.client.expressions.favorites.delete([c.recordId]),!Re(i))return Me(r);t?(Se[o].set(n,Object.freeze({...e})),N.value={...N.value,[o]:M(N.value[o],e)}):(Se[o].delete(n),N.value={...N.value,[o]:Object.freeze(N.value[o].filter(e=>e.recordId!==c.recordId))});const s=++ae[o];return a=s,await Ve(i,o,s),Re(i)&&ae[o]===s?Object.freeze({ok:!0,operation:r}):Me(r)}catch(e){return Re(i)&&ae[o]===a?_e(r,e,s):Me(r)}finally{ae[o]===a&&Re(i)&&(s.loading=!1)}});return xe.set(n,{desired:t,promise:a}),Te[e.kind]=a.then(()=>{},()=>{}),a.finally(()=>{xe.get(n)?.promise===a&&xe.delete(n)}),a}function Je(e,t,r){if(We(r),"emoji"===e){for(const e of t)if("emoji"===e.kind)for(const[t,r]of Ee)r.resourceId===e.resourceId&&Ee.delete(t);L.value={...L.value,emoji:Object.freeze([...t])},X.value=C(t,X.value,new Set(Ee.keys()))}else{for(const r of t)r.kind===e&&ze[e].delete(P(r));L.value={...L.value,[e]:_(e,t,ze[e])}}const n=new Set(t.flatMap(e=>void 0===e.recordId?[]:[e.recordId]));W.value={...W.value,[e]:Object.freeze(W.value[e].filter(e=>n.has(e)))},$[e].loaded=!0,He(r,e,Object.freeze({type:"authoritative",kind:e,items:Object.freeze([...t])}))}function Ye(e,t){if(!Re(e))return!1;We(e),fe+=1;const r=t.kind,n=Object.freeze({...t});return ze[r].set(P(n),n),L.value={...L.value,[r]:R(L.value[r],n)},$[r].loaded=!0,He(e,r,Object.freeze({type:"prepend-asset",kind:r,asset:n})),!0}function Ze(e,t){if(!Re(e))return!1;We(e),fe+=1;const r=Object.freeze(t.map(e=>Object.freeze({...e})));let n=X.value;for(const e of r)Ee.set(e.stableKey,e),n=a(n,e);return X.value=n,$.emoji.loaded=!0,He(e,"emoji",Object.freeze({type:"prepend-emojis",entries:r})),!0}async function et(e,t,r=!0){const n="report-recent";if(!Re(e))return Me(n);const o=t.kind,i=++le[o],s=$[o];s.error=null;try{if(await e.client.expressions.recent.report(t),le[o]!==i||!Re(e))return Me(n);if(!r)return Object.freeze({ok:!0,operation:n});try{We(e);const t=$e(e,o),r=await e.client.expressions.recent.list(o);if(le[o]!==i||!Re(e))return Me(n);if($e(e,o)!==t)return We(e),Me(n);Je(o,r,e)}catch(t){le[o]===i&&Re(e)&&(s.error=z(t,"load-recent"))}return Object.freeze({ok:!0,operation:n})}catch(t){return le[o]===i&&Re(e)?_e(n,t,s):Me(n)}}async function tt(e,t,r){const n="favorites"===e?"delete-favorites":"delete-recent";if(oe)return Me(n);const o="favorites"===e?D:W,i="favorites"===e?ae:le,s="favorites"===e?H:$,c=r?.selected??o.value[t];if(0===c.length)return Object.freeze({ok:!1,operation:n,reason:"empty"});const a=s[t];if(a.loading)return Object.freeze({ok:!1,operation:n,reason:"busy"});const l=++i[t];let u;try{u=r?.context??Pe()}catch(e){return _e(n,e,a)}"recent"===e&&We(u);const f="recent"===e?$e(u,t):0,d=new Set(c),p="recent"===e?L.value[t].filter(e=>{const t=x(e);return void 0!==t&&d.has(t)}):[];a.loading=!0,a.error=null;const v=[],g=/* @__PURE__ */new Set;let k,j,m=!1;for(const r of function(e){const t=[];for(let r=0;r<e.length;r+=30)t.push(e.slice(r,r+30));return t}(c)){if(!Re(u))return Me(n);if("recent"===e&&i[t]!==l){m=!0;break}try{"favorites"===e?await u.client.expressions.favorites.delete(r):await u.client.expressions.recent.delete(r);for(const e of r)g.add(e)}catch(e){const t=z(e,n);k??(k=t),v.push(...r)}}if(!Re(u))return Me(n);"recent"===e&&i[t]!==l&&(m=!0);if("recent"===e&&$e(u,t)!==f&&(m=!0),"favorites"===e){const e=t;N.value={...N.value,[e]:Object.freeze(N.value[e].filter(e=>void 0===e.recordId||!g.has(e.recordId)))};const r=new Set(c),o=D.value[e].filter(e=>!r.has(e));if(D.value={...D.value,[e]:Object.freeze([.../* @__PURE__ */new Set([...o,...v])])},j=++ae[e],await Ve(u,e,j),!Re(u))return Me(n)}else{const e=t;We(u);const r=p.filter(e=>{const t=x(e);return void 0!==t&&g.has(t)}),o=new Set(r.filter(e=>"emoji"===e.kind).map(e=>e.resourceId)),i=new Set(r.filter(e=>"emoji"!==e.kind).map(P));"emoji"===e&&(X.value=Object.freeze(X.value.filter(e=>"game"===e.kind||!o.has(e.resourceId)||Ee.has(e.stableKey)))),L.value={...L.value,[e]:Object.freeze(L.value[e].filter(e=>{const t=x(e);return void 0===t||!g.has(t)}))};const s=new Set(c),a=m?W.value[e].filter(e=>!g.has(e)):W.value[e].filter(e=>!s.has(e));if(W.value={...W.value,[e]:Object.freeze(m?a:[.../* @__PURE__ */new Set([...a,...v])])},"emoji"===e){const e=L.value.emoji.filter(e=>"emoji"===e.kind);X.value=C(e,X.value,new Set(Ee.keys()))}if(He(u,e,"emoji"===e?Object.freeze({type:"delete-emojis",resourceIds:Object.freeze([...o])}):Object.freeze({type:"delete-assets",kind:e,identities:Object.freeze([...i])})),m&&g.size>0&&await async function(e,t){if(!Re(e))return;const r=++le[t],n=$[t];n.loading=!0,n.error=null;try{We(e);const n=$e(e,t),o=await e.client.expressions.recent.list(t);if(le[t]!==r||!Re(e))return;if($e(e,t)!==n)return void We(e);Je(t,o,e)}catch(o){le[t]===r&&Re(e)&&(n.error=z(o,"load-recent"))}finally{le[t]===r&&Re(e)&&(n.loading=!1)}}(u,e),!Re(u))return Me(n)}return("recent"===e?le[t]===l:ae[t]===j)&&(a.loaded=!0,void 0===k&&"recent"!==e||(a.error=k??null),a.loading=!1),m?Me(n):0===v.length?Object.freeze({ok:!0,operation:n}):Object.freeze({ok:!1,operation:n,reason:0===g.size?"failed":"partial",error:k,failedRecordIds:Object.freeze(v)})}function rt(e,t){const r=++ue;return U.value=e,q.value=t,Q.value=[],V.value=0,J.value=void 0,B.loading=!0,B.loaded=!1,B.error=null,r}async function nt(e,t){const r="load-giphy";if(oe)return Me(r);const n={mode:U.value,query:q.value,items:Q.value,totalCount:V.value,nextOffset:J.value,loaded:B.loaded},o=rt(e,t),i=()=>{U.value=n.mode,q.value=n.query,Q.value=n.items,V.value=n.totalCount,J.value=n.nextOffset,B.loaded=n.loaded};let s;try{s=Pe()}catch(e){return i(),B.loading=!1,_e(r,e,B)}try{const n="trending"===e?await s.client.expressions.giphy.trending():await s.client.expressions.giphy.search(t);return o===ue&&Re(s)?(Q.value=K(n.items),V.value=n.totalCount,J.value=n.nextOffset,B.loaded=!0,Object.freeze({ok:!0,operation:r})):Me(r)}catch(e){return o===ue&&Re(s)?(i(),_e(r,e,B)):Me(r)}finally{o===ue&&Re(s)&&(B.loading=!1)}}async function ot(e){const t="report-recent";if(oe)return Me(t);if(0===e.length)return Object.freeze({ok:!0,operation:t});let r;try{r=Pe()}catch(e){return _e(t,e,$.emoji)}const n=Object.freeze(e.map(e=>Object.freeze({...e,stableKey:A(e)})));if(!Ze(r,n))return Me(t);let o=Object.freeze({ok:!0,operation:t});for(const[e,t]of n.entries())if(o=await et(r,{kind:"emoji",token:t.token,resourceId:t.resourceId},e===n.length-1),!o.ok&&"stale"===o.reason)return o;return o}function it(e,t){et(e,t).then(r=>{l.record(r.ok?"debug":"warn","pinia","message","expression-recent-report-settled",()=>({generation:e.generation,data:{kind:t.kind,ok:r.ok}}))})}function st(e={}){if(oe)return;const t=!0===e.preserveRecentHydrationFailure?ke:null;ie+=1,se+=1,ue+=1,fe+=1,de+=1,pe=0,ve=0,ge=null,je=null,he.clear(),ye.length=0,be=null,we=null,Oe=null,Ie=null,ke=t,xe.clear(),Te=w(()=>Promise.resolve()),u.value="",d.value=[],p.value={},Object.assign(k,{loading:!1,loaded:!1,error:null});for(const e of Object.keys(F))delete F[e];for(const e of Object.keys(ce))ce[e]=(ce[e]??0)+1;N.value={sticker:[],gif:[]},D.value={sticker:[],gif:[]};for(const e of["sticker","gif"])ae[e]+=1,Object.assign(H[e],{loading:!1,loaded:!1,error:null});L.value={sticker:[],gif:[],emoji:[]},W.value={sticker:[],gif:[],emoji:[]},X.value=[],ze.sticker.clear(),ze.gif.clear(),Se.sticker.clear(),Se.gif.clear(),Ee.clear();for(const e of["sticker","gif","emoji"])le[e]+=1,Object.assign($[e],{loading:!1,loaded:!1,error:null});null!==t&&($.emoji.error=t),U.value="idle",q.value="",Q.value=[],V.value=0,J.value=void 0,Object.assign(B,{loading:!1,loaded:!1,error:null})}return y.set(o,Object.freeze({dispose:function(){oe||(st(),oe=!0)}})),{packVersion:u,packs:d,packItemsByPackage:p,packStatus:Y,packItemStatus:Z,favorites:N,favoriteStatus:ee,favoriteSelection:D,recent:L,recentStatus:te,recentSelection:W,emojiRecent:X,giphyMode:U,giphyQuery:q,giphyItems:Q,giphyTotalCount:V,giphyHasMore:ne,giphyStatus:re,hydrateRecent:qe,loadPacks:async function(e){const t="load-packs";if(oe)return Me(t);const r=++se;let n;try{n=Pe()}catch(e){return _e(t,e,k)}k.loading=!0,k.error=null;try{const o=await n.client.expressions.packs.list(e);return r===se&&Re(n)?(u.value=o.version,d.value=Object.freeze([...o.items]),k.loaded=!0,Object.freeze({ok:!0,operation:t})):Me(t)}catch(e){return r===se&&Re(n)?_e(t,e,k):Me(t)}finally{r===se&&Re(n)&&(k.loading=!1)}},loadPackItems:async function(e){const t="load-pack-items";if(oe)return Me(t);const r=e.trim();if(""===r){const e=z(new TypeError("packageId 必须是非空字符串"),t);return Object.freeze({ok:!1,operation:t,reason:"failed",error:e})}const n=F[r]??(F[r]=b()),o=(ce[r]??0)+1;let i;ce[r]=o;try{i=Pe()}catch(e){return _e(t,e,n)}n.loading=!0,n.error=null;try{const e=await i.client.expressions.packs.listItems(r);return ce[r]===o&&Re(i)?(p.value={...p.value,[r]:Object.freeze([...e])},n.loaded=!0,Object.freeze({ok:!0,operation:t})):Me(t)}catch(e){return ce[r]===o&&Re(i)?_e(t,e,n):Me(t)}finally{ce[r]===o&&Re(i)&&(n.loading=!1)}},loadFavorites:async function(e){const t="load-favorites";if(oe)return Me(t);const r=++ae[e],n=H[e];let o;try{o=Pe()}catch(e){return _e(t,e,n)}n.loading=!0,n.error=null;try{const i=await o.client.expressions.favorites.list(e);return ae[e]===r&&Re(o)?(Qe(e,i),n.loaded=!0,Object.freeze({ok:!0,operation:t})):Me(t)}catch(i){return ae[e]===r&&Re(o)?_e(t,i,n):Me(t)}finally{ae[e]===r&&Re(o)&&(n.loading=!1)}},addFavorite:async function(e){const t=await Be(e,!0);return Object.freeze({...t,operation:"add-favorite"})},setFavorite:Be,unsetFavorite:function(e){return Be(e,!1)},toggleFavoriteSelection:function(e,t,r){if(oe)return;const n=E(t),o=new Set(D.value[e]);r??!o.has(n)?o.add(n):o.delete(n),D.value={...D.value,[e]:Object.freeze([...o])}},deleteSelectedFavorites:function(e){const t="delete-favorites";if(oe)return Promise.resolve(Me(t));const r=Object.freeze([...D.value[e]]);if(0===r.length)return Promise.resolve(Object.freeze({ok:!1,operation:t,reason:"empty"}));let n;try{n=Pe()}catch(r){return Promise.resolve(_e(t,r,H[e]))}const o=Te[e].catch(()=>{}).then(()=>Re(n)?tt("favorites",e,{context:n,selected:r}):Me(t));return Te[e]=o.then(()=>{},()=>{}),o},loadRecent:async function(e){const t="load-recent";if(oe)return Me(t);const r=$[e],n=await qe();if(!n.ok)return"stale"===n.reason?Me(t):(r.error=n.error??$.emoji.error,Object.freeze({...n,operation:t}));const o=++le[e];let i;try{i=Pe()}catch(e){return _e(t,e,r)}r.loading=!0,r.error=null;try{const r=$e(i,e),n=await i.client.expressions.recent.list(e);return le[e]===o&&Re(i)?$e(i,e)!==r?(We(i),Me(t)):(Je(e,n,i),Object.freeze({ok:!0,operation:t})):Me(t)}catch(n){return le[e]===o&&Re(i)?_e(t,n,r):Me(t)}finally{le[e]===o&&Re(i)&&(r.loading=!1)}},reportRecent:async function(e){const t="report-recent";if(oe)return Me(t);let r;try{r=Pe()}catch(r){return _e(t,r,$[e.kind])}return"emoji"===e.kind?function(e,t){Ze(e,[t])}(r,Object.freeze({...e,stableKey:A(e)})):Ye(r,e),et(r,e)},rememberEmoji:async function(e){return ot([e])},rememberEmojis:ot,toggleRecentSelection:function(e,t,r){if(oe)return;const n=E(t),o=new Set(W.value[e]);r??!o.has(n)?o.add(n):o.delete(n),W.value={...W.value,[e]:Object.freeze([...o])}},deleteSelectedRecent:function(e){return tt("recent",e)},loadGiphyTrending:function(){return nt("trending","")},searchGiphy:function(e){if(oe)return Promise.resolve(Me("load-giphy"));const t=e.trim();return""===t?(rt("search",""),B.loading=!1,B.loaded=!0,Promise.resolve(Object.freeze({ok:!1,operation:"load-giphy",reason:"empty"}))):nt("search",t)},loadMoreGiphy:async function(){const e="load-more-giphy";if(oe)return Me(e);if(B.loading)return Object.freeze({ok:!1,operation:e,reason:"busy"});if("idle"===U.value||void 0===J.value)return Object.freeze({ok:!1,operation:e,reason:"exhausted"});const t=++ue,r=U.value,n=q.value,o=J.value;let i;try{i=Pe()}catch(t){return _e(e,t,B)}B.loading=!0,B.error=null;try{const s="trending"===r?await i.client.expressions.giphy.trending({offset:o}):await i.client.expressions.giphy.search(n,{offset:o});return t===ue&&Re(i)?(Q.value=K([...Q.value,...s.items]),V.value=s.totalCount,J.value=s.nextOffset,B.loaded=!0,Object.freeze({ok:!0,operation:e})):Me(e)}catch(r){return t===ue&&Re(i)?_e(e,r,B):Me(e)}finally{t===ue&&Re(i)&&(B.loading=!1)}},sendSticker:async function(e,t){if(oe)return Ke();let r,n;try{r=Pe()}catch{return Ke()}try{n=await e.messages.sendSticker(t)}catch(e){if(!Re(r))return Ke();throw e}return Re(r)?(n.ok&&Ye(r,t)&&it(r,t),n):Ke()},sendGif:async function(e,t){if(oe)return Ke();let r,n;try{r=Pe()}catch{return Ke()}try{n=await e.messages.sendGifAsset(t)}catch(e){if(!Re(r))return Ke();throw e}return Re(r)?(n.ok&&Ye(r,t)&&it(r,t),n):Ke()},sendGame:async function(e,t){if(oe)return Ke();let r,n;try{r=Pe()}catch{return Ke()}try{n=await e.messages.sendGame(t)}catch(e){if(!Re(r))return Ke();throw e}return Re(r)?(n.ok&&(We(r),fe+=1,X.value=a(X.value,G(t)),$.emoji.loaded=!0,He(r,"emoji",Object.freeze({type:"prepend-emoji",entry:G(t)}))),n):Ke()},reset:st}})}const N=/* @__PURE__ */new WeakMap,H=/* @__PURE__ */new WeakMap;function D(e=c()){i(e);let t=N.get(e);void 0===t&&(t=F(e),N.set(e,t));const r=t(e),n=y.get(e);if(void 0===n)throw new Error("当前 Pinia 尚未创建 ImExpressionStore");return H.get(e)!==r&&(H.set(e,r),s(e,()=>{n.dispose(),r.$dispose(),H.get(e)===r&&(H.delete(e),y.get(e)===n&&y.delete(e))})),r}export{D as useImExpressionStore};
@@ -0,0 +1 @@
1
+ import{getImChatKitContext as e,registerImChatKitStoreDisposer as t,resolveImChatKitPinia as n}from"./context.js";import{useImSearchStore as o}from"./search.store.js";import{useImThreadStore as r}from"./thread.store.js";const a=/* @__PURE__ */new WeakMap;function s(e){return Object.freeze({conversationType:e.conversationType,conversationId:e.conversationId})}function i(e,t){return null!==e&&e.conversationType===t.conversationType&&e.conversationId===t.conversationId}function c(c=n()){const d=e(c),v=a.get(c);if(void 0!==v&&!v.disposed)return v.coordinator;const u=d.runtime,l=u.getDiagnostics(),f=r(c),p=o(c),y={disposed:!1};function g(e){return!y.disposed&&u.getGeneration()===e.generation&&f.getHandle()===e.handle&&i(f.activeRef,e.conversation)}function b(){const e=y.activeIntent;void 0!==e&&(y.activeIntent=void 0,e.complete(Object.freeze({status:"stale",conversation:e.conversation})))}async function m(e){if(g(e)){p.clearLocation(),l.record("debug","pinia","history","history-return-after-send-start",()=>({generation:e.generation,conversation:e.conversation}));try{if(!await f.loadLatest()||!g(e))return void e.complete(Object.freeze({status:"stale",conversation:e.conversation}));l.record("debug","pinia","history","history-return-after-send-complete",()=>({generation:e.generation,conversation:e.conversation})),e.complete(Object.freeze({status:"applied",conversation:e.conversation}))}catch(t){if(!g(e))return void e.complete(Object.freeze({status:"stale",conversation:e.conversation}));const n=function(e,t){const n="object"==typeof e&&null!==e?e:null;return Object.freeze({code:null!==n&&"string"==typeof n.code?n.code:"IM_CHAT_KIT_HISTORY_RETURN_FAILED",category:null!==n&&(o=n.category,"auth"===o||"network"===o||"protocol"===o||"permission"===o||"validation"===o||"state"===o||"unsupported"===o||"contract"===o)?n.category:"state",operation:"history.returnAfterSend",retryable:null!==n&&"boolean"==typeof n.retryable&&n.retryable,conversation:s(t)});var o}(t,e.conversation);l.record("warn","pinia","history","history-return-after-send-failed",()=>({generation:e.generation,conversation:e.conversation,error:{message:"发送后返回最新消息失败",data:n}})),e.complete(Object.freeze({status:"failed",conversation:e.conversation,error:n}))}}else e.complete(Object.freeze({status:"stale",conversation:e.conversation}))}const I=u.subscribeProductEvents(function(e){const t=y.activeIntent;void 0!==t&&"message:received"===e.type&&"live"===e.source&&e.message.senderId===t.selfId&&"sent"!==e.message.status&&i(e.ref,t.conversation)&&(y.activeIntent=void 0,m(t))});return y.coordinator=Object.freeze({run:async function(e,t){const n=f.getHandle();if(o=e,"direct"!==o?.conversationType&&"group"!==o?.conversationType&&"channel"!==o?.conversationType&&"robot"!==o?.conversationType||y.disposed||!f.hasNewer||void 0===n||!i(n.ref,e)||!i(f.activeRef,e))return Object.freeze({value:await t(),history:Object.freeze({status:"not-needed"})});var o;b();const r=s(e);let a;const c=new Promise(e=>{let t=!1;a=n=>{t||(t=!0,e(n))}}),d={token:/* @__PURE__ */Symbol("history-return-after-send"),conversation:r,handle:n,generation:u.getGeneration(),selfId:u.getCredentials().userId,complete:a};y.activeIntent=d;try{const e=await t();return y.activeIntent?.token===d.token&&(y.activeIntent=void 0,d.complete(g(d)?Object.freeze({status:"not-needed"}):Object.freeze({status:"stale",conversation:r}))),Object.freeze({value:e,history:await c})}catch(e){throw y.activeIntent?.token===d.token&&(y.activeIntent=void 0,d.complete(g(d)?Object.freeze({status:"not-needed"}):Object.freeze({status:"stale",conversation:r}))),await c,e}}}),a.set(c,y),t(c,()=>{y.disposed=!0,b(),I(),a.get(c)===y&&a.delete(c)}),y.coordinator}export{c as useImHistoryReturnAfterSendCoordinator};
@@ -0,0 +1 @@
1
+ function t(t,e,s){const a=t.bytesTransferred,i=t.bytesTotal;if("running"!==t.state||"transferring"!==t.phase||void 0===a||void 0===i||!Number.isFinite(a)||!Number.isFinite(i)||!Number.isFinite(s)||a<0||i<=0||a>=i)return{};const n=void 0===e||e.attempt!==t.attempt||e.bytesTotal!==i||a<e.lastBytes||s<e.lastAt||s-e.lastAt>=3e4,r=n?[{at:s,bytes:a}]:[...e.measurements];!n&&a>e.lastBytes&&s-r.at(-1).at>=1e3&&r.push({at:s,bytes:a});const l=n||a!==e.lastBytes?s:e.lastAt;for(;r.length>1&&r[1].at<=l-5e3;)r.shift();const m=r[0],o={startedAt:m.at,startedBytes:m.bytes,lastBytes:a,lastAt:n||a!==e.lastBytes?s:e.lastAt,bytesTotal:i,attempt:t.attempt,measurements:r},y=o.lastAt-o.startedAt,b=a-o.startedBytes;if(y<1e3||b<=0)return{sample:o};const u=1e3*b/y,d=1e3*(i-a)/u;return Number.isFinite(u)&&Number.isFinite(d)?{sample:o,estimate:{bytesPerSecond:u,estimatedRemainingMs:Math.ceil(d)}}:{sample:o}}export{t as sampleMediaTransfer};
@@ -0,0 +1 @@
1
+ import{defineStore as e}from"pinia";import{ref as t,shallowReactive as n,shallowRef as o,computed as r,watch as a}from"vue";import{getImChatKitContext as i,registerImChatKitStoreDisposer as s,resolveImChatKitPinia as c}from"./context.js";import{sampleMediaTransfer as l}from"./media-transfer-estimate.js";import{useImThreadStore as u}from"./thread.store.js";function d(e){return Object.freeze({conversationType:e.conversationType,conversationId:e.conversationId})}function f(e){return Object.freeze({code:e.code,category:e.category,operation:e.operation,retryable:e.retryable,...void 0===e.recovery?{}:{recovery:e.recovery},...void 0===e.conversation?{}:{conversation:d(e.conversation)}})}function v(e,t){return function(e){return"object"==typeof e&&null!==e&&"string"==typeof e.code&&"string"==typeof e.category&&"string"==typeof e.operation&&"boolean"==typeof e.retryable}(e)?f(e):Object.freeze({code:"IM_CHAT_KIT_MEDIA_OPERATION_FAILED",category:"state",operation:`media.${t}`,retryable:"retry"===t})}function p(e,t){if(Object.is(e,t))return!0;if(null===e||null===t||"object"!=typeof e||"object"!=typeof t)return!1;if(Array.isArray(e)!==Array.isArray(t))return!1;const n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>Object.prototype.hasOwnProperty.call(t,n)&&p(e[n],t[n]))}const m=Object.freeze([]);function y(e){return JSON.stringify([e.conversationType,e.conversationId,e.id])}function g(e,t){return void 0===t?e:`${e}\0${t}`}function b(e,t){return null!==e&&e.conversationType===t.conversationType&&e.conversationId===t.conversationId}function O(e,t){if("sent"!==e.status)return;const n="mediaAlbum"===e.contentType?void 0===t?void 0:e.body.mediaAlbum?.items[t]:void 0!==t?void 0:"image"===e.contentType?e.body.image:"video"===e.contentType?e.body.video:void 0,o=n?.url;return void 0===o||""===o||/^(?:blob|data):/i.test(o)?void 0:o}function j(e,t){return JSON.stringify([e.conversationType,e.conversationId,e.id,t??null])}function h(e,t){return"mediaAlbum"===e.contentType&&void 0!==t?`mediaAlbum:${e.body.mediaAlbum?.items[t]?.kind}`:e.contentType}function k(s){return e("k2-im-media",()=>{const e=i(s).runtime,c=e.getDiagnostics(),k=u(s),I=t([]),T=n(/* @__PURE__ */new Map);let w=/* @__PURE__ */new Map;function z(e){return T.get(y(e))??m}let A=/* @__PURE__ */new WeakMap;function M(e){const t=z(e);let n=A.get(t);return void 0===n&&(n=function(e){let t,n,o=!1,r=!1;for(const a of e)"upload"===a.direction&&(t=a,"queued"!==a.state&&"running"!==a.state&&"paused"!==a.state||(n="queued"===a.state?0:a.percent),o||(o="queued"===a.state&&"waiting-upload-slot"===a.phase),r||(r="running"===a.state&&"finalizing"===a.phase));return Object.freeze({...void 0===t?{}:{task:t},...void 0===n?{}:{percent:n},waiting:o,finalizing:r})}(t),A.set(t,n)),n}function R(){I.value=[],T.clear(),w.clear(),A=/* @__PURE__ */new WeakMap}const G=o(null),x=o(null),P=o({}),C=t(!1);let E,S,D,_=!1,q=0,U=null,N=-1,$=0,W=!1;const F=r(()=>{const e=[],t=k.activeRef;for(const n of k.messages){if(null===t||n.conversationType!==t.conversationType||n.conversationId!==t.conversationId)continue;const o="mediaAlbum"===n.contentType?n.body.mediaAlbum?.items.map((e,t)=>t)??[]:[void 0];for(const r of o){const o=O(n,r);void 0!==o&&e.push({key:j(n,r),url:o,kind:h(n,r),message:{conversation:d(t),messageId:n.id,...void 0===r?{}:{itemIndex:r}}})}}return e});async function J(){if(_||null===U||void 0!==D||!W)return;W=!1;const t=U,n=q,o=N,r=$,a=F.value;if(0===a.length||e.getGeneration()!==o)return void(C.value=!1);const i={};D=i;const s=()=>!_&&U===t&&q===n&&e.getGeneration()===o&&$===r;try{const e=await t.media.probeCached(a.map(e=>e.message));if(!s())return;if(e.length!==a.length||e.some(e=>"boolean"!=typeof e))throw new Error("媒体缓存查询结果必须与消息引用一一对应");P.value=Object.freeze(Object.fromEntries(a.map((t,n)=>[t.key,e[n]]))),"media.probeCached"===G.value?.operation&&(G.value=null)}catch(e){if(!s())return;const t=v(e,"probeCached");G.value=t,c.record("error","pinia","media","media-cache-probe-failed",()=>({generation:o,data:{count:a.length},error:{message:t.code,data:t}}))}finally{D===i&&(D=void 0,W?J():s()&&(C.value=!1))}}function K(){$+=1,P.value={},_||null===U||e.getGeneration()!==N||0===F.value.length?C.value=!1:(C.value=!0,W||(W=!0,Promise.resolve().then(J)))}const L=a(()=>JSON.stringify(F.value),K,{flush:"sync"});const H=/* @__PURE__ */new Map,B=r(()=>{const e={};for(const t of I.value)"upload"===t.direction&&b(k.activeRef,t.ref)&&(e[t.messageId]=M({...t.ref,id:t.messageId}));return e}),Q=r(()=>Object.fromEntries(Object.entries(B.value).flatMap(([e,t])=>void 0===t.task?[]:[[e,t.task]]))),V=r(()=>Object.fromEntries(Object.entries(B.value).flatMap(([e,t])=>void 0===t.percent?[]:[[e,t.percent]]))),X=r(()=>{const e={};for(const t of I.value)"download"===t.direction&&b(k.activeRef,t.ref)&&(e[g(t.messageId,t.itemIndex)]=t);return e}),Y=r(()=>{const e={};for(const[t,n]of Object.entries(X.value))"queued"!==n.state&&"running"!==n.state||(e[t]=n.percent);return e}),Z=r(()=>Object.fromEntries(Object.entries(B.value).filter(([,e])=>e.waiting).map(([e])=>[e,!0]))),ee=r(()=>Object.fromEntries(Object.entries(B.value).filter(([,e])=>e.finalizing).map(([e])=>[e,!0])));function te(t,n,o){if(_||U!==n||N!==o||e.getGeneration()!==o)return;const r=/* @__PURE__ */new Set,a=Date.now(),i=/* @__PURE__ */new Map,s=/* @__PURE__ */new Map,c=t.map(e=>{const t=function(e){return JSON.stringify([e.id,e.ref.conversationType,e.ref.conversationId,e.messageId,e.direction,e.itemIndex??null])}(e);r.add(t);const n=w.get(t),o=void 0!==n&&n.state===e.state&&n.phase===e.phase&&n.attempt===e.attempt&&n.bytesTotal===e.bytesTotal&&n.bytesTransferred===e.bytesTransferred,{sample:c,estimate:u}=o?{sample:H.get(t),estimate:void 0===n.bytesPerSecond||void 0===n.estimatedRemainingMs?void 0:{bytesPerSecond:n.bytesPerSecond,estimatedRemainingMs:n.estimatedRemainingMs}}:l(e,H.get(t),a);void 0===c?H.delete(t):H.set(t,c);const v=function(e,t){return Object.freeze({id:e.id,messageId:e.messageId,ref:d(e.ref),direction:e.direction,state:e.state,percent:e.percent,...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.items?{}:{items:Object.freeze(e.items.map(e=>Object.freeze({...e})))},...t,...void 0===e.itemIndex?{}:{itemIndex:e.itemIndex},...void 0===e.phase?{}:{phase:e.phase},...void 0===e.error?{}:{error:f(e.error)}})}(e,u),m=void 0!==n&&p(n,v)?n:v;i.set(t,m);const g=y({...e.ref,id:e.messageId}),b=s.get(g);return void 0===b?s.set(g,[m]):b.push(m),m});w=i;for(const e of T.keys())s.has(e)||T.delete(e);for(const[e,t]of s){const n=T.get(e);(void 0===n||n.length!==t.length||t.some((e,t)=>n[t]!==e))&&T.set(e,Object.freeze(t))}(c.length!==I.value.length||c.some((e,t)=>I.value[t]!==e))&&(I.value=c);for(const e of H.keys())r.has(e)||H.delete(e)}function ne(t){const n=e.getGeneration();if(_)throw new Error("Media Store 已 dispose,不能重新绑定");if(U===t&&N===n)return;if(q+=1,E?.(),E=void 0,S?.(),S=void 0,$+=1,D=void 0,W=!1,P.value={},C.value=!1,U=t,N=null===t?-1:n,R(),H.clear(),G.value=null,x.value=null,null===t)return;let o=!1;E=t.media.subscribe(e=>{o=!0,te(e,t,n)});const r=q;S=t.media.subscribeCacheChanges(()=>{_||U!==t||q!==r||e.getGeneration()!==n||K()}),K(),o||te(t.media.getSnapshot(),t,n),c.record("debug","pinia","media","media-tasks-subscribed",()=>({generation:n}))}async function oe(t,n,o){const r=e.getProductClient();if(null===r)return Object.freeze({ok:!1,operation:t,reason:"not-ready"});if(ne(r),!I.value.some(e=>e.id===n))return Object.freeze({ok:!1,operation:t,reason:"not-found"});const a=e.getGeneration(),i=q;G.value=null;try{return"retry"===t&&void 0!==o?await r.media.retry(n,o):"cancel"===t&&void 0!==o?await r.media.cancel(n,o):await r.media[t](n),_||i!==q||e.getGeneration()!==a||U!==r?Object.freeze({ok:!1,operation:t,reason:"stale"}):Object.freeze({ok:!0,operation:t})}catch(o){if(_||i!==q||e.getGeneration()!==a||U!==r)return Object.freeze({ok:!1,operation:t,reason:"stale"});const s=v(o,t);return G.value=s,c.record("error","pinia","media",`media-task-${t}-failed`,()=>({generation:a,data:{taskId:n},error:{message:s.code,data:s}})),Object.freeze({ok:!1,operation:t,reason:"failed",error:s})}}function re(e,t){return oe("cancel",e,t)}return{tasks:I,tasksForMessage:z,uploadForMessage:M,error:G,uploadProgress:V,uploadTasks:Q,downloadTasks:X,downloadProgress:Y,uploadWaiting:Z,uploadFinalizing:ee,replacementRequest:x,cacheAvailability:P,cachedAvailability:function(t,n){if(_||null===U||e.getGeneration()!==N)return;const o=j(t,n),r=O(t,n),a=F.value.find(e=>e.key===o);return void 0!==r&&a?.url===r&&a.kind===h(t,n)?P.value[o]:void 0},cacheProbePending:C,cacheAvailabilityPending:function(t,n){if(!C.value||_||null===U||e.getGeneration()!==N)return!1;const o=j(t,n),r=O(t,n),a=F.value.find(e=>e.key===o);return void 0!==r&&a?.url===r&&a.kind===h(t,n)},start:function(){ne(e.getProductClient())},reset:function(){ne(null),x.value=null},cancel:re,retry:function(e,t){return oe("retry",e,t)},pause:function(e){return oe("pause",e)},resume:function(e){return oe("resume",e)},getUploadRecovery:async function(t){const n=e.getProductClient();if(null===n)return{available:!1,reason:"not-ready"};ne(n);const o=e.getGeneration(),r=q;try{const a=await n.media.getUploadRecovery(t);return _||r!==q||e.getGeneration()!==o||U!==n?{available:!1,reason:"stale"}:Object.freeze({available:a.available,...void 0===a.reason?{}:{reason:a.reason},...void 0===a.expiresAt?{}:{expiresAt:a.expiresAt}})}catch(t){return _||r!==q||e.getGeneration()!==o||U!==n?{available:!1,reason:"stale"}:(G.value=v(t,"getUploadRecovery"),{available:!1,reason:"failed"})}},resumeUpload:async function(t,n){const o="resumeUpload",r=e.getProductClient();if(null===r)return Object.freeze({ok:!1,operation:o,reason:"not-ready"});ne(r);const a=e.getGeneration(),i=q;G.value=null;try{return await r.media.resumeUpload(t,n),_||i!==q||e.getGeneration()!==a||U!==r?Object.freeze({ok:!1,operation:o,reason:"stale"}):Object.freeze({ok:!0,operation:o})}catch(t){if(_||i!==q||e.getGeneration()!==a||U!==r)return Object.freeze({ok:!1,operation:o,reason:"stale"});const n=v(t,o);return"IM_SDK_MEDIA_PAUSED"!==n.code&&"IM_SDK_MEDIA_CANCELLED"!==n.code&&(G.value=n),Object.freeze({ok:!1,operation:o,reason:"failed",error:n})}},cancelUpload:async function(e,t){const n=k.activeRef,o=I.value.find(t=>"upload"===t.direction&&("queued"===t.state||"running"===t.state||"paused"===t.state)&&t.messageId===e&&b(n,t.ref));if(void 0===o)return Object.freeze({ok:!1,operation:"cancel",reason:"not-found"});const r=await re(o.id,t);return b(k.activeRef,o.ref)?r:Object.freeze({ok:!1,operation:"cancel",reason:"stale"})},cancelDownload:async function(e,t){const n="string"==typeof e?e:e.messageId,o="string"==typeof e?t:e.itemIndex,r=I.value.filter(t=>"download"===t.direction&&("queued"===t.state||"running"===t.state)&&t.messageId===n&&t.itemIndex===o&&("string"==typeof e||b(e.conversation,t.ref)));if(0===r.length)return Object.freeze({ok:!1,operation:"cancel",reason:"not-found"});if(1!==r.length)return Object.freeze({ok:!1,operation:"cancel",reason:"ambiguous"});const a=r[0],i=await re(a.id);return b(k.activeRef,a.ref)?i:Object.freeze({ok:!1,operation:"cancel",reason:"stale"})},requestReplacement:function(e){const t=k.activeRef;return"failed"===e.status&&("media.uploadInterrupted"===e.failure?.displayCode||"media.cancelled"===e.failure?.displayCode||"media.uploadTimeout"===e.failure?.displayCode&&!1===e.failure.retryable)&&("video"===e.contentType||"file"===e.contentType||"filesAlbum"===e.contentType&&1===e.body.filesAlbum?.items.length)&&null!==t&&e.conversationId===t.conversationId&&e.conversationType===t.conversationType&&(x.value=Object.freeze({messageId:e.id,conversationId:e.conversationId,conversationType:e.conversationType,kind:"video"===e.contentType?"video":"file"}),!0)},takeReplacementRequest:function(){const e=x.value;return x.value=null,e},clearReplacementRequest:function(){x.value=null},dispose:function(){_||(q+=1,L(),S?.(),S=void 0,$+=1,D=void 0,W=!1,P.value={},C.value=!1,E?.(),E=void 0,U=null,N=-1,R(),H.clear(),G.value=null,x.value=null,_=!0)}}})}const I=/* @__PURE__ */new WeakMap,T=/* @__PURE__ */new WeakMap;function w(e=c()){i(e);let t=I.get(e);void 0===t&&(t=k(e),I.set(e,t));const n=t(e);return T.get(e)!==n&&(T.set(e,n),s(e,()=>{n.dispose(),n.$dispose(),T.get(e)===n&&T.delete(e)})),n}export{g as imMediaDownloadKey,w as useImMediaStore};
@@ -0,0 +1 @@
1
+ import{defineStore as e}from"pinia";import{shallowRef as n,ref as o,watch as t,toRaw as r}from"vue";import{executeForwardMessages as a}from"../services/forward.service.js";import{executeRetryMessage as i,executeDeleteChannelMessageForEveryone as s,executeDeleteLocalMessage as c,executeRecallMessage as l}from"../services/message.service.js";import{isPinnedMessageProtected as u}from"../services/pinned-message-rules.js";import{peekPinnedMessage as v,executeSyncPinnedMessage as d,executeUnpinMessage as f,executePinMessage as p}from"../services/pinned-message.service.js";import{useImComposerStore as g,getInternalImComposerActions as m}from"./composer.store.js";import{getImChatKitContext as y,registerImChatKitStoreDisposer as k,resolveImChatKitPinia as j}from"./context.js";import{useImThreadStore as b}from"./thread.store.js";import{canTransmit as w,requiresForwardTypeConfirmation as O}from"../../../im-core/src/message-flow/forward/can-transmit.js";const z=/* @__PURE__ */new WeakMap;function T(e){return"sent"===e.status&&"system"!==e.contentType&&void 0===e.recalled&&void 0===e.deletedForEveryone}function I(e){return[...e]}function M(k){return e("k2-im-message-operations",()=>{const e=y(k).runtime,j=e.getDiagnostics(),M=b(k),h=g(k),F=m(k),P=n(null),R=o(!1),C=o([]),S=o(null),E=o(!1),G=o([]),$=n(null);let x=!1,W=0,q=0,D=0;function H(){return M.getHandle()}function L(e,n=H()){const o=M.activeRef;return!x&&void 0!==n&&null!==o&&"supergroup"!==e.conversationType&&o.conversationId===e.conversationId&&o.conversationType===e.conversationType&&n.ref.conversationId===e.conversationId&&n.ref.conversationType===e.conversationType}function A(e){return u(P.value,e)}function B(){E.value=!1,G.value=[]}function J(){S.value=null}function K(){const e=R.value;B(),J(),R.value=!1,C.value=[],e&&F.syncReplyTarget()}function N(e){return C.value.some(n=>n.id===e)}function Q(e){const n=H();return 0!==e.length&&e.every(e=>L(e,n))?(S.value=I(e),Object.freeze({ok:!0})):Object.freeze({ok:!1,reason:"not-ready"})}function U(n,o,t){$.value=n.ok?null:n.error??null,j.record(n.ok?"debug":"error","pinia","message",`message-${n.operation}-settled`,()=>({generation:e.getGeneration(),conversation:void 0===t?void 0:{...t.ref},messageId:o,result:n.ok?{ok:!0}:{ok:!1,reason:n.reason,error:n.error}}))}function V(e,n){return void 0===n||!x&&H()===n?e:Object.freeze({ok:!1,operation:e.operation,reason:"stale"})}function X(){const e=M.activeRef;if("group"===e?.conversationType||"channel"===e?.conversationType)return Object.freeze({conversationId:e.conversationId,conversationType:e.conversationType})}function Y(e,n,o){const t=X();return!x&&e===q&&void 0!==n&&H()===n&&t?.conversationId===o.conversationId&&t.conversationType===o.conversationType}function Z(e){if(C.value=C.value.filter(n=>n.id!==e),G.value=G.value.filter(n=>n.id!==e),null!==S.value){const n=S.value.filter(n=>n.id!==e);S.value=0===n.length?null:n}h.editingMessage?.id===e&&h.clearEditing()}function _(){const n=X();if(void 0!==n)try{P.value=v(e,n)}catch{P.value=null}else P.value=null}const ee=t(()=>({ref:null===M.activeRef?null:`${M.activeRef.conversationType}:${M.activeRef.conversationId}`,messages:M.messages}),(e,n)=>{e.ref!==n?.ref&&(W+=1,q+=1,D+=1,_(),R.value=!1,C.value=[],S.value=null,B(),$.value=null),function(e){const n=new Map(e.map(e=>[e.id,e])),o=e=>{const o=e.flatMap(e=>{const o=n.get(e.id);return void 0!==o&&T(o)?[o]:[]});return o.length===e.length&&o.every((n,o)=>r(e[o])===r(n))?e:o};if(C.value=o(C.value),G.value=o(G.value),null!==S.value){const e=o(S.value);S.value=0===e.length?null:e}const t=h.editingMessage;if(null!==t){const e=n.get(t.id);void 0!==e&&T(e)||h.clearEditing()}const a=h.input?.replyToMessageId;if(void 0!==a){const e=n.get(a);void 0===e||T(e)||h.clearReplyTo(a)}}(e.messages)},{immediate:!0}),ne=e.subscribeEvents(n=>{if("pinned-message:updated"!==n.type)return;const o=X();if(void 0!==o&&o.conversationId===n.conversation.conversationId&&o.conversationType===n.conversation.conversationType)if(D+=1,null!==n.pinnedMessage)try{P.value=v(e,o),Z(n.pinnedMessage.messageId)}catch{}else P.value=null});function oe(){W+=1,q+=1,D+=1,R.value=!1,C.value=[],S.value=null,B(),$.value=null,_()}return z.set(k,Object.freeze({dispose:function(){x||(x=!0,ee(),ne(),oe())}})),{activePinnedMessage:P,isMessageMultiSelect:R,selectedMessages:C,forwardPickerMessages:S,forwardTypeConfirmOpen:E,pendingForwardReadyMessages:G,error:$,enterMultiSelect:function(e){if(void 0!==e){if(!L(e))return Object.freeze({ok:!1,reason:"not-ready"});if(!T(e))return Object.freeze({ok:!1,reason:"not-selectable"});if(A(e))return Object.freeze({ok:!1,reason:"pinned-protected"})}return F.suspendInteraction(),R.value=!0,C.value=void 0===e?[]:[e],Object.freeze({ok:!0})},exitMultiSelect:K,isSelected:N,toggleSelection:function(e){return R.value&&L(e)?T(e)?A(e)?Object.freeze({ok:!1,reason:"pinned-protected"}):(N(e.id)?C.value=C.value.filter(n=>n.id!==e.id):C.value=[...C.value,e],Object.freeze({ok:!0})):Object.freeze({ok:!1,reason:"not-selectable"}):Object.freeze({ok:!1,reason:"not-ready"})},openForwardPicker:Q,closeForwardPicker:J,prepareForwardFromSelection:function(){const e=C.value;if(0===e.length)return Object.freeze({outcome:"empty"});const n=e.filter(w);return e.some(O)?(G.value=n,E.value=!0,Object.freeze({outcome:"confirmation-required"})):0===n.length?Object.freeze({outcome:"all-skipped"}):(Q(n),Object.freeze({outcome:"picker-opened"}))},cancelForwardTypeConfirmation:B,confirmForwardTypeConfirmation:function(){const e=I(G.value);return B(),0===e.length?Object.freeze({outcome:"all-skipped"}):(Q(e),Object.freeze({outcome:"picker-opened"}))},forward:async function(n){const o=S.value,t=H();if(null===o)return Object.freeze({ok:!1,operation:"forward",reason:"empty-input"});const r=e.getGeneration(),i=++W,s=await a(e,{handle:t,messages:o,targets:n});return x||i!==W||e.getGeneration()!==r||H()!==t?Object.freeze({ok:!1,operation:"forward",reason:"stale"}):((s.ok||"stale"!==s.reason)&&J(),s.ok&&K(),$.value=s.ok?null:s.error??null,j.record(s.ok?"debug":"error","pinia","message","message-forward-settled",()=>({generation:r,conversation:void 0===t?void 0:{...t.ref},result:s.ok?{ok:!0,sentCount:s.sentCount,skippedCount:s.skippedCount}:{ok:!1,reason:s.reason,error:s.error}})),s)},recall:async function(n){const o=H(),t=V(await l(e,{handle:o,message:n}),o);return U(t,n.id,o),t},deleteLocal:async function(n){const o=H(),t=V(await c(e,{handle:o,message:n}),o);return U(t,n.id,o),t},deleteForEveryone:async function(n){const o=H(),t=V(await s(e,{handle:o,message:n}),o);return U(t,n.id,o),t},retry:async function(n,o){const t=H(),r=V(await i(e,{handle:t,messageId:n,options:o}),t);return U(r,n,t),r},pin:async function(n){const o=X(),t=H();if(void 0===o||!L(n,t))return Object.freeze({ok:!1,operation:"pin",reason:"not-ready"});const r=++q;D+=1;const a=await p(e,{conversation:o,message:n});return Y(r,t,o)?(a.ok&&"pin"===a.operation?(P.value=a.value,Z(a.value.messageId),$.value=null):$.value=a.ok?null:a.error??null,a):Object.freeze({ok:!1,operation:"pin",reason:"stale"})},unpin:async function(){const n=X(),o=H();if(void 0===n||void 0===o)return Object.freeze({ok:!1,operation:"unpin",reason:"not-ready"});const t=++q;D+=1;const r=await f(e,n);return Y(t,o,n)?(r.ok&&"unpin"===r.operation?(P.value=null,$.value=null):$.value=r.ok?null:r.error??null,r):Object.freeze({ok:!1,operation:"unpin",reason:"stale"})},syncPinned:async function(){const n=X(),o=H();if(void 0===n||void 0===o)return Object.freeze({ok:!1,operation:"sync-pin",reason:"not-ready"});const t=e.getGeneration(),r=++D;_();const a=await d(e,n);return e.getGeneration()===t&&function(e,n,o){const t=X();return!x&&e===D&&H()===n&&t?.conversationId===o.conversationId&&t.conversationType===o.conversationType}(r,o,n)?(a.ok&&"sync-pin"===a.operation?(P.value=a.value,$.value=null):$.value=a.ok?null:a.error??null,a):Object.freeze({ok:!1,operation:"sync-pin",reason:"stale"})},isPinnedMessageProtected:A,reset:oe}})}const h=/* @__PURE__ */new WeakMap,F=/* @__PURE__ */new WeakMap;function P(e=j()){y(e);let n=h.get(e);void 0===n&&(n=M(e),h.set(e,n));const o=n(e),t=z.get(e);if(void 0===t)throw new Error("当前 Pinia 尚未创建 ImMessageOperationsStore");return F.get(e)!==o&&(F.set(e,o),k(e,()=>{t.dispose(),o.$dispose(),F.get(e)===o&&(F.delete(e),z.get(e)===t&&z.delete(e))})),o}export{P as useImMessageOperationsStore};
@@ -0,0 +1 @@
1
+ import{defineStore as e}from"pinia";import{ref as n,shallowRef as r,reactive as t}from"vue";import{executeDismissChannel as o,executeLeaveChannel as a,executeTransferChannelOwnership as i,executeAddChannelAdmin as c,executeRemoveChannelAdmin as l,executeRemoveChannelMember as s,executeInviteChannelMembers as u}from"../services/channel-member-management.service.js";import{executeSetChannelMemberPrivateChatDisabled as v,executeSetChannelAllMuted as d,executeUpdateChannelVerification as f,executeSetChannelMemberNickname as m,executeSetMyChannelNickname as p,executeUpdateChannelAvatar as b,executeUpdateChannelDescription as h,executeUpdateChannelName as y}from"../services/channel-profile-management.service.js";import{executeRequestDirectFriendship as g,executeResolveDirectContactTarget as j,executeSearchDirectContact as I,executeDeleteDirectFriendship as k,executeReportDirectContact as O,executeBlockDirectContact as z,executeSetDirectContactRemark as w}from"../services/direct-contact-management.service.js";import{executeLeaveGroup as M,executeTransferGroupOwnership as C,executeRemoveGroupMember as P,executeInviteGroupMembers as _}from"../services/group-member-management.service.js";import{executeUpdateGroupVerification as T,executeSetMyGroupNickname as G,executeUpdateGroupAvatar as R,executeUpdateGroupName as x}from"../services/group-profile-management.service.js";import{resolveImProfileAccessDestination as $}from"../services/profile-access.service.js";import{readChannelMentionNextPage as E,peekChannelMentionPage as D,peekChannelMemberPage as U,readChannelMember as q,readChannelProfile as N,peekGroupMembers as S,readGroupMembers as K,peekGroupProfile as L,readGroupProfile as A,readMutualGroups as W,readDirectProfile as J,refreshChannelMentionPage as V,readChannelMemberPage as B,refreshChannelMemberPage as F,readDirectoryPage as Q,mergeDirectoryItems as H,searchCompleteDirectory as Y}from"../services/profile-directory.service.js";import{resolvePublicNickname as X,resolveChannelMemberAvatarUrl as Z,resolveSenderAvatarUrl as ee,resolveChannelMemberDisplayName as ne,resolveMemberDisplayName as re}from"../services/profile-display.js";import{applyGroupMemberRename as te,clearGroupMemberNicknameProjection as oe,applyGroupMemberNickname as ae,beginSenderProfileUpdate as ie,resolveChannelMembers as ce,resolveGroupMembers as le,resolveSenderName as se,applyMemberNames as ue}from"../services/profile.service.js";import{getImChatKitContext as ve,registerImChatKitStoreDisposer as de,resolveImChatKitPinia as fe}from"./context.js";const me=/* @__PURE__ */new Set(["group_member_joined","group_member_invited","group_member_left","group_member_removed","group_member_renamed"]),pe=/* @__PURE__ */new Set(["channel_member_joined","channel_member_invited","channel_member_left","channel_member_removed","channel_owner_transferred","channel_admin_added","channel_admin_removed","channel_member_renamed"]),be=/* @__PURE__ */new Set(["channel_member_joined","channel_member_invited","channel_member_left","channel_member_removed","channel_member_renamed"]);function he(e){return Object.freeze({conversationType:e.conversationType,conversationId:e.conversationId})}function ye(e,n){return null!==e&&e.conversationType===n.conversationType&&e.conversationId===n.conversationId}function ge(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"stale",stale:!0,projectionUpdated:!1,refreshRequired:!1})}function je(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"stale",stale:!0,projectionUpdated:!1,refreshRequired:!1})}function Ie(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"stale",stale:!0,projectionUpdated:!1,refreshRequired:!1})}function ke(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"not-allowed",stale:!1,projectionUpdated:!1,refreshRequired:!1})}function Oe(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"stale",stale:!0,projectionUpdated:!1,refreshRequired:!1})}function ze(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"not-allowed",stale:!1,projectionUpdated:!1,refreshRequired:!1})}function we(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"stale",stale:!0,projectionUpdated:!1,refreshRequired:!1})}function Me(e,n,r){const t="object"==typeof e&&null!==e?e:null;return null!==t&&"string"==typeof t.code&&("auth"===(o=t.category)||"network"===o||"protocol"===o||"permission"===o||"validation"===o||"state"===o||"unsupported"===o||"contract"===o)?Object.freeze({code:t.code,category:t.category,operation:n,retryable:!0===t.retryable,...void 0===r?{}:{conversation:he(r)}}):Object.freeze({code:"IM_CHAT_KIT_PROFILE_DIRECTORY_OPERATION_FAILED",category:"state",operation:n,retryable:!1,...void 0===r?{}:{conversation:he(r)}});var o}function Ce(){return{items:[],loading:!1,loaded:!1,exhausted:!1,error:null}}function Pe(de){return e("k2-im-profile-directory",()=>{const e=ve(de).runtime,fe=e.getDiagnostics(),Pe=n(0),_e=n({}),Te=r(null),Ge=r(null),Re=n("unknown"),xe=n(!1),$e=r(null),Ee=r([]),De=n(!1),Ue=r(null),qe=r(null),Ne=r(null),Se=r([]),Ke=n(!1),Le=n(!1),Ae=r(null),We=r(null),Je=r(null),Ve=n(!1),Be=r(null),Fe=t({individual:{items:[],loading:!1,loaded:!1,exhausted:!1,error:null},group:{items:[],loading:!1,loaded:!1,exhausted:!1,error:null},channel:{items:[],loading:!1,loaded:!1,exhausted:!1,error:null}}),Qe=n(""),He=r(null),Ye=n(!1),Xe=r(null),Ze=r(null),en=r([]),nn=n(""),rn=n(!1),tn=n(!1),on=r(null),an=r(null),cn=r(null),ln=n(!1),sn=r(null),un=r(null),vn=r([]),dn=n(""),fn=n(!1),mn=n(!1),pn=r(null);let bn=!1;const hn=/* @__PURE__ */new Map,yn={direct:0,group:0,channel:0},gn={direct:0,group:0,channel:0};let jn=0;const In={"set-remark":0,block:0,report:0,"delete-friendship":0,"search-user":0,"resolve-application-target":0,"request-friendship":0},kn={"update-name":0,"update-avatar":0,"set-my-nickname":0,"update-verification":0},On={"invite-members":0,"remove-member":0,"transfer-ownership":0,leave:0},zn=/* @__PURE__ */new Map;let wn=0;const Mn=/* @__PURE__ */new Map,Cn=/* @__PURE__ */new Map,Pn=/* @__PURE__ */new Set,_n=/* @__PURE__ */new Set,Tn=/* @__PURE__ */new Map,Gn=/* @__PURE__ */new Map;let Rn=0;const xn={"invite-members":0,"remove-member":0,"add-admin":0,"remove-admin":0,"transfer-ownership":0,leave:0,dismiss:0},$n=/* @__PURE__ */new Map,En=/* @__PURE__ */new Map;let Dn=0;const Un=/* @__PURE__ */new Set,qn=/* @__PURE__ */new Map,Nn=/* @__PURE__ */new Map;let Sn=0,Kn=0,Ln=0,An=0;const Wn=/* @__PURE__ */new Map,Jn=/* @__PURE__ */new Map,Vn=/* @__PURE__ */new Map,Bn=/* @__PURE__ */new Map,Fn=/* @__PURE__ */new Map,Qn=/* @__PURE__ */new Map,Hn=/* @__PURE__ */new Map,Yn=/* @__PURE__ */new Map,Xn=n(0),Zn={individual:0,group:0,channel:0},er=/* @__PURE__ */new Map;let nr,rr,tr,or,ar,ir,cr,lr,sr,ur=0,vr=0,dr=0;function fr(n,r){return se(e,n,r)}function mr(n,r){return le(e,n.conversationId,r)}function pr(n,r,t){const o=e.getGeneration(),a=hn.get(n.conversationId)??0;return ce(e,n.conversationId,r,{...!0===t?.forceRefresh?{forceRefresh:!0}:{},isCurrent:()=>!bn&&e.getGeneration()===o&&(hn.get(n.conversationId)??0)===a&&!1!==t?.isCurrent?.()})}function br(n,r){const t=n.conversationId.trim();if(""===t)return;hn.set(t,(hn.get(t)??0)+1);const o={...e.getChannelMemberProfiles()},a=[...new Set((r??[]).map(e=>e.trim()).filter(Boolean))];if(0===a.length)delete o[t];else{const e={...o[t]??{}};for(const n of a)delete e[n];0===Object.keys(e).length?delete o[t]:o[t]=e}e.setChannelMemberProfiles(o)}function hr(e,n){const r=e.conversationId.trim();""!==r&&(br(e,n),_e.value={..._e.value,[r]:(_e.value[r]??0)+1})}function yr(e,n,r){const t=r.trim();if(""===t)return;const o=e.get(n)??/* @__PURE__ */new Set;o.add(t),e.set(n,o)}function gr(e,n,r){const t=e.get(n);void 0!==t&&(t.delete(r.trim()),0===t.size&&e.delete(n))}function jr(e,n,r){const t=r.trim();return""!==t&&!0===e.get(n)?.has(t)}function Ir(e,n,r){const t=e.get(n);return void 0===t||0===t.size?r:r.filter(e=>!t.has(e.userId))}function kr(e,n,r={}){const t=Qn.get(e);if(void 0===t||0===t.size)return n;const o=new Set(n.map(e=>e.userId)),a=new Map(t),i=n.map(e=>{const n=t.get(e.userId);return void 0===n?e:(!0===r.reconcile&&n===e.nickname&&a.delete(e.userId),Object.freeze({...e,nickname:n}))});if(!0===r.reconcile)for(const e of a.keys())o.has(e)||a.delete(e);return 0===a.size?Qn.delete(e):Qn.set(e,a),Object.freeze(i)}function Or(e,n){const r=Qn.get(e);void 0!==r&&(r.delete(n.trim()),0===r.size&&Qn.delete(e))}function zr(e,n){const r=Hn.get(e);return void 0===r||0===r.size?n:Object.freeze(n.map(e=>{const n=r.get(e.userId);return void 0===n?e:Object.freeze({...e,displayName:n.displayName})}))}function wr(e,n){const r=Hn.get(e),t=Yn.get(e),o=We.value?.conversationId===e?Je.value?.ownerId:Fn.get(e)?.ownerId;return void 0!==r&&0!==r.size||void 0!==t&&0!==t.size||void 0!==o?Object.freeze(n.map(e=>{const n=r?.get(e.userId),a=t?.get(e.userId),i=void 0!==o&&e.userId===o;if(void 0===n&&void 0===a&&!i)return e;const{nickname:c,...l}=e;return Object.freeze({...l,...void 0===n?void 0===e.nickname?{}:{nickname:e.nickname}:""===n.nickname?{}:{nickname:n.nickname},displayName:n?.displayName??e.displayName,role:i?"owner":a??e.role})})):n}function Mr(e,n){const r=Hn.get(e);if(void 0===r)return;let t=!1;for(const e of n)r.get(e.userId)?.nickname===(e.nickname??"")&&(r.delete(e.userId),t=!0);0===r.size&&Hn.delete(e),t&&(Xn.value+=1)}function Cr(e,n){const r=Hn.get(e);void 0!==r&&r.delete(n.trim())&&(0===r.size&&Hn.delete(e),Xn.value+=1)}function Pr(e,n){const r=Yn.get(e);if(void 0!==r){for(const e of n)r.get(e.userId)===e.role&&r.delete(e.userId);0===r.size&&Yn.delete(e)}}function _r(e,n){const r=Yn.get(e);void 0!==r&&(r.delete(n.trim()),0===r.size&&Yn.delete(e))}function Tr(n,r,t,o){const a="direct"===n.conversationType?Te.value:"group"===n.conversationType?qe.value:We.value;return!bn&&e.getGeneration()===r&&yn[n.conversationType]===t&&gn[n.conversationType]===o&&ye(a,n)}async function Gr(n,r={}){const t=he(n),o=++yn.direct,a=gn.direct,i=e.getGeneration(),c=!ye(Te.value,t);Te.value=t,c&&(Ge.value=null,Re.value="unknown"),xe.value=!0,$e.value=null;const l=ie(e,t.conversationId,!0===r.forceRefresh);try{const n=await J(e,t,r);return Tr(t,i,o,a)?l.isCurrent()?(null!==n.profile&&l.commit({remark:(n.profile.remark??"").trim(),nickname:n.profile.nickname.trim(),avatar:(n.profile.avatar??"").trim()}),Ge.value=n.profile,Re.value=n.relationship,xe.value=!1,null===n.profile?Object.freeze({ok:!1,operation:"direct-profile",reason:"not-found"}):Object.freeze({ok:!0,operation:"direct-profile"})):(xe.value=!1,Object.freeze({ok:!1,operation:"direct-profile",reason:"stale"})):Object.freeze({ok:!1,operation:"direct-profile",reason:"stale"})}catch(e){if(!Tr(t,i,o,a))return Object.freeze({ok:!1,operation:"direct-profile",reason:"stale"});const n=Me(e,"profile.direct",t);return $e.value=n,xe.value=!1,Object.freeze({ok:!1,operation:"direct-profile",reason:"failed",error:n})}finally{l.finish()}}function Rr(e){return In[e]+=1,In[e]}function xr(e,n){return!bn&&In[e]===n}function $r(e,n,r,t){return`${r}:${t}:${e.conversationType}:${e.conversationId}:${n}`}function Er(n,r){kn[n]+=1;const t=e.getGeneration(),o=gn.group,a=$r(r,n,t,o);return Mn.set(a,(Mn.get(a)??0)+1),Object.freeze({epoch:kn[n],generation:t,key:a,resetEpoch:o})}function Dr(e,n){const r=Mn.get(n.key)??0;r<=1?Mn.delete(n.key):Mn.set(n.key,r-1),Yr(e)}function Ur(n,r){return!bn&&e.getGeneration()===r.generation&&gn.group===r.resetEpoch&&kn[n]===r.epoch}function qr(n,r){const t=e.getGeneration(),o=gn.group;return void 0!==r?(Mn.get($r(n,r,t,o))??0)>0:Object.keys(kn).some(e=>(Mn.get($r(n,e,t,o))??0)>0)}function Nr(n,r,t="profile"){const o=e.getGeneration(),a=gn.channel,i=function(e,n,r,t,o){return`${t}:${o}:${e.conversationType}:${e.conversationId}:${n}:${r}`}(r,n,t,o,a),c=++Rn;return Tn.set(i,c),Gn.set(i,(Gn.get(i)??0)+1),Object.freeze({conversation:he(r),epoch:c,generation:o,resetEpoch:a,key:i})}function Sr(e){const n=Gn.get(e.key)??0;n<=1?Gn.delete(e.key):Gn.set(e.key,n-1),Tn.get(e.key)===e.epoch&&Tn.delete(e.key),ut(e.conversation)}function Kr(n){return!bn&&e.getGeneration()===n.generation&&gn.channel===n.resetEpoch&&Tn.get(n.key)===n.epoch}function Lr(n,r,t){const o=`${e.getGeneration()}:${gn.channel}:${n.conversationType}:${n.conversationId}:`;for(const[e,n]of Gn){const a=void 0===r?o:`${o}${r}:`;if(n>0&&e.startsWith(a)&&(void 0===t||e===`${a}${t.trim()}`))return!0}return!1}function Ar(n,r,t){const o=e.getChannelMemberProfiles(),a=o[n.conversationId],i=a?.[r];void 0!==a&&void 0!==i&&e.setChannelMemberProfiles({...o,[n.conversationId]:{...a,[r]:{...i,displayName:t}}})}function Wr(e,n,r,t){return`${r}:${t}:${e.conversationType}:${e.conversationId}:${n}`}function Jr(n,r,t){const o=e.getGeneration(),a=On[n],i=Wr(r,n,o,a),c=function(e,n,r,t,o){return`${t}:${o}:${e.conversationType}:${e.conversationId}:${n}:${r}`}(r,n,t,o,a),l=++wn;return zn.set(c,l),Cn.set(i,(Cn.get(i)??0)+1),Object.freeze({actionEpoch:l,actionKey:c,generation:o,resetEpoch:a,writeKey:i})}function Vr(e,n){const r=Cn.get(n.writeKey)??0;r<=1?Cn.delete(n.writeKey):Cn.set(n.writeKey,r-1),zn.get(n.actionKey)===n.actionEpoch&&zn.delete(n.actionKey),Yr(e)}function Br(n,r){return!bn&&e.getGeneration()===r.generation&&On[n]===r.resetEpoch&&zn.get(r.actionKey)===r.actionEpoch}function Fr(n,r){const t=e.getGeneration();return void 0!==r?(Cn.get(Wr(n,r,t,On[r]))??0)>0:Object.keys(On).some(e=>(Cn.get(Wr(n,e,t,On[e]))??0)>0)}function Qr(e){ye(qe.value,e)&&ft(e,{forceRefresh:!0,preserveExisting:!0}).then(n=>{n.ok&&ye(qe.value,e)&&Xr(e)})}function Hr(e){ye(qe.value,e)&&dt(e,{forceRefresh:!0})}function Yr(e){qr(e)||Fr(e)||(Pn.delete(e.conversationId)&&Hr(e),_n.delete(e.conversationId)&&Ht(e))}function Xr(n){ye(qe.value,n)&&ue(e,n.conversationId,Se.value.map(e=>({userId:e.userId,nickName:e.nickname,...void 0===e.joinType?{}:{joinType:e.joinType}})))}function Zr(e,n,r,t){return`${r}:${t}:${e.conversationType}:${e.conversationId}:${n}`}function et(n,r,t){const o=e.getGeneration(),a=xn[n],i=function(e,n,r,t,o){return`${t}:${o}:${e.conversationType}:${e.conversationId}:${n}:${r}`}(r,n,t,o,a),c=Zr(r,n,o,a),l=++Dn;return $n.set(i,l),En.set(c,(En.get(c)??0)+1),Object.freeze({actionEpoch:l,actionKey:i,conversation:he(r),writeKey:c,generation:o,resetEpoch:a})}function nt(e){const n=En.get(e.writeKey)??0;n<=1?En.delete(e.writeKey):En.set(e.writeKey,n-1),$n.get(e.actionKey)===e.actionEpoch&&$n.delete(e.actionKey),ut(e.conversation)}function rt(n,r){return!bn&&e.getGeneration()===r.generation&&xn[n]===r.resetEpoch&&$n.get(r.actionKey)===r.actionEpoch}function tt(n,r){const t=e.getGeneration();return(void 0===r?Object.keys(xn):[r]).some(e=>(En.get(Zr(n,e,t,xn[e]))??0)>0)}function ot(e,n){const r=n.trim();if(""===r)return;const t=Nt(e,r);return void 0===t?void 0:Object.freeze({userId:r,role:t.role})}function at(n){const r=Fn.get(n.conversationId);return void 0!==r&&r.ownerId!==e.getCredentials().userId}function it(n,r){if(null===r)return Fn.delete(n.conversationId),null;const t=Fn.get(n.conversationId);return void 0===t?r:r.ownerId===t.ownerId&&"owner"!==r.role||r.ownerId!==e.getCredentials().userId&&"owner"!==r.role?(Fn.delete(n.conversationId),r):Object.freeze({...r,ownerId:t.ownerId,role:"member",permissions:Object.freeze({sendMessages:r.permissions.sendMessages}),canViewMembers:!1===r.memberPrivateChatDisabled})}function ct(e){ye(We.value,e)&&mt(e,{forceRefresh:!0})}function lt(e){ct(e),function(e){ye(Ze.value,e)&&Jt(e,{preserveExisting:!0})}(e)}function st(e,n){const r=qn.get(e.conversationId);if(void 0!==r&&!r.allTargets){for(const e of n)r.userIds.delete(e.trim());0===r.userIds.size&&qn.delete(e.conversationId)}}function ut(e){if(Lr(e)||tt(e))return;Un.delete(e.conversationId)&&Xt(e);const n=qn.get(e.conversationId);if(void 0===n)return;qn.delete(e.conversationId);const r=n.allTargets?void 0:[...n.userIds];n.affectsMentions?hr(e,r):br(e,r),n.resolvesProfiles&&void 0!==r&&r.length>0&&pr(e,r,{forceRefresh:!0}),Yt(e)}function vt(n){const r=e.getChannelMemberProfiles();if(void 0===r[n.conversationId])return!1;const t={...r};return delete t[n.conversationId],e.setChannelMemberProfiles(t),!0}async function dt(n,r={}){const t=he(n),o=++yn.group,a=gn.group,i=e.getGeneration(),c=!ye(qe.value,t);qe.value=t,c&&(Ne.value=null,Kn+=1,Se.value=[],Le.value=!1),Ke.value=!0,Ae.value=null;try{const n=!0===r.forceRefresh?null:await L(e,t);if(!Tr(t,i,o,a))return Object.freeze({ok:!1,operation:"group-profile",reason:"stale"});if(null!==n&&(Ne.value=n),!0===r.restricted)return!0===r.includeMembers&&await ft(t,{restricted:!0,forceRefresh:!0}),Tr(t,i,o,a)?(Ke.value=!1,null===Ne.value?Object.freeze({ok:!1,operation:"group-profile",reason:"not-found"}):Object.freeze({ok:!0,operation:"group-profile"})):Object.freeze({ok:!1,operation:"group-profile",reason:"stale"});const c=await A(e,t,!0===r.forceRefresh?{forceRefresh:!0}:void 0);if(!Tr(t,i,o,a))return Object.freeze({ok:!1,operation:"group-profile",reason:"stale"});const l=function(e,n){if(null===n||!1===n.isInGroup)return Vn.delete(e.conversationId),n;const r=Vn.get(e.conversationId);return void 0===r?n:r.expiresAt<=Date.now()||n.ownerId===r.ownerId?(Vn.delete(e.conversationId),n):Object.freeze({...n,ownerId:r.ownerId})}(t,c);return fe.record("debug","pinia","profile","group-profile-membership-resolved",()=>({conversation:t,data:{profileId:l?.ref.conversationId??null,name:l?.name??null,isInGroup:l?.isInGroup??null,verifyWay:l?.verifyWay??null,memberCount:l?.memberCount??null,membershipDecision:!0===l?.isInGroup?"joined":!1===l?.isInGroup?"not-joined":"unknown"}})),null===l||!1===l.isInGroup?(Kn+=1,Se.value=[],Le.value=!1,zt(t),oe(e,t.conversationId,{clearCachedNames:!0})):!0===r.includeMembers&&await ft(t,{restricted:!1,forceRefresh:!0}),Tr(t,i,o,a)?(Ne.value=l,Ke.value=!1,null===l?Object.freeze({ok:!1,operation:"group-profile",reason:"not-found"}):Object.freeze({ok:!0,operation:"group-profile"})):Object.freeze({ok:!1,operation:"group-profile",reason:"stale"})}catch(e){if(!Tr(t,i,o,a))return Object.freeze({ok:!1,operation:"group-profile",reason:"stale"});const n=Me(e,"profile.group",t);return!0===r.forceRefresh&&(Ne.value=null,Kn+=1,Se.value=[],Le.value=!1),Ae.value=n,Ke.value=!1,Object.freeze({ok:!1,operation:"group-profile",reason:"failed",error:n})}}async function ft(n,r={}){const t=he(n);if(ye(qe.value,t)||(qe.value=t,Se.value=[]),ye(qe.value,t)&&Ne.value?.ref.conversationId===t.conversationId&&!1===Ne.value.isInGroup)return Kn+=1,Se.value=[],Le.value=!1,Object.freeze({ok:!0,operation:"group-members"});if(Se.value.length>0&&!0!==r.forceRefresh)return Object.freeze({ok:!0,operation:"group-members"});const o=++Kn,a=e.getGeneration();Le.value=!0;try{const n=!0===r.preserveExisting?null:await S(e,t);if(bn||e.getGeneration()!==a||o!==Kn||!ye(qe.value,t))return Object.freeze({ok:!1,operation:"group-members",reason:"stale"});const i=null===n?null:Ir(Jn,t.conversationId,n.items);if(null!==i&&(Se.value=kr(t.conversationId,i),Xr(t)),!0===r.restricted||!0!==r.forceRefresh&&null!==i&&i.length>0)return Le.value=!1,Object.freeze({ok:!0,operation:"group-members"});const c=await K(e,t);return bn||e.getGeneration()!==a||o!==Kn||!ye(qe.value,t)?Object.freeze({ok:!1,operation:"group-members",reason:"stale"}):(null!==c&&(Se.value=kr(t.conversationId,Ir(Jn,t.conversationId,c),{reconcile:!0}),Xr(t)),Le.value=!1,Object.freeze({ok:!0,operation:"group-members"}))}catch(n){if(bn||e.getGeneration()!==a||o!==Kn||!ye(qe.value,t))return Object.freeze({ok:!1,operation:"group-members",reason:"stale"});const r=Me(n,"profile.group-members",t);return Ae.value=r,Le.value=!1,Object.freeze({ok:!1,operation:"group-members",reason:"failed",error:r})}}async function mt(n,r){const t=he(n),o=++yn.channel,a=gn.channel,i=e.getGeneration(),c=!ye(We.value,t);We.value=t,c&&(Je.value=null,Wt(t)),Ve.value=!0,Be.value=null;try{const n=await N(e,t,r);if(!Tr(t,i,o,a))return Object.freeze({ok:!1,operation:"channel-profile",reason:"stale"});const c=it(t,n);return Je.value=c,null!==c&&ye(Ze.value,t)&&(en.value=wr(t.conversationId,en.value)),null===c?(Dt(t),Wt()):!0!==c.canViewMembers&&Wt(),Ve.value=!1,null===c?Object.freeze({ok:!1,operation:"channel-profile",reason:"not-found"}):Object.freeze({ok:!0,operation:"channel-profile"})}catch(e){if(!Tr(t,i,o,a))return Object.freeze({ok:!1,operation:"channel-profile",reason:"stale"});const n=Me(e,"profile.channel",t);return!0===r?.forceRefresh&&(Je.value=null,Wt()),Be.value=n,Ve.value=!1,Object.freeze({ok:!1,operation:"channel-profile",reason:"failed",error:n})}}async function pt(n,r,t){const o=Fe[n];if(o.loading&&!t)return Object.freeze({ok:!1,operation:"directory",reason:"busy"});if(r&&o.exhausted)return Object.freeze({ok:!1,operation:"directory",reason:"exhausted"});if(!r&&o.loaded&&!t)return Object.freeze({ok:!0,operation:"directory"});const a=r?er.get(n):void 0;if(r&&void 0===a)return Object.freeze({ok:!1,operation:"directory",reason:"exhausted"});const i=++Zn[n],c=e.getGeneration();o.loading=!0,o.error=null;try{const t=await Q(e,n,a);return bn||c!==e.getGeneration()||i!==Zn[n]?Object.freeze({ok:!1,operation:"directory",reason:"stale"}):(o.items=H(r?o.items:[],t.items),o.loaded=!0,o.exhausted=t.exhausted,o.loading=!1,void 0===t.nextPageToken?er.delete(n):er.set(n,t.nextPageToken),Object.freeze({ok:!0,operation:"directory"}))}catch(r){if(bn||c!==e.getGeneration()||i!==Zn[n])return Object.freeze({ok:!1,operation:"directory",reason:"stale"});const t=Me(r,`directory.${n}`);return o.error=t,o.loading=!1,Object.freeze({ok:!1,operation:"directory",reason:"failed",error:t})}}function bt(){void 0!==nr&&(clearTimeout(nr),nr=void 0),rr?.resolve(Object.freeze({ok:!1,operation:"directory-search",reason:"stale"})),rr=void 0}function ht(){ur+=1,bt(),Qe.value="",He.value=null,Ye.value=!1,Xe.value=null,tr=void 0}function yt(e,n){const r=e.map(e=>e.userId),t=new Map(e.map(e=>[e.userId,e]));for(const e of n)t.has(e.userId)||r.push(e.userId),t.set(e.userId,e);return Object.freeze(r.map(e=>t.get(e)))}function gt(e,n,r){const t=n.trim();if(""===t)return;const o=r.trim(),a=Qn.get(e.conversationId)??/* @__PURE__ */new Map;a.set(t,o),Qn.set(e.conversationId,a),ye(qe.value,e)&&(Se.value=Object.freeze(Se.value.map(e=>e.userId===t?Object.freeze({...e,nickname:o}):e)))}function jt(e,n){Or(e.conversationId,n)}function It(e,n){const r=n.trim();if(""===r)return;if(Or(e.conversationId,r),yr(Jn,e.conversationId,r),!ye(qe.value,e))return;const t=Se.value.filter(e=>e.userId!==r),o=t.length!==Se.value.length;o&&(Se.value=Object.freeze(t),Xr(e)),o&&null!==Ne.value&&void 0!==Ne.value.memberCount&&(Ne.value=Object.freeze({...Ne.value,memberCount:Math.max(0,Ne.value.memberCount-1)}))}function kt(e,n){Or(e.conversationId,n),gr(Jn,e.conversationId,n)}function Ot(e,n){return jr(Jn,e.conversationId,n)}function zt(e){Jn.delete(e.conversationId),Qn.delete(e.conversationId)}function wt(e,n){ye(We.value,e)&&null!==Je.value&&(Je.value=Object.freeze({...Je.value,name:n}))}function Mt(e,n){ye(We.value,e)&&null!==Je.value&&(Je.value=Object.freeze({...Je.value,description:n}))}function Ct(e,n){ye(We.value,e)&&null!==Je.value&&(Je.value=Object.freeze({...Je.value,avatar:n}))}function Pt(e,n,r){if(!ye(We.value,e)||null===Je.value)return;const{inviteCode:t,...o}=Je.value;Je.value=Object.freeze({...o,verifyType:n,...void 0===r?{}:{inviteCode:r}})}function _t(e,n){if(!ye(We.value,e)||null===Je.value)return;const r={...Je.value,...void 0===n.allMembersMuted?{}:{allMembersMuted:n.allMembersMuted},...void 0===n.memberPrivateChatDisabled?{}:{memberPrivateChatDisabled:n.memberPrivateChatDisabled}};Je.value=Object.freeze({...r,canViewMembers:!0===r.permissions.manageMembers||!1===r.memberPrivateChatDisabled})}function Tt(e,n,r,t){const o=n.trim();if(""===o)return;const a=r.trim(),i=a||t?.trim()||o,c=Hn.get(e.conversationId)??/* @__PURE__ */new Map;c.set(o,{nickname:a,displayName:i}),Hn.set(e.conversationId,c),Xn.value+=1,ye(Ze.value,e)&&(en.value=wr(e.conversationId,en.value)),qt(e,o)&&(cn.value=wr(e.conversationId,null===cn.value?[]:[cn.value])[0]??null),ye(un.value,e)&&(vn.value=Object.freeze(vn.value.map(e=>e.userId===o?Object.freeze({...e,displayName:i}):e)))}function Gt(e,n,r){const t=n.trim();if(""===t)return;const o=Yn.get(e.conversationId)??/* @__PURE__ */new Map;o.set(t,r),Yn.set(e.conversationId,o),ye(Ze.value,e)&&(en.value=wr(e.conversationId,en.value)),qt(e,t)&&(cn.value=wr(e.conversationId,null===cn.value?[]:[cn.value])[0]??null)}function Rt(e,n){Cr(e.conversationId,n)}function xt(e,n){const r=n.trim();if(""===r)return;const t=ye(Ze.value,e),o=ye(un.value,e);if(Cr(e.conversationId,r),_r(e.conversationId,r),yr(Bn,e.conversationId,r),!t&&!o)return;const a=t&&en.value.some(e=>e.userId===r),i=o&&vn.value.some(e=>e.userId===r);t&&(en.value=Object.freeze(en.value.filter(e=>e.userId!==r))),o&&(vn.value=Object.freeze(vn.value.filter(e=>e.userId!==r))),qt(e,r)&&(cn.value=null),(a||i)&&ye(We.value,e)&&void 0!==Je.value?.memberCount&&(Je.value=Object.freeze({...Je.value,memberCount:Math.max(0,Je.value.memberCount-1)}))}function $t(e,n){Cr(e.conversationId,n),_r(e.conversationId,n),gr(Bn,e.conversationId,n)}function Et(e,n){return jr(Bn,e.conversationId,n)}function Dt(e){Bn.delete(e.conversationId),Yn.delete(e.conversationId),Hn.delete(e.conversationId)&&(Xn.value+=1)}function Ut(n,r,t){return!bn&&e.getGeneration()===r&&vr===t&&ye(Ze.value,n)}function qt(n,r,t,o){const a=an.value;return!bn&&(void 0===t||e.getGeneration()===t)&&(void 0===o||Ln===o)&&null!==a&&ye(a,n)&&a.userId===r}function Nt(e,n){const r=n.trim();if(""!==r){if(ye(Ze.value,e)){const e=en.value.find(e=>e.userId===r);if(void 0!==e)return e}return qt(e,r)?cn.value??void 0:void 0}}function St(e,n,r){return n.flatMap(n=>{if((Wn.get(n.userId)??0)>r){const r=Nt(e,n.userId);return void 0===r?[]:[r]}return Wn.set(n.userId,r),qt(e,n.userId)&&null!==cn.value&&(cn.value=wr(e.conversationId,[n])[0]??null),[n]})}async function Kt(n,r,t){rn.value=!0,on.value=null;const o=++An;try{const a=await F(e,n,nn.value);if(!Ut(n,r,t))return Object.freeze({ok:!1,operation:"channel-members",reason:"stale"});const i=St(n,a.items,o);return Mr(n.conversationId,a.items),Pr(n.conversationId,a.items),en.value=wr(n.conversationId,Ir(Bn,n.conversationId,i)),or=a.nextCursor,tn.value=a.exhausted||void 0===a.nextCursor,ir=void 0,rn.value=!1,Object.freeze({ok:!0,operation:"channel-members"})}catch(e){if(!Ut(n,r,t))return Object.freeze({ok:!1,operation:"channel-members",reason:"stale"});const o=Me(e,"profile.channel-members.refresh",n);return ir="initial",on.value=o,rn.value=!1,Object.freeze({ok:!1,operation:"channel-members",reason:"failed",error:o})}}async function Lt(n){if(rn.value)return Object.freeze({ok:!1,operation:"channel-members",reason:"busy"});const r=he(n),t=vr,o=e.getGeneration();rn.value=!0,on.value=null;const a=++An;try{const n=await U(e,r,nn.value);return Ut(r,o,t)?(null!==n&&(en.value=wr(r.conversationId,Ir(Bn,r.conversationId,St(r,n.items,a))),or=n.nextCursor,tn.value=n.exhausted||void 0===n.nextCursor),await Kt(r,o,t)):Object.freeze({ok:!1,operation:"channel-members",reason:"stale"})}catch(e){if(!Ut(r,o,t))return Object.freeze({ok:!1,operation:"channel-members",reason:"stale"});const n=Me(e,"profile.channel-members.cache",r);return ir="initial",on.value=n,rn.value=!1,Object.freeze({ok:!1,operation:"channel-members",reason:"failed",error:n})}}async function At(n){if(rn.value)return Object.freeze({ok:!1,operation:"channel-members",reason:"busy"});if(tn.value||void 0===or)return Object.freeze({ok:!1,operation:"channel-members",reason:"exhausted"});const r=he(n),t=vr,o=e.getGeneration();rn.value=!0,on.value=null;const a=++An;try{const n=await B(e,r,{query:nn.value,cursor:or});if(!Ut(r,o,t))return Object.freeze({ok:!1,operation:"channel-members",reason:"stale"});const i=St(r,n.items,a);return Mr(r.conversationId,n.items),Pr(r.conversationId,n.items),en.value=wr(r.conversationId,Ir(Bn,r.conversationId,yt(en.value,i))),or=n.nextCursor,tn.value=n.exhausted||void 0===n.nextCursor,ir=void 0,rn.value=!1,Object.freeze({ok:!0,operation:"channel-members"})}catch(e){if(!Ut(r,o,t))return Object.freeze({ok:!1,operation:"channel-members",reason:"stale"});const n=Me(e,"profile.channel-members.page",r);return ir="more",on.value=n,rn.value=!1,Object.freeze({ok:!1,operation:"channel-members",reason:"failed",error:n})}}function Wt(e=null){Wn.clear(),void 0!==ar&&(clearTimeout(ar),ar=void 0),vr+=1,Ze.value=null===e?null:he(e),en.value=[],nn.value="",rn.value=!1,tn.value=!1,on.value=null,or=void 0,ir=void 0}function Jt(n,r={}){const t=he(n);if(!0===r.preserveExisting&&ye(Ze.value,t)){void 0!==ar&&(clearTimeout(ar),ar=void 0);const n=++vr,r=e.getGeneration();return on.value=null,Kt(t,r,n)}return Wt(t),Lt(t)}function Vt(n,r,t){return!bn&&e.getGeneration()===r&&dr===t&&ye(un.value,n)}async function Bt(n,r={}){if(fn.value)return Object.freeze({ok:!1,operation:"channel-mentions",reason:"busy"});const t=he(n),o=dr,a=e.getGeneration();fn.value=!0,pn.value=null;try{const n=!1===r.useCache?null:await D(e,t,dn.value||void 0);if(!Vt(t,a,o))return Object.freeze({ok:!1,operation:"channel-mentions",reason:"stale"});null!==n&&(vn.value=zr(t.conversationId,Ir(Bn,t.conversationId,n.items)),cr=n.nextPageToken,mn.value=n.exhausted||void 0===n.nextPageToken);const i=await V(e,t,dn.value||void 0);return Vt(t,a,o)?(vn.value=zr(t.conversationId,Ir(Bn,t.conversationId,i.items)),cr=i.nextPageToken,mn.value=i.exhausted||void 0===i.nextPageToken,sr=void 0,fn.value=!1,Object.freeze({ok:!0,operation:"channel-mentions"})):Object.freeze({ok:!1,operation:"channel-mentions",reason:"stale"})}catch(e){if(!Vt(t,a,o))return Object.freeze({ok:!1,operation:"channel-mentions",reason:"stale"});const n=Me(e,"profile.channel-mentions",t);return sr="initial",pn.value=n,fn.value=!1,Object.freeze({ok:!1,operation:"channel-mentions",reason:"failed",error:n})}}async function Ft(){const n=un.value,r=cr;if(null===n)return Object.freeze({ok:!1,operation:"channel-mentions",reason:"not-ready"});if(fn.value)return Object.freeze({ok:!1,operation:"channel-mentions",reason:"busy"});if(mn.value||void 0===r)return Object.freeze({ok:!1,operation:"channel-mentions",reason:"exhausted"});const t=dr,o=e.getGeneration();fn.value=!0,pn.value=null;try{const a=await E(e,dn.value,r);return Vt(n,o,t)?(vn.value=zr(n.conversationId,Ir(Bn,n.conversationId,yt(vn.value,a.items))),cr=a.nextPageToken,mn.value=a.exhausted||void 0===a.nextPageToken,sr=void 0,fn.value=!1,Object.freeze({ok:!0,operation:"channel-mentions"})):Object.freeze({ok:!1,operation:"channel-mentions",reason:"stale"})}catch(e){if(!Vt(n,o,t))return Object.freeze({ok:!1,operation:"channel-mentions",reason:"stale"});const r=Me(e,"profile.channel-mentions.page",n);return sr="more",pn.value=r,fn.value=!1,Object.freeze({ok:!1,operation:"channel-mentions",reason:"failed",error:r})}}function Qt(e=null,n=""){void 0!==lr&&(clearTimeout(lr),lr=void 0),dr+=1,un.value=null===e?null:he(e),vn.value=[],dn.value=n,fn.value=!1,mn.value=!1,pn.value=null,cr=void 0,sr=void 0}function Ht(e){ye(qe.value,e)&&(mr(e,{forceRefresh:!0}),ft(e,{forceRefresh:!0,preserveExisting:!0}))}function Yt(e){ye(Ze.value,e)&&Jt(e,{preserveExisting:!0})}async function Xt(e){if(!ye(We.value,e))return;(await mt(e,{forceRefresh:!0})).ok&&!0===Je.value?.canViewMembers&&Yt(e)}const Zt=e.subscribeProfileChange(()=>{Pe.value+=1}),eo=e.subscribeEvents(function(n){if("profile:updated"===n.type){if("user"===n.profileType)Te.value?.conversationId===n.id?Gr({conversationType:"direct",conversationId:n.id},{forceRefresh:!0}):fr(n.id,{forceRefresh:!0});else{const e={conversationType:"group",conversationId:n.id};if(qr(e)||Fr(e))return void Pn.add(e.conversationId);ye(qe.value,e)?dt(e,{includeMembers:!0,forceRefresh:!0}):mr(e,{forceRefresh:!0})}return}if("channel-profile:updated"===n.type){const e={conversationType:"channel",conversationId:n.channelId};return void(Lr(e)||tt(e)?Un.add(e.conversationId):Xt(e))}if("sync:complete"===n.type){for(const e of n.conversations)if("group"===e.conversationType){const n={conversationType:"group",conversationId:e.conversationId};ye(qe.value,n)&&Ht(n)}else if("channel"===e.conversationType){const n={conversationType:"channel",conversationId:e.conversationId};(ye(We.value,n)||ye(Ze.value,n)||ye(un.value,n))&&(hr(n),Yt(n))}return}if("message:received"!==n.type&&"message:updated"!==n.type)return;const r=n.message,t=r.body.system?.eventType;if(void 0===t)return;const o=r.body.system?.targetUserIds??[],a=e.getCredentials().userId;if("group"===r.conversationType&&me.has(t)){const i={conversationType:"group",conversationId:r.conversationId},c="live"===(n.source??"live"),l="group_member_renamed"===t&&o.some(e=>e.trim()===a)&&qr(i,"set-my-nickname"),s="group_member_renamed"===t&&!l;if("group_member_renamed"===t){l||te(e,r);for(const e of o)l&&e.trim()===a||jt(i,e)}if("group_member_joined"===t||"group_member_invited"===t)for(const e of o)kt(i,e);if(c&&("group_member_left"===t||"group_member_removed"===t))for(const e of o)It(i,e);return Fr(i)?void _n.add(i.conversationId):void(c&&!l&&(s?ye(qe.value,i)&&ft(i,{forceRefresh:!0,preserveExisting:!0}):Ht(i)))}const i="live"===(n.source??"live")||!0===n.channelLifecycleEffects;if("channel"!==r.conversationType||!pe.has(t)||!i)return;const c={conversationType:"channel",conversationId:r.conversationId};if(!("channel_member_renamed"===t&&o.some(e=>Lr(c,e.trim()===a?"set-my-nickname":"set-member-nickname",e)))){if("channel_member_renamed"===t)for(const e of o)Rt(c,e);if("channel_admin_added"===t||"channel_admin_removed"===t){const e="channel_admin_added"===t?"admin":"member";for(const n of o)Gt(c,n,e)}if("channel_owner_transferred"===t){for(const e of o)Gt(c,e,"owner");const e=r.body.system?.operatorId;void 0===e||o.includes(e)||Gt(c,e,"member")}if("channel_member_joined"===t||"channel_member_invited"===t)for(const e of o)$t(c,e);if("channel_member_left"===t||"channel_member_removed"===t)for(const e of o)xt(c,e);tt(c)?function(e,n,r,t){const o=qn.get(e.conversationId)??{allTargets:!1,affectsMentions:!1,resolvesProfiles:!1,userIds:/* @__PURE__ */new Set},a=t.map(e=>e.trim()).filter(Boolean);0===a.length&&(o.allTargets=!0);for(const e of a)o.userIds.add(e);o.affectsMentions||(o.affectsMentions=n),o.resolvesProfiles||(o.resolvesProfiles=r),qn.set(e.conversationId,o)}(c,be.has(t),"channel_member_left"!==t&&"channel_member_removed"!==t&&o.length>0,o):(be.has(t)?hr(c,o):br(c,o),"channel_member_left"!==t&&"channel_member_removed"!==t&&o.length>0&&pr(c,o,{forceRefresh:!0}),Yt(c))}});function no(){In["set-remark"]+=1,In.block+=1,In.report+=1,In["delete-friendship"]+=1,gn.direct+=1,Te.value=null,Ge.value=null,Re.value="unknown",xe.value=!1,$e.value=null,jn+=1,Ee.value=[],De.value=!1,Ue.value=null}function ro(){for(const e of Object.keys(kn))kn[e]+=1;for(const e of Object.keys(On))On[e]+=1;Mn.clear(),Cn.clear(),zn.clear(),Pn.clear(),_n.clear(),gn.group+=1,Kn+=1,qe.value=null,Ne.value=null,Se.value=[],Ke.value=!1,Le.value=!1,Ae.value=null}function to(){for(const e of Object.keys(xn))xn[e]+=1;En.clear(),$n.clear(),Gn.clear(),Tn.clear(),Un.clear(),qn.clear(),gn.channel+=1,We.value=null,Je.value=null,Ve.value=!1,Be.value=null,Ln+=1,an.value=null,cn.value=null,ln.value=!1,sn.value=null,Wt(),Qt()}function oo(){no(),In["search-user"]+=1,In["resolve-application-target"]+=1,In["request-friendship"]+=1,ro(),to(),Nn.clear();for(const e of["individual","group","channel"])Zn[e]+=1,Object.assign(Fe[e],Ce());er.clear(),ht(),Jn.clear(),Vn.clear(),Bn.clear(),Fn.clear(),Qn.clear(),Yn.clear(),hn.clear(),_e.value={},Hn.size>0&&(Hn.clear(),Xn.value+=1)}return{profileRevision:Pe,directRef:Te,directProfile:Ge,directRelationship:Re,directLoading:xe,directError:$e,directMutualGroups:Ee,directMutualGroupsLoading:De,directMutualGroupsError:Ue,groupRef:qe,groupProfile:Ne,groupMembers:Se,groupLoading:Ke,groupMembersLoading:Le,groupError:Ae,channelRef:We,channelProfile:Je,channelLoading:Ve,channelError:Be,directories:Fe,directorySearchKeyword:Qe,directorySearchResult:He,directorySearchLoading:Ye,directorySearchError:Xe,channelMembersRef:Ze,channelMembers:en,channelMemberQuery:nn,channelMembersLoading:rn,channelMembersExhausted:tn,channelMembersError:on,channelMemberDetailRef:an,channelMemberDetail:cn,channelMemberDetailLoading:ln,channelMemberDetailError:sn,channelMentionsRef:un,channelMentions:vn,channelMentionQuery:dn,channelMentionsLoading:fn,channelMentionsExhausted:mn,channelMentionsError:pn,resolveDisplayName:function(n,r,t){Pe.value;const o=e.getSenderProfileCache();if("channel"===n.conversationType){const a=ne(o,e.getChannelMemberProfiles(),n.conversationId,r),i=(t??"").trim();return a===r&&""!==i?i:a}return"group"===n.conversationType?re(o,e.getGroupMemberNames(),n.conversationId,r,t):"direct"===n.conversationType?re(o,e.getGroupMemberNames(),"",r,t):(t??"").trim()||r},resolveAvatarUrl:function(n,r){Pe.value;const t=e.getSenderProfileCache();return"channel"===n.conversationType?Z(t,e.getChannelMemberProfiles(),n.conversationId,r):ee(t,r)},resolvePublicNickname:function(n){return Pe.value,X(e.getSenderProfileCache(),n)},resolveSenderProfile:fr,resolveGroupMemberProfiles:mr,resolveChannelMemberProfiles:pr,invalidateChannelMemberProfiles:br,invalidateChannelMemberSet:hr,channelMentionRevision:function(e){return _e.value[e.conversationId]??0},loadDirect:Gr,resolveProfileAccess:async function(e,n,r={}){const t=n.trim();if(""===t)return Object.freeze({ok:!1,reason:"direct-profile",result:Object.freeze({ok:!1,operation:"direct-profile",reason:"not-found"})});const o=!0===r.forceRefresh;let a;if("channel"===e.conversationType){const n=await mt({conversationType:"channel",conversationId:e.conversationId},{forceRefresh:o});if(!n.ok)return Object.freeze({ok:!1,reason:"channel-profile",result:n});if(a=ye(We.value,e)?Je.value:null,"blocked"===$({conversation:e,relationship:"unknown",channelProfile:a}))return Object.freeze({ok:!0,destination:"blocked"})}const i=await Gr({conversationType:"direct",conversationId:t},{forceRefresh:o});return i.ok?Object.freeze({ok:!0,destination:$({conversation:e,relationship:Re.value,channelProfile:a})}):Object.freeze({ok:!1,reason:"direct-profile",result:i})},loadDirectMutualGroups:async function(n){const r=he(n),t=++jn,o=e.getGeneration();Te.value=r,De.value=!0,Ue.value=null;try{const n=await W(e,r.conversationId);return ye(Te.value,r)&&o===e.getGeneration()&&t===jn?(Ee.value=n,De.value=!1,Object.freeze({ok:!0,operation:"direct-mutual-groups"})):Object.freeze({ok:!1,operation:"direct-mutual-groups",reason:"stale"})}catch(n){if(!ye(Te.value,r)||o!==e.getGeneration()||t!==jn)return Object.freeze({ok:!1,operation:"direct-mutual-groups",reason:"stale"});const a=Me(n,"profile.direct-mutual-groups",r);return Ue.value=a,De.value=!1,Object.freeze({ok:!1,operation:"direct-mutual-groups",reason:"failed",error:a})}},setDirectContactRemark:async function(n,r){const t=he(n),o=Rr("set-remark"),a=await w(e,t,r);if(!xr("set-remark",o)||!ye(Te.value,t))return ge("set-remark",t);if(!a.ok)return a;const i=Ge.value,c=null!==i&&i.userId===t.conversationId;return c&&(Ge.value=Object.freeze({...i,...void 0===r.name?{}:{remark:r.name},...void 0===r.emails?{}:{remarkEmails:Object.freeze([...r.emails])},...void 0===r.phones?{}:{remarkPhones:Object.freeze(r.phones.map(e=>Object.freeze({countryCode:e.countryCode,mobile:e.mobile})))}})),Object.freeze({...a,projectionUpdated:c})},blockDirectContact:async function(n){const r=he(n),t=Rr("block"),o=await z(e,r);return xr("block",t)&&ye(Te.value,r)?o.ok?(Re.value="blocked",Object.freeze({...o,projectionUpdated:!0})):o:ge("block",r)},reportDirectContact:async function(n,r){const t=he(n),o=Rr("report"),a=await O(e,t,r);return xr("report",o)&&ye(Te.value,t)?a:ge("report",t)},deleteDirectFriendship:async function(n){const r=he(n),t=Rr("delete-friendship"),o=await k(e,r);return xr("delete-friendship",t)&&ye(Te.value,r)?o.ok?(Re.value="none",Object.freeze({...o,projectionUpdated:!0})):o:ge("delete-friendship",r)},searchDirectContact:async function(n){const r=Rr("search-user"),t=await I(e,n);return xr("search-user",r)?t:ge("search-user",t.conversation)},resolveDirectContactTarget:async function(n){const r=he(n),t=Rr("resolve-application-target"),o=await j(e,r);return xr("resolve-application-target",t)?o:ge("resolve-application-target",r)},requestDirectFriendship:async function(n,r){const t=he(n),o=Rr("request-friendship"),a=await g(e,t,r);return xr("request-friendship",o)?a:ge("request-friendship",t)},loadGroup:dt,updateGroupName:async function(n,r){const t=he(n),o=r.trim(),a=Er("update-name",t);try{const n=await x(e,t,o);if(!Ur("update-name",a)||!ye(qe.value,t))return je("update-name",t);if(!n.ok)return n;const r=null!==Ne.value;return r&&function(e,n){if(!ye(qe.value,e)||null===Ne.value)return;Ne.value=Object.freeze({...Ne.value,name:n})}(t,o),Object.freeze({...n,projectionUpdated:r})}finally{Dr(t,a)}},updateGroupAvatar:async function(n,r){const t=he(n),o=Er("update-avatar",t);try{const n=await R(e,t,r);if(!Ur("update-avatar",o)||!ye(qe.value,t))return je("update-avatar",t);if(!n.ok)return n;const a=null!==Ne.value&&void 0!==n.avatar;return a&&function(e,n){if(!ye(qe.value,e)||null===Ne.value)return;Ne.value=Object.freeze({...Ne.value,avatar:n})}(t,n.avatar),Object.freeze({...n,projectionUpdated:a})}finally{Dr(t,o)}},setMyGroupNickname:async function(n,r){const t=he(n),o=r.trim(),a=Er("set-my-nickname",t);try{const n=await G(e,t,o);if(!Ur("set-my-nickname",a)||!ye(qe.value,t))return je("set-my-nickname",t);if(!n.ok)return n;const r=Se.value.some(e=>e.userId===n.memberId);return gt(t,n.memberId,o),ae(e,t.conversationId,n.memberId,o),Object.freeze({...n,projectionUpdated:r})}finally{Dr(t,a)}},updateGroupVerification:async function(n,r,t){const o=he(n),a=4===r?t?.trim():void 0,i=Er("update-verification",o);try{const n=await T(e,o,r,a);if(!Ur("update-verification",i)||!ye(qe.value,o))return je("update-verification",o);if(!n.ok)return n;const t=null!==Ne.value;return t&&function(e,n,r){if(!ye(qe.value,e)||null===Ne.value)return;const{inviteCode:t,...o}=Ne.value;Ne.value=Object.freeze({...o,verifyWay:n,...void 0===r?{}:{inviteCode:r}})}(o,r,a),Object.freeze({...n,projectionUpdated:t})}finally{Dr(o,i)}},isGroupProfileWritePending:qr,inviteGroupMembers:async function(n,r){const t=he(n),o=JSON.stringify([...new Set(r.map(e=>e.trim()).filter(Boolean))].sort()),a=Jr("invite-members",t,o);try{const n=await _(e,t,r);if(!Br("invite-members",a))return we("invite-members",t);if(!n.ok)return"stale"!==n.outcome&&ye(qe.value,t)&&Hr(t),n;if(!ye(qe.value,t))return we("invite-members",t);const o=n.memberIds.some(e=>Ot(t,e));for(const e of n.memberIds)kt(t,e);return Qr(t),Object.freeze({...n,projectionUpdated:o,refreshRequired:!1})}finally{Vr(t,a)}},removeGroupMember:async function(n,r){const t=he(n),o=Jr("remove-member",t,r.trim());try{const n=await P(e,t,r);if(!Br("remove-member",o))return we("remove-member",t);if(!n.ok)return"stale"!==n.outcome&&ye(qe.value,t)&&Hr(t),n;if(!ye(qe.value,t))return we("remove-member",t);const a=Se.value.some(e=>e.userId===n.memberId);return It(t,n.memberId),Qr(t),Object.freeze({...n,projectionUpdated:a,refreshRequired:!1})}finally{Vr(t,o)}},transferGroupOwnership:async function(n,r){const t=he(n),o=Jr("transfer-ownership",t,"group-owner");try{const n=await C(e,t,r);if(!Br("transfer-ownership",o))return we("transfer-ownership",t);if(!n.ok)return"stale"!==n.outcome&&ye(qe.value,t)&&Hr(t),n;if(!ye(qe.value,t))return we("transfer-ownership",t);!function(e,n){const r=n.trim();""!==r&&Vn.set(e.conversationId,{ownerId:r,expiresAt:Date.now()+3e4})}(t,n.ownerId);const a=Ne.value,i=null!==a;return null!==a&&(Ne.value=Object.freeze({...a,ownerId:n.ownerId})),Hr(t),Object.freeze({...n,projectionUpdated:i,refreshRequired:!1})}finally{Vr(t,o)}},leaveGroup:async function(n,r={}){const t=he(n),o=Jr("leave",t,"membership");try{const n=await M(e,t,r);if(!n.ok&&!Br("leave",o))return we("leave",t);if(!n.ok)return"transfer-required"===n.outcome&&ye(qe.value,t)&&await dt(t,{forceRefresh:!0}),n;zt(t),oe(e,t.conversationId,{clearCachedNames:!0}),Vn.delete(t.conversationId);const a=ye(qe.value,t)&&(null!==Ne.value||Se.value.length>0);return ye(qe.value,t)&&(qe.value=null,Ne.value=null,Se.value=[],Ke.value=!1,Le.value=!1,Ae.value=null),Object.freeze({...n,projectionUpdated:a})}finally{Vr(t,o)}},isGroupMemberManagementPending:Fr,ensureGroupMembers:ft,loadChannel:mt,requestMembershipJoin:async function(n,r={}){const t="group"===n.conversationType?Object.freeze({conversationType:"group",conversationId:n.conversationId}):Object.freeze({conversationType:"channel",conversationId:n.conversationId}),o="group"===t.conversationType?"request-group-join":"request-channel-join",a=e.getProductClient();if(null===a)return Object.freeze({ok:!1,operation:o,reason:"not-ready"});const i=`${t.conversationType}:${t.conversationId}`,c=++Sn,l=e.getGeneration(),s=gn[t.conversationType],u="group"===t.conversationType?qe.value:We.value,v=null!==u&&ye(u,t);Nn.set(i,c);const d=()=>!bn&&e.getGeneration()===l&&gn[t.conversationType]===s&&Nn.get(i)===c&&(()=>{const e="group"===t.conversationType?qe.value:We.value;return null===u?null===e:null!==e&&ye(e,u)})();try{const e="group"===t.conversationType?void 0===r.inviteCode?void 0===r.remarks?await a.groups.requestJoin(t):await a.groups.requestJoin(t,{remarks:r.remarks}):await a.groups.joinByInviteCode(t,r.inviteCode):void 0===r.inviteCode?void 0===r.remarks?await a.channels.requestJoin(t):await a.channels.requestJoin(t,{remarks:r.remarks}):await a.channels.joinByInviteCode(t,r.inviteCode);if(!d())return Object.freeze({ok:!1,operation:o,reason:"stale"});if("joined"===e.outcome)if(v)"group"===t.conversationType?await dt(t,{forceRefresh:!0}):await mt(t,{forceRefresh:!0});else try{"group"===t.conversationType?await a.groups.getProfile(t,{forceRefresh:!0}):await a.channels.getProfile(t,{forceRefresh:!0})}catch(e){d()&&fe.record("error","pinia","profile","membership-join-profile-refresh-failed",()=>({conversation:t,data:{error:Me(e,o,t)}}))}return d()?Object.freeze({ok:!0,operation:o,outcome:e.outcome}):Object.freeze({ok:!1,operation:o,reason:"stale"})}catch(e){return d()?Object.freeze({ok:!1,operation:o,reason:"failed",error:Me(e,o,t)}):Object.freeze({ok:!1,operation:o,reason:"stale"})}finally{Nn.get(i)===c&&Nn.delete(i)}},updateChannelName:async function(n,r){const t=he(n);if(at(t))return ke("update-name",t);const o=r.trim(),a=Nr("update-name",t);try{const n=await y(e,t,o);if(!Kr(a)||!ye(We.value,t))return Ie("update-name",t);if(!n.ok)return n;const r=null!==Je.value;return r&&wt(t,o),Object.freeze({...n,projectionUpdated:r})}finally{Sr(a)}},updateChannelDescription:async function(n,r){const t=he(n);if(at(t))return ke("update-description",t);const o=r.trim(),a=Nr("update-description",t);try{const n=await h(e,t,o);if(!Kr(a)||!ye(We.value,t))return Ie("update-description",t);if(!n.ok)return n;const r=null!==Je.value;return r&&Mt(t,o),Object.freeze({...n,projectionUpdated:r})}finally{Sr(a)}},updateChannelAvatar:async function(n,r){const t=he(n);if(at(t))return ke("update-avatar",t);const o=Nr("update-avatar",t);try{const n=await b(e,t,r);if(!Kr(o)||!ye(We.value,t))return Ie("update-avatar",t);if(!n.ok)return n;const a=null!==Je.value;return a&&Ct(t,n.avatar),Object.freeze({...n,projectionUpdated:a})}finally{Sr(o)}},setMyChannelNickname:async function(n,r){const t=he(n),o=r.trim(),a=Nr("set-my-nickname",t,e.getCredentials().userId);try{const n=await p(e,t,o);return Kr(a)&&ye(We.value,t)?n.ok?(Tt(t,n.memberId,o,o),Ar(t,n.memberId,o),Object.freeze({...n,projectionUpdated:!0})):n:Ie("set-my-nickname",t)}finally{Sr(a)}},setChannelMemberNickname:async function(n,r,t){const o=he(n);if(at(o))return ke("set-member-nickname",o);const a=r.trim(),i=t.trim(),c=Nt(o,a),l=Nr("set-member-nickname",o,a);try{const n=await m(e,o,a,c?.role??"unknown",i);return Kr(l)&&ye(We.value,o)?n.ok?(Tt(o,n.memberId,i,i),Ar(o,n.memberId,i),Object.freeze({...n,projectionUpdated:!0})):n:Ie("set-member-nickname",o)}finally{Sr(l)}},updateChannelVerification:async function(n,r,t){const o=he(n);if(at(o))return ke("update-verification",o);const a=4===r?t?.trim():void 0,i=Nr("update-verification",o);try{const n=await f(e,o,r,a);if(!Kr(i)||!ye(We.value,o))return Ie("update-verification",o);if(!n.ok)return n;const t=null!==Je.value;return t&&Pt(o,r,a),Object.freeze({...n,projectionUpdated:t})}finally{Sr(i)}},setChannelAllMuted:async function(n,r){const t=he(n);if(at(t))return ke("set-all-muted",t);const o=Nr("set-all-muted",t);try{const n=await d(e,t,r);if(!Kr(o)||!ye(We.value,t))return Ie("set-all-muted",t);if(!n.ok)return n;const a=null!==Je.value;return a&&_t(t,{allMembersMuted:r}),Object.freeze({...n,projectionUpdated:a})}finally{Sr(o)}},setChannelMemberPrivateChatDisabled:async function(n,r){const t=he(n);if(at(t))return ke("set-member-private-chat-disabled",t);const o=Nr("set-member-private-chat-disabled",t);try{const n=await v(e,t,r);if(!Kr(o)||!ye(We.value,t))return Ie("set-member-private-chat-disabled",t);if(!n.ok)return n;const a=null!==Je.value;return a&&_t(t,{memberPrivateChatDisabled:r}),Object.freeze({...n,projectionUpdated:a})}finally{Sr(o)}},isChannelProfileWritePending:Lr,inviteChannelMembers:async function(n,r){const t=he(n);if(at(t))return ze("invite-members",t);const o=JSON.stringify([...new Set(r.map(e=>e.trim()).filter(Boolean))].sort()),a=et("invite-members",t,o);try{const n=await u(e,t,r);if(!rt("invite-members",a))return Oe("invite-members",t);if(!n.ok)return"stale"!==n.outcome&&ct(t),n;if(!ye(We.value,t))return Oe("invite-members",t);const o=n.memberIds.some(e=>Et(t,e));for(const e of n.memberIds)$t(t,e);return hr(t,n.memberIds),st(t,n.memberIds),lt(t),Object.freeze({...n,projectionUpdated:o,refreshRequired:!1})}finally{nt(a)}},removeChannelMember:async function(n,r){const t=he(n);if(at(t))return ze("remove-member",t);const o=ot(t,r),a=et("remove-member",t,r.trim());try{const n=await s(e,t,o??{userId:r,role:"unknown"});if(!rt("remove-member",a))return Oe("remove-member",t);if(!n.ok)return"stale"!==n.outcome&&ct(t),n;if(!ye(We.value,t))return Oe("remove-member",t);const i=function(n,r){const t=e.getChannelMemberProfiles(),o=t[n.conversationId];if(void 0===o||void 0===o[r])return!1;const a={...o};return delete a[r],e.setChannelMemberProfiles({...t,[n.conversationId]:a}),!0}(t,n.memberId),c=en.value.some(e=>e.userId===n.memberId)||vn.value.some(e=>e.userId===n.memberId)||i;return xt(t,n.memberId),hr(t,[n.memberId]),st(t,[n.memberId]),lt(t),Object.freeze({...n,projectionUpdated:c,refreshRequired:!1})}finally{nt(a)}},setChannelMemberAdmin:async function(n,r,t){const o=he(n),a=ot(o,r),i=t?"add-admin":"remove-admin";if(at(o))return ze(i,o);const s=et(i,o,r.trim());try{const n=t?await c(e,o,a??{userId:r,role:"unknown"}):await l(e,o,a??{userId:r,role:"unknown"});if(!rt(i,s))return Oe(i,o);if(!n.ok)return"stale"!==n.outcome&&ct(o),n;if(!ye(We.value,o))return Oe(i,o);const u=t?"admin":"member",v=a?.role!==u;return Gt(o,n.memberId,u),lt(o),Object.freeze({...n,projectionUpdated:v,refreshRequired:!1})}finally{nt(s)}},transferChannelOwnership:async function(n,r){const t=he(n);if(at(t))return ze("transfer-ownership",t);const o=ot(t,r),a=et("transfer-ownership",t,"channel-owner");try{const n=await i(e,t,o??{userId:r,role:"unknown"});if(!rt("transfer-ownership",a))return Oe("transfer-ownership",t);if(!n.ok)return"stale"!==n.outcome&&ct(t),n;if(!ye(We.value,t))return Oe("transfer-ownership",t);!function(e,n){const r=n.trim();""!==r&&Fn.set(e.conversationId,{ownerId:r})}(t,n.ownerId);const c=function(e){return!(!ye(We.value,e)||null===Je.value||(Je.value=it(e,Je.value),0))}(t);return Gt(t,n.ownerId,"owner"),Gt(t,e.getCredentials().userId,"member"),lt(t),Object.freeze({...n,projectionUpdated:c,refreshRequired:!1})}finally{nt(a)}},leaveChannel:async function(n,r={}){const t=he(n),o=void 0===r.newOwnerId?void 0:ot(t,r.newOwnerId)??{userId:r.newOwnerId,role:"unknown"},i=et("leave",t,"membership");try{const n=await a(e,t,o);if(!n.ok&&!rt("leave",i))return Oe("leave",t);if(!n.ok)return n;const r=ye(We.value,t)&&(null!==Je.value||en.value.length>0||vn.value.length>0);return Dt(t),Fn.delete(t.conversationId),vt(t),ye(We.value,t)&&to(),Object.freeze({...n,projectionUpdated:r})}finally{nt(i)}},dismissChannel:async function(n){const r=he(n);if(at(r))return ze("dismiss",r);const t=et("dismiss",r,"membership");try{const n=await o(e,r);if(!n.ok&&!rt("dismiss",t))return Oe("dismiss",r);if(!n.ok)return n;const a=ye(We.value,r)&&(null!==Je.value||en.value.length>0||vn.value.length>0);return Dt(r),Fn.delete(r.conversationId),vt(r),ye(We.value,r)&&to(),Object.freeze({...n,projectionUpdated:a})}finally{nt(t)}},isChannelMemberManagementPending:tt,loadDirectory:function(e,n=!1){return pt(e,n,!1)},refreshDirectory:function(e){return pt(e,!1,!0)},searchDirectory:function(n,r={}){const t=n.trim();if(""===t)return ht(),Promise.resolve(Object.freeze({ok:!1,operation:"directory-search",reason:"not-ready"}));if(!r.immediate&&rr?.keyword===t)return rr.promise;if(tr?.keyword===t)return tr.promise;if(!r.immediate&&Qe.value===t&&He.value?.keyword===t.toLocaleLowerCase()&&null===Xe.value)return Promise.resolve(Object.freeze({ok:!0,operation:"directory-search"}));const o=++ur;bt(),Qe.value=t,He.value=null,Ye.value=!0,Xe.value=null;const a=()=>{const n=async function(n,r){const t=e.getGeneration();try{const o=await Y(e,n);return bn||t!==e.getGeneration()||r!==ur?Object.freeze({ok:!1,operation:"directory-search",reason:"stale"}):(He.value=o,Ye.value=!1,Object.freeze({ok:!0,operation:"directory-search"}))}catch(n){if(bn||t!==e.getGeneration()||r!==ur)return Object.freeze({ok:!1,operation:"directory-search",reason:"stale"});const o=Me(n,"directory.search");return Xe.value=o,Ye.value=!1,Object.freeze({ok:!1,operation:"directory-search",reason:"failed",error:o})}}(t,o);return tr={keyword:t,promise:n},n.finally(()=>{tr?.promise===n&&(tr=void 0)}),n};if(r.immediate)return a();let i;const c=new Promise(e=>{i=e});return rr={keyword:t,promise:c,resolve:i},nr=setTimeout(()=>{nr=void 0,rr=void 0,a().then(i)},300),c},clearDirectorySearch:ht,openChannelMembers:Jt,getChannelMember:Nt,loadChannelMember:async function(n,r,t={forceRefresh:!0}){const o=he(n),a=r.trim();if(""===a)return Object.freeze({ok:!1,operation:"channel-member",reason:"not-found"});const i=++Ln,c=++An,l=e.getGeneration();an.value=Object.freeze({...o,userId:a}),cn.value=null,ln.value=!0,sn.value=null;try{let n=await q(e,o,a,{forceRefresh:!1!==t.forceRefresh});if(!qt(o,a,l,i))return Object.freeze({ok:!1,operation:"channel-member",reason:"stale"});if(ye(Ze.value,o)&&((Wn.get(a)??0)>c?n=Nt(o,a)??null:Wn.set(a,c)),null===n||Et(o,a))return ye(Ze.value,o)&&(en.value=Object.freeze(en.value.filter(e=>e.userId!==a))),Object.freeze({ok:!1,operation:"channel-member",reason:"not-found"});cn.value=wr(o.conversationId,[n])[0]??null;const r=cn.value;return null!==r&&ye(Ze.value,o)&&(en.value=Object.freeze(en.value.map(e=>e.userId===a?r:e))),Object.freeze({ok:!0,operation:"channel-member"})}catch(e){if(!qt(o,a,l,i))return Object.freeze({ok:!1,operation:"channel-member",reason:"stale"});const n=Me(e,"profile.channel-member",o);return sn.value=n,Object.freeze({ok:!1,operation:"channel-member",reason:"failed",error:n})}finally{qt(o,a,l,i)&&(ln.value=!1)}},setChannelMemberQuery:function(n){const r=Ze.value;if(null===r)return;nn.value=n,vr+=1,Wn.clear(),en.value=[],tn.value=!1,on.value=null,or=void 0,rn.value=!1,void 0!==ar&&clearTimeout(ar);const t=vr,o=e.getGeneration(),a=++An;(async()=>{try{const n=await U(e,r,nn.value);if(!Ut(r,o,t))return;null!==n&&(en.value=wr(r.conversationId,Ir(Bn,r.conversationId,St(r,n.items,a))),or=n.nextCursor,tn.value=n.exhausted||void 0===n.nextCursor)}catch(e){if(!Ut(r,o,t))return;on.value=Me(e,"profile.channel-members.cache",r)}Ut(r,o,t)&&(ar=setTimeout(()=>{ar=void 0,Kt(r,o,t)},300))})()},loadMoreChannelMembers:function(){const e=Ze.value;return null===e?Promise.resolve(Object.freeze({ok:!1,operation:"channel-members",reason:"not-ready"})):At(e)},retryChannelMembers:function(){const e=Ze.value;return null===e||void 0===ir?Promise.resolve(Object.freeze({ok:!1,operation:"channel-members",reason:"not-ready"})):"more"===ir?At(e):Lt(e)},resetChannelMembers:Wt,updateGroupMemberNicknameProjection:gt,clearGroupMemberNicknameProjection:jt,removeGroupMemberProjection:It,restoreGroupMemberProjection:kt,isGroupMemberRemovedProjection:Ot,clearGroupMemberProjections:zt,updateChannelNameProjection:wt,updateChannelDescriptionProjection:Mt,updateChannelAvatarProjection:Ct,updateChannelVerificationProjection:Pt,updateChannelManagementProjection:_t,updateChannelMemberDisplayNameProjection:Tt,updateChannelMemberRoleProjection:Gt,clearChannelMemberDisplayNameProjection:Rt,channelMemberNicknameProjection:function(e,n){return Xn.value,Hn.get(e.conversationId)?.get(n.trim())?.nickname},removeChannelMemberProjection:xt,restoreChannelMemberProjection:$t,isChannelMemberRemovedProjection:Et,clearChannelMemberProjections:Dt,openChannelMentions:function(e,n=""){return ye(un.value,e)&&dn.value===n?(void 0!==lr&&(clearTimeout(lr),lr=void 0),dr+=1,fn.value=!1,pn.value=null,cr=void 0,sr=void 0,Bt(e,{useCache:!1})):(Qt(e,n),Bt(e))},setChannelMentionQuery:function(n){const r=un.value;if(null===r)return;Qt(r,n);const t=dr,o=e.getGeneration();(async()=>{try{const a=await D(e,r,n||void 0);if(!Vt(r,o,t))return;null!==a&&(vn.value=zr(r.conversationId,Ir(Bn,r.conversationId,a.items)),cr=a.nextPageToken,mn.value=a.exhausted||void 0===a.nextPageToken)}catch(e){if(!Vt(r,o,t))return;pn.value=Me(e,"profile.channel-mentions.cache",r)}Vt(r,o,t)&&(lr=setTimeout(()=>{lr=void 0,Bt(r)},300))})()},loadMoreChannelMentions:Ft,refreshChannelMentions:function(){const e=un.value;return null===e?Promise.resolve(Object.freeze({ok:!1,operation:"channel-mentions",reason:"not-ready"})):(void 0!==lr&&(clearTimeout(lr),lr=void 0),dr+=1,fn.value=!1,pn.value=null,cr=void 0,mn.value=!1,sr=void 0,Bt(e,{useCache:!1}))},retryChannelMentions:function(){const e=un.value;return null===e||void 0===sr?Promise.resolve(Object.freeze({ok:!1,operation:"channel-mentions",reason:"not-ready"})):"more"===sr?Ft():Bt(e)},resetChannelMentions:Qt,resetDirect:no,resetGroup:ro,resetChannel:to,reset:oo,dispose:function(){bn||(oo(),bn=!0,Mn.clear(),Cn.clear(),zn.clear(),Gn.clear(),Tn.clear(),En.clear(),$n.clear(),Zt(),eo(),fe.record("debug","pinia","profile","profile-directory-disposed"))}}})}const _e=/* @__PURE__ */new WeakMap,Te=/* @__PURE__ */new WeakMap;function Ge(e=fe()){ve(e);let n=_e.get(e);void 0===n&&(n=Pe(e),_e.set(e,n));const r=n(e);return Te.get(e)!==r&&(Te.set(e,r),de(e,()=>{r.dispose(),r.$dispose(),Te.get(e)===r&&Te.delete(e)})),r}export{Ge as useImProfileDirectoryStore};
@@ -0,0 +1 @@
1
+ import{defineStore as e}from"pinia";import{shallowRef as t,computed as s,watch as n}from"vue";import{getImChatKitContext as r,registerImChatKitStoreDisposer as o,resolveImChatKitPinia as a}from"./context.js";import{useImThreadStore as i}from"./thread.store.js";const u=/* @__PURE__ */new WeakMap,c=Object.freeze({status:"loading",message:null}),l=Object.freeze({status:"missing",message:null});function f(e){return null===e?"":`${e.conversationType}\0${e.conversationId}`}function d(e){const t=/* @__PURE__ */new Set;for(const s of e){const e=s.trim();""!==e&&t.add(e)}return[...t]}function g(o){return e("k2-im-quoted-message",()=>{const e=r(o).runtime,a=e.getDiagnostics(),g=i(o),m=t({}),v=/* @__PURE__ */new Set,p=/* @__PURE__ */new Set;let h=/* @__PURE__ */new Set,y=0;const b=/* @__PURE__ */new Map;let w=!1,j=!1,O=!1;const M=s(()=>{const e=/* @__PURE__ */new Map;for(const t of g.messages)e.set(t.id,t);return e});function k(){y+=1,v.clear(),p.clear(),b.clear(),h=/* @__PURE__ */new Set,j=!1,O=!1,m.value={}}const I=n(()=>g.activeRef,k,{flush:"sync"}),q=e.subscribeEvents(e=>{w||"connection:changed"!==e.type||"authenticated"!==e.state||T()});function z(e){return"direct"===e?.conversationType&&!0===e.encryption.decryptFailed&&void 0===e.recalled&&void 0===e.deletedForEveryone}function C(e){return z(e)&&!p.has(e.id)}function S(e){const t=M.value.get(e);return void 0!==t&&!z(t)}function E(e,t){if(0===e.length)return;const s={...m.value};let n=!1;for(const[r,o]of e)h.has(r)&&!S(r)&&t.get(r)===(b.get(r)??0)&&(s[r]=o,n=!0);n&&(m.value=s)}function R(){if(w)return;if(j)return void(O=!0);const t=function(){const e=[];for(const t of h){const s=M.value.get(t);if(v.has(t)||void 0!==s&&!C(s))continue;const n=m.value[t];(void 0===n||"ready"===n.status&&C(n.message))&&e.push(t)}return e}();if(0===t.length)return;const s=y;j=!0;for(const e of t)v.add(e);(async function(t){const s=y,n=new Map(t.map(e=>[e,b.get(e)??0])),r=e.getGeneration(),o=g.getHandle(),i=f(g.activeRef);if(void 0===o||f(o.ref)!==i)return;const u=()=>!w&&y===s&&e.getGeneration()===r&&g.getHandle()===o&&f(g.activeRef)===i,c=[],d=[];try{const e=await Promise.all(t.map(async e=>({messageId:e,message:await o.resolveMessage(e)})));if(!u())return;for(const{messageId:t,message:s}of e)null===s||C(s)?d.push(t):c.push([t,Object.freeze({status:"ready",message:s})])}catch(e){if(!u())return;return E(t.map(e=>[e,Object.freeze({status:"failed",message:null,retryable:!0})]),n),void a.record("error","pinia","message","quoted-message-local-lookup-failed",()=>({generation:r,conversation:{...o.ref},data:{requestedCount:t.length},error:{message:"读取本机历史解析引用原文失败",data:e}}))}if(E(c,n),0!==d.length)try{if("direct"===o.ref.conversationType)for(const e of d)p.add(e);const e=await o.messages.fetchByIds(d);if(!u())return;const t=[];for(const s of e.messages)t.push([s.id,Object.freeze({status:"ready",message:s})]);for(const s of e.missingMessageIds)t.push([s,l]);const s=e.failure?.retryable??!0;for(const n of e.unresolvedMessageIds)t.push([n,Object.freeze({status:"failed",message:null,retryable:s})]);E(t,n),a.record("debug","pinia","message","quoted-message-remote-lookup-settled",()=>({generation:r,conversation:{...o.ref},data:{requestedCount:d.length,resolvedCount:e.messages.length,missingCount:e.missingMessageIds.length,unresolvedCount:e.unresolvedMessageIds.length,retryable:e.failure?.retryable}}))}catch(e){if(!u())return;E(d.map(e=>[e,Object.freeze({status:"failed",message:null,retryable:!1})]),n),a.record("error","pinia","message","quoted-message-remote-lookup-failed",()=>({generation:r,conversation:{...o.ref},data:{requestedCount:d.length},error:{message:"按消息 ID 回源引用原文失败",data:e}}))}})(t).catch(e=>{a.record("error","pinia","message","quoted-message-resolve-crashed",()=>({data:{requestedCount:t.length},error:{message:"引用原文解析批次异常终止",data:e}}))}).finally(()=>{if(s===y){for(const e of t)v.delete(e);j=!1,O&&(O=!1,R())}})}function T(e){if(w)return;const t=(void 0===e?[...h]:d(e)).filter(e=>{const t=m.value[e];return"failed"===t?.status&&t.retryable});if(0===t.length)return;const s={...m.value};for(const e of t)p.delete(e),delete s[e],v.delete(e),b.set(e,(b.get(e)??0)+1);m.value=s,R()}return u.set(o,Object.freeze({dispose:function(){w||(w=!0,I(),q(),k())}})),{lookup:function(e){const t=e.trim();if(""===t)return l;const s=M.value.get(t),n=m.value[t];return!z(s)||"missing"!==n?.status&&"failed"!==n?.status?void 0!==s?Object.freeze({status:"ready",message:s}):n??c:n},prefetch:function(e){if(w)return;h=new Set(d(e));const t=Object.fromEntries(Object.entries(m.value).filter(([e])=>h.has(e)&&!S(e)));Object.keys(t).length!==Object.keys(m.value).length&&(m.value=t),R()},retry:T,invalidate:function(e){if(w)return;const t=d(e).filter(e=>void 0!==m.value[e]||v.has(e)||h.has(e));if(0===t.length)return;const s={...m.value};for(const e of t)delete s[e],v.delete(e),b.set(e,(b.get(e)??0)+1);m.value=s,R()},reset:function(){k()}}})}const m=/* @__PURE__ */new WeakMap,v=/* @__PURE__ */new WeakMap;function p(e=a()){r(e);let t=m.get(e);void 0===t&&(t=g(e),m.set(e,t));const s=t(e),n=u.get(e);if(void 0===n)throw new Error("当前 Pinia 尚未创建 ImQuotedMessageStore");return v.get(e)!==s&&(v.set(e,s),o(e,()=>{n.dispose(),s.$dispose(),v.get(e)===s&&(v.delete(e),u.get(e)===n&&u.delete(e))})),s}export{p as useImQuotedMessageStore};
@@ -0,0 +1 @@
1
+ import{defineStore as e}from"pinia";import{ref as t,shallowRef as n,watch as o}from"vue";import{getImChatKitContext as r,registerImChatKitStoreDisposer as a,resolveImChatKitPinia as i}from"./context.js";import{useImThreadStore as s}from"./thread.store.js";const c=/* @__PURE__ */new WeakMap;function l(e){return null===e?"":`${e.conversationType}\0${e.conversationId}`}function u(a){return e("k2-im-reaction",()=>{const e=r(a).runtime,i=e.getDiagnostics(),u=s(a),f=t([]),g=n(null);let d=!1,p=0;const y=/* @__PURE__ */new Map;function v(){p+=1,y.clear(),f.value=[],g.value=null}const b=o(()=>l(u.activeRef),(e,t)=>{e!==t&&v()},{flush:"sync"});function m(t){return!d&&t.contextEpoch===p&&t.generation===e.getGeneration()&&u.getHandle()===t.handle&&l(u.activeRef)===t.conversationKey}async function k(t,n,o){const r=function(t,n){const o=u.activeRef,r=u.getHandle(),a=l(o);if(d||null===o||void 0===r||l(r.ref)!==a||!u.messages.some(e=>e.id===t))return Object.freeze({ok:!1,operation:n,reason:"not-ready"});if(y.has(t))return Object.freeze({ok:!1,operation:n,reason:"busy"});const i=Symbol(t);return y.set(t,i),f.value=Object.freeze([...y.keys()]),{generation:e.getGeneration(),contextEpoch:p,handle:r,conversationKey:a,token:i}}(t,n);if(!("handle"in r))return r;try{const e=await o(r.handle);return m(r)?(g.value=null,i.record("debug","pinia","message",`reaction-${n}-settled`,()=>({generation:r.generation,conversation:{...r.handle.ref},messageId:t,result:{ok:!0,action:e.action}})),Object.freeze({ok:!0,operation:n,change:e})):Object.freeze({ok:!1,operation:n,reason:"stale"})}catch(e){if(!m(r))return Object.freeze({ok:!1,operation:n,reason:"stale"});const o=function(e,t){return function(e){return"object"==typeof e&&null!==e&&"string"==typeof e.code&&"string"==typeof e.category&&"string"==typeof e.operation&&"boolean"==typeof e.retryable}(e)?Object.freeze({code:e.code,category:e.category,operation:e.operation,retryable:e.retryable,...void 0===e.conversation?{}:{conversation:Object.freeze({...e.conversation})}}):Object.freeze({code:"IM_CHAT_KIT_REACTION_OPERATION_FAILED",category:"state",operation:`reaction.${t}`,retryable:!1})}(e,n);return g.value=o,i.record("error","pinia","message",`reaction-${n}-settled`,()=>({generation:r.generation,conversation:{...r.handle.ref},messageId:t,result:{ok:!1,reason:"sdk-rejected",error:o}})),Object.freeze({ok:!1,operation:n,reason:"sdk-rejected",error:o})}finally{!function(e,t){y.get(e)===t&&(y.delete(e),f.value=Object.freeze([...y.keys()]))}(t,r.token)}}return c.set(a,Object.freeze({dispose:function(){d||(d=!0,b(),v())}})),{operatingMessageIds:f,error:g,toggle:function(e,t){return k(e,"toggle",n=>n.messages.toggleReaction(e,t))},set:function(e,t,n){return k(e,"set",o=>o.messages.setReaction(e,t,n))},reset:function(){v()}}})}const f=/* @__PURE__ */new WeakMap,g=/* @__PURE__ */new WeakMap;function d(e=i()){r(e);let t=f.get(e);void 0===t&&(t=u(e),f.set(e,t));const n=t(e),o=c.get(e);if(void 0===o)throw new Error("当前 Pinia 尚未创建 ImReactionStore");return g.get(e)!==n&&(g.set(e,n),a(e,()=>{o.dispose(),n.$dispose(),g.get(e)===n&&(g.delete(e),c.get(e)===o&&c.delete(e))})),n}export{d as useImReactionStore};
@@ -0,0 +1 @@
1
+ import{ref as e,shallowRef as r,computed as n}from"vue";import{resolveSenderAvatarUrl as t,readChannelMemberDisplayName as a,readMemberDisplayName as s,resolveChannelMemberAvatarUrl as o}from"../services/profile-display.js";import{useImProfileDirectoryStore as i}from"./profile-directory.store.js";function l(l,f,c){const d=e({});let u,v=0,p=()=>!1;const m=r([]),I=[];let y=0;function h(){for(;y<4&&I.length>0;){const e=I.shift();y+=1,e.run().then(e.resolve,e.reject).finally(()=>{y-=1,h()})}}function P(e){return new Promise((r,n)=>{I.push({run:e,resolve:r,reject:n}),h()})}function g(e){const r={name:"",avatarUrl:""};if(!p()||c.activeRef?.conversationType!==e.ref.conversationType||c.activeRef.conversationId!==e.ref.conversationId)return{...r,status:"unavailable"};const n=f.getSenderProfileCache();if(e.senderId===f.getCredentials().userId)return{...r,status:"self",avatarUrl:t(n,e.senderId)};if("system"===e.senderId)return{...r,status:"system"};if("robot"===e.ref.conversationType){const r=c.display,n=e.senderId===e.ref.conversationId&&r?.title!==e.ref.conversationId?r?.title.trim()??"":"";return{name:n,avatarUrl:""===n?"":r?.avatar??"",status:""===n?"unavailable":"ready"}}const i="channel"===e.ref.conversationType?a(n,f.getChannelMemberProfiles(),e.ref.conversationId,e.senderId):s(n,f.getGroupMemberNames(),"group"===e.ref.conversationType?e.ref.conversationId:"",e.senderId);return{name:i,avatarUrl:"channel"===e.ref.conversationType?o(n,f.getChannelMemberProfiles(),e.ref.conversationId,e.senderId):t(n,e.senderId),status:""===i?d.value[e.senderId]??"unavailable":"ready"}}async function b(e,r,n=!1){if(!r()||0===e.length)return;p=r,n||(m.value=e);const t=v,a=()=>t===v&&r(),s=e[0].ref;if("robot"===s.conversationType)return;u??(u=i(l));const o=u,c=e.flatMap(e=>[e.senderId,...e.previewParts.flatMap(e=>"rich-text"===e.kind?e.mention?.atUserIds??[]:[])]),I=[...new Set(c)].filter(e=>""!==e&&"system"!==e&&e!==f.getCredentials().userId&&"loading"!==d.value[e]&&(n||void 0===d.value[e]));if(0===I.length)return;for(const e of I)d.value[e]="loading";const y=Promise.allSettled([Promise.resolve().then(()=>!!a()&&("group"===s.conversationType?o.resolveGroupMemberProfiles({conversationType:"group",conversationId:s.conversationId},{forceRefresh:n}):"channel"!==s.conversationType||o.resolveChannelMemberProfiles({conversationType:"channel",conversationId:s.conversationId},I,{forceRefresh:n,isCurrent:a})))]).then(([e])=>"fulfilled"===e.status&&e.value);await Promise.all(I.map(e=>P(async()=>{if(!a())return;const[r,t]=await Promise.allSettled([y,Promise.resolve().then(()=>o.resolveSenderProfile(e,{forceRefresh:n}))]);if(!a())return;const s="rejected"===r.status||!1===r.value||"rejected"===t.status||!1===t.value;d.value[e]=s?"failed":"unavailable"})))}function T(){return m.value.flatMap(e=>{if("robot"===e.ref.conversationType)return[];const r=e.previewParts.flatMap(e=>"rich-text"===e.kind?(e.mention?.atUserIds??[]).filter(r=>!e.mention?.atUsersName?.[r]?.trim()):[]);return[e.senderId,...r].map(r=>({...e,senderId:r,previewParts:[]})).filter(e=>["failed","unavailable"].includes(g(e).status))})}return{senderFor:g,prepare:b,reset:function(){v+=1,d.value={},m.value=[],p=()=>!1;for(const e of I.splice(0))e.resolve()},hasRetryableSenderProfiles:n(()=>T().length>0),retrySenderProfiles:async function(){await b(T(),p,!0)}}}export{l as createSearchSenders};
@@ -0,0 +1 @@
1
+ import{defineStore as e}from"pinia";import{ref as r,shallowRef as o,watch as t,nextTick as a}from"vue";import{fetchNextConversationSearchBatch as n,fetchConversationVoiceBatch as i,fetchConversationVideoBatch as s,fetchConversationImageBatch as c,fetchConversationFileBatch as l,fetchConversationTextBatch as u,fetchConversationMessageBatch as v}from"../services/search.service.js";import{classifyImMessageLocateError as f}from"../thread/message-locate-result.js";import{getImChatKitContext as d,registerImChatKitStoreDisposer as p,resolveImChatKitPinia as m}from"./context.js";import{createSearchSenders as g}from"./search-senders.js";import{useImThreadStore as h}from"./thread.store.js";function y(e){return Object.freeze({conversationType:e.conversationType,conversationId:e.conversationId})}function b(e,r){return null!==e&&e.conversationId===r.conversationId&&e.conversationType===r.conversationType}function k(e,r,o){return"object"==typeof e&&null!==e&&"string"==typeof e.code&&"string"==typeof e.category?e:Object.freeze({code:"IM_CHAT_KIT_SEARCH_OPERATION_FAILED",category:"state",operation:r,retryable:!1,...void 0===o?{}:{conversation:y(o)}})}function j(p){return e("k2-im-search",()=>{const e=d(p).runtime,m=e.getDiagnostics(),j=h(p),O=g(p,e,j),z=r(""),T=r([]),w=r(!1),I=r(!1),x=r("all"),P=r(""),R=r(""),M=o(null);let A,L,S,_,C,H=!1,E=0,F=0;function $(){const r=j.activeRef,o=j.getHandle();if(!H&&null!==r&&void 0!==o&&b(r,o.ref))return{ref:y(r),handle:o,generation:e.getGeneration()}}function D(r){return!H&&e.getGeneration()===r.generation&&j.getHandle()===r.handle&&b(j.activeRef,r.ref)}function G(){const e=S;void 0!==e&&(clearTimeout(e.timer),S=void 0,e.resolve(Object.freeze({ok:!1,operation:"search",reason:"stale"})))}function W(){void 0!==_&&(clearTimeout(_),_=void 0)}function K(e,r){return r===E&&(w.value=!1),Object.freeze({ok:!1,operation:e,reason:"stale"})}function N(e,r){return e===F&&P.value===r&&(P.value=""),Object.freeze({ok:!1,operation:"locate",reason:"stale"})}function q(r){z.value=r,G();const o=++E,t=r.trim(),a=x.value,n=function(e,r){return""!==e||"all"!==r&&"text"!==r}(t,a);if(L=void 0,T.value=[],O.reset(),I.value=!1,M.value=null,!n)return w.value=!1,Promise.resolve(Object.freeze({ok:!1,operation:"search",reason:"no-condition"}));const f=$();return void 0===f?(w.value=!1,Promise.resolve(Object.freeze({ok:!1,operation:"search",reason:"not-ready"}))):(w.value=!0,new Promise(r=>{const n=setTimeout(()=>{S?.timer===n&&(S=void 0),o===E&&D(f)?(m.record("debug","pinia","history","search-start",()=>({generation:f.generation,conversation:f.ref,category:a})),function(r,o,t){switch(t){case"all":return v(e,{conversation:r.ref,keyword:o});case"text":return u(e,{conversation:r.ref,keyword:o});case"file":return l(e,{conversation:r.ref,keyword:o});case"image":return c(e,{conversation:r.ref});case"video":return s(e,{conversation:r.ref});case"voice":return i(e,{conversation:r.ref})}}(f,t,a).then(e=>{o===E&&D(f)?(T.value=[...e.results],O.prepare(T.value,()=>D(f)),L=e.nextPageToken,I.value=!e.exhausted,w.value=!1,r(Object.freeze({ok:!0,operation:"search"}))):r(K("search",o))}).catch(e=>{if(o!==E||!D(f))return void r(K("search",o));const t=k(e,"search.first-page",f.ref);M.value=t,w.value=!1,r(Object.freeze({ok:!1,operation:"search",reason:"failed",error:t}))})):r(K("search",o))},250);S={timer:n,resolve:r}}))}function B(){F+=1,A?.abort(),A=void 0,W(),P.value="",R.value=""}function J(e){E+=1,G(),z.value="",T.value=[],O.reset(),w.value=!1,I.value=!1,x.value="all",L=void 0,M.value=null,!0!==e?.preserveLocation&&B()}return C=t(()=>null===j.activeRef?"":`${j.activeRef.conversationType}\0${j.activeRef.conversationId}`,()=>J(),{flush:"sync"}),{keyword:z,results:T,senderFor:O.senderFor,hasRetryableSenderProfiles:O.hasRetryableSenderProfiles,retrySenderProfiles:O.retrySenderProfiles,searching:w,hasMore:I,category:x,locatingMessageId:P,highlightMessageId:R,error:M,search:q,setCategory:function(e){return x.value=e,"image"!==e&&"video"!==e&&"voice"!==e||(z.value=""),q(z.value)},loadMore:async function(){if(w.value)return Object.freeze({ok:!1,operation:"load-more",reason:"busy"});if(!I.value||void 0===L)return Object.freeze({ok:!1,operation:"load-more",reason:"exhausted"});const r=$();if(void 0===r)return Object.freeze({ok:!1,operation:"load-more",reason:"not-ready"});const o=L,t=++E;w.value=!0,M.value=null;try{const a=await n(e,o);return t===E&&D(r)?(T.value=[...T.value,...a.results],O.prepare(T.value,()=>D(r)),L=a.nextPageToken,I.value=!a.exhausted,w.value=!1,Object.freeze({ok:!0,operation:"load-more"})):K("load-more",t)}catch(e){if(t!==E||!D(r))return K("load-more",t);const o=k(e,"search.next-page",r.ref);return M.value=o,w.value=!1,Object.freeze({ok:!1,operation:"load-more",reason:"failed",error:o})}},locate:async function(e,r){const o=$();if(void 0===o||!b(o.ref,e))return Object.freeze({ok:!1,operation:"locate",reason:"not-ready"});const t=++F;A?.abort();const n=new AbortController;A=n,W(),R.value="",P.value="",P.value=r,M.value=null;try{return await j.loadAround(r,{skipIfLoaded:!0,signal:n.signal})?(await a(),t===F&&D(o)?(R.value=r,Object.freeze({ok:!0,operation:"locate"})):N(t,r)):N(t,r)}catch(e){if(t!==F||!D(o))return N(t,r);const a=k(e,"search.locate",o.ref),n=f(e).reason;return"load-failed"===n&&m.record("warn","pinia","search","message-locate-failed",()=>({conversation:o.ref,error:{message:"读取消息定位窗口失败",data:e}})),P.value="",M.value="cancelled"===n?null:a,Object.freeze({ok:!1,operation:"locate",reason:"load-failed"===n||"not-visible"===n?"failed":n,..."cancelled"===n?{}:{error:a}})}finally{A===n&&(A=void 0)}},completeLocation:function(e){if(P.value!==e)return!1;P.value="";const r=F,o=$();return W(),void 0===o||R.value!==e||(_=setTimeout(()=>{_=void 0,r===F&&D(o)&&R.value===e&&(R.value="")},2e3)),!0},clearLocation:B,reset:J,dispose:function(){H||(J(),H=!0,C?.(),C=void 0)}}})}const O=/* @__PURE__ */new WeakMap,z=/* @__PURE__ */new WeakMap;function T(e=m()){d(e);let r=O.get(e);void 0===r&&(r=j(e),O.set(e,r));const o=r(e);return z.get(e)!==o&&(z.set(e,o),p(e,()=>{o.dispose(),o.$dispose(),z.get(e)===o&&z.delete(e)})),o}export{T as useImSearchStore};
@@ -0,0 +1 @@
1
+ import{defineStore as e}from"pinia";import{shallowRef as t,ref as r,computed as o}from"vue";import{resolveImChatKitPinia as n,getImChatKitContext as a,registerImChatKitStoreDisposer as c}from"./context.js";function i(e,t){const r=e;return Object.freeze({code:"string"==typeof r.code?r.code:"IM_SDK_SESSION_FAVORITE_REQUEST_FAILED",category:r.category??"network",operation:r.operation??t,retryable:!0===r.retryable})}function l(l){const s=n(l),d=a(s).runtime;return e("im-session-favorites",()=>{const e=t([]),n=r(!1),a=t(null),l=o(()=>{const t=/* @__PURE__ */new Map;for(const r of e.value)""!==r.msgId&&""!==r.collectId&&t.set(r.msgId,r.collectId);return t});let u,f,v=!1,p=0,I=0;function O(){p+=1,I+=1,e.value=[],n.value=!1,a.value=null}function b(e){return{client:e,generation:d.getGeneration(),stateEpoch:p}}function j(e){return!v&&e.client===d.getProductClient()&&e.generation===d.getGeneration()&&e.stateEpoch===p}function y(e){return l.value.get(e.trim())??""}async function z(){if(v)return Object.freeze({ok:!1,operation:"reload",reason:"stale"});const t=++I;let r;try{r=b(d.ensureProductClient()),k(r.client)}catch(e){const t=i(e,"reload");return a.value=t,n.value=!1,Object.freeze({ok:!1,operation:"reload",reason:"failed",error:t})}n.value=!0,a.value=null;try{const o=await r.client.sessionFavorites.list();return t===I&&j(r)?(e.value=o,Object.freeze({ok:!0,operation:"reload"})):Object.freeze({ok:!1,operation:"reload",reason:"stale"})}catch(e){if(t!==I||!j(r))return Object.freeze({ok:!1,operation:"reload",reason:"stale"});const o=i(e,"reload");return a.value=o,Object.freeze({ok:!1,operation:"reload",reason:"failed",error:o})}finally{t===I&&j(r)&&(n.value=!1)}}function g(){I+=1,n.value=!1}async function m(t){if(v)return Object.freeze({ok:!1,operation:"delete",reason:"stale"});const r=[...new Set(t.map(e=>e.trim()).filter(e=>""!==e))];if(0===r.length)return Object.freeze({ok:!1,operation:"delete",reason:"failed",error:Object.freeze({code:"IM_SDK_SESSION_FAVORITE_INPUT_INVALID",category:"validation",operation:"delete",retryable:!1})});try{const t=b(d.ensureProductClient());if(await t.client.sessionFavorites.delete(r),!j(t))return Object.freeze({ok:!1,operation:"delete",reason:"stale"});g();const o=new Set(r);return e.value=Object.freeze(e.value.filter(e=>!o.has(e.collectId))),Object.freeze({ok:!0,operation:"delete",collectId:r[0]??""})}catch(e){return Object.freeze({ok:!1,operation:"delete",reason:"failed",error:i(e,"delete")})}}function k(e){if(f===e)return;u?.(),f=e;const t=b(e);u=e.events.subscribe(r=>{f===e&&j(t)&&"session-favorites:changed"===r.type&&z()})}return c(s,()=>{v=!0,u?.(),u=void 0,f=void 0,O()}),{items:e,loading:n,error:a,collectIdOf:y,isFavorited:function(e){return""!==y(e)},reload:z,addFromMessage:async function(t){if(v)return Object.freeze({ok:!1,operation:"add",reason:"stale"});let r;try{r=b(d.ensureProductClient()),k(r.client);const o=await r.client.sessionFavorites.addFromMessage(t);return j(r)?(g(),e.value=Object.freeze([o,...e.value.filter(e=>e.collectId!==o.collectId)]),Object.freeze({ok:!0,operation:"add",collectId:o.collectId})):Object.freeze({ok:!1,operation:"add",reason:"stale"})}catch(e){return Object.freeze({ok:!1,operation:"add",reason:"failed",error:i(e,"add")})}},removeByCollectIds:m,removeByMessageId:async function(e){const t=y(e);return""===t?Object.freeze({ok:!1,operation:"delete",reason:"failed",error:Object.freeze({code:"IM_SDK_SESSION_FAVORITE_INPUT_INVALID",category:"validation",operation:"delete",retryable:!1})}):m([t])},reset:function(){u?.(),u=void 0,f=void 0,O()}}})(s)}export{l as useImSessionFavoritesStore};
@@ -0,0 +1 @@
1
+ import{defineStore as e}from"pinia";import{ref as n}from"vue";import{getImChatKitContext as t,registerImChatKitStoreDisposer as o,resolveImChatKitPinia as i}from"./context.js";function a(o){return e("k2-im-session",()=>{const e=t(o).runtime,i=n(""),a=n(e.getConnectionState()),r=n(e.getClient()?.connection.getLifecycle().receiving??!1),s=n(e.getClient()?.connection.getLifecycle().syncing??!1),c=n(e.getGeneration()),u=n("idle"),l=n(""),v=n({});let d=!1,g=0,p="";const f=e.getDiagnostics(),y=e.subscribeEvents(n=>{if(!d){if("syncing:changed"===n.type&&(s.value=n.syncing),"receiving:changed"===n.type&&(r.value=n.receiving),"session:replaced"===n.type)return g+=1,u.value="error",r.value=!1,s.value=!1,a.value=e.getConnectionState(),l.value="lifecycle.connectionOccupied",void(v.value={});"connection:changed"===n.type&&(a.value=n.state,"authenticated"===n.state&&(u.value="ready"))}});async function S(n,t,o){if(d)return{ok:!1,errorKey:"lifecycle.disposed"};const i=++g,r=e.getGeneration(),s=Date.now();u.value=n,l.value="",v.value={},f.record("info","pinia","prepare"===t?"session":"connection",`${t}-start`,()=>({generation:r}));const p=await o();return function(n,t){return!d&&n===g&&e.getGeneration()===t}(i,r)?(c.value=e.getGeneration(),a.value=e.getConnectionState(),u.value=p.ok?"authenticated"===a.value?"ready":"idle":"error",l.value=p.errorKey??"",v.value=p.errorParams??{},f.record(p.ok?"info":"error","pinia","prepare"===t?"session":"connection",`${t}-${p.ok?"complete":"failed"}`,()=>({generation:c.value,durationMs:Date.now()-s,...p.ok?{}:{error:{message:p.errorKey??`${t}-failed`,data:p.errorParams}}})),p):(f.record("debug","pinia","session",`${t}-stale-result-dropped`,()=>({generation:r,durationMs:Date.now()-s})),p)}return{accountId:i,connectionState:a,receiving:r,syncing:s,generation:c,phase:u,errorKey:l,errorParams:v,configureHost:function(n){if(d)throw new Error("Session Store 已 dispose,不能重新配置宿主");e.configureHost(n)},applySession:function(n){if(d)throw new Error("Session Store 已 dispose,不能应用账号");const t=null===n.session?"":`${n.session.userId}\0${n.session.token}`;t!==p&&(g+=1,p=t);const o=e.applySession(n.session,n.endpoints,n.deviceToken);return r.value=e.getClient()?.connection.getLifecycle().receiving??!1,s.value=e.getClient()?.connection.getLifecycle().syncing??!1,i.value=n.session?.userId??"",c.value=e.getGeneration(),a.value=e.getConnectionState(),u.value="authenticated"===a.value?"ready":"idle",l.value="",v.value={},f.record("info","pinia","session","session-applied",()=>({generation:c.value,...""===i.value?{}:{accountId:i.value},data:{hasToken:o.hasToken,didReset:o.didReset}})),o},prepare:function(){return S("preparing","prepare",()=>e.prepare())},connect:function(){return S("connecting","connect",()=>e.connect())},disconnect:function(){d||(g+=1,e.disconnect(),a.value=e.getConnectionState(),u.value="idle")},logout:async function(n){if(d)throw new Error("Session Store 已 dispose,不能 logout");g+=1;try{await e.logout(n)}finally{i.value="",r.value=!1,s.value=!1,p="",c.value=e.getGeneration(),a.value=e.getConnectionState(),u.value="idle",l.value="",v.value={}}},dispose:function(){d||(d=!0,g+=1,y(),i.value="",a.value="idle",r.value=!1,s.value=!1,c.value=e.getGeneration(),u.value="disposed",l.value="",v.value={})},getRuntime:()=>e}})}const r=/* @__PURE__ */new WeakMap,s=/* @__PURE__ */new WeakMap;function c(e=i()){t(e);let n=r.get(e);void 0===n&&(n=a(e),r.set(e,n));const c=n(e);return s.get(e)!==c&&(s.set(e,c),o(e,()=>{c.dispose(),c.$dispose(),s.get(e)===c&&s.delete(e)})),c}export{c as useImSessionStore};
@@ -0,0 +1 @@
1
+ import{defineStore as e}from"pinia";import{ref as r,watch as n}from"vue";import{getImChatKitContext as t,registerImChatKitStoreDisposer as o,resolveImChatKitPinia as a}from"./context.js";import{useImSearchStore as i}from"./search.store.js";import{useImThreadStore as s}from"./thread.store.js";function d(e){return"object"==typeof e&&null!==e&&"AbortError"===e.name}function l(e,r){return null!==e&&null!==r&&e.conversationType===r.conversationType&&e.conversationId===r.conversationId}function u(e){return null===e?"":`${e.conversationType}\0${e.conversationId}`}function c(e,r){return`${u(e)}\0${r}`}function g(e,r){return"older"===r?e[0]?.id??"":e[e.length-1]?.id??""}function p(e){return e instanceof Error?{message:e.message,name:e.name}:"string"==typeof e?{message:e}:{message:"Unknown paging error"}}const f=/* @__PURE__ */new WeakMap,v=/* @__PURE__ */new WeakMap;function m(m=a()){t(m);let h=f.get(m);void 0===h&&(h=function(o){return e("k2-im-thread-paging",()=>{const e=t(o).runtime,a=e.getDiagnostics(),f=s(o),v=i(o),m=r(!1),h=r(!1),y=r(null),w=r(null);let b=!1,$="",j="",B=0;const N=()=>({ref:f.activeRef,generation:e.getGeneration(),olderBoundary:g(f.messages,"older"),newerBoundary:g(f.messages,"newer")}),k=(e,r)=>{const n=N();return!b&&r===B&&e.generation===n.generation&&l(e.ref,n.ref)&&null!==e.ref},E=e=>{void 0!==e&&"older"!==e||($="",y.value=null),void 0!==e&&"newer"!==e||(j="",w.value=null)},L=()=>{B+=1,m.value=!1,h.value=!1,E()},O=async(e,r)=>{const n=N(),t="older"===e?$:j,o="older"===e?f.hasOlder:f.hasNewer;if(null===n.ref||!o||("older"===e?m.value:h.value))return 0;const i=n.ref,s="older"===e?n.olderBoundary:n.newerBoundary,l=c(i,s);if("older"===e?h.value:m.value)return 0;if(!r&&""!==t&&t===l)return a.record("debug","pinia","history",`thread-paging-${e}-circuit-open`,()=>({conversation:i,data:{boundary:s}})),0;r&&(E(e),a.record("debug","pinia","history",`thread-paging-${e}-retry`,()=>({conversation:i})));const u=new Set(f.messages.map(e=>e.id)),v=++B;"older"===e?m.value=!0:h.value=!0,a.record("debug","pinia","history",`thread-paging-${e}-start`,()=>({conversation:i,generation:n.generation,data:{boundary:s,force:r}}));try{const r="older"===e?await f.loadOlder():await f.loadNewer();if(!k(n,v))return a.record("debug","pinia","history","thread-paging-stale-result-dropped",()=>({conversation:i,generation:n.generation,data:{side:e}})),0;if(!r)return 0;E(e);const t=f.messages.reduce((e,r)=>e+Number(!u.has(r.id)),0);return a.record("debug","pinia","history",`thread-paging-${e}-success`,()=>({conversation:i,generation:n.generation,data:{added:t}})),t}catch(r){if(!k(n,v))return a.record("debug","pinia","history","thread-paging-stale-result-dropped",()=>({conversation:i,generation:n.generation,data:{side:e,outcome:"failed"}})),0;if(d(r))return a.record("debug","pinia","history",`thread-paging-${e}-cancelled`,()=>({conversation:i,generation:n.generation})),0;throw g(f.messages,e)===s&&("older"===e?($=l,y.value=r):(j=l,w.value=r),a.record("warn","pinia","history",`thread-paging-${e}-failed`,()=>({conversation:i,generation:n.generation,error:{message:`消息线程 ${e} 分页失败`,data:p(r)}}))),r}finally{v===B&&("older"===e?m.value=!1:h.value=!1)}},I=(e={})=>O("older",!0===e.force),R=(e={})=>O("newer",!0===e.force),T=n(()=>u(f.activeRef),()=>L(),{flush:"sync"}),A=n(()=>`${c(f.activeRef,g(f.messages,"older"))}\0${g(f.messages,"newer")}`,()=>{const e=N(),r=c(e.ref,e.olderBoundary),n=c(e.ref,e.newerBoundary);""!==$&&$!==r&&E("older"),""!==j&&j!==n&&E("newer")},{flush:"sync"}),x=f.$onAction(({name:e})=>{"loadLatest"!==e&&"loadAround"!==e&&"loadEntryUnread"!==e&&"open"!==e&&"close"!==e&&"reset"!==e||L()});return{loadingOlder:m,loadingNewer:h,olderError:y,newerError:w,loadOlder:I,loadNewer:R,retryOlder:()=>I({force:!0}),retryNewer:()=>R({force:!0}),jumpToLatest:async e=>{if(void 0!==e&&!l(f.activeRef,e))return!1;v.clearLocation(),L();const r=N();if(null===r.ref)return!1;const n=r.ref;let t;a.record("debug","pinia","history","thread-paging-jump-latest-start",()=>({conversation:n}));let o=B;try{const e=f.loadLatest({skipIfLatest:!0});o=B,t=await e}catch(e){if(!k(r,o)||d(e))return a.record("debug","pinia","history","thread-paging-jump-latest-cancelled",()=>({conversation:n})),!1;const t=g(f.messages,"newer");throw j=c(n,t),w.value=e,a.record("warn","pinia","history","thread-paging-jump-latest-failed",()=>({conversation:n,generation:r.generation,error:{message:"跳转最新消息失败",data:p(e)}})),e}return k(r,o)?(E("newer"),t):(a.record("debug","pinia","history","thread-paging-jump-latest-stale-result-dropped",()=>({conversation:n})),!1)},reset:L,dispose:()=>{b||(b=!0,T(),A(),x(),L())}}})}(m),f.set(m,h));const y=h(m);return v.get(m)!==y&&(v.set(m,y),o(m,()=>{y.dispose(),y.$dispose(),v.get(m)===y&&v.delete(m)})),y}export{m as useImThreadPagingStore};
@@ -0,0 +1 @@
1
+ import{resolveImChatKitPinia as e}from"./context.js";import{useImSearchStore as r}from"./search.store.js";import{useImThreadStore as t}from"./thread.store.js";function o(o=e()){const n=t(o),a=r(o);return Object.freeze({async returnToLatest(e){return r=n.activeRef,t=e,null!==r&&r.conversationType===t.conversationType&&r.conversationId===t.conversationId&&(a.clearLocation(),!n.hasNewer||n.loadLatest());var r,t}})}export{o as useImThreadReturnToLatestCoordinator};
@@ -0,0 +1 @@
1
+ import{defineStore as e}from"pinia";import{shallowRef as n,ref as t}from"vue";import{getImChatKitContext as o,registerImChatKitStoreDisposer as r,resolveImChatKitPinia as a}from"./context.js";function i(e){return Object.freeze({conversationType:e.conversationType,conversationId:e.conversationId})}const s=Object.freeze({state:"none"});function l(e,n,t){return"object"==typeof e&&null!==e&&"string"==typeof e.code&&"string"==typeof e.category?e:Object.freeze({code:"IM_CHAT_KIT_THREAD_OPERATION_FAILED",category:"state",operation:n,retryable:!1,...void 0===t?{}:{conversation:i(t)}})}function d(r){return e("k2-im-thread",()=>{const e=o(r).runtime,a=e.getDiagnostics(),d=n(null),c=n(null),v=n([]),u=n(s),f=n(),g=n(null),p=t(!1),y=t(!1),h=t(!1),m=t(!1),b=t(!1),I=n(null),w=t(0);let T,C,E,M,U,k,O=!1,P=0,A=0;const S=[],G=/* @__PURE__ */new Map,L=/* @__PURE__ */new Set,R=/* @__PURE__ */new WeakSet,j=/* @__PURE__ */new WeakMap;const N=e.subscribeEvents(n=>{if(O||"message:received"!==n.type||"live"!==(n.source??"live"))return;const t=d.value;null!==t&&n.message.conversationId===t.conversationId&&n.message.conversationType===t.conversationType&&n.message.senderId!==e.getCredentials().userId&&_(n.message)&&(S.push(n.message.id),w.value+=1)});function z(e=null){S.length=0,w.value=0,d.value=e,c.value=null,v.value=[],u.value=s,f.value=void 0,g.value=null,p.value=null!==e,y.value=!1,h.value=!1,m.value=!1,b.value=!1,I.value=null}function H(){k?.(),k=void 0,U?.(),U=void 0;const e=M;M=void 0,void 0!==e&&function(e){(G.get(e)??0)>0?L.add(e):e.close()}(e)}function _(n){if("hidden"===n.body.system?.timelineVisibility)return!1;if("channel"!==n.conversationType||void 0===n.deletedForEveryone)return!0;const t=e.ensureProductClient().capabilities.get({conversationType:"channel",conversationId:n.conversationId});return"channel"===t.conversationType&&"channel"===t.ref.conversationType&&t.ref.conversationId===n.conversationId&&("owner"===t.value.role||"admin"===t.value.role)}function x(n,t,o){const r=d.value;if(O||M!==n||e.getGeneration()!==o||null===r||t.ref.conversationId!==r.conversationId||t.ref.conversationType!==r.conversationType)return!1;const a=t.messages.filter(_);var i,s;if(i=v.value,s=a,i.length===s.length&&i.every((e,n)=>e===s[n])||(v.value=Object.freeze(a)),u.value=t.entryUnread,f.value=t.entryUnreadNavigation,"located"===t.entryUnread.state){const e=t.entryUnread.firstMessageId,n=t.messages.findIndex(n=>n.id===e);if(n>=0&&!a.some(n=>n.id===e)){const e=t.messages.slice(n+1).find(_);u.value=void 0===e?Object.freeze({state:"unavailable"}):Object.freeze({...t.entryUnread,firstMessageId:e.id})}}return c.value=t.display??null,g.value=t.draft,p.value=t.loading,y.value=y.value||a.length>0||!t.loading,h.value=t.stale,m.value=t.hasOlder,b.value=t.hasNewer,I.value=t.error??null,!0}function D(e){if(O||void 0===M)throw new Error(`Thread Store 没有活动 handle,无法执行 ${e}`);return M}function V(n,t,o){return!O&&A===n&&M===t&&e.getGeneration()===o}async function W(n,t){if(void 0!==C||void 0!==E)return!1;const o=D(n),r=e.getGeneration(),a=++A;C=a;try{return await t(o),V(a,o,r)?(x(o,o.getSnapshot(),r),!0):!1}finally{C===a&&(C=void 0)}}async function F(n,t,o){const r=D(n),a=e.getGeneration(),i=++A;C=void 0,E=i;try{if(await t(r),!V(i,r,a))return!1;const e=r.getSnapshot();return!!o(e)&&(x(r,e,a),!0)}finally{E===i&&(E=void 0)}}function $(e){const n=j.get(e);if(void 0!==n)return n;const t=e.markConversationRead().finally(()=>{j.get(e)===t&&j.delete(e)});return j.set(e,t),t}function K(){const n=M;if(void 0===n||!R.has(n))return;const t=q(n),o=e.getGeneration(),r=j.get(n);(void 0===r?$(n):r.catch(()=>{}).then(()=>$(n))).catch(t=>{o===e.getGeneration()&&a.record("warn","pinia","conversation","thread-leave-read-failed",()=>({conversation:n.ref,error:{message:"离开会话时已读确认失败",data:t}}))}).finally(t)}function q(e=D("retainHandle")){if(O)throw new Error("Thread Store 已 dispose,不能保留 handle");G.set(e,(G.get(e)??0)+1);let n=!1;return()=>{if(n)return;n=!0;const t=(G.get(e)??1)-1;t>0?G.set(e,t):(G.delete(e),L.delete(e)&&e.close())}}function B(){T?.abort(),T=void 0,P+=1,A+=1,C=void 0,E=void 0,H(),z()}function J(){T?.abort(),T=void 0,P+=1,A+=1,C=void 0,E=void 0,U?.(),U=void 0,k?.(),k=void 0;const e=/* @__PURE__ */new Set([...void 0===M?[]:[M],...L,...G.keys()]);M=void 0,L.clear(),G.clear();for(const n of e)n.close();z()}return{display:c,activeRef:d,messages:v,entryUnread:u,entryUnreadNavigation:f,draft:g,loading:p,ready:y,stale:h,hasOlder:m,hasNewer:b,error:I,activeRemoteMessageRevision:w,open:async function(n,t){if(O)throw new Error("Thread Store 已 dispose,不能打开会话");A+=1,C=void 0,E=void 0;const o=i(n);T?.abort();const r=new AbortController;T=r;const s=++P,d=e.getGeneration();let c;a.record("debug","pinia","history","thread-open-start",()=>({generation:d,conversation:o}));try{c=await async function(n,t){const o=e.ensureProductClient();return"direct"===n.conversationType?o.openConversation({conversationType:"direct",conversationId:n.conversationId},{initialPosition:"latest",captureEntryUnread:!0,initialLoad:"local-first",signal:t}):"group"===n.conversationType?o.openConversation({conversationType:"group",conversationId:n.conversationId},{initialPosition:"latest",captureEntryUnread:!0,initialLoad:"local-first",signal:t}):"customerService"===n.conversationType?o.openConversation({conversationType:"customerService",conversationId:n.conversationId},{initialPosition:"first-unread",initialLoad:"local-first",captureEntryUnread:!0,signal:t}):"robot"===n.conversationType?o.openConversation({conversationType:"robot",conversationId:n.conversationId},{initialPosition:"first-unread",initialLoad:"local-first",signal:t}):o.openConversation({conversationType:"channel",conversationId:n.conversationId},{initialPosition:"latest",captureEntryUnread:!0,initialLoad:"local-first",signal:t})}(o,r.signal),O||s!==P||d!==e.getGeneration()||await(t?.beforeCommit?.())}catch(n){if(c?.close(),r.signal.aborted)return;throw O||s!==P||d!==e.getGeneration()||a.record("warn","pinia","history","thread-open-failed",()=>({generation:d,conversation:o,error:{message:"目标会话打开失败,已保留当前线程",data:l(n,"thread.open",o)}})),n}finally{T===r&&(T=void 0)}const v=c;return O||s!==P||d!==e.getGeneration()?(v.close(),void a.record("debug","pinia","history","thread-open-stale-result-dropped",()=>({generation:d,conversation:o}))):(K(),H(),z(o),M=v,U=v.subscribe(e=>x(v,e,d)),x(v,v.getSnapshot(),d),"channel"===o.conversationType&&(k=e.ensureProductClient().capabilities.subscribe(o,()=>{O||M!==v||e.getGeneration()!==d||x(v,v.getSnapshot(),d)})),async function(n){try{const t=e.ensureProductClient(),o=t.conversations.list().find(e=>e.ref.conversationType===n.conversationType&&e.ref.conversationId===n.conversationId);if(!0!==o?.manuallyUnread)return;await t.conversations.markRead(n)}catch(e){a.record("warn","pinia","conversation","thread-open-clear-manual-unread-failed",()=>({conversation:n,error:{message:"会话已打开,但手工未读提醒清除失败",data:e}}))}}(o),a.record("debug","pinia","history","thread-open-complete",()=>({generation:d,conversation:o})),v)},invalidatePendingOpen:function(){T?.abort(),T=void 0,P+=1},loadLatest:function(e){return!0!==e?.skipIfLatest||!y.value||p.value||h.value||null!==I.value||b.value||void 0!==E||void 0!==C?F("loadLatest",e=>e.history.loadLatest(),e=>!e.hasNewer):Promise.resolve(!0)},loadEntryUnread:function(e){let n=!1;return F("loadEntryUnread",async t=>{n=await t.history.loadEntryUnread(e)},e=>n&&"located"===e.entryUnread.state)},markConversationRead:function(){const e=D("markConversationRead");return R.add(e),$(e)},markVisibleMessages:function(e){return D("markVisibleMessages").markVisibleMessages(e)},leave:function(){K(),B()},loadOlder:function(){return W("loadOlder",e=>e.history.loadOlder())},loadNewer:function(){return W("loadNewer",e=>e.history.loadNewer())},loadAround:function(e,n){return n?.signal?.aborted?Promise.reject(new DOMException("消息定位已取消","AbortError")):!0===n?.skipIfLoaded&&y.value&&!p.value&&!h.value&&null===I.value&&void 0===E&&void 0===C&&v.value.some(n=>n.id===e)?Promise.resolve(!0):F("loadAround",t=>void 0===n?.signal?t.history.loadAround(e):t.history.loadAround(e,{signal:n.signal}),n=>n.messages.some(n=>n.id===e)).then(n=>!!n&&v.value.some(n=>n.id===e))},resolveMessage:function(e){return D("resolveMessage").resolveMessage(e)},retainHandle:q,retainCurrentHandle:function(){return q()},close:B,closeActiveConversation:function(e){const n=d.value;return null!==n&&n.conversationType===e.conversationType&&n.conversationId===e.conversationId&&(A+=1,C=void 0,E=void 0,H(),z(),!0)},reset:J,dispose:function(){O||(J(),O=!0,N())},drainActiveRemoteMessageIds:function(){return S.splice(0,S.length)},getHandle:()=>M}})}const c=/* @__PURE__ */new WeakMap,v=/* @__PURE__ */new WeakMap;function u(e=a()){o(e);let n=c.get(e);void 0===n&&(n=d(e),c.set(e,n));const t=n(e);return v.get(e)!==t&&(v.set(e,t),r(e,()=>{t.dispose(),t.$dispose(),v.get(e)===t&&v.delete(e)})),t}export{u as useImThreadStore};
@@ -0,0 +1 @@
1
+ import{resolveMiniProgramFloatLinkUrl as d,resolveMiniProgramOpenUrl as i}from"./mini-program-open-url.js";function e(d,i){return{id:d.appId??i,name:i,cover:"",...void 0===d.appId?{}:{appId:d.appId},...void 0===d.developerId?{}:{developerId:d.developerId},...void 0===d.domain?{}:{domain:d.domain},...void 0===d.suffixAddress?{}:{suffixAddress:d.suffixAddress},...void 0===d.h5Url?{}:{h5Url:d.h5Url},...void 0===d.isDynamic?{}:{isDynamic:d.isDynamic},...void 0===d.productId?{}:{productId:d.productId}}}function r(r,n){if("float-link"===r.configType){const i=d({domain:r.domain,suffixAddress:r.suffixAddress,h5Url:r.h5Url});return""===i?{kind:"refuse"}:{kind:"open-link",url:i}}if("pinned-game"!==r.configType&&"float-game"!==r.configType)return{kind:"refuse"};const o=r.appId?.trim()??"",s=i({domain:r.domain,suffixAddress:r.suffixAddress,h5Url:r.h5Url});return""===o||""===s?{kind:"refuse"}:{kind:"open-game",game:e(r,n.name),currencyType:n.currentCurrencyType??""}}export{r as decideChannelMiniProgramRelOpen};
@@ -0,0 +1 @@
1
+ import{resolveMiniProgramOpenUrl as n,resolveMiniProgramFloatLinkUrl as e}from"./mini-program-open-url.js";const i={"zh-CN":1,"zh-TW":2,"en-US":3,"vi-VN":4,"th-TH":5};function t(n,e){const i=String(e).trim();return""!==i&&"0"!==i&&(n??"").split(",").map(n=>n.trim()).filter(n=>""!==n).includes(i)}function r(n){return n in i?n:"en-US"}function o(n,e){const i={"zh-CN":n.nameZhHans,"zh-TW":n.nameZhHant,"en-US":n.nameEn,"vi-VN":n.nameVi,"th-TH":n.nameTh},t=i[r(e)]?.trim()??"";return""!==t?t:[n.nameEn,n.nameZhHans,n.nameZhHant,n.nameVi,n.nameTh].map(n=>n?.trim()??"").find(n=>""!==n)??""}function f(n){return n.icon?.trim()||n.iconSmall?.trim()||n.iconMedium?.trim()||n.iconLarge?.trim()||""}function a(e){return n({domain:e.domain,suffixAddress:e.suffixAddress,h5Url:e.h5Url})}function m(n){return""!==(n.appId?.trim()??"")}function c(n){return"float-game"===n.configType?"half":"page"}function u(n){const e=o(n.rel,n.locale);return{title:n.channelDescription?.trim()??"",tag:e,name:e}}function l(n){return[...n].sort((n,e)=>n.configType===e.configType?0:"float-game"===n.configType?1:"float-game"===e.configType?-1:0)}function p(n,o){if(void 0===n)return{pinnedGame:null,floatingItems:[]};const f=i[r(o.locale)],c=n.filter(n=>"unknown"!==n.configType&&t(n.langTypes,f)&&t(n.currencyTypes,o.currencyType??""));return{pinnedGame:c.find(n=>"pinned-game"===n.configType&&m(n))??null,floatingItems:l(c.filter(n=>("float-link"===n.configType||"float-game"===n.configType)&&function(n){return"float-game"===n.configType?m(n)&&""!==a(n):"float-link"===n.configType&&""!==e({domain:n.domain,suffixAddress:n.suffixAddress,h5Url:n.h5Url})}(n)))}}function s(n,e){return[n,e.configType,e.appId??"",e.suffixAddress??e.h5Url??""].join("|")}export{i as MINI_PROGRAM_LANG_NUMBERS,s as channelMiniProgramRelKey,t as csvIncludes,f as resolveChannelMiniProgramRelIcon,o as resolveChannelMiniProgramRelName,c as resolveChannelMiniProgramRelOpenSurface,a as resolveChannelMiniProgramRelUrl,u as resolveChannelPinnedGameCopy,p as resolveVisibleChannelMiniProgramRels,l as sortChannelMiniProgramFloatingItems};
@@ -0,0 +1 @@
1
+ import{createEmojiMatcher as e}from"../utils/emoji/index.js";import{formatConversationDisplayTime as s,resolveDisplayTimestamp as t}from"../utils/time-display.js";import{resolveTextSegments as a}from"../../../im-core/src/mapping/text-segments.js";import{formatMentionAll as n}from"../../../im-i18n/src/format/mention.js";import{formatLastMessageSummary as i}from"../../../im-i18n/src/format/last-message.js";const r=e();function l(e,i){const l=!0===i.suppressDraft?null:e.draft,v=l?.text.trim()??"";let g,y="",f="";null!==l?g=""===v?[]:function(e,s,t){const i=e.draft?.mentions??[],l=[],d={};let o=!1;for(const e of i)"0"!==e.userId?(l.includes(e.userId)||l.push(e.userId),""!==e.displayName.trim()&&(d[e.userId]=e.displayName)):o=!0;const m=o||l.length>0?{atAll:o,atUserIds:l,...0===Object.keys(d).length?{}:{atUsersName:d}}:void 0;return c(a(s,{mention:m,resolveName:e=>d[e]??e,atAllDisplay:n(t),matchers:[r]}))}(e,v,i.locale):!function(e){return"system"===e.lastMessageSummary?.kind||"system"===e.lastMessageSenderId||void 0!==e.lastMessageSystemEvent}(e)?"channel-moderation-deleted"===e.lastMessageSummary?.kind||void 0!==e.lastMessageDeletedForEveryone?g=d(u(e,"channel-moderation-deleted"===e.lastMessageSummary?.kind?e.lastMessageSummary:{kind:"channel-moderation-deleted",by:e.lastMessageDeletedForEveryone?.by??""},i)):"recalled"===e.lastMessageSummary?.kind||void 0!==e.lastMessageRecalled?g=d(u(e,"recalled"===e.lastMessageSummary?.kind?e.lastMessageSummary:{kind:"recalled",by:e.lastMessageRecalled?.by??""},i)):(y=function(e,s){const t=e.lastMessageSenderId;if("group"!==e.ref.conversationType&&"channel"!==e.ref.conversationType||void 0===t||""===t||"system"===t)return"";const a=t===s.accountId?s.labels.selfSender:s.resolveName(e.ref,t);return`${a}: `}(e,i),f=e.mentionUnreadCount>0?i.labels.mentionBadge:"",g=function(e,s){const t=e.lastMessageSummary;if(void 0!==t&&"text"!==t.kind){const n=u(e,t,s);return"mediaAlbum"!==t.kind&&"filesAlbum"!==t.kind||!t.caption?d(n):c(a(n,{resolveName:t=>s.resolveName(e.ref,t),matchers:[r]}))}const i=("text"===t?.kind?t.text:e.lastMessagePreview).trim();if(""===i)return d(s.labels.emptyPreview);const l=e.lastMessageMention?.atUsersName;return c(a(i,{mention:void 0===e.lastMessageMention?void 0:{...e.lastMessageMention,atUserIds:[...e.lastMessageMention.atUserIds]},resolveName:t=>s.resolveName(e.ref,t,l?.[t]),selfId:s.accountId,atAllDisplay:n(s.locale),matchers:[r]}))}(e,i)):g=d(function(e,s){return"system"===e.lastMessageSummary?.kind?u(e,e.lastMessageSummary,s):void 0===e.lastMessageSystemEvent?e.lastMessagePreview.trim()||s.labels.emptyPreview:u(e,{kind:"system",system:{eventType:e.lastMessageSystemEvent,...!0===e.lastMessageSystemTargetsSelf?{targetUserIds:[s.accountId]}:{},...""===e.lastMessagePreview.trim()?{}:{fallbackText:e.lastMessagePreview.trim()}}},s)}(e,i));return{preview:`${f}${y}${g.map(e=>e.text).join("")}`||(null===l?i.labels.emptyPreview:""),previewSegments:g,...o(e,null!==l),...m(e,null!==l,i.accountId),senderPrefix:y,mentionBadge:f,time:s(t(l?.updatedAt,e.timestamp),{locale:i.locale,...void 0===i.now?{}:{now:i.now}}),hasDraft:null!==l}}function d(e){return[{kind:"text",text:e}]}function o(e,s){const t=e.lastMessageSummary;if(s||void 0!==e.lastMessageDeletedForEveryone||void 0!==e.lastMessageRecalled||void 0!==e.lastMessageSystemEvent||void 0===t)return{};if("file"===t.kind||"filesAlbum"===t.kind)return{previewMediaKind:"file"};if("mediaAlbum"===t.kind){const{imageCount:e,videoCount:s,caption:a,firstItemKind:n}=t;return e<=0&&s<=0?{}:void 0!==a&&""!==a&&void 0!==n?{previewMediaKind:n}:e>0&&s>0?{previewMediaKind:"mediaAlbum"}:{previewMediaKind:s>0?"video":"image"}}return"image"===t.kind||"video"===t.kind||"gif"===t.kind||"sticker"===t.kind||"voice"===t.kind?{previewMediaKind:t.kind}:{}}function m(e,s,t){return s||"direct"!==e.ref.conversationType||e.lastMessageSenderId!==t||void 0!==e.lastMessageSendState||void 0!==e.lastMessageDeletedForEveryone||void 0!==e.lastMessageRecalled||void 0!==e.lastMessageSystemEvent||"system"===e.lastMessageSummary?.kind||"recalled"===e.lastMessageSummary?.kind||"channel-moderation-deleted"===e.lastMessageSummary?.kind||void 0===e.lastMessageReceipt?{}:{previewReceipt:e.lastMessageReceipt}}function c(e){return e.map(e=>"emoji"===e.kind?{kind:"emoji",text:e.text,code:e.code}:{kind:e.kind,text:e.text})}function u(e,s,t){return i(function(e){return"system"!==e.kind?e:{kind:"system",system:{eventType:e.system.eventType,...void 0===e.system.operatorId?{}:{operatorId:e.system.operatorId},...void 0===e.system.targetUserIds?{}:{targetUserIds:[...e.system.targetUserIds]},...void 0===e.system.fallbackText?{}:{fallbackText:e.system.fallbackText}}}}(s),{locale:t.locale,selfId:t.accountId,resolveName:s=>t.resolveName(e.ref,s)})}export{l as resolveConversationListPresentation};
@@ -0,0 +1 @@
1
+ function e(e){if(!Number.isFinite(e)||e<1)return"";const r=Math.floor(e);return r>1e4?"10k+":r>=1e3?`${Math.floor(r/1e3)}k`:String(r)}function r(e){return e.reduce((e,r)=>e+Number(!r.muted&&r.unreadCount>0),0)}export{r as countUnreadConversations,e as formatConversationUnreadBadge};
@@ -0,0 +1 @@
1
+ const i=160,o=220;function n(i){const o=Math.max(0,i.showDelayMs??160),n=Math.max(0,i.minimumVisibleMs??220),t=i.now??Date.now,e=i.setTimer??((i,o)=>setTimeout(i,o)),u=i.clearTimer??(i=>clearTimeout(i));let r,a,d="",s=!1,c=!1,m=0,v=!1;function f(){void 0!==r&&u(r),r=void 0}function l(){void 0!==a&&u(a),a=void 0}function h(o){c!==o&&(c=o,m=o?t():0,i.onVisibleChange(o))}function M(i){f(),r=e(()=>{r=void 0,!v&&s&&d===i&&h(!0)},o)}return{update(i,o){if(v)return;return d!==o?(d=o,s=i,f(),l(),h(!1),void(i&&M(o))):(s=i,i?(l(),void(c||void 0!==r||M(o))):void function(){if(f(),!c)return;const i=n-Math.max(0,t()-m);i<=0?h(!1):(l(),a=e(()=>{a=void 0,v||s||h(!1)},i))}())},dispose(){v||(v=!0,s=!1,f(),l(),h(!1))}}}export{o as DEFAULT_LOADING_MINIMUM_VISIBLE_MS,i as DEFAULT_LOADING_SHOW_DELAY_MS,n as createDelayedLoadingIndicator};
@@ -0,0 +1 @@
1
+ const o={placeholder:0,thumbnail:1,local:2,original:3};function t(t){let l;for(const n of t)void 0!==n.value&&(void 0===l||o[n.quality]>o[l.quality])&&(l=n);return l}function l(t,l){return o[l]>=o[t]}export{l as canPromoteMediaPresentationSource,t as resolveBestMediaPresentationSource};
@@ -0,0 +1 @@
1
+ function e(e){return"live"!==e.source?{show:!1,reason:"not-live"}:null===e.permission?{show:!1,reason:"unsupported"}:"granted"!==e.permission?{show:!1,reason:"permission-denied"}:"visible"===e.visibilityState?{show:!1,reason:"page-visible"}:""!==e.accountId&&e.senderId===e.accountId?{show:!1,reason:"self-message"}:"system"===e.contentType?{show:!1,reason:"system-message"}:e.muted?{show:!1,reason:"conversation-muted"}:e.globallyEnabled?{show:!0}:{show:!1,reason:"globally-disabled"}}export{e as resolveMessageNotificationDecision};
@@ -0,0 +1 @@
1
+ import{createEmojiMatcher as t}from"../utils/emoji/index.js";import{highlightSegments as e}from"../utils/highlight.js";import{resolveTextSegments as i}from"../../../im-core/src/mapping/text-segments.js";import{formatMentionAll as n}from"../../../im-i18n/src/format/mention.js";const m=t();function r(t,r){const a=""===t.preview?[{kind:"text",text:r.emptyText}]:t.previewParts.flatMap(t=>"plain"===t.kind?[{kind:"text",text:t.text}]:i(t.text,{mention:t.mention,resolveName:e=>r.resolveName(e,t.mention?.atUsersName?.[e]),atAllDisplay:n(r.locale),matchers:[m]})),o=a.map(t=>t.text).join(""),s=r.matcher?.match(o)?.ranges??[];let l=0;return a.flatMap(t=>{const i=l;l+=t.text.length;const n=s.filter(t=>t.start<l&&t.end>i).map(e=>[Math.max(0,e.start-i),Math.min(t.text.length,e.end-i)]);return"emoji"===t.kind||"legacy-emoji-placeholder"===t.kind?[{...t,hit:n.length>0}]:e(t.text,n).map(e=>({...t,...e}))})}export{r as resolveMessageSearchPreview};
@@ -0,0 +1 @@
1
+ const e=280,i=180;function t(e){return!!/^data:image\//i.test(e)||/\.(?:png|jpe?g|gif|webp|bmp|avif|heic|heif|svg)(?:[?#]|$)/i.test(e)}function r(e,i){return"number"==typeof e&&Number.isFinite(e)&&e>0?e:i}function n(e){const i=e.gamePreviewUrl?.trim()??"";return""===i?{url:"",sourceWidth:280,sourceHeight:180,render:"empty"}:{url:i,sourceWidth:r(e.gamePreviewWidth,280),sourceHeight:r(e.gamePreviewHeight,180),render:!0!==e.imageLoadFailed&&t(i)?"image":"document"}}export{i as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_HEIGHT,e as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_WIDTH,n as resolveMiniProgramGamePreviewLayout};
@@ -0,0 +1 @@
1
+ function t(t){return"default"===t||"board-game-link"===t||"game-preview"===t}function r(t){return!(""===t||t.startsWith("/")||t.startsWith("?")||t.startsWith("&"))&&t.includes(".")}function i(t){return function(t,r){const i=(r??"").trim().replace(/^[?&]+/,"").trim();return""===t||""===i?t:t+(t.includes("?")?"&":"?")+i}(function(t){const i=t.domain?.trim()??"",s=t.suffixAddress?.trim()??"",e=t.h5Url?.trim()??"";if(""!==i){if(""===s)return i;if(s.startsWith("/"))return i.replace(/\/$/,"")+s;const t=s.replace(/^&/,""),r=i.includes("?")?"&":s.includes("?")?"":"?";return i+r+t}return/^https?:\/\//i.test(s)?s:r(s)?`https://${s}`:e}(t),t.gamePath)}function s(t){const s=t.domain?.trim()??"",e=t.suffixAddress?.trim()??"",n=t.h5Url?.trim()??"";return/^https?:\/\//i.test(e)?e:r(e)?`https://${e}`:""!==s?""===(u=i({domain:s,suffixAddress:e,h5Url:n}))?"":/^https?:\/\//i.test(u)?u:`https://${u}`:/^https?:\/\//i.test(n)?n:r(n)?`https://${n}`:"";var u}export{t as isMiniProgramShowTypeOpenable,s as resolveMiniProgramFloatLinkUrl,i as resolveMiniProgramOpenUrl};
@@ -0,0 +1 @@
1
+ import{createMediaObjectUrlRegistry as e}from"./media-object-url-registry.js";import{validateCachePrefix as o,createImCacheNamespaceFactory as r}from"../../../im-core/src/cache-namespace.js";import{createAdvancedImClient as t,createProductClientFacade as n}from"../../../im-sdk/src/create-im-client.js";import{createIndexedDbStorageAdapter as i,deleteIndexedDbNamespace as s}from"../../../im-browser/src/storage/indexed-db-storage-adapter.js";import{createDefaultMediaAssetCacheStrategyRegistry as a}from"../../../im-sdk/src/product/media.js";import{createSdkDiagnosticWriter as c}from"../../../im-sdk/src/product/diagnostics.js";function d(){if("undefined"==typeof navigator)return{maxCachedEntries:6,maxCachedBytes:536870912};const e=navigator,o=e.deviceMemory??4,r=/Android|iPhone|iPad|Mobile/i.test(e.userAgent);return!0===e.connection?.saveData||o<=2||navigator.hardwareConcurrency<=2?{maxCachedEntries:2,maxCachedBytes:134217728}:r?{maxCachedEntries:4,maxCachedBytes:268435456}:o>=8&&navigator.hardwareConcurrency>=8?{maxCachedEntries:9,maxCachedBytes:1073741824}:{maxCachedEntries:6,maxCachedBytes:536870912}}function l(e){const o=`message\0${e.conversationType}\0${e.conversationId}\0${e.messageId}`;return void 0===e.itemIndex?o:`${o}\0${e.itemIndex}`}function u(e){return`source\0${e}`}function m(e){if("object"==typeof e&&null!==e&&"code"in e)return"IM_CONNECTION_OWNED_ELSEWHERE"===e.code?"lifecycle.connectionOccupied":"IM_CONNECTION_OWNERSHIP_UNAVAILABLE"===e.code?"lifecycle.connectionCoordinationUnavailable":void 0}function p(p){const f=o(p.cachePrefix),g=r(f),h=p.createClient??t,v=p.createStorage??(e=>"undefined"==typeof indexedDB?void 0:i({...e,mediaAssetCache:{strategies:a()}})),y=p.createProfile,C=p.deleteStorage??(e=>s(e.accountId,{namespaceFactory:e.namespaceFactory}));let k,w,I,b,M,E,P=null,x=null,T=!1,B=0,S=!1,R=!1;const A={wsUrl:"",userId:"",token:"",deviceToken:"",channelType:"0",cmHttpBaseUrl:""},U=c(p.debug,()=>({generation:B,...""===A.userId?{}:{accountId:A.userId}}));function D(){return{generation:B,...""===A.userId?{}:{accountId:A.userId}}}U.record("debug","chat-kit","session","runtime-created");let L={},N={},j={};const O=/* @__PURE__ */new Map;let $=/* @__PURE__ */new WeakMap;const F=e({...d(),maxIdleMs:6048e5}),H=/* @__PURE__ */new Set,K=/* @__PURE__ */new Set,_=/* @__PURE__ */new Set;function V(){for(const e of _)e()}function W(e=!1){const o=D(),r=P,t=void 0!==w||void 0!==I;w?.(),w=void 0,I?.(),I=void 0,t&&U.record("debug","chat-kit","session","client-subscriptions-released",()=>o),e||r?.connection.disconnect("im-chat-auth-changed"),P=null,x=null;const n=k;let i;k=void 0;try{i=null!==r&&b?.uploadRecovery?.enabled&&!e?r.logout({localData:"preserve"}).finally(()=>r.dispose()):Promise.resolve(null!==r?r.dispose():n?.close())}catch(e){i=Promise.reject(e)}const s=i.catch(e=>{R=!0,E=e,U.record("error","chat-kit","session","previous-client-dispose-failed",()=>({...o,error:{message:"旧 IM Client 清理失败,已阻止新账号准备",data:e}}))});M=void 0===M?s:Promise.all([M,s]).then(()=>{}),B+=1,L={},N={},j={},G(),O.clear(),V()}function q(){if(S)throw new Error("ChatRuntime 已 dispose,不能创建/复用 client");if(null===P){const e=v({namespaceFactory:g});k=e;const o=b?.getCoreClient(),r=b?.getCoreApi?.();T=void 0!==o||void 0!==r;const t=b?.clientType??2,n=B,i=b?.onRequestError,s=o&&y?y({client:o,clientType:t,storage:k}):void 0,a={authProvider:{getLoginContext:async()=>{const e=b?.getSession?.(),o=void 0!==b?.getSession,r=(o?e?.userId:A.userId)?.trim()??"",n=(o?e?.token:A.token)?.trim()??"";return""===r||""===n||r!==A.userId?null:{userId:r,token:n,deviceToken:A.deviceToken,clientType:t,channelType:Number(A.channelType)}}},endpointProvider:{getEndpoints:async()=>[{url:A.wsUrl}],getCmHttpBaseUrl:async()=>A.cmHttpBaseUrl},cache:{prefix:f},adapters:{namespaceFactory:g,storage:{create:o=>{if(o.namespaceFactory!==g)throw new Error("ChatRuntime storage namespace factory 不一致");return e},purgeCurrentAccount:e=>C(e)}},profile:s,media:b?.getMediaConfig(),uploadRecovery:b?.uploadRecovery,expressions:b?.getExpressionOptions?.(),coreApi:r,coreClient:o,onRequestError:void 0===i?void 0:e=>S||B!==n?void 0:i(e),debug:p.debug},c=h(a),d=c.events;if(void 0===d&&K.size>0)throw Promise.resolve(k?.close?.()).catch(()=>{}),k=void 0,new Error("IM client 缺少产品事件 API");P=c,w=P.connection.subscribe(e=>{if(("message:updated"===e.type||"message:received"===e.type)&&"failed"===e.message.status&&"media.uploadInterrupted"===e.message.failure?.displayCode&&!1===e.message.failure.retryable){const o=e.message,r=l({conversationType:o.conversationType,conversationId:o.conversationId,messageId:o.id});F.remove(r),F.removeByPrefix(`${r}\0`)}for(const o of H)o(e)}),void 0!==d&&(I=d.subscribe(e=>{for(const o of K)o(e)})),U.record("debug","chat-kit","session","client-subscriptions-established",()=>D())}return P}function z(){const e=q();return x??(x=n(e,{coreApiAvailable:T})),x}function G(){$=/* @__PURE__ */new WeakMap,F.clearAll()}return{getClient:()=>P,getProductClient:()=>null===P?null:z(),ensureProductClient:z,getConnectionState:()=>P?.connection.state??"idle",getGeneration:()=>B,getCredentials:()=>A,getMediaConfig:()=>b?.getMediaConfig(),getDiagnostics:()=>U,configureHost(e){b=e},applySession(e,o,r){const t=e?.userId??"",n=e?.token??"",i=null!==P&&(A.userId!==t||A.token!==n);return i&&W(A.userId===t&&""!==n),A.wsUrl=o.wsUrl,A.cmHttpBaseUrl=o.cmHttpBaseUrl,A.userId=t,A.token=n,A.deviceToken=r,A.channelType="0",U.record("info","chat-kit","session","session-applied",()=>({data:{accountId:t,hasToken:""!==n,didReset:i}})),{didReset:i,hasToken:""!==n}},ensureClient:q,async prepare(){if(S)return{ok:!1,errorKey:"lifecycle.disposed"};if(""===A.userId)return{ok:!1,errorKey:"lifecycle.missingLoginState"};const e=Date.now(),o=D();U.record("info","chat-kit","session","prepare-start",()=>o);try{const r=A.userId,t=A.token;if(void 0!==M&&await M,S||B!==o.generation||A.userId!==r||A.token!==t)throw new Error("IM session 已变化,取消旧 prepare");if(R)throw new Error("旧 IM Client 未能完成清理,请刷新后重试",{cause:E});const n=q();return await n.connection.prepare(),U.record("info","chat-kit","session","prepare-complete",()=>({...o,durationMs:Date.now()-e})),{ok:!0}}catch(r){U.record("error","chat-kit","session","prepare-failed",()=>({...o,durationMs:Date.now()-e,error:{message:"ChatRuntime prepare 失败",data:r}}));const t=m(r);return void 0!==t?{ok:!1,errorKey:t}:{ok:!1,errorKey:"lifecycle.prepareFailed",errorParams:{reason:r instanceof Error?r.message:String(r)}}}},async connect(){if(S)return{ok:!1,errorKey:"lifecycle.disposed"};if(""===A.wsUrl||""===A.userId||""===A.token)return{ok:!1,errorKey:"lifecycle.missingConnectParams"};const e=Date.now(),o=D();U.record("info","chat-kit","connection","connect-start",()=>o);try{const r=A.userId,t=A.token;if(void 0!==M&&await M,S||B!==o.generation||A.userId!==r||A.token!==t)throw new Error("IM session 已变化,取消旧 connect");if(R)throw new Error("旧 IM Client 未能完成清理,请刷新后重试",{cause:E});const n=q();return await n.connection.connect(),U.record("info","chat-kit","connection","connect-complete",()=>({...o,durationMs:Date.now()-e})),{ok:!0}}catch(r){U.record("error","chat-kit","connection","connect-failed",()=>({...o,durationMs:Date.now()-e,error:{message:"ChatRuntime connect 失败",data:r}}));const t=m(r);return void 0!==t?{ok:!1,errorKey:t}:{ok:!1,errorKey:"lifecycle.connectFailed",errorParams:{reason:r instanceof Error?r.message:String(r)}}}},disconnect(){const e=D();U.record("info","chat-kit","connection","disconnect",()=>e),P?.connection.disconnect("im-chat-manual")},async logout(e){const o=Date.now(),r=D();U.record("info","chat-kit","session","logout-start",()=>({...r,data:e}));const t=P;let n,i;if(null!==t)try{i=t.logout(e)}catch(e){n=e}if(A.userId="",A.token="",A.deviceToken="",A.channelType="0",B+=1,void 0!==i)try{await i}catch(e){n=e}if(L={},N={},j={},G(),O.clear(),V(),U.record(void 0===n?"info":"error","chat-kit","session",void 0===n?"logout-complete":"logout-failed",()=>({...r,durationMs:Date.now()-o,...void 0===n?{}:{error:{message:"ChatRuntime logout 失败",data:n}}})),void 0!==n)throw n},resetForAuthChange:W,dispose(){if(S)return;S=!0;const e=D();U.record("info","chat-kit","session","dispose",()=>e),W(!0),H.clear(),K.clear(),_.clear()},subscribeEvents:e=>(H.add(e),()=>{H.delete(e)}),subscribeProductEvents:e=>(K.add(e),()=>{K.delete(e)}),getSenderProfileCache:()=>L,setSenderProfileCache(e){L=e,V()},getGroupMemberNames:()=>N,setGroupMemberNames(e){N=e,V()},getChannelMemberProfiles:()=>j,setChannelMemberProfiles(e){j=e,V()},subscribeProfileChange:e=>(_.add(e),()=>{_.delete(e)}),putSelfVoiceBytes(e,o){for(O.delete(e),O.set(e,o);O.size>20;){const e=O.keys().next().value;if(void 0===e)break;O.delete(e)}},getSelfVoiceBytes:e=>O.get(e),clearSelfVoiceBytes(){O.clear()},rememberLocalVideoPoster(e,o){$.set(e,o)},createLocalMediaPreview(e){const o=URL.createObjectURL(e);return F.register(u(o),o,{byteSize:e.size,evictable:!1,videoPoster:$.get(e)}),o},discardLocalMediaPreview(e){F.remove(u(e))},trackLocalMediaPreview(e,o){F.move(u(o),l(e))},resolveMediaPreviewToRemote(e,o,r){const t=l(e);"image"===o||"video"===o?F.makeEvictable(t,r):F.remove(t)},hasMediaBlob:e=>F.has(l(e)),acquireMediaBlob:e=>F.acquire(l(e)),async clearMediaCache(){const e=P,o=B;if(null===e)throw new Error("IM session is not ready");if(F.clearCached(),await e.media.clearCache(),B!==o||P!==e)throw new Error("IM session changed during media cache cleanup")},cleanupLocalMediaBlobs:G,cleanupConversationMediaBlobs:function(e){F.removeByPrefix(function(e){return`message\0${e.conversationType}\0${e.conversationId}\0`}(e))}}}export{p as createChatRuntime};