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
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import'./chunk-IDECJJXC.js';import'./chunk-SXY56EVC.js';export{q as DEFAULT_LOADING_MINIMUM_VISIBLE_MS,p as DEFAULT_LOADING_SHOW_DELAY_MS,x as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_HEIGHT,w as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_WIDTH,e as MINI_PROGRAM_LANG_NUMBERS,S as SPIKE_STEP,N as calculateMediaBox,E as canCopyMessageImage,t as canPromoteMediaPresentationSource,B as captureRuntimeClientOperation,A as captureRuntimeOperation,n as channelMiniProgramRelKey,z as createConversationPrefetchController,r as createDelayedLoadingIndicator,L as createLinkMatcher,F as createMessageImageCopySource,f as csvIncludes,d as decideChannelMiniProgramRelOpen,P as formatFileSize,O as formatMediaDuration,Q as getFileExtension,D as getMessageCopyImageUrl,C as getMessageCopyText,K as hasLinkCandidate,u as highlightSegments,a as isMiniProgramShowTypeOpenable,G as mediaService,J as normalizeLinkHref,V as placeholderWaveform,H as readService,U as resampleWaveform,s as resolveBestMediaPresentationSource,h as resolveChannelMiniProgramRelIcon,g as resolveChannelMiniProgramRelName,j as resolveChannelMiniProgramRelOpenSurface,i as resolveChannelMiniProgramRelUrl,k as resolveChannelPinnedGameCopy,o as resolveConversationListPresentation,M as resolveMediaPresentation,R as resolveMediaTransferPresentation,v as resolveMessageSearchPreview,c as resolveMiniProgramFloatLinkUrl,y as resolveMiniProgramGamePreviewLayout,b as resolveMiniProgramOpenUrl,I as resolveQuotedMessagePresentation,m as resolveVisibleChannelMiniProgramRels,l as sortChannelMiniProgramFloatingItems,T as spikeCountForDuration}from'./chunk-J3TLOAQI.js';export{j as DEFAULT_EMOJI_ASSET_BASE,i as EMOJI_CATALOG,c as EMOJI_GAME_DICE_STABLE_KEY,b as EMOJI_GAME_RPS_STABLE_KEY,m as EMOJI_TOKEN_RE,P as MAX_BATCH_FILES,a as MAX_RECENT_EMOJI_COUNT,g as UNICODE_EMOJI_CATALOG,O as blockReasonForChannelSession,N as blockReasonForChannelState,V as blockReasonForGroupState,Y as blockReasonForSession,I as canEditMessage,w as canPinChannelMessage,v as canPinGroupMessage,x as canPinMessage,H as canRecallMessage,fa as cancelMediaUpload,T as classifyGifFile,S as classifyMediaFile,s as countUnreadConversations,u as createChatRuntime,p as createEmojiMatcher,K as decideConversationAction,M as decideMemberTargetAction,L as decideMessageAction,l as emojiAssetUrl,n as emojiUrlByCode,Fa as fetchConversationFileBatch,Ga as fetchConversationImageBatch,Da as fetchConversationMessageBatch,Ha as fetchConversationVideoBatch,Ia as fetchConversationVoiceBatch,Ja as fetchNextConversationSearchBatch,r as formatConversationUnreadBadge,ia as forwardService,o as hasEmojiCandidate,U as isGifFile,y as isPinnedMessageProtected,aa as isVoiceStorageConfigured,Q as mediaBatchBudgetBytes,na as messageService,e as parseUnicodeEmojiCode,sa as pinnedMessageService,d as prependRecentEmoji,Ca as profileService,$ as replaceInterruptedMediaFile,W as requiresConversationEncryption,D as resolveChannelMemberAvatarUrl,C as resolveChannelMemberDisplayName,k as resolveEmojiToken,G as resolveFriendDisplayName,ta as resolveImProfileAccessDestination,A as resolveMemberDisplayName,t as resolveMessageNotificationDecision,F as resolvePublicNickname,E as resolveSenderAvatarUrl,q as resolveStandaloneEmojiMessage,h as resolveUnicodeEmoji,ga as retryMessage,R as runMediaSendBatch,ea as sendAsFilesBatch,J as sendBlockReasonForDecision,ca as sendMediaAlbum,_ as sendMediaFile,da as sendMediaFilesBatch,Z as sendText,ba as sendVoice,X as supportsConversationMention,f as unicodeEmojiTextFromCode}from'./chunk-WL3NFQ7Y.js';export{C as createNewMessageBadgeController,i as createThreadItems,f as formatChatDateSeparator,e as formatConversationDisplayTime,c as getLocalDayKey,l as isMessageLocateScrollProtected,v as isMessageTailChangeFromOlderWindowTrim,k as isMessageViewportMeasurable,B as isMessageVisibleForNewMessageBadge,x as loadOlderUntilBoundary,p as refreshPrependMessageAnchorPosition,j as resolveCenteredMessageScrollTop,a as resolveDisplayTimestamp,g as resolveImThreadActiveDate,h as resolveMessageBodyKind,b as resolveMessageTimelineTimestamp,n as resolvePrependMessageAnchor,q as resolvePrependMessageAnchorAdjustment,o as resolvePrependMessageAnchorPosition,s as resolveSurvivingMessageAnchorAdjustment,r as resolveVisibleMessageAnchorPositions,t as shouldCompleteInitialViewport,y as shouldFillInitialHistoryViewport,u as shouldFollowIncomingMessage,z as shouldLoadNewerHistoryPage,m as shouldPrefetchOlderHistory,w as shouldRestoreMessageViewportFocus,d as shouldShowChatDateSeparator,A as shouldTrackRemoteMessageForBadge}from'./chunk-WS7BWP7C.js';export{a as DEFAULT_LOCALE,k as createImI18n,f as formatFailure,h as formatLastMessageSummary,i as formatMediaPlaceholder,j as formatMentionAll,l as formatServiceText,g as formatSystemMessage,c as getImTimeCatalog,b as normalizeImLocale,d as registerImCatalogOverrides,e as resetImCatalogOverrides}from'./chunk-IC6HI33O.js';export{e as IMAGE_MESSAGE_ACCEPT,n as IM_CHAT_FONT_SCALES,g as IM_DIAGNOSTIC_CATEGORIES,j as IM_EMOJI_CATALOG,c as ImPinnedMessageOperationError,m as buildSessionFavoritePlainBody,d as createFaceToFaceGroupQrPayload,o as createImClient,h as createImConsoleDiagnosticSink,r as createImDiagnosticMemoryBuffer,s as createImResourceUploader,i as createSdkDiagnosticWriter,f as isSupportedImageFile,a as migrateImCachePrefix,k as resolveImEmojiToken,l as resolveSessionFavoriteKindFromMessage}from'./chunk-2OCWQHFJ.js';export{bb as MediaTransferError,pb as createVoicePlayer,qb as createVoiceRecordingSession,nb as detectVoiceCapabilities,cb as mediaTransferErrorCodeOf,eb as normalizeMediaUploadCredentials,ob as voiceErrorCodeOf}from'./chunk-46ARFR7U.js';export{Oa as EDIT_WINDOW_MS,q as MEDIA_ALBUM_CAPTION_MAX_LENGTH,r as MEDIA_ALBUM_MAX_ITEMS,Ta as REACTION_SUPPORTED_CONTENT_TYPES,Ua as canReactToMessage,Sa as canTransmit,Qa as canTransmitByType,Ra as canTransmitContent,y as classifyStickerImageType,Da as createImTextSearchMatcher,Ba as extractSearchText,Ca as getImTextSearchInitial,Nb as parseSessionFavoriteAlbumItems,Qb as parseSessionFavoriteFileItems,Pa as requiresForwardTypeConfirmation,Wa as resolveChannelAccess,s as resolveMediaAlbumSendContentType,Ob as resolveSessionFavoriteAlbumCaption,Mb as resolveSessionFavoriteAlbumItemPreviewUrl,Ia as resolveTextSegments,$a as sortSessions,ab as sumSessionsUnread}from'./chunk-HQDLYL3K.js';import'./chunk-WOT6VMZA.js';
1
+ import{DEFAULT_EMOJI_ASSET_BASE as s,EMOJI_CATALOG as r,EMOJI_TOKEN_RE as m,createEmojiMatcher as i,emojiAssetUrl as o,emojiUrlByCode as e,hasEmojiCandidate as t,resolveEmojiToken as c,resolveStandaloneEmojiMessage as a}from"./modules/im-chat-kit/src/utils/emoji/index.js";import{DEFAULT_LOADING_MINIMUM_VISIBLE_MS as d,DEFAULT_LOADING_SHOW_DELAY_MS as p,createDelayedLoadingIndicator as l}from"./modules/im-chat-kit/src/presentation/delayed-loading-indicator.js";import{DEFAULT_LOCALE as u,normalizeImLocale as f}from"./modules/im-i18n/src/locale.js";import{EDIT_WINDOW_MS as n}from"./modules/im-core/src/message-flow/edit/edit-manager.js";import{EMOJI_GAME_DICE_STABLE_KEY as j,EMOJI_GAME_RPS_STABLE_KEY as h,MAX_RECENT_EMOJI_COUNT as k,prependRecentEmoji as v}from"./modules/im-chat-kit/src/utils/emoji/recent.js";import{IMAGE_MESSAGE_ACCEPT as g,isSupportedImageFile as b}from"./modules/im-sdk/src/product/image-format.js";import{IM_CHAT_FONT_SCALES as w}from"./modules/im-sdk/src/product/settings.js";import{IM_DIAGNOSTIC_CATEGORIES as y,createImConsoleDiagnosticSink as x,createSdkDiagnosticWriter as S}from"./modules/im-sdk/src/product/diagnostics.js";import{IM_EMOJI_CATALOG as q,resolveImEmojiToken as M}from"./modules/im-sdk/src/product/emoji-catalog.js";import{ImPinnedMessageOperationError as z}from"./modules/im-sdk/src/domains/pinned-message.js";import{MAX_BATCH_FILES as A,mediaBatchBudgetBytes as B,runMediaSendBatch as C}from"./modules/im-chat-kit/src/utils/media-batch.js";import{MEDIA_ALBUM_CAPTION_MAX_LENGTH as D,MEDIA_ALBUM_MAX_ITEMS as E,resolveMediaAlbumSendContentType as F}from"./modules/im-core/src/mapping/media-album-body.js";import{MINI_PROGRAM_GAME_PREVIEW_FALLBACK_HEIGHT as G,MINI_PROGRAM_GAME_PREVIEW_FALLBACK_WIDTH as H,resolveMiniProgramGamePreviewLayout as I}from"./modules/im-chat-kit/src/presentation/mini-program-game-preview.js";import{MINI_PROGRAM_LANG_NUMBERS as J,channelMiniProgramRelKey as K,csvIncludes as L,resolveChannelMiniProgramRelIcon as N,resolveChannelMiniProgramRelName as O,resolveChannelMiniProgramRelOpenSurface as P,resolveChannelMiniProgramRelUrl as Q,resolveChannelPinnedGameCopy as R,resolveVisibleChannelMiniProgramRels as T,sortChannelMiniProgramFloatingItems as U}from"./modules/im-chat-kit/src/presentation/channel-mini-program-rels.js";import{MediaTransferError as V,mediaTransferErrorCodeOf as W}from"./modules/im-browser/src/media/media-transfer-errors.js";import{REACTION_SUPPORTED_CONTENT_TYPES as X,canReactToMessage as Y}from"./modules/im-core/src/message-flow/reaction/can-react.js";import{SPIKE_STEP as Z,placeholderWaveform as $,resampleWaveform as _,spikeCountForDuration as ss}from"./modules/im-chat-kit/src/utils/waveform.js";import{UNICODE_EMOJI_CATALOG as rs,parseUnicodeEmojiCode as ms,resolveUnicodeEmoji as is,unicodeEmojiTextFromCode as os}from"./modules/im-chat-kit/src/utils/emoji/unicode.js";import{blockReasonForChannelSession as es,blockReasonForChannelState as ts}from"./modules/im-chat-kit/src/services/channel-send-restriction.js";import{blockReasonForGroupState as cs,blockReasonForSession as as,cancelMediaUpload as ds,isVoiceStorageConfigured as ps,replaceInterruptedMediaFile as ls,requiresConversationEncryption as us,retryMessage as fs,sendAsFilesBatch as ns,sendMediaAlbum as js,sendMediaFile as hs,sendMediaFilesBatch as ks,sendText as vs,sendVoice as gs,supportsConversationMention as bs}from"./modules/im-chat-kit/src/services/send.service.js";import{buildSessionFavoritePlainBody as ws,resolveSessionFavoriteKindFromMessage as ys}from"./modules/im-sdk/src/product/session-favorites.js";import{calculateMediaBox as xs,resolveMediaPresentation as Ss}from"./modules/im-chat-kit/src/utils/media-dimensions.js";import{canCopyMessageImage as qs,createMessageImageCopySource as Ms,getMessageCopyImageUrl as zs,getMessageCopyText as As}from"./modules/im-chat-kit/src/services/image-copy.service.js";import{canEditMessage as Bs,canRecallMessage as Cs,resolveChannelMemberAvatarUrl as Ds,resolveChannelMemberDisplayName as Es,resolveFriendDisplayName as Fs,resolveMemberDisplayName as Gs,resolvePublicNickname as Hs,resolveSenderAvatarUrl as Is}from"./modules/im-chat-kit/src/services/profile-display.js";import{canPinChannelMessage as Js,canPinGroupMessage as Ks,canPinMessage as Ls,isPinnedMessageProtected as Ns}from"./modules/im-chat-kit/src/services/pinned-message-rules.js";import{canPromoteMediaPresentationSource as Os,resolveBestMediaPresentationSource as Ps}from"./modules/im-chat-kit/src/presentation/media-source-priority.js";import{canTransmit as Qs,canTransmitByType as Rs,canTransmitContent as Ts,requiresForwardTypeConfirmation as Us}from"./modules/im-core/src/message-flow/forward/can-transmit.js";import{captureRuntimeClientOperation as Vs,captureRuntimeOperation as Ws}from"./modules/im-chat-kit/src/runtime/runtime-operation.js";import{classifyGifFile as Xs,classifyMediaFile as Ys,isGifFile as Zs}from"./modules/im-chat-kit/src/services/media-file-classification.js";import{classifyStickerImageType as $s}from"./modules/im-core/src/mapping/sticker-body.js";import{countUnreadConversations as _s,formatConversationUnreadBadge as sr}from"./modules/im-chat-kit/src/presentation/conversation-unread.js";import{createChatRuntime as rr}from"./modules/im-chat-kit/src/runtime/chat-runtime.js";import{createConversationPrefetchController as mr}from"./modules/im-chat-kit/src/runtime/conversation-prefetch-controller.js";import{createFaceToFaceGroupQrPayload as ir}from"./modules/im-sdk/src/product/face-to-face-group.js";import{createImClient as or}from"./modules/im-sdk/src/create-im-client.js";import{createImDiagnosticMemoryBuffer as er}from"./modules/im-sdk/src/product/diagnostic-memory-buffer.js";import{createImI18n as tr}from"./modules/im-i18n/src/create-im-i18n.js";import{createImResourceUploader as cr}from"./modules/im-sdk/src/product/resource-uploader.js";import{createImTextSearchMatcher as ar,extractSearchText as dr,getImTextSearchInitial as pr}from"./modules/im-core/src/mapping/search-text.js";import{createLinkMatcher as lr,hasLinkCandidate as ur,normalizeLinkHref as fr}from"./modules/im-chat-kit/src/utils/link.js";import{createNewMessageBadgeController as nr}from"./modules/im-chat-kit/src/thread/new-message-badge.js";import{createThreadItems as jr}from"./modules/im-chat-kit/src/thread/create-thread-items.js";import{createVoicePlayer as hr}from"./modules/im-browser/src/voice/voice-player.js";import{createVoiceRecordingSession as kr}from"./modules/im-browser/src/voice/voice-recorder.js";import{decideChannelMiniProgramRelOpen as vr}from"./modules/im-chat-kit/src/presentation/channel-mini-program-open.js";import{decideConversationAction as gr,decideMemberTargetAction as br,decideMessageAction as wr,sendBlockReasonForDecision as yr}from"./modules/im-chat-kit/src/services/capabilities.js";import{detectVoiceCapabilities as xr}from"./modules/im-browser/src/voice/voice-capabilities.js";import{fetchConversationFileBatch as Sr,fetchConversationImageBatch as qr,fetchConversationMessageBatch as Mr,fetchConversationVideoBatch as zr,fetchConversationVoiceBatch as Ar,fetchNextConversationSearchBatch as Br}from"./modules/im-chat-kit/src/services/search.service.js";import{formatChatDateSeparator as Cr,formatConversationDisplayTime as Dr,getLocalDayKey as Er,resolveDisplayTimestamp as Fr,resolveMessageTimelineTimestamp as Gr,shouldShowChatDateSeparator as Hr}from"./modules/im-chat-kit/src/utils/time-display.js";import{formatFailure as Ir}from"./modules/im-i18n/src/format/failure.js";import{formatFileSize as Jr,formatMediaDuration as Kr,getFileExtension as Lr}from"./modules/im-chat-kit/src/utils/media-format.js";import{formatLastMessageSummary as Nr}from"./modules/im-i18n/src/format/last-message.js";import{formatMediaPlaceholder as Or}from"./modules/im-i18n/src/format/media.js";import{formatMentionAll as Pr}from"./modules/im-i18n/src/format/mention.js";import{formatServiceText as Qr}from"./modules/im-i18n/src/format/service-text.js";import{formatSystemMessage as Rr}from"./modules/im-i18n/src/format/system-message.js";import*as Tr from"./modules/im-chat-kit/src/services/forward.service.js";import{getImTimeCatalog as Ur,registerImCatalogOverrides as Vr,resetImCatalogOverrides as Wr}from"./modules/im-i18n/src/catalog/index.js";import{highlightSegments as Xr}from"./modules/im-chat-kit/src/utils/highlight.js";import{isMessageLocateScrollProtected as Yr,isMessageTailChangeFromOlderWindowTrim as Zr,isMessageViewportMeasurable as $r,isMessageVisibleForNewMessageBadge as _r,loadOlderUntilBoundary as sm,refreshPrependMessageAnchorPosition as rm,resolveCenteredMessageScrollTop as mm,resolvePrependMessageAnchor as im,resolvePrependMessageAnchorAdjustment as om,resolvePrependMessageAnchorPosition as em,resolveSurvivingMessageAnchorAdjustment as tm,resolveVisibleMessageAnchorPositions as cm,shouldCompleteInitialViewport as am,shouldFillInitialHistoryViewport as dm,shouldFollowIncomingMessage as pm,shouldLoadNewerHistoryPage as lm,shouldPrefetchOlderHistory as um,shouldRestoreMessageViewportFocus as fm,shouldTrackRemoteMessageForBadge as nm}from"./modules/im-chat-kit/src/thread/viewport-rules.js";import{isMiniProgramShowTypeOpenable as jm,resolveMiniProgramFloatLinkUrl as hm,resolveMiniProgramOpenUrl as km}from"./modules/im-chat-kit/src/presentation/mini-program-open-url.js";import*as vm from"./modules/im-chat-kit/src/services/media.service.js";import*as gm from"./modules/im-chat-kit/src/services/message.service.js";import{migrateImCachePrefix as bm}from"./modules/im-sdk/src/cache-prefix-migration.js";import{normalizeMediaUploadCredentials as wm}from"./modules/im-browser/src/media/media-upload-credentials.js";import{parseSessionFavoriteAlbumItems as ym,resolveSessionFavoriteAlbumCaption as xm,resolveSessionFavoriteAlbumItemPreviewUrl as Sm}from"./modules/im-core/src/session-favorite-album.js";import{parseSessionFavoriteFileItems as qm}from"./modules/im-core/src/session-favorite-files.js";import*as Mm from"./modules/im-chat-kit/src/services/pinned-message.service.js";import*as zm from"./modules/im-chat-kit/src/services/profile.service.js";import*as Am from"./modules/im-chat-kit/src/services/read.service.js";import{resolveChannelAccess as Bm}from"./modules/im-core/src/state/channel-permissions.js";import{resolveConversationListPresentation as Cm}from"./modules/im-chat-kit/src/presentation/conversation-list.js";import{resolveImProfileAccessDestination as Dm}from"./modules/im-chat-kit/src/services/profile-access.service.js";import{resolveImThreadActiveDate as Em}from"./modules/im-chat-kit/src/thread/active-date.js";import{resolveMediaTransferPresentation as Fm}from"./modules/im-chat-kit/src/utils/media-transfer-presentation.js";import{resolveMessageBodyKind as Gm}from"./modules/im-chat-kit/src/thread/resolve-message-body-kind.js";import{resolveMessageNotificationDecision as Hm}from"./modules/im-chat-kit/src/presentation/message-notification.js";import{resolveMessageSearchPreview as Im}from"./modules/im-chat-kit/src/presentation/message-search.js";import{resolveQuotedMessagePresentation as Jm}from"./modules/im-chat-kit/src/thread/resolve-quoted-message-presentation.js";import{resolveTextSegments as Km}from"./modules/im-core/src/mapping/text-segments.js";import{sortSessions as Lm}from"./modules/im-core/src/state/session-sort.js";import{sumSessionsUnread as Nm}from"./modules/im-core/src/state/domain-state.js";import{voiceErrorCodeOf as Om}from"./modules/im-browser/src/voice/voice-errors.js";export{s as DEFAULT_EMOJI_ASSET_BASE,d as DEFAULT_LOADING_MINIMUM_VISIBLE_MS,p as DEFAULT_LOADING_SHOW_DELAY_MS,u as DEFAULT_LOCALE,n as EDIT_WINDOW_MS,r as EMOJI_CATALOG,j as EMOJI_GAME_DICE_STABLE_KEY,h as EMOJI_GAME_RPS_STABLE_KEY,m as EMOJI_TOKEN_RE,g as IMAGE_MESSAGE_ACCEPT,w as IM_CHAT_FONT_SCALES,y as IM_DIAGNOSTIC_CATEGORIES,q as IM_EMOJI_CATALOG,z as ImPinnedMessageOperationError,A as MAX_BATCH_FILES,k as MAX_RECENT_EMOJI_COUNT,D as MEDIA_ALBUM_CAPTION_MAX_LENGTH,E as MEDIA_ALBUM_MAX_ITEMS,G as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_HEIGHT,H as MINI_PROGRAM_GAME_PREVIEW_FALLBACK_WIDTH,J as MINI_PROGRAM_LANG_NUMBERS,V as MediaTransferError,X as REACTION_SUPPORTED_CONTENT_TYPES,Z as SPIKE_STEP,rs as UNICODE_EMOJI_CATALOG,es as blockReasonForChannelSession,ts as blockReasonForChannelState,cs as blockReasonForGroupState,as as blockReasonForSession,ws as buildSessionFavoritePlainBody,xs as calculateMediaBox,qs as canCopyMessageImage,Bs as canEditMessage,Js as canPinChannelMessage,Ks as canPinGroupMessage,Ls as canPinMessage,Os as canPromoteMediaPresentationSource,Y as canReactToMessage,Cs as canRecallMessage,Qs as canTransmit,Rs as canTransmitByType,Ts as canTransmitContent,ds as cancelMediaUpload,Vs as captureRuntimeClientOperation,Ws as captureRuntimeOperation,K as channelMiniProgramRelKey,Xs as classifyGifFile,Ys as classifyMediaFile,$s as classifyStickerImageType,_s as countUnreadConversations,rr as createChatRuntime,mr as createConversationPrefetchController,l as createDelayedLoadingIndicator,i as createEmojiMatcher,ir as createFaceToFaceGroupQrPayload,or as createImClient,x as createImConsoleDiagnosticSink,er as createImDiagnosticMemoryBuffer,tr as createImI18n,cr as createImResourceUploader,ar as createImTextSearchMatcher,lr as createLinkMatcher,Ms as createMessageImageCopySource,nr as createNewMessageBadgeController,S as createSdkDiagnosticWriter,jr as createThreadItems,hr as createVoicePlayer,kr as createVoiceRecordingSession,L as csvIncludes,vr as decideChannelMiniProgramRelOpen,gr as decideConversationAction,br as decideMemberTargetAction,wr as decideMessageAction,xr as detectVoiceCapabilities,o as emojiAssetUrl,e as emojiUrlByCode,dr as extractSearchText,Sr as fetchConversationFileBatch,qr as fetchConversationImageBatch,Mr as fetchConversationMessageBatch,zr as fetchConversationVideoBatch,Ar as fetchConversationVoiceBatch,Br as fetchNextConversationSearchBatch,Cr as formatChatDateSeparator,Dr as formatConversationDisplayTime,sr as formatConversationUnreadBadge,Ir as formatFailure,Jr as formatFileSize,Nr as formatLastMessageSummary,Kr as formatMediaDuration,Or as formatMediaPlaceholder,Pr as formatMentionAll,Qr as formatServiceText,Rr as formatSystemMessage,Tr as forwardService,Lr as getFileExtension,pr as getImTextSearchInitial,Ur as getImTimeCatalog,Er as getLocalDayKey,zs as getMessageCopyImageUrl,As as getMessageCopyText,t as hasEmojiCandidate,ur as hasLinkCandidate,Xr as highlightSegments,Zs as isGifFile,Yr as isMessageLocateScrollProtected,Zr as isMessageTailChangeFromOlderWindowTrim,$r as isMessageViewportMeasurable,_r as isMessageVisibleForNewMessageBadge,jm as isMiniProgramShowTypeOpenable,Ns as isPinnedMessageProtected,b as isSupportedImageFile,ps as isVoiceStorageConfigured,sm as loadOlderUntilBoundary,B as mediaBatchBudgetBytes,vm as mediaService,W as mediaTransferErrorCodeOf,gm as messageService,bm as migrateImCachePrefix,f as normalizeImLocale,fr as normalizeLinkHref,wm as normalizeMediaUploadCredentials,ym as parseSessionFavoriteAlbumItems,qm as parseSessionFavoriteFileItems,ms as parseUnicodeEmojiCode,Mm as pinnedMessageService,$ as placeholderWaveform,v as prependRecentEmoji,zm as profileService,Am as readService,rm as refreshPrependMessageAnchorPosition,Vr as registerImCatalogOverrides,ls as replaceInterruptedMediaFile,us as requiresConversationEncryption,Us as requiresForwardTypeConfirmation,_ as resampleWaveform,Wr as resetImCatalogOverrides,Ps as resolveBestMediaPresentationSource,mm as resolveCenteredMessageScrollTop,Bm as resolveChannelAccess,Ds as resolveChannelMemberAvatarUrl,Es as resolveChannelMemberDisplayName,N as resolveChannelMiniProgramRelIcon,O as resolveChannelMiniProgramRelName,P as resolveChannelMiniProgramRelOpenSurface,Q as resolveChannelMiniProgramRelUrl,R as resolveChannelPinnedGameCopy,Cm as resolveConversationListPresentation,Fr as resolveDisplayTimestamp,c as resolveEmojiToken,Fs as resolveFriendDisplayName,M as resolveImEmojiToken,Dm as resolveImProfileAccessDestination,Em as resolveImThreadActiveDate,F as resolveMediaAlbumSendContentType,Ss as resolveMediaPresentation,Fm as resolveMediaTransferPresentation,Gs as resolveMemberDisplayName,Gm as resolveMessageBodyKind,Hm as resolveMessageNotificationDecision,Im as resolveMessageSearchPreview,Gr as resolveMessageTimelineTimestamp,hm as resolveMiniProgramFloatLinkUrl,I as resolveMiniProgramGamePreviewLayout,km as resolveMiniProgramOpenUrl,im as resolvePrependMessageAnchor,om as resolvePrependMessageAnchorAdjustment,em as resolvePrependMessageAnchorPosition,Hs as resolvePublicNickname,Jm as resolveQuotedMessagePresentation,Is as resolveSenderAvatarUrl,xm as resolveSessionFavoriteAlbumCaption,Sm as resolveSessionFavoriteAlbumItemPreviewUrl,ys as resolveSessionFavoriteKindFromMessage,a as resolveStandaloneEmojiMessage,tm as resolveSurvivingMessageAnchorAdjustment,Km as resolveTextSegments,is as resolveUnicodeEmoji,T as resolveVisibleChannelMiniProgramRels,cm as resolveVisibleMessageAnchorPositions,fs as retryMessage,C as runMediaSendBatch,ns as sendAsFilesBatch,yr as sendBlockReasonForDecision,js as sendMediaAlbum,hs as sendMediaFile,ks as sendMediaFilesBatch,vs as sendText,gs as sendVoice,am as shouldCompleteInitialViewport,dm as shouldFillInitialHistoryViewport,pm as shouldFollowIncomingMessage,lm as shouldLoadNewerHistoryPage,um as shouldPrefetchOlderHistory,fm as shouldRestoreMessageViewportFocus,Hr as shouldShowChatDateSeparator,nm as shouldTrackRemoteMessageForBadge,U as sortChannelMiniProgramFloatingItems,Lm as sortSessions,ss as spikeCountForDuration,Nm as sumSessionsUnread,bs as supportsConversationMention,os as unicodeEmojiTextFromCode,Om as voiceErrorCodeOf};
@@ -0,0 +1 @@
1
+ const e="b097f885e9577cdb04d9faf91aa08329";function o(o,r){const t=(a=r,Object.keys(a).sort((e,o)=>e.localeCompare(o,void 0,{numeric:!0})).map(e=>e+a[e]).join(""));var a;return o.cryptMd5(e+t+e).toUpperCase()}export{o as computeBiFeedbackHeaderSign};
@@ -0,0 +1 @@
1
+ import{loadBrowserCryptoDriver as o}from"../../crypto/browser.js";import{createApiProtocolClient as r}from"./client.js";import{createApiProtocolRuntimeConfig as t}from"./config.js";import{createAxiosTransport as n}from"./transports/axios.js";async function s(s={}){const i=await o(),p=t(s.config);return r({...s,config:p,crypto:i,transport:s.transport??n()})}export{s as createBrowserApiProtocolClient};
@@ -0,0 +1 @@
1
+ import{computeBiFeedbackHeaderSign as t}from"./bi-feedback.js";import{API_PROTOCOL_OS_TYPE as e,API_PROTOCOL_APP_ID as s,API_PROTOCOL_APP_TYPE as n,API_PROTOCOL_BI_FEEDBACK_APP_ID as o,API_PROTOCOL_CLIENT_TYPE as r}from"./constants.js";import{parseApiProtocolJson as a}from"./json.js";import{generateRequestNonce as i}from"./nonce.js";import{resolveTargetConfig as c,normalizeProtocolParams as p,resolveProtocolLang as u,resolveBrowserInfo as d,formatTimestamp as m,normalizeHeaders as l,appendQueryParams as f,isFormDataBody as g,createRandomAlphaNumericString as y,joinUrlParts as w,collectResponseHeaders as b,readResponseHeader as h,transportDataToUint8Array as v,isJsonResponse as S,isTextResponse as T,transportDataToText as M}from"./utils.js";const D=/* @__PURE__ */new Set(["content-etag","token","req-id"]);function C(t){const e=t.rawBody,s=null!==e&&"object"==typeof e&&"code"in e?e.code:void 0;return{transportStatus:t.transportStatus,...void 0===t.httpStatus?{}:{httpStatus:t.httpStatus},..."number"==typeof s&&Number.isFinite(s)?{businessCode:s}:{}}}function E(t,e){return{code:502,msg:t instanceof Error?t.message:String(t),data:null,time:Math.floor(e/1e3)}}function j(t,e,s,n){if(S(s))return a(M(e.data));if(T(s))return M(e.data);const o=v(e.data),r=n?t.crypto.decryptAes(o):o,i=(new TextDecoder).decode(r);return a(i)}async function B(t,e,s){if(!t.onDebugRecord)return;const n={...e.meta,response:e.response,...s?{error:{name:s instanceof Error?s.name:void 0,message:s instanceof Error?s.message:String(s)}}:{}};try{await t.onDebugRecord(n)}catch{}}async function _(t,e,s,n,o,r,i){const c=b(e.headers),p=h(c,"content-type");if(e.status<200||e.status>=300){let a;if(n)a=void 0;else try{a=j(t,e,p,s)}catch{a=void 0}const u=function(t){if(!t||"object"!=typeof t)return!1;const e=t;return Number.isFinite(e.code)&&"data"in e}(a)?a:function(t,e){return{code:t.status,msg:t.statusText,data:null,time:Math.floor(e/1e3)}}(e,i);return{response:u,meta:{...o,transportStatus:"http_error",httpStatus:e.status,contentType:p,responseHeaders:c,...void 0!==a?{rawBody:a}:{},timings:{totalMs:i-r,upstreamMs:i-r}}}}const u=Date.now();if(n){const t=v(e.data),s=Date.now();return{response:{code:e.status,data:t,time:Math.floor(s/1e3)},meta:{...o,transportStatus:"success",httpStatus:e.status,contentType:p,responseHeaders:c,rawBody:t,timings:{totalMs:s-r,upstreamMs:i-r,parseMs:s-u}}}}try{if(S(p)){const s=j(t,e,p,!1),n=Date.now();return{response:s,meta:{...o,transportStatus:"success",httpStatus:e.status,contentType:p,responseHeaders:c,rawBody:s,timings:{totalMs:n-r,upstreamMs:i-r,parseMs:n-u}}}}if(T(p)){const t=M(e.data),s=Date.now();return{response:{code:e.status,msg:e.statusText,data:t,time:Math.floor(s/1e3)},meta:{...o,transportStatus:"success",httpStatus:e.status,contentType:p,responseHeaders:c,rawBody:t,timings:{totalMs:s-r,upstreamMs:i-r,parseMs:s-u}}}}const n=v(e.data),d=Date.now(),m=s?t.crypto.decryptAes(n):n,l=Date.now(),f=(new TextDecoder).decode(m),g=a(f),y=Date.now();return{response:g,meta:{...o,transportStatus:"success",httpStatus:e.status,contentType:p,responseHeaders:c,rawBody:g,timings:{totalMs:y-r,upstreamMs:i-r,parseMs:y-u,...s?{decryptMs:l-d}:{}}}}}catch(t){const s=Date.now();return{response:{code:(d=e.status,Number.isInteger(d)&&d>=400&&d<=599?d:502),msg:t instanceof Error?t.message:String(t),data:null,time:Math.floor(s/1e3)},meta:{...o,transportStatus:"invalid_response",httpStatus:e.status,contentType:p,responseHeaders:c,timings:{totalMs:s-r,upstreamMs:i-r,parseMs:s-u}}}}var d}function I(a){return async function(b,h={}){const v=a.now??(()=>/* @__PURE__ */new Date),S=a.randomNonce??i,T=a.randomRequestId??(()=>`req-${crypto.randomUUID().replaceAll("-","")}`),M=a.randomETag??(()=>y()),j=(h.method??"POST").toUpperCase(),I=h.target??"core",N=c(I,a.config.targets[I]),k=h.prefix??N.prefix??"",q=null!=h.body,P=p(h.data??{}),R="/v1/feedback"===b&&"/bi/h5"===k,U=!R&&(h.encrypt??!q),x=!R&&(h.sign??!q),H=v(),A=M(),O=T(),V=h.token??await(a.getToken?.())??"",L=u(h.locale??a.getLocale?.()),J=a.getBrowserInfo?.()??d(h.userAgent),F={app_id:s,os_type:e,app_version:a.config.appVersion,sign_method:"md5",timestamp:m(H),nonce:S()},X={...F,...P,nonce:F.nonce};let G=F,Y=P,$=X;!R&&x&&(X.sign=a.crypto.generateSign("api",a.config.envType,X,A),F.sign=X.sign);const z={app_version:a.config.appVersion,"X-ENC-VERSION":a.config.appVersion,"X-APP-TYPE":n,"Client-type":r,"Content-ETag":A,"brand-id":a.config.brandId,"channel-id":h.channelId||a.config.channelId,device_brand:J.deviceBrand,device_info:J.deviceInfo,device_number:J.deviceNumber,device_token:J.deviceToken,lang:L,"mch-id":a.config.merchantId,"req-id":O,token:V},K=l(h.headers);let Q,W=b,Z={...z,...Object.fromEntries(Object.entries(K).filter(([t])=>!D.has(t.toLowerCase())))};if(q)Q=h.body??void 0,G=null,Y=h.data??null,$=h.data??null;else if(R){const e=String(H.getTime()),s={"app-id":o,"app-version":a.config.appVersion,"sys-type":n,"sys-version":J.deviceNumber,time:e};G=s,Z={...Z,...s,sign:t(a.crypto,s),"Content-Type":"application/json"},Q=JSON.stringify(P),$=P}else"GET"===j?(W=f(W,X),$=X):U?(Q=a.crypto.encryptAes((new TextEncoder).encode(JSON.stringify(X))),Z["Content-Type"]=Z["Content-Type"]||"application/octet-stream",$=X):(Q=JSON.stringify(X),Z["Content-Type"]=Z["Content-Type"]||"application/json",$=X);g(Q)&&delete Z["Content-Type"];const tt=function(t,e,s,n,o){if(s.customUrl)return t;const r=c(n,e.config.targets[n]),a=s.baseUrl??r.baseUrl;return w(a,o,t)}(W,a,h,I,k),et=Date.now(),st=h.timeoutMs??6e4,nt=function(t,e){const s=new AbortController,n=setTimeout(()=>s.abort(),t),o=()=>s.abort();return e&&(e.aborted?s.abort():e.addEventListener("abort",o,{once:!0})),{signal:s.signal,dispose:()=>{clearTimeout(n),e?.removeEventListener("abort",o)}}}(st,h.signal),ot={requestId:O,eTag:A,method:j,upstreamUrl:tt,requestHeaders:Z,requestCommonParams:G,requestBusinessParams:Y,requestParams:$};let rt;try{const t=await a.transport({url:tt,method:j,headers:Z,body:Q,signal:nt.signal,timeoutMs:st,onUploadProgress:h.onUploadProgress}),e=Date.now(),s=await _(a,t,U&&!R,"raw"===h.responseMode,ot,et,e);return h.onResponse&&(rt=C(s.meta),s.observation=rt),await B(a,s),!h.skipBusinessResponseHandler&&a.onBusinessResponse&&await a.onBusinessResponse(s.response,{request:{path:b,method:j,target:I,url:tt},options:h}),s}catch(t){const e=Date.now(),s={response:E(t,e),...void 0===rt?{}:{observation:rt},meta:{...ot,transportStatus:"network_error",timings:{totalMs:e-et,upstreamMs:e-et}}};return await B(a,s,t),s}finally{nt.dispose()}}}function N(t){const e=I(t);return async function(t,s={}){const n=await e(t,s);return await(s.onResponse?.(n.observation??C(n.meta))),n.response}}export{N as createApiProtocolClient};
@@ -0,0 +1 @@
1
+ import{resolveTargetConfig as e}from"./utils.js";function r(r={}){const a={core:e("core",{baseUrl:r.coreBaseUrl||"",...r.targets?.core}),wallet:e("wallet",{baseUrl:r.walletBaseUrl||"",...r.targets?.wallet}),bi:e("bi",{baseUrl:r.biBaseUrl||"",...r.targets?.bi}),im:e("im",{baseUrl:r.imBaseUrl||"",...r.targets?.im})};return{appVersion:r.appVersion||"",brandId:r.brandId||"",merchantId:r.merchantId||"",channelId:r.channelId||"",envType:r.envType||"prod",targets:a}}export{r as createApiProtocolRuntimeConfig};
@@ -0,0 +1 @@
1
+ const i="5",h="1",a="h5",e="2",o="4",p=16,t={core:"/api/h5",wallet:"/api/h5",bi:"/bi/h5",im:""};export{i as API_PROTOCOL_APP_ID,a as API_PROTOCOL_APP_TYPE,h as API_PROTOCOL_BI_FEEDBACK_APP_ID,e as API_PROTOCOL_CLIENT_TYPE,p as API_PROTOCOL_ETAG_LENGTH,o as API_PROTOCOL_OS_TYPE,t as API_PROTOCOL_TARGET_PREFIX};
@@ -0,0 +1 @@
1
+ import{parse as r,isInteger as e,isSafeNumber as o}from"lossless-json";function n(r){return e(r)?o(r)?Number.parseInt(r,10):r:Number.parseFloat(r)}function s(e){return r(e,void 0,{parseNumber:n})}export{s as parseApiProtocolJson};
@@ -0,0 +1 @@
1
+ const r="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";function n(n){if(!Number.isSafeInteger(n)||n<0)throw new RangeError("随机字符串长度必须是非负整数");const t=new Uint8Array(16);let e="";for(;e.length<n;){globalThis.crypto.getRandomValues(t);for(const o of t)if(!(o>=248)&&(e+=r.charAt(o%62),e.length===n))return e}return e}function t(){return n(10)}export{t as generateRequestNonce,n as generateSecureRandomString};
@@ -0,0 +1 @@
1
+ import t from"axios";function e(e={}){const o=e.axios??t.create();return async t=>{const e=await o.request({url:t.url,method:t.method,headers:t.headers,data:t.body,signal:t.signal,timeout:t.timeoutMs,onUploadProgress:t.onUploadProgress?e=>{const o="number"==typeof e.progress?e.progress:"number"==typeof e.total&&e.total>0?e.loaded/e.total:void 0;t.onUploadProgress?.({loaded:e.loaded,..."number"==typeof e.total?{total:e.total}:{},..."number"==typeof o?{progress:o}:{},event:e})}:void 0,responseType:"arraybuffer",transformResponse:t=>t,validateStatus:()=>!0});return{status:e.status,statusText:e.statusText,headers:e.headers,data:e.data}}}export{e as createAxiosTransport};
@@ -0,0 +1 @@
1
+ import{API_PROTOCOL_TARGET_PREFIX as e,API_PROTOCOL_ETAG_LENGTH as t}from"./constants.js";import{generateSecureRandomString as n}from"./nonce.js";function r(e){return e?e instanceof Headers?Object.fromEntries(e.entries()):Array.isArray(e)?Object.fromEntries(e):{...e}:{}}function i(e){return e?e instanceof Headers?Object.fromEntries(e.entries()):Object.fromEntries(Object.entries(e).map(([e,t])=>[e,Array.isArray(t)?t.join(", "):String(t)])):{}}function o(e,t){const n=t.toLowerCase(),r=Object.entries(e).find(([e])=>e.toLowerCase()===n);return r?.[1]??null}function c(e,t=2){return e.toString().padStart(t,"0")}function s(e){return`${e.getFullYear()}-${c(e.getMonth()+1)}-${c(e.getDate())} ${c(e.getHours())}:${c(e.getMinutes())}:${c(e.getSeconds())}`}function f(e){if(null!=e)return"string"==typeof e?e:"number"==typeof e||"boolean"==typeof e||"bigint"==typeof e?String(e):e&&"object"==typeof e?JSON.stringify(e):String(e)}function a(e){const t={};for(const[n,r]of Object.entries(e)){const e=f(r);void 0!==e&&(t[n]=e)}return t}function u(e=t){return n(e)}function d(e){const t={deviceBrand:"web",deviceInfo:"web",deviceNumber:"",deviceToken:"web"},n=e||("undefined"!=typeof navigator?navigator.userAgent:"");if(!n)return t;const r=n.match(/(Chrome|Firefox|Safari|Edg)\/([\d.]+)/i);return r?{deviceBrand:"web",deviceInfo:`${r[1]}/${r[2]}`,deviceNumber:r[2]??"",deviceToken:"web"}:{...t,deviceInfo:n}}function g(e){const t=String(e||"").trim().toLowerCase();return"cn"===t||t.startsWith("zh-cn")?"cn":"tc"===t||t.startsWith("zh-tw")||t.startsWith("zh-hk")?"tc":"vn"===t||t.startsWith("vi")?"vn":"th"===t||t.startsWith("th")?"th":"en"===t||t.startsWith("en")?"en":"cn"}function b(t,n){return{baseUrl:n?.baseUrl??"",prefix:n?.prefix??e[t]}}function h(e,t,n){const r=e.replace(/\/+$/g,""),i=t.replace(/^\/+|\/+$/g,"");return`${r}${i?`/${i}`:""}${n.startsWith("/")?n:`/${n}`}`}function y(e,t){const n=new URLSearchParams(Object.entries(t).map(([e,t])=>[e,String(t)])).toString();if(!n)return e;const r=e.indexOf("#"),i=r>=0?e.slice(0,r):e,o=r>=0?e.slice(r):"",c=i.includes("?")?i.endsWith("?")||i.endsWith("&")?"":"&":"?";return`${i}${c}${n}${o}`}function p(e){return!!e&&e.toLowerCase().includes("application/json")}function m(e){return!!e&&e.toLowerCase().startsWith("text/")}function w(e){return null==e?new Uint8Array:"string"==typeof e?(new TextEncoder).encode(e):e instanceof ArrayBuffer?new Uint8Array(e):ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):(new TextEncoder).encode(JSON.stringify(e))}function $(e){return"string"==typeof e?e:(new TextDecoder).decode(w(e))}function l(e){return"undefined"!=typeof FormData&&e instanceof FormData}export{y as appendQueryParams,i as collectResponseHeaders,u as createRandomAlphaNumericString,s as formatTimestamp,l as isFormDataBody,p as isJsonResponse,m as isTextResponse,h as joinUrlParts,r as normalizeHeaders,a as normalizeProtocolParams,o as readResponseHeader,d as resolveBrowserInfo,g as resolveProtocolLang,b as resolveTargetConfig,$ as transportDataToText,w as transportDataToUint8Array};
@@ -0,0 +1 @@
1
+ import{createCryptoDriver as t}from"./driver.js";import*as r from"./vendor/crypto/index_bg.js";import{__wbg_set_wasm as n}from"./vendor/crypto/index_bg.js";let e=null,a=null;async function i(){return a||(a=async function(){const e=await fetch(new URL("../../vendor/crypto/index_bg.wasm",import.meta.url));if(!e.ok)throw new Error(`crypto wasm 加载失败:HTTP ${e.status}`);const a={"./index_bg.js":r};let i;if("function"==typeof WebAssembly.instantiateStreaming)try{i=await WebAssembly.instantiateStreaming(e.clone(),a)}catch{i=await WebAssembly.instantiate(await e.arrayBuffer(),a)}else i=await WebAssembly.instantiate(await e.arrayBuffer(),a);return n(i.instance.exports),i.instance.exports.__wbindgen_start(),t(r)}().catch(t=>{throw a=null,t})),e=await a,e}function o(){if(!e)throw new Error("crypto driver 尚未初始化,请先 await loadBrowserCryptoDriver()");return e}function s(t){return o().cryptMd5(t)}function c(t,r,n,e=null){return o().generateSign(t,r,n,e)}function u(t){return o().encryptAes(t)}function f(t){return o().decryptAes(t)}await i();export{s as cryptMd5,f as decryptAes,u as encryptAes,c as generateSign,i as loadBrowserCryptoDriver};
@@ -0,0 +1 @@
1
+ function e(e){return{cryptMd5:e.crypt_md5,generateSign:e.generate_sign,encryptAes:e.encrypt_aes,decryptAes:e.decrypt_aes}}export{e as createCryptoDriver};
@@ -0,0 +1 @@
1
+ let n;function e(e){n=e}function t(e,t){try{return e.apply(this,t)}catch(e){const t=function(e){const t=n.__externref_table_alloc();return n.__wbindgen_export_2.set(t,e),t}(e);n.__wbindgen_exn_store(t)}}function r(n){const e=typeof n;if("number"==e||"boolean"==e||null==n)return`${n}`;if("string"==e)return`"${n}"`;if("symbol"==e){const e=n.description;return null==e?"Symbol":`Symbol(${e})`}if("function"==e){const e=n.name;return"string"==typeof e&&e.length>0?`Function(${e})`:"Function"}if(Array.isArray(n)){const e=n.length;let t="[";e>0&&(t+=r(n[0]));for(let o=1;o<e;o++)t+=`, ${r(n[o])}`;return t+="]",t}const t=/\[object ([^\]]+)\]/.exec(toString.call(n));let o;if(!(t&&t.length>1))return toString.call(n);if(o=t[1],"Object"==o)try{return`Object(${JSON.stringify(n)})`}catch(n){return"Object"}return n instanceof Error?`${n.name}: ${n.message}\n${n.stack}`:o}let o=0,c=null;function i(){return null!==c&&0!==c.byteLength||(c=new Uint8Array(n.memory.buffer)),c}const l=new("undefined"==typeof TextEncoder?(0,module.require)("util").TextEncoder:TextEncoder)("utf-8"),u="function"==typeof l.encodeInto?function(n,e){return l.encodeInto(n,e)}:function(n,e){const t=l.encode(n);return e.set(t),{read:n.length,written:t.length}};function _(n,e,t){if(void 0===t){const t=l.encode(n),r=e(t.length,1)>>>0;return i().subarray(r,r+t.length).set(t),o=t.length,r}let r=n.length,c=e(r,1)>>>0;const _=i();let f=0;for(;f<r;f++){const e=n.charCodeAt(f);if(e>127)break;_[c+f]=e}if(f!==r){0!==f&&(n=n.slice(f)),c=t(c,r,r=f+3*n.length,1)>>>0;const e=i().subarray(c+f,c+r);f+=u(n,e).written,c=t(c,r,f,1)>>>0}return o=f,c}let f=null;function s(){return(null===f||!0===f.buffer.detached||void 0===f.buffer.detached&&f.buffer!==n.memory.buffer)&&(f=new DataView(n.memory.buffer)),f}function d(n){return null==n}const a=new("undefined"==typeof TextDecoder?(0,module.require)("util").TextDecoder:TextDecoder)("utf-8",{ignoreBOM:!0,fatal:!0});function g(n,e){return n>>>=0,a.decode(i().subarray(n,n+e))}function b(e){let t,r;try{const c=_(e,n.__wbindgen_malloc,n.__wbindgen_realloc),i=o,l=n.crypt_md5(c,i);return t=l[0],r=l[1],g(l[0],l[1])}finally{n.__wbindgen_free(t,r,1)}}function w(e,t,r,c){let i,l;try{const u=_(e,n.__wbindgen_malloc,n.__wbindgen_realloc),f=o,s=_(t,n.__wbindgen_malloc,n.__wbindgen_realloc),a=o,b=d(c)?0:_(c,n.__wbindgen_malloc,n.__wbindgen_realloc),w=o,y=n.generate_sign(u,f,s,a,r,b,w);let m=y[0],h=y[1];if(y[3])throw m=0,h=0,function(e){const t=n.__wbindgen_export_2.get(e);return n.__externref_table_dealloc(e),t}(y[2]);return i=m,l=h,g(m,h)}finally{n.__wbindgen_free(i,l,1)}}function y(n,e){const t=e(1*n.length,1)>>>0;return i().set(n,t/1),o=n.length,t}function m(n,e){return n>>>=0,i().subarray(n/1,n/1+e)}function h(e){const t=y(e,n.__wbindgen_malloc),r=o,c=n.encrypt_aes(t,r),i=m(c[0],c[1]).slice();return n.__wbindgen_free(c[0],1*c[1],1),i}function p(e){const t=y(e,n.__wbindgen_malloc),r=o,c=n.decrypt_aes(t,r),i=m(c[0],c[1]).slice();return n.__wbindgen_free(c[0],1*c[1],1),i}function x(){return t((n,e)=>Reflect.get(n,e),arguments)}function $(n,e){return n[e>>>0]}function I(n){return n.length}function T(){return t(n=>Reflect.ownKeys(n),arguments)}function j(e,t){const c=_(r(t),n.__wbindgen_malloc,n.__wbindgen_realloc),i=o;s().setInt32(e+4,i,!0),s().setInt32(e+0,c,!0)}function v(){const e=n.__wbindgen_export_2,t=e.grow(4);e.set(0,void 0),e.set(t+0,void 0),e.set(t+1,null),e.set(t+2,!0),e.set(t+3,!1)}function E(n){return"object"==typeof n&&null!==n}function O(e,t){const r="string"==typeof t?t:void 0,c=d(r)?0:_(r,n.__wbindgen_malloc,n.__wbindgen_realloc),i=o;s().setInt32(e+4,i,!0),s().setInt32(e+0,c,!0)}function S(n,e){return g(n,e)}function A(n,e){throw new Error(g(n,e))}a.decode();export{x as __wbg_get_67b2ba62fc30de12,$ as __wbg_get_b9b93047fe3cf45b,I as __wbg_length_e2d2a49132c1b256,T as __wbg_ownKeys_3930041068756f1f,e as __wbg_set_wasm,j as __wbindgen_debug_string,v as __wbindgen_init_externref_table,E as __wbindgen_is_object,O as __wbindgen_string_get,S as __wbindgen_string_new,A as __wbindgen_throw,b as crypt_md5,p as decrypt_aes,h as encrypt_aes,w as generate_sign};
@@ -0,0 +1 @@
1
+ import{createStaleKeyRefreshGuard as e,isSameKeyBytes as n}from"./stale-key-refresh.js";class t extends Error{constructor(e,n){super(e,n),this.name="ChannelKeyError"}}function c(e){const n=e.trim(),c=n.replace(/-/g,"+").replace(/_/g,"/");if(""===c||!/^[A-Z0-9+/]*={0,2}$/i.test(c)||c.length%4==1)throw new t("channel secret_key 不是合法 Base64");const a=c.replace(/=+$/,""),r=a+"=".repeat((4-a.length%4)%4);let i;try{i=atob(r)}catch(e){throw new t("channel secret_key Base64 解码失败",{cause:e})}const o=Uint8Array.from(i,e=>255&e.charCodeAt(0));if(0===o.length)throw new t("channel secret_key Base64 解码结果为空");const s=new Uint8Array(16);s.set(o.subarray(0,s.length));const l=16===n.length&&/^[\x20-\x7E]+$/.test(n)?Uint8Array.from(n,e=>e.charCodeAt(0)):void 0;return{canonical:s,...void 0===l?{}:{legacyAscii:l},metadata:{channelKeyCharLength:n.length,decodedByteLength:o.length,padByteCount:Math.max(0,16-o.length),legacyAsciiCandidate:void 0!==l}}}function a(a){const r=/* @__PURE__ */new Map,i=/* @__PURE__ */new Map,o=/* @__PURE__ */new Map,s=/* @__PURE__ */new Map,l=e(n);function h(e){return{canonical:e.canonical.slice(),...void 0===e.legacyAscii?{}:{legacyAscii:e.legacyAscii.slice()},metadata:{...e.metadata}}}function d(e){return[{strategy:"canonical-base64-pad",key:e.canonical.slice()},...void 0===e.legacyAscii?[]:[{strategy:"legacy-ascii16",key:e.legacyAscii.slice()}]]}function g(e){r.delete(e),i.delete(e),o.delete(e),s.set(e,(s.get(e)??0)+1)}function u(e){const n=s.get(e)??0,o=(async()=>{try{const i=await a.loadSecretKey(e);if(null===i||""===i.trim())throw new t(`channel secret_key 缺失(channelId=${e})`);const o=c(i);return(s.get(e)??0)===n&&r.set(e,h(o)),o}catch(n){const c=n instanceof t?n:new t(`channel secret_key 加载失败(channelId=${e})`,{cause:n});throw a.onError?.(c.message,n),c}})().finally(()=>{i.get(e)===o&&i.delete(e)});return i.set(e,o),o}function y(e,n){const t=i.get(e);if(void 0!==t)return t;l.shouldRenegotiate(e,n.staleKey,r.get(e)?.canonical)&&g(e)}return{getChannelKey:function(e,n){const c=e.trim();if(""===c){const e=new t("channel id 不能为空");return a.onError?.(e.message),Promise.reject(e)}if(void 0!==n){const e=y(c,n);if(void 0!==e)return e.then(e=>e.canonical.slice())}const s=r.get(c);if(void 0!==s)return Promise.resolve(s.canonical.slice());const l=o.get(c);if(void 0!==l)return l;const h=(i.get(c)??u(c)).then(e=>e.canonical.slice()).finally(()=>{o.get(c)===h&&o.delete(c)});return o.set(c,h),h},getCachedChannelKey:function(e){const n=r.get(e.trim());return n?.canonical.slice()??null},getChannelKeyCandidates:async function(e,n){return d(await function(e,n){const c=e.trim();if(""===c){const e=new t("channel id 不能为空");return a.onError?.(e.message),Promise.reject(e)}if(void 0!==n){const e=y(c,n);if(void 0!==e)return e.then(h)}const o=r.get(c);return void 0!==o?Promise.resolve(h(o)):i.get(c)??u(c)}(e,n))},getCachedChannelKeyCandidates:function(e){const n=r.get(e.trim());return void 0===n?[]:d(n)},getCachedChannelKeyMetadata:function(e){const n=r.get(e.trim());return void 0===n?null:{...n.metadata}},primeChannelKey:function(e,n){const a=e.trim();if(""===a)throw new t("channel id 不能为空");const i=c(n);g(a),l.reset(a),r.set(a,h(i))},clearChannelKey:function(e){const n=e.trim();""!==n&&(g(n),l.reset(n))},clearAll:function(){const e=/* @__PURE__ */new Set([...r.keys(),...i.keys(),...o.keys(),...s.keys()]);for(const n of e)s.set(n,(s.get(n)??0)+1),l.reset(n);r.clear(),i.clear(),o.clear()}}}export{t as ChannelKeyError,a as createChannelKeyService};
@@ -0,0 +1 @@
1
+ import t from"node-forge/lib/md5.js";import{teaEncryptBytes as r,teaDecryptBytes as n}from"./tea.js";function e(r){const n=t.create();return n.update(r,"utf8"),n.digest().toHex()}function o(t){return(new TextEncoder).encode(t)}function c(t,r=e){const n=t.trim();if(""===n)throw new Error("collect TEA key: userId 为空");const c=r(n).replace(/[^0-9a-f]/gi,"");if(c.length<16)throw new Error("collect TEA key: MD5 长度不足");const u=o(c.slice(0,16).toUpperCase());if(u.length<16)throw new Error("collect TEA key: 派生结果不足 16 字节");return u.subarray(0,16)}function u(t,n,e){return function(t){let r="";for(const n of t)r+=String.fromCharCode(n);return btoa(r)}(r(c(n,e),function(t){const r=8*Math.ceil(t.length/8);if(r===t.length)return t;const n=new Uint8Array(r);return n.set(t),n}(o(t))))}function i(t,r,e){return function(t){let r=t.length;for(;r>0&&0===t[r-1];)r-=1;return(new TextDecoder).decode(t.subarray(0,r))}(n(c(r,e),function(t){const r=atob(t),n=new Uint8Array(r.length);for(let t=0;t<r.length;t++)n[t]=r.charCodeAt(t);return n}(t)))}function l(t){const r=t.trim();if(""===r||!r.startsWith("{"))return null;try{return function(t){return null===t||"object"!=typeof t||Array.isArray(t)?null:t}(JSON.parse(r))}catch{return null}}function f(t,r,n){const e=l(t);if(null!==e)return e;if(""===t.trim()||""===r.trim())return null;try{const e=i(t,r,n);return l(e)??l(function(t){const r=t.trim(),n=r.indexOf("}");return n>=0?r.slice(0,n+1):r}(e))}catch{return null}}export{i as decryptCollectTeaBody,c as deriveCollectTeaKey,u as encryptCollectTeaBody,f as parseCollectFavoriteMsgBody};
@@ -0,0 +1 @@
1
+ import{createCryptoWorker as e}from"./crypto-worker-factory.js";import{CRYPTO_BATCH_MAX_ITEMS as t,CRYPTO_BATCH_MAX_BYTES as r,CRYPTO_WORKER_PROTOCOL as i,isCryptoWorkerResponse as n}from"./crypto-worker-protocol.js";import{CryptoExecutionError as o,CRYPTO_TEA_MAX_INPUT_BYTES as s}from"../../../im-core/src/ports/crypto-task-executor.js";const a=8388608;function u(e){return!("items"in e)&&"teaKey"in e.input}function d(e){return"plain"in e.input?e.input.plain:e.input.cipherData}function c(){return Object.assign(new Error("Crypto operation cancelled"),{name:"AbortError"})}function p(p){const l=/* @__PURE__ */new Map,m=/* @__PURE__ */new Set;let f,y,h,v,g=!1,q=!1,b=0,w=0,k=0,I=0,A=0;function x(e,t,r,i){p.diagnostics?.record(void 0===t?"debug":"error","sdk","crypto",e,()=>{const e=[...l.values()],n=e.filter(e=>!e.sent);return{generation:p.generation,...void 0===r?{}:{operationId:r.request.operationId,durationMs:Date.now()-r.enqueuedAt},data:{pendingCount:l.size,inputBytes:b,activeCount:e.length-n.length,waitingCount:n.length,waitingInputBytes:n.reduce((e,t)=>e+t.bytes,0),rsaCount:e.filter(e=>!("items"in e.request)&&!u(e.request)).length,batchCount:e.filter(e=>"items"in e.request).length,teaCount:e.filter(e=>u(e.request)).length,...void 0===r?{}:{taskKind:"items"in r.request?"batch":u(r.request)?"tea":"rsa",priority:r.request.priority},...void 0===i?{}:{phase:i.phase,phaseElapsedMs:i.phaseElapsedMs,budgetMs:i.budgetMs},...void 0===t?{}:{reason:t},...void 0===r?.sentAt?{}:{queueWaitMs:r.sentAt-r.enqueuedAt,roundtripMs:Date.now()-r.sentAt}}}})}function E(e,t,r){e.settled||(e.settled=!0,e.request.signal?.removeEventListener("abort",e.onAbort),void 0!==r?e.reject(r):e.resolve(t))}function K(e){l.delete(e.request.operationId),h===e&&(h=void 0),e.sent&&(b-=e.bytes),m.add(e.request.operationId),m.size>256&&m.delete(m.values().next().value)}function M(e,t){if(void 0===y){y=new o(e),void 0!==v&&clearTimeout(v),v=void 0,void 0!==f&&(f.removeEventListener("message",C),f.removeEventListener("messageerror",P),f.removeEventListener("error",S),f.terminate(),f=void 0),"disposed"!==e&&x("crypto-executor-failed",e,t?.task,t);for(const e of l.values())E(e,void 0,y);l.clear(),h=void 0,b=0,m.clear(),"disposed"===e&&x("crypto-executor-disposed")}}function D(e,t){try{return f.postMessage(e,t??[]),!0}catch{return M("messageerror"),!1}}function L(e){return{version:i,generation:p.generation,operationId:e}}function j(){if(v=void 0,void 0===f||void 0!==y)return;const e=Date.now(),t=Math.max(0,e-A);if(A=e,!q){g?[...l.values()].some(e=>e.sent)&&(I+=t):k+=t;for(const e of l.values())g&&!e.sent&&(e.waitElapsed+=t);const e=p.lifecycleAware?1e4:6e4,r=p.lifecycleAware?3e4:6e4;if(!g&&k>=e)return M("timeout",{phase:"handshake",phaseElapsedMs:k,budgetMs:e});if(I>=r)return M("timeout",{phase:"no-progress",phaseElapsedMs:I,budgetMs:r});const i=[...l.values()].find(e=>!e.sent&&e.waitElapsed>=6e4);if(void 0!==i)return M("timeout",{phase:"admission-wait",phaseElapsedMs:i.waitElapsed,budgetMs:6e4,task:i})}(!g||l.size>0)&&(v=setTimeout(j,250))}function U(){if(g&&void 0!==f&&void 0===y)for(;;){const e=[...l.values()].filter(e=>e.sent);if(e.length>=16||e.some(e=>e.exclusive||e.bytes>a))return;const t=[...l.values()].filter(e=>!e.sent),r=t.find(e=>"foreground"===e.request.priority),i=e.filter(e=>"background"===e.request.priority).length<12?t.find(e=>"background"===e.request.priority):void 0,n=h??(void 0!==i&&(void 0===r||w>=4)?i:r);if(void 0===n)return;if(e.length>0&&(n.exclusive||n.bytes>a)||b>0&&b+n.bytes>a)return void(h=n);h=void 0,w="foreground"===n.request.priority?Math.min(4,w+1):0,n.sent=!0,n.sentAt=Date.now();for(const e of t)e.waitElapsed=0;b+=n.bytes,0===e.length&&(I=0);try{if("items"in n.request){const e=[...new Set(n.request.items.map(e=>e.input.privateKey))],t=n.request.items.map(t=>({itemIndex:t.itemIndex,keyIndex:e.indexOf(t.input.privateKey),secretKey:new Uint8Array(t.input.secretKey).buffer,cipherData:new Uint8Array(t.input.cipherData).buffer}));if(!D({...L(n.request.operationId),kind:"decrypt-batch",keys:e,items:t,priority:n.request.priority},t.flatMap(e=>[e.secretKey,e.cipherData])))return}else if(u(n.request)){const e=new Uint8Array(n.request.input.teaKey.subarray(0,16)).buffer,t=new Uint8Array(d(n.request)).buffer;if(!D("plain"in n.request.input?{...L(n.request.operationId),kind:"encrypt-tea",teaKey:e,plain:t,priority:n.request.priority}:{...L(n.request.operationId),kind:"decrypt-tea",teaKey:e,cipherData:t,priority:n.request.priority},[e,t]))return}else{const e=new Uint8Array(n.request.input.data).buffer;if(!D({...L(n.request.operationId),kind:"decrypt-rsa",data:e,privateKey:n.request.input.privateKey,priority:n.request.priority},[e]))return}}catch{return void M("messageerror")}x("crypto-task-dispatched",void 0,n)}}function C(e){if(void 0!==y)return;if(!n(e.data))return M("protocol-mismatch");const t=e.data;if("protocol-error"===t.kind||"ready"===t.kind&&t.generation!==p.generation)return M("protocol-mismatch");if(t.generation!==p.generation)return;if("ready"===t.kind)return g?M("protocol-mismatch"):(g=!0,I=0,void U());if(!g)return M("protocol-mismatch");const r=l.get(t.operationId);if(void 0===r){if(m.has(t.operationId))return;return M("protocol-mismatch")}if(!r.sent)return M("protocol-mismatch");if("progress"===t.kind)return u(r.request)||t.completed<=r.completed||"items"in r.request&&t.completed>r.request.items.length?M("protocol-mismatch"):(r.completed=t.completed,void(I=0));if("cancelled"===t.kind&&!r.cancelled)return M("protocol-mismatch");let i;if("batch-result"===t.kind){if(!("items"in r.request))return M("protocol-mismatch");const e=new Map(t.items.map(e=>[e.itemIndex,e.result]));if(e.size!==t.items.length||t.items.length!==r.request.items.length||r.request.items.some(t=>!e.has(t.itemIndex)))return M("protocol-mismatch");i=r.request.items.map(({itemIndex:t})=>{const r=e.get(t);return{itemIndex:t,result:r.ok?{ok:!0,plain:new Uint8Array(r.plain)}:r}})}else if(("result"===t.kind||"crypto-error"===t.kind)&&"items"in r.request)return M("protocol-mismatch");if("result"===t.kind&&u(r.request)&&t.data.byteLength!==r.bytes-16)return M("protocol-mismatch");if(!r.cancelled)if(void 0!==i)E(r,i);else if("result"!==t.kind||"items"in r.request){if("result"===t.kind||"batch-result"===t.kind)return M("protocol-mismatch");E(r,void 0,Object.assign(new Error("Crypto input could not be processed"),{name:"CryptoComputationError"}))}else E(r,new Uint8Array(t.data));x(r.cancelled?"crypto-task-cancelled":"crypto-task-completed",void 0,r),K(r),I=0,U()}function P(){M("messageerror")}function S(e){e.preventDefault(),M(g?"crashed":"load-failed")}function T(i){if(void 0!==y)return Promise.reject(y);if(i.signal?.aborted)return Promise.reject(c());if(u(i)&&(!(i.input.teaKey instanceof Uint8Array)||i.input.teaKey.byteLength<16||!(d(i)instanceof Uint8Array)||d(i).byteLength>s))return Promise.reject(new o("protocol-mismatch"));if("items"in i&&(!Array.isArray(i.items)||0===i.items.length||i.items.length>t||i.items.some(e=>!(Number.isSafeInteger(e.itemIndex)&&!(e.itemIndex<0)&&"string"==typeof e.input.privateKey&&e.input.secretKey instanceof Uint8Array&&e.input.cipherData instanceof Uint8Array))||new Set(i.items.map(e=>e.itemIndex)).size!==i.items.length))return Promise.reject(new o("protocol-mismatch"));const n="items"in i?i.items.reduce((e,t)=>e+t.input.secretKey.byteLength+t.input.cipherData.byteLength,0)+[...new Set(i.items.map(e=>e.input.privateKey))].reduce((e,t)=>e+2*t.length,0):u(i)?d(i).byteLength+16:i.input.data.byteLength+2*i.input.privateKey.length;if("items"in i&&i.items.length>1&&n>r)return Promise.reject(new o("protocol-mismatch"));if(i.generation!==p.generation||""===i.operationId||i.operationId.length>256||l.has(i.operationId)||m.has(i.operationId))return Promise.reject(new o("protocol-mismatch"));const a=[...l.values()].filter(e=>!e.sent);return a.length>=16||"background"===i.priority&&a.filter(e=>"background"===e.request.priority).length>=12?Promise.reject(new o("queue-full")):new Promise((t,o)=>{const s={request:"items"in i?{...i,items:i.items.map(e=>({itemIndex:e.itemIndex,input:{...e.input}}))}:(u(i),{...i,input:{...i.input}}),resolve:t,reject:o,sent:!1,settled:!1,cancelled:!1,bytes:n,exclusive:"items"in i&&n>r,completed:0,waitElapsed:0,enqueuedAt:Date.now(),onAbort(){s.cancelled=!0,E(s,void 0,c()),s.sent?D({...L(i.operationId),kind:"cancel"}):(K(s),U())}};l.set(i.operationId,s),i.signal?.addEventListener("abort",s.onAbort,{once:!0}),function(){if(void 0===f&&void 0===y){if(void 0===p.workerFactory&&"undefined"==typeof Worker)return M("unavailable");try{f=(p.workerFactory??e)(),f.addEventListener("message",C),f.addEventListener("messageerror",P),f.addEventListener("error",S)}catch{return void M("load-failed")}A=Date.now(),v=setTimeout(j,250),D({...L(""),kind:"init"})}}(),void 0!==f&&void 0===v&&(A=Date.now(),v=setTimeout(j,250)),U()})}return{decryptRsa:e=>T(e),decryptBatch:e=>T(e),decryptTea:e=>T(e),encryptTea:e=>T(e),promote(e){const t=l.get(e);void 0===t||t.cancelled||(t.request.priority="foreground",t.sent&&D({...L(e),kind:"promote"}),U())},setSuspended(e){q=e,A=Date.now()},dispose(){M("disposed")}}}export{p as createCryptoTaskExecutor};
@@ -0,0 +1 @@
1
+ function r(){return new Worker(new URL("../../../../crypto.worker.js",import.meta.url),{type:"classic",name:"im-crypto"})}export{r as createCryptoWorker};
@@ -0,0 +1 @@
1
+ const e=1,t=8,r=262144;function n(e){return!!function(e){if(null===e||"object"!=typeof e)return!1;const t=e;return 1===t.version&&Number.isSafeInteger(t.generation)&&t.generation>=0&&"string"==typeof t.operationId&&t.operationId.length<=256}(e)&&("ready"===e.kind||"protocol-error"===e.kind?""===e.operationId:""!==e.operationId&&("cancelled"===e.kind||"crypto-error"===e.kind||("result"===e.kind?e.data instanceof ArrayBuffer:"batch-result"===e.kind?Array.isArray(e.items)&&e.items.length>0&&e.items.length<=8&&e.items.every(e=>null!==e&&"object"==typeof e&&Number.isSafeInteger(e.itemIndex)&&e.itemIndex>=0&&null!==e.result&&"object"==typeof e.result&&(!0===e.result.ok?e.result.plain instanceof ArrayBuffer:!1===e.result.ok&&("rsa"===e.result.stage||"tea"===e.result.stage))):"progress"===e.kind&&Number.isSafeInteger(e.completed)&&e.completed>0)))}export{r as CRYPTO_BATCH_MAX_BYTES,t as CRYPTO_BATCH_MAX_ITEMS,e as CRYPTO_WORKER_PROTOCOL,n as isCryptoWorkerResponse};
@@ -0,0 +1 @@
1
+ import{getUserEncryptInfo as r}from"../http/requests/get-user-encrypt-info.js";import{createStaleKeyRefreshGuard as e}from"./stale-key-refresh.js";import{waitForKeySignal as t}from"./wait-for-key-signal.js";import{isCryptoExecutionError as o}from"../../../im-core/src/ports/crypto-task-executor.js";function n(r){const e=r.trim().replace(/-/g,"+").replace(/_/g,"/"),t=e+"=".repeat((4-e.length%4)%4),o=atob(t),n=new Uint8Array(o.length);for(let r=0;r<o.length;r++)n[r]=255&o.charCodeAt(r);return n}let i=0;function l(l){const a=l.clientType,s=/* @__PURE__ */new Map,c=/* @__PURE__ */new Map;let u=e((r,e)=>r===e);const p=++i;let y=0,d=!1,f=null,g=null;function m(r){if(d||!0===r?.aborted)throw new DOMException("用户密钥协商已取消","AbortError")}function v(r,e,t){if(m(t),o(e)||e instanceof Error&&"AbortError"===e.name)throw e;return l.onError?.(r,e),null}async function h(e,t){const o=t.controller.signal;let i,c;m(o);try{i=await function(){if(m(),null!==f)return Promise.resolve(f);if(null!==g)return g;const r=Promise.resolve().then(()=>(m(),l.crypto.generateTempKeyPair())).then(r=>(m(),f=r,r)).finally(()=>{g===r&&(g=null)});return g=r,r}(),m(o)}catch(r){return v(`用户密钥协商:生成临时 RSA 密钥失败(userId=${e})`,r,o)}try{c=await r(l.client,{publicKey:i.publicKeyBase64,clientType:a}),m(o)}catch(r){return v(`用户密钥协商请求异常(userId=${e})`,r,o)}if(null===c.data)return l.onError?.(`用户密钥协商业务失败(userId=${e},code=${c.code})`),null;const u=c.data.prv_key??c.data.prvKey??"",p=String(c.data.version??"").trim();if(""===u)return l.onError?.(`用户密钥协商响应缺少 prv_key(userId=${e})`),null;try{const r=await l.cryptoExecutor.decryptRsa({operationId:t.operationId,generation:l.generation,input:{data:n(u),privateKey:i.privateKey},priority:t.priority,signal:o});m(o);const a=(new TextDecoder).decode(r).trim();if(""===a)return l.onError?.(`用户密钥协商:解出的私钥为空(userId=${e})`),null;const y=c.data.pub_key?.trim(),d={privateKey:a,version:p,...y?{publicKey:y}:{}};return s.set(e,d),d}catch(r){return v(`用户密钥协商:临时私钥解 prv_key 失败(userId=${e})`,r,o)}}function w(r){const e=c.get(r.trim());d||void 0===e||"foreground"===e.priority||(e.priority="foreground",l.cryptoExecutor.promote(e.operationId))}return{getUserPrivateKey:async function(r,e){m(e?.signal);const o=r.trim();if(""===o)return null;let n=c.get(o);const i=void 0!==e&&("staleKey"in e||void 0===e.signal&&void 0===e.priority);void 0===n&&i&&u.shouldRenegotiate(o,e.staleKey,s.get(o)?.privateKey)&&s.delete(o);const l=s.get(o);if(void 0===n&&void 0!==l)return await Promise.resolve(),m(e?.signal),l;if(void 0===n){const r={operationId:`user-key:${p}:${++y}`,controller:new AbortController,priority:e?.priority??"foreground"},i=t(h(o,r),r.controller.signal).finally(()=>{c.get(o)?.operationId===r.operationId&&c.delete(o)});n=Object.assign(r,{promise:i}),c.set(o,n)}"foreground"===(e?.priority??"foreground")&&w(o);const a=await t(n.promise,e?.signal);return m(n.controller.signal),m(e?.signal),a},getCachedPrivateKey:function(r){return d?null:s.get(r.trim())??null},dispose:function(){if(!d){d=!0;for(const[r,e]of c)e.controller.abort(),u.reset(r);for(const r of s.keys())u.reset(r);c.clear(),s.clear(),u=e((r,e)=>r===e),f=null,g=null}},promote:w}}export{l as createEncryptKeyService};
@@ -0,0 +1 @@
1
+ import{getGroupEncryptInfo as r}from"../http/requests/get-group-encrypt-info.js";import{createStaleKeyRefreshGuard as e}from"./stale-key-refresh.js";import{waitForKeySignal as t}from"./wait-for-key-signal.js";import{isCryptoExecutionError as o}from"../../../im-core/src/ports/crypto-task-executor.js";function n(r){const e=r.trim().replace(/-/g,"+").replace(/_/g,"/"),t=e+"=".repeat((4-e.length%4)%4),o=atob(t),n=new Uint8Array(o.length);for(let r=0;r<o.length;r++)n[r]=255&o.charCodeAt(r);return n}let i=0;function l(l){const c=l.clientType,a=/* @__PURE__ */new Map,u=/* @__PURE__ */new Map,p=/* @__PURE__ */new Map;let s=e((r,e)=>r===e);const g=++i;let y=0,d=!1,f=null,m=null;function v(r){if(d||!0===r?.aborted)throw new DOMException("群密钥协商已取消","AbortError")}function h(r,e,t){if(v(t),o(e)||e instanceof Error&&"AbortError"===e.name)throw e;return l.onError?.(r,e),null}async function w(e,t){const o=t.controller.signal;let i,u;v(o);try{i=await function(){if(v(),null!==f)return Promise.resolve(f);if(null!==m)return m;const r=Promise.resolve().then(()=>(v(),l.crypto.generateTempKeyPair())).then(r=>(v(),f=r,r)).finally(()=>{m===r&&(m=null)});return m=r,r}(),v(o)}catch(r){return h(`群密钥协商:生成临时 RSA 密钥失败(groupId=${e})`,r,o)}try{u=await r(l.client,{groupId:e,publicKey:i.publicKeyBase64,clientType:c}),v(o)}catch(r){return h(`群密钥协商请求异常(groupId=${e})`,r,o)}if(null===u.data)return l.onError?.(`群密钥协商业务失败(groupId=${e},code=${u.code})`),null;const p=u.data,s=String(p.prv_key??p.prvKey??p.private_key??"").trim(),g=String(p.pub_key??p.pubKey??p.public_key??"").trim(),y=String(p.version??"").trim();if(""===s)return l.onError?.(`群密钥协商响应缺少 prv_key(groupId=${e})`),null;try{const r=await l.cryptoExecutor.decryptRsa({operationId:t.operationId,generation:l.generation,input:{data:n(s),privateKey:i.privateKey},priority:t.priority,signal:o});v(o);const c=(new TextDecoder).decode(r).trim();if(""===c)return l.onError?.(`群密钥协商:解出的私钥为空(groupId=${e})`),null;const u={privateKey:c,publicKey:g,version:y};return a.set(e,u),u}catch(r){return h(`群密钥协商:临时私钥解 prv_key 失败(groupId=${e})`,r,o)}}function K(r){return d?null:a.get(r.trim())??null}function b(r){const e=p.get(r.trim());d||void 0===e||"foreground"===e.priority||(e.priority="foreground",l.cryptoExecutor.promote(e.operationId))}return{getGroupKeys:async function(r,e){v(e?.signal);const o=r.trim(),n=u.get(o)??0,i=()=>{if(v(e?.signal),n!==(u.get(o)??0))throw new DOMException("群密钥已清理","AbortError")};if(""===o)return null;let l=p.get(o);const c=void 0!==e&&("staleKey"in e||void 0===e.signal&&void 0===e.priority);void 0===l&&c&&s.shouldRenegotiate(o,e.staleKey,a.get(o)?.privateKey)&&a.delete(o);const d=a.get(o);if(void 0===l&&void 0!==d)return await Promise.resolve(),i(),d;if(void 0===l){const r={operationId:`group-key:${g}:${++y}`,controller:new AbortController,priority:e?.priority??"foreground"},n=t(w(o,r),r.controller.signal).finally(()=>{p.get(o)?.operationId===r.operationId&&p.delete(o)});l=Object.assign(r,{promise:n}),p.set(o,l)}"foreground"===(e?.priority??"foreground")&&b(o);const f=await t(l.promise,e?.signal);return v(l.controller.signal),i(),f},getCachedGroupKeys:K,getCachedGroupKeyVersion:r=>K(r)?.version??null,clearGroupKeys:function(r){const e=r.trim();u.set(e,(u.get(e)??0)+1),p.get(e)?.controller.abort(),p.delete(e),a.delete(e),s.reset(e)},dispose:function(){if(!d){d=!0;for(const[r,e]of p)e.controller.abort(),s.reset(r);for(const r of a.keys())s.reset(r);p.clear(),a.clear(),s=e((r,e)=>r===e),f=null,m=null}},promote:b}}export{l as createGroupKeyService};
@@ -0,0 +1 @@
1
+ import{getUserInfoOther as e}from"../http/requests/get-user-info-other.js";function r(r){const t=r.clientType,n=/* @__PURE__ */new Map,o=/* @__PURE__ */new Map;return{getPeerPublicKey:function(i,u){const s=i.trim();if(""===s)return Promise.resolve(null);!0===u?.force&&n.delete(s);const c=n.get(s);if(void 0!==c)return Promise.resolve(c);const l=o.get(s);if(void 0!==l)return l;const f=async function(o){try{const i=await e(r.client,{userId:o,clientType:t}),u=(i?.public_key??"").trim();return""===u?(r.onError?.(`取对端公钥:/user/info/other 无 public_key(userId=${o})`),null):(n.set(o,u),u)}catch(e){return r.onError?.(`取对端公钥请求异常(userId=${o})`,e),null}}(s).finally(()=>{o.get(s)===f&&o.delete(s)});return o.set(s,f),f}}}export{r as createPeerPublicKeyService};
@@ -0,0 +1 @@
1
+ import r from"node-forge/lib/asn1.js";import t from"node-forge/lib/pki.js";import e from"node-forge/lib/util.js";function n(r){let t="";for(const e of r)t+=String.fromCharCode(e);return t}function o(r){return Uint8Array.from(r,r=>255&r.charCodeAt(0))}function*i(i){const c=function(n){const o=(n??"").trim();if(""===o)throw new Error("RSA 私钥为空");if(o.includes("-----BEGIN"))return t.privateKeyFromPem(o);const i=o.replace(/\s+/g,""),c=[];try{return t.privateKeyFromAsn1(r.fromDer(e.decode64(i)))}catch(r){c.push(r)}const s=i.replace(/(.{64})/g,"$1\n").trim();for(const r of["PRIVATE KEY","RSA PRIVATE KEY"])try{return t.privateKeyFromPem(`-----BEGIN ${r}-----\n${s}\n-----END ${r}-----`)}catch(r){c.push(r)}throw new Error(`RSA 私钥解析失败(已试 PKCS1-DER / PKCS8-PEM / PKCS1-PEM):${c[0]instanceof Error?c[0].message:String(c[0])}`)}(i.privateKey),s=Math.ceil(c.n.bitLength()/8),{data:f}=i;if(0===f.length)throw new Error("RSA 解密:密文为空");const a=[];for(let r=0;r<f.length;r+=s){const t=Math.min(r+s,f.length);try{const e=c.decrypt(n(f.subarray(r,t)),"RSAES-PKCS1-V1_5");a.push(o(e)),yield a.length}catch(e){const n=e instanceof Error?e.message:String(e);throw new Error(`RSA-PKCS1 解密失败(密文 ${f.length}B,块 ${r}..${t},keySize ${s}B,私钥 ${c.n.bitLength()}bit):${n}`)}}const h=a.reduce((r,t)=>r+t.length,0),l=new Uint8Array(h);let u=0;for(const r of a)l.set(r,u),u+=r.length;return l}function c(r){const t=i(r);let e=t.next();for(;!e.done;)e=t.next();return e.value}export{i as decryptRsaBlocks,c as rsaDecryptPkcs1};
@@ -0,0 +1 @@
1
+ import e from"node-forge/lib/asn1.js";import r from"node-forge/lib/pki.js";import t from"node-forge/lib/util.js";import{rsaDecryptPkcs1 as n}from"./rsa-private-key.js";import{teaDecryptBytesSimple as o,teaEncryptBytesSimple as i,teaTransformChunked as c,teaEncryptBytes as a,teaDecryptBytes as l}from"./tea.js";const p=16;function s(e){let r="";for(const t of e)r+=String.fromCharCode(t);return r}function u(e){const r=new Uint8Array(e.length);for(let t=0;t<e.length;t++)r[t]=255&e.charCodeAt(t);return r}function y(e){const r=n({data:e.secretKey,privateKey:e.privateKey});if(r.length<p)throw new Error(`端到端解密失败:RSA 解出的 teaKey 长度 ${r.length} < 16`);return l(r,e.cipherData)}function f(){const e=new Uint8Array(p),r=new Uint8Array(1);for(let t=0;t<p;t++){let n=0;do{globalThis.crypto.getRandomValues(r),n=r[0]??0}while(0===n);e[t]=n}return e}function h(n,o){if(0===o.length)throw new Error("RSA 加密:明文为空");const i=function(n){const o=(n??"").trim();if(""===o)throw new Error("RSA 公钥为空");if(o.includes("-----BEGIN"))return r.publicKeyFromPem(o);const i=o.replace(/\s+/g,""),c=[];try{return r.publicKeyFromAsn1(e.fromDer(t.decode64(i)))}catch(e){c.push(e)}const a=function(e){return e.replace(/(.{64})/g,"$1\n").trim()}(i);for(const e of["PUBLIC KEY","RSA PUBLIC KEY"])try{return r.publicKeyFromPem(`-----BEGIN ${e}-----\n${a}\n-----END ${e}-----`)}catch(e){c.push(e)}throw new Error(`RSA 公钥解析失败(已试 SPKI-DER / SPKI-PEM / PKCS1-PEM):${c[0]instanceof Error?c[0].message:String(c[0])}`)}(n),c=Math.ceil(i.n.bitLength()/8)-11;if(c<=0)throw new Error(`RSA 加密:公钥位数过小(${i.n.bitLength()}bit)`);const a=[];for(let e=0;e<o.length;e+=c){const r=Math.min(e+c,o.length),t=i.encrypt(s(o.subarray(e,r)),"RSAES-PKCS1-V1_5");a.push(u(t))}const l=a.reduce((e,r)=>e+r.length,0),p=new Uint8Array(l);let y=0;for(const e of a)p.set(e,y),y+=e.length;return p}function m(e){const r=e.teaKey??f();if(r.length<p)throw new Error(`端到端加密失败:teaKey 长度 ${r.length} < 16`);const t=r.subarray(0,p),n=a(t,e.plain);return{secretKey:h(e.publicKey,t),cipherData:n}}function g(e){return l(e.teaKey,e.cipherData)}function K(e){return a(e.teaKey,e.plain)}function d(e){return c(e.teaKey,e.plain,"encrypt",void 0,void 0===e.signal?{}:{signal:e.signal})}function E(e){return c(e.teaKey,e.cipherData,"decrypt",void 0,void 0===e.signal?{}:{signal:e.signal})}function S(e){return i(e.teaKey,e.plain)}function w(e){return o(e.teaKey,e.cipherData)}function b(){return new Promise((e,t)=>{r.rsa.generateKeyPair({bits:2048,e:65537,workers:-1},(n,o)=>{var i;n?t(n):e({publicKeyBase64:(i=r.publicKeyToPem(o.publicKey),i.replace(/-----BEGIN[^-]+-----/g,"").replace(/-----END[^-]+-----/g,"").replace(/\s+/g,"")),privateKey:r.privateKeyToPem(o.privateKey)})})})}function P(){return{decryptEndToEnd:y,encryptEndToEnd:m,decryptSymmetric:g,encryptSymmetric:K,encryptSymmetricChunked:d,decryptSymmetricChunked:E,encryptFileSimple:S,decryptFileSimple:w,randomTeaKey:f,generateTempKeyPair:b,rsaDecryptPkcs1:n}}export{P as createRsaTeaCryptoAdapter};
@@ -0,0 +1 @@
1
+ function e(e){const t=/* @__PURE__ */new Map;return{shouldRenegotiate(n,r,o){if(void 0===r)return!0;if(void 0!==o&&!e(o,r))return!1;const i=t.get(n);return(void 0===i||!e(i,r))&&(t.set(n,r),!0)},reset(e){t.delete(e)}}}function t(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}export{e as createStaleKeyRefreshGuard,t as isSameKeyBytes};
@@ -0,0 +1 @@
1
+ import{yieldToBrowser as t}from"../scheduling/yield-to-browser.js";const e=2654435769;function n(t){if(t.length<16)throw new Error(`TEA key 长度不足:${t.length},需 ≥ 16 字节`);const e=new DataView(t.buffer,t.byteOffset,16);return[e.getUint32(0,!0),e.getUint32(4,!0),e.getUint32(8,!0),e.getUint32(12,!0)]}function r(t,r,i,o,a=new Uint8Array(t.length)){const f=n(r),s=Math.floor(t.length/8),l=void 0===o?s:Math.min(s,Math.floor(o/8)),u=new DataView(t.buffer,t.byteOffset,t.byteLength),c=new DataView(a.buffer,a.byteOffset,a.byteLength);if("decrypt"===i){const[t,n,r,i]=f;for(let o=0;o<8*l;o+=8){let a=u.getUint32(o,!0),f=u.getUint32(o+4,!0),s=Math.imul(e,16)>>>0;for(let o=0;o<16;o++)f=f-(Math.imul(a,16)+r^a+s^(a>>>5)+i)>>>0,a=a-(Math.imul(f,16)+t^f+s^(f>>>5)+n)>>>0,s=s-e>>>0;c.setUint32(o,a,!0),c.setUint32(o+4,f,!0)}}else{const[t,n,r,i]=f;for(let o=0;o<8*l;o+=8){let a=u.getUint32(o,!0),f=u.getUint32(o+4,!0),s=0;for(let o=0;o<16;o++)s=s+e>>>0,a=a+(Math.imul(f,16)+t^f+s^(f>>>5)+n)>>>0,f=f+(Math.imul(a,16)+r^a+s^(a>>>5)+i)>>>0;c.setUint32(o,a,!0),c.setUint32(o+4,f,!0)}}const g=8*l;return g<t.length&&a.set(t.subarray(g),g),a}function i(t,e){return r(e,t,"decrypt")}function o(t,e){return r(e,t,"encrypt")}function a(t,e){return r(e,t,"encrypt",32)}function f(t,e){return r(e,t,"decrypt",32)}function s(){return t()}function l(t){if(t?.aborted)throw new DOMException("TEA 分块处理已取消","AbortError")}async function u(t,e,i,o=1048576,a={}){if(!Number.isInteger(o)||o<=0||o%8!=0)throw new RangeError(`TEA 分块大小必须是 8 的正整数倍:${o}`);n(t);const f=a.yieldToMain??s,u=a.yieldToMain??(()=>new Promise(t=>setTimeout(t,0))),c=e.size,g=[];let h=0;for(;h<c;){l(a.signal);const n=Math.min(h+o,c),s=new Uint8Array(await e.slice(h,n).arrayBuffer());l(a.signal);const w=new Uint8Array(s.length);let y=performance.now();for(let e=0;e<s.length;e+=65536){l(a.signal);const n=Math.min(e+65536,s.length);r(s.subarray(e,n),t,i,void 0,w.subarray(e,n)),n<s.length&&performance.now()-y>=8&&(await u(),l(a.signal),y=performance.now())}g.push(new Blob([w])),h=n,a.onProgress?.(h,c),h<c&&await f()}return l(a.signal),new Blob(g)}export{i as teaDecryptBytes,f as teaDecryptBytesSimple,o as teaEncryptBytes,a as teaEncryptBytesSimple,u as teaTransformChunked};
@@ -0,0 +1 @@
1
+ function e(e,r){return void 0===r?e:new Promise((t,n)=>{const o=()=>n(new DOMException("密钥协商等待已取消","AbortError")),i=()=>r.removeEventListener("abort",o);r.aborted?o():r.addEventListener("abort",o,{once:!0}),e.then(e=>{i(),t(e)},e=>{i(),n(e)})})}export{e as waitForKeySignal};
@@ -0,0 +1 @@
1
+ var e=Object.defineProperty,t=(t,n,i)=>((t,n,i)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[n]=i)(t,"symbol"!=typeof n?n+"":n,i);import{getApplicationPage as n,ignoreApplication as i,acceptApplication as r}from"./requests/applications.js";class a extends Error{constructor(e,n){super(`application HTTP 失败(${e}):${n||"unknown error"}`),t(this,"code"),this.code=e,this.name="ApplicationHttpError"}}class o extends Error{constructor(e){super(`application 映射失败:${e}`),this.name="ApplicationMappingError"}}function s(e){return"string"==typeof e||"number"==typeof e?String(e).trim():""}function u(e){const t=s(e);if(""===t)return;if(/^\d+$/.test(t)){const e=Number(t);if(!Number.isSafeInteger(e)||e<=0)return;return t.length>=13?e:1e3*e}const n=Date.parse(t);return Number.isFinite(n)?n:void 0}function c(e){const t=s(e.status);if(void 0===e.status||""===t)return!0;const n=function(e){switch(e){case 0:case 1:case 2:return e;default:return}}(Number(t));if(void 0===n)throw new o(`未知申请状态:${t}`);return 0===n}function p(e){const t=s(e.type);if(""===t)return!0;if(1!==Number(t))throw new o(`联系人申请页出现未知 type:${t}`);return!0}function l(e){const t=Number(s(e.type));if(2!==t&&3!==t&&4!==t&&5!==t)throw new o(`GROUP/CHANNEL 混合页出现未知 type:${s(e.type)||"<empty>"}`);return t}function f(e){if(!Number.isInteger(e.limit)||e.limit<=0||e.limit>50)throw new o("limit 必须为 1-50");if(void 0===e.cursor)return{page:1,pageSize:e.limit};if(!/^[1-9]\d*$/.test(e.cursor))throw new o("page cursor 必须为正十进制整数");const t=Number(e.cursor);if(!Number.isSafeInteger(t))throw new o("page cursor 超出安全整数范围");return{page:t,pageSize:e.limit}}function m(e){if(null!=e&&Array.isArray(e.list))return e.list;const t=e?.count??e?.total,n=0===t||"string"==typeof t&&/^0+$/.test(t.trim());if(null===e?.list&&n)return[];throw new o("data.list 必须是数组,或在 count=0 时为 null")}function d(e){const t=e.trim();if(""===t)throw new o("申请记录 id 不能为空");return t}function g(e){const t=d(s(e.id)||s(e.aid)),n=s(e.user_id)||s(e.user_info?.user_id),i=s(e.nick_name??e.nickname??e.name)||s(e.user_info?.nick_name??e.user_info?.nickname??e.user_info?.name);if(""===n||""===i)throw new o(`联系人申请人身份不能为空(applicationId=${t})`);const r=s(e.head_img_url??e.avatar)||s(e.user_info?.head_img_url??e.user_info?.avatar),a=s(e.user_info?.mid),c=u(e.create_time??e.createTime??e.update_version);return{applicationId:t,applicantId:n,applicantName:i,...""===r?{}:{applicantAvatar:r},...""===a?{}:{applicantDisplayId:a},message:s(e.remarks??e.introduce_self),...void 0===c?{}:{createdAt:c}}}function _(e){const t=d(s(e.id)||s(e.aid)),n=s(e.group_id)||s(e.group_info?.group_id);if(""===n)throw new o(`GROUP id 不能为空(applicationId=${t})`);const i=s(e.user_id)||s(e.user_info?.user_id),r=s(e.nick_name??e.nickname??e.name)||s(e.user_info?.nick_name??e.user_info?.nickname??e.user_info?.name);if(""===i||""===r)throw new o(`GROUP 申请人或邀请人身份不能为空(applicationId=${t})`);const a=s(e.head_img_url??e.avatar)||s(e.user_info?.head_img_url??e.user_info?.avatar),c=s(e.user_info?.mid),p=s(e.group_info?.name??e.group_info?.group_name);if(""===p)throw new o(`GROUP 名称不能为空(applicationId=${t})`);const l=s(e.group_info?.head_img_url??e.group_info?.avatar),f=u(e.create_time??e.createTime??e.update_version);return{applicationId:t,groupId:n,kind:3===Number(e.type)?"invite":"request",actor:{id:i,name:r,...""===a?{}:{avatarUrl:a},...""===c?{}:{displayId:c}},target:{id:n,name:p,...""===l?{}:{avatarUrl:l}},message:s(e.remarks??e.introduce_self),...void 0===f?{}:{createdAt:f}}}async function w(e,t,n){const i=await n(e.client,{applicationId:d(t),clientType:e.clientType});if(!i.ok)throw new a(i.code,i.message)}function h(e){return{listPendingApplications:async function(t){const{pageSize:i}=f(t);let{page:r}=f(t);for(let t=0;t<20;t+=1){const t=await n(e.client,{listType:1,page:r,pageSize:i,clientType:e.clientType});if(!t.ok)throw new a(t.code,t.message);const o=m(t.data),s=o.filter(e=>p(e)&&c(e)).map(g),u=o.length<i,l=r+1;if(s.length>0||u)return{items:s,exhausted:u,...u?{}:{nextCursor:String(l)}};r=l}return{items:[],exhausted:!1,nextCursor:String(r)}},acceptApplication:t=>w(e,t,r),ignoreApplication:t=>w(e,t,i)}}function y(e){return{listPendingApplications:async function(t){const{pageSize:i}=f(t);let{page:r}=f(t);for(let t=0;t<20;t+=1){const t=await n(e.client,{listType:2,page:r,pageSize:i,clientType:e.clientType});if(!t.ok)throw new a(t.code,t.message);const o=m(t.data),s=o.filter(e=>{const t=l(e);return(2===t||3===t)&&c(e)}).map(_),u=o.length<i,p=r+1;if(s.length>0||u)return{items:s,exhausted:u,...u?{}:{nextCursor:String(p)}};r=p}return{items:[],exhausted:!1,nextCursor:String(r)}},acceptApplication:t=>w(e,t,r),ignoreApplication:t=>w(e,t,i)}}export{a as ApplicationHttpError,o as ApplicationMappingError,h as createContactApplicationHttpAdapter,y as createGroupApplicationHttpAdapter};
@@ -0,0 +1 @@
1
+ var e=Object.defineProperty,t=(t,n,r)=>((t,n,r)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r)(t,"symbol"!=typeof n?n+"":n,r);import{mapChannelMiniProgramRels as n}from"./requests/channel-mini-program-rel.js";import{getChannelProfileInfo as r,getChannelProfilePage as i}from"./requests/channel-profile.js";import{resolveChannelAccess as s,resolveChannelPermissions as o}from"../../../im-core/src/state/channel-permissions.js";class a extends Error{constructor(e,n){super(`CHANNEL HTTP 失败(${e}):${n||"unknown error"}`),t(this,"code"),this.code=e,this.name="ChannelHttpError"}}class u extends Error{constructor(e){super(`CHANNEL profile 映射失败:${e}`),this.name="ChannelProfileMappingError"}}function l(e,t){const n="string"==typeof e||"number"==typeof e?String(e).trim():"";if(""===n)throw new u(`${t} 不能为空`);return n}function d(e){const t="string"==typeof e||"number"==typeof e?String(e).trim():"";return""===t?void 0:t}function c(e){return 1===Number(e)}function f(e,t){const n=e.replace(/^0+(?=\d)/,""),r=t.replace(/^0+(?=\d)/,"");return n.length!==r.length?n.length>r.length?n:r:n>=r?n:r}function m(e,t,r){const i=l(e.radio_id??e.id,"id"),o=l(e.name,"name"),a=void 0===e.is_in?void 0:c(e.is_in),u=function(e,t){return 1===Number(e)?"member":9===Number(e)?"admin":10===Number(e)?"owner":!1===t?"guest":"unknown"}(e.radio_user?.role_id,a),f=function(e){const t=void 0===e.is_in?void 0:c(e.is_in),n=c(e.radio_user?.is_del),r=c(e.radio_user?.is_black);return 3===Number(e.status)?"dismissed":n&&r?"removed":r?"blacklisted":n?"left":!1===t?"guest":void 0!==e.status&&2!==Number(e.status)?"unknown_restricted":"active"}(e),m=function(e,t,n){const r=d(e.radio_user?.user_id),i=e.radio_setting?.un_speaking_user_ids,s=d(e.radio_setting?.un_speaking_period);return{role:t,baseState:n,resolvedState:n,allMembersMuted:c(e.radio_setting?.is_unspeeking_all),currentUserMuted:void 0!==r&&Array.isArray(i)&&i.map(String).includes(r),...void 0===s?{}:{mutePeriod:s}}}(e,u,f),p=s({channelState:f,snapshot:m,nowMs:t}),h={...m,resolvedState:p.channelState},v=function(e){const t=d(e);return void 0!==t&&/^\d+$/.test(t)?t.replace(/^0+(?=\d)/,""):void 0}(e.update_version),w=d(e.head_img_url),g=d(e.desc),_=d(e.user_id),b=Number(e.total_users),y=function(e){if(null!=e)return 1===Number(e)?"standard":2===Number(e)?"competition":"unknown"}(e.type),S=function(e){if("number"==typeof e)return 0!==e&&(1===e||void 0);if("string"==typeof e){const t=e.trim();if("0"===t)return!1;if("1"===t)return!0}}(e.radio_setting?.is_unvisit_other),M=void 0===e.verify_way?void 0:Number(e.verify_way),k=void 0!==M&&Number.isSafeInteger(M)?M:void 0,N=d(e.invite_code),P=n(e,{source:r});return{id:i,name:o,...void 0===w?{}:{avatar:w},...void 0===g?{}:{description:g},...void 0===_?{}:{ownerId:_},...Number.isFinite(b)&&b>=0?{memberCount:b}:{},...void 0===k?{}:{verifyType:k},...void 0===N?{}:{inviteCode:N},role:u,permissions:p.permissions,channelState:p.channelState,allMembersMuted:h.allMembersMuted,...void 0===S?{}:{memberPrivateChatDisabled:S},accessSnapshot:h,...void 0===e.radio_user?.is_undisturb?{}:{muted:c(e.radio_user.is_undisturb)},...void 0===y?{}:{channelKind:y},...void 0===v?{}:{updateVersion:v},...void 0===P?{}:{miniProgramRels:P}}}function p(e){return{...e,updatedAt:Date.now()}}function h(e,t){if(void 0===e.accessSnapshot)return{...e,permissions:o(e.role,e.channelState)};const n=s({channelState:e.channelState,snapshot:e.accessSnapshot,permissions:e.permissions,nowMs:t});return{...e,channelState:n.channelState,permissions:n.permissions,allMembersMuted:e.allMembersMuted??e.accessSnapshot.allMembersMuted,accessSnapshot:{...e.accessSnapshot,resolvedState:n.channelState}}}function v(e,t){const{updatedAt:n,...r}=h(e,t);return r}function w(e){const t=/* @__PURE__ */new Map,n=/* @__PURE__ */new Map,s=/* @__PURE__ */new Map;let o="0",l=!1,d=null,c=0,w=null,g=0;function _(){if(l)return Promise.resolve();if(null!==d)return d;const n=c;return d=(async()=>{if(void 0!==e.storage){const[r,i]=await Promise.all([e.storage.getChannelProfiles(),e.storage.getChannelListVersion()]);if(n!==c)return;for(const n of r)t.set(n.id,h(n,e.now?.()??Date.now()));o=/^\d+$/.test(i)?i:"0"}l=!0})().finally(()=>{d=null}),d}return{listProfiles:function(n){if(!0!==n?.forceRefresh&&null!==w)return w;const r=++g,s=(async()=>{await _();const s=(await e.getUserId()).trim();if(""===s)throw new u("user_id 不能为空");const l=!0===n?.forceRefresh?"0":o,d=[];for(let t=1;;t+=1){const n=await i(e.client,{userId:s,updateVersion:l,page:t,pageSize:500,clientType:e.clientType});if(!n.ok)throw new a(n.code,n.message);if(null===n.data)break;if(!Array.isArray(n.data))throw new u("list data 必须是数组");const r=e.now?.()??Date.now(),o=n.data.map(e=>m(e,r,"list"));if(d.push(...o),o.length<500)break}if(r!==g)return[...t.values()].map(t=>v(t,e.now?.()??Date.now()));let c=o;for(const e of d)t.set(e.id,p(e)),void 0!==e.updateVersion&&(c=f(c,e.updateVersion));return o=c,void 0!==e.storage&&(await e.storage.saveChannelProfiles([...t.values()]),await e.storage.saveChannelListVersion(o)),[...t.values()].map(t=>v(t,e.now?.()??Date.now()))})();return w=s,s.finally(()=>{w===s&&(w=null)}).catch(()=>{}),s},getProfile:function(i,o){const l=i.trim();if(""===l)return Promise.reject(new u("channel id 不能为空"));const d=!0===o?.forceRefresh;if(!d){const e=n.get(l);if(void 0!==e)return e}const c=(s.get(l)??0)+1;d&&s.set(l,c);const f=(async()=>{await _();const n=t.get(l);if(!d&&void 0!==n&&void 0!==n.miniProgramRels)return v(n,e.now?.()??Date.now());const i=await r(e.client,{channelId:l,clientType:e.clientType});if(!i.ok)throw new a(i.code,i.message);if(null===i.data||void 0===i.data)throw new u("info data 不能为空");const o=m(i.data,e.now?.()??Date.now(),"info");if(o.id!==l)throw new u(`info id 不匹配:请求 ${l},响应 ${o.id}`);if((s.get(l)??c)===c){const n=p(o);t.set(l,n),await(e.storage?.saveChannelProfiles([n]))}return o})().finally(()=>{n.get(l)===f&&n.delete(l)});return s.set(l,c),n.set(l,f),f},clearCache(){c+=1,g+=1;for(const e of/* @__PURE__ */new Set([...t.keys(),...n.keys(),...s.keys()]))s.set(e,(s.get(e)??0)+1);t.clear(),n.clear(),w=null,o="0",l=!0,d=null}}}export{a as ChannelHttpError,u as ChannelProfileMappingError,w as createChannelHttpAdapter};
@@ -0,0 +1 @@
1
+ var e=Object.defineProperty,n=(n,t,i)=>((n,t,i)=>t in n?e(n,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):n[t]=i)(n,"symbol"!=typeof t?t+"":t,i);import{getChannelJoinApplicationPage as t,ignoreChannelJoinApplication as i,acceptChannelJoinApplication as r}from"./requests/channel-join-applications.js";class a extends Error{constructor(e,t){super(`CHANNEL join application HTTP 失败(${e}):${t||"unknown error"}`),n(this,"code"),this.code=e,this.name="ChannelJoinApplicationHttpError"}}class o extends Error{constructor(e){super(`CHANNEL join application 映射失败:${e}`),this.name="ChannelJoinApplicationMappingError"}}function c(e){return"string"==typeof e||"number"==typeof e?String(e).trim():""}function s(e){const n=c(e.status);if(void 0===e.status||""===n)return!0;const t=function(e){switch(e){case 0:case 1:case 2:return e;default:return}}(Number(n));if(void 0===t)throw new o(`未知申请状态:${n}`);return 0===t}function u(e){const n=Number(c(e.type));if(2!==n&&3!==n&&4!==n&&5!==n)throw new o(`GROUP/CHANNEL 混合页出现未知 type:${c(e.type)||"<empty>"}`);return n}function l(e){const n=c(e.id)||c(e.aid),t=c(e.user_id)||c(e.user_info?.user_id),i=e.radio_info??e.channel_info,r=c(e.radio_id)||c(e.channel_id)||c(i?.radio_id)||c(i?.channel_id);if(""===n)throw new o("申请记录 id 不能为空");if(""===t)throw new o(`申请人 id 不能为空(applicationId=${n})`);if(""===r)throw new o(`CHANNEL id 不能为空(applicationId=${n})`);const a=c(e.user_info?.nick_name)||c(e.user_info?.nickname)||c(e.user_info?.name)||t,s=c(e.user_info?.head_img_url)||c(e.user_info?.avatar),u=c(e.user_info?.mid),l=c(i?.name)||c(i?.radio_name)||c(i?.channel_name)||r,p=c(i?.head_img_url)||c(i?.avatar),f=function(e){const n=c(e);if(""===n)return;if(/^\d+$/.test(n)){const e=Number(n);if(!Number.isSafeInteger(e)||e<=0)return;return n.length>=13?e:1e3*e}const t=Date.parse(n);return Number.isFinite(t)?t:void 0}(e.create_time??e.createTime);return{applicationId:n,applicantId:t,applicantName:a,...""===s?{}:{applicantAvatar:s},...""===u?{}:{applicantDisplayId:u},channelId:r,channelName:l,...""===p?{}:{channelAvatar:p},message:c(e.remarks)||c(e.introduce_self),...void 0===f?{}:{createdAt:f}}}function p(e){if(!Number.isInteger(e.limit)||e.limit<=0||e.limit>50)throw new o("limit 必须为 1-50");if(void 0===e.cursor)return{page:1,pageSize:e.limit||20};if(!/^[1-9]\d*$/.test(e.cursor))throw new o("page cursor 必须为正十进制整数");const n=Number(e.cursor);if(!Number.isSafeInteger(n))throw new o("page cursor 超出安全整数范围");return{page:n,pageSize:e.limit}}function f(e){if(null!=e&&Array.isArray(e.list))return e.list;const n=e?.count??e?.total,t=0===n||"string"==typeof n&&/^0+$/.test(n.trim());if(null===e?.list&&t)return[];throw new o("data.list 必须是数组,或在 count=0 时为 null")}function d(e){const n=e.trim();if(""===n)throw new o("申请记录 id 不能为空");return n}function m(e){async function n(n,t){const i=await t(e.client,{applicationId:d(n),clientType:e.clientType});if(!i.ok)throw new a(i.code,i.message)}return{listJoinApplications:async function(n){const{pageSize:i}=p(n);let{page:r}=p(n);for(let n=0;n<20;n+=1){const n=await t(e.client,{page:r,pageSize:i,clientType:e.clientType});if(!n.ok)throw new a(n.code,n.message);const o=f(n.data),c=o.filter(e=>4===u(e)&&s(e)).map(l),p=o.length<i,d=r+1;if(c.length>0||p)return{items:c,exhausted:p,...p?{}:{nextCursor:String(d)}};r=d}return{items:[],exhausted:!1,nextCursor:String(r)}},acceptJoinApplication:e=>n(e,r),ignoreJoinApplication:e=>n(e,i)}}export{a as ChannelJoinApplicationHttpError,o as ChannelJoinApplicationMappingError,m as createChannelJoinApplicationHttpAdapter};
@@ -0,0 +1 @@
1
+ var e=Object.defineProperty,t=(t,n,r)=>((t,n,r)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r)(t,"symbol"!=typeof n?n+"":n,r);import{getChannelMembersByIds as n,searchChannelMemberPage as r,getChannelMemberPage as s,getChannelAdminPage as a}from"./requests/channel-members.js";import{createImTextSearchMatcher as o}from"../../../im-core/src/mapping/search-text.js";class i extends Error{constructor(e,n){super(`CHANNEL member HTTP 失败(${e}):${n||"unknown error"}`),t(this,"code"),this.code=e,this.name="ChannelMemberHttpError"}}class d extends Error{constructor(e){super(`CHANNEL member 映射失败:${e}`),this.name="ChannelMemberMappingError"}}function l(e){return"string"==typeof e||"number"==typeof e?String(e).trim():""}function c(e,t){return void 0===e?void 0===t?0:-1:void 0===t?1:e.length!==t.length?e.length>t.length?1:-1:e===t?0:e>t?1:-1}function u(e,t){const n=l(e.radio_id);if(""===n)throw new d("radio_id 不能为空");if(n!==t)throw new d(`成员频道 ${n} 与请求频道 ${t} 不一致`);const r=l(e.user_id)||l(e.user_info?.user_id);if(""===r)throw new d("user_id 不能为空");if(void 0!==e.is_master){const t=Number(e.is_master);if(0!==t&&1!==t)throw new d(`is_master 非法:${l(e.is_master)}`)}const s=l(e.nick_name),a=l(e.user_info?.nick_name)||l(e.user_info?.name),o=l(e.user_info?.head_img_url),i=function(e){const t=l(e);return/^\d+$/.test(t)?t.replace(/^0+(?=\d)/,""):void 0}(e.update_version),c=Number(e.join_type);return{userId:r,...""===s?{}:{nickname:s},displayName:s||a||r,...""===o?{}:{avatar:o},role:(u=e.role_id,1===Number(u)?"member":9===Number(u)?"admin":10===Number(u)?"owner":"unknown"),...Number.isInteger(c)?{joinType:c}:{},...void 0===i?{}:{updateVersion:i}};var u}function m(e){const t=[],n=/* @__PURE__ */new Map;for(const r of e)n.has(r.userId)||t.push(r.userId),n.set(r.userId,r);return t.map(e=>n.get(e))}function h(e){const t=e.now??(()=>Date.now()),l=e.isActive??(()=>!0),h=e.cacheTtlMs??3e5,f=/* @__PURE__ */new Map,p=/* @__PURE__ */new Map,g=/* @__PURE__ */new Map,w=/* @__PURE__ */new Map,b=/* @__PURE__ */new Map,y=/* @__PURE__ */new Set,I=/* @__PURE__ */new Set,v=(e,t)=>`${e}:${t}`;function M(e){const t=b.get(e);return void 0!==t?t:(b.set(e,0),0)}function C(e){const t=e.trim();if(""===t)throw new d("channelId 不能为空");return t}function x(e){for(p.delete(e.channelId),p.set(e.channelId,e);p.size>32;){const e=p.keys().next().value;if(void 0===e)break;p.delete(e)}}function S(t){const n=p.get(t);if(void 0!==n)return x(n),Promise.resolve(n);if(I.has(t)||void 0===e.storage?.getChannelMemberSnapshot)return Promise.resolve(null);const r=g.get(t);if(void 0!==r)return r;const s=M(t),a=e.storage.getChannelMemberSnapshot(t).then(e=>!l()||null===e||e.channelId!==t||s!==M(t)||I.has(t)?null:(x(e),e)).finally(()=>{g.get(t)===a&&g.delete(t)});return g.set(t,a),a}function A(e,t){const n=e.map(e=>e.userId),r=new Map(e.map(e=>[e.userId,e]));for(const e of t){r.has(e.userId)||n.push(e.userId);const t=r.get(e.userId);(void 0===t||c(e.updateVersion,t.updateVersion)>=0)&&r.set(e.userId,e)}return n.map(e=>r.get(e))}async function _(e,t){const n=await o(t);return e.filter(e=>null!==n.match(e.displayName)||null!==n.match(e.userId,{pinyin:!1}))}async function T(t,n,r={}){if(!l()||n!==M(t.channelId))return;const s=t.channelId,a=I.has(s),o=!0===r.allowPersistentRebuild&&a&&void 0===e.storage?.deleteChannelMemberSnapshot&&void 0!==e.storage?.saveChannelMemberSnapshot;a&&!o||await(e.storage?.saveChannelMemberSnapshot?.(t)),l()&&n===M(s)&&(x(t),!0!==r.allowPersistentRebuild||a&&void 0!==e.storage?.deleteChannelMemberSnapshot||I.delete(s))}async function k(e,n,r,s,a=!1,o){const i=await S(e);if(!l()||r!==M(e))return;const d=t(),c=a&&null!==i&&!(void 0!==o&&i?.nextCursor===o),u=void 0===s||c?i?.nextCursor:s.nextCursor,m={channelId:e,items:A(i?.items??[],n),...void 0===u?{}:{nextCursor:u},exhausted:c?i.exhausted:s?.exhausted??i?.exhausted??!1,updatedAt:d};await T(m,r)}async function N(n,r,s){if(!l()||s!==M(n))return[...r];const a=t(),o=a+h,i=[],d=[],u=/* @__PURE__ */new Map;for(const e of r){const t=v(n,e.userId),r=f.get(t)?.member;void 0!==r&&c(e.updateVersion,r.updateVersion)<0?d.push(r):(i.push({channelId:n,...e,updatedAt:a}),d.push(e),u.set(t,{member:e,expiresAt:o}))}if(i.length>0&&l()&&s===M(n)&&!y.has(n)&&(await(e.storage?.saveChannelMembers?.(i)),void 0!==e.storage?.getChannelMembers&&l()&&s===M(n))){const t=await e.storage.getChannelMembers(n,i.map(e=>e.userId)),r=new Map(t.map(e=>{const{channelId:t,updatedAt:n,...r}=e;return[r.userId,{member:r,updatedAt:n}]}));for(let e=0;e<d.length;e+=1){const t=d[e];if(void 0===t)continue;const s=r.get(t.userId);void 0===s||c(s.member.updateVersion,t.updateVersion)<=0||(d[e]=s.member,u.set(v(n,t.userId),{member:s.member,expiresAt:s.updatedAt+h}))}}if(l()&&s===M(n))for(const[e,t]of u)f.set(e,t);return d}async function $(e,t){const n=C(e.channelId),{page:r,pageSize:s}=function(e){if(""===e.channelId.trim())throw new d("channelId 不能为空");if(!Number.isInteger(e.limit)||e.limit<=0||e.limit>18)throw new d("limit 必须为 1-18");if(void 0===e.cursor)return{page:1,pageSize:e.limit};if(!/^[1-9]\d*$/.test(e.cursor))throw new d("page cursor 必须为正十进制整数");const t=Number(e.cursor);if(!Number.isSafeInteger(t))throw new d("page cursor 超出安全整数范围");return{page:t,pageSize:e.limit}}({...e,channelId:n}),a=M(n),o=await t(n,r,s);if(!o.ok)throw new i(o.code,o.message);if(null!==o.data&&!Array.isArray(o.data))throw new d("data 必须为数组或 null");const l=m((o.data??[]).map(e=>u(e,n))),c=await N(n,l,a),h=(o.data??[]).length<s;return{items:c,exhausted:h,...h?{}:{nextCursor:String(r+1)}}}function P(n){const r=C(n),a=w.get(r);if(void 0!==a)return a;const o=M(r),i=(async()=>{let n,a=!1,i=[];for(let t=0;t<12&&!a;t+=1){const t=await $({channelId:r,limit:18,...void 0===n?{}:{cursor:n}},(t,n,r)=>s(e.client,{channelId:t,page:n,pageSize:r,clientType:e.clientType}));if(!l()||o!==M(r))throw new d("成员快照预取已因成员变化失效");i=A(i,t.items),n=t.nextCursor,a=t.exhausted}const c={channelId:r,items:i,...void 0===n?{}:{nextCursor:n},exhausted:a,updatedAt:t()};return await T(c,o,{allowPersistentRebuild:!0}),{items:c.items,...void 0===c.nextCursor?{}:{nextCursor:c.nextCursor},exhausted:c.exhausted}})().finally(()=>{w.get(r)===i&&w.delete(r)});return w.set(r,i),i}async function z(t){const n=C(t),r=M(n)+1;b.set(n,r),y.add(n),I.add(n),p.delete(n),g.delete(n),w.delete(n);const s=`${n}:`;for(const e of f.keys())e.startsWith(s)&&f.delete(e);void 0===e.storage?.deleteChannelMembers&&void 0===e.storage?.deleteChannelMemberSnapshot||(await Promise.all([e.storage.deleteChannelMembers?.(n),e.storage.deleteChannelMemberSnapshot?.(n)]),r===M(n)&&(void 0!==e.storage?.deleteChannelMembers&&y.delete(n),void 0!==e.storage?.deleteChannelMemberSnapshot&&I.delete(n)))}return{async prefetchMembers(e){const n=C(e),r=await S(n),s=I.has(n);null!==r&&!s&&r.updatedAt+h>t()||await P(n)},async getCachedMembers(e){const t=C(e.channelId),n=await S(t);if(null===n)return null;const r=e.query?.trim()??"";return""===r&&I.has(t)?null:""===r?{items:[...n.items],...void 0===n.nextCursor?{}:{nextCursor:n.nextCursor},exhausted:n.exhausted}:{items:await _(n.items,r),exhausted:!0}},async refreshMembers(t){const n=C(t.channelId),s=t.query?.trim()??"";if(""===s)return P(n);const a=M(n),[o,i]=await Promise.all([$({channelId:n,query:s,limit:18},(t,n,a)=>r(e.client,{channelId:t,query:s,page:n,pageSize:a,updateVersion:"0",clientType:e.clientType})),S(n)]),d=null===i?[]:await _(i.items,s);return await k(n,o.items,a),{...o,items:A(o.items,d)}},async listMembers(t){const n=C(t.channelId),r={...t,channelId:n},a=M(n),o=await $(r,(t,n,r)=>s(e.client,{channelId:t,page:n,pageSize:r,clientType:e.clientType}));return await k(n,o.items,a,o,void 0!==r.cursor,r.cursor),o},async searchMembers(t){const n=t.query.trim();if(""===n)return Promise.reject(new d("搜索关键词不能为空"));const s=C(t.channelId),a={...t,channelId:s},o=M(s),i=await $(a,(t,s,a)=>r(e.client,{channelId:t,query:n,page:s,pageSize:a,updateVersion:"0",clientType:e.clientType}));return await k(s,i.items,o),i},listAdmins:t=>$(t,(t,n,r)=>a(e.client,{channelId:t,page:n,pageSize:r,clientType:e.clientType})),async getMembersByIds(r,s,a){const o=r.trim();if(""===o)throw new d("channelId 不能为空");const c=[...new Set(s.map(e=>e.trim()).filter(Boolean))];if(0===c.length)return[];const p=!0===a?.forceRefresh,g=/* @__PURE__ */new Map;let w=[];for(const e of c){const n=f.get(v(o,e));!p&&void 0!==n&&n.expiresAt>t()?g.set(e,n.member):w.push(e)}if(!p&&w.length>0&&!y.has(o)&&void 0!==e.storage?.getChannelMembers){const n=M(o),r=await e.storage.getChannelMembers(o,w);if(l()&&n===M(o))for(const{channelId:e,updatedAt:n,...s}of r)e===o&&(f.set(v(o,s.userId),{member:s,expiresAt:n+h}),n+h>t()&&g.set(s.userId,s));w=w.filter(e=>!g.has(e))}if(!l())return c.flatMap(e=>g.has(e)?[g.get(e)]:[]);if(w.length>0){const t=M(o),r=await n(e.client,{channelId:o,userIds:w,clientType:e.clientType});if(!r.ok)throw new i(r.code,r.message);if(null!==r.data&&!Array.isArray(r.data))throw new d("data 必须为数组或 null");const s=m((r.data??[]).map(e=>u(e,o))),a=w.filter(e=>!s.some(t=>t.userId===e));let l;p&&a.length>0&&t===M(o)?(await z(o),l=s):l=await N(o,s,t);for(const e of l)g.set(e.userId,e)}return c.flatMap(e=>g.has(e)?[g.get(e)]:[])},invalidateChannelMembers:z,clearCache(){const e=new Set(b.keys());for(const t of f.keys())e.add(t.slice(0,t.indexOf(":")));for(const t of p.keys())e.add(t);for(const t of g.keys())e.add(t);for(const t of w.keys())e.add(t);for(const t of y)e.add(t);for(const t of I)e.add(t);for(const t of e)b.set(t,M(t)+1);f.clear(),p.clear(),g.clear(),w.clear(),y.clear(),I.clear()}}}export{i as ChannelMemberHttpError,d as ChannelMemberMappingError,h as createChannelMemberHttpAdapter};
@@ -0,0 +1 @@
1
+ var e=Object.defineProperty,r=(r,n,t)=>((r,n,t)=>n in r?e(r,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[n]=t)(r,"symbol"!=typeof n?n+"":n,t);import{searchChannelMentionMemberPage as n,getChannelMentionMemberPage as t}from"./requests/channel-mention-members.js";class i extends Error{constructor(e,n){super(`CHANNEL @ member HTTP 失败(${e}):${n||"unknown error"}`),r(this,"code"),this.code=e,this.name="ChannelMentionMemberHttpError"}}class o extends Error{constructor(e){super(`CHANNEL @ member 映射失败:${e}`),this.name="ChannelMentionMemberMappingError"}}function a(e){return"string"==typeof e||"number"==typeof e?String(e).trim():""}function s(e){const r=a(e.user_id);if(""===r)throw new o("user_id 不能为空");const n=a(e.radio_user_nickname)||a(e.nick_name)||a(e.name)||a(e.mid)||r,t=a(e.head_img_url);return{userId:r,displayName:n,...""===t?{}:{avatar:t}}}function c(e){async function r(r,n){const{channelId:t,page:a,pageSize:c}=function(e){const r=e.channelId.trim();if(""===r)throw new o("channelId 不能为空");if(!Number.isInteger(e.limit)||e.limit<=0||e.limit>18)throw new o("limit 必须为 1-18");if(void 0===e.cursor)return{channelId:r,page:1,pageSize:e.limit};if(!/^[1-9]\d*$/.test(e.cursor))throw new o("page cursor 必须为正十进制整数");const n=Number(e.cursor);if(!Number.isSafeInteger(n))throw new o("page cursor 超出安全整数范围");return{channelId:r,page:n,pageSize:e.limit}}(r),u=await n({channelId:t,page:a,pageSize:c,clientType:e.clientType});if(!u.ok)throw new i(u.code,u.message);if(null!==u.data&&!Array.isArray(u.data))throw new o("data 必须为数组或 null");const m=u.data??[],l=function(e){const r=[],n=/* @__PURE__ */new Map;for(const t of e)n.has(t.userId)||r.push(t.userId),n.set(t.userId,t);return r.map(e=>n.get(e))}(m.map(s)),d=m.length<c;return{items:l,exhausted:d,...d?{}:{nextCursor:String(a+1)}}}return{listMentionMembers:n=>r(n,r=>t(e.client,r)),searchMentionMembers:t=>{const i=t.query.trim();return""===i?Promise.reject(new o("搜索关键词不能为空")):r(t,r=>n(e.client,{...r,query:i}))}}}export{i as ChannelMentionMemberHttpError,o as ChannelMentionMemberMappingError,c as createChannelMentionMemberHttpAdapter};
@@ -0,0 +1 @@
1
+ import{ImHttpRequestError as t}from"../../../im-core/src/ports/http-port.js";function e(e){const o=e.fetch??((t,e)=>globalThis.fetch(t,e));return{async postProtobuf({path:r,body:s,headers:a,signal:n}){const i=await e.getBaseUrl();if(!i)throw new Error("CmHttp.postProtobuf:缺少 CM HTTP 基址(getCmHttpBaseUrl 为空)");const p={"Content-Type":"application/octet-stream"},c=e.getClientType?.();void 0!==c&&(p["Client-type"]=String(c)),Object.assign(p,a);const u=await e.getAuth();null!==u&&""!==u.token&&""!==u.userId&&(p.Authorization=`${u.token}:${u.userId}`);const h=await o(`${i}${r}`,{method:"POST",body:s,headers:p,signal:n});if(!h.ok)throw new t({path:r,status:h.status,statusText:h.statusText});const l=await h.arrayBuffer();return new Uint8Array(l)}}}export{e as createCmHttpAdapter};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as e}from"./requests/core-json-request.js";class i extends Error{constructor(e){super(e),this.name="DirectoryMappingError"}}function r(e,r){if(null===e||"object"!=typeof e||Array.isArray(e))throw new i(`${r} 必须是对象`);return e}function n(e){return"string"==typeof e||"number"==typeof e?String(e).trim():""}function t(e){const i=n(e);return""===i?void 0:i}function a(e){const a=r(e,"联系人目录项"),o=void 0===a.user_info?a:r(a.user_info,"联系人 user_info"),d=n(o.user_id??a.friend_user_id??a.user_id);if(""===d)throw new i("联系人目录项缺少稳定 user_id");const s=n(a.remark_name)||n(a.contact_name)||n(o.nick_name)||n(o.username)||n(o.mid)||d,u=n(o.nick_name)||n(o.username)||n(o.mid)||d,c=t(o.head_img_url),p=t(o.username)??t(o.mid);return{id:d,kind:"individual",displayName:s,cardDisplayName:u,...void 0===c?{}:{avatarUrl:c},...void 0===p?{}:{username:p}}}function o(e){const a=r(e,"群组目录项"),o=n(a.group_id);if(""===o)throw new i("群组目录项缺少稳定 group_id");const d=t(a.head_img_url),s=n(a.name)||o;return{id:o,kind:"group",displayName:s,cardDisplayName:s,...void 0===d?{}:{avatarUrl:d}}}function d(e){const a=r(e,"社群目录项"),o=n(a.radio_id??a.id);if(""===o)throw new i("社群目录项缺少稳定 radio_id/id");const d=t(a.head_img_url),s=n(a.name)||o;return{id:o,kind:"channel",displayName:s,cardDisplayName:s,...void 0===d?{}:{avatarUrl:d}}}function s(r){return{async list(n){!function(e,r){if(!Number.isSafeInteger(e)||e<1)throw new i("目录 page 必须是正整数");if(!Number.isSafeInteger(r)||r<1||r>100)throw new i("目录 pageSize 必须是 1-100 的整数")}(n.page,n.pageSize);const t="individual"===n.kind?"/friend/list":"group"===n.kind?"/user_group/list":"/user_radio/list",s="channel"===n.kind&&void 0!==r.getUserId?String(await r.getUserId()).trim():"",u=(await e(r.client,t,{...""===s?{}:{user_id:s},update_version:0,page:n.page,page_size:n.pageSize},{responseMode:"strict",method:"GET",...void 0===r.clientType?{}:{headers:{"Client-type":String(r.clientType)}}})).data??[];if(!Array.isArray(u))throw new i(`${n.kind} 目录 data 必须是数组`);const c="individual"===n.kind?a:"group"===n.kind?o:d,p=/* @__PURE__ */new Map;for(const e of u){const i=c(e);p.set(i.id,i)}const m=u.length<n.pageSize;return{items:[...p.values()],...m?{}:{nextPage:n.page+1},exhausted:m}}}}export{i as DirectoryMappingError,s as createDirectoryHttpAdapter};
@@ -0,0 +1 @@
1
+ var e=Object.defineProperty,t=(t,i,r)=>((t,i,r)=>i in t?e(t,i,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[i]=r)(t,"symbol"!=typeof i?i+"":i,r);import{requestCoreJson as i,CoreJsonBusinessError as r}from"./requests/core-json-request.js";class n extends Error{constructor(e){super("core"===e?"表情 Core API 未配置":"Giphy API key 未配置"),t(this,"provider"),this.provider=e,this.name="ExpressionProviderUnavailableError"}}class o extends Error{constructor(e){super(e),this.name="ExpressionMappingError"}}class s extends Error{constructor(e,i){super(`Giphy 请求失败:HTTP ${e}${i?` ${i}`:""}`),t(this,"status"),this.status=e,this.name="GiphyHttpError"}}function a(e,t){if(null===e||"object"!=typeof e||Array.isArray(e))throw new o(`${t} 必须是对象`);return e}function c(e){return"string"==typeof e||"number"==typeof e?String(e).trim():""}function u(e,t){const i=c(e);if(""===i)throw new o(`${t} 不能为空`);return i}function f(e){const t=c(e);return""===t?void 0:t}function l(e,t){const i=Number(e);if(!Number.isSafeInteger(i)||i<0)throw new o(`${t} 必须是非负整数`);return i}function d(e,t){const i=Number(e);if(!Number.isSafeInteger(i))throw new o(`${t} 必须是安全整数`);return i}function h(e,t){const i=Number(e);if(!Number.isFinite(i)||i<=0)throw new o(`${t} 必须是有限正数`);return i}function p(e,t){const i=u(e,t);let r;try{r=new URL(i)}catch(e){throw new o(`${t} 不是合法 URL:${e instanceof Error?e.message:String(e)}`)}if("https:"!==r.protocol&&"http:"!==r.protocol)throw new o(`${t} 只支持 HTTP(S)`);if(""!==r.username||""!==r.password)throw new o(`${t} 不允许包含 URL 凭据`);return i}function m(e,t){if(null==e)return[];if(Array.isArray(e))return e;const i=a(e,t).list;if(null==i)return[];if(!Array.isArray(i))throw new o(`${t}.list 必须是数组或 null`);return i}function y(e){return"sticker"===e?1:"gif"===e?2:3}function w(e){const t=a(e,"贴图包"),i=f(t.onlineTime??t.online_time),r=t.isPlatformIssued??t.is_platform_issued;return{id:u(t.packId??t.pack_id,"贴图包 packId"),nameZh:c(t.nameZh??t.name_zh),nameEn:c(t.nameEn??t.name_en),nameTh:c(t.nameTh??t.name_th),nameTw:c(t.nameTw??t.name_tw),nameVi:c(t.nameVi??t.name_vi),publisher:c(t.publisher),trayIconUrl:p(t.trayIcon??t.tray_icon,"贴图包 trayIcon"),sortWeight:d(t.sortWeight??t.sort_weight??0,"贴图包 sortWeight"),isPlatformIssued:!0===r||1===Number(r),...void 0===i?{}:{onlineTime:i},stickerCount:l(t.stickerCount??t.sticker_count??0,"贴图包 stickerCount")}}function g(e,t,i,r){const n=a(e,i),o=f(n.id),s={...void 0===o?{}:{recordId:o},url:p(n.imgUrl??n.img_url,`${i} imgUrl`),width:l(n.width??0,`${i} width`),height:l(n.height??0,`${i} height`)};if("sticker"===t)return{kind:t,...s,packageId:u(r??n.packId??n.pack_id,`${i} packageId`),resourceId:u(n.fileName??n.file_name,`${i} resourceId`)};const c=f(n.fileName??n.file_name);return{kind:t,...s,...void 0===c?{}:{resourceId:c}}}function v(e,t,i){const r=y(t);return m(e,i).filter(e=>{const t=a(e,`${i} item`),n=t.favType??t.fav_type;if(null==n)return!0;const s=Number(n);if(1!==s&&2!==s&&3!==s)throw new o(`${i} item.favType 必须是 1、2 或 3`);return s===r})}function k(e){return{fav_type:y(e.kind),pack_id:"sticker"===e.kind?e.packageId:"",img_url:p(e.url,"表情写入 imgUrl"),file_name:e.resourceId??"",width:e.width,height:e.height}}function _(e){const t=[...new Set(e.map(e=>e.trim()).filter(Boolean))];if(0===t.length||t.length>30||t.some(e=>e.includes("|")))throw new o("批量删除 recordIds 必须包含 1-30 个不含竖线的唯一非空 id");return t.join("|")}function I(e){const t=a(e,"Giphy item"),i=a(t.images,"Giphy item.images"),r=a(i.original,"Giphy item.images.original"),n=i.fixed_width,o=null==n?void 0:a(n,"Giphy item.images.fixed_width"),s=p(r.url,"Giphy original.url"),l=void 0===o?void 0:f(o.url),d=void 0===o?void 0:f(o.webp),m=void 0===d?void 0===l?s:p(l,"Giphy fixed_width.url"):p(d,"Giphy fixed_width.webp"),y=void 0!==d&&void 0!==l&&l!==d?p(l,"Giphy fixed_width.url"):void 0;return{kind:"gif",resourceId:u(t.id,"Giphy item.id"),title:c(t.title)||"GIF",url:s,previewUrl:m,...void 0===y?{}:{fallbackPreviewUrl:y},width:h(r.width,"Giphy original.width"),height:h(r.height,"Giphy original.height")}}function b(e){async function t(t,o,s){if(void 0===e.coreClient)throw new n("core");const a=await i(e.coreClient,t,o,{method:"POST",responseMode:"strict"});if(!a.ok)throw new r(s,a.code,a.message);return a.data}async function d(t,i){const r=e.giphyApiKey?.trim()??"";if(""===r)throw new n("giphy");const u=e.fetcher??globalThis.fetch;if("function"!=typeof u)throw new n("giphy");const f=new URLSearchParams({api_key:r,limit:String(i.limit),offset:String(i.offset),...void 0===i.query?{}:{q:i.query,lang:"en"}});let d,h;try{d=await u(`https://api.giphy.com/v1/gifs/${t}?${f.toString()}`)}catch{throw new s(0,"network failure")}try{h=await d.json()}catch(e){if(!d.ok)throw new s(d.status,"");throw new o(`Giphy response 不是 JSON:${e instanceof Error?e.message:String(e)}`)}if(!d.ok){const e=null===h||"object"!=typeof h||Array.isArray(h)?void 0:h.meta,t=null===e||"object"!=typeof e||Array.isArray(e)?"":c(e.msg);throw new s(d.status,t)}const p=null===h||"object"!=typeof h||Array.isArray(h)?void 0:h.meta;if(null!==p&&"object"==typeof p&&!Array.isArray(p)){const e=p,t=Number(e.status);if(Number.isFinite(t)&&200!==t)throw new s(t,c(e.msg))}return function(e,t){const i=a(e,"Giphy response");if(!Array.isArray(i.data))throw new o("Giphy response.data 必须是数组");const r=a(i.pagination,"Giphy response.pagination"),n=l(r.offset??t,"Giphy pagination.offset");if(n!==t)throw new o("Giphy pagination.offset 与请求 offset 不一致");const s=l(r.count??i.data.length,"Giphy pagination.count"),c=l(r.total_count??r.totalCount??0,"Giphy pagination.total_count"),u=/* @__PURE__ */new Map;for(const e of i.data){const t=I(e);u.set(t.resourceId,t)}const f=n+s;return{items:[...u.values()],offset:n,totalCount:c,...s>0&&f<c?{nextOffset:f}:{}}}(h,i.offset)}return{async listStickerPacks(e){const i=await t("/user/sticker/pack_list",void 0===e?{}:{version:e},"贴图包列表");if(Array.isArray(i))return{version:"",items:i.map(w)};if(null==i)return{version:"",items:[]};const r=a(i,"贴图包列表 data"),n=r.list??r.packs;if(null==n)return{version:c(r.version),items:[]};if(!Array.isArray(n))throw new o("贴图包列表 data.list 必须是数组或 null");return{version:c(r.version),items:n.map(w)}},listStickerItems:async e=>m(await t("/user/sticker/item_list",{pack_id:e},"贴图明细列表"),"贴图明细列表 data").map(t=>g(t,"sticker","贴图明细",e)),listFavorites:async e=>v(await t("/user/sticker/my_fav/list",{fav_type:y(e)},"表情收藏列表"),e,"表情收藏列表 data").map(t=>g(t,e,"表情收藏项")),async addFavorite(e){await t("/user/sticker/my_fav/add",k(e),"添加表情收藏")},async deleteFavorites(e){await t("/user/sticker/my_fav/del",{ids:_(e)},"删除表情收藏")},listRecent:async e=>v(await t("/user/sticker/recent/list",{fav_type:y(e)},"最近使用列表"),e,"最近使用列表 data").map(t=>function(e,t){if("emoji"!==t)return g(e,t,"最近使用项");const i=a(e,"最近 emoji"),r=f(i.id);return{kind:"emoji",...void 0===r?{}:{recordId:r},token:u(i.imgUrl??i.img_url,"最近 emoji token"),resourceId:u(i.fileName??i.file_name,"最近 emoji resourceId")}}(t,e)),async reportRecent(e){await t("/user/sticker/recent/report",function(e){return"emoji"!==e.kind?k(e):{fav_type:y(e.kind),pack_id:"",img_url:e.token,file_name:e.resourceId,width:0,height:0}}(e),"上报最近使用")},async deleteRecent(e){await t("/user/sticker/recent/del",{ids:_(e)},"删除最近使用")},listReactionTop:async e=>m(await t("/user/reaction/emoji/top",void 0===e?{}:{limit:e},"快捷回应 Top 列表"),"快捷回应 Top data").map(e=>u(a(e,"快捷回应 Top 项").emoji,"快捷回应 emoji")),async reportReaction(e){await t("/user/reaction/emoji/report",{emoji:e},"上报快捷回应")},listGiphyTrending:e=>d("trending",e),searchGiphy:e=>d("search",e)}}export{o as ExpressionMappingError,n as ExpressionProviderUnavailableError,s as GiphyHttpError,b as createExpressionHttpAdapter};
@@ -0,0 +1 @@
1
+ function t(t,r=async t=>{const{createBrowserApiProtocolClient:r}=await import("../../../api-protocol-client/src/browser.js");return r(t)}){let n=null;return async(o,c)=>(await function(){if(null!==n)return n;const o=r(t);return n=o,o.catch(()=>{n===o&&(n=null)}),o}())(o,c)}export{t as createLazyBrowserApiProtocolClient};
@@ -0,0 +1 @@
1
+ import{getGroupInfo as e}from"./requests/get-group-info.js";import{getGroupMemberList as t}from"./requests/get-group-member-list.js";import{getUserInfoFriend as r}from"./requests/get-user-info-friend.js";import{getUserInfoOther as n}from"./requests/get-user-info-other.js";import{toUserProfile as a,toGroupProfile as o}from"../../../im-core/src/mapping/profile-mapper.js";function u(e,t,r=864e5){const n=/* @__PURE__ */new Map,a=/* @__PURE__ */new Map,o=/* @__PURE__ */new Map;function u(r){const u=(o.get(r)??0)+1;o.set(r,u);const s=e(r).then(e=>(null!==e&&o.get(r)===u&&(n.set(r,e),t?.save(r,e).catch(()=>{})),e)).finally(()=>{a.get(r)===s&&a.delete(r)});return a.set(r,s),s}return{get:async(e,s)=>{if(!0===s?.forceRefresh)return u(e);const i=n.get(e);if(void 0!==i)return i;const l=a.get(e);if(void 0!==l)return l;if(void 0!==t)try{const a=o.get(e)??0,s=await t.get(e);if(null!==s)return(o.get(e)??0)===a&&(n.set(e,s.value),Date.now()-s.updatedAt>r&&u(e)),s.value}catch{}return u(e)},peek:async e=>{const a=n.get(e);if(void 0!==a)return{value:a,stale:!1};if(void 0===t)return null;try{const a=o.get(e)??0,u=await t.get(e);if(null!==u)return(o.get(e)??0)===a&&n.set(e,u.value),{value:u.value,stale:Date.now()-u.updatedAt>r}}catch{}return null},clear:()=>{for(const e of/* @__PURE__ */new Set([...n.keys(),...a.keys(),...o.keys()]))o.set(e,(o.get(e)??0)+1);n.clear(),a.clear()}}}function s(s){function i(e){const t={};for(const r of e)""!==r.nickName&&(t[r.userId]=r.nickName);return t}const{storage:l}=s,c=void 0===l?void 0:{get:async e=>{const t=await l.getUserProfile(e);return null===t?null:{value:t,updatedAt:t.updatedAt}},save:async(e,t)=>{await l.saveUserProfile({...t,updatedAt:Date.now()})}},p=void 0===l?void 0:{get:async e=>{const t=await l.getGroupMembers(e);return null===t?null:{value:t.members.map(e=>({userId:e.userId,nickName:e.groupNick,...void 0===e.joinType?{}:{joinType:e.joinType}})),updatedAt:t.updatedAt}},save:async(e,t)=>{const r=t.map(e=>({userId:e.userId,groupNick:e.nickName,...void 0===e.joinType?{}:{joinType:e.joinType}}));await l.saveGroupMembers({groupId:e,members:r,updatedAt:Date.now()})}},d=void 0===l?void 0:{get:async e=>{const t=await l.getGroupProfile(e);return null===t?null:{value:t,updatedAt:t.updatedAt}},save:async(e,t)=>{await l.saveGroupProfile({...t,updatedAt:Date.now()})}},g=u(async function(e){const t=await r(s.client,{userId:e})??await n(s.client,{userId:e});return null===t?null:a(t)},c),f=u(async function(t){const r=await e(s.client,{groupId:t,clientType:s.clientType});return null===r?null:o(r)},d),m=u(async function(e){const{members:r}=await t(s.client,{groupId:e,clientType:s.clientType});return 0===r.length?null:r},p);return{getUserProfile:(e,t)=>g.get(e,t),getGroupProfile:(e,t)=>f.get(e,t),getGroupMemberNames:async(e,t)=>{const r=await m.get(e,t);return null===r?null:i(r)},listGroupMembers:(e,t)=>m.get(e,t),peekUserProfile:e=>g.peek(e),peekGroupMemberNames:async e=>{const t=await m.peek(e);return null===t?null:{value:i(t.value),stale:t.stale}},peekGroupMembers:e=>m.peek(e),peekGroupProfile:e=>f.peek(e),clearCache:()=>{g.clear(),f.clear(),m.clear()}}}export{s as createProfileHttpAdapter};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as e}from"./core-json-request.js";function i(e,i){return{responseMode:"strict",method:i,...void 0===e?{}:{headers:{"Client-type":String(e)}}}}function t(t,n){return e(t,"/friend/apply/list_paginated",{type:n.listType,page:n.page,page_size:n.pageSize},i(n.clientType,"GET"))}function n(t,n){return e(t,"/friend/apply/agree",{id:n.applicationId},i(n.clientType,"POST"))}function p(t,n){return e(t,"/friend/apply/del",{id:n.applicationId},i(n.clientType,"POST"))}export{n as acceptApplication,t as getApplicationPage,p as ignoreApplication};
@@ -0,0 +1 @@
1
+ var o=Object.defineProperty,e=(e,r,n)=>((e,r,n)=>r in e?o(e,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[r]=n)(e,"symbol"!=typeof r?r+"":r,n);import{requestCoreJson as r}from"./core-json-request.js";class n extends Error{constructor(o,r,n){super(`${"bind"===o?"绑定":"解绑"}机器人失败(${r}):${n||"unknown error"}`),e(this,"responseCode"),e(this,"operation"),this.name="RobotConversationBindError",this.responseCode=r,this.operation=o}}class t extends Error{constructor(o){super(o),this.name="RobotConversationBindMappingError"}}async function i(o,e,i){const s=function(o){const e=o.robotId.trim(),r=o.conversationId.trim();if(""===e)throw new t("绑定机器人 robotId 不能为空");if(""===r)throw new t("绑定机器人 conversationId 不能为空");if(1!==o.groupType&&2!==o.groupType)throw new t("绑定机器人 groupType 必须是 1 或 2");return{robotId:e,conversationId:r,groupType:o.groupType,...void 0===o.clientType?{}:{clientType:o.clientType}}}(i),p="bind"===e?"/robot/bind_group":"/robot/un_bind_group",d=await r(o,p,{robot_id:s.robotId,object_id:s.conversationId,relation_type:s.groupType},{responseMode:"strict",method:"POST",...void 0===s.clientType?{}:{headers:{"Client-type":String(s.clientType)}}});if(!d.ok)throw new n(e,d.code,d.message)}function s(o,e){return i(o,"bind",e)}function p(o,e){return i(o,"unbind",e)}export{n as RobotConversationBindError,t as RobotConversationBindMappingError,s as bindRobotToConversation,p as unbindRobotFromConversation};
@@ -0,0 +1 @@
1
+ function n(n){if(""===n.trim())throw new Error("board pinned message groupId 不能为空")}function r(n){if(""===n.trim())throw new Error("channel board pinned message channelId 不能为空")}export{r as assertBoardChannelId,n as assertBoardGroupId};
@@ -0,0 +1 @@
1
+ import{getApplicationPage as e,ignoreApplication as n,acceptApplication as t}from"./applications.js";function i(n,t){return e(n,{listType:2,page:t.page,pageSize:t.pageSize,clientType:t.clientType})}function p(e,n){return t(e,n)}function r(e,t){return n(e,t)}export{p as acceptChannelJoinApplication,i as getChannelJoinApplicationPage,r as ignoreChannelJoinApplication};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as e,CoreJsonBusinessError as i}from"./core-json-request.js";function n(e){const i=Number(e);return Number.isSafeInteger(i)&&String(i)===e?i:e}async function r(n,r,d,t){const a=await e(n,r,d,{method:"POST",responseMode:"strict"});if(!a.ok)throw new i(t,a.code,a.message)}function d(e){return r(e.client,"/user_radio/edit",{radio_id:e.channelId,...void 0===e.name?{}:{name:e.name},...void 0===e.avatarUrl?{}:{head_img_url:e.avatarUrl},...void 0===e.description?{}:{desc:e.description}},"修改社群资料")}function t(e){return r(e.client,"/user_radio/user/setting",{radio_id:e.channelId,nick_name:e.nickname},"修改社群昵称")}function a(e){return r(e.client,"/user_radio/member/edit",{radio_id:e.channelId,radio_user_id:e.userId,nick_name:e.nickname},"修改社群昵称")}function o(e){const i=e.userIds.map(e=>({user_id:n(e)}));return r(e.client,"/user_radio/invited_users",{radio_id:e.channelId,members:JSON.stringify(i)},"邀请社群成员")}function u(e){return r(e.client,"/user_radio/kick_user",{radio_id:e.channelId,user_id:e.userId},"移除社群成员")}function s(e){return r(e.client,"/user_radio/add_admin",{radio_id:e.channelId,user_id:e.userId},"设为社群管理员")}function c(e){return r(e.client,"/user_radio/del_admin",{radio_id:e.channelId,user_id:e.userId},"取消社群管理员")}function _(e){return r(e.client,"/user_radio/transfer",{radio_id:e.channelId,user_id:e.userId},"转让社群")}function l(e){return r(e.client,"/user_radio/user/quit",{radio_id:e.channelId,...void 0===e.newOwnerId?{}:{user_id:e.newOwnerId}},"退出社群")}function f(e){return r(e.client,"/user_radio/edit_setting",{radio_id:e.channelId,verify_way:e.verifyType,...4===e.verifyType&&void 0!==e.inviteCode?{invite_code:e.inviteCode}:{}},"修改社群入群验证方式")}function m(e){return r(e.client,"/user_radio/edit_setting",{radio_id:e.channelId,is_unspeeking_all:e.muted?"1":"0"},e.muted?"开启社群全员禁言":"关闭社群全员禁言")}function I(e){return r(e.client,"/user_radio/edit_setting",{radio_id:e.channelId,is_unvisit_other:e.disabled?"1":"0"},e.disabled?"开启社群全员禁私聊":"关闭社群全员禁私聊")}function h(e){return r(e.client,"/user_radio/closed",{radio_id:e.channelId},"解散社群")}export{s as addChannelAdmin,h as dismissChannel,o as inviteChannelMembers,l as leaveChannel,c as removeChannelAdmin,u as removeChannelMember,m as setChannelAllMuted,a as setChannelMemberNickname,I as setChannelMemberPrivateChatDisabled,t as setChannelMyNickname,_ as transferChannelOwnership,d as updateChannelInfo,f as updateChannelVerification};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as e}from"./core-json-request.js";function r(e,r){return{responseMode:"strict",method:r,...void 0===e?{}:{headers:{"Client-type":String(e)}}}}function i(i,n){return e(i,"/user_radio/users",{radio_id:n.channelId,page:n.page,page_size:n.pageSize},r(n.clientType,"GET"))}function n(i,n){return e(i,"/user_radio/search_user",{radio_id:n.channelId,nick_name:n.query,page:n.page,page_size:n.pageSize,update_version:n.updateVersion??"0"},r(n.clientType,"POST"))}function a(i,n){return e(i,"/user_radio/admins",{radio_id:n.channelId,page:n.page,page_size:n.pageSize},r(n.clientType,"GET"))}function s(i,n){return e(i,"/user_radio/user/infos",{radio_id:n.channelId,user_ids:n.userIds.join(",")},r(n.clientType,"POST"))}export{a as getChannelAdminPage,i as getChannelMemberPage,s as getChannelMembersByIds,n as searchChannelMemberPage};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as e}from"./core-json-request.js";function r(e){return{responseMode:"strict",method:"POST",...void 0===e?{}:{headers:{"Client-type":String(e)}}}}function i(i,n){return e(i,"/user_radio/member/list",{radio_id:n.channelId,page:n.page,page_size:n.pageSize},r(n.clientType))}function n(i,n){return e(i,"/user_radio/member/search",{radio_id:n.channelId,search_name:n.query,page:n.page,page_size:n.pageSize},r(n.clientType))}export{i as getChannelMentionMemberPage,n as searchChannelMentionMemberPage};
@@ -0,0 +1 @@
1
+ import{throwIfAborted as n}from"../../../../im-core/src/abort.js";import{encodeChannelMessagesRequest as e,decodeChannelMessagesResponse as o}from"../../../../im-core/src/mapping/channel-offline-mapper.js";async function r(r){n(r.signal),function(n,e){if(!/^\d+$/.test(n))throw new Error(`CHANNEL ${e} id 非法:${n}`);const o=BigInt(n);if(o<=0n)throw new Error(`CHANNEL ${e} id 非法:${n}`)}(r.channelId,"channel");const t=r.index.trim();if(""===t)throw new Error("CHANNEL 历史上下文 index 缺失");void 0!==r.decryptDeps&&void 0!==r.prepareKey&&await r.prepareKey(r.channelId),n(r.signal);const s=r.containAnchor??!0,i=e({userId:r.userId,clientType:r.clientType,pulls:[{channelId:r.channelId,baseIndex:t,direction:0,count:20,contain:s?1:0}]}),a=await r.http.postProtobuf({path:"/channel/v1/offlineMessages",body:i,...void 0===r.signal?{}:{signal:r.signal}});n(r.signal);const c=o(a,{selfId:r.userId,keepRaw:!0,expectedChannelIds:[r.channelId],onContentDecodeError:r.onContentDecodeError,onReaction:r.onReaction},r.decryptDeps);if(s){const n=c.messages.filter(n=>n.extensions?.historyCursor===t);if(1!==n.length)throw new Error(`CHANNEL 历史上下文 anchor 必须一一对应(channelId=${r.channelId}, index=${t}, count=${n.length})`)}const d=c.nextBaseIndexes[r.channelId];return{messages:c.messages,hasNewer:20===(c.messageCounts[r.channelId]??0)&&void 0!==d&&d!==t,...void 0===d?{}:{nextCursor:d}}}export{r as pullChannelMessageContext};
@@ -0,0 +1 @@
1
+ function i(i){const e="string"==typeof i||"number"==typeof i?String(i).trim():"";return""===e?void 0:e}function e(i){const e=Number(i);return 1===e?{configType:"pinned-game"}:2===e?{configType:"float-link"}:3===e?{configType:"float-game"}:Number.isInteger(e)&&e>=0?{configType:"unknown",rawConfigType:e}:{configType:"unknown"}}function n(n,o){return Array.isArray(n.mini_program_rel_list)?n.mini_program_rel_list.filter(i=>null!==i&&"object"==typeof i).map(n=>function(n){const o=Number(n.product_id),r=function(i){if("boolean"==typeof i)return i;if("number"==typeof i)return 0!==i&&(1===i||void 0);if("string"==typeof i){const e=i.trim();if("0"===e||"false"===e.toLowerCase())return!1;if("1"===e||"true"===e.toLowerCase())return!0}}(n.is_dynamic);return{...e(n.config_type),...void 0===i(n.appid)?{}:{appId:i(n.appid)},...Number.isInteger(o)?{productId:o}:{},...void 0===i(n.domain)?{}:{domain:i(n.domain)},...void 0===i(n.suffix_address)?{}:{suffixAddress:i(n.suffix_address)},...void 0===i(n.developer_id)?{}:{developerId:i(n.developer_id)},...void 0===i(n.introduction)?{}:{introduction:i(n.introduction)},...void 0===i(n.icon)?{}:{icon:i(n.icon)},...void 0===i(n.icon_small)?{}:{iconSmall:i(n.icon_small)},...void 0===i(n.icon_medium)?{}:{iconMedium:i(n.icon_medium)},...void 0===i(n.icon_large)?{}:{iconLarge:i(n.icon_large)},...void 0===r?{}:{isDynamic:r},...void 0===i(n.lang_types)?{}:{langTypes:i(n.lang_types)},...void 0===i(n.currency_types)?{}:{currencyTypes:i(n.currency_types)},...void 0===i(n.simple_chinese_name)?{}:{nameZhHans:i(n.simple_chinese_name)},...void 0===i(n.unsimplified_chinese_name)?{}:{nameZhHant:i(n.unsimplified_chinese_name)},...void 0===i(n.english_name)?{}:{nameEn:i(n.english_name)},...void 0===i(n.vietnamese_name)?{}:{nameVi:i(n.vietnamese_name)},...void 0===i(n.thai_name)?{}:{nameTh:i(n.thai_name)},...void 0===i(n.h5_url)?{}:{h5Url:i(n.h5_url)}}}(n)):"info"===o.source?[]:void 0}export{n as mapChannelMiniProgramRels};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as e}from"./core-json-request.js";function r(e,r){return{responseMode:"strict",method:r,...void 0===e?{}:{headers:{"Client-type":String(e)}}}}function i(i,n){return e(i,"/user_radio/list",{user_id:n.userId,update_version:n.updateVersion,page:n.page,page_size:n.pageSize},r(n.clientType,"GET"))}function n(i,n){return e(i,"/user_radio/info",{radio_id:n.channelId},r(n.clientType,"POST"))}export{n as getChannelProfileInfo,i as getChannelProfilePage};
@@ -0,0 +1 @@
1
+ import{updateChannelReadIndexReqCodec as e,updateChannelReadIndexRespCodec as r}from"../../../../im-protocol/src/protobuf/registry.js";async function n(n){const o=function(e){if(0===e.length)throw new Error("CHANNEL readIndexes/edit 至少需要一个 index");const r=/* @__PURE__ */new Set;return e.map(e=>{d(e.channelId,"channel");const n=e.readCursor.trim();if(""===n)throw new Error(`CHANNEL readIndexes/edit cursor 缺失(channelId=${e.channelId})`);if(r.has(e.channelId))throw new Error(`CHANNEL readIndexes/edit 频道重复(channelId=${e.channelId})`);return r.add(e.channelId),{channelId:e.channelId,readCursor:n}})}(n.indexes),t=e.encode(e.create({sUserId:d(n.userId,"user"),lsIndex:o.map(e=>({sChnnId:d(e.channelId,"channel"),sIndex:e.readCursor}))})),a=await n.http.postProtobuf({path:"/channel/v1/readIndexes/edit",body:t}),c=r.decode(a);if(0!==c.errcode)throw new Error(`CHANNEL readIndexes/edit 失败:errcode=${c.errcode}`)}function d(e,r){if(!/^\d+$/.test(e))throw new Error(`CHANNEL readIndexes ${r} id 非法:${e}`);const n=BigInt(e);if(n<=0n)throw new Error(`CHANNEL readIndexes ${r} id 非法:${e}`);return n}export{n as updateChannelReadIndexes};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as r}from"./core-json-request.js";function e(r){return"string"==typeof r||"number"==typeof r?String(r).trim():""}function o(r){return null===r||"object"!=typeof r||Array.isArray(r)?void 0:r}async function t(t){const n=await r(t,"/friend/black/list",{},{responseMode:"strict",method:"POST"});if(!n.ok)throw new Error(`加载黑名单失败(${n.code}):${n.message||"unknown error"}`);if(null===n.data||void 0===n.data)return Object.freeze([]);if(!Array.isArray(n.data))throw new Error("加载黑名单:响应 data 必须是数组");return Object.freeze(n.data.map(r=>{const t=o(r),n=o(t?.user_info);if(void 0===t||void 0===n)throw new Error("加载黑名单:响应缺少 user_info");const i=e(t.user_id),a=e(n.user_id),s=a||i;if(""===s)throw new Error("加载黑名单:响应缺少 user_id");if(""!==i&&""!==a&&i!==a)throw new Error("加载黑名单:关系记录与 user_info 身份不一致");const c=e(n.nick_name??n.nickname)||s,d=e(t.remark_name),u=e(n.head_img_url??n.avatar);return Object.freeze({userId:s,displayName:d||c,nickname:c,...""===d?{}:{remark:d},...""===u?{}:{avatarUrl:u}})}))}async function n(e,o){const t=o.userId.trim();if(""===t)throw new Error("设置黑名单:userId 不能为空");const n=await r(e,"/user/black/set",{friend_user_id:t,status:o.blocked?2:1},{responseMode:"strict",method:"POST"});if(!n.ok)throw new Error(`${o.blocked?"加入":"移出"}黑名单失败(${n.code}):${n.message||"unknown error"}`)}export{t as listBlockedContacts,n as setContactBlocked};
@@ -0,0 +1 @@
1
+ var e=Object.defineProperty,r=(r,t,n)=>((r,t,n)=>t in r?e(r,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):r[t]=n)(r,"symbol"!=typeof t?t+"":t,n);import{requestCoreJson as t}from"./core-json-request.js";class n extends Error{constructor(e,t){super(`搜索用户失败(${e}):${t||"unknown error"}`),r(this,"responseCode"),this.name="ContactUserSearchError",this.responseCode=e}}class s extends Error{constructor(e,t,n){super(`发送好友申请失败(${t}):${n||"unknown error"}`),r(this,"kind"),r(this,"responseCode"),this.name="ContactFriendshipRequestError",this.kind=e,this.responseCode=t}}const i=40112,o=40121,a=40122,d=36875;function u(e){return"string"==typeof e||"number"==typeof e?String(e).trim():""}function c(e){const r=u(e);return""===r?void 0:r}function m(e){const r=Array.isArray(e)?e[0]:e;return null!==r&&"object"==typeof r?r:void 0}async function f(e,r){const s=r.query.trim();if(""===s)throw new Error("搜索用户:query 不能为空");const i=await t(e,"/user/info/search",{username:s},{responseMode:"strict",...void 0===r.clientType?{}:{headers:{"Client-type":String(r.clientType)}}});if(!i.ok)throw new n(i.code,i.message);const o=m(i.data);if(void 0===o)return null;const a=u(o.user_id??o.userId);if(""===a)throw new Error("搜索用户:响应缺少 user_id");const d=u(o.nick_name??o.nickname??o.name)||a,f=o.friend_status??o.friendStatus,l=void 0===f?void 0:Number(f);if(void 0!==l&&!Number.isInteger(l))throw new Error("搜索用户:friend_status 非法");return{userId:a,nickname:d,...void 0===c(o.username)?{}:{username:c(o.username)},...void 0===c(o.mid)?{}:{miCallId:c(o.mid)},...void 0===c(o.head_img_url??o.avatar)?{}:{avatarUrl:c(o.head_img_url??o.avatar)},...void 0===c(o.per_signature??o.signature)?{}:{signature:c(o.per_signature??o.signature)},...void 0===l?{}:{friendStatus:l}}}async function l(e,r){const n=r.userId.trim(),d=r.message.trim(),u=r.remark?.trim();if(""===n||""===d)throw new Error("发送好友申请:userId 和 message 不能为空");const f=await t(e,"/friend/apply/do",{to_user_id:n,remarks:d,...void 0===u||""===u?{}:{remark_nick_name:u}},{responseMode:"strict",method:"POST",...void 0===r.clientType?{}:{headers:{"Client-type":String(r.clientType)}}});if(!f.ok)throw new s(function(e){switch(e){case i:return"hidden-contact";case o:return"own-friend-limit";case a:return"target-friend-limit";default:return"remote"}}(f.code),f.code,f.message);const l=m(f.data),p=Number(l?.status??0);if(0!==p&&1!==p&&2!==p)throw new Error(`发送好友申请:未知结果状态 ${p}`);const h=c(l?.message??l?.msg??f.message);return{status:p,...void 0===h?{}:{message:h}}}async function p(e,r){const n=r.userId.trim();if(""===n)throw new Error("删除好友:userId 不能为空");const s=await t(e,"/friend/del",{friend_user_id:n},{responseMode:"strict",method:"POST",...void 0===r.clientType?{}:{headers:{"Client-type":String(r.clientType)}}});if(!s.ok&&40113!==s.code)throw new Error(`删除好友失败(${s.code}):${s.message||"unknown error"}`)}export{d as CONTACT_USER_SEARCH_NO_MATCH_CODE,s as ContactFriendshipRequestError,n as ContactUserSearchError,p as deleteContactFriendship,l as requestContactFriendship,f as searchContactUser};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as r,CoreJsonBusinessError as e}from"./core-json-request.js";async function o(o,t){const s=t.reporterUserId.trim(),i=t.targetUserId.trim(),d=t.problem.trim();if(""===s||""===i||""===d)throw new Error("举报联系人:reporterUserId、targetUserId 和 problem 不能为空");const m=await r(o,"/user/report_user/add",{user_id:s,to_user_id:i,problem:d,images:"1"},{responseMode:"strict",method:"POST"});if(!m.ok)throw new e("举报联系人",m.code,m.message)}export{o as reportContact};
@@ -0,0 +1 @@
1
+ var e=Object.defineProperty,o=(o,r,t)=>((o,r,t)=>r in o?e(o,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[r]=t)(o,"symbol"!=typeof r?r+"":r,t);const r="core",t=200,s=502;class a extends Error{constructor(e,r){super(`core JSON 传输失败:${e||"unknown transport error"}`,void 0===r?void 0:{cause:r}),o(this,"code",502),this.name="CoreJsonTransportError"}}class n extends Error{constructor(e,r,t){super(`${e}失败:code=${r}${t?` ${t}`:""}`),o(this,"businessCode"),o(this,"operation"),this.name="CoreJsonBusinessError",this.businessCode=r,this.operation=e}}async function d(e,o,s,n){const d=void 0!==n&&"responseMode"in n&&"strict"===n.responseMode;let i;try{i=await e(o,{target:r,data:s,...void 0===n?.method?{}:{method:n.method},...void 0===n?.headers?{}:{headers:n.headers},...void 0===n?.prefix?{}:{prefix:n.prefix}})}catch(e){if(d)throw new a(e instanceof Error?e.message:String(e),e);throw e}if(d){const e="string"==typeof i.msg?i.msg:"";if(502===i.code)throw new a(e);return i.code!==t?{ok:!1,code:i.code,message:e,data:i.data}:{ok:!0,code:t,message:e,data:i.data}}return{code:i.code,data:i.code===t&&null!=i.data?i.data:null}}export{t as CORE_JSON_CODE_SUCCESS,r as CORE_JSON_TARGET,s as CORE_JSON_TRANSPORT_FAILURE_CODE,n as CoreJsonBusinessError,a as CoreJsonTransportError,d as requestCoreJson};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as e}from"./core-json-request.js";function r(e){const r=Number(e);return Number.isSafeInteger(r)&&String(r)===e?r:e}function t(t){const n=t.memberIds.map(e=>({user_id:r(e)}));return e(t.client,"/user_radio/create",{name:t.name,secret_key:t.secretKey,is_hidden:"0",members:JSON.stringify(n),...void 0===t.avatarUrl?{}:{head_img_url:t.avatarUrl}},{method:"POST",responseMode:"strict"})}export{t as createChannel};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as e}from"./core-json-request.js";function r(r){return e(r.client,"/user_group/create_face",{is_hidden:"0"},{method:"POST",responseMode:"strict"})}export{r as createFaceToFaceGroup};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as e}from"./core-json-request.js";function r(e){const r=Number(e);return Number.isSafeInteger(r)&&String(r)===e?r:e}function t(t){const n=t.memberIds.map(e=>({user_id:r(e)}));return e(t.client,"/user_group/create",{name:t.name,is_hidden:"0",members:JSON.stringify(n),...void 0===t.avatarUrl?{}:{head_img_url:t.avatarUrl}},{method:"POST",responseMode:"strict"})}export{t as createGroup};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as r}from"./core-json-request.js";async function o(o,t){if(!Number.isInteger(t)||t<1||t>5)throw new Error("客服资料语言编号必须是 1 到 5");const e=await r(o,"/api/v1/home_page/get_customer_info",{lang:String(t)},{method:"POST",prefix:"",responseMode:"strict"});if(!e.ok)throw new Error(`客服资料请求失败:${e.code}`);const n=e.data;if(null===n||"string"!=typeof n?.name||""===n.name.trim()||void 0!==n.icon&&"string"!=typeof n.icon)throw new Error("客服资料响应不完整");return{displayName:n.name,avatarUrl:"string"==typeof n.icon?n.icon:""}}async function t(r,o){const t=new URL(r);if(!["http:","https:"].includes(t.protocol)||t.username||t.password)throw new Error("客服附件地址无效");const e=await fetch(t.href,{credentials:"omit",signal:o});if(!e.ok)throw new Error(`客服附件下载失败:HTTP ${e.status}`);return e.blob()}export{t as downloadCustomerServiceFile,o as getCustomerServiceProfile};
@@ -0,0 +1 @@
1
+ import{assertBoardGroupId as r}from"./board-pinned-message-validation.js";import{requestCoreJson as o}from"./core-json-request.js";import{decodeBoardPinnedMessage as e}from"../../../../im-protocol/src/board-pinned-message.js";function t(r){return"object"==typeof r&&null!==r&&!Array.isArray(r)}async function n(n){r(n.groupId);const d=await o(n.client,"/api/v1/board/get_board_msg_top",{group_ids:n.groupId,group_type:2},{method:"POST",prefix:"",responseMode:"strict"});if(!d.ok)return d;if(!t(d.data))throw new Error("board get 响应结构非法:成功 data 必须为对象");const p=d.data[n.groupId];if(void 0===p&&0===Object.keys(d.data).length)return{...d,data:null};if(void 0===p)throw new Error("board get 响应结构非法:单群响应包含非目标 groupId");if(!t(p)||p.group_id!==n.groupId||2!==p.group_type||"string"!=typeof p.msg_content||""===p.msg_content)throw new Error("board get 响应结构非法:置顶记录字段不匹配");const a=p,i=e(a.msg_content);if(2!==i.envelope.convType)throw new Error("board get 快照 convType 必须为 2");if(i.envelope.receiverId!==n.groupId)throw new Error("board get 快照 receiverId 与响应 groupId 不一致");return{...d,data:{groupId:a.group_id,groupType:2,messageContent:a.msg_content}}}export{n as getBoardPinnedMessage};
@@ -0,0 +1 @@
1
+ import{assertBoardChannelId as e}from"./board-pinned-message-validation.js";import{requestCoreJson as n}from"./core-json-request.js";import{decodeBoardPinnedMessage as r}from"../../../../im-protocol/src/board-pinned-message.js";function o(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}async function t(t){e(t.channelId);const a=await n(t.client,"/api/v1/board/get_board_msg_top",{group_ids:t.channelId,group_type:1},{method:"POST",prefix:"",responseMode:"strict"});if(!a.ok)return a;if(!o(a.data))throw new Error("channel board get 响应结构非法:成功 data 必须为对象");const d=a.data[t.channelId];if(void 0===d&&0===Object.keys(a.data).length)return{...a,data:null};if(void 0===d)throw new Error("channel board get 响应结构非法:单频道响应包含非目标 channelId");if(!o(d)||d.group_id!==t.channelId||1!==d.group_type||"string"!=typeof d.msg_content||""===d.msg_content)throw new Error("channel board get 响应结构非法:置顶记录字段不匹配");const c=d,i=r(c.msg_content);if(3!==i.envelope.convType)throw new Error("channel board get 快照 convType 必须为 3");if(i.envelope.receiverId!==t.channelId)throw new Error("channel board get 快照 receiverId 与响应 channelId 不一致");return{...a,data:{channelId:c.group_id,groupType:1,messageContent:c.msg_content}}}export{t as getChannelBoardPinnedMessage};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as e}from"./core-json-request.js";async function t(t,n){const r=await e(t,"/user_radio/info",{radio_id:n.channelId},{...void 0===n.clientType?{}:{headers:{"Client-type":String(n.clientType)}}}),i=r.data?.secret_key;return"string"==typeof i&&""!==i.trim()?i:null}export{t as getChannelSecretKey};
@@ -0,0 +1 @@
1
+ function t(t){if("string"!=typeof t||0===t.length)return!1;try{const r=new URL(t);return"http:"===r.protocol||"https:"===r.protocol}catch{return!1}}async function r(r){const n=await r("/system/background/list",{target:"core",method:"POST",data:{}});if(200!==n.code)throw new Error(`会话背景预置列表请求失败:${n.code}${n.msg?` ${n.msg}`:""}`);if(!Array.isArray(n.data?.lists))throw new Error("会话背景预置列表响应缺少 lists");const e=[],o=/* @__PURE__ */new Set;for(const r of n.data.lists){const n="string"==typeof r.id||"number"==typeof r.id?String(r.id):"";0!==n.length&&1===r.is_enabled&&t(r.img_url)&&(o.has(n)||(o.add(n),e.push({id:n,url:r.img_url,..."string"==typeof r.name&&r.name.length>0?{name:r.name}:{}})))}return e}export{r as getConversationBackgroundPresets};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as e}from"./core-json-request.js";function i(i,p){const o=void 0===p.clientType?{group_id:p.groupId,public_key:p.publicKey}:{group_id:p.groupId,public_key:p.publicKey,clientType:p.clientType},r=void 0===p.clientType?void 0:{headers:{"Client-type":String(p.clientType)}};return e(i,"/user_group/encrypt_info",o,r)}export{i as getGroupEncryptInfo};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as e}from"./core-json-request.js";async function o(o,r){const t=void 0===r.clientType?void 0:{headers:{"Client-type":String(r.clientType)}};return(await e(o,"/user_group/info",{group_id:r.groupId},t)).data}export{o as getGroupInfo};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as r}from"./core-json-request.js";function e(r){if(Array.isArray(r))return r;if("object"!=typeof r||null===r)return[];const e=r,t=["list","users","user_list","members","member_list","members_list"];for(const r of t)if(Array.isArray(e[r]))return e[r];if(Array.isArray(e.data))return e.data;if("object"==typeof e.data&&null!==e.data){const r=e.data;for(const e of t)if(Array.isArray(r[e]))return r[e]}return[]}function t(r){if("number"==typeof r)return r;if("string"==typeof r&&""!==r.trim()){const e=Number(r);return Number.isNaN(e)?void 0:e}}async function n(n,i){const o=String(i.updateVersion??0).trim()||"0",s=[];let a;for(let u=1;u<=50;u++){const f={group_id:i.groupId,update_version:o,page:String(u),page_size:String(200)},{data:c}=await r(n,"/user_group/user/list",f,{method:"GET",...void 0===i.clientType?{}:{headers:{"Client-type":String(i.clientType)}}});if(null===c)break;const p=e(c);if(0===p.length)break;for(const r of p){const e=String(r.user_id??r.userId??"").trim();if(""===e)continue;const n={userId:e,nickName:String(r.nick_name??r.nickName??"").trim()},i=t(r.join_type??r.joinType);void 0!==i&&(n.joinType=i),s.push(n)}const m=c.update_version;if("number"==typeof m&&(a=m),p.length<200)break}return{members:s,updateVersion:a}}export{n as getGroupMemberList};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as e}from"./core-json-request.js";function i(i,n){const t=void 0===n.clientType?{public_key:n.publicKey}:{public_key:n.publicKey,clientType:n.clientType},c=void 0===n.clientType?void 0:{headers:{"Client-type":String(n.clientType)}};return e(i,"/user/encrypt_info/info",t,c)}export{i as getUserEncryptInfo};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as r}from"./core-json-request.js";async function e(e,n){return(await r(e,"/user/info/friend",{friend_user_id:n.userId})).data}export{e as getUserInfoFriend};
@@ -0,0 +1 @@
1
+ import{requestCoreJson as e}from"./core-json-request.js";async function t(t,r){const i=void 0===r.clientType?{other_user_openid:r.userId}:{other_user_openid:r.userId,clientType:r.clientType},n=void 0===r.clientType?void 0:{headers:{"Client-type":String(r.clientType)}};return(await e(t,"/user/info/other",i,n)).data}export{t as getUserInfoOther};