k2-im 0.1.58 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/browser.js +1 -1
- package/dist/chat-kit-pinia.d.ts +225 -170
- package/dist/chat-kit-pinia.js +1 -1
- package/dist/chat-kit-vue.d.ts +64 -44
- package/dist/chat-kit-vue.js +1 -1
- package/dist/chat-kit.d.ts +226 -171
- package/dist/chat-kit.js +1 -1
- package/dist/crypto.worker.js +17 -25
- package/dist/i18n.d.ts +61 -41
- package/dist/i18n.js +1 -1
- package/dist/index.d.ts +241 -186
- package/dist/index.js +1 -1
- package/dist/modules/api-protocol-client/src/bi-feedback.js +1 -0
- package/dist/modules/api-protocol-client/src/browser.js +1 -0
- package/dist/modules/api-protocol-client/src/client.js +1 -0
- package/dist/modules/api-protocol-client/src/config.js +1 -0
- package/dist/modules/api-protocol-client/src/constants.js +1 -0
- package/dist/modules/api-protocol-client/src/json.js +1 -0
- package/dist/modules/api-protocol-client/src/nonce.js +1 -0
- package/dist/modules/api-protocol-client/src/transports/axios.js +1 -0
- package/dist/modules/api-protocol-client/src/utils.js +1 -0
- package/dist/modules/crypto/browser.js +1 -0
- package/dist/modules/crypto/driver.js +1 -0
- package/dist/modules/crypto/vendor/crypto/index_bg.js +1 -0
- package/dist/modules/im-browser/src/crypto/channel-key-service.js +1 -0
- package/dist/modules/im-browser/src/crypto/collect-tea.js +1 -0
- package/dist/modules/im-browser/src/crypto/crypto-task-executor.js +1 -0
- package/dist/modules/im-browser/src/crypto/crypto-worker-factory.js +1 -0
- package/dist/modules/im-browser/src/crypto/crypto-worker-protocol.js +1 -0
- package/dist/modules/im-browser/src/crypto/encrypt-key-service.js +1 -0
- package/dist/modules/im-browser/src/crypto/group-key-service.js +1 -0
- package/dist/modules/im-browser/src/crypto/peer-public-key-service.js +1 -0
- package/dist/modules/im-browser/src/crypto/rsa-private-key.js +1 -0
- package/dist/modules/im-browser/src/crypto/rsa-tea-crypto-adapter.js +1 -0
- package/dist/modules/im-browser/src/crypto/stale-key-refresh.js +1 -0
- package/dist/modules/im-browser/src/crypto/tea.js +1 -0
- package/dist/modules/im-browser/src/crypto/wait-for-key-signal.js +1 -0
- package/dist/modules/im-browser/src/http/application-http-adapters.js +1 -0
- package/dist/modules/im-browser/src/http/channel-http-adapter.js +1 -0
- package/dist/modules/im-browser/src/http/channel-join-application-http-adapter.js +1 -0
- package/dist/modules/im-browser/src/http/channel-member-http-adapter.js +1 -0
- package/dist/modules/im-browser/src/http/channel-mention-member-http-adapter.js +1 -0
- package/dist/modules/im-browser/src/http/cm-http-adapter.js +1 -0
- package/dist/modules/im-browser/src/http/directory-http-adapter.js +1 -0
- package/dist/modules/im-browser/src/http/expression-http-adapter.js +1 -0
- package/dist/modules/im-browser/src/http/lazy-api-protocol-client.js +1 -0
- package/dist/modules/im-browser/src/http/profile-http-adapter.js +1 -0
- package/dist/modules/im-browser/src/http/requests/applications.js +1 -0
- package/dist/modules/im-browser/src/http/requests/bind-robot-conversation.js +1 -0
- package/dist/modules/im-browser/src/http/requests/board-pinned-message-validation.js +1 -0
- package/dist/modules/im-browser/src/http/requests/channel-join-applications.js +1 -0
- package/dist/modules/im-browser/src/http/requests/channel-management.js +1 -0
- package/dist/modules/im-browser/src/http/requests/channel-members.js +1 -0
- package/dist/modules/im-browser/src/http/requests/channel-mention-members.js +1 -0
- package/dist/modules/im-browser/src/http/requests/channel-message-context.js +1 -0
- package/dist/modules/im-browser/src/http/requests/channel-mini-program-rel.js +1 -0
- package/dist/modules/im-browser/src/http/requests/channel-profile.js +1 -0
- package/dist/modules/im-browser/src/http/requests/channel-read-index.js +1 -0
- package/dist/modules/im-browser/src/http/requests/contact-blocklist.js +1 -0
- package/dist/modules/im-browser/src/http/requests/contact-friendship.js +1 -0
- package/dist/modules/im-browser/src/http/requests/contact-report.js +1 -0
- package/dist/modules/im-browser/src/http/requests/core-json-request.js +1 -0
- package/dist/modules/im-browser/src/http/requests/create-channel.js +1 -0
- package/dist/modules/im-browser/src/http/requests/create-face-to-face-group.js +1 -0
- package/dist/modules/im-browser/src/http/requests/create-group.js +1 -0
- package/dist/modules/im-browser/src/http/requests/customer-service-profile.js +1 -0
- package/dist/modules/im-browser/src/http/requests/get-board-pinned-message.js +1 -0
- package/dist/modules/im-browser/src/http/requests/get-channel-board-pinned-message.js +1 -0
- package/dist/modules/im-browser/src/http/requests/get-channel-secret-key.js +1 -0
- package/dist/modules/im-browser/src/http/requests/get-conversation-background-presets.js +1 -0
- package/dist/modules/im-browser/src/http/requests/get-group-encrypt-info.js +1 -0
- package/dist/modules/im-browser/src/http/requests/get-group-info.js +1 -0
- package/dist/modules/im-browser/src/http/requests/get-group-member-list.js +1 -0
- package/dist/modules/im-browser/src/http/requests/get-user-encrypt-info.js +1 -0
- package/dist/modules/im-browser/src/http/requests/get-user-info-friend.js +1 -0
- package/dist/modules/im-browser/src/http/requests/get-user-info-other.js +1 -0
- package/dist/modules/im-browser/src/http/requests/group-management.js +1 -0
- package/dist/modules/im-browser/src/http/requests/mark-group-read-all.js +1 -0
- package/dist/modules/im-browser/src/http/requests/membership-join.js +1 -0
- package/dist/modules/im-browser/src/http/requests/pin-board-message.js +1 -0
- package/dist/modules/im-browser/src/http/requests/pin-channel-board-message.js +1 -0
- package/dist/modules/im-browser/src/http/requests/pull-messages-by-id.js +1 -0
- package/dist/modules/im-browser/src/http/requests/pull-offline-channel.js +1 -0
- package/dist/modules/im-browser/src/http/requests/pull-offline-chat.js +1 -0
- package/dist/modules/im-browser/src/http/requests/pull-offline-group.js +1 -0
- package/dist/modules/im-browser/src/http/requests/pull-offline-signal.js +1 -0
- package/dist/modules/im-browser/src/http/requests/robot-menu-reply.js +1 -0
- package/dist/modules/im-browser/src/http/requests/robot-profile.js +1 -0
- package/dist/modules/im-browser/src/http/requests/search-robots.js +1 -0
- package/dist/modules/im-browser/src/http/requests/set-conversation-undisturb.js +1 -0
- package/dist/modules/im-browser/src/http/requests/set-friend-remark.js +1 -0
- package/dist/modules/im-browser/src/http/requests/set-group-nickname.js +1 -0
- package/dist/modules/im-browser/src/http/requests/unpin-board-message.js +1 -0
- package/dist/modules/im-browser/src/http/requests/unpin-channel-board-message.js +1 -0
- package/dist/modules/im-browser/src/http/requests/update-group-info.js +1 -0
- package/dist/modules/im-browser/src/http/session-favorite-http-adapter.js +1 -0
- package/dist/modules/im-browser/src/media/file-md5.js +1 -0
- package/dist/modules/im-browser/src/media/image-clipboard.js +1 -0
- package/dist/modules/im-browser/src/media/image-header-dimensions.js +1 -0
- package/dist/modules/im-browser/src/media/media-downloader.js +1 -0
- package/dist/modules/im-browser/src/media/media-preview-adapter.js +1 -0
- package/dist/modules/im-browser/src/media/media-preview-preparation-executor.js +1 -0
- package/dist/modules/im-browser/src/media/media-request-limiter.js +1 -0
- package/dist/modules/im-browser/src/media/media-transfer-adapter.js +1 -0
- package/dist/modules/im-browser/src/media/media-transfer-errors.js +1 -0
- package/dist/modules/im-browser/src/media/media-transfer-policy.js +1 -0
- package/dist/modules/im-browser/src/media/media-upload-credentials.js +1 -0
- package/dist/modules/im-browser/src/media/media-upload-recovery-codec.js +1 -0
- package/dist/modules/im-browser/src/media/media-upload-recovery-store.js +1 -0
- package/dist/modules/im-browser/src/media/media-upload-source-fingerprint.js +1 -0
- package/dist/modules/im-browser/src/media/s3-multipart-uploader.js +1 -0
- package/dist/modules/im-browser/src/media/xhr-upload-idle-timeout.js +1 -0
- package/dist/modules/im-browser/src/network/browser-connection-ownership.js +1 -0
- package/dist/modules/im-browser/src/network/network-monitor.js +1 -0
- package/dist/modules/im-browser/src/scheduling/yield-to-browser.js +1 -0
- package/dist/modules/im-browser/src/storage/indexed-db-storage-adapter.js +1 -0
- package/dist/modules/im-browser/src/transport/ws-transport.js +1 -0
- package/dist/modules/im-browser/src/voice/voice-amplitude.js +1 -0
- package/dist/modules/im-browser/src/voice/voice-capabilities.js +1 -0
- package/dist/modules/im-browser/src/voice/voice-codec.js +1 -0
- package/dist/modules/im-browser/src/voice/voice-errors.js +1 -0
- package/dist/modules/im-browser/src/voice/voice-playback.js +1 -0
- package/dist/modules/im-browser/src/voice/voice-player.js +1 -0
- package/dist/modules/im-browser/src/voice/voice-recorder.js +1 -0
- package/dist/modules/im-chat-kit/src/i18n/use-im-text.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/applications.store.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/capabilities.store.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/composer.store.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/context.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/conversation-activation.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/conversation-deletion.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/conversation-list.store.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/expression.store.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/history-return-after-send.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/media-transfer-estimate.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/media.store.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/message-operations.store.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/profile-directory.store.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/quoted-message.store.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/reaction.store.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/search-senders.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/search.store.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/session-favorites.store.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/session.store.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/thread-paging.store.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/thread-return-to-latest.js +1 -0
- package/dist/modules/im-chat-kit/src/pinia/thread.store.js +1 -0
- package/dist/modules/im-chat-kit/src/presentation/channel-mini-program-open.js +1 -0
- package/dist/modules/im-chat-kit/src/presentation/channel-mini-program-rels.js +1 -0
- package/dist/modules/im-chat-kit/src/presentation/conversation-list.js +1 -0
- package/dist/modules/im-chat-kit/src/presentation/conversation-unread.js +1 -0
- package/dist/modules/im-chat-kit/src/presentation/delayed-loading-indicator.js +1 -0
- package/dist/modules/im-chat-kit/src/presentation/media-source-priority.js +1 -0
- package/dist/modules/im-chat-kit/src/presentation/message-notification.js +1 -0
- package/dist/modules/im-chat-kit/src/presentation/message-search.js +1 -0
- package/dist/modules/im-chat-kit/src/presentation/mini-program-game-preview.js +1 -0
- package/dist/modules/im-chat-kit/src/presentation/mini-program-open-url.js +1 -0
- package/dist/modules/im-chat-kit/src/runtime/chat-runtime.js +1 -0
- package/dist/modules/im-chat-kit/src/runtime/conversation-prefetch-controller.js +1 -0
- package/dist/modules/im-chat-kit/src/runtime/media-object-url-registry.js +1 -0
- package/dist/modules/im-chat-kit/src/runtime/runtime-operation.js +1 -0
- package/dist/modules/im-chat-kit/src/services/capabilities.js +1 -0
- package/dist/modules/im-chat-kit/src/services/channel-member-management.service.js +1 -0
- package/dist/modules/im-chat-kit/src/services/channel-profile-management.service.js +1 -0
- package/dist/modules/im-chat-kit/src/services/channel-send-restriction.js +1 -0
- package/dist/modules/im-chat-kit/src/services/direct-contact-management.service.js +1 -0
- package/dist/modules/im-chat-kit/src/services/forward.service.js +1 -0
- package/dist/modules/im-chat-kit/src/services/group-member-management.service.js +1 -0
- package/dist/modules/im-chat-kit/src/services/group-profile-management.service.js +1 -0
- package/dist/modules/im-chat-kit/src/services/image-copy.service.js +1 -0
- package/dist/modules/im-chat-kit/src/services/media-file-classification.js +1 -0
- package/dist/modules/im-chat-kit/src/services/media.service.js +1 -0
- package/dist/modules/im-chat-kit/src/services/message.service.js +1 -0
- package/dist/modules/im-chat-kit/src/services/pinned-message-rules.js +1 -0
- package/dist/modules/im-chat-kit/src/services/pinned-message.service.js +1 -0
- package/dist/modules/im-chat-kit/src/services/profile-access.service.js +1 -0
- package/dist/modules/im-chat-kit/src/services/profile-directory.service.js +1 -0
- package/dist/modules/im-chat-kit/src/services/profile-display.js +1 -0
- package/dist/modules/im-chat-kit/src/services/profile.service.js +1 -0
- package/dist/modules/im-chat-kit/src/services/read.service.js +1 -0
- package/dist/modules/im-chat-kit/src/services/robot-sender-profile.js +1 -0
- package/dist/modules/im-chat-kit/src/services/search.service.js +1 -0
- package/dist/modules/im-chat-kit/src/services/send.service.js +1 -0
- package/dist/modules/im-chat-kit/src/thread/active-date.js +1 -0
- package/dist/modules/im-chat-kit/src/thread/create-thread-items.js +1 -0
- package/dist/modules/im-chat-kit/src/thread/message-locate-result.js +1 -0
- package/dist/modules/im-chat-kit/src/thread/new-message-badge.js +1 -0
- package/dist/modules/im-chat-kit/src/thread/resolve-message-body-kind.js +1 -0
- package/dist/modules/im-chat-kit/src/thread/resolve-quoted-message-presentation.js +1 -0
- package/dist/modules/im-chat-kit/src/thread/viewport-rules.js +1 -0
- package/dist/modules/im-chat-kit/src/utils/emoji/emoji-legacy-catalog.json.js +1 -0
- package/dist/modules/im-chat-kit/src/utils/emoji/index.js +1 -0
- package/dist/modules/im-chat-kit/src/utils/emoji/recent.js +1 -0
- package/dist/modules/im-chat-kit/src/utils/emoji/unicode-emoji-catalog.json.js +1 -0
- package/dist/modules/im-chat-kit/src/utils/emoji/unicode.js +1 -0
- package/dist/modules/im-chat-kit/src/utils/highlight.js +1 -0
- package/dist/modules/im-chat-kit/src/utils/link.js +1 -0
- package/dist/modules/im-chat-kit/src/utils/media-batch.js +1 -0
- package/dist/modules/im-chat-kit/src/utils/media-dimensions.js +1 -0
- package/dist/modules/im-chat-kit/src/utils/media-format.js +1 -0
- package/dist/modules/im-chat-kit/src/utils/media-transfer-presentation.js +1 -0
- package/dist/modules/im-chat-kit/src/utils/time-display.js +1 -0
- package/dist/modules/im-chat-kit/src/utils/waveform.js +1 -0
- package/dist/modules/im-chat-kit/src/vue/thread/ImThreadBodySwitch.js +1 -0
- package/dist/modules/im-chat-kit/src/vue/thread/ImThreadItems.js +1 -0
- package/dist/modules/im-chat-kit/src/vue/thread/ImThreadSurface.js +1 -0
- package/dist/modules/im-chat-kit/src/vue/thread/ImThreadViewport.js +1 -0
- package/dist/modules/im-chat-kit/src/vue/thread/message-renderer-registry.js +1 -0
- package/dist/modules/im-chat-kit/src/vue/thread/thread-idle-task.js +1 -0
- package/dist/modules/im-chat-kit/src/vue/thread/thread-layout-measurements.js +1 -0
- package/dist/modules/im-chat-kit/src/vue/thread/thread-read-actions-context.js +1 -0
- package/dist/modules/im-chat-kit/src/vue/thread/thread-surface-context.js +1 -0
- package/dist/modules/im-chat-kit/src/vue/thread/thread-viewport-context.js +1 -0
- package/dist/modules/im-chat-kit/src/vue/thread/thread-visibility-target-group.js +1 -0
- package/dist/modules/im-chat-kit/src/vue/thread/thread-visibility-targets.js +1 -0
- package/dist/modules/im-chat-kit/src/vue/thread/use-im-thread-layout-measurement.js +1 -0
- package/dist/modules/im-core/src/abort.js +1 -0
- package/dist/modules/im-core/src/cache-namespace.js +1 -0
- package/dist/modules/im-core/src/connection/backoff.js +1 -0
- package/dist/modules/im-core/src/connection/connection-manager.js +1 -0
- package/dist/modules/im-core/src/connection/heartbeat-manager.js +1 -0
- package/dist/modules/im-core/src/conversation-identity.js +1 -0
- package/dist/modules/im-core/src/diagnostics.js +1 -0
- package/dist/modules/im-core/src/event-emitter.js +1 -0
- package/dist/modules/im-core/src/login/login-handler.js +1 -0
- package/dist/modules/im-core/src/mapping/bot-sender.js +1 -0
- package/dist/modules/im-core/src/mapping/call-record-body.js +1 -0
- package/dist/modules/im-core/src/mapping/channel-message-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/channel-notify-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/channel-offline-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/channel-pinned-message-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/channel-read-position.js +1 -0
- package/dist/modules/im-core/src/mapping/contact-body.js +1 -0
- package/dist/modules/im-core/src/mapping/content-body.js +1 -0
- package/dist/modules/im-core/src/mapping/conversation.js +1 -0
- package/dist/modules/im-core/src/mapping/crypto-batch-preparation.js +1 -0
- package/dist/modules/im-core/src/mapping/customer-service-body.js +1 -0
- package/dist/modules/im-core/src/mapping/customer-service-message-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/decrypt-recovery.js +1 -0
- package/dist/modules/im-core/src/mapping/file-body.js +1 -0
- package/dist/modules/im-core/src/mapping/files-album-body.js +1 -0
- package/dist/modules/im-core/src/mapping/game-body.js +1 -0
- package/dist/modules/im-core/src/mapping/gift-body.js +1 -0
- package/dist/modules/im-core/src/mapping/group-message-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/group-notify-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/group-offline-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/image-body.js +1 -0
- package/dist/modules/im-core/src/mapping/live-room-body.js +1 -0
- package/dist/modules/im-core/src/mapping/media-album-body.js +1 -0
- package/dist/modules/im-core/src/mapping/merge.js +1 -0
- package/dist/modules/im-core/src/mapping/mes-chat-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/message-id.js +1 -0
- package/dist/modules/im-core/src/mapping/message-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/messages-by-id.js +1 -0
- package/dist/modules/im-core/src/mapping/mini-program-body.js +1 -0
- package/dist/modules/im-core/src/mapping/offline-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/pinned-message-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/profile-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/reaction-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/recall-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/red-packet-body.js +1 -0
- package/dist/modules/im-core/src/mapping/robot-body.js +1 -0
- package/dist/modules/im-core/src/mapping/robot-message-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/search-text.js +1 -0
- package/dist/modules/im-core/src/mapping/session-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/signal-offline-mapper.js +1 -0
- package/dist/modules/im-core/src/mapping/sort.js +1 -0
- package/dist/modules/im-core/src/mapping/sticker-body.js +1 -0
- package/dist/modules/im-core/src/mapping/stored-message.js +1 -0
- package/dist/modules/im-core/src/mapping/system-event-timeline-policy.js +1 -0
- package/dist/modules/im-core/src/mapping/text-segments.js +1 -0
- package/dist/modules/im-core/src/mapping/transfer-body.js +1 -0
- package/dist/modules/im-core/src/mapping/transfer-status.js +1 -0
- package/dist/modules/im-core/src/mapping/unread-divider.js +1 -0
- package/dist/modules/im-core/src/mapping/video-body.js +1 -0
- package/dist/modules/im-core/src/mapping/voice-body.js +1 -0
- package/dist/modules/im-core/src/message-flow/call/direct-call-manager.js +1 -0
- package/dist/modules/im-core/src/message-flow/call/direct-call-record.js +1 -0
- package/dist/modules/im-core/src/message-flow/call/direct-p2p-call.js +1 -0
- package/dist/modules/im-core/src/message-flow/call/group-call-manager.js +1 -0
- package/dist/modules/im-core/src/message-flow/call/group-call-record.js +1 -0
- package/dist/modules/im-core/src/message-flow/conversation-support.js +1 -0
- package/dist/modules/im-core/src/message-flow/edit/edit-frame.js +1 -0
- package/dist/modules/im-core/src/message-flow/edit/edit-manager.js +1 -0
- package/dist/modules/im-core/src/message-flow/edit/edit-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/edit/edit-strategy.js +1 -0
- package/dist/modules/im-core/src/message-flow/expression/expression-message.js +1 -0
- package/dist/modules/im-core/src/message-flow/forward/can-transmit.js +1 -0
- package/dist/modules/im-core/src/message-flow/forward/forward-content-spec.js +1 -0
- package/dist/modules/im-core/src/message-flow/forward/forward-messages.js +1 -0
- package/dist/modules/im-core/src/message-flow/game/game-message.js +1 -0
- package/dist/modules/im-core/src/message-flow/gift/gift-message.js +1 -0
- package/dist/modules/im-core/src/message-flow/live-room/live-room-message.js +1 -0
- package/dist/modules/im-core/src/message-flow/media/media-sender.js +1 -0
- package/dist/modules/im-core/src/message-flow/mini-program/mini-program-message.js +1 -0
- package/dist/modules/im-core/src/message-flow/reaction/can-react.js +1 -0
- package/dist/modules/im-core/src/message-flow/reaction/reaction-manager.js +1 -0
- package/dist/modules/im-core/src/message-flow/reaction/reaction-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/read/channel-read-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/read/channel-read-strategy.js +1 -0
- package/dist/modules/im-core/src/message-flow/read/customer-service-read-strategy.js +1 -0
- package/dist/modules/im-core/src/message-flow/read/direct-read-sync.js +1 -0
- package/dist/modules/im-core/src/message-flow/read/group-read-strategy.js +1 -0
- package/dist/modules/im-core/src/message-flow/read/read-strategy.js +1 -0
- package/dist/modules/im-core/src/message-flow/read/robot-read-strategy.js +1 -0
- package/dist/modules/im-core/src/message-flow/recall/channel-message-deletion-manager.js +1 -0
- package/dist/modules/im-core/src/message-flow/recall/recall-frame.js +1 -0
- package/dist/modules/im-core/src/message-flow/recall/recall-manager.js +1 -0
- package/dist/modules/im-core/src/message-flow/recall/recall-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/recall/recall-strategy.js +1 -0
- package/dist/modules/im-core/src/message-flow/receive/channel-application-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/receive/channel-notify-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/receive/channel-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/receive/command-handler-registry.js +1 -0
- package/dist/modules/im-core/src/message-flow/receive/contact-application-answer-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/receive/contact-application-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/receive/direct-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/receive/friend-action-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/receive/group-event-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/receive/group-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/receive/mes-chat-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/receive/robot-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/receive/session-favorite-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/receive/wallet-notify-receive-handlers.js +1 -0
- package/dist/modules/im-core/src/message-flow/send/channel-outgoing-frame.js +1 -0
- package/dist/modules/im-core/src/message-flow/send/channel-send-strategy.js +1 -0
- package/dist/modules/im-core/src/message-flow/send/direct-outgoing-frame.js +1 -0
- package/dist/modules/im-core/src/message-flow/send/direct-send-strategy.js +1 -0
- package/dist/modules/im-core/src/message-flow/send/group-outgoing-frame.js +1 -0
- package/dist/modules/im-core/src/message-flow/send/group-send-strategy.js +1 -0
- package/dist/modules/im-core/src/message-flow/send/robot-outgoing-frame.js +1 -0
- package/dist/modules/im-core/src/message-flow/send/robot-send-strategy.js +1 -0
- package/dist/modules/im-core/src/message-flow/send/send-strategy-registry.js +1 -0
- package/dist/modules/im-core/src/message-flow/transfer/transfer-message.js +1 -0
- package/dist/modules/im-core/src/outbox/outbox-manager.js +1 -0
- package/dist/modules/im-core/src/packet-router.js +1 -0
- package/dist/modules/im-core/src/ports/crypto-port.js +1 -0
- package/dist/modules/im-core/src/ports/crypto-task-executor.js +1 -0
- package/dist/modules/im-core/src/ports/http-port.js +1 -0
- package/dist/modules/im-core/src/ports/media-asset-cache-port.js +1 -0
- package/dist/modules/im-core/src/push/push-registration.js +1 -0
- package/dist/modules/im-core/src/read/read-reporter.js +1 -0
- package/dist/modules/im-core/src/request-tracker.js +1 -0
- package/dist/modules/im-core/src/session-favorite-album.js +1 -0
- package/dist/modules/im-core/src/session-favorite-files.js +1 -0
- package/dist/modules/im-core/src/state/channel-permissions.js +1 -0
- package/dist/modules/im-core/src/state/channel-restriction-coordinator.js +1 -0
- package/dist/modules/im-core/src/state/domain-state.js +1 -0
- package/dist/modules/im-core/src/state/draft-store.js +1 -0
- package/dist/modules/im-core/src/state/group-restriction-coordinator.js +1 -0
- package/dist/modules/im-core/src/state/local-message-window-read-error.js +1 -0
- package/dist/modules/im-core/src/state/message-reactions.js +1 -0
- package/dist/modules/im-core/src/state/message-store.js +1 -0
- package/dist/modules/im-core/src/state/message-window-store.js +1 -0
- package/dist/modules/im-core/src/state/pinned-message-coordinator.js +1 -0
- package/dist/modules/im-core/src/state/pinned-message-store.js +1 -0
- package/dist/modules/im-core/src/state/read-store.js +1 -0
- package/dist/modules/im-core/src/state/session-sort.js +1 -0
- package/dist/modules/im-core/src/state/session-store.js +1 -0
- package/dist/modules/im-core/src/sync/channel-sync-checkpoint.js +1 -0
- package/dist/modules/im-core/src/sync/sync-manager.js +1 -0
- package/dist/modules/im-i18n/src/catalog/en-US.js +1 -0
- package/dist/modules/im-i18n/src/catalog/index.js +1 -0
- package/dist/modules/im-i18n/src/catalog/th-TH.js +1 -0
- package/dist/modules/im-i18n/src/catalog/vi-VN.js +1 -0
- package/dist/modules/im-i18n/src/catalog/zh-CN.js +1 -0
- package/dist/modules/im-i18n/src/catalog/zh-TW.js +1 -0
- package/dist/modules/im-i18n/src/create-im-i18n.js +1 -0
- package/dist/modules/im-i18n/src/format/failure.js +1 -0
- package/dist/modules/im-i18n/src/format/last-message.js +1 -0
- package/dist/modules/im-i18n/src/format/media.js +1 -0
- package/dist/modules/im-i18n/src/format/mention.js +1 -0
- package/dist/modules/im-i18n/src/format/service-text.js +1 -0
- package/dist/modules/im-i18n/src/format/system-message.js +1 -0
- package/dist/modules/im-i18n/src/internal/duration.js +1 -0
- package/dist/modules/im-i18n/src/internal/interpolate.js +1 -0
- package/dist/modules/im-i18n/src/locale.js +1 -0
- package/dist/modules/im-protocol/src/board-pinned-message.js +1 -0
- package/dist/modules/im-protocol/src/frame-codec.js +1 -0
- package/dist/modules/im-protocol/src/protobuf/gen/channel_pb.js +1 -0
- package/dist/modules/im-protocol/src/protobuf/gen/group_pb.js +1 -0
- package/dist/modules/im-protocol/src/protobuf/gen/im.app.msg_pb.js +1 -0
- package/dist/modules/im-protocol/src/protobuf/gen/im.channel_pb.js +1 -0
- package/dist/modules/im-protocol/src/protobuf/gen/im.group_pb.js +1 -0
- package/dist/modules/im-protocol/src/protobuf/gen/im.login_pb.js +1 -0
- package/dist/modules/im-protocol/src/protobuf/gen/im.msg_pb.js +1 -0
- package/dist/modules/im-protocol/src/protobuf/gen/im.pub_pb.js +1 -0
- package/dist/modules/im-protocol/src/protobuf/gen/im.robot_pb.js +1 -0
- package/dist/modules/im-protocol/src/protobuf/gen/im.sig_pb.js +1 -0
- package/dist/modules/im-protocol/src/protobuf/gen/msg_pb.js +1 -0
- package/dist/modules/im-protocol/src/protobuf/registry.js +1 -0
- package/dist/modules/im-sdk/src/cache-prefix-migration.js +1 -0
- package/dist/modules/im-sdk/src/create-im-client.js +1 -0
- package/dist/modules/im-sdk/src/domains/channel.js +1 -0
- package/dist/modules/im-sdk/src/domains/contact.js +1 -0
- package/dist/modules/im-sdk/src/domains/conversation.js +1 -0
- package/dist/modules/im-sdk/src/domains/group.js +1 -0
- package/dist/modules/im-sdk/src/domains/media-byte-computation.js +1 -0
- package/dist/modules/im-sdk/src/domains/media.js +1 -0
- package/dist/modules/im-sdk/src/domains/message.js +1 -0
- package/dist/modules/im-sdk/src/domains/pinned-message-source.js +1 -0
- package/dist/modules/im-sdk/src/domains/pinned-message.js +1 -0
- package/dist/modules/im-sdk/src/domains/session.js +1 -0
- package/dist/modules/im-sdk/src/product/applications.js +1 -0
- package/dist/modules/im-sdk/src/product/calls.js +1 -0
- package/dist/modules/im-sdk/src/product/capabilities.js +1 -0
- package/dist/modules/im-sdk/src/product/channel-mention-candidates.js +1 -0
- package/dist/modules/im-sdk/src/product/conversation-background.js +1 -0
- package/dist/modules/im-sdk/src/product/conversation-entry-unread.js +1 -0
- package/dist/modules/im-sdk/src/product/conversation-handle.js +1 -0
- package/dist/modules/im-sdk/src/product/conversations.js +1 -0
- package/dist/modules/im-sdk/src/product/customer-service.js +1 -0
- package/dist/modules/im-sdk/src/product/diagnostic-memory-buffer.js +1 -0
- package/dist/modules/im-sdk/src/product/diagnostics.js +1 -0
- package/dist/modules/im-sdk/src/product/directory.js +1 -0
- package/dist/modules/im-sdk/src/product/draft.js +1 -0
- package/dist/modules/im-sdk/src/product/emoji-catalog.js +1 -0
- package/dist/modules/im-sdk/src/product/emoji-catalog.json.js +1 -0
- package/dist/modules/im-sdk/src/product/events.js +1 -0
- package/dist/modules/im-sdk/src/product/expressions.js +1 -0
- package/dist/modules/im-sdk/src/product/face-to-face-group.js +1 -0
- package/dist/modules/im-sdk/src/product/group-calls.js +1 -0
- package/dist/modules/im-sdk/src/product/image-format.js +1 -0
- package/dist/modules/im-sdk/src/product/local-data.js +1 -0
- package/dist/modules/im-sdk/src/product/media.js +1 -0
- package/dist/modules/im-sdk/src/product/mention.js +1 -0
- package/dist/modules/im-sdk/src/product/message.js +1 -0
- package/dist/modules/im-sdk/src/product/messages-by-id.js +1 -0
- package/dist/modules/im-sdk/src/product/outbox.js +1 -0
- package/dist/modules/im-sdk/src/product/profiles.js +1 -0
- package/dist/modules/im-sdk/src/product/resource-uploader.js +1 -0
- package/dist/modules/im-sdk/src/product/robots.js +1 -0
- package/dist/modules/im-sdk/src/product/search.js +1 -0
- package/dist/modules/im-sdk/src/product/session-favorites.js +1 -0
- package/dist/modules/im-sdk/src/product/settings.js +1 -0
- package/dist/modules/im-sdk/src/runtime/advanced-message-diagnostics.js +1 -0
- package/dist/modules/im-sdk/src/runtime/channel-read-summary-refresh.js +1 -0
- package/dist/modules/im-sdk/src/runtime/customer-service-legacy-recovery.js +1 -0
- package/dist/modules/im-sdk/src/runtime/decrypt-diagnostics.js +1 -0
- package/dist/modules/im-sdk/src/runtime/foreground-work-coordinator.js +1 -0
- package/dist/modules/im-sdk/src/runtime/group-history-page-boundary.js +1 -0
- package/dist/modules/im-sdk/src/runtime/key-prefetch.js +1 -0
- package/dist/modules/im-sdk/src/runtime/local-media-preview.js +1 -0
- package/dist/modules/im-sdk/src/runtime/media-cache-maintenance.js +1 -0
- package/dist/modules/im-sdk/src/runtime/media-upload-recovery.js +1 -0
- package/dist/modules/im-sdk/src/runtime/protobuf-wire-shape.js +1 -0
- package/dist/modules/im-sdk/src/runtime/receiving-activity.js +1 -0
- package/dist/modules/im-sdk/src/runtime/recent-history-fetcher.js +1 -0
- package/dist/modules/im-sdk/src/runtime/recent-history-prefetch.js +1 -0
- package/dist/modules/im-sdk/src/runtime/session-http-clients.js +1 -0
- package/dist/modules/im-sdk/src/runtime/session-runtime.js +1 -0
- package/dist/modules/im-sdk/src/runtime/signal-offline-poller.js +1 -0
- package/dist/request-crypto.js +1 -1
- package/dist/sdk.d.ts +170 -111
- package/dist/sdk.js +1 -1
- package/package.json +2 -2
- package/dist/browser-GFKMMRZD.js +0 -1
- package/dist/browser-RTCHWSQ2.js +0 -2
- package/dist/chunk-2U2JMY5V.js +0 -1
- package/dist/chunk-B5V2O54N.js +0 -1
- package/dist/chunk-I7YY5G76.js +0 -1
- package/dist/chunk-IDECJJXC.js +0 -0
- package/dist/chunk-PHJQ6QKU.js +0 -2
- package/dist/chunk-Q2DEFN53.js +0 -1
- package/dist/chunk-SXY56EVC.js +0 -0
- package/dist/chunk-TIQ37Q7E.js +0 -2
- package/dist/chunk-VMNZGJNM.js +0 -2
- package/dist/chunk-WOT6VMZA.js +0 -1
- package/dist/chunk-X7ZBIWYF.js +0 -8
package/dist/chat-kit.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/** 媒体业务类型:实现据此选对象存储逻辑桶;sticker 对应 app-sticker。 */
|
|
2
2
|
type MediaKind = 'image' | 'video' | 'voice' | 'file' | 'sticker';
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
type ConversationType = 'direct' | 'group' | 'channel' | 'supergroup' | 'robot';
|
|
4
|
+
/** 会话类型;各类型分别处理权限、收发和历史。supergroup 仅预留类型,尚未提供业务实现。 */
|
|
5
|
+
type ConversationType = 'direct' | 'group' | 'channel' | 'supergroup' | 'robot' | 'customerService';
|
|
6
6
|
/**
|
|
7
7
|
* 会话复合身份;`conversationId` 只在对应 `conversationType` 的领域内唯一。
|
|
8
8
|
*
|
|
@@ -39,8 +39,8 @@ interface ConversationDraft$1 {
|
|
|
39
39
|
attachments: readonly [];
|
|
40
40
|
updatedAt: number;
|
|
41
41
|
}
|
|
42
|
-
/** 消息内容类型。sticker=表情/贴图(BMessage contentType=7);call=单聊通话记录(contentType=10);transfer=转账(contentType=16);gift=礼品/刮刮卡(contentType=17);robot=机器人卡片(contentType=18);miniProgram=小程序分享卡(contentType=22);redPacket=红包卡(contentType=25);game=小游戏(contentType=27);liveRoom=直播间分享(contentType=30);未知 wire
|
|
43
|
-
type MessageContentType = 'text' | 'system' | 'image' | 'video' | 'voice' | 'file' | 'sticker' | 'contact' | 'miniProgram' | 'game' | 'transfer' | 'gift' | 'call' | 'redPacket' | 'mediaAlbum' | 'filesAlbum' | 'robot' | 'liveRoom' | 'unknown';
|
|
42
|
+
/** 消息内容类型。sticker=表情/贴图(BMessage contentType=7);call=单聊通话记录(contentType=10);transfer=转账(contentType=16);gift=礼品/刮刮卡(contentType=17);robot=机器人卡片(contentType=18);miniProgram=小程序分享卡(contentType=22);redPacket=红包卡(contentType=25);game=小游戏(contentType=27);liveRoom=直播间分享(contentType=30);未知 wire 正文统一转换为 unknown。 */
|
|
43
|
+
type MessageContentType = 'text' | 'system' | 'image' | 'video' | 'voice' | 'file' | 'sticker' | 'contact' | 'miniProgram' | 'game' | 'transfer' | 'gift' | 'call' | 'redPacket' | 'mediaAlbum' | 'filesAlbum' | 'robot' | 'liveRoom' | 'customerService' | 'unknown';
|
|
44
44
|
/**
|
|
45
45
|
* 发送态(客户端态):消息从本地创建到服务端确认的生命周期。
|
|
46
46
|
* `uploading` 仅媒体消息使用:文件上传阶段(uploading→pending→sending→sent);
|
|
@@ -80,10 +80,10 @@ interface ImSystemMessageBody {
|
|
|
80
80
|
pinnedMessageAction?: ImPinnedMessageAction;
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
|
-
*
|
|
84
|
-
* `system`
|
|
85
|
-
* EXPRESSION
|
|
86
|
-
*
|
|
83
|
+
* 会话最后一条消息的语义摘要,供存储和 im-i18n 展示使用。
|
|
84
|
+
* `system` 保存解析后的 ImSystemMessageBody,formatSystemMessage 在展示时接收 selfId。
|
|
85
|
+
* EXPRESSION 按 imageType 区分 gif 与静态 sticker。
|
|
86
|
+
* 与 lastMessagePreview 同时保存;变化检查逐字段调用 lastMessageSummaryEqual,不比较对象引用。
|
|
87
87
|
*/
|
|
88
88
|
type LastMessageSummary = {
|
|
89
89
|
kind: 'text';
|
|
@@ -279,7 +279,7 @@ interface ImVoiceBody {
|
|
|
279
279
|
teaKey?: Uint8Array;
|
|
280
280
|
/** 文件加密类型:0=跟随消息,1=不加密,3=完整 TEA(BMessage.fileEncryptType;语音与图片/视频同走完整 TEA)。 */
|
|
281
281
|
fileEncryptType?: number;
|
|
282
|
-
/** 录音振幅波形(0-255
|
|
282
|
+
/** 录音振幅波形(0-255):仅发送端本地展示缓存(随消息写入本地存储、刷新后仍可画波形),**不写入 BMessage**(协议无波形字段)。 */
|
|
283
283
|
waveform?: number[];
|
|
284
284
|
}
|
|
285
285
|
/**
|
|
@@ -386,7 +386,7 @@ interface ImRobotImageGroupModule {
|
|
|
386
386
|
/**
|
|
387
387
|
* 机器人卡片倒计时。
|
|
388
388
|
*
|
|
389
|
-
* `endTimeMs`
|
|
389
|
+
* `endTimeMs` 已转换为 epoch 毫秒;wire 秒/毫秒混用只在 mapper 转换,宿主不要再猜单位。
|
|
390
390
|
*/
|
|
391
391
|
interface ImRobotCountdownModule {
|
|
392
392
|
type: 'countdown';
|
|
@@ -479,10 +479,10 @@ interface ImGiftBody {
|
|
|
479
479
|
benCount?: string;
|
|
480
480
|
fissionNumber?: string;
|
|
481
481
|
}
|
|
482
|
-
/**
|
|
482
|
+
/** 通话媒体类型;各端 wire 0/1 的不同含义已转换成统一业务值,宿主无需读取 raw callType。 */
|
|
483
483
|
type ImCallKind = 'audio' | 'video';
|
|
484
484
|
/**
|
|
485
|
-
* 通话结束结果。Android 跨端同步把未接与取消都写成 callStatus=0
|
|
485
|
+
* 通话结束结果。Android 跨端同步把未接与取消都写成 callStatus=0,只能转换为 missed。
|
|
486
486
|
* `unknown` 仅表示该端 status 数字无法识别,不得猜成 completed。
|
|
487
487
|
*/
|
|
488
488
|
type ImCallOutcome = 'missed' | 'rejected' | 'cancelled' | 'completed' | 'busy' | 'no-permission' | 'interrupted' | 'unknown';
|
|
@@ -490,7 +490,7 @@ type ImCallOutcome = 'missed' | 'rejected' | 'cancelled' | 'completed' | 'busy'
|
|
|
490
490
|
* 单聊通话记录正文(contentType==='call',协议 BMessage.contentType=10)。
|
|
491
491
|
*
|
|
492
492
|
* @remarks JSON 在 BMessage.content。Android 本地 / Android 跨端同步 / iOS 三套字段名与 0/1 含义不同,
|
|
493
|
-
*
|
|
493
|
+
* 仅由 mapping/call-record-body 转换成统一业务值。记录由各端本地插入,不能当普通聊天发出。
|
|
494
494
|
*/
|
|
495
495
|
interface ImCallRecordBody {
|
|
496
496
|
callKind: ImCallKind;
|
|
@@ -517,7 +517,7 @@ type ImRedPacketType = 1 | 2 | 3 | 4;
|
|
|
517
517
|
* @remarks 字段来自 proto 72-79 + 复用 34/35/38/49。领域名 `packetId` 对应 wire `rad_packet_id`。
|
|
518
518
|
* 金额保持 proto string,单位是否微单位未证实,禁止默认套转账 ×1e6。
|
|
519
519
|
* HTTP 详情状态与本地「自己已领」属于宿主投影,不进本 DTO(status 39 / state 53 未裁定)。
|
|
520
|
-
*
|
|
520
|
+
* 当前不提供 `sendRedPacket`;出站字段仅用于 codec 往返闭合。
|
|
521
521
|
*/
|
|
522
522
|
interface ImRedPacketBody {
|
|
523
523
|
packetId: string;
|
|
@@ -537,7 +537,7 @@ interface ImRedPacketBody {
|
|
|
537
537
|
type ImContactKind = 'individual' | 'group' | 'channel' | 'robot' | 'unknown';
|
|
538
538
|
/**
|
|
539
539
|
* 名片消息内容体(contentType==='contact')。字段来自 BMessage contentType=8,但使用领域友好命名:
|
|
540
|
-
* id/icon/name
|
|
540
|
+
* id/icon/name 分别转换为 targetId/avatar/displayName;visitCardKey 转换为 kind,未知值放 rawKind。
|
|
541
541
|
*/
|
|
542
542
|
interface ImContactBody {
|
|
543
543
|
/** 被分享对象 id:个人 userId、普通群 groupId、频道 id 或机器人 id。 */
|
|
@@ -569,7 +569,7 @@ interface UnknownMessageBody {
|
|
|
569
569
|
* 若干项共享消息级的撤回、已读、引用与转发语义。
|
|
570
570
|
*/
|
|
571
571
|
interface ImMediaAlbumItem {
|
|
572
|
-
/** 该项是图片还是视频;由协议
|
|
572
|
+
/** 该项是图片还是视频;由协议 mediaType 转换,无法识别的项会在解析时丢弃。 */
|
|
573
573
|
kind: 'image' | 'video';
|
|
574
574
|
/** 远端地址。加密项也是这个地址,解密用本项自己的 `teaKey`。 */
|
|
575
575
|
url: string;
|
|
@@ -651,8 +651,28 @@ interface ImLiveRoomBody {
|
|
|
651
651
|
/** 点赞数十进制字符串,保持协议原文,不在 Core 换算。 */
|
|
652
652
|
liveRoomLikes?: string;
|
|
653
653
|
}
|
|
654
|
+
/** 客服正文保留一条消息内的全部附件;图片和文件各自保持服务端顺序。 */
|
|
655
|
+
interface ImCustomerServiceBody {
|
|
656
|
+
/** 原始文字;空白不被当作不存在。 */
|
|
657
|
+
text: string;
|
|
658
|
+
/** 图片直达地址,不套用普通消息的加密文件结构。 */
|
|
659
|
+
images: readonly string[];
|
|
660
|
+
/** 文件与名称、大小按协议数组索引配对,不创建伪消息 ID。 */
|
|
661
|
+
files: readonly ImCustomerServiceFile[];
|
|
662
|
+
}
|
|
663
|
+
/** 客服文件元数据。大小是服务端展示文字,不能据此认定下载完整。 */
|
|
664
|
+
interface ImCustomerServiceFile {
|
|
665
|
+
/** 服务端给出的资源地址。 */
|
|
666
|
+
url: string;
|
|
667
|
+
/** 服务端名称;缺省时从 URL 最后一个路径片段提取。 */
|
|
668
|
+
name: string;
|
|
669
|
+
/** 可缺省的原始大小描述,例如 1.5MB,并非精确字节数。 */
|
|
670
|
+
sizeLabel?: string;
|
|
671
|
+
}
|
|
654
672
|
interface ImMessageBody {
|
|
655
|
-
/**
|
|
673
|
+
/** 客服专用复合正文;不能直接作为普通消息发送。 */
|
|
674
|
+
customerService?: ImCustomerServiceBody;
|
|
675
|
+
/** 文本内容(明文,解密后的结果)。 */
|
|
656
676
|
text?: string;
|
|
657
677
|
/** contentType==='system' 时的结构化系统提示体(群通知;text 忽略)。 */
|
|
658
678
|
system?: ImSystemMessageBody;
|
|
@@ -702,7 +722,7 @@ interface MentionRange {
|
|
|
702
722
|
end: number;
|
|
703
723
|
}
|
|
704
724
|
/**
|
|
705
|
-
* 群消息 @ 提及(Android
|
|
725
|
+
* 群消息 @ 提及(Android 三写载体的统一解析):`atAll`(MESGrpChat.nNotifyCount=-1)、`atUserIds`(sNotifyUsers 被 @ 成员,
|
|
706
726
|
* 含正文 token 读边界补全)、`ranges`(extend.atRange,可选、仅诊断/兼容——展示**不依赖其坐标**)。正文 `body.text` 保留 `[userId]` token 原样(真相不变);
|
|
707
727
|
* **展示权威来源 = 正文 token + atUserIds/atAll**,由纯函数 `resolveMentionSegments` 还原为高亮段(含 @昵称/@所有人/@我),UI 不自行解析。
|
|
708
728
|
*/
|
|
@@ -724,21 +744,21 @@ type ImMessageFailureReason = 'timeout' | 'rejected' | 'encrypt_failed' | 'netwo
|
|
|
724
744
|
*/
|
|
725
745
|
type ImFailureDisplayCode = 'media.empty' | 'media.noCrypto' | 'media.previewFailed' | 'media.encryptFailed' | 'media.resumeUnavailable' | 'media.cleanupUnconfirmed' | 'media.uploadFailed' | 'media.uploadTimeout' | 'media.cancelled' | 'media.invalidDuration' | 'media.uploadInterrupted' | 'media.contentTooLarge' | 'contactRequired' | 'messageRefused' | 'forbiddenOrLeft' | 'contentRejected' | 'groupDismissed' | 'groupUnavailable' | 'channelDismissed' | 'channelMuted' | 'channelNotMember' | 'channelAdminRequired' | 'conversationUnsupported' | 'sendCanceled' | 'sessionLoggedOut' | 'timeout' | 'network' | 'unknown';
|
|
726
746
|
interface ImMessageFailure {
|
|
727
|
-
/**
|
|
747
|
+
/** 转换后的错误码(来自 MESChatAck.errcode 或本地失败码,本地码用负值)。 */
|
|
728
748
|
code: number;
|
|
729
749
|
/** 失败机器分类(重试 / fail-fast / 统计消费)。 */
|
|
730
750
|
reason: ImMessageFailureReason;
|
|
731
|
-
/**
|
|
751
|
+
/** 失败展示语义码:UI 经 im-i18n 按语言渲染,缺省时使用 message;不单独触发消息状态更新。 */
|
|
732
752
|
displayCode?: ImFailureDisplayCode;
|
|
733
|
-
/** 展示模板参数(如未支持会话类型的 type
|
|
753
|
+
/** 展示模板参数(如未支持会话类型的 type);不单独触发消息状态更新。 */
|
|
734
754
|
params?: Record<string, string | number>;
|
|
735
755
|
/** 媒体失败的媒体类型(图片/视频/语音/文件):供 displayCode 为 media.* 时渲染 label。 */
|
|
736
756
|
mediaKind?: MediaKind;
|
|
737
|
-
/**
|
|
757
|
+
/** 后端原文或诊断文案;没有专门展示码时用于展示,不单独触发消息状态更新(见 merge.failureEqual)。 */
|
|
738
758
|
message?: string;
|
|
739
759
|
/**
|
|
740
760
|
* 是否可重试(false=业务级不可重试):如 direct 非好友或 GROUP 不在群(0x8201)、内容为空/违规(0x8202)、群已解散(0x8315)→ UI 隐藏「重发」。
|
|
741
|
-
* 缺省(undefined)视为可重试(向后兼容)。由 code 决定(classifyAckFailure
|
|
761
|
+
* 缺省(undefined)视为可重试(向后兼容)。由 code 决定(classifyAckFailure),不单独触发消息状态更新。
|
|
742
762
|
*/
|
|
743
763
|
retryable?: boolean;
|
|
744
764
|
}
|
|
@@ -781,7 +801,7 @@ interface MediaTaskUpdate {
|
|
|
781
801
|
failure?: ImMessageFailure;
|
|
782
802
|
}
|
|
783
803
|
interface ImMessageEncryption {
|
|
784
|
-
/**
|
|
804
|
+
/** true=消息密文链路, false=明文链路(encrypt=0)。 */
|
|
785
805
|
encrypted: boolean;
|
|
786
806
|
/** 扩展:加密方案标识,默认 'rsa-tea'。 */
|
|
787
807
|
scheme?: 'rsa-tea';
|
|
@@ -790,16 +810,16 @@ interface ImMessageEncryption {
|
|
|
790
810
|
}
|
|
791
811
|
/** 单条消息领域模型(§4.1)。主键为客户端生成的 id(无 serverId)。 */
|
|
792
812
|
interface ImMessage {
|
|
793
|
-
/**
|
|
813
|
+
/** 客户端生成的稳定消息 ID(UUID),同时作幂等键;刷新后保持。 */
|
|
794
814
|
id: string;
|
|
795
|
-
/**
|
|
815
|
+
/** 消息所属会话的字符串 ID;必须结合 conversationType 使用。 */
|
|
796
816
|
conversationId: string;
|
|
797
817
|
conversationType: ConversationType;
|
|
798
|
-
/**
|
|
818
|
+
/** 发送者的字符串用户 ID。 */
|
|
799
819
|
senderId: string;
|
|
800
820
|
contentType: MessageContentType;
|
|
801
821
|
body: ImMessageBody;
|
|
802
|
-
/**
|
|
822
|
+
/** 统一毫秒 number(本地创建时间,乐观渲染用)。 */
|
|
803
823
|
createdAt: number;
|
|
804
824
|
/** SDK 内部排序键;有效服务端时间优先,ACK 后可以更新。宿主不解析它,消息身份始终使用 id。 */
|
|
805
825
|
sortKey: string;
|
|
@@ -808,7 +828,7 @@ interface ImMessage {
|
|
|
808
828
|
failure?: ImMessageFailure;
|
|
809
829
|
/** 服务端回传的 epoch 毫秒时间;有效时用于正式排序与展示,createdAt 仍保留创建记录。 */
|
|
810
830
|
serverTime?: number;
|
|
811
|
-
/**
|
|
831
|
+
/** 默认 'unread'。 */
|
|
812
832
|
receipt: MessageReceipt;
|
|
813
833
|
/** 离线单聊服务端标记当前账号已在其它端读过;仅用于本地未读投影,不改变对端回执 receipt。 */
|
|
814
834
|
readBySelf?: boolean;
|
|
@@ -841,7 +861,7 @@ interface ImMessage {
|
|
|
841
861
|
/** 扩展位:后端新增语义先落这里,避免污染核心字段。 */
|
|
842
862
|
extensions?: Record<string, unknown>;
|
|
843
863
|
/**
|
|
844
|
-
* 诊断快照(§4.1
|
|
864
|
+
* 诊断快照(§4.1 诊断口径):后端下发的原始协议字段(已转换为可 JSON 序列化形态)。
|
|
845
865
|
* 默认不填充,仅当映射开启 keepRaw 时附带,便于联调、与后端核对原始下发;不参与任何业务逻辑。
|
|
846
866
|
*/
|
|
847
867
|
raw?: ImMessageRaw;
|
|
@@ -958,17 +978,17 @@ type ChannelSessionState = 'active' | 'guest' | 'left' | 'removed' | 'dismissed'
|
|
|
958
978
|
interface ImSession {
|
|
959
979
|
id: string;
|
|
960
980
|
type: ConversationType;
|
|
961
|
-
/**
|
|
981
|
+
/** 由映射层从用户/群资料补齐。 */
|
|
962
982
|
title: string;
|
|
963
983
|
avatar?: string;
|
|
964
984
|
/**
|
|
965
|
-
*
|
|
985
|
+
* 会话最后一条的预览串(**已收窄**):仅承载 text 消息的正文(供会话列表 previewSegments 解析 @/表情,需原始正文串);
|
|
966
986
|
* 媒体 / 加密 / 系统 / 撤回一律空串——其语义改由 lastMessageSummary 承载、UI 经 im-i18n 渲染。旧盘遗留的中文占位在 hydrate / projectSession 重算时清空。
|
|
967
987
|
*/
|
|
968
988
|
lastMessagePreview: string;
|
|
969
989
|
/**
|
|
970
|
-
*
|
|
971
|
-
*
|
|
990
|
+
* 最后一条消息的语义摘要,持久保存并由 im-i18n 按语言生成文案。
|
|
991
|
+
* 与 lastMessagePreview 同时保存,变化检查使用逐字段比较;旧会话缺此字段时可使用 lastMessagePreview。
|
|
972
992
|
*/
|
|
973
993
|
lastMessageSummary?: LastMessageSummary;
|
|
974
994
|
/** 最后一条消息发送者 id(群会话列表预览「发送者名: 内容」前缀用;`'system'`=系统提示、==自己=我发的,前缀策略由宿主定)。 */
|
|
@@ -992,7 +1012,7 @@ interface ImSession {
|
|
|
992
1012
|
* 会话内容仍显示最新一条消息。收到别人 @我 +1、查看/已读该会话清零。投影自 ReadState.mentionUnreadCount,与 unreadCount 同源持久化。
|
|
993
1013
|
*/
|
|
994
1014
|
mentionUnreadCount?: number;
|
|
995
|
-
/**
|
|
1015
|
+
/** 排序时间(毫秒 number)。 */
|
|
996
1016
|
timestamp: number;
|
|
997
1017
|
/**
|
|
998
1018
|
* 用户手工添加的本地“稍后处理”提醒。
|
|
@@ -1008,7 +1028,7 @@ interface ImSession {
|
|
|
1008
1028
|
topTime?: number;
|
|
1009
1029
|
/**
|
|
1010
1030
|
* 最新一条消息若为「己方且未完成发送」的态:'sending'(pending/uploading/sending 统一)/ 'failed'。
|
|
1011
|
-
* 派生展示字段(随最新消息变化,会话列表据此显示发送中 loading / 失败图标);运行期真相,不持久化(persistSession
|
|
1031
|
+
* 派生展示字段(随最新消息变化,会话列表据此显示发送中 loading / 失败图标);运行期真相,不持久化(persistSession 写入本地存储时剔除)。
|
|
1012
1032
|
*/
|
|
1013
1033
|
lastMessageSendState?: 'sending' | 'failed';
|
|
1014
1034
|
/**
|
|
@@ -1016,11 +1036,11 @@ interface ImSession {
|
|
|
1016
1036
|
*
|
|
1017
1037
|
* 只在自己发出且 `status='sent'` 时投影;发送中/失败、对端消息、撤回、全员删除和系统提示都不给。
|
|
1018
1038
|
* `delivered` 与尚未回执一样投影为 `unread`;当前协议没有送达通知,不能把 `sent` 当作对端已收到。
|
|
1019
|
-
*
|
|
1039
|
+
* 该字段随最新消息变化,并随会话写入本地存储,避免冷启动后
|
|
1020
1040
|
* 因「盘中缺字段 / 内存有字段」反复广播;对端已读变化必须刷新会话行。
|
|
1021
1041
|
*/
|
|
1022
1042
|
lastMessageReceipt?: 'unread' | 'read';
|
|
1023
|
-
/**
|
|
1043
|
+
/** 我方已读游标(见 §4.3)。 */
|
|
1024
1044
|
readCursor?: string;
|
|
1025
1045
|
/** 群受限状态(仅 group;来自 0x2204 群通知 side-effect)。缺省视为 'active'(可正常发送)。 */
|
|
1026
1046
|
groupState?: GroupSessionState;
|
|
@@ -1038,11 +1058,11 @@ interface ImSession {
|
|
|
1038
1058
|
interface ReadState {
|
|
1039
1059
|
conversationId: string;
|
|
1040
1060
|
/**
|
|
1041
|
-
*
|
|
1042
|
-
*
|
|
1061
|
+
* 新写入必须携带会话类型;可选用于兼容迁移前的存储记录。
|
|
1062
|
+
* storage migration 会根据对应 session 补齐旧记录。
|
|
1043
1063
|
*/
|
|
1044
1064
|
conversationType?: ConversationType;
|
|
1045
|
-
/**
|
|
1065
|
+
/** 当前账号已读到的位置,以消息 id 或后端游标表示。 */
|
|
1046
1066
|
readCursor: string;
|
|
1047
1067
|
/**
|
|
1048
1068
|
* 已读游标消息的 sortKey(位置)持久化快照:重启后 readCursor 对应消息未必被 hydrate 到内存,
|
|
@@ -1076,12 +1096,12 @@ interface OutboxUpdate {
|
|
|
1076
1096
|
}
|
|
1077
1097
|
/** 发送队列项(§4.4)。id 复用对应 ImMessage.id 以保证重试幂等。 */
|
|
1078
1098
|
interface OutboxMessage {
|
|
1079
|
-
/**
|
|
1099
|
+
/** == 对应 ImMessage.id(客户端生成,重试时复用以保证幂等)。 */
|
|
1080
1100
|
id: string;
|
|
1081
1101
|
conversationId: string;
|
|
1082
1102
|
conversationType: ConversationType;
|
|
1083
1103
|
contentType: MessageContentType;
|
|
1084
|
-
/**
|
|
1104
|
+
/** 待发送内容(明文;加密在发送管线内按 encryption 处理)。 */
|
|
1085
1105
|
body: ImMessageBody;
|
|
1086
1106
|
/** 群 @ 提及(发送侧:宿主从输入框提取;正文 body.text 已含 [userId] token / @所有人 文字,本字段供群发送策略编码 sNotifyUsers/nNotifyCount/extend)。仅群 @ 消息有。 */
|
|
1087
1107
|
mention?: ImMessageMention;
|
|
@@ -1095,7 +1115,7 @@ interface OutboxMessage {
|
|
|
1095
1115
|
/**
|
|
1096
1116
|
* 复发策略(生命周期 logout 语义):`automatic`(默认,缺省视同)= onAuthenticated/断线重连时自动复发;
|
|
1097
1117
|
* `manual` = 仅用户显式 retry 才发(logout 时把在途消息置 manual,避免退账号后下次登录无提示自动补发)。
|
|
1098
|
-
*
|
|
1118
|
+
* 持久化随账本写入本地存储,故 logout(preserve)→重登后仍为 manual,不被自动复发;retry 会翻回 automatic。缺省(旧账本)按 automatic 处理(向后兼容)。
|
|
1099
1119
|
*/
|
|
1100
1120
|
resumePolicy?: 'automatic' | 'manual';
|
|
1101
1121
|
}
|
|
@@ -1115,7 +1135,7 @@ interface ContactRemarkPhone {
|
|
|
1115
1135
|
countryCode: string;
|
|
1116
1136
|
mobile: string;
|
|
1117
1137
|
}
|
|
1118
|
-
/** 用户资料领域模型(§4.5)。由 ImProfilePort
|
|
1138
|
+
/** 用户资料领域模型(§4.5)。由 ImProfilePort 拉取、映射层转换字段。 */
|
|
1119
1139
|
interface UserProfile {
|
|
1120
1140
|
id: string;
|
|
1121
1141
|
/** 用户自设昵称(后端 `nick_name`)。 */
|
|
@@ -1140,7 +1160,7 @@ interface UserProfile {
|
|
|
1140
1160
|
remarkPhones?: ContactRemarkPhone[];
|
|
1141
1161
|
/** 扩展:消息加密公钥来源(§7 复用)。 */
|
|
1142
1162
|
publicKey?: string;
|
|
1143
|
-
/** 会话免打扰态(好友关系 `is_undisturb`
|
|
1163
|
+
/** 会话免打扰态(好友关系 `is_undisturb` 转换为布尔值):仅好友资料返回,供领域层回填 `ImSession.muted` 做多端/冷启动恢复;非好友无此字段(undefined,不覆盖本地)。 */
|
|
1144
1164
|
muted?: boolean;
|
|
1145
1165
|
extensions?: Record<string, unknown>;
|
|
1146
1166
|
}
|
|
@@ -1156,11 +1176,11 @@ interface GroupProfile {
|
|
|
1156
1176
|
verifyWay?: number;
|
|
1157
1177
|
/** 普通群邀请码;仅 `verifyWay === 4` 时有业务意义。 */
|
|
1158
1178
|
inviteCode?: string;
|
|
1159
|
-
/** 群状态(后端 status
|
|
1179
|
+
/** 群状态(后端 status,具体值语义待后端明确):保留不丢弃,供「普通成员感知群解散」兜底(解散仅通知群主)。 */
|
|
1160
1180
|
status?: number;
|
|
1161
|
-
/** 当前用户是否在群(后端 is_ingroup:false
|
|
1181
|
+
/** 当前用户是否在群(后端 is_ingroup:false=已不在群,被踢/退群的兜底禁发来源)。 */
|
|
1162
1182
|
isInGroup?: boolean;
|
|
1163
|
-
/** 当前用户对该群的免打扰态(`to_user.is_undisturb`
|
|
1183
|
+
/** 当前用户对该群的免打扰态(`to_user.is_undisturb` 转换为布尔值):供领域层回填 `ImSession.muted` 恢复;缺省(undefined)表示后端未返回,不覆盖本地。 */
|
|
1164
1184
|
muted?: boolean;
|
|
1165
1185
|
/** 扩展位:members[] 等明细留扩展。 */
|
|
1166
1186
|
extensions?: Record<string, unknown>;
|
|
@@ -1272,9 +1292,9 @@ interface ChannelProfile {
|
|
|
1272
1292
|
/** CHANNEL 独立访问限制事实;browser 新映射必须提供,legacy storage 可能缺失。 */
|
|
1273
1293
|
accessSnapshot?: ChannelAccessSnapshot;
|
|
1274
1294
|
muted?: boolean;
|
|
1275
|
-
/**
|
|
1295
|
+
/** 服务端频道类型转换后的业务值;不得用它把频道改路由到 `supergroup`。 */
|
|
1276
1296
|
channelKind?: string;
|
|
1277
|
-
/**
|
|
1297
|
+
/** 本地密钥缓存操作编号/服务端未来版本的非敏感标识;不承载 secret_key。 */
|
|
1278
1298
|
secretKeyVersion?: string;
|
|
1279
1299
|
/** `/user_radio/list` 的资料增量版本;与 secretKeyVersion 无关。 */
|
|
1280
1300
|
updateVersion?: string;
|
|
@@ -1304,7 +1324,7 @@ interface ChannelMemberPage {
|
|
|
1304
1324
|
}
|
|
1305
1325
|
/** CHANNEL @ 选择器返回的用户项;专用 UserInfo 协议不提供角色,不得写入 role-rich 成员缓存。 */
|
|
1306
1326
|
interface ChannelMentionMember {
|
|
1307
|
-
/**
|
|
1327
|
+
/** 用户 ID,以字符串表示;来自 `/user_radio/member/*` 的 `user_id`。 */
|
|
1308
1328
|
userId: string;
|
|
1309
1329
|
/** CHANNEL @ 面板展示名;按频道昵称、全局昵称、协议备用名、用户 ID 的顺序降级。 */
|
|
1310
1330
|
displayName: string;
|
|
@@ -1337,7 +1357,7 @@ interface ImError {
|
|
|
1337
1357
|
* 诊断日志钩子(§5.3,可选):宿主注入以观察核心诊断(如 ACK 原始 errcode)。
|
|
1338
1358
|
* core 不内置 console;不注入则不产生诊断输出。
|
|
1339
1359
|
*/
|
|
1340
|
-
/**
|
|
1360
|
+
/** 当前连接策略固定为 single,只连接首个端点。 */
|
|
1341
1361
|
type ConnectionStrategy = 'single' | 'race' | 'sequential';
|
|
1342
1362
|
interface ImReconnectOptions {
|
|
1343
1363
|
/** 退避基数毫秒,默认 1000。 */
|
|
@@ -1383,7 +1403,7 @@ interface ContactApplication {
|
|
|
1383
1403
|
/** 申请人的产品展示 ID,例如服务端 `user_info.mid`。 */
|
|
1384
1404
|
applicantDisplayId?: string;
|
|
1385
1405
|
message: string;
|
|
1386
|
-
/**
|
|
1406
|
+
/** 服务端时间戳转换后的 Unix 毫秒;源字段缺失时保持未知。 */
|
|
1387
1407
|
createdAt?: number;
|
|
1388
1408
|
}
|
|
1389
1409
|
/** 联系人申请页;分页耗尽依据原始 type=1 页,不依据产品聚合结果。 */
|
|
@@ -1439,7 +1459,7 @@ interface ApplicationTarget {
|
|
|
1439
1459
|
* GROUP 申请/邀请 provider 的权威记录。
|
|
1440
1460
|
*
|
|
1441
1461
|
* @remarks `applicationId` 是审核命令参数,`groupId` 是会话身份,两者不可互换;actor/target
|
|
1442
|
-
* 是申请时快照,最终成员关系和群资料仍由各自领域 API
|
|
1462
|
+
* 是申请时快照,最终成员关系和群资料仍由各自领域 API 统一更新。
|
|
1443
1463
|
*/
|
|
1444
1464
|
interface GroupApplication {
|
|
1445
1465
|
applicationId: string;
|
|
@@ -1450,7 +1470,7 @@ interface GroupApplication {
|
|
|
1450
1470
|
target: ApplicationTarget;
|
|
1451
1471
|
/** 申请附言或邀请说明,服务端允许为空。 */
|
|
1452
1472
|
message: string;
|
|
1453
|
-
/**
|
|
1473
|
+
/** 服务端时间戳转换后的 Unix 毫秒;源字段缺失时保持未知。 */
|
|
1454
1474
|
createdAt?: number;
|
|
1455
1475
|
}
|
|
1456
1476
|
/** GROUP 申请页;分页耗尽依据原始 type=2 混合页。 */
|
|
@@ -1549,7 +1569,7 @@ interface ChannelJoinApplication {
|
|
|
1549
1569
|
channelAvatar?: string;
|
|
1550
1570
|
/** 申请人填写的入群说明,服务端允许为空。 */
|
|
1551
1571
|
message: string;
|
|
1552
|
-
/**
|
|
1572
|
+
/** 服务端创建时间转换为 Unix 毫秒;源字段缺失或非法时不提供。 */
|
|
1553
1573
|
createdAt?: number;
|
|
1554
1574
|
}
|
|
1555
1575
|
/** CHANNEL 申请列表的页号 cursor 输入;cursor 是下一原始混合页页号。 */
|
|
@@ -1618,7 +1638,7 @@ interface ImChannelProfilePort {
|
|
|
1618
1638
|
getProfile: (channelId: string, options?: {
|
|
1619
1639
|
forceRefresh?: boolean;
|
|
1620
1640
|
}) => Promise<ChannelProfile | null>;
|
|
1621
|
-
/** 清空 CHANNEL profile
|
|
1641
|
+
/** 清空 CHANNEL profile 内存缓存,并阻止旧请求写回;与 GROUP profile 保持 sibling。 */
|
|
1622
1642
|
clearCache?: () => void;
|
|
1623
1643
|
}
|
|
1624
1644
|
/** CHANNEL 成员查询。cursor 是频道成员接口的不透明游标。 */
|
|
@@ -1631,7 +1651,7 @@ interface ChannelMemberPageQuery {
|
|
|
1631
1651
|
}
|
|
1632
1652
|
/** CHANNEL 成员读取 capability;分页列表与当前消息窗口的稀疏批量读取共用同一独立 adapter。 */
|
|
1633
1653
|
interface ImChannelMemberPort {
|
|
1634
|
-
/** hydrate
|
|
1654
|
+
/** hydrate 有界公共快照;快照新鲜时不重新请求服务端,过期时按完整页重建约 200 人。 */
|
|
1635
1655
|
prefetchMembers?: (channelId: string) => Promise<void>;
|
|
1636
1656
|
/** 只读取公共快照或其本地直接/拼音搜索结果;允许返回过期快照供 UI 先显,不发 HTTP。 */
|
|
1637
1657
|
getCachedMembers?: (input: {
|
|
@@ -1655,9 +1675,9 @@ interface ImChannelMemberPort {
|
|
|
1655
1675
|
getMembersByIds: (channelId: string, userIds: readonly string[], options?: {
|
|
1656
1676
|
forceRefresh?: boolean;
|
|
1657
1677
|
}) => Promise<ChannelMember[]>;
|
|
1658
|
-
/**
|
|
1678
|
+
/** 使频道成员缓存失效;旧请求可以返回原调用方,但不得写回当前缓存。 */
|
|
1659
1679
|
invalidateChannelMembers: (channelId: string) => Promise<void>;
|
|
1660
|
-
/** 清空全部 CHANNEL role-rich
|
|
1680
|
+
/** 清空全部 CHANNEL role-rich 成员内存缓存,并阻止旧请求写回;持久层由 storage 分类清理统一处理。 */
|
|
1661
1681
|
clearCache?: () => void;
|
|
1662
1682
|
}
|
|
1663
1683
|
/** CHANNEL @ 专用成员页查询;不得复用 role-rich 管理列表的 query/response 语义。 */
|
|
@@ -1741,10 +1761,9 @@ interface TransportEvents {
|
|
|
1741
1761
|
interface TransportPort {
|
|
1742
1762
|
readonly state: TransportState;
|
|
1743
1763
|
/**
|
|
1744
|
-
*
|
|
1745
|
-
*
|
|
1746
|
-
*
|
|
1747
|
-
* 该清理契约由 @k2/im-browser 的 WsTransport 实现并锁测(切片 04)。
|
|
1764
|
+
* 候选连接地址数组;当前实现仅连接 endpoints[0]。
|
|
1765
|
+
* 再次 connect() 时必须先关闭旧连接,保证任一时刻至多存在一个活跃传输连接。
|
|
1766
|
+
* @k2/im-browser 的 WsTransport 实现该约定。
|
|
1748
1767
|
*/
|
|
1749
1768
|
connect: (endpoints: TransportEndpoint[], options?: TransportConnectOptions) => Promise<void>;
|
|
1750
1769
|
/** 发送一帧(已编码字节)。 */
|
|
@@ -1755,7 +1774,7 @@ interface TransportPort {
|
|
|
1755
1774
|
}
|
|
1756
1775
|
|
|
1757
1776
|
interface ImEndpointProvider {
|
|
1758
|
-
/** WS
|
|
1777
|
+
/** WS 候选地址。返回单元素数组;后端下发多 host 时返回多元素。 */
|
|
1759
1778
|
getEndpoints: () => Promise<TransportEndpoint[]>;
|
|
1760
1779
|
/** CM Protobuf HTTP 基址。 */
|
|
1761
1780
|
getCmHttpBaseUrl: () => Promise<string>;
|
|
@@ -1944,7 +1963,7 @@ interface ImProfilePort {
|
|
|
1944
1963
|
getGroupProfile: (groupId: string, opts?: {
|
|
1945
1964
|
forceRefresh?: boolean;
|
|
1946
1965
|
}) => Promise<GroupProfile | null>;
|
|
1947
|
-
/** 清空实现持有的 user/GROUP profile/member
|
|
1966
|
+
/** 清空实现持有的 user/GROUP profile/member 内存缓存,并阻止旧请求写回;无缓存的实现可省略。 */
|
|
1948
1967
|
clearCache?: () => void;
|
|
1949
1968
|
}
|
|
1950
1969
|
|
|
@@ -2079,53 +2098,49 @@ interface ImDecryptRecoveryRecord {
|
|
|
2079
2098
|
createdAt: number;
|
|
2080
2099
|
}
|
|
2081
2100
|
/**
|
|
2082
|
-
*
|
|
2101
|
+
* 持久化用户资料:领域 `UserProfile` + 写入本地存储时间戳。跨刷新持久化以消除群历史发送者「占位→回填」闪动。
|
|
2083
2102
|
* 分字段存(remark/nickname/avatar),展示名优先级在读取侧算,避免固化合并结果。
|
|
2084
2103
|
*/
|
|
2085
2104
|
interface StoredUserProfile extends UserProfile {
|
|
2086
|
-
/**
|
|
2105
|
+
/** 写入本地存储/刷新时间(毫秒),供 TTL 过期判断。 */
|
|
2087
2106
|
updatedAt: number;
|
|
2088
2107
|
}
|
|
2089
2108
|
/**
|
|
2090
|
-
*
|
|
2091
|
-
*
|
|
2109
|
+
* 持久化群成员项:群内昵称 + 预留角色/加入方式。
|
|
2110
|
+
* roleId/joinType 供群成员列表展示,可缺省;头像保存在 userProfiles,避免重复存储。
|
|
2092
2111
|
*/
|
|
2093
2112
|
interface StoredGroupMember {
|
|
2094
2113
|
userId: string;
|
|
2095
2114
|
/** 群内昵称(展示名优先级第 2 级,仅次于好友备注)。 */
|
|
2096
2115
|
groupNick: string;
|
|
2097
|
-
/**
|
|
2116
|
+
/** 成员角色 roleId(1 普通 / 9 管理员 / 10 群主);响应缺少时可省略。 */
|
|
2098
2117
|
roleId?: number;
|
|
2099
|
-
/**
|
|
2118
|
+
/** 加入方式 joinType(0 退群 / 1 主动 / 2 邀请 / 3 群主);响应缺少时可省略。 */
|
|
2100
2119
|
joinType?: number;
|
|
2101
2120
|
}
|
|
2102
2121
|
/**
|
|
2103
|
-
*
|
|
2104
|
-
*
|
|
2105
|
-
* 【前瞻·P-B】结构对普通群/超级群通用;超级群海量成员按需 per-sender 填充由各会话类型策略决定,store 不感知类型。
|
|
2122
|
+
* 持久保存群成员列表,按 groupId 保存整份数据,同时记录 updateVersion 与更新时间。
|
|
2123
|
+
* 增量响应由资料适配层合并后写入;存储层不解释成员变更。
|
|
2106
2124
|
*/
|
|
2107
2125
|
interface StoredGroupMemberList {
|
|
2108
2126
|
groupId: string;
|
|
2109
2127
|
members: StoredGroupMember[];
|
|
2110
|
-
/**
|
|
2128
|
+
/** 成员列表增量版本 update_version;服务端未返回时可省略。 */
|
|
2111
2129
|
updateVersion?: number;
|
|
2112
|
-
/**
|
|
2130
|
+
/** 写入本地存储/刷新时间(毫秒),供 TTL 过期判断。 */
|
|
2113
2131
|
updatedAt: number;
|
|
2114
2132
|
}
|
|
2115
2133
|
/**
|
|
2116
|
-
*
|
|
2117
|
-
*
|
|
2118
|
-
* 故须在正常态把群主信息落盘。
|
|
2119
|
-
* 【前瞻·P-B】结构对普通群/超级群通用(群主体系 `roleId=10` 两类群共用);超级群特有字段(返佣/游客/管理员)由各会话类型
|
|
2120
|
-
* 策略在 `extensions` 扩展,store 不感知类型——新增群类型走 sibling 策略填充,不改本结构语义。
|
|
2134
|
+
* 持久保存普通群资料,包括群主 ownerId、名称、头像、成员数和更新时间。
|
|
2135
|
+
* 被踢、退群或解散后无法访问远端群资料时,产品仍可读取此前保存的群主标识。
|
|
2121
2136
|
*/
|
|
2122
2137
|
interface StoredGroupProfile extends GroupProfile {
|
|
2123
|
-
/**
|
|
2138
|
+
/** 写入本地存储/刷新时间(毫秒),供 TTL 过期判断。 */
|
|
2124
2139
|
updatedAt: number;
|
|
2125
2140
|
}
|
|
2126
2141
|
/** CHANNEL 资料的账号级持久化副本;不得包含 `secret_key`。 */
|
|
2127
2142
|
interface StoredChannelProfile extends ChannelProfile {
|
|
2128
|
-
/**
|
|
2143
|
+
/** 写入本地存储/刷新时间(毫秒),供后续资料 TTL 与诊断使用。 */
|
|
2129
2144
|
updatedAt: number;
|
|
2130
2145
|
}
|
|
2131
2146
|
/** CHANNEL 稀疏成员缓存项;按 `{channelId,userId}` 存储,不允许把整频道成员全量塞入单条记录。 */
|
|
@@ -2175,7 +2190,7 @@ type StoredConversationBackground = {
|
|
|
2175
2190
|
* 本地存储端口(DB 无关、异步、可测试)。面向消息/会话/已读/发送账本/元数据等领域实体。
|
|
2176
2191
|
*
|
|
2177
2192
|
* 生命周期:宿主(SDK)在拿到登录 userId 后先 `open({ namespace: userId })`(幂等,内部跑 schema 迁移),
|
|
2178
|
-
* 再由 domainState `hydrate()` 回读;登出/切账号时 `close()`。所有写入源自 domainState
|
|
2193
|
+
* 再由 domainState `hydrate()` 回读;登出/切账号时 `close()`。所有写入源自 domainState 统一更新入口,
|
|
2179
2194
|
* 失败经 `error` 事件(scope:'storage')暴露、不静默吞、不阻塞内存主流程。
|
|
2180
2195
|
*/
|
|
2181
2196
|
interface ImStoragePort {
|
|
@@ -2191,7 +2206,7 @@ interface ImStoragePort {
|
|
|
2191
2206
|
/** 关闭库句柄(登出/切账号)。 */
|
|
2192
2207
|
close: () => Promise<void>;
|
|
2193
2208
|
/**
|
|
2194
|
-
* 只清当前已打开账号的可重建缓存;messages/sessions/read/drafts/outbox/pinned
|
|
2209
|
+
* 只清当前已打开账号的可重建缓存;messages/sessions/read/drafts/outbox/pinned/删除标记/sync meta 等 durable 数据必须保留。
|
|
2195
2210
|
* 自定义 adapter 可省略;产品清理入口检测缺失后显式拒绝,不能伪装成功。
|
|
2196
2211
|
*/
|
|
2197
2212
|
clearRebuildableCaches?: () => Promise<void>;
|
|
@@ -2244,7 +2259,7 @@ interface ImStoragePort {
|
|
|
2244
2259
|
deleteConversationDecryptRecoveries?: (conversation: ConversationRef) => Promise<void>;
|
|
2245
2260
|
/** 全量会话(hydrate 用)。 */
|
|
2246
2261
|
getSessions: () => Promise<ImSession[]>;
|
|
2247
|
-
/**
|
|
2262
|
+
/** 批量写入本地存储会话(按 id 覆盖写)。 */
|
|
2248
2263
|
saveSessions: (sessions: readonly ImSession[]) => Promise<void>;
|
|
2249
2264
|
/** 删除单会话行(删除会话用)。 */
|
|
2250
2265
|
deleteSession: (conversation: ImStorageConversation) => Promise<void>;
|
|
@@ -2262,7 +2277,7 @@ interface ImStoragePort {
|
|
|
2262
2277
|
clearConversationHistory?: (conversation: ConversationRef, nextSession?: ImSession, nextReadState?: ReadState) => Promise<void>;
|
|
2263
2278
|
/** 全量已读态(hydrate 用)。 */
|
|
2264
2279
|
getReadStates: () => Promise<ReadState[]>;
|
|
2265
|
-
/**
|
|
2280
|
+
/** 写入本地存储单条已读态(按 conversationId 覆盖写)。 */
|
|
2266
2281
|
saveReadState: (state: ReadState) => Promise<void>;
|
|
2267
2282
|
/** 全量读取当前账号草稿,供账号 runtime hydrate。 */
|
|
2268
2283
|
getDrafts: () => Promise<ConversationDraft$1[]>;
|
|
@@ -2284,7 +2299,7 @@ interface ImStoragePort {
|
|
|
2284
2299
|
deleteDefaultConversationBackground?: () => Promise<void>;
|
|
2285
2300
|
/** 全量在途发送账本(回读用)。 */
|
|
2286
2301
|
getOutbox: () => Promise<OutboxMessage[]>;
|
|
2287
|
-
/**
|
|
2302
|
+
/** 写入本地存储/更新单条 Outbox(按 id 覆盖写)。 */
|
|
2288
2303
|
saveOutboxMessage: (message: OutboxMessage) => Promise<void>;
|
|
2289
2304
|
/** 出队删除单条 Outbox(sent 后)。 */
|
|
2290
2305
|
removeOutboxMessage: (id: string) => Promise<void>;
|
|
@@ -2296,15 +2311,15 @@ interface ImStoragePort {
|
|
|
2296
2311
|
removePinnedMessage: (conversation: ImStorageConversation) => Promise<void>;
|
|
2297
2312
|
/** 按 userId 取持久化用户资料(含 updatedAt 供 TTL 判断);无则 null。best-effort,失败降级不阻塞主流程。 */
|
|
2298
2313
|
getUserProfile: (userId: string) => Promise<StoredUserProfile | null>;
|
|
2299
|
-
/**
|
|
2314
|
+
/** 写入本地存储用户资料(按 userId 覆盖写)。 */
|
|
2300
2315
|
saveUserProfile: (profile: StoredUserProfile) => Promise<void>;
|
|
2301
2316
|
/** 按 groupId 取持久化群成员列表(含 updateVersion/updatedAt);无则 null。 */
|
|
2302
2317
|
getGroupMembers: (groupId: string) => Promise<StoredGroupMemberList | null>;
|
|
2303
|
-
/**
|
|
2318
|
+
/** 按 groupId 保存完整群成员列表;增量响应应由调用方先合并。 */
|
|
2304
2319
|
saveGroupMembers: (list: StoredGroupMemberList) => Promise<void>;
|
|
2305
2320
|
/** 按 groupId 取持久化群资料(含 ownerId/updatedAt);无则 null。供受限群本地标群主(受限群不调群资料接口)。 */
|
|
2306
2321
|
getGroupProfile: (groupId: string) => Promise<StoredGroupProfile | null>;
|
|
2307
|
-
/**
|
|
2322
|
+
/** 写入本地存储群资料(按 id 覆盖写)。 */
|
|
2308
2323
|
saveGroupProfile: (profile: StoredGroupProfile) => Promise<void>;
|
|
2309
2324
|
/** 按 channelId 读取资料;无则 null。 */
|
|
2310
2325
|
getChannelProfile: (channelId: string) => Promise<StoredChannelProfile | null>;
|
|
@@ -2736,7 +2751,7 @@ interface ImGroupCallMeetingSnapshot {
|
|
|
2736
2751
|
* 根据 CHANNEL 角色、生命周期和禁言事实计算稳定访问能力。
|
|
2737
2752
|
*
|
|
2738
2753
|
* 这是无副作用的权限投影:输入来自权威 profile/session,输出供发送和 UI 预检使用;服务端仍做最终
|
|
2739
|
-
* 权限裁决。未知或冲突状态不会借 GROUP
|
|
2754
|
+
* 权限裁决。未知或冲突状态不会借 GROUP 权限兜底,而是转换为受限能力与明确原因。
|
|
2740
2755
|
*/
|
|
2741
2756
|
|
|
2742
2757
|
/** CHANNEL 有效访问解析入参;`nowMs` 显式传入,使 hydrate、发送门禁与 Web 时钟使用同一纯逻辑。 */
|
|
@@ -2966,16 +2981,16 @@ interface GroupMemberItem {
|
|
|
2966
2981
|
interface ProfileHttpAdapterDeps {
|
|
2967
2982
|
/** 宿主注入的协议客户端(如 Nuxt `$clientApi`);本适配作为调用方走 core JSON 链路拉资料。 */
|
|
2968
2983
|
client: ApiProtocolClient;
|
|
2969
|
-
/** 端类型 clientType(Web/H5=2):透传给群资料/成员接口写 `Client-type` header
|
|
2984
|
+
/** 端类型 clientType(Web/H5=2):透传给群资料/成员接口写 `Client-type` header,对齐后端全链路一致建议。缺省不带。 */
|
|
2970
2985
|
clientType?: number;
|
|
2971
2986
|
/**
|
|
2972
|
-
*
|
|
2987
|
+
* 本地持久化端口:注入后 `getUserProfile`/`getGroupMemberNames` 走三级缓存(内存→持久化→HTTP),跨刷新消除群历史发送者「占位→回填」闪动。
|
|
2973
2988
|
* 只用 profile/member 四方法;**缺省 = 纯内存**(向后兼容)。storage 未 open / 读写异常时自动**降级 HTTP-only**(不阻塞不报错,符合 storage=downstream 原则)。
|
|
2974
2989
|
* open 时序:与 SDK 共享同一 storage 实例,SDK `connect()` 统一 `open(namespace=userId)`;本适配读写前 open 未完成即降级。
|
|
2975
2990
|
*/
|
|
2976
2991
|
storage?: Pick<ImStoragePort, 'getUserProfile' | 'saveUserProfile' | 'getGroupMembers' | 'saveGroupMembers' | 'getGroupProfile' | 'saveGroupProfile'>;
|
|
2977
2992
|
}
|
|
2978
|
-
/**
|
|
2993
|
+
/** 群成员昵称接口,作为 ImProfilePort 的补充;提供群消息发送者的群内昵称,最终展示优先级由调用方决定。 */
|
|
2979
2994
|
interface GroupMemberNameProvider {
|
|
2980
2995
|
/** 取群内成员昵称映射(userId → 群内昵称,空昵称成员不含);空/失败 → null(调用方回退用户资料名)。缓存 + 同 id 去抖 + forceRefresh。 */
|
|
2981
2996
|
getGroupMemberNames: (groupId: string, opts?: {
|
|
@@ -2985,30 +3000,38 @@ interface GroupMemberNameProvider {
|
|
|
2985
3000
|
listGroupMembers: (groupId: string, opts?: {
|
|
2986
3001
|
forceRefresh?: boolean;
|
|
2987
3002
|
}) => Promise<GroupMemberItem[] | null>;
|
|
2988
|
-
/**
|
|
3003
|
+
/** 仅读取内存或本地用户资料,不发 HTTP 请求;命中返回 { value, stale },未命中返回 null,stale 表示本地记录已过期。 */
|
|
2989
3004
|
peekUserProfile: (userId: string) => Promise<{
|
|
2990
3005
|
value: UserProfile;
|
|
2991
3006
|
stale: boolean;
|
|
2992
3007
|
} | null>;
|
|
2993
|
-
/**
|
|
3008
|
+
/** 仅读取内存或本地的群成员昵称,不发 HTTP 请求;命中返回 { value, stale },未命中返回 null。 */
|
|
2994
3009
|
peekGroupMemberNames: (groupId: string) => Promise<{
|
|
2995
3010
|
value: Record<string, string>;
|
|
2996
3011
|
stale: boolean;
|
|
2997
3012
|
} | null>;
|
|
2998
|
-
/**
|
|
3013
|
+
/** 仅读取内存或本地的有序群成员列表,不发 HTTP 请求;命中返回 { value, stale },供面板先展示已有内容。 */
|
|
2999
3014
|
peekGroupMembers: (groupId: string) => Promise<{
|
|
3000
3015
|
value: GroupMemberItem[];
|
|
3001
3016
|
stale: boolean;
|
|
3002
3017
|
} | null>;
|
|
3003
|
-
/**
|
|
3018
|
+
/** 仅读取内存或本地群资料,不发 HTTP 请求;命中返回 { value, stale },供受限群展示已缓存的群主等信息。 */
|
|
3004
3019
|
peekGroupProfile: (groupId: string) => Promise<{
|
|
3005
3020
|
value: GroupProfile;
|
|
3006
3021
|
stale: boolean;
|
|
3007
3022
|
} | null>;
|
|
3008
3023
|
}
|
|
3009
|
-
/** 创建用户 / 群资料 HTTP 适配(实现 ImProfilePort +
|
|
3024
|
+
/** 创建用户 / 群资料 HTTP 适配(实现 ImProfilePort + 群成员昵称):组合 requests/ 请求、回退、缓存和字段转换。 */
|
|
3010
3025
|
declare function createProfileHttpAdapter(deps: ProfileHttpAdapterDeps): ImProfilePort & GroupMemberNameProvider;
|
|
3011
3026
|
|
|
3027
|
+
/** 客服号公开展示资料;不携带后台发送者身份或网络路由参数。 */
|
|
3028
|
+
interface CustomerServiceProfile {
|
|
3029
|
+
/** 当前语言的客服名称。 */
|
|
3030
|
+
displayName: string;
|
|
3031
|
+
/** 当前语言的头像地址;服务端未配置时为空。 */
|
|
3032
|
+
avatarUrl: string;
|
|
3033
|
+
}
|
|
3034
|
+
|
|
3012
3035
|
/** 服务端对入群请求的最终裁决:已入群,或已提交并等待管理员审核。 */
|
|
3013
3036
|
type MembershipJoinOutcome = 'joined' | 'waiting';
|
|
3014
3037
|
/** Browser adapter 暴露给 SDK 的稳定入群结果,不携带具体 HTTP 响应结构。 */
|
|
@@ -3017,7 +3040,7 @@ interface MembershipJoinResult {
|
|
|
3017
3040
|
outcome: MembershipJoinOutcome;
|
|
3018
3041
|
}
|
|
3019
3042
|
|
|
3020
|
-
/** 服务端按逻辑桶签发的 S3
|
|
3043
|
+
/** 服务端按逻辑桶签发的 S3 临时上传凭证(已转换为 SDK 合同字段)。 */
|
|
3021
3044
|
interface MediaUploadCredentials {
|
|
3022
3045
|
/** STS access key id(服务端字段 `access_key_id`)。 */
|
|
3023
3046
|
accessKeyId: string;
|
|
@@ -3033,7 +3056,7 @@ interface MediaUploadCredentials {
|
|
|
3033
3056
|
region: string;
|
|
3034
3057
|
/** 对象 key 前缀;STS 策略只允许写该前缀下的对象,SDK 生成的 key 必须以它开头。 */
|
|
3035
3058
|
keyPrefix?: string;
|
|
3036
|
-
/**
|
|
3059
|
+
/** 公开访问域名(已转换为带 scheme、无尾斜杠);写进消息体的媒体 URL 以它为准。 */
|
|
3037
3060
|
dnsPoint: string;
|
|
3038
3061
|
/** 服务端身份标识;SDK 不使用,仅原样透出供宿主排查。 */
|
|
3039
3062
|
identityId?: string;
|
|
@@ -3488,7 +3511,7 @@ interface MentionCandidatePage {
|
|
|
3488
3511
|
/**
|
|
3489
3512
|
* CHANNEL role-free @候选产品 sibling。
|
|
3490
3513
|
*
|
|
3491
|
-
* @remarks list/search 使用独立缓存与 token 上下文;token 只在创建它的账号 runtime
|
|
3514
|
+
* @remarks list/search 使用独立缓存与 token 上下文;token 只在创建它的账号 runtime、查询类型和频道缓存版本号内有效。
|
|
3492
3515
|
* 本 API 不读取 role-rich 成员 provider,也不包含已退场的 @消息索引/定位能力。
|
|
3493
3516
|
* @example
|
|
3494
3517
|
* ```ts
|
|
@@ -3502,13 +3525,13 @@ interface ImChannelMentionApi {
|
|
|
3502
3525
|
peekFirstPage: (channel: ConversationRef<'channel'>) => MentionCandidatePage | null;
|
|
3503
3526
|
/** 从已 hydrate 的常用候选快照做同步直接文本过滤;不发远端搜索请求。 */
|
|
3504
3527
|
peekSearchCandidates: (channel: ConversationRef<'channel'>, keyword: string) => readonly MentionCandidate[];
|
|
3505
|
-
/** hydrate 持久快照并返回本地首页或直接/拼音搜索结果;cache miss 返回 null
|
|
3528
|
+
/** hydrate 持久快照并返回本地首页或直接/拼音搜索结果;cache miss 返回 null,绝不请求服务端。 */
|
|
3506
3529
|
getCachedPage: (channel: ConversationRef<'channel'>, keyword?: string) => Promise<MentionCandidatePage | null>;
|
|
3507
3530
|
/** hydrate 持久快照,并在缺失/过期时按完整页预热约 200 人;同频道在途任务复用。 */
|
|
3508
3531
|
prefetchFirstPage: (channel: ConversationRef<'channel'>) => Promise<void>;
|
|
3509
3532
|
/** 强制从专用 mention provider 重建约 200 人常用候选快照。 */
|
|
3510
3533
|
refreshFirstPage: (channel: ConversationRef<'channel'>) => Promise<MentionCandidatePage>;
|
|
3511
|
-
/**
|
|
3534
|
+
/** 读取常用候选;内存未命中时先读本地存储,两处都没有才查询服务端。 */
|
|
3512
3535
|
listFirstPage: (channel: ConversationRef<'channel'>) => Promise<MentionCandidatePage>;
|
|
3513
3536
|
/** 使用 list 页产生的 token 继续分页;search token 会被拒绝。 */
|
|
3514
3537
|
listNextPage: (pageToken: ImPageToken) => Promise<MentionCandidatePage>;
|
|
@@ -3567,7 +3590,7 @@ interface ImDirectorySearchApi {
|
|
|
3567
3590
|
search: (keyword: string) => Promise<ImDirectorySearchResult>;
|
|
3568
3591
|
}
|
|
3569
3592
|
|
|
3570
|
-
/**
|
|
3593
|
+
/** 服务端消息查询失败的原因,以及是否允许重试。 */
|
|
3571
3594
|
interface MessagesByIdFailure {
|
|
3572
3595
|
/**
|
|
3573
3596
|
* 能否稍后重试。
|
|
@@ -3579,7 +3602,10 @@ interface MessagesByIdFailure {
|
|
|
3579
3602
|
/** 原始错误,供诊断与上报。 */
|
|
3580
3603
|
error: unknown;
|
|
3581
3604
|
}
|
|
3582
|
-
/**
|
|
3605
|
+
/**
|
|
3606
|
+
* 服务端消息查询汇总。三组 ID 互不重叠,合起来覆盖调用方传入的全部有效 ID。
|
|
3607
|
+
* @template TMessage 调用方需要的消息展示类型,由 projectMessage 从领域消息转换得到。
|
|
3608
|
+
*/
|
|
3583
3609
|
interface ImMessagesByIdResult<TMessage> {
|
|
3584
3610
|
/** 成功取回的消息。已经进了本地历史,后续本地查询就能命中。 */
|
|
3585
3611
|
readonly messages: readonly TMessage[];
|
|
@@ -3601,7 +3627,7 @@ interface ImMessagesByIdResult<TMessage> {
|
|
|
3601
3627
|
* SDK 内部 CHANNEL sibling:装配资料、成员、申请、置顶、历史限制与通知修复能力。
|
|
3602
3628
|
*
|
|
3603
3629
|
* 所有入口都要求精确 CHANNEL 身份,并把协议 I/O 结果提交到当前账号的同一 DomainState;不会复用
|
|
3604
|
-
* GROUP 端口或为 `supergroup` fallback。运行时 dispose 后,在途 HTTP
|
|
3630
|
+
* GROUP 端口或为 `supergroup` fallback。运行时 dispose 后,在途 HTTP 查询的结果必须失效,不能广播旧账号事件。
|
|
3605
3631
|
*/
|
|
3606
3632
|
|
|
3607
3633
|
/** CHANNEL 资料、成员和申请门面;已退场的 Mention 历史定位不进入产品面。 */
|
|
@@ -3626,7 +3652,7 @@ interface ImChannelApi extends ImDirectoryApi<'channel'> {
|
|
|
3626
3652
|
cursor?: string;
|
|
3627
3653
|
limit?: number;
|
|
3628
3654
|
}) => Promise<ChannelMemberPage>;
|
|
3629
|
-
/** 进入 CHANNEL
|
|
3655
|
+
/** 进入 CHANNEL 时预取含成员角色的有限列表;缓存未过期时不重复请求服务端。 */
|
|
3630
3656
|
prefetchMembers: (channelId: string) => Promise<void>;
|
|
3631
3657
|
/** 读取 role-rich 有界快照或本地搜索命中;不触发远端请求。 */
|
|
3632
3658
|
getCachedMembers: (input: {
|
|
@@ -3775,7 +3801,7 @@ interface ImContactApi extends ImDirectoryApi<'individual'> {
|
|
|
3775
3801
|
getProfile: (userId: string, opts?: {
|
|
3776
3802
|
forceRefresh?: boolean;
|
|
3777
3803
|
}) => Promise<UserProfile | null>;
|
|
3778
|
-
/**
|
|
3804
|
+
/** 只读内存或本地存储,不发 HTTP;命中时明确返回 stale,提醒调用方缓存可能已过期。 */
|
|
3779
3805
|
peekProfile: (userId: string) => Promise<{
|
|
3780
3806
|
value: UserProfile;
|
|
3781
3807
|
stale: boolean;
|
|
@@ -3825,7 +3851,7 @@ interface ConversationPrefetchOptions {
|
|
|
3825
3851
|
* skipped 表示当前类型、权限、存储或预算不允许预取;失败不改变正常打开会话的行为。
|
|
3826
3852
|
*/
|
|
3827
3853
|
interface ConversationPrefetchResult {
|
|
3828
|
-
ref: ConversationRef<'direct' | 'group' | 'channel' | 'robot'>;
|
|
3854
|
+
ref: ConversationRef<'direct' | 'group' | 'channel' | 'robot' | 'customerService'>;
|
|
3829
3855
|
status: 'ready' | 'skipped' | 'failed' | 'cancelled';
|
|
3830
3856
|
reason?: 'unsupported' | 'unavailable' | 'storage-unavailable' | 'budget' | 'page-too-large' | 'decrypt-failed' | 'invalidated' | 'cancelled';
|
|
3831
3857
|
error?: ImSdkErrorShape;
|
|
@@ -3833,7 +3859,7 @@ interface ConversationPrefetchResult {
|
|
|
3833
3859
|
|
|
3834
3860
|
/**
|
|
3835
3861
|
* 当前账号草稿的产品 DTO、跨组件 API 与 handle 绑定门面。
|
|
3836
|
-
*
|
|
3862
|
+
* 草稿按会话类型和 ID 串行保存,统一由 SDK DomainState 管理;当前不支持保存附件,非空附件输入会被明确拒绝。
|
|
3837
3863
|
*/
|
|
3838
3864
|
|
|
3839
3865
|
/** 当前产品草稿实体;只包含可持久化的 text/mention/reply,附件集合固定为空。 */
|
|
@@ -3896,7 +3922,7 @@ interface ImDraftsApi {
|
|
|
3896
3922
|
*/
|
|
3897
3923
|
|
|
3898
3924
|
/** 当前兼容门面支持的精确会话 ref。 */
|
|
3899
|
-
type ImSupportedConversationRef = ConversationRef<'direct' | 'group' | 'channel' | 'robot'>;
|
|
3925
|
+
type ImSupportedConversationRef = ConversationRef<'direct' | 'group' | 'channel' | 'robot' | 'customerService'>;
|
|
3900
3926
|
/**
|
|
3901
3927
|
* 会话 API 的迁移期入参。优先传完整 ref;旧 string 仅在当前 session 中唯一命中时可用。
|
|
3902
3928
|
*
|
|
@@ -3904,10 +3930,10 @@ type ImSupportedConversationRef = ConversationRef<'direct' | 'group' | 'channel'
|
|
|
3904
3930
|
*/
|
|
3905
3931
|
type ImConversationInput = ImSupportedConversationRef | string;
|
|
3906
3932
|
/**
|
|
3907
|
-
*
|
|
3933
|
+
* 内部会话列表数据。草稿反映当前账号的本机输入,不写入会话持久记录,也不跨端同步。
|
|
3908
3934
|
*
|
|
3909
|
-
*
|
|
3910
|
-
* @example
|
|
3935
|
+
* 保留 ImSession 的展示字段供内部调用方使用;跨类型识别会话时必须使用会话类型 + ID,不自行拼接主键。
|
|
3936
|
+
* @example client.conversations.list().find(item => item.draft !== null) 可找到当前账号有未发送草稿的会话。
|
|
3911
3937
|
*/
|
|
3912
3938
|
interface ConversationListItem$1 extends ImSession {
|
|
3913
3939
|
draft: ConversationDraft | null;
|
|
@@ -3934,7 +3960,7 @@ interface ImConversationsApi {
|
|
|
3934
3960
|
markConversationRead: (conversation: ImConversationInput) => Promise<void>;
|
|
3935
3961
|
/** 给已无真实未读的会话添加本地未读提醒;不回退消息已读状态,也不发网络请求。 */
|
|
3936
3962
|
markConversationUnread: (conversation: ImConversationInput) => void;
|
|
3937
|
-
/**
|
|
3963
|
+
/** 删除本机会话、消息、已读状态和草稿并立即发布本地事件;存储删除失败会报告 storage error,本地删除标记阻止离线消息恢复已删除内容。 */
|
|
3938
3964
|
deleteConversation: (conversation: ImConversationInput) => void;
|
|
3939
3965
|
}
|
|
3940
3966
|
|
|
@@ -4004,16 +4030,16 @@ interface ImCreateGroupResult {
|
|
|
4004
4030
|
}
|
|
4005
4031
|
|
|
4006
4032
|
/**
|
|
4007
|
-
* SDK
|
|
4033
|
+
* SDK 内部普通群模块:提供群资料、成员名称、@ 候选和群置顶操作。
|
|
4008
4034
|
*
|
|
4009
4035
|
* 本模块只接收 GROUP `ConversationRef`,使用普通群独立 HTTP/mapper,并回写当前账号唯一 DomainState。
|
|
4010
|
-
* CHANNEL
|
|
4036
|
+
* CHANNEL 的角色、申请、成员管理和置顶协议由独立模块处理;dispose 后旧查询和协调任务的结果不再生效。
|
|
4011
4037
|
*/
|
|
4012
4038
|
|
|
4013
4039
|
/**
|
|
4014
4040
|
* GROUP 完整 @候选集合产品面。
|
|
4015
4041
|
*
|
|
4016
|
-
* @remarks `listAll` 使用账号级产品缓存;`refreshAll`
|
|
4042
|
+
* @remarks `listAll` 使用账号级产品缓存;`refreshAll` 绕过缓存重新请求服务端。两者只消费普通群完整成员 provider,
|
|
4017
4043
|
* 不接受 CHANNEL 分页 cursor/provider。缺少 provider、远端失败或不完整结果会拒绝,不用空数组伪装失败。
|
|
4018
4044
|
* @example
|
|
4019
4045
|
* ```ts
|
|
@@ -4025,7 +4051,7 @@ interface ImCreateGroupResult {
|
|
|
4025
4051
|
interface ImGroupMentionApi {
|
|
4026
4052
|
/** 读取完整候选集合;同群并发读取复用请求,成功结果按 userId 稳定去重并缓存。 */
|
|
4027
4053
|
listAll: (group: ConversationRef<'group'>) => Promise<readonly MentionCandidate[]>;
|
|
4028
|
-
/**
|
|
4054
|
+
/** 显式向服务端重新查询完整候选;并发刷新复用请求,失败保留此前成功缓存。 */
|
|
4029
4055
|
refreshAll: (group: ConversationRef<'group'>) => Promise<readonly MentionCandidate[]>;
|
|
4030
4056
|
}
|
|
4031
4057
|
/** GROUP 资料、成员缓存、@候选与单条置顶门面;不与 CHANNEL 合并。 */
|
|
@@ -4044,17 +4070,17 @@ interface ImGroupApi extends ImDirectoryApi<'group'> {
|
|
|
4044
4070
|
getMemberNames: (groupId: string, opts?: {
|
|
4045
4071
|
forceRefresh?: boolean;
|
|
4046
4072
|
}) => Promise<Record<string, string> | null>;
|
|
4047
|
-
/**
|
|
4073
|
+
/** 仅读普通群成员缓存,不请求服务端。 */
|
|
4048
4074
|
peekMembers: (groupId: string) => Promise<{
|
|
4049
4075
|
value: GroupMemberItem[];
|
|
4050
4076
|
stale: boolean;
|
|
4051
4077
|
} | null>;
|
|
4052
|
-
/**
|
|
4078
|
+
/** 仅读普通群昵称缓存,不请求服务端。 */
|
|
4053
4079
|
peekMemberNames: (groupId: string) => Promise<{
|
|
4054
4080
|
value: Record<string, string>;
|
|
4055
4081
|
stale: boolean;
|
|
4056
4082
|
} | null>;
|
|
4057
|
-
/**
|
|
4083
|
+
/** 仅读普通群资料缓存,不请求服务端。 */
|
|
4058
4084
|
peekProfile: (groupId: string) => Promise<{
|
|
4059
4085
|
value: GroupProfile;
|
|
4060
4086
|
stale: boolean;
|
|
@@ -4103,7 +4129,7 @@ interface ImGroupApi extends ImDirectoryApi<'group'> {
|
|
|
4103
4129
|
}
|
|
4104
4130
|
|
|
4105
4131
|
/**
|
|
4106
|
-
* SDK
|
|
4132
|
+
* SDK 账号资源和网络连接的稳定生命周期合同。
|
|
4107
4133
|
* 账号准备、联网和 logout 保持可区分;快照不包含 token、transport、storage 句柄或宿主认证状态。
|
|
4108
4134
|
*/
|
|
4109
4135
|
|
|
@@ -4112,9 +4138,9 @@ interface ImClientSnapshot {
|
|
|
4112
4138
|
connectionState: ImConnectionState;
|
|
4113
4139
|
pendingOutbox: OutboxMessage[];
|
|
4114
4140
|
}
|
|
4115
|
-
/**
|
|
4141
|
+
/** 账号资源的准备和释放状态;网络连接状态单独记录,二者互不替代。 */
|
|
4116
4142
|
type ImSessionLifecycleState = 'empty' | 'preparing' | 'ready' | 'logging-out' | 'disposed';
|
|
4117
|
-
/**
|
|
4143
|
+
/** 账号资源状态、网络连接状态,以及由二者计算的便捷状态。 */
|
|
4118
4144
|
interface ImLifecycleSnapshot {
|
|
4119
4145
|
sessionState: ImSessionLifecycleState;
|
|
4120
4146
|
connectionState: ImConnectionState;
|
|
@@ -4223,7 +4249,7 @@ type ImApplicationItem = (ApplicationItemBase<'contact-request', ContactApplicat
|
|
|
4223
4249
|
* typed application inbox 产品面。
|
|
4224
4250
|
*
|
|
4225
4251
|
* @remarks `listPending` 只有在 contact/GROUP/CHANNEL 三个 provider 全部成功时才返回完整快照;审核动作按 ref.domain
|
|
4226
|
-
* 精确回到 sibling。CHANNEL invite type=5
|
|
4252
|
+
* 精确回到 sibling。CHANNEL invite type=5 不属于已确认 provider,因此不会出现在结果中。
|
|
4227
4253
|
* @example
|
|
4228
4254
|
* ```ts
|
|
4229
4255
|
* const pending = await client.applications.listPending()
|
|
@@ -4293,13 +4319,13 @@ interface ImDirectCallsApi {
|
|
|
4293
4319
|
}
|
|
4294
4320
|
|
|
4295
4321
|
/**
|
|
4296
|
-
*
|
|
4322
|
+
* 管理会话背景选择、预设读取和本地保存。
|
|
4297
4323
|
*
|
|
4298
|
-
* SDK 保存 builtin/preset/custom
|
|
4299
|
-
*
|
|
4324
|
+
* SDK 保存 builtin/preset/custom 选择及账号默认值;自定义图片 Blob 经 storage 保存,不持有 DOM、图片元素或 object URL。
|
|
4325
|
+
* 异步读取返回时核对运行环境版本,防止切会话或切账号后应用旧结果;宿主负责最终渲染和 URL 释放。
|
|
4300
4326
|
*/
|
|
4301
4327
|
|
|
4302
|
-
type ConversationBackgroundConversationType = 'direct' | 'group' | 'channel' | 'robot';
|
|
4328
|
+
type ConversationBackgroundConversationType = 'direct' | 'group' | 'channel' | 'robot' | 'customerService';
|
|
4303
4329
|
interface ConversationBackgroundPreset {
|
|
4304
4330
|
id: string;
|
|
4305
4331
|
url: string;
|
|
@@ -4338,9 +4364,9 @@ interface ImConversationBackgroundApi {
|
|
|
4338
4364
|
}
|
|
4339
4365
|
|
|
4340
4366
|
/**
|
|
4341
|
-
*
|
|
4367
|
+
* 把联系人、普通群和 CHANNEL 资料转换为稳定产品数据。
|
|
4342
4368
|
*
|
|
4343
|
-
*
|
|
4369
|
+
* 本文件只复制字段、统一权限格式和转换错误,不缓存资料,也不发 HTTP。GROUP/CHANNEL 各自保留业务字段,
|
|
4344
4370
|
* 公钥、访问快照、密钥版本、协议状态和 core extensions 都不会进入 default API。
|
|
4345
4371
|
*/
|
|
4346
4372
|
|
|
@@ -4363,14 +4389,14 @@ interface ImContactRemarkPhone {
|
|
|
4363
4389
|
countryCode: string;
|
|
4364
4390
|
mobile: string;
|
|
4365
4391
|
}
|
|
4366
|
-
/** default GROUP 资料 DTO
|
|
4392
|
+
/** default GROUP 资料 DTO;后端尚未确认的数值 status 与缓存扩展不进入产品面。 */
|
|
4367
4393
|
interface ImGroupProfile {
|
|
4368
4394
|
ref: ConversationRef<'group'>;
|
|
4369
4395
|
name: string;
|
|
4370
4396
|
avatar?: string;
|
|
4371
4397
|
memberCount?: number;
|
|
4372
4398
|
ownerId?: string;
|
|
4373
|
-
/** 普通群入群验证方式(1/2/4
|
|
4399
|
+
/** 普通群入群验证方式(1/2/4 为当前可设置值);未知值不能在产品层被自动改写。 */
|
|
4374
4400
|
verifyWay?: number;
|
|
4375
4401
|
/** 普通群邀请码;仅邀请码模式有意义。 */
|
|
4376
4402
|
inviteCode?: string;
|
|
@@ -4461,7 +4487,7 @@ interface ImChannelProfile {
|
|
|
4461
4487
|
*/
|
|
4462
4488
|
|
|
4463
4489
|
/** default 会话列表支持的精确类型;`supergroup` 继续受产品 Gate 约束。 */
|
|
4464
|
-
type ProductConversationListType = 'direct' | 'group' | 'channel' | 'robot';
|
|
4490
|
+
type ProductConversationListType = 'direct' | 'group' | 'channel' | 'robot' | 'customerService';
|
|
4465
4491
|
/** GROUP 会话限制状态;与 CHANNEL 状态保持独立 sibling。 */
|
|
4466
4492
|
type ImGroupConversationState = GroupSessionState;
|
|
4467
4493
|
/**
|
|
@@ -4632,8 +4658,8 @@ interface ImConversationListSnapshot {
|
|
|
4632
4658
|
* default 会话列表产品面。
|
|
4633
4659
|
*
|
|
4634
4660
|
* @remarks
|
|
4635
|
-
* `list()`
|
|
4636
|
-
* 所有写动作只接受复合身份。`deleteLocal`
|
|
4661
|
+
* `list()` 同步读取本机会话;`getSnapshot/subscribe` 为普通宿主提供同一时刻的列表和总未读。
|
|
4662
|
+
* 所有写动作只接受复合身份。`deleteLocal` 立即提交内存删除事件,但底层存储删除仍异步执行,失败会报告错误,
|
|
4637
4663
|
* 因此该方法不虚假返回代表“持久化已完成”的 Promise。
|
|
4638
4664
|
*
|
|
4639
4665
|
* @example
|
|
@@ -4695,6 +4721,17 @@ interface DirectConversationCapabilities {
|
|
|
4695
4721
|
canUseMessageActions: CapabilityDecision;
|
|
4696
4722
|
canManageRelationship: CapabilityDecision;
|
|
4697
4723
|
}
|
|
4724
|
+
/** 客服只读能力;资料、发送和消息修改均不可用,历史读取仅限本机已接收消息。 */
|
|
4725
|
+
interface CustomerServiceConversationCapabilities {
|
|
4726
|
+
/** 客服号不可发送消息。 */
|
|
4727
|
+
canSendMessages: CapabilityDecision;
|
|
4728
|
+
/** 客服号没有好友或成员资料页。 */
|
|
4729
|
+
canOpenProfile: CapabilityDecision;
|
|
4730
|
+
/** 客服号不开放消息修改与转发等动作。 */
|
|
4731
|
+
canUseMessageActions: CapabilityDecision;
|
|
4732
|
+
/** 允许读取客服本机历史。 */
|
|
4733
|
+
canReadHistory: CapabilityDecision;
|
|
4734
|
+
}
|
|
4698
4735
|
interface RobotConversationCapabilities {
|
|
4699
4736
|
canSendMessages: CapabilityDecision;
|
|
4700
4737
|
canOpenProfile: CapabilityDecision;
|
|
@@ -4769,6 +4806,8 @@ type ConversationCapabilitySnapshot = (ConversationCapabilityBase<'direct'> & {
|
|
|
4769
4806
|
value: ChannelConversationCapabilities;
|
|
4770
4807
|
}) | (ConversationCapabilityBase<'robot'> & {
|
|
4771
4808
|
value: RobotConversationCapabilities;
|
|
4809
|
+
}) | (ConversationCapabilityBase<'customerService'> & {
|
|
4810
|
+
value: CustomerServiceConversationCapabilities;
|
|
4772
4811
|
});
|
|
4773
4812
|
interface ImConversationCapabilitiesApi {
|
|
4774
4813
|
/** 只读取 SDK 当前本机真相与已刷新过的资料/关系投影,不隐式联网。 */
|
|
@@ -4920,7 +4959,7 @@ interface ImExpressionsApi {
|
|
|
4920
4959
|
*/
|
|
4921
4960
|
|
|
4922
4961
|
/** 当前已接线的产品 handle 会话类型;三者只在无会话语义原子层复用。 */
|
|
4923
|
-
type ProductHandleConversationType = 'direct' | 'group' | 'channel' | 'robot';
|
|
4962
|
+
type ProductHandleConversationType = 'direct' | 'group' | 'channel' | 'robot' | 'customerService';
|
|
4924
4963
|
/**
|
|
4925
4964
|
* 会话 handle 初始打开位置。
|
|
4926
4965
|
*
|
|
@@ -4982,9 +5021,9 @@ interface ConversationHandleSnapshot<TType extends ProductHandleConversationType
|
|
|
4982
5021
|
error?: ImSdkErrorShape;
|
|
4983
5022
|
}
|
|
4984
5023
|
/**
|
|
4985
|
-
*
|
|
5024
|
+
* 单条消息的本机删除结果。
|
|
4986
5025
|
*
|
|
4987
|
-
*
|
|
5026
|
+
* scope 固定为 local-only;该动作不发送撤回或双方删除命令,也不会让服务端标记删除,重新加载远端历史时可能再次出现同一消息。
|
|
4988
5027
|
*/
|
|
4989
5028
|
interface LocalMessageDeletionResult {
|
|
4990
5029
|
scope: 'local-only';
|
|
@@ -5257,8 +5296,8 @@ type ConversationMessageApiFor<TType extends ProductHandleConversationType> = TT
|
|
|
5257
5296
|
/**
|
|
5258
5297
|
* 绑定单个复合会话身份的产品级会话句柄。
|
|
5259
5298
|
*
|
|
5260
|
-
* @remarks 每次打开都持有独立连续窗口;`close()`
|
|
5261
|
-
*
|
|
5299
|
+
* @remarks 每次打开都持有独立连续窗口;`close()` 只释放瞬时窗口和订阅,不删除领域消息。各会话类型
|
|
5300
|
+
* 使用各自工厂;草稿经 drafts API 维护。关闭后继续读取或执行动作都会立即报错。
|
|
5262
5301
|
* @template TType 当前句柄绑定的精确会话类型。
|
|
5263
5302
|
* @example
|
|
5264
5303
|
* ```ts
|
|
@@ -5324,6 +5363,18 @@ interface ConversationHandle<TType extends ProductHandleConversationType = Produ
|
|
|
5324
5363
|
close: () => void;
|
|
5325
5364
|
}
|
|
5326
5365
|
|
|
5366
|
+
/** 只读客服号资料;账号由 SDK runtime 绑定,宿主只提供当前语言。 */
|
|
5367
|
+
interface ImCustomerServiceApi {
|
|
5368
|
+
/** 下载当前账号客服消息的指定文件;返回真实字节,不使用展示大小判断完成。 */
|
|
5369
|
+
downloadFile: (input: {
|
|
5370
|
+
messageId: string;
|
|
5371
|
+
itemIndex: number;
|
|
5372
|
+
signal?: AbortSignal;
|
|
5373
|
+
}) => Promise<Blob>;
|
|
5374
|
+
/** 获取并更新已有会话的显示资料;并发请求按语言合并,过期语言不覆盖当前页面。 */
|
|
5375
|
+
getProfile: (lang: number) => Promise<Readonly<CustomerServiceProfile>>;
|
|
5376
|
+
}
|
|
5377
|
+
|
|
5327
5378
|
/**
|
|
5328
5379
|
* SDK 对外的结构化诊断投影、过滤与 sink 装配。
|
|
5329
5380
|
*
|
|
@@ -5436,7 +5487,7 @@ interface ImMediaTask {
|
|
|
5436
5487
|
direction: 'upload' | 'download';
|
|
5437
5488
|
/** 终态 completed/failed/canceled 不会被同一尝试的迟到 progress 回退。 */
|
|
5438
5489
|
state: 'queued' | 'running' | 'paused' | 'completed' | 'failed' | 'canceled';
|
|
5439
|
-
/** 0
|
|
5490
|
+
/** 范围为 0 到 100 的整数进度。 */
|
|
5440
5491
|
percent: number;
|
|
5441
5492
|
/**
|
|
5442
5493
|
* upload 子阶段。
|
|
@@ -5619,7 +5670,7 @@ interface ImMediaTasksApi {
|
|
|
5619
5670
|
* 可靠发送账本的产品查询、订阅、重试和取消门面。
|
|
5620
5671
|
*
|
|
5621
5672
|
* Core Outbox 是唯一发送真相;产品项只暴露消息身份、状态和安全错误,不泄漏尝试次数或恢复策略。
|
|
5622
|
-
* 控制动作始终回到当前账号 connection,dispose
|
|
5673
|
+
* 控制动作始终回到当前账号 connection,dispose 后旧订阅失效,随后返回的旧结果不再生效,取消 queued 不等价于远端撤回。
|
|
5623
5674
|
*/
|
|
5624
5675
|
|
|
5625
5676
|
/** 产品可观察 Outbox 项;不包含正文、帧、ACK、attempts、加密信息或 resumePolicy。 */
|
|
@@ -6180,7 +6231,7 @@ interface ImMessageSearchApi {
|
|
|
6180
6231
|
inDirect: (conversation: ConversationRef<'direct'>, keyword: string) => Promise<ProductMessageSearchPage<MessageContentType>>;
|
|
6181
6232
|
/** 搜索 GROUP 本地历史;不得接受 CHANNEL ref 或回退 direct。 */
|
|
6182
6233
|
inGroup: (conversation: ConversationRef<'group'>, keyword: string) => Promise<ProductMessageSearchPage<MessageContentType>>;
|
|
6183
|
-
/** 搜索 CHANNEL
|
|
6234
|
+
/** 搜索 CHANNEL 本地历史;当前不调用尚未确认的远端 CHANNEL 搜索/定位协议。 */
|
|
6184
6235
|
inChannel: (conversation: ConversationRef<'channel'>, keyword: string) => Promise<ProductMessageSearchPage<MessageContentType>>;
|
|
6185
6236
|
/** 搜索 robot 本地历史;无远端历史,不得回退 direct。 */
|
|
6186
6237
|
inRobot: (conversation: ConversationRef<'robot'>, keyword: string) => Promise<ProductMessageSearchPage<MessageContentType>>;
|
|
@@ -6296,7 +6347,7 @@ interface ImEmojiCatalogEntry {
|
|
|
6296
6347
|
*
|
|
6297
6348
|
* 上传凭证由业务后端按登录态签发(与 iOS、prod H5 同一个接口),回包同时给出**物理桶**、区域、`key_prefix` 和
|
|
6298
6349
|
* 公开访问域名;SDK 据此拼 object key 与消息体 URL,宿主 env 里配的只是申请凭证用的逻辑桶名。凭证缓存(本地
|
|
6299
|
-
* 1 小时、按服务端过期时间提前 5
|
|
6350
|
+
* 1 小时、按服务端过期时间提前 5 分钟失效)、同桶并发请求复用和失败后重新签发由 SDK 负责,宿主只需提供「打一次接口」的纯函数。
|
|
6300
6351
|
*
|
|
6301
6352
|
* 默认单次 PUT/GET;仅 multipartTransfer=true 才允许大资源分片上传、下载。
|
|
6302
6353
|
* 各 bucket 需在对象存储侧配置 CORS 允许本站 origin 的 PUT + GET;开启分片后,超过 16MiB 的上传另需放行
|
|
@@ -6375,6 +6426,7 @@ interface ImAccountAdapterContext extends ImClientAdapterContext {
|
|
|
6375
6426
|
* @remarks create/purge 必须消费传入的 namespace factory;SDK 会先 close 返回的 storage,再调用 purge。
|
|
6376
6427
|
*/
|
|
6377
6428
|
interface ImStorageAdapterFactory {
|
|
6429
|
+
/** 创建或复用当前运行环境的存储;返回 undefined 明确使用纯内存,即使浏览器支持 IndexedDB 也不启用默认库。 */
|
|
6378
6430
|
create: (context: ImClientAdapterContext) => ImStoragePort | undefined;
|
|
6379
6431
|
purgeCurrentAccount: (context: ImAccountAdapterContext) => Promise<void>;
|
|
6380
6432
|
}
|
|
@@ -6465,7 +6517,7 @@ interface ImAdvancedClientOptions extends ImClientOptions {
|
|
|
6465
6517
|
channelMembers?: ImChannelMemberPort;
|
|
6466
6518
|
/** CHANNEL Mention 候选 provider;不复用 role-rich 成员治理列表。 */
|
|
6467
6519
|
channelMentionMembers?: ImChannelMentionMemberPort;
|
|
6468
|
-
/** CHANNEL 申请审核 provider
|
|
6520
|
+
/** CHANNEL 申请审核 provider;当前只装配已确认的 18A 审核能力。 */
|
|
6469
6521
|
channelJoinApplications?: ImChannelJoinApplicationPort;
|
|
6470
6522
|
/** 联系人申请 provider;与 GROUP/CHANNEL 审核 sibling 独立。 */
|
|
6471
6523
|
contactApplications?: ImContactApplicationPort;
|
|
@@ -6522,7 +6574,7 @@ interface ImContactsApi extends ImDirectoryApi<'individual'> {
|
|
|
6522
6574
|
* 发送好友申请。
|
|
6523
6575
|
*
|
|
6524
6576
|
* @remarks `remark` 是当前账号对目标用户设置的私有备注,按后端申请合同作为
|
|
6525
|
-
* `remark_nick_name` 提交。SDK
|
|
6577
|
+
* `remark_nick_name` 提交。SDK 不另存待处理副本;关系建立后从当前账号的权威好友资料读取并展示。
|
|
6526
6578
|
*/
|
|
6527
6579
|
requestFriendship: (userId: string, options: {
|
|
6528
6580
|
message: string;
|
|
@@ -6746,7 +6798,7 @@ interface AdvancedConversationsApi extends ImConversationsApi, ImConversationBac
|
|
|
6746
6798
|
*
|
|
6747
6799
|
* @internal
|
|
6748
6800
|
*/
|
|
6749
|
-
ensureOpenableConversation: (ref: ConversationRef) => Promise<ConversationRef<'direct' | 'group' | 'channel' | 'robot'>>;
|
|
6801
|
+
ensureOpenableConversation: (ref: ConversationRef) => Promise<ConversationRef<'direct' | 'group' | 'channel' | 'robot' | 'customerService'>>;
|
|
6750
6802
|
/**
|
|
6751
6803
|
* 读取已有会话或本次账号内已校验的目标资料;返回值不代表列表成员资格。
|
|
6752
6804
|
* @internal
|
|
@@ -6776,6 +6828,8 @@ interface ImProductClient {
|
|
|
6776
6828
|
/** 当前账号完整联系人、群组和社群目录的统一搜索。 */
|
|
6777
6829
|
readonly directory: ImDirectorySearchApi;
|
|
6778
6830
|
/** 机器人公开目录;通讯录查找与群/社群绑定列表共用分页合同。 */
|
|
6831
|
+
/** 客服号只读资料能力。 */
|
|
6832
|
+
readonly customerService: ImCustomerServiceApi;
|
|
6779
6833
|
readonly robots: ImRobotsApi;
|
|
6780
6834
|
readonly contacts: ImContactsApi;
|
|
6781
6835
|
readonly groups: ImGroupsApi;
|
|
@@ -6827,6 +6881,7 @@ interface ImClient extends Omit<ImProductClient, 'capabilities' | 'channels' | '
|
|
|
6827
6881
|
(ref: ConversationRef<'group'>, options?: ConversationOpenOptions): Promise<ConversationHandle<'group'>>;
|
|
6828
6882
|
(ref: ConversationRef<'channel'>, options?: ConversationOpenOptions): Promise<ConversationHandle<'channel'>>;
|
|
6829
6883
|
(ref: ConversationRef<'robot'>, options?: ConversationOpenOptions): Promise<ConversationHandle<'robot'>>;
|
|
6884
|
+
(ref: ConversationRef<'customerService'>, options?: ConversationOpenOptions): Promise<ConversationHandle<'customerService'>>;
|
|
6830
6885
|
};
|
|
6831
6886
|
/** 当前账号草稿产品面;按复合身份持久化,handle.draft 委托同一状态源。 */
|
|
6832
6887
|
drafts: ImDraftsApi;
|
|
@@ -6844,7 +6899,7 @@ interface ImClient extends Omit<ImProductClient, 'capabilities' | 'channels' | '
|
|
|
6844
6899
|
contact: ImContactApi;
|
|
6845
6900
|
/** 群域:群资料读取 + 修改群名/群头像/群内昵称。 */
|
|
6846
6901
|
group: ImGroupApi;
|
|
6847
|
-
/** CHANNEL
|
|
6902
|
+
/** CHANNEL 域:资料、成员管理与独立置顶能力;尚未确认的动作不进入此门面。 */
|
|
6848
6903
|
channel: ImChannelApi;
|
|
6849
6904
|
/** 可观察媒体任务与按精确消息引用下载。 */
|
|
6850
6905
|
media: ImMediaTasksApi;
|
|
@@ -6971,9 +7026,9 @@ type ImLocale = 'en-US' | 'th-TH' | 'vi-VN' | 'zh-CN' | 'zh-TW';
|
|
|
6971
7026
|
*/
|
|
6972
7027
|
|
|
6973
7028
|
/**
|
|
6974
|
-
*
|
|
6975
|
-
*
|
|
6976
|
-
*
|
|
7029
|
+
* 命令和生命周期操作提示的文案 key,供 formatServiceText 使用。
|
|
7030
|
+
* kit service/runtime 返回语义码与参数,由宿主根据语言生成文案。
|
|
7031
|
+
* 动态 error.message 作为 {reason} 参数,不纳入 catalog 翻译。
|
|
6977
7032
|
*/
|
|
6978
7033
|
type ImServiceTextKey = 'common.notConnected' | 'common.selectOrOpenConversation' | 'common.conversationTypeNotReady' | 'common.conversationNotReady' | `recall.${RecallFailReason}` | `edit.${EditFailReason}` | 'localDelete.done' | 'localDelete.notFound' | 'localDelete.inFlight' | 'localDelete.failed' | 'channelDelete.notFound' | 'channelDelete.unsupported' | 'channelDelete.notSent' | 'channelDelete.unavailable' | 'channelDelete.forbidden' | 'channelDelete.timeout' | 'channelDelete.failed' | 'channelDelete.disconnected' | 'directBlock.contactRequired' | 'groupBlock.left' | 'groupBlock.removed' | 'groupBlock.dismissed' | 'groupBlock.unknownRestricted' | 'channelBlock.guest' | 'channelBlock.left' | 'channelBlock.removed' | 'channelBlock.dismissed' | 'channelBlock.muted' | 'channelBlock.allMembersMuted' | 'channelBlock.currentUserMuted' | 'channelBlock.blacklisted' | 'channelBlock.unknownRestricted' | 'channelProfile.loadFailed' | 'channelProfile.notFound' | 'channelProfile.retryAction' | 'channelMembers.title' | 'channelMembers.searchPlaceholder' | 'channelMembers.loading' | 'channelMembers.loadFailed' | 'channelMembers.retryAction' | 'channelMembers.empty' | 'channelMembers.loadingMore' | 'channelMembers.loadMoreFailed' | 'channelMembers.exhausted' | 'channelMembers.loadMoreAction' | 'label.image' | 'label.video' | 'label.file' | 'label.sticker' | 'send.failed' | 'send.retryFailed' | 'send.cancelFailed' | 'send.mediaFailed' | 'send.mediaEmpty' | 'send.mediaCancelled' | 'send.mediaCountLimit' | 'send.mediaTooLarge' | 'send.mediaFormatMismatch' | 'send.imageFormatUnsupported' | 'send.videoTooLong' | 'send.videoDurationUnavailable' | 'send.voiceEmpty' | 'send.voiceStorageNotConfigured' | 'send.voiceCancelled' | 'send.voiceFailed' | 'media.uploadWaiting' | 'media.voiceNotReady' | 'media.voiceLoadEmpty' | 'media.voiceLoadFailed' | 'media.videoOpenEmpty' | 'media.videoLoadFailed' | 'media.imageInvalid' | 'media.imageLoadFailed' | 'media.fileDownloadEmpty' | 'media.fileDownloadFailed' | 'conversation.muteEnableFailed' | 'conversation.muteDisableFailed' | 'conversation.backgroundLoadFailed' | 'read.markReadFailed' | 'storage.failed' | 'sync.failed' | 'draft.saveFailed' | 'history.returnLatestFailed' | 'pinned.forbidden' | 'pinned.network' | 'pinned.contract' | 'pinned.unsupported' | 'pinned.failed' | 'pinned.previewUnavailable' | 'pinned.locateFailed' | 'pinned.messageNotFound' | 'pinned.recalled' | 'pinned.deleted' | 'pinned.protected' | 'pinned.pinAction' | 'pinned.unpinAction' | 'pinned.unpinConfirm' | 'pinned.cancelAction' | 'lifecycle.missingLoginState' | 'lifecycle.prepareFailed' | 'lifecycle.missingConnectParams' | 'lifecycle.connectFailed' | 'lifecycle.disposed' | 'lifecycle.connectionOccupied' | 'lifecycle.connectionCoordinationUnavailable' | 'forward.emptyInput' | 'forward.allSkipped' | 'forward.partialSkipped' | 'forward.done' | 'forward.failed';
|
|
6979
7034
|
|
|
@@ -7102,7 +7157,7 @@ interface DelayedLoadingIndicatorOptions {
|
|
|
7102
7157
|
clearTimer?: (timer: ReturnType<typeof setTimeout>) => void;
|
|
7103
7158
|
}
|
|
7104
7159
|
interface DelayedLoadingIndicator {
|
|
7105
|
-
/** 同一 identity
|
|
7160
|
+
/** 同一 identity 继续当前计时;identity 改变后旧操作不再生效,并重新开始计时。 */
|
|
7106
7161
|
update: (loading: boolean, identity: string) => void;
|
|
7107
7162
|
/** 取消定时器并在必要时发出一次隐藏通知。 */
|
|
7108
7163
|
dispose: () => void;
|
|
@@ -7113,7 +7168,7 @@ declare const DEFAULT_LOADING_MINIMUM_VISIBLE_MS = 220;
|
|
|
7113
7168
|
* 将真实 loading 与可见提示分离。
|
|
7114
7169
|
*
|
|
7115
7170
|
* 快速完成的缓存读取不会显示提示;已经显示的提示会满足最短展示时间。identity 变化、关闭和
|
|
7116
|
-
* dispose
|
|
7171
|
+
* dispose 都会取消旧定时器,避免上一条媒体随后返回的旧状态影响当前预览。
|
|
7117
7172
|
*/
|
|
7118
7173
|
declare function createDelayedLoadingIndicator(options: DelayedLoadingIndicatorOptions): DelayedLoadingIndicator;
|
|
7119
7174
|
|
|
@@ -7838,7 +7893,7 @@ interface ConversationPrefetchController {
|
|
|
7838
7893
|
* 页间重新等待宿主空闲调度,使置顶、未读、删除和活动会话变化及时影响下一页,
|
|
7839
7894
|
* SDK 仍负责请求去重、前台优先与本次账号 Runtime 的网络总预算。
|
|
7840
7895
|
* 同一 Client 下完成或失败的候选本轮不自动重试;取消项可在运行条件恢复后重新排队。
|
|
7841
|
-
* reset
|
|
7896
|
+
* reset 或更换 client 后旧请求结果失效,旧 Promise 完成后不能修改新账号的请求记录。
|
|
7842
7897
|
*/
|
|
7843
7898
|
declare function createConversationPrefetchController(options: ConversationPrefetchControllerOptions): ConversationPrefetchController;
|
|
7844
7899
|
|
|
@@ -8594,7 +8649,7 @@ declare function resolveChannelMembers(runtime: ChatRuntime, channelId: string,
|
|
|
8594
8649
|
/**
|
|
8595
8650
|
* 收到“普通群成员已改名”的系统消息后,重新读取该群成员昵称;不直接信任通知中的展示文本。
|
|
8596
8651
|
*
|
|
8597
|
-
* 本机写入的通知可能晚于写请求返回;宿主通过 `preserveUserIds`
|
|
8652
|
+
* 本机写入的通知可能晚于写请求返回;宿主通过 `preserveUserIds` 明确保留尚未被服务端查询确认的本机昵称。
|
|
8598
8653
|
* 不能仅凭 `operatorId === self` 判断为本机写入,因为同账号其它设备改名也使用相同操作者。
|
|
8599
8654
|
*/
|
|
8600
8655
|
declare function applyGroupMemberRename(runtime: ChatRuntime, message: AdvancedMessage, options?: {
|
|
@@ -8603,21 +8658,21 @@ declare function applyGroupMemberRename(runtime: ChatRuntime, message: AdvancedM
|
|
|
8603
8658
|
/**
|
|
8604
8659
|
* 把已经加载的普通群成员列表同步为消息气泡可查询的昵称表。
|
|
8605
8660
|
*
|
|
8606
|
-
*
|
|
8661
|
+
* 输入成员可能已合并本地昵称投影,因此这里只同步展示,不能因值相同就认定服务端已返回最新昵称。
|
|
8607
8662
|
*/
|
|
8608
8663
|
declare function applyMemberNames(runtime: ChatRuntime, groupId: string, members: readonly GroupMember[]): void;
|
|
8609
8664
|
/**
|
|
8610
|
-
*
|
|
8665
|
+
* 写请求成功后只更新普通群昵称的共享展示数据。
|
|
8611
8666
|
*
|
|
8612
|
-
* 成员列表、消息气泡和 GROUP `@` 候选都读取 Runtime
|
|
8613
|
-
*
|
|
8667
|
+
* 成员列表、消息气泡和 GROUP `@` 候选都读取 Runtime 的这份映射,因此更新单个成员后即可
|
|
8668
|
+
* 让这些界面立即显示同一昵称;后续完整成员查询返回相同值后自动解除本机保护。
|
|
8614
8669
|
*/
|
|
8615
8670
|
declare function applyGroupMemberNickname(runtime: ChatRuntime, groupId: string, userId: string, nickname: string): void;
|
|
8616
8671
|
/**
|
|
8617
|
-
*
|
|
8672
|
+
* 清理一个群的本机昵称保护记录。
|
|
8618
8673
|
*
|
|
8619
|
-
*
|
|
8620
|
-
*
|
|
8674
|
+
* 只有资料接口确认账号已退出或群已不存在时,才使用 clearCachedNames 同时清空已缓存的群昵称,避免影响重新加入的会话。
|
|
8675
|
+
* 收到其他设备改名时只清除保护记录,完整成员名称由强制刷新后的结果更新。
|
|
8621
8676
|
*/
|
|
8622
8677
|
declare function clearGroupMemberNicknameProjection(runtime: ChatRuntime, groupId: string, options?: {
|
|
8623
8678
|
clearCachedNames?: boolean;
|
|
@@ -8809,7 +8864,7 @@ interface ImMediaBatchSendResult {
|
|
|
8809
8864
|
selectedCount: number;
|
|
8810
8865
|
/** 实际进入逐项发送流程的数量。 */
|
|
8811
8866
|
processedCount: number;
|
|
8812
|
-
/**
|
|
8867
|
+
/** sendMediaFile 返回成功,且操作结束时仍处于同一账号版本的项目数量。 */
|
|
8813
8868
|
acceptedCount: number;
|
|
8814
8869
|
/** 是否因为单批数量上限忽略了部分选择。 */
|
|
8815
8870
|
rejectedByLimit: boolean;
|
|
@@ -9251,10 +9306,10 @@ declare function createNewMessageBadgeController(onCountChange?: NewMessageBadge
|
|
|
9251
9306
|
/** Surface renderer registry 可接收的稳定消息正文种类。 */
|
|
9252
9307
|
type ImMessageBodyKind = MessageContentType | 'gif' | 'decrypt-failed';
|
|
9253
9308
|
/**
|
|
9254
|
-
* 把 SDK
|
|
9309
|
+
* 把 SDK 统一格式的消息解析为唯一正文 renderer kind。
|
|
9255
9310
|
*
|
|
9256
9311
|
* 解密失败优先于正文类型;已注册类型结构不完整时返回 `unknown`,避免一条坏消息中断整个线程。
|
|
9257
|
-
* GIF 只依据 SDK
|
|
9312
|
+
* GIF 只依据 SDK 转换后的 sticker `imageType` 判断,不解析 URL 后缀或协议原始字段。
|
|
9258
9313
|
*/
|
|
9259
9314
|
declare function resolveMessageBodyKind(message: ImMessageView): ImMessageBodyKind;
|
|
9260
9315
|
|