k2-im 0.2.2 → 0.2.4
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/dist/chat-kit-pinia.d.ts +14 -2
- package/dist/chat-kit.d.ts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/modules/im-chat-kit/src/pinia/profile-directory.store.js +1 -1
- package/dist/modules/im-chat-kit/src/services/conversation-list-profiles.js +1 -0
- package/dist/modules/im-chat-kit/src/services/profile.service.js +1 -1
- package/dist/modules/im-chat-kit/src/services/robot-sender-profile.js +1 -1
- package/dist/modules/im-core/src/outbox/outbox-manager.js +1 -1
- package/dist/sdk.d.ts +2 -2
- package/package.json +1 -1
package/dist/chat-kit-pinia.d.ts
CHANGED
|
@@ -3254,9 +3254,9 @@ interface TextMessageOptions {
|
|
|
3254
3254
|
mentions?: readonly MentionInput[];
|
|
3255
3255
|
replyToMessageId?: string;
|
|
3256
3256
|
}
|
|
3257
|
-
/**
|
|
3257
|
+
/** 可主动分享的名片。未知 wire 类别只保留接收,不能放进发送入参。 */
|
|
3258
3258
|
type ContactCardInput = Omit<ImContactBody, 'kind' | 'rawKind'> & {
|
|
3259
|
-
kind: Extract<ImContactBody['kind'], 'individual' | 'group' | 'channel'>;
|
|
3259
|
+
kind: Extract<ImContactBody['kind'], 'individual' | 'group' | 'channel' | 'robot'>;
|
|
3260
3260
|
};
|
|
3261
3261
|
/** 名片发送附加数据;回复关系与其它可发送消息使用同一稳定消息 id。 */
|
|
3262
3262
|
interface ContactMessageOptions {
|
|
@@ -8716,6 +8716,10 @@ declare function defineImProfileDirectoryStore(pinia: Pinia): pinia.StoreDefinit
|
|
|
8716
8716
|
channelMentionsExhausted: any;
|
|
8717
8717
|
channelMentionsError: any;
|
|
8718
8718
|
resolveDisplayName: (ref: ConversationRef, userId: string, fallbackName?: string) => string;
|
|
8719
|
+
resolveConversationListProfiles: (item: ConversationListItem, options?: {
|
|
8720
|
+
forceRefresh?: boolean;
|
|
8721
|
+
retryUnresolved?: boolean;
|
|
8722
|
+
}) => Promise<boolean>;
|
|
8719
8723
|
resolveAvatarUrl: (ref: ConversationRef, userId: string) => string;
|
|
8720
8724
|
resolvePublicNickname: (userId: string) => string;
|
|
8721
8725
|
resolveSenderProfile: (userId: string, options?: {
|
|
@@ -8893,6 +8897,10 @@ declare function defineImProfileDirectoryStore(pinia: Pinia): pinia.StoreDefinit
|
|
|
8893
8897
|
channelMentionsExhausted: any;
|
|
8894
8898
|
channelMentionsError: any;
|
|
8895
8899
|
resolveDisplayName: (ref: ConversationRef, userId: string, fallbackName?: string) => string;
|
|
8900
|
+
resolveConversationListProfiles: (item: ConversationListItem, options?: {
|
|
8901
|
+
forceRefresh?: boolean;
|
|
8902
|
+
retryUnresolved?: boolean;
|
|
8903
|
+
}) => Promise<boolean>;
|
|
8896
8904
|
resolveAvatarUrl: (ref: ConversationRef, userId: string) => string;
|
|
8897
8905
|
resolvePublicNickname: (userId: string) => string;
|
|
8898
8906
|
resolveSenderProfile: (userId: string, options?: {
|
|
@@ -9070,6 +9078,10 @@ declare function defineImProfileDirectoryStore(pinia: Pinia): pinia.StoreDefinit
|
|
|
9070
9078
|
channelMentionsExhausted: any;
|
|
9071
9079
|
channelMentionsError: any;
|
|
9072
9080
|
resolveDisplayName: (ref: ConversationRef, userId: string, fallbackName?: string) => string;
|
|
9081
|
+
resolveConversationListProfiles: (item: ConversationListItem, options?: {
|
|
9082
|
+
forceRefresh?: boolean;
|
|
9083
|
+
retryUnresolved?: boolean;
|
|
9084
|
+
}) => Promise<boolean>;
|
|
9073
9085
|
resolveAvatarUrl: (ref: ConversationRef, userId: string) => string;
|
|
9074
9086
|
resolvePublicNickname: (userId: string) => string;
|
|
9075
9087
|
resolveSenderProfile: (userId: string, options?: {
|
package/dist/chat-kit.d.ts
CHANGED
|
@@ -3355,9 +3355,9 @@ interface TextMessageOptions {
|
|
|
3355
3355
|
mentions?: readonly MentionInput[];
|
|
3356
3356
|
replyToMessageId?: string;
|
|
3357
3357
|
}
|
|
3358
|
-
/**
|
|
3358
|
+
/** 可主动分享的名片。未知 wire 类别只保留接收,不能放进发送入参。 */
|
|
3359
3359
|
type ContactCardInput = Omit<ImContactBody, 'kind' | 'rawKind'> & {
|
|
3360
|
-
kind: Extract<ImContactBody['kind'], 'individual' | 'group' | 'channel'>;
|
|
3360
|
+
kind: Extract<ImContactBody['kind'], 'individual' | 'group' | 'channel' | 'robot'>;
|
|
3361
3361
|
};
|
|
3362
3362
|
/** 名片发送附加数据;回复关系与其它可发送消息使用同一稳定消息 id。 */
|
|
3363
3363
|
interface ContactMessageOptions {
|
package/dist/index.d.ts
CHANGED
|
@@ -3888,9 +3888,9 @@ interface TextMessageOptions {
|
|
|
3888
3888
|
mentions?: readonly MentionInput[];
|
|
3889
3889
|
replyToMessageId?: string;
|
|
3890
3890
|
}
|
|
3891
|
-
/**
|
|
3891
|
+
/** 可主动分享的名片。未知 wire 类别只保留接收,不能放进发送入参。 */
|
|
3892
3892
|
type ContactCardInput = Omit<ImContactBody, 'kind' | 'rawKind'> & {
|
|
3893
|
-
kind: Extract<ImContactBody['kind'], 'individual' | 'group' | 'channel'>;
|
|
3893
|
+
kind: Extract<ImContactBody['kind'], 'individual' | 'group' | 'channel' | 'robot'>;
|
|
3894
3894
|
};
|
|
3895
3895
|
/** 名片发送附加数据;回复关系与其它可发送消息使用同一稳定消息 id。 */
|
|
3896
3896
|
interface ContactMessageOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineStore as e}from"pinia";import{ref as n,shallowRef as r,reactive as t}from"vue";import{executeDismissChannel as o,executeLeaveChannel as a,executeTransferChannelOwnership as i,executeAddChannelAdmin as c,executeRemoveChannelAdmin as l,executeRemoveChannelMember as s,executeInviteChannelMembers as u}from"../services/channel-member-management.service.js";import{executeSetChannelMemberPrivateChatDisabled as v,executeSetChannelAllMuted as d,executeUpdateChannelVerification as f,executeSetChannelMemberNickname as m,executeSetMyChannelNickname as p,executeUpdateChannelAvatar as b,executeUpdateChannelDescription as h,executeUpdateChannelName as y}from"../services/channel-profile-management.service.js";import{executeRequestDirectFriendship as g,executeResolveDirectContactTarget as j,executeSearchDirectContact as I,executeDeleteDirectFriendship as k,executeReportDirectContact as O,executeBlockDirectContact as z,executeSetDirectContactRemark as w}from"../services/direct-contact-management.service.js";import{executeLeaveGroup as M,executeTransferGroupOwnership as C,executeRemoveGroupMember as P,executeInviteGroupMembers as _}from"../services/group-member-management.service.js";import{executeUpdateGroupVerification as T,executeSetMyGroupNickname as G,executeUpdateGroupAvatar as R,executeUpdateGroupName as x}from"../services/group-profile-management.service.js";import{resolveImProfileAccessDestination as $}from"../services/profile-access.service.js";import{readChannelMentionNextPage as E,peekChannelMentionPage as D,peekChannelMemberPage as U,readChannelMember as q,readChannelProfile as N,peekGroupMembers as S,readGroupMembers as K,peekGroupProfile as L,readGroupProfile as A,readMutualGroups as W,readDirectProfile as J,refreshChannelMentionPage as V,readChannelMemberPage as B,refreshChannelMemberPage as F,readDirectoryPage as Q,mergeDirectoryItems as H,searchCompleteDirectory as Y}from"../services/profile-directory.service.js";import{resolvePublicNickname as X,resolveChannelMemberAvatarUrl as Z,resolveSenderAvatarUrl as ee,resolveChannelMemberDisplayName as ne,resolveMemberDisplayName as re}from"../services/profile-display.js";import{applyGroupMemberRename as te,clearGroupMemberNicknameProjection as oe,applyGroupMemberNickname as ae,beginSenderProfileUpdate as ie,resolveChannelMembers as ce,resolveGroupMembers as le,resolveSenderName as se,applyMemberNames as ue}from"../services/profile.service.js";import{getImChatKitContext as ve,registerImChatKitStoreDisposer as de,resolveImChatKitPinia as fe}from"./context.js";const me=/* @__PURE__ */new Set(["group_member_joined","group_member_invited","group_member_left","group_member_removed","group_member_renamed"]),pe=/* @__PURE__ */new Set(["channel_member_joined","channel_member_invited","channel_member_left","channel_member_removed","channel_owner_transferred","channel_admin_added","channel_admin_removed","channel_member_renamed"]),be=/* @__PURE__ */new Set(["channel_member_joined","channel_member_invited","channel_member_left","channel_member_removed","channel_member_renamed"]);function he(e){return Object.freeze({conversationType:e.conversationType,conversationId:e.conversationId})}function ye(e,n){return null!==e&&e.conversationType===n.conversationType&&e.conversationId===n.conversationId}function ge(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"stale",stale:!0,projectionUpdated:!1,refreshRequired:!1})}function je(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"stale",stale:!0,projectionUpdated:!1,refreshRequired:!1})}function Ie(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"stale",stale:!0,projectionUpdated:!1,refreshRequired:!1})}function ke(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"not-allowed",stale:!1,projectionUpdated:!1,refreshRequired:!1})}function Oe(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"stale",stale:!0,projectionUpdated:!1,refreshRequired:!1})}function ze(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"not-allowed",stale:!1,projectionUpdated:!1,refreshRequired:!1})}function we(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"stale",stale:!0,projectionUpdated:!1,refreshRequired:!1})}function Me(e,n,r){const t="object"==typeof e&&null!==e?e:null;return null!==t&&"string"==typeof t.code&&("auth"===(o=t.category)||"network"===o||"protocol"===o||"permission"===o||"validation"===o||"state"===o||"unsupported"===o||"contract"===o)?Object.freeze({code:t.code,category:t.category,operation:n,retryable:!0===t.retryable,...void 0===r?{}:{conversation:he(r)}}):Object.freeze({code:"IM_CHAT_KIT_PROFILE_DIRECTORY_OPERATION_FAILED",category:"state",operation:n,retryable:!1,...void 0===r?{}:{conversation:he(r)}});var o}function Ce(){return{items:[],loading:!1,loaded:!1,exhausted:!1,error:null}}function Pe(de){return e("k2-im-profile-directory",()=>{const e=ve(de).runtime,fe=e.getDiagnostics(),Pe=n(0),_e=n({}),Te=r(null),Ge=r(null),Re=n("unknown"),xe=n(!1),$e=r(null),Ee=r([]),De=n(!1),Ue=r(null),qe=r(null),Ne=r(null),Se=r([]),Ke=n(!1),Le=n(!1),Ae=r(null),We=r(null),Je=r(null),Ve=n(!1),Be=r(null),Fe=t({individual:{items:[],loading:!1,loaded:!1,exhausted:!1,error:null},group:{items:[],loading:!1,loaded:!1,exhausted:!1,error:null},channel:{items:[],loading:!1,loaded:!1,exhausted:!1,error:null}}),Qe=n(""),He=r(null),Ye=n(!1),Xe=r(null),Ze=r(null),en=r([]),nn=n(""),rn=n(!1),tn=n(!1),on=r(null),an=r(null),cn=r(null),ln=n(!1),sn=r(null),un=r(null),vn=r([]),dn=n(""),fn=n(!1),mn=n(!1),pn=r(null);let bn=!1;const hn=/* @__PURE__ */new Map,yn={direct:0,group:0,channel:0},gn={direct:0,group:0,channel:0};let jn=0;const In={"set-remark":0,block:0,report:0,"delete-friendship":0,"search-user":0,"resolve-application-target":0,"request-friendship":0},kn={"update-name":0,"update-avatar":0,"set-my-nickname":0,"update-verification":0},On={"invite-members":0,"remove-member":0,"transfer-ownership":0,leave:0},zn=/* @__PURE__ */new Map;let wn=0;const Mn=/* @__PURE__ */new Map,Cn=/* @__PURE__ */new Map,Pn=/* @__PURE__ */new Set,_n=/* @__PURE__ */new Set,Tn=/* @__PURE__ */new Map,Gn=/* @__PURE__ */new Map;let Rn=0;const xn={"invite-members":0,"remove-member":0,"add-admin":0,"remove-admin":0,"transfer-ownership":0,leave:0,dismiss:0},$n=/* @__PURE__ */new Map,En=/* @__PURE__ */new Map;let Dn=0;const Un=/* @__PURE__ */new Set,qn=/* @__PURE__ */new Map,Nn=/* @__PURE__ */new Map;let Sn=0,Kn=0,Ln=0,An=0;const Wn=/* @__PURE__ */new Map,Jn=/* @__PURE__ */new Map,Vn=/* @__PURE__ */new Map,Bn=/* @__PURE__ */new Map,Fn=/* @__PURE__ */new Map,Qn=/* @__PURE__ */new Map,Hn=/* @__PURE__ */new Map,Yn=/* @__PURE__ */new Map,Xn=n(0),Zn={individual:0,group:0,channel:0},er=/* @__PURE__ */new Map;let nr,rr,tr,or,ar,ir,cr,lr,sr,ur=0,vr=0,dr=0;function fr(n,r){return se(e,n,r)}function mr(n,r){return le(e,n.conversationId,r)}function pr(n,r,t){const o=e.getGeneration(),a=hn.get(n.conversationId)??0;return ce(e,n.conversationId,r,{...!0===t?.forceRefresh?{forceRefresh:!0}:{},isCurrent:()=>!bn&&e.getGeneration()===o&&(hn.get(n.conversationId)??0)===a&&!1!==t?.isCurrent?.()})}function br(n,r){const t=n.conversationId.trim();if(""===t)return;hn.set(t,(hn.get(t)??0)+1);const o={...e.getChannelMemberProfiles()},a=[...new Set((r??[]).map(e=>e.trim()).filter(Boolean))];if(0===a.length)delete o[t];else{const e={...o[t]??{}};for(const n of a)delete e[n];0===Object.keys(e).length?delete o[t]:o[t]=e}e.setChannelMemberProfiles(o)}function hr(e,n){const r=e.conversationId.trim();""!==r&&(br(e,n),_e.value={..._e.value,[r]:(_e.value[r]??0)+1})}function yr(e,n,r){const t=r.trim();if(""===t)return;const o=e.get(n)??/* @__PURE__ */new Set;o.add(t),e.set(n,o)}function gr(e,n,r){const t=e.get(n);void 0!==t&&(t.delete(r.trim()),0===t.size&&e.delete(n))}function jr(e,n,r){const t=r.trim();return""!==t&&!0===e.get(n)?.has(t)}function Ir(e,n,r){const t=e.get(n);return void 0===t||0===t.size?r:r.filter(e=>!t.has(e.userId))}function kr(e,n,r={}){const t=Qn.get(e);if(void 0===t||0===t.size)return n;const o=new Set(n.map(e=>e.userId)),a=new Map(t),i=n.map(e=>{const n=t.get(e.userId);return void 0===n?e:(!0===r.reconcile&&n===e.nickname&&a.delete(e.userId),Object.freeze({...e,nickname:n}))});if(!0===r.reconcile)for(const e of a.keys())o.has(e)||a.delete(e);return 0===a.size?Qn.delete(e):Qn.set(e,a),Object.freeze(i)}function Or(e,n){const r=Qn.get(e);void 0!==r&&(r.delete(n.trim()),0===r.size&&Qn.delete(e))}function zr(e,n){const r=Hn.get(e);return void 0===r||0===r.size?n:Object.freeze(n.map(e=>{const n=r.get(e.userId);return void 0===n?e:Object.freeze({...e,displayName:n.displayName})}))}function wr(e,n){const r=Hn.get(e),t=Yn.get(e),o=We.value?.conversationId===e?Je.value?.ownerId:Fn.get(e)?.ownerId;return void 0!==r&&0!==r.size||void 0!==t&&0!==t.size||void 0!==o?Object.freeze(n.map(e=>{const n=r?.get(e.userId),a=t?.get(e.userId),i=void 0!==o&&e.userId===o;if(void 0===n&&void 0===a&&!i)return e;const{nickname:c,...l}=e;return Object.freeze({...l,...void 0===n?void 0===e.nickname?{}:{nickname:e.nickname}:""===n.nickname?{}:{nickname:n.nickname},displayName:n?.displayName??e.displayName,role:i?"owner":a??e.role})})):n}function Mr(e,n){const r=Hn.get(e);if(void 0===r)return;let t=!1;for(const e of n)r.get(e.userId)?.nickname===(e.nickname??"")&&(r.delete(e.userId),t=!0);0===r.size&&Hn.delete(e),t&&(Xn.value+=1)}function Cr(e,n){const r=Hn.get(e);void 0!==r&&r.delete(n.trim())&&(0===r.size&&Hn.delete(e),Xn.value+=1)}function Pr(e,n){const r=Yn.get(e);if(void 0!==r){for(const e of n)r.get(e.userId)===e.role&&r.delete(e.userId);0===r.size&&Yn.delete(e)}}function _r(e,n){const r=Yn.get(e);void 0!==r&&(r.delete(n.trim()),0===r.size&&Yn.delete(e))}function Tr(n,r,t,o){const a="direct"===n.conversationType?Te.value:"group"===n.conversationType?qe.value:We.value;return!bn&&e.getGeneration()===r&&yn[n.conversationType]===t&&gn[n.conversationType]===o&&ye(a,n)}async function Gr(n,r={}){const t=he(n),o=++yn.direct,a=gn.direct,i=e.getGeneration(),c=!ye(Te.value,t);Te.value=t,c&&(Ge.value=null,Re.value="unknown"),xe.value=!0,$e.value=null;const l=ie(e,t.conversationId,!0===r.forceRefresh);try{const n=await J(e,t,r);return Tr(t,i,o,a)?l.isCurrent()?(null!==n.profile&&l.commit({remark:(n.profile.remark??"").trim(),nickname:n.profile.nickname.trim(),avatar:(n.profile.avatar??"").trim()}),Ge.value=n.profile,Re.value=n.relationship,xe.value=!1,null===n.profile?Object.freeze({ok:!1,operation:"direct-profile",reason:"not-found"}):Object.freeze({ok:!0,operation:"direct-profile"})):(xe.value=!1,Object.freeze({ok:!1,operation:"direct-profile",reason:"stale"})):Object.freeze({ok:!1,operation:"direct-profile",reason:"stale"})}catch(e){if(!Tr(t,i,o,a))return Object.freeze({ok:!1,operation:"direct-profile",reason:"stale"});const n=Me(e,"profile.direct",t);return $e.value=n,xe.value=!1,Object.freeze({ok:!1,operation:"direct-profile",reason:"failed",error:n})}finally{l.finish()}}function Rr(e){return In[e]+=1,In[e]}function xr(e,n){return!bn&&In[e]===n}function $r(e,n,r,t){return`${r}:${t}:${e.conversationType}:${e.conversationId}:${n}`}function Er(n,r){kn[n]+=1;const t=e.getGeneration(),o=gn.group,a=$r(r,n,t,o);return Mn.set(a,(Mn.get(a)??0)+1),Object.freeze({epoch:kn[n],generation:t,key:a,resetEpoch:o})}function Dr(e,n){const r=Mn.get(n.key)??0;r<=1?Mn.delete(n.key):Mn.set(n.key,r-1),Yr(e)}function Ur(n,r){return!bn&&e.getGeneration()===r.generation&&gn.group===r.resetEpoch&&kn[n]===r.epoch}function qr(n,r){const t=e.getGeneration(),o=gn.group;return void 0!==r?(Mn.get($r(n,r,t,o))??0)>0:Object.keys(kn).some(e=>(Mn.get($r(n,e,t,o))??0)>0)}function Nr(n,r,t="profile"){const o=e.getGeneration(),a=gn.channel,i=function(e,n,r,t,o){return`${t}:${o}:${e.conversationType}:${e.conversationId}:${n}:${r}`}(r,n,t,o,a),c=++Rn;return Tn.set(i,c),Gn.set(i,(Gn.get(i)??0)+1),Object.freeze({conversation:he(r),epoch:c,generation:o,resetEpoch:a,key:i})}function Sr(e){const n=Gn.get(e.key)??0;n<=1?Gn.delete(e.key):Gn.set(e.key,n-1),Tn.get(e.key)===e.epoch&&Tn.delete(e.key),ut(e.conversation)}function Kr(n){return!bn&&e.getGeneration()===n.generation&&gn.channel===n.resetEpoch&&Tn.get(n.key)===n.epoch}function Lr(n,r,t){const o=`${e.getGeneration()}:${gn.channel}:${n.conversationType}:${n.conversationId}:`;for(const[e,n]of Gn){const a=void 0===r?o:`${o}${r}:`;if(n>0&&e.startsWith(a)&&(void 0===t||e===`${a}${t.trim()}`))return!0}return!1}function Ar(n,r,t){const o=e.getChannelMemberProfiles(),a=o[n.conversationId],i=a?.[r];void 0!==a&&void 0!==i&&e.setChannelMemberProfiles({...o,[n.conversationId]:{...a,[r]:{...i,displayName:t}}})}function Wr(e,n,r,t){return`${r}:${t}:${e.conversationType}:${e.conversationId}:${n}`}function Jr(n,r,t){const o=e.getGeneration(),a=On[n],i=Wr(r,n,o,a),c=function(e,n,r,t,o){return`${t}:${o}:${e.conversationType}:${e.conversationId}:${n}:${r}`}(r,n,t,o,a),l=++wn;return zn.set(c,l),Cn.set(i,(Cn.get(i)??0)+1),Object.freeze({actionEpoch:l,actionKey:c,generation:o,resetEpoch:a,writeKey:i})}function Vr(e,n){const r=Cn.get(n.writeKey)??0;r<=1?Cn.delete(n.writeKey):Cn.set(n.writeKey,r-1),zn.get(n.actionKey)===n.actionEpoch&&zn.delete(n.actionKey),Yr(e)}function Br(n,r){return!bn&&e.getGeneration()===r.generation&&On[n]===r.resetEpoch&&zn.get(r.actionKey)===r.actionEpoch}function Fr(n,r){const t=e.getGeneration();return void 0!==r?(Cn.get(Wr(n,r,t,On[r]))??0)>0:Object.keys(On).some(e=>(Cn.get(Wr(n,e,t,On[e]))??0)>0)}function Qr(e){ye(qe.value,e)&&ft(e,{forceRefresh:!0,preserveExisting:!0}).then(n=>{n.ok&&ye(qe.value,e)&&Xr(e)})}function Hr(e){ye(qe.value,e)&&dt(e,{forceRefresh:!0})}function Yr(e){qr(e)||Fr(e)||(Pn.delete(e.conversationId)&&Hr(e),_n.delete(e.conversationId)&&Ht(e))}function Xr(n){ye(qe.value,n)&&ue(e,n.conversationId,Se.value.map(e=>({userId:e.userId,nickName:e.nickname,...void 0===e.joinType?{}:{joinType:e.joinType}})))}function Zr(e,n,r,t){return`${r}:${t}:${e.conversationType}:${e.conversationId}:${n}`}function et(n,r,t){const o=e.getGeneration(),a=xn[n],i=function(e,n,r,t,o){return`${t}:${o}:${e.conversationType}:${e.conversationId}:${n}:${r}`}(r,n,t,o,a),c=Zr(r,n,o,a),l=++Dn;return $n.set(i,l),En.set(c,(En.get(c)??0)+1),Object.freeze({actionEpoch:l,actionKey:i,conversation:he(r),writeKey:c,generation:o,resetEpoch:a})}function nt(e){const n=En.get(e.writeKey)??0;n<=1?En.delete(e.writeKey):En.set(e.writeKey,n-1),$n.get(e.actionKey)===e.actionEpoch&&$n.delete(e.actionKey),ut(e.conversation)}function rt(n,r){return!bn&&e.getGeneration()===r.generation&&xn[n]===r.resetEpoch&&$n.get(r.actionKey)===r.actionEpoch}function tt(n,r){const t=e.getGeneration();return(void 0===r?Object.keys(xn):[r]).some(e=>(En.get(Zr(n,e,t,xn[e]))??0)>0)}function ot(e,n){const r=n.trim();if(""===r)return;const t=Nt(e,r);return void 0===t?void 0:Object.freeze({userId:r,role:t.role})}function at(n){const r=Fn.get(n.conversationId);return void 0!==r&&r.ownerId!==e.getCredentials().userId}function it(n,r){if(null===r)return Fn.delete(n.conversationId),null;const t=Fn.get(n.conversationId);return void 0===t?r:r.ownerId===t.ownerId&&"owner"!==r.role||r.ownerId!==e.getCredentials().userId&&"owner"!==r.role?(Fn.delete(n.conversationId),r):Object.freeze({...r,ownerId:t.ownerId,role:"member",permissions:Object.freeze({sendMessages:r.permissions.sendMessages}),canViewMembers:!1===r.memberPrivateChatDisabled})}function ct(e){ye(We.value,e)&&mt(e,{forceRefresh:!0})}function lt(e){ct(e),function(e){ye(Ze.value,e)&&Jt(e,{preserveExisting:!0})}(e)}function st(e,n){const r=qn.get(e.conversationId);if(void 0!==r&&!r.allTargets){for(const e of n)r.userIds.delete(e.trim());0===r.userIds.size&&qn.delete(e.conversationId)}}function ut(e){if(Lr(e)||tt(e))return;Un.delete(e.conversationId)&&Xt(e);const n=qn.get(e.conversationId);if(void 0===n)return;qn.delete(e.conversationId);const r=n.allTargets?void 0:[...n.userIds];n.affectsMentions?hr(e,r):br(e,r),n.resolvesProfiles&&void 0!==r&&r.length>0&&pr(e,r,{forceRefresh:!0}),Yt(e)}function vt(n){const r=e.getChannelMemberProfiles();if(void 0===r[n.conversationId])return!1;const t={...r};return delete t[n.conversationId],e.setChannelMemberProfiles(t),!0}async function dt(n,r={}){const t=he(n),o=++yn.group,a=gn.group,i=e.getGeneration(),c=!ye(qe.value,t);qe.value=t,c&&(Ne.value=null,Kn+=1,Se.value=[],Le.value=!1),Ke.value=!0,Ae.value=null;try{const n=!0===r.forceRefresh?null:await L(e,t);if(!Tr(t,i,o,a))return Object.freeze({ok:!1,operation:"group-profile",reason:"stale"});if(null!==n&&(Ne.value=n),!0===r.restricted)return!0===r.includeMembers&&await ft(t,{restricted:!0,forceRefresh:!0}),Tr(t,i,o,a)?(Ke.value=!1,null===Ne.value?Object.freeze({ok:!1,operation:"group-profile",reason:"not-found"}):Object.freeze({ok:!0,operation:"group-profile"})):Object.freeze({ok:!1,operation:"group-profile",reason:"stale"});const c=await A(e,t,!0===r.forceRefresh?{forceRefresh:!0}:void 0);if(!Tr(t,i,o,a))return Object.freeze({ok:!1,operation:"group-profile",reason:"stale"});const l=function(e,n){if(null===n||!1===n.isInGroup)return Vn.delete(e.conversationId),n;const r=Vn.get(e.conversationId);return void 0===r?n:r.expiresAt<=Date.now()||n.ownerId===r.ownerId?(Vn.delete(e.conversationId),n):Object.freeze({...n,ownerId:r.ownerId})}(t,c);return fe.record("debug","pinia","profile","group-profile-membership-resolved",()=>({conversation:t,data:{profileId:l?.ref.conversationId??null,name:l?.name??null,isInGroup:l?.isInGroup??null,verifyWay:l?.verifyWay??null,memberCount:l?.memberCount??null,membershipDecision:!0===l?.isInGroup?"joined":!1===l?.isInGroup?"not-joined":"unknown"}})),null===l||!1===l.isInGroup?(Kn+=1,Se.value=[],Le.value=!1,zt(t),oe(e,t.conversationId,{clearCachedNames:!0})):!0===r.includeMembers&&await ft(t,{restricted:!1,forceRefresh:!0}),Tr(t,i,o,a)?(Ne.value=l,Ke.value=!1,null===l?Object.freeze({ok:!1,operation:"group-profile",reason:"not-found"}):Object.freeze({ok:!0,operation:"group-profile"})):Object.freeze({ok:!1,operation:"group-profile",reason:"stale"})}catch(e){if(!Tr(t,i,o,a))return Object.freeze({ok:!1,operation:"group-profile",reason:"stale"});const n=Me(e,"profile.group",t);return!0===r.forceRefresh&&(Ne.value=null,Kn+=1,Se.value=[],Le.value=!1),Ae.value=n,Ke.value=!1,Object.freeze({ok:!1,operation:"group-profile",reason:"failed",error:n})}}async function ft(n,r={}){const t=he(n);if(ye(qe.value,t)||(qe.value=t,Se.value=[]),ye(qe.value,t)&&Ne.value?.ref.conversationId===t.conversationId&&!1===Ne.value.isInGroup)return Kn+=1,Se.value=[],Le.value=!1,Object.freeze({ok:!0,operation:"group-members"});if(Se.value.length>0&&!0!==r.forceRefresh)return Object.freeze({ok:!0,operation:"group-members"});const o=++Kn,a=e.getGeneration();Le.value=!0;try{const n=!0===r.preserveExisting?null:await S(e,t);if(bn||e.getGeneration()!==a||o!==Kn||!ye(qe.value,t))return Object.freeze({ok:!1,operation:"group-members",reason:"stale"});const i=null===n?null:Ir(Jn,t.conversationId,n.items);if(null!==i&&(Se.value=kr(t.conversationId,i),Xr(t)),!0===r.restricted||!0!==r.forceRefresh&&null!==i&&i.length>0)return Le.value=!1,Object.freeze({ok:!0,operation:"group-members"});const c=await K(e,t);return bn||e.getGeneration()!==a||o!==Kn||!ye(qe.value,t)?Object.freeze({ok:!1,operation:"group-members",reason:"stale"}):(null!==c&&(Se.value=kr(t.conversationId,Ir(Jn,t.conversationId,c),{reconcile:!0}),Xr(t)),Le.value=!1,Object.freeze({ok:!0,operation:"group-members"}))}catch(n){if(bn||e.getGeneration()!==a||o!==Kn||!ye(qe.value,t))return Object.freeze({ok:!1,operation:"group-members",reason:"stale"});const r=Me(n,"profile.group-members",t);return Ae.value=r,Le.value=!1,Object.freeze({ok:!1,operation:"group-members",reason:"failed",error:r})}}async function mt(n,r){const t=he(n),o=++yn.channel,a=gn.channel,i=e.getGeneration(),c=!ye(We.value,t);We.value=t,c&&(Je.value=null,Wt(t)),Ve.value=!0,Be.value=null;try{const n=await N(e,t,r);if(!Tr(t,i,o,a))return Object.freeze({ok:!1,operation:"channel-profile",reason:"stale"});const c=it(t,n);return Je.value=c,null!==c&&ye(Ze.value,t)&&(en.value=wr(t.conversationId,en.value)),null===c?(Dt(t),Wt()):!0!==c.canViewMembers&&Wt(),Ve.value=!1,null===c?Object.freeze({ok:!1,operation:"channel-profile",reason:"not-found"}):Object.freeze({ok:!0,operation:"channel-profile"})}catch(e){if(!Tr(t,i,o,a))return Object.freeze({ok:!1,operation:"channel-profile",reason:"stale"});const n=Me(e,"profile.channel",t);return!0===r?.forceRefresh&&(Je.value=null,Wt()),Be.value=n,Ve.value=!1,Object.freeze({ok:!1,operation:"channel-profile",reason:"failed",error:n})}}async function pt(n,r,t){const o=Fe[n];if(o.loading&&!t)return Object.freeze({ok:!1,operation:"directory",reason:"busy"});if(r&&o.exhausted)return Object.freeze({ok:!1,operation:"directory",reason:"exhausted"});if(!r&&o.loaded&&!t)return Object.freeze({ok:!0,operation:"directory"});const a=r?er.get(n):void 0;if(r&&void 0===a)return Object.freeze({ok:!1,operation:"directory",reason:"exhausted"});const i=++Zn[n],c=e.getGeneration();o.loading=!0,o.error=null;try{const t=await Q(e,n,a);return bn||c!==e.getGeneration()||i!==Zn[n]?Object.freeze({ok:!1,operation:"directory",reason:"stale"}):(o.items=H(r?o.items:[],t.items),o.loaded=!0,o.exhausted=t.exhausted,o.loading=!1,void 0===t.nextPageToken?er.delete(n):er.set(n,t.nextPageToken),Object.freeze({ok:!0,operation:"directory"}))}catch(r){if(bn||c!==e.getGeneration()||i!==Zn[n])return Object.freeze({ok:!1,operation:"directory",reason:"stale"});const t=Me(r,`directory.${n}`);return o.error=t,o.loading=!1,Object.freeze({ok:!1,operation:"directory",reason:"failed",error:t})}}function bt(){void 0!==nr&&(clearTimeout(nr),nr=void 0),rr?.resolve(Object.freeze({ok:!1,operation:"directory-search",reason:"stale"})),rr=void 0}function ht(){ur+=1,bt(),Qe.value="",He.value=null,Ye.value=!1,Xe.value=null,tr=void 0}function yt(e,n){const r=e.map(e=>e.userId),t=new Map(e.map(e=>[e.userId,e]));for(const e of n)t.has(e.userId)||r.push(e.userId),t.set(e.userId,e);return Object.freeze(r.map(e=>t.get(e)))}function gt(e,n,r){const t=n.trim();if(""===t)return;const o=r.trim(),a=Qn.get(e.conversationId)??/* @__PURE__ */new Map;a.set(t,o),Qn.set(e.conversationId,a),ye(qe.value,e)&&(Se.value=Object.freeze(Se.value.map(e=>e.userId===t?Object.freeze({...e,nickname:o}):e)))}function jt(e,n){Or(e.conversationId,n)}function It(e,n){const r=n.trim();if(""===r)return;if(Or(e.conversationId,r),yr(Jn,e.conversationId,r),!ye(qe.value,e))return;const t=Se.value.filter(e=>e.userId!==r),o=t.length!==Se.value.length;o&&(Se.value=Object.freeze(t),Xr(e)),o&&null!==Ne.value&&void 0!==Ne.value.memberCount&&(Ne.value=Object.freeze({...Ne.value,memberCount:Math.max(0,Ne.value.memberCount-1)}))}function kt(e,n){Or(e.conversationId,n),gr(Jn,e.conversationId,n)}function Ot(e,n){return jr(Jn,e.conversationId,n)}function zt(e){Jn.delete(e.conversationId),Qn.delete(e.conversationId)}function wt(e,n){ye(We.value,e)&&null!==Je.value&&(Je.value=Object.freeze({...Je.value,name:n}))}function Mt(e,n){ye(We.value,e)&&null!==Je.value&&(Je.value=Object.freeze({...Je.value,description:n}))}function Ct(e,n){ye(We.value,e)&&null!==Je.value&&(Je.value=Object.freeze({...Je.value,avatar:n}))}function Pt(e,n,r){if(!ye(We.value,e)||null===Je.value)return;const{inviteCode:t,...o}=Je.value;Je.value=Object.freeze({...o,verifyType:n,...void 0===r?{}:{inviteCode:r}})}function _t(e,n){if(!ye(We.value,e)||null===Je.value)return;const r={...Je.value,...void 0===n.allMembersMuted?{}:{allMembersMuted:n.allMembersMuted},...void 0===n.memberPrivateChatDisabled?{}:{memberPrivateChatDisabled:n.memberPrivateChatDisabled}};Je.value=Object.freeze({...r,canViewMembers:!0===r.permissions.manageMembers||!1===r.memberPrivateChatDisabled})}function Tt(e,n,r,t){const o=n.trim();if(""===o)return;const a=r.trim(),i=a||t?.trim()||o,c=Hn.get(e.conversationId)??/* @__PURE__ */new Map;c.set(o,{nickname:a,displayName:i}),Hn.set(e.conversationId,c),Xn.value+=1,ye(Ze.value,e)&&(en.value=wr(e.conversationId,en.value)),qt(e,o)&&(cn.value=wr(e.conversationId,null===cn.value?[]:[cn.value])[0]??null),ye(un.value,e)&&(vn.value=Object.freeze(vn.value.map(e=>e.userId===o?Object.freeze({...e,displayName:i}):e)))}function Gt(e,n,r){const t=n.trim();if(""===t)return;const o=Yn.get(e.conversationId)??/* @__PURE__ */new Map;o.set(t,r),Yn.set(e.conversationId,o),ye(Ze.value,e)&&(en.value=wr(e.conversationId,en.value)),qt(e,t)&&(cn.value=wr(e.conversationId,null===cn.value?[]:[cn.value])[0]??null)}function Rt(e,n){Cr(e.conversationId,n)}function xt(e,n){const r=n.trim();if(""===r)return;const t=ye(Ze.value,e),o=ye(un.value,e);if(Cr(e.conversationId,r),_r(e.conversationId,r),yr(Bn,e.conversationId,r),!t&&!o)return;const a=t&&en.value.some(e=>e.userId===r),i=o&&vn.value.some(e=>e.userId===r);t&&(en.value=Object.freeze(en.value.filter(e=>e.userId!==r))),o&&(vn.value=Object.freeze(vn.value.filter(e=>e.userId!==r))),qt(e,r)&&(cn.value=null),(a||i)&&ye(We.value,e)&&void 0!==Je.value?.memberCount&&(Je.value=Object.freeze({...Je.value,memberCount:Math.max(0,Je.value.memberCount-1)}))}function $t(e,n){Cr(e.conversationId,n),_r(e.conversationId,n),gr(Bn,e.conversationId,n)}function Et(e,n){return jr(Bn,e.conversationId,n)}function Dt(e){Bn.delete(e.conversationId),Yn.delete(e.conversationId),Hn.delete(e.conversationId)&&(Xn.value+=1)}function Ut(n,r,t){return!bn&&e.getGeneration()===r&&vr===t&&ye(Ze.value,n)}function qt(n,r,t,o){const a=an.value;return!bn&&(void 0===t||e.getGeneration()===t)&&(void 0===o||Ln===o)&&null!==a&&ye(a,n)&&a.userId===r}function Nt(e,n){const r=n.trim();if(""!==r){if(ye(Ze.value,e)){const e=en.value.find(e=>e.userId===r);if(void 0!==e)return e}return qt(e,r)?cn.value??void 0:void 0}}function St(e,n,r){return n.flatMap(n=>{if((Wn.get(n.userId)??0)>r){const r=Nt(e,n.userId);return void 0===r?[]:[r]}return Wn.set(n.userId,r),qt(e,n.userId)&&null!==cn.value&&(cn.value=wr(e.conversationId,[n])[0]??null),[n]})}async function Kt(n,r,t){rn.value=!0,on.value=null;const o=++An;try{const a=await F(e,n,nn.value);if(!Ut(n,r,t))return Object.freeze({ok:!1,operation:"channel-members",reason:"stale"});const i=St(n,a.items,o);return Mr(n.conversationId,a.items),Pr(n.conversationId,a.items),en.value=wr(n.conversationId,Ir(Bn,n.conversationId,i)),or=a.nextCursor,tn.value=a.exhausted||void 0===a.nextCursor,ir=void 0,rn.value=!1,Object.freeze({ok:!0,operation:"channel-members"})}catch(e){if(!Ut(n,r,t))return Object.freeze({ok:!1,operation:"channel-members",reason:"stale"});const o=Me(e,"profile.channel-members.refresh",n);return ir="initial",on.value=o,rn.value=!1,Object.freeze({ok:!1,operation:"channel-members",reason:"failed",error:o})}}async function Lt(n){if(rn.value)return Object.freeze({ok:!1,operation:"channel-members",reason:"busy"});const r=he(n),t=vr,o=e.getGeneration();rn.value=!0,on.value=null;const a=++An;try{const n=await U(e,r,nn.value);return Ut(r,o,t)?(null!==n&&(en.value=wr(r.conversationId,Ir(Bn,r.conversationId,St(r,n.items,a))),or=n.nextCursor,tn.value=n.exhausted||void 0===n.nextCursor),await Kt(r,o,t)):Object.freeze({ok:!1,operation:"channel-members",reason:"stale"})}catch(e){if(!Ut(r,o,t))return Object.freeze({ok:!1,operation:"channel-members",reason:"stale"});const n=Me(e,"profile.channel-members.cache",r);return ir="initial",on.value=n,rn.value=!1,Object.freeze({ok:!1,operation:"channel-members",reason:"failed",error:n})}}async function At(n){if(rn.value)return Object.freeze({ok:!1,operation:"channel-members",reason:"busy"});if(tn.value||void 0===or)return Object.freeze({ok:!1,operation:"channel-members",reason:"exhausted"});const r=he(n),t=vr,o=e.getGeneration();rn.value=!0,on.value=null;const a=++An;try{const n=await B(e,r,{query:nn.value,cursor:or});if(!Ut(r,o,t))return Object.freeze({ok:!1,operation:"channel-members",reason:"stale"});const i=St(r,n.items,a);return Mr(r.conversationId,n.items),Pr(r.conversationId,n.items),en.value=wr(r.conversationId,Ir(Bn,r.conversationId,yt(en.value,i))),or=n.nextCursor,tn.value=n.exhausted||void 0===n.nextCursor,ir=void 0,rn.value=!1,Object.freeze({ok:!0,operation:"channel-members"})}catch(e){if(!Ut(r,o,t))return Object.freeze({ok:!1,operation:"channel-members",reason:"stale"});const n=Me(e,"profile.channel-members.page",r);return ir="more",on.value=n,rn.value=!1,Object.freeze({ok:!1,operation:"channel-members",reason:"failed",error:n})}}function Wt(e=null){Wn.clear(),void 0!==ar&&(clearTimeout(ar),ar=void 0),vr+=1,Ze.value=null===e?null:he(e),en.value=[],nn.value="",rn.value=!1,tn.value=!1,on.value=null,or=void 0,ir=void 0}function Jt(n,r={}){const t=he(n);if(!0===r.preserveExisting&&ye(Ze.value,t)){void 0!==ar&&(clearTimeout(ar),ar=void 0);const n=++vr,r=e.getGeneration();return on.value=null,Kt(t,r,n)}return Wt(t),Lt(t)}function Vt(n,r,t){return!bn&&e.getGeneration()===r&&dr===t&&ye(un.value,n)}async function Bt(n,r={}){if(fn.value)return Object.freeze({ok:!1,operation:"channel-mentions",reason:"busy"});const t=he(n),o=dr,a=e.getGeneration();fn.value=!0,pn.value=null;try{const n=!1===r.useCache?null:await D(e,t,dn.value||void 0);if(!Vt(t,a,o))return Object.freeze({ok:!1,operation:"channel-mentions",reason:"stale"});null!==n&&(vn.value=zr(t.conversationId,Ir(Bn,t.conversationId,n.items)),cr=n.nextPageToken,mn.value=n.exhausted||void 0===n.nextPageToken);const i=await V(e,t,dn.value||void 0);return Vt(t,a,o)?(vn.value=zr(t.conversationId,Ir(Bn,t.conversationId,i.items)),cr=i.nextPageToken,mn.value=i.exhausted||void 0===i.nextPageToken,sr=void 0,fn.value=!1,Object.freeze({ok:!0,operation:"channel-mentions"})):Object.freeze({ok:!1,operation:"channel-mentions",reason:"stale"})}catch(e){if(!Vt(t,a,o))return Object.freeze({ok:!1,operation:"channel-mentions",reason:"stale"});const n=Me(e,"profile.channel-mentions",t);return sr="initial",pn.value=n,fn.value=!1,Object.freeze({ok:!1,operation:"channel-mentions",reason:"failed",error:n})}}async function Ft(){const n=un.value,r=cr;if(null===n)return Object.freeze({ok:!1,operation:"channel-mentions",reason:"not-ready"});if(fn.value)return Object.freeze({ok:!1,operation:"channel-mentions",reason:"busy"});if(mn.value||void 0===r)return Object.freeze({ok:!1,operation:"channel-mentions",reason:"exhausted"});const t=dr,o=e.getGeneration();fn.value=!0,pn.value=null;try{const a=await E(e,dn.value,r);return Vt(n,o,t)?(vn.value=zr(n.conversationId,Ir(Bn,n.conversationId,yt(vn.value,a.items))),cr=a.nextPageToken,mn.value=a.exhausted||void 0===a.nextPageToken,sr=void 0,fn.value=!1,Object.freeze({ok:!0,operation:"channel-mentions"})):Object.freeze({ok:!1,operation:"channel-mentions",reason:"stale"})}catch(e){if(!Vt(n,o,t))return Object.freeze({ok:!1,operation:"channel-mentions",reason:"stale"});const r=Me(e,"profile.channel-mentions.page",n);return sr="more",pn.value=r,fn.value=!1,Object.freeze({ok:!1,operation:"channel-mentions",reason:"failed",error:r})}}function Qt(e=null,n=""){void 0!==lr&&(clearTimeout(lr),lr=void 0),dr+=1,un.value=null===e?null:he(e),vn.value=[],dn.value=n,fn.value=!1,mn.value=!1,pn.value=null,cr=void 0,sr=void 0}function Ht(e){ye(qe.value,e)&&(mr(e,{forceRefresh:!0}),ft(e,{forceRefresh:!0,preserveExisting:!0}))}function Yt(e){ye(Ze.value,e)&&Jt(e,{preserveExisting:!0})}async function Xt(e){if(!ye(We.value,e))return;(await mt(e,{forceRefresh:!0})).ok&&!0===Je.value?.canViewMembers&&Yt(e)}const Zt=e.subscribeProfileChange(()=>{Pe.value+=1}),eo=e.subscribeEvents(function(n){if("profile:updated"===n.type){if("user"===n.profileType)Te.value?.conversationId===n.id?Gr({conversationType:"direct",conversationId:n.id},{forceRefresh:!0}):fr(n.id,{forceRefresh:!0});else{const e={conversationType:"group",conversationId:n.id};if(qr(e)||Fr(e))return void Pn.add(e.conversationId);ye(qe.value,e)?dt(e,{includeMembers:!0,forceRefresh:!0}):mr(e,{forceRefresh:!0})}return}if("channel-profile:updated"===n.type){const e={conversationType:"channel",conversationId:n.channelId};return void(Lr(e)||tt(e)?Un.add(e.conversationId):Xt(e))}if("sync:complete"===n.type){for(const e of n.conversations)if("group"===e.conversationType){const n={conversationType:"group",conversationId:e.conversationId};ye(qe.value,n)&&Ht(n)}else if("channel"===e.conversationType){const n={conversationType:"channel",conversationId:e.conversationId};(ye(We.value,n)||ye(Ze.value,n)||ye(un.value,n))&&(hr(n),Yt(n))}return}if("message:received"!==n.type&&"message:updated"!==n.type)return;const r=n.message,t=r.body.system?.eventType;if(void 0===t)return;const o=r.body.system?.targetUserIds??[],a=e.getCredentials().userId;if("group"===r.conversationType&&me.has(t)){const i={conversationType:"group",conversationId:r.conversationId},c="live"===(n.source??"live"),l="group_member_renamed"===t&&o.some(e=>e.trim()===a)&&qr(i,"set-my-nickname"),s="group_member_renamed"===t&&!l;if("group_member_renamed"===t){l||te(e,r);for(const e of o)l&&e.trim()===a||jt(i,e)}if("group_member_joined"===t||"group_member_invited"===t)for(const e of o)kt(i,e);if(c&&("group_member_left"===t||"group_member_removed"===t))for(const e of o)It(i,e);return Fr(i)?void _n.add(i.conversationId):void(c&&!l&&(s?ye(qe.value,i)&&ft(i,{forceRefresh:!0,preserveExisting:!0}):Ht(i)))}const i="live"===(n.source??"live")||!0===n.channelLifecycleEffects;if("channel"!==r.conversationType||!pe.has(t)||!i)return;const c={conversationType:"channel",conversationId:r.conversationId};if(!("channel_member_renamed"===t&&o.some(e=>Lr(c,e.trim()===a?"set-my-nickname":"set-member-nickname",e)))){if("channel_member_renamed"===t)for(const e of o)Rt(c,e);if("channel_admin_added"===t||"channel_admin_removed"===t){const e="channel_admin_added"===t?"admin":"member";for(const n of o)Gt(c,n,e)}if("channel_owner_transferred"===t){for(const e of o)Gt(c,e,"owner");const e=r.body.system?.operatorId;void 0===e||o.includes(e)||Gt(c,e,"member")}if("channel_member_joined"===t||"channel_member_invited"===t)for(const e of o)$t(c,e);if("channel_member_left"===t||"channel_member_removed"===t)for(const e of o)xt(c,e);tt(c)?function(e,n,r,t){const o=qn.get(e.conversationId)??{allTargets:!1,affectsMentions:!1,resolvesProfiles:!1,userIds:/* @__PURE__ */new Set},a=t.map(e=>e.trim()).filter(Boolean);0===a.length&&(o.allTargets=!0);for(const e of a)o.userIds.add(e);o.affectsMentions||(o.affectsMentions=n),o.resolvesProfiles||(o.resolvesProfiles=r),qn.set(e.conversationId,o)}(c,be.has(t),"channel_member_left"!==t&&"channel_member_removed"!==t&&o.length>0,o):(be.has(t)?hr(c,o):br(c,o),"channel_member_left"!==t&&"channel_member_removed"!==t&&o.length>0&&pr(c,o,{forceRefresh:!0}),Yt(c))}});function no(){In["set-remark"]+=1,In.block+=1,In.report+=1,In["delete-friendship"]+=1,gn.direct+=1,Te.value=null,Ge.value=null,Re.value="unknown",xe.value=!1,$e.value=null,jn+=1,Ee.value=[],De.value=!1,Ue.value=null}function ro(){for(const e of Object.keys(kn))kn[e]+=1;for(const e of Object.keys(On))On[e]+=1;Mn.clear(),Cn.clear(),zn.clear(),Pn.clear(),_n.clear(),gn.group+=1,Kn+=1,qe.value=null,Ne.value=null,Se.value=[],Ke.value=!1,Le.value=!1,Ae.value=null}function to(){for(const e of Object.keys(xn))xn[e]+=1;En.clear(),$n.clear(),Gn.clear(),Tn.clear(),Un.clear(),qn.clear(),gn.channel+=1,We.value=null,Je.value=null,Ve.value=!1,Be.value=null,Ln+=1,an.value=null,cn.value=null,ln.value=!1,sn.value=null,Wt(),Qt()}function oo(){no(),In["search-user"]+=1,In["resolve-application-target"]+=1,In["request-friendship"]+=1,ro(),to(),Nn.clear();for(const e of["individual","group","channel"])Zn[e]+=1,Object.assign(Fe[e],Ce());er.clear(),ht(),Jn.clear(),Vn.clear(),Bn.clear(),Fn.clear(),Qn.clear(),Yn.clear(),hn.clear(),_e.value={},Hn.size>0&&(Hn.clear(),Xn.value+=1)}return{profileRevision:Pe,directRef:Te,directProfile:Ge,directRelationship:Re,directLoading:xe,directError:$e,directMutualGroups:Ee,directMutualGroupsLoading:De,directMutualGroupsError:Ue,groupRef:qe,groupProfile:Ne,groupMembers:Se,groupLoading:Ke,groupMembersLoading:Le,groupError:Ae,channelRef:We,channelProfile:Je,channelLoading:Ve,channelError:Be,directories:Fe,directorySearchKeyword:Qe,directorySearchResult:He,directorySearchLoading:Ye,directorySearchError:Xe,channelMembersRef:Ze,channelMembers:en,channelMemberQuery:nn,channelMembersLoading:rn,channelMembersExhausted:tn,channelMembersError:on,channelMemberDetailRef:an,channelMemberDetail:cn,channelMemberDetailLoading:ln,channelMemberDetailError:sn,channelMentionsRef:un,channelMentions:vn,channelMentionQuery:dn,channelMentionsLoading:fn,channelMentionsExhausted:mn,channelMentionsError:pn,resolveDisplayName:function(n,r,t){Pe.value;const o=e.getSenderProfileCache();if("channel"===n.conversationType){const a=ne(o,e.getChannelMemberProfiles(),n.conversationId,r),i=(t??"").trim();return a===r&&""!==i?i:a}return"group"===n.conversationType?re(o,e.getGroupMemberNames(),n.conversationId,r,t):"direct"===n.conversationType?re(o,e.getGroupMemberNames(),"",r,t):(t??"").trim()||r},resolveAvatarUrl:function(n,r){Pe.value;const t=e.getSenderProfileCache();return"channel"===n.conversationType?Z(t,e.getChannelMemberProfiles(),n.conversationId,r):ee(t,r)},resolvePublicNickname:function(n){return Pe.value,X(e.getSenderProfileCache(),n)},resolveSenderProfile:fr,resolveGroupMemberProfiles:mr,resolveChannelMemberProfiles:pr,invalidateChannelMemberProfiles:br,invalidateChannelMemberSet:hr,channelMentionRevision:function(e){return _e.value[e.conversationId]??0},loadDirect:Gr,resolveProfileAccess:async function(e,n,r={}){const t=n.trim();if(""===t)return Object.freeze({ok:!1,reason:"direct-profile",result:Object.freeze({ok:!1,operation:"direct-profile",reason:"not-found"})});const o=!0===r.forceRefresh;let a;if("channel"===e.conversationType){const n=await mt({conversationType:"channel",conversationId:e.conversationId},{forceRefresh:o});if(!n.ok)return Object.freeze({ok:!1,reason:"channel-profile",result:n});if(a=ye(We.value,e)?Je.value:null,"blocked"===$({conversation:e,relationship:"unknown",channelProfile:a}))return Object.freeze({ok:!0,destination:"blocked"})}const i=await Gr({conversationType:"direct",conversationId:t},{forceRefresh:o});return i.ok?Object.freeze({ok:!0,destination:$({conversation:e,relationship:Re.value,channelProfile:a})}):Object.freeze({ok:!1,reason:"direct-profile",result:i})},loadDirectMutualGroups:async function(n){const r=he(n),t=++jn,o=e.getGeneration();Te.value=r,De.value=!0,Ue.value=null;try{const n=await W(e,r.conversationId);return ye(Te.value,r)&&o===e.getGeneration()&&t===jn?(Ee.value=n,De.value=!1,Object.freeze({ok:!0,operation:"direct-mutual-groups"})):Object.freeze({ok:!1,operation:"direct-mutual-groups",reason:"stale"})}catch(n){if(!ye(Te.value,r)||o!==e.getGeneration()||t!==jn)return Object.freeze({ok:!1,operation:"direct-mutual-groups",reason:"stale"});const a=Me(n,"profile.direct-mutual-groups",r);return Ue.value=a,De.value=!1,Object.freeze({ok:!1,operation:"direct-mutual-groups",reason:"failed",error:a})}},setDirectContactRemark:async function(n,r){const t=he(n),o=Rr("set-remark"),a=await w(e,t,r);if(!xr("set-remark",o)||!ye(Te.value,t))return ge("set-remark",t);if(!a.ok)return a;const i=Ge.value,c=null!==i&&i.userId===t.conversationId;return c&&(Ge.value=Object.freeze({...i,...void 0===r.name?{}:{remark:r.name},...void 0===r.emails?{}:{remarkEmails:Object.freeze([...r.emails])},...void 0===r.phones?{}:{remarkPhones:Object.freeze(r.phones.map(e=>Object.freeze({countryCode:e.countryCode,mobile:e.mobile})))}})),Object.freeze({...a,projectionUpdated:c})},blockDirectContact:async function(n){const r=he(n),t=Rr("block"),o=await z(e,r);return xr("block",t)&&ye(Te.value,r)?o.ok?(Re.value="blocked",Object.freeze({...o,projectionUpdated:!0})):o:ge("block",r)},reportDirectContact:async function(n,r){const t=he(n),o=Rr("report"),a=await O(e,t,r);return xr("report",o)&&ye(Te.value,t)?a:ge("report",t)},deleteDirectFriendship:async function(n){const r=he(n),t=Rr("delete-friendship"),o=await k(e,r);return xr("delete-friendship",t)&&ye(Te.value,r)?o.ok?(Re.value="none",Object.freeze({...o,projectionUpdated:!0})):o:ge("delete-friendship",r)},searchDirectContact:async function(n){const r=Rr("search-user"),t=await I(e,n);return xr("search-user",r)?t:ge("search-user",t.conversation)},resolveDirectContactTarget:async function(n){const r=he(n),t=Rr("resolve-application-target"),o=await j(e,r);return xr("resolve-application-target",t)?o:ge("resolve-application-target",r)},requestDirectFriendship:async function(n,r){const t=he(n),o=Rr("request-friendship"),a=await g(e,t,r);return xr("request-friendship",o)?a:ge("request-friendship",t)},loadGroup:dt,updateGroupName:async function(n,r){const t=he(n),o=r.trim(),a=Er("update-name",t);try{const n=await x(e,t,o);if(!Ur("update-name",a)||!ye(qe.value,t))return je("update-name",t);if(!n.ok)return n;const r=null!==Ne.value;return r&&function(e,n){if(!ye(qe.value,e)||null===Ne.value)return;Ne.value=Object.freeze({...Ne.value,name:n})}(t,o),Object.freeze({...n,projectionUpdated:r})}finally{Dr(t,a)}},updateGroupAvatar:async function(n,r){const t=he(n),o=Er("update-avatar",t);try{const n=await R(e,t,r);if(!Ur("update-avatar",o)||!ye(qe.value,t))return je("update-avatar",t);if(!n.ok)return n;const a=null!==Ne.value&&void 0!==n.avatar;return a&&function(e,n){if(!ye(qe.value,e)||null===Ne.value)return;Ne.value=Object.freeze({...Ne.value,avatar:n})}(t,n.avatar),Object.freeze({...n,projectionUpdated:a})}finally{Dr(t,o)}},setMyGroupNickname:async function(n,r){const t=he(n),o=r.trim(),a=Er("set-my-nickname",t);try{const n=await G(e,t,o);if(!Ur("set-my-nickname",a)||!ye(qe.value,t))return je("set-my-nickname",t);if(!n.ok)return n;const r=Se.value.some(e=>e.userId===n.memberId);return gt(t,n.memberId,o),ae(e,t.conversationId,n.memberId,o),Object.freeze({...n,projectionUpdated:r})}finally{Dr(t,a)}},updateGroupVerification:async function(n,r,t){const o=he(n),a=4===r?t?.trim():void 0,i=Er("update-verification",o);try{const n=await T(e,o,r,a);if(!Ur("update-verification",i)||!ye(qe.value,o))return je("update-verification",o);if(!n.ok)return n;const t=null!==Ne.value;return t&&function(e,n,r){if(!ye(qe.value,e)||null===Ne.value)return;const{inviteCode:t,...o}=Ne.value;Ne.value=Object.freeze({...o,verifyWay:n,...void 0===r?{}:{inviteCode:r}})}(o,r,a),Object.freeze({...n,projectionUpdated:t})}finally{Dr(o,i)}},isGroupProfileWritePending:qr,inviteGroupMembers:async function(n,r){const t=he(n),o=JSON.stringify([...new Set(r.map(e=>e.trim()).filter(Boolean))].sort()),a=Jr("invite-members",t,o);try{const n=await _(e,t,r);if(!Br("invite-members",a))return we("invite-members",t);if(!n.ok)return"stale"!==n.outcome&&ye(qe.value,t)&&Hr(t),n;if(!ye(qe.value,t))return we("invite-members",t);const o=n.memberIds.some(e=>Ot(t,e));for(const e of n.memberIds)kt(t,e);return Qr(t),Object.freeze({...n,projectionUpdated:o,refreshRequired:!1})}finally{Vr(t,a)}},removeGroupMember:async function(n,r){const t=he(n),o=Jr("remove-member",t,r.trim());try{const n=await P(e,t,r);if(!Br("remove-member",o))return we("remove-member",t);if(!n.ok)return"stale"!==n.outcome&&ye(qe.value,t)&&Hr(t),n;if(!ye(qe.value,t))return we("remove-member",t);const a=Se.value.some(e=>e.userId===n.memberId);return It(t,n.memberId),Qr(t),Object.freeze({...n,projectionUpdated:a,refreshRequired:!1})}finally{Vr(t,o)}},transferGroupOwnership:async function(n,r){const t=he(n),o=Jr("transfer-ownership",t,"group-owner");try{const n=await C(e,t,r);if(!Br("transfer-ownership",o))return we("transfer-ownership",t);if(!n.ok)return"stale"!==n.outcome&&ye(qe.value,t)&&Hr(t),n;if(!ye(qe.value,t))return we("transfer-ownership",t);!function(e,n){const r=n.trim();""!==r&&Vn.set(e.conversationId,{ownerId:r,expiresAt:Date.now()+3e4})}(t,n.ownerId);const a=Ne.value,i=null!==a;return null!==a&&(Ne.value=Object.freeze({...a,ownerId:n.ownerId})),Hr(t),Object.freeze({...n,projectionUpdated:i,refreshRequired:!1})}finally{Vr(t,o)}},leaveGroup:async function(n,r={}){const t=he(n),o=Jr("leave",t,"membership");try{const n=await M(e,t,r);if(!n.ok&&!Br("leave",o))return we("leave",t);if(!n.ok)return"transfer-required"===n.outcome&&ye(qe.value,t)&&await dt(t,{forceRefresh:!0}),n;zt(t),oe(e,t.conversationId,{clearCachedNames:!0}),Vn.delete(t.conversationId);const a=ye(qe.value,t)&&(null!==Ne.value||Se.value.length>0);return ye(qe.value,t)&&(qe.value=null,Ne.value=null,Se.value=[],Ke.value=!1,Le.value=!1,Ae.value=null),Object.freeze({...n,projectionUpdated:a})}finally{Vr(t,o)}},isGroupMemberManagementPending:Fr,ensureGroupMembers:ft,loadChannel:mt,requestMembershipJoin:async function(n,r={}){const t="group"===n.conversationType?Object.freeze({conversationType:"group",conversationId:n.conversationId}):Object.freeze({conversationType:"channel",conversationId:n.conversationId}),o="group"===t.conversationType?"request-group-join":"request-channel-join",a=e.getProductClient();if(null===a)return Object.freeze({ok:!1,operation:o,reason:"not-ready"});const i=`${t.conversationType}:${t.conversationId}`,c=++Sn,l=e.getGeneration(),s=gn[t.conversationType],u="group"===t.conversationType?qe.value:We.value,v=null!==u&&ye(u,t);Nn.set(i,c);const d=()=>!bn&&e.getGeneration()===l&&gn[t.conversationType]===s&&Nn.get(i)===c&&(()=>{const e="group"===t.conversationType?qe.value:We.value;return null===u?null===e:null!==e&&ye(e,u)})();try{const e="group"===t.conversationType?void 0===r.inviteCode?void 0===r.remarks?await a.groups.requestJoin(t):await a.groups.requestJoin(t,{remarks:r.remarks}):await a.groups.joinByInviteCode(t,r.inviteCode):void 0===r.inviteCode?void 0===r.remarks?await a.channels.requestJoin(t):await a.channels.requestJoin(t,{remarks:r.remarks}):await a.channels.joinByInviteCode(t,r.inviteCode);if(!d())return Object.freeze({ok:!1,operation:o,reason:"stale"});if("joined"===e.outcome)if(v)"group"===t.conversationType?await dt(t,{forceRefresh:!0}):await mt(t,{forceRefresh:!0});else try{"group"===t.conversationType?await a.groups.getProfile(t,{forceRefresh:!0}):await a.channels.getProfile(t,{forceRefresh:!0})}catch(e){d()&&fe.record("error","pinia","profile","membership-join-profile-refresh-failed",()=>({conversation:t,data:{error:Me(e,o,t)}}))}return d()?Object.freeze({ok:!0,operation:o,outcome:e.outcome}):Object.freeze({ok:!1,operation:o,reason:"stale"})}catch(e){return d()?Object.freeze({ok:!1,operation:o,reason:"failed",error:Me(e,o,t)}):Object.freeze({ok:!1,operation:o,reason:"stale"})}finally{Nn.get(i)===c&&Nn.delete(i)}},updateChannelName:async function(n,r){const t=he(n);if(at(t))return ke("update-name",t);const o=r.trim(),a=Nr("update-name",t);try{const n=await y(e,t,o);if(!Kr(a)||!ye(We.value,t))return Ie("update-name",t);if(!n.ok)return n;const r=null!==Je.value;return r&&wt(t,o),Object.freeze({...n,projectionUpdated:r})}finally{Sr(a)}},updateChannelDescription:async function(n,r){const t=he(n);if(at(t))return ke("update-description",t);const o=r.trim(),a=Nr("update-description",t);try{const n=await h(e,t,o);if(!Kr(a)||!ye(We.value,t))return Ie("update-description",t);if(!n.ok)return n;const r=null!==Je.value;return r&&Mt(t,o),Object.freeze({...n,projectionUpdated:r})}finally{Sr(a)}},updateChannelAvatar:async function(n,r){const t=he(n);if(at(t))return ke("update-avatar",t);const o=Nr("update-avatar",t);try{const n=await b(e,t,r);if(!Kr(o)||!ye(We.value,t))return Ie("update-avatar",t);if(!n.ok)return n;const a=null!==Je.value;return a&&Ct(t,n.avatar),Object.freeze({...n,projectionUpdated:a})}finally{Sr(o)}},setMyChannelNickname:async function(n,r){const t=he(n),o=r.trim(),a=Nr("set-my-nickname",t,e.getCredentials().userId);try{const n=await p(e,t,o);return Kr(a)&&ye(We.value,t)?n.ok?(Tt(t,n.memberId,o,o),Ar(t,n.memberId,o),Object.freeze({...n,projectionUpdated:!0})):n:Ie("set-my-nickname",t)}finally{Sr(a)}},setChannelMemberNickname:async function(n,r,t){const o=he(n);if(at(o))return ke("set-member-nickname",o);const a=r.trim(),i=t.trim(),c=Nt(o,a),l=Nr("set-member-nickname",o,a);try{const n=await m(e,o,a,c?.role??"unknown",i);return Kr(l)&&ye(We.value,o)?n.ok?(Tt(o,n.memberId,i,i),Ar(o,n.memberId,i),Object.freeze({...n,projectionUpdated:!0})):n:Ie("set-member-nickname",o)}finally{Sr(l)}},updateChannelVerification:async function(n,r,t){const o=he(n);if(at(o))return ke("update-verification",o);const a=4===r?t?.trim():void 0,i=Nr("update-verification",o);try{const n=await f(e,o,r,a);if(!Kr(i)||!ye(We.value,o))return Ie("update-verification",o);if(!n.ok)return n;const t=null!==Je.value;return t&&Pt(o,r,a),Object.freeze({...n,projectionUpdated:t})}finally{Sr(i)}},setChannelAllMuted:async function(n,r){const t=he(n);if(at(t))return ke("set-all-muted",t);const o=Nr("set-all-muted",t);try{const n=await d(e,t,r);if(!Kr(o)||!ye(We.value,t))return Ie("set-all-muted",t);if(!n.ok)return n;const a=null!==Je.value;return a&&_t(t,{allMembersMuted:r}),Object.freeze({...n,projectionUpdated:a})}finally{Sr(o)}},setChannelMemberPrivateChatDisabled:async function(n,r){const t=he(n);if(at(t))return ke("set-member-private-chat-disabled",t);const o=Nr("set-member-private-chat-disabled",t);try{const n=await v(e,t,r);if(!Kr(o)||!ye(We.value,t))return Ie("set-member-private-chat-disabled",t);if(!n.ok)return n;const a=null!==Je.value;return a&&_t(t,{memberPrivateChatDisabled:r}),Object.freeze({...n,projectionUpdated:a})}finally{Sr(o)}},isChannelProfileWritePending:Lr,inviteChannelMembers:async function(n,r){const t=he(n);if(at(t))return ze("invite-members",t);const o=JSON.stringify([...new Set(r.map(e=>e.trim()).filter(Boolean))].sort()),a=et("invite-members",t,o);try{const n=await u(e,t,r);if(!rt("invite-members",a))return Oe("invite-members",t);if(!n.ok)return"stale"!==n.outcome&&ct(t),n;if(!ye(We.value,t))return Oe("invite-members",t);const o=n.memberIds.some(e=>Et(t,e));for(const e of n.memberIds)$t(t,e);return hr(t,n.memberIds),st(t,n.memberIds),lt(t),Object.freeze({...n,projectionUpdated:o,refreshRequired:!1})}finally{nt(a)}},removeChannelMember:async function(n,r){const t=he(n);if(at(t))return ze("remove-member",t);const o=ot(t,r),a=et("remove-member",t,r.trim());try{const n=await s(e,t,o??{userId:r,role:"unknown"});if(!rt("remove-member",a))return Oe("remove-member",t);if(!n.ok)return"stale"!==n.outcome&&ct(t),n;if(!ye(We.value,t))return Oe("remove-member",t);const i=function(n,r){const t=e.getChannelMemberProfiles(),o=t[n.conversationId];if(void 0===o||void 0===o[r])return!1;const a={...o};return delete a[r],e.setChannelMemberProfiles({...t,[n.conversationId]:a}),!0}(t,n.memberId),c=en.value.some(e=>e.userId===n.memberId)||vn.value.some(e=>e.userId===n.memberId)||i;return xt(t,n.memberId),hr(t,[n.memberId]),st(t,[n.memberId]),lt(t),Object.freeze({...n,projectionUpdated:c,refreshRequired:!1})}finally{nt(a)}},setChannelMemberAdmin:async function(n,r,t){const o=he(n),a=ot(o,r),i=t?"add-admin":"remove-admin";if(at(o))return ze(i,o);const s=et(i,o,r.trim());try{const n=t?await c(e,o,a??{userId:r,role:"unknown"}):await l(e,o,a??{userId:r,role:"unknown"});if(!rt(i,s))return Oe(i,o);if(!n.ok)return"stale"!==n.outcome&&ct(o),n;if(!ye(We.value,o))return Oe(i,o);const u=t?"admin":"member",v=a?.role!==u;return Gt(o,n.memberId,u),lt(o),Object.freeze({...n,projectionUpdated:v,refreshRequired:!1})}finally{nt(s)}},transferChannelOwnership:async function(n,r){const t=he(n);if(at(t))return ze("transfer-ownership",t);const o=ot(t,r),a=et("transfer-ownership",t,"channel-owner");try{const n=await i(e,t,o??{userId:r,role:"unknown"});if(!rt("transfer-ownership",a))return Oe("transfer-ownership",t);if(!n.ok)return"stale"!==n.outcome&&ct(t),n;if(!ye(We.value,t))return Oe("transfer-ownership",t);!function(e,n){const r=n.trim();""!==r&&Fn.set(e.conversationId,{ownerId:r})}(t,n.ownerId);const c=function(e){return!(!ye(We.value,e)||null===Je.value||(Je.value=it(e,Je.value),0))}(t);return Gt(t,n.ownerId,"owner"),Gt(t,e.getCredentials().userId,"member"),lt(t),Object.freeze({...n,projectionUpdated:c,refreshRequired:!1})}finally{nt(a)}},leaveChannel:async function(n,r={}){const t=he(n),o=void 0===r.newOwnerId?void 0:ot(t,r.newOwnerId)??{userId:r.newOwnerId,role:"unknown"},i=et("leave",t,"membership");try{const n=await a(e,t,o);if(!n.ok&&!rt("leave",i))return Oe("leave",t);if(!n.ok)return n;const r=ye(We.value,t)&&(null!==Je.value||en.value.length>0||vn.value.length>0);return Dt(t),Fn.delete(t.conversationId),vt(t),ye(We.value,t)&&to(),Object.freeze({...n,projectionUpdated:r})}finally{nt(i)}},dismissChannel:async function(n){const r=he(n);if(at(r))return ze("dismiss",r);const t=et("dismiss",r,"membership");try{const n=await o(e,r);if(!n.ok&&!rt("dismiss",t))return Oe("dismiss",r);if(!n.ok)return n;const a=ye(We.value,r)&&(null!==Je.value||en.value.length>0||vn.value.length>0);return Dt(r),Fn.delete(r.conversationId),vt(r),ye(We.value,r)&&to(),Object.freeze({...n,projectionUpdated:a})}finally{nt(t)}},isChannelMemberManagementPending:tt,loadDirectory:function(e,n=!1){return pt(e,n,!1)},refreshDirectory:function(e){return pt(e,!1,!0)},searchDirectory:function(n,r={}){const t=n.trim();if(""===t)return ht(),Promise.resolve(Object.freeze({ok:!1,operation:"directory-search",reason:"not-ready"}));if(!r.immediate&&rr?.keyword===t)return rr.promise;if(tr?.keyword===t)return tr.promise;if(!r.immediate&&Qe.value===t&&He.value?.keyword===t.toLocaleLowerCase()&&null===Xe.value)return Promise.resolve(Object.freeze({ok:!0,operation:"directory-search"}));const o=++ur;bt(),Qe.value=t,He.value=null,Ye.value=!0,Xe.value=null;const a=()=>{const n=async function(n,r){const t=e.getGeneration();try{const o=await Y(e,n);return bn||t!==e.getGeneration()||r!==ur?Object.freeze({ok:!1,operation:"directory-search",reason:"stale"}):(He.value=o,Ye.value=!1,Object.freeze({ok:!0,operation:"directory-search"}))}catch(n){if(bn||t!==e.getGeneration()||r!==ur)return Object.freeze({ok:!1,operation:"directory-search",reason:"stale"});const o=Me(n,"directory.search");return Xe.value=o,Ye.value=!1,Object.freeze({ok:!1,operation:"directory-search",reason:"failed",error:o})}}(t,o);return tr={keyword:t,promise:n},n.finally(()=>{tr?.promise===n&&(tr=void 0)}),n};if(r.immediate)return a();let i;const c=new Promise(e=>{i=e});return rr={keyword:t,promise:c,resolve:i},nr=setTimeout(()=>{nr=void 0,rr=void 0,a().then(i)},300),c},clearDirectorySearch:ht,openChannelMembers:Jt,getChannelMember:Nt,loadChannelMember:async function(n,r,t={forceRefresh:!0}){const o=he(n),a=r.trim();if(""===a)return Object.freeze({ok:!1,operation:"channel-member",reason:"not-found"});const i=++Ln,c=++An,l=e.getGeneration();an.value=Object.freeze({...o,userId:a}),cn.value=null,ln.value=!0,sn.value=null;try{let n=await q(e,o,a,{forceRefresh:!1!==t.forceRefresh});if(!qt(o,a,l,i))return Object.freeze({ok:!1,operation:"channel-member",reason:"stale"});if(ye(Ze.value,o)&&((Wn.get(a)??0)>c?n=Nt(o,a)??null:Wn.set(a,c)),null===n||Et(o,a))return ye(Ze.value,o)&&(en.value=Object.freeze(en.value.filter(e=>e.userId!==a))),Object.freeze({ok:!1,operation:"channel-member",reason:"not-found"});cn.value=wr(o.conversationId,[n])[0]??null;const r=cn.value;return null!==r&&ye(Ze.value,o)&&(en.value=Object.freeze(en.value.map(e=>e.userId===a?r:e))),Object.freeze({ok:!0,operation:"channel-member"})}catch(e){if(!qt(o,a,l,i))return Object.freeze({ok:!1,operation:"channel-member",reason:"stale"});const n=Me(e,"profile.channel-member",o);return sn.value=n,Object.freeze({ok:!1,operation:"channel-member",reason:"failed",error:n})}finally{qt(o,a,l,i)&&(ln.value=!1)}},setChannelMemberQuery:function(n){const r=Ze.value;if(null===r)return;nn.value=n,vr+=1,Wn.clear(),en.value=[],tn.value=!1,on.value=null,or=void 0,rn.value=!1,void 0!==ar&&clearTimeout(ar);const t=vr,o=e.getGeneration(),a=++An;(async()=>{try{const n=await U(e,r,nn.value);if(!Ut(r,o,t))return;null!==n&&(en.value=wr(r.conversationId,Ir(Bn,r.conversationId,St(r,n.items,a))),or=n.nextCursor,tn.value=n.exhausted||void 0===n.nextCursor)}catch(e){if(!Ut(r,o,t))return;on.value=Me(e,"profile.channel-members.cache",r)}Ut(r,o,t)&&(ar=setTimeout(()=>{ar=void 0,Kt(r,o,t)},300))})()},loadMoreChannelMembers:function(){const e=Ze.value;return null===e?Promise.resolve(Object.freeze({ok:!1,operation:"channel-members",reason:"not-ready"})):At(e)},retryChannelMembers:function(){const e=Ze.value;return null===e||void 0===ir?Promise.resolve(Object.freeze({ok:!1,operation:"channel-members",reason:"not-ready"})):"more"===ir?At(e):Lt(e)},resetChannelMembers:Wt,updateGroupMemberNicknameProjection:gt,clearGroupMemberNicknameProjection:jt,removeGroupMemberProjection:It,restoreGroupMemberProjection:kt,isGroupMemberRemovedProjection:Ot,clearGroupMemberProjections:zt,updateChannelNameProjection:wt,updateChannelDescriptionProjection:Mt,updateChannelAvatarProjection:Ct,updateChannelVerificationProjection:Pt,updateChannelManagementProjection:_t,updateChannelMemberDisplayNameProjection:Tt,updateChannelMemberRoleProjection:Gt,clearChannelMemberDisplayNameProjection:Rt,channelMemberNicknameProjection:function(e,n){return Xn.value,Hn.get(e.conversationId)?.get(n.trim())?.nickname},removeChannelMemberProjection:xt,restoreChannelMemberProjection:$t,isChannelMemberRemovedProjection:Et,clearChannelMemberProjections:Dt,openChannelMentions:function(e,n=""){return ye(un.value,e)&&dn.value===n?(void 0!==lr&&(clearTimeout(lr),lr=void 0),dr+=1,fn.value=!1,pn.value=null,cr=void 0,sr=void 0,Bt(e,{useCache:!1})):(Qt(e,n),Bt(e))},setChannelMentionQuery:function(n){const r=un.value;if(null===r)return;Qt(r,n);const t=dr,o=e.getGeneration();(async()=>{try{const a=await D(e,r,n||void 0);if(!Vt(r,o,t))return;null!==a&&(vn.value=zr(r.conversationId,Ir(Bn,r.conversationId,a.items)),cr=a.nextPageToken,mn.value=a.exhausted||void 0===a.nextPageToken)}catch(e){if(!Vt(r,o,t))return;pn.value=Me(e,"profile.channel-mentions.cache",r)}Vt(r,o,t)&&(lr=setTimeout(()=>{lr=void 0,Bt(r)},300))})()},loadMoreChannelMentions:Ft,refreshChannelMentions:function(){const e=un.value;return null===e?Promise.resolve(Object.freeze({ok:!1,operation:"channel-mentions",reason:"not-ready"})):(void 0!==lr&&(clearTimeout(lr),lr=void 0),dr+=1,fn.value=!1,pn.value=null,cr=void 0,mn.value=!1,sr=void 0,Bt(e,{useCache:!1}))},retryChannelMentions:function(){const e=un.value;return null===e||void 0===sr?Promise.resolve(Object.freeze({ok:!1,operation:"channel-mentions",reason:"not-ready"})):"more"===sr?Ft():Bt(e)},resetChannelMentions:Qt,resetDirect:no,resetGroup:ro,resetChannel:to,reset:oo,dispose:function(){bn||(oo(),bn=!0,Mn.clear(),Cn.clear(),zn.clear(),Gn.clear(),Tn.clear(),En.clear(),$n.clear(),Zt(),eo(),fe.record("debug","pinia","profile","profile-directory-disposed"))}}})}const _e=/* @__PURE__ */new WeakMap,Te=/* @__PURE__ */new WeakMap;function Ge(e=fe()){ve(e);let n=_e.get(e);void 0===n&&(n=Pe(e),_e.set(e,n));const r=n(e);return Te.get(e)!==r&&(Te.set(e,r),de(e,()=>{r.dispose(),r.$dispose(),Te.get(e)===r&&Te.delete(e)})),r}export{Ge as useImProfileDirectoryStore};
|
|
1
|
+
import{defineStore as e}from"pinia";import{ref as n,shallowRef as r,reactive as t}from"vue";import{executeDismissChannel as o,executeLeaveChannel as a,executeTransferChannelOwnership as i,executeAddChannelAdmin as c,executeRemoveChannelAdmin as l,executeRemoveChannelMember as s,executeInviteChannelMembers as u}from"../services/channel-member-management.service.js";import{executeSetChannelMemberPrivateChatDisabled as v,executeSetChannelAllMuted as d,executeUpdateChannelVerification as f,executeSetChannelMemberNickname as m,executeSetMyChannelNickname as p,executeUpdateChannelAvatar as b,executeUpdateChannelDescription as h,executeUpdateChannelName as y}from"../services/channel-profile-management.service.js";import{clearConversationListProfilePreparations as g,resolveConversationListProfiles as j}from"../services/conversation-list-profiles.js";import{executeRequestDirectFriendship as I,executeResolveDirectContactTarget as k,executeSearchDirectContact as O,executeDeleteDirectFriendship as z,executeReportDirectContact as w,executeBlockDirectContact as M,executeSetDirectContactRemark as C}from"../services/direct-contact-management.service.js";import{executeLeaveGroup as P,executeTransferGroupOwnership as _,executeRemoveGroupMember as T,executeInviteGroupMembers as G}from"../services/group-member-management.service.js";import{executeUpdateGroupVerification as R,executeSetMyGroupNickname as x,executeUpdateGroupAvatar as $,executeUpdateGroupName as E}from"../services/group-profile-management.service.js";import{resolveImProfileAccessDestination as D}from"../services/profile-access.service.js";import{readChannelMentionNextPage as U,peekChannelMentionPage as q,peekChannelMemberPage as N,readChannelMember as S,readChannelProfile as K,peekGroupMembers as L,readGroupMembers as A,peekGroupProfile as W,readGroupProfile as J,readMutualGroups as V,readDirectProfile as B,refreshChannelMentionPage as F,readChannelMemberPage as Q,refreshChannelMemberPage as H,readDirectoryPage as Y,mergeDirectoryItems as X,searchCompleteDirectory as Z}from"../services/profile-directory.service.js";import{resolvePublicNickname as ee,resolveChannelMemberAvatarUrl as ne,resolveSenderAvatarUrl as re,resolveChannelMemberDisplayName as te,resolveMemberDisplayName as oe}from"../services/profile-display.js";import{applyGroupMemberRename as ae,clearGroupMemberNicknameProjection as ie,applyGroupMemberNickname as ce,beginSenderProfileUpdate as le,resolveChannelMembers as se,resolveGroupMembers as ue,resolveSenderName as ve,applyMemberNames as de}from"../services/profile.service.js";import{getImChatKitContext as fe,registerImChatKitStoreDisposer as me,resolveImChatKitPinia as pe}from"./context.js";const be=/* @__PURE__ */new Set(["group_member_joined","group_member_invited","group_member_left","group_member_removed","group_member_renamed"]),he=/* @__PURE__ */new Set(["channel_member_joined","channel_member_invited","channel_member_left","channel_member_removed","channel_owner_transferred","channel_admin_added","channel_admin_removed","channel_member_renamed"]),ye=/* @__PURE__ */new Set(["channel_member_joined","channel_member_invited","channel_member_left","channel_member_removed","channel_member_renamed"]);function ge(e){return Object.freeze({conversationType:e.conversationType,conversationId:e.conversationId})}function je(e,n){return null!==e&&e.conversationType===n.conversationType&&e.conversationId===n.conversationId}function Ie(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"stale",stale:!0,projectionUpdated:!1,refreshRequired:!1})}function ke(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"stale",stale:!0,projectionUpdated:!1,refreshRequired:!1})}function Oe(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"stale",stale:!0,projectionUpdated:!1,refreshRequired:!1})}function ze(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"not-allowed",stale:!1,projectionUpdated:!1,refreshRequired:!1})}function we(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"stale",stale:!0,projectionUpdated:!1,refreshRequired:!1})}function Me(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"not-allowed",stale:!1,projectionUpdated:!1,refreshRequired:!1})}function Ce(e,n){return Object.freeze({ok:!1,operation:e,conversation:n,outcome:"stale",stale:!0,projectionUpdated:!1,refreshRequired:!1})}function Pe(e,n,r){const t="object"==typeof e&&null!==e?e:null;return null!==t&&"string"==typeof t.code&&("auth"===(o=t.category)||"network"===o||"protocol"===o||"permission"===o||"validation"===o||"state"===o||"unsupported"===o||"contract"===o)?Object.freeze({code:t.code,category:t.category,operation:n,retryable:!0===t.retryable,...void 0===r?{}:{conversation:ge(r)}}):Object.freeze({code:"IM_CHAT_KIT_PROFILE_DIRECTORY_OPERATION_FAILED",category:"state",operation:n,retryable:!1,...void 0===r?{}:{conversation:ge(r)}});var o}function _e(){return{items:[],loading:!1,loaded:!1,exhausted:!1,error:null}}function Te(me){return e("k2-im-profile-directory",()=>{const e=fe(me).runtime,pe=e.getDiagnostics(),Te=n(0),Ge=n({}),Re=r(null),xe=r(null),$e=n("unknown"),Ee=n(!1),De=r(null),Ue=r([]),qe=n(!1),Ne=r(null),Se=r(null),Ke=r(null),Le=r([]),Ae=n(!1),We=n(!1),Je=r(null),Ve=r(null),Be=r(null),Fe=n(!1),Qe=r(null),He=t({individual:{items:[],loading:!1,loaded:!1,exhausted:!1,error:null},group:{items:[],loading:!1,loaded:!1,exhausted:!1,error:null},channel:{items:[],loading:!1,loaded:!1,exhausted:!1,error:null}}),Ye=n(""),Xe=r(null),Ze=n(!1),en=r(null),nn=r(null),rn=r([]),tn=n(""),on=n(!1),an=n(!1),cn=r(null),ln=r(null),sn=r(null),un=n(!1),vn=r(null),dn=r(null),fn=r([]),mn=n(""),pn=n(!1),bn=n(!1),hn=r(null);let yn=!1;const gn=/* @__PURE__ */new Map,jn={direct:0,group:0,channel:0},In={direct:0,group:0,channel:0};let kn=0;const On={"set-remark":0,block:0,report:0,"delete-friendship":0,"search-user":0,"resolve-application-target":0,"request-friendship":0},zn={"update-name":0,"update-avatar":0,"set-my-nickname":0,"update-verification":0},wn={"invite-members":0,"remove-member":0,"transfer-ownership":0,leave:0},Mn=/* @__PURE__ */new Map;let Cn=0;const Pn=/* @__PURE__ */new Map,_n=/* @__PURE__ */new Map,Tn=/* @__PURE__ */new Set,Gn=/* @__PURE__ */new Set,Rn=/* @__PURE__ */new Map,xn=/* @__PURE__ */new Map;let $n=0;const En={"invite-members":0,"remove-member":0,"add-admin":0,"remove-admin":0,"transfer-ownership":0,leave:0,dismiss:0},Dn=/* @__PURE__ */new Map,Un=/* @__PURE__ */new Map;let qn=0;const Nn=/* @__PURE__ */new Set,Sn=/* @__PURE__ */new Map,Kn=/* @__PURE__ */new Map;let Ln=0,An=0,Wn=0,Jn=0;const Vn=/* @__PURE__ */new Map,Bn=/* @__PURE__ */new Map,Fn=/* @__PURE__ */new Map,Qn=/* @__PURE__ */new Map,Hn=/* @__PURE__ */new Map,Yn=/* @__PURE__ */new Map,Xn=/* @__PURE__ */new Map,Zn=/* @__PURE__ */new Map,er=n(0),nr={individual:0,group:0,channel:0},rr=/* @__PURE__ */new Map;let tr,or,ar,ir,cr,lr,sr,ur,vr,dr=0,fr=0,mr=0;function pr(n,r){return ve(e,n,r)}function br(n,r){return ue(e,n.conversationId,r)}function hr(n,r,t){const o=e.getGeneration(),a=gn.get(n.conversationId)??0;return se(e,n.conversationId,r,{...!0===t?.forceRefresh?{forceRefresh:!0}:{},isCurrent:()=>!yn&&e.getGeneration()===o&&(gn.get(n.conversationId)??0)===a&&!1!==t?.isCurrent?.()})}function yr(n,r){const t=n.conversationId.trim();if(""===t)return;gn.set(t,(gn.get(t)??0)+1);const o={...e.getChannelMemberProfiles()},a=[...new Set((r??[]).map(e=>e.trim()).filter(Boolean))];if(0===a.length)delete o[t];else{const e={...o[t]??{}};for(const n of a)delete e[n];0===Object.keys(e).length?delete o[t]:o[t]=e}e.setChannelMemberProfiles(o)}function gr(e,n){const r=e.conversationId.trim();""!==r&&(yr(e,n),Ge.value={...Ge.value,[r]:(Ge.value[r]??0)+1})}function jr(e,n,r){const t=r.trim();if(""===t)return;const o=e.get(n)??/* @__PURE__ */new Set;o.add(t),e.set(n,o)}function Ir(e,n,r){const t=e.get(n);void 0!==t&&(t.delete(r.trim()),0===t.size&&e.delete(n))}function kr(e,n,r){const t=r.trim();return""!==t&&!0===e.get(n)?.has(t)}function Or(e,n,r){const t=e.get(n);return void 0===t||0===t.size?r:r.filter(e=>!t.has(e.userId))}function zr(e,n,r={}){const t=Yn.get(e);if(void 0===t||0===t.size)return n;const o=new Set(n.map(e=>e.userId)),a=new Map(t),i=n.map(e=>{const n=t.get(e.userId);return void 0===n?e:(!0===r.reconcile&&n===e.nickname&&a.delete(e.userId),Object.freeze({...e,nickname:n}))});if(!0===r.reconcile)for(const e of a.keys())o.has(e)||a.delete(e);return 0===a.size?Yn.delete(e):Yn.set(e,a),Object.freeze(i)}function wr(e,n){const r=Yn.get(e);void 0!==r&&(r.delete(n.trim()),0===r.size&&Yn.delete(e))}function Mr(e,n){const r=Xn.get(e);return void 0===r||0===r.size?n:Object.freeze(n.map(e=>{const n=r.get(e.userId);return void 0===n?e:Object.freeze({...e,displayName:n.displayName})}))}function Cr(e,n){const r=Xn.get(e),t=Zn.get(e),o=Ve.value?.conversationId===e?Be.value?.ownerId:Hn.get(e)?.ownerId;return void 0!==r&&0!==r.size||void 0!==t&&0!==t.size||void 0!==o?Object.freeze(n.map(e=>{const n=r?.get(e.userId),a=t?.get(e.userId),i=void 0!==o&&e.userId===o;if(void 0===n&&void 0===a&&!i)return e;const{nickname:c,...l}=e;return Object.freeze({...l,...void 0===n?void 0===e.nickname?{}:{nickname:e.nickname}:""===n.nickname?{}:{nickname:n.nickname},displayName:n?.displayName??e.displayName,role:i?"owner":a??e.role})})):n}function Pr(e,n){const r=Xn.get(e);if(void 0===r)return;let t=!1;for(const e of n)r.get(e.userId)?.nickname===(e.nickname??"")&&(r.delete(e.userId),t=!0);0===r.size&&Xn.delete(e),t&&(er.value+=1)}function _r(e,n){const r=Xn.get(e);void 0!==r&&r.delete(n.trim())&&(0===r.size&&Xn.delete(e),er.value+=1)}function Tr(e,n){const r=Zn.get(e);if(void 0!==r){for(const e of n)r.get(e.userId)===e.role&&r.delete(e.userId);0===r.size&&Zn.delete(e)}}function Gr(e,n){const r=Zn.get(e);void 0!==r&&(r.delete(n.trim()),0===r.size&&Zn.delete(e))}function Rr(n,r,t,o){const a="direct"===n.conversationType?Re.value:"group"===n.conversationType?Se.value:Ve.value;return!yn&&e.getGeneration()===r&&jn[n.conversationType]===t&&In[n.conversationType]===o&&je(a,n)}async function xr(n,r={}){const t=ge(n),o=++jn.direct,a=In.direct,i=e.getGeneration(),c=!je(Re.value,t);Re.value=t,c&&(xe.value=null,$e.value="unknown"),Ee.value=!0,De.value=null;const l=le(e,t.conversationId,!0===r.forceRefresh);try{const n=await B(e,t,r);return Rr(t,i,o,a)?l.isCurrent()?(null!==n.profile&&l.commit({remark:(n.profile.remark??"").trim(),nickname:n.profile.nickname.trim(),avatar:(n.profile.avatar??"").trim()}),xe.value=n.profile,$e.value=n.relationship,Ee.value=!1,null===n.profile?Object.freeze({ok:!1,operation:"direct-profile",reason:"not-found"}):Object.freeze({ok:!0,operation:"direct-profile"})):(Ee.value=!1,Object.freeze({ok:!1,operation:"direct-profile",reason:"stale"})):Object.freeze({ok:!1,operation:"direct-profile",reason:"stale"})}catch(e){if(!Rr(t,i,o,a))return Object.freeze({ok:!1,operation:"direct-profile",reason:"stale"});const n=Pe(e,"profile.direct",t);return De.value=n,Ee.value=!1,Object.freeze({ok:!1,operation:"direct-profile",reason:"failed",error:n})}finally{l.finish()}}function $r(e){return On[e]+=1,On[e]}function Er(e,n){return!yn&&On[e]===n}function Dr(e,n,r,t){return`${r}:${t}:${e.conversationType}:${e.conversationId}:${n}`}function Ur(n,r){zn[n]+=1;const t=e.getGeneration(),o=In.group,a=Dr(r,n,t,o);return Pn.set(a,(Pn.get(a)??0)+1),Object.freeze({epoch:zn[n],generation:t,key:a,resetEpoch:o})}function qr(e,n){const r=Pn.get(n.key)??0;r<=1?Pn.delete(n.key):Pn.set(n.key,r-1),Zr(e)}function Nr(n,r){return!yn&&e.getGeneration()===r.generation&&In.group===r.resetEpoch&&zn[n]===r.epoch}function Sr(n,r){const t=e.getGeneration(),o=In.group;return void 0!==r?(Pn.get(Dr(n,r,t,o))??0)>0:Object.keys(zn).some(e=>(Pn.get(Dr(n,e,t,o))??0)>0)}function Kr(n,r,t="profile"){const o=e.getGeneration(),a=In.channel,i=function(e,n,r,t,o){return`${t}:${o}:${e.conversationType}:${e.conversationId}:${n}:${r}`}(r,n,t,o,a),c=++$n;return Rn.set(i,c),xn.set(i,(xn.get(i)??0)+1),Object.freeze({conversation:ge(r),epoch:c,generation:o,resetEpoch:a,key:i})}function Lr(e){const n=xn.get(e.key)??0;n<=1?xn.delete(e.key):xn.set(e.key,n-1),Rn.get(e.key)===e.epoch&&Rn.delete(e.key),dt(e.conversation)}function Ar(n){return!yn&&e.getGeneration()===n.generation&&In.channel===n.resetEpoch&&Rn.get(n.key)===n.epoch}function Wr(n,r,t){const o=`${e.getGeneration()}:${In.channel}:${n.conversationType}:${n.conversationId}:`;for(const[e,n]of xn){const a=void 0===r?o:`${o}${r}:`;if(n>0&&e.startsWith(a)&&(void 0===t||e===`${a}${t.trim()}`))return!0}return!1}function Jr(n,r,t){const o=e.getChannelMemberProfiles(),a=o[n.conversationId],i=a?.[r];void 0!==a&&void 0!==i&&e.setChannelMemberProfiles({...o,[n.conversationId]:{...a,[r]:{...i,displayName:t}}})}function Vr(e,n,r,t){return`${r}:${t}:${e.conversationType}:${e.conversationId}:${n}`}function Br(n,r,t){const o=e.getGeneration(),a=wn[n],i=Vr(r,n,o,a),c=function(e,n,r,t,o){return`${t}:${o}:${e.conversationType}:${e.conversationId}:${n}:${r}`}(r,n,t,o,a),l=++Cn;return Mn.set(c,l),_n.set(i,(_n.get(i)??0)+1),Object.freeze({actionEpoch:l,actionKey:c,generation:o,resetEpoch:a,writeKey:i})}function Fr(e,n){const r=_n.get(n.writeKey)??0;r<=1?_n.delete(n.writeKey):_n.set(n.writeKey,r-1),Mn.get(n.actionKey)===n.actionEpoch&&Mn.delete(n.actionKey),Zr(e)}function Qr(n,r){return!yn&&e.getGeneration()===r.generation&&wn[n]===r.resetEpoch&&Mn.get(r.actionKey)===r.actionEpoch}function Hr(n,r){const t=e.getGeneration();return void 0!==r?(_n.get(Vr(n,r,t,wn[r]))??0)>0:Object.keys(wn).some(e=>(_n.get(Vr(n,e,t,wn[e]))??0)>0)}function Yr(e){je(Se.value,e)&&pt(e,{forceRefresh:!0,preserveExisting:!0}).then(n=>{n.ok&&je(Se.value,e)&&et(e)})}function Xr(e){je(Se.value,e)&&mt(e,{forceRefresh:!0})}function Zr(e){Sr(e)||Hr(e)||(Tn.delete(e.conversationId)&&Xr(e),Gn.delete(e.conversationId)&&Xt(e))}function et(n){je(Se.value,n)&&de(e,n.conversationId,Le.value.map(e=>({userId:e.userId,nickName:e.nickname,...void 0===e.joinType?{}:{joinType:e.joinType}})))}function nt(e,n,r,t){return`${r}:${t}:${e.conversationType}:${e.conversationId}:${n}`}function rt(n,r,t){const o=e.getGeneration(),a=En[n],i=function(e,n,r,t,o){return`${t}:${o}:${e.conversationType}:${e.conversationId}:${n}:${r}`}(r,n,t,o,a),c=nt(r,n,o,a),l=++qn;return Dn.set(i,l),Un.set(c,(Un.get(c)??0)+1),Object.freeze({actionEpoch:l,actionKey:i,conversation:ge(r),writeKey:c,generation:o,resetEpoch:a})}function tt(e){const n=Un.get(e.writeKey)??0;n<=1?Un.delete(e.writeKey):Un.set(e.writeKey,n-1),Dn.get(e.actionKey)===e.actionEpoch&&Dn.delete(e.actionKey),dt(e.conversation)}function ot(n,r){return!yn&&e.getGeneration()===r.generation&&En[n]===r.resetEpoch&&Dn.get(r.actionKey)===r.actionEpoch}function at(n,r){const t=e.getGeneration();return(void 0===r?Object.keys(En):[r]).some(e=>(Un.get(nt(n,e,t,En[e]))??0)>0)}function it(e,n){const r=n.trim();if(""===r)return;const t=Kt(e,r);return void 0===t?void 0:Object.freeze({userId:r,role:t.role})}function ct(n){const r=Hn.get(n.conversationId);return void 0!==r&&r.ownerId!==e.getCredentials().userId}function lt(n,r){if(null===r)return Hn.delete(n.conversationId),null;const t=Hn.get(n.conversationId);return void 0===t?r:r.ownerId===t.ownerId&&"owner"!==r.role||r.ownerId!==e.getCredentials().userId&&"owner"!==r.role?(Hn.delete(n.conversationId),r):Object.freeze({...r,ownerId:t.ownerId,role:"member",permissions:Object.freeze({sendMessages:r.permissions.sendMessages}),canViewMembers:!1===r.memberPrivateChatDisabled})}function st(e){je(Ve.value,e)&&bt(e,{forceRefresh:!0})}function ut(e){st(e),function(e){je(nn.value,e)&&Bt(e,{preserveExisting:!0})}(e)}function vt(e,n){const r=Sn.get(e.conversationId);if(void 0!==r&&!r.allTargets){for(const e of n)r.userIds.delete(e.trim());0===r.userIds.size&&Sn.delete(e.conversationId)}}function dt(e){if(Wr(e)||at(e))return;Nn.delete(e.conversationId)&&eo(e);const n=Sn.get(e.conversationId);if(void 0===n)return;Sn.delete(e.conversationId);const r=n.allTargets?void 0:[...n.userIds];n.affectsMentions?gr(e,r):yr(e,r),n.resolvesProfiles&&void 0!==r&&r.length>0&&hr(e,r,{forceRefresh:!0}),Zt(e)}function ft(n){const r=e.getChannelMemberProfiles();if(void 0===r[n.conversationId])return!1;const t={...r};return delete t[n.conversationId],e.setChannelMemberProfiles(t),!0}async function mt(n,r={}){const t=ge(n),o=++jn.group,a=In.group,i=e.getGeneration(),c=!je(Se.value,t);Se.value=t,c&&(Ke.value=null,An+=1,Le.value=[],We.value=!1),Ae.value=!0,Je.value=null;try{const n=!0===r.forceRefresh?null:await W(e,t);if(!Rr(t,i,o,a))return Object.freeze({ok:!1,operation:"group-profile",reason:"stale"});if(null!==n&&(Ke.value=n),!0===r.restricted)return!0===r.includeMembers&&await pt(t,{restricted:!0,forceRefresh:!0}),Rr(t,i,o,a)?(Ae.value=!1,null===Ke.value?Object.freeze({ok:!1,operation:"group-profile",reason:"not-found"}):Object.freeze({ok:!0,operation:"group-profile"})):Object.freeze({ok:!1,operation:"group-profile",reason:"stale"});const c=await J(e,t,!0===r.forceRefresh?{forceRefresh:!0}:void 0);if(!Rr(t,i,o,a))return Object.freeze({ok:!1,operation:"group-profile",reason:"stale"});const l=function(e,n){if(null===n||!1===n.isInGroup)return Fn.delete(e.conversationId),n;const r=Fn.get(e.conversationId);return void 0===r?n:r.expiresAt<=Date.now()||n.ownerId===r.ownerId?(Fn.delete(e.conversationId),n):Object.freeze({...n,ownerId:r.ownerId})}(t,c);return pe.record("debug","pinia","profile","group-profile-membership-resolved",()=>({conversation:t,data:{profileId:l?.ref.conversationId??null,name:l?.name??null,isInGroup:l?.isInGroup??null,verifyWay:l?.verifyWay??null,memberCount:l?.memberCount??null,membershipDecision:!0===l?.isInGroup?"joined":!1===l?.isInGroup?"not-joined":"unknown"}})),null===l||!1===l.isInGroup?(An+=1,Le.value=[],We.value=!1,Mt(t),ie(e,t.conversationId,{clearCachedNames:!0})):!0===r.includeMembers&&await pt(t,{restricted:!1,forceRefresh:!0}),Rr(t,i,o,a)?(Ke.value=l,Ae.value=!1,null===l?Object.freeze({ok:!1,operation:"group-profile",reason:"not-found"}):Object.freeze({ok:!0,operation:"group-profile"})):Object.freeze({ok:!1,operation:"group-profile",reason:"stale"})}catch(e){if(!Rr(t,i,o,a))return Object.freeze({ok:!1,operation:"group-profile",reason:"stale"});const n=Pe(e,"profile.group",t);return!0===r.forceRefresh&&(Ke.value=null,An+=1,Le.value=[],We.value=!1),Je.value=n,Ae.value=!1,Object.freeze({ok:!1,operation:"group-profile",reason:"failed",error:n})}}async function pt(n,r={}){const t=ge(n);if(je(Se.value,t)||(Se.value=t,Le.value=[]),je(Se.value,t)&&Ke.value?.ref.conversationId===t.conversationId&&!1===Ke.value.isInGroup)return An+=1,Le.value=[],We.value=!1,Object.freeze({ok:!0,operation:"group-members"});if(Le.value.length>0&&!0!==r.forceRefresh)return Object.freeze({ok:!0,operation:"group-members"});const o=++An,a=e.getGeneration();We.value=!0;try{const n=!0===r.preserveExisting?null:await L(e,t);if(yn||e.getGeneration()!==a||o!==An||!je(Se.value,t))return Object.freeze({ok:!1,operation:"group-members",reason:"stale"});const i=null===n?null:Or(Bn,t.conversationId,n.items);if(null!==i&&(Le.value=zr(t.conversationId,i),et(t)),!0===r.restricted||!0!==r.forceRefresh&&null!==i&&i.length>0)return We.value=!1,Object.freeze({ok:!0,operation:"group-members"});const c=await A(e,t);return yn||e.getGeneration()!==a||o!==An||!je(Se.value,t)?Object.freeze({ok:!1,operation:"group-members",reason:"stale"}):(null!==c&&(Le.value=zr(t.conversationId,Or(Bn,t.conversationId,c),{reconcile:!0}),et(t)),We.value=!1,Object.freeze({ok:!0,operation:"group-members"}))}catch(n){if(yn||e.getGeneration()!==a||o!==An||!je(Se.value,t))return Object.freeze({ok:!1,operation:"group-members",reason:"stale"});const r=Pe(n,"profile.group-members",t);return Je.value=r,We.value=!1,Object.freeze({ok:!1,operation:"group-members",reason:"failed",error:r})}}async function bt(n,r){const t=ge(n),o=++jn.channel,a=In.channel,i=e.getGeneration(),c=!je(Ve.value,t);Ve.value=t,c&&(Be.value=null,Vt(t)),Fe.value=!0,Qe.value=null;try{const n=await K(e,t,r);if(!Rr(t,i,o,a))return Object.freeze({ok:!1,operation:"channel-profile",reason:"stale"});const c=lt(t,n);return Be.value=c,null!==c&&je(nn.value,t)&&(rn.value=Cr(t.conversationId,rn.value)),null===c?(qt(t),Vt()):!0!==c.canViewMembers&&Vt(),Fe.value=!1,null===c?Object.freeze({ok:!1,operation:"channel-profile",reason:"not-found"}):Object.freeze({ok:!0,operation:"channel-profile"})}catch(e){if(!Rr(t,i,o,a))return Object.freeze({ok:!1,operation:"channel-profile",reason:"stale"});const n=Pe(e,"profile.channel",t);return!0===r?.forceRefresh&&(Be.value=null,Vt()),Qe.value=n,Fe.value=!1,Object.freeze({ok:!1,operation:"channel-profile",reason:"failed",error:n})}}async function ht(n,r,t){const o=He[n];if(o.loading&&!t)return Object.freeze({ok:!1,operation:"directory",reason:"busy"});if(r&&o.exhausted)return Object.freeze({ok:!1,operation:"directory",reason:"exhausted"});if(!r&&o.loaded&&!t)return Object.freeze({ok:!0,operation:"directory"});const a=r?rr.get(n):void 0;if(r&&void 0===a)return Object.freeze({ok:!1,operation:"directory",reason:"exhausted"});const i=++nr[n],c=e.getGeneration();o.loading=!0,o.error=null;try{const t=await Y(e,n,a);return yn||c!==e.getGeneration()||i!==nr[n]?Object.freeze({ok:!1,operation:"directory",reason:"stale"}):(o.items=X(r?o.items:[],t.items),o.loaded=!0,o.exhausted=t.exhausted,o.loading=!1,void 0===t.nextPageToken?rr.delete(n):rr.set(n,t.nextPageToken),Object.freeze({ok:!0,operation:"directory"}))}catch(r){if(yn||c!==e.getGeneration()||i!==nr[n])return Object.freeze({ok:!1,operation:"directory",reason:"stale"});const t=Pe(r,`directory.${n}`);return o.error=t,o.loading=!1,Object.freeze({ok:!1,operation:"directory",reason:"failed",error:t})}}function yt(){void 0!==tr&&(clearTimeout(tr),tr=void 0),or?.resolve(Object.freeze({ok:!1,operation:"directory-search",reason:"stale"})),or=void 0}function gt(){dr+=1,yt(),Ye.value="",Xe.value=null,Ze.value=!1,en.value=null,ar=void 0}function jt(e,n){const r=e.map(e=>e.userId),t=new Map(e.map(e=>[e.userId,e]));for(const e of n)t.has(e.userId)||r.push(e.userId),t.set(e.userId,e);return Object.freeze(r.map(e=>t.get(e)))}function It(e,n,r){const t=n.trim();if(""===t)return;const o=r.trim(),a=Yn.get(e.conversationId)??/* @__PURE__ */new Map;a.set(t,o),Yn.set(e.conversationId,a),je(Se.value,e)&&(Le.value=Object.freeze(Le.value.map(e=>e.userId===t?Object.freeze({...e,nickname:o}):e)))}function kt(e,n){wr(e.conversationId,n)}function Ot(e,n){const r=n.trim();if(""===r)return;if(wr(e.conversationId,r),jr(Bn,e.conversationId,r),!je(Se.value,e))return;const t=Le.value.filter(e=>e.userId!==r),o=t.length!==Le.value.length;o&&(Le.value=Object.freeze(t),et(e)),o&&null!==Ke.value&&void 0!==Ke.value.memberCount&&(Ke.value=Object.freeze({...Ke.value,memberCount:Math.max(0,Ke.value.memberCount-1)}))}function zt(e,n){wr(e.conversationId,n),Ir(Bn,e.conversationId,n)}function wt(e,n){return kr(Bn,e.conversationId,n)}function Mt(e){Bn.delete(e.conversationId),Yn.delete(e.conversationId)}function Ct(e,n){je(Ve.value,e)&&null!==Be.value&&(Be.value=Object.freeze({...Be.value,name:n}))}function Pt(e,n){je(Ve.value,e)&&null!==Be.value&&(Be.value=Object.freeze({...Be.value,description:n}))}function _t(e,n){je(Ve.value,e)&&null!==Be.value&&(Be.value=Object.freeze({...Be.value,avatar:n}))}function Tt(e,n,r){if(!je(Ve.value,e)||null===Be.value)return;const{inviteCode:t,...o}=Be.value;Be.value=Object.freeze({...o,verifyType:n,...void 0===r?{}:{inviteCode:r}})}function Gt(e,n){if(!je(Ve.value,e)||null===Be.value)return;const r={...Be.value,...void 0===n.allMembersMuted?{}:{allMembersMuted:n.allMembersMuted},...void 0===n.memberPrivateChatDisabled?{}:{memberPrivateChatDisabled:n.memberPrivateChatDisabled}};Be.value=Object.freeze({...r,canViewMembers:!0===r.permissions.manageMembers||!1===r.memberPrivateChatDisabled})}function Rt(e,n,r,t){const o=n.trim();if(""===o)return;const a=r.trim(),i=a||t?.trim()||o,c=Xn.get(e.conversationId)??/* @__PURE__ */new Map;c.set(o,{nickname:a,displayName:i}),Xn.set(e.conversationId,c),er.value+=1,je(nn.value,e)&&(rn.value=Cr(e.conversationId,rn.value)),St(e,o)&&(sn.value=Cr(e.conversationId,null===sn.value?[]:[sn.value])[0]??null),je(dn.value,e)&&(fn.value=Object.freeze(fn.value.map(e=>e.userId===o?Object.freeze({...e,displayName:i}):e)))}function xt(e,n,r){const t=n.trim();if(""===t)return;const o=Zn.get(e.conversationId)??/* @__PURE__ */new Map;o.set(t,r),Zn.set(e.conversationId,o),je(nn.value,e)&&(rn.value=Cr(e.conversationId,rn.value)),St(e,t)&&(sn.value=Cr(e.conversationId,null===sn.value?[]:[sn.value])[0]??null)}function $t(e,n){_r(e.conversationId,n)}function Et(e,n){const r=n.trim();if(""===r)return;const t=je(nn.value,e),o=je(dn.value,e);if(_r(e.conversationId,r),Gr(e.conversationId,r),jr(Qn,e.conversationId,r),!t&&!o)return;const a=t&&rn.value.some(e=>e.userId===r),i=o&&fn.value.some(e=>e.userId===r);t&&(rn.value=Object.freeze(rn.value.filter(e=>e.userId!==r))),o&&(fn.value=Object.freeze(fn.value.filter(e=>e.userId!==r))),St(e,r)&&(sn.value=null),(a||i)&&je(Ve.value,e)&&void 0!==Be.value?.memberCount&&(Be.value=Object.freeze({...Be.value,memberCount:Math.max(0,Be.value.memberCount-1)}))}function Dt(e,n){_r(e.conversationId,n),Gr(e.conversationId,n),Ir(Qn,e.conversationId,n)}function Ut(e,n){return kr(Qn,e.conversationId,n)}function qt(e){Qn.delete(e.conversationId),Zn.delete(e.conversationId),Xn.delete(e.conversationId)&&(er.value+=1)}function Nt(n,r,t){return!yn&&e.getGeneration()===r&&fr===t&&je(nn.value,n)}function St(n,r,t,o){const a=ln.value;return!yn&&(void 0===t||e.getGeneration()===t)&&(void 0===o||Wn===o)&&null!==a&&je(a,n)&&a.userId===r}function Kt(e,n){const r=n.trim();if(""!==r){if(je(nn.value,e)){const e=rn.value.find(e=>e.userId===r);if(void 0!==e)return e}return St(e,r)?sn.value??void 0:void 0}}function Lt(e,n,r){return n.flatMap(n=>{if((Vn.get(n.userId)??0)>r){const r=Kt(e,n.userId);return void 0===r?[]:[r]}return Vn.set(n.userId,r),St(e,n.userId)&&null!==sn.value&&(sn.value=Cr(e.conversationId,[n])[0]??null),[n]})}async function At(n,r,t){on.value=!0,cn.value=null;const o=++Jn;try{const a=await H(e,n,tn.value);if(!Nt(n,r,t))return Object.freeze({ok:!1,operation:"channel-members",reason:"stale"});const i=Lt(n,a.items,o);return Pr(n.conversationId,a.items),Tr(n.conversationId,a.items),rn.value=Cr(n.conversationId,Or(Qn,n.conversationId,i)),ir=a.nextCursor,an.value=a.exhausted||void 0===a.nextCursor,lr=void 0,on.value=!1,Object.freeze({ok:!0,operation:"channel-members"})}catch(e){if(!Nt(n,r,t))return Object.freeze({ok:!1,operation:"channel-members",reason:"stale"});const o=Pe(e,"profile.channel-members.refresh",n);return lr="initial",cn.value=o,on.value=!1,Object.freeze({ok:!1,operation:"channel-members",reason:"failed",error:o})}}async function Wt(n){if(on.value)return Object.freeze({ok:!1,operation:"channel-members",reason:"busy"});const r=ge(n),t=fr,o=e.getGeneration();on.value=!0,cn.value=null;const a=++Jn;try{const n=await N(e,r,tn.value);return Nt(r,o,t)?(null!==n&&(rn.value=Cr(r.conversationId,Or(Qn,r.conversationId,Lt(r,n.items,a))),ir=n.nextCursor,an.value=n.exhausted||void 0===n.nextCursor),await At(r,o,t)):Object.freeze({ok:!1,operation:"channel-members",reason:"stale"})}catch(e){if(!Nt(r,o,t))return Object.freeze({ok:!1,operation:"channel-members",reason:"stale"});const n=Pe(e,"profile.channel-members.cache",r);return lr="initial",cn.value=n,on.value=!1,Object.freeze({ok:!1,operation:"channel-members",reason:"failed",error:n})}}async function Jt(n){if(on.value)return Object.freeze({ok:!1,operation:"channel-members",reason:"busy"});if(an.value||void 0===ir)return Object.freeze({ok:!1,operation:"channel-members",reason:"exhausted"});const r=ge(n),t=fr,o=e.getGeneration();on.value=!0,cn.value=null;const a=++Jn;try{const n=await Q(e,r,{query:tn.value,cursor:ir});if(!Nt(r,o,t))return Object.freeze({ok:!1,operation:"channel-members",reason:"stale"});const i=Lt(r,n.items,a);return Pr(r.conversationId,n.items),Tr(r.conversationId,n.items),rn.value=Cr(r.conversationId,Or(Qn,r.conversationId,jt(rn.value,i))),ir=n.nextCursor,an.value=n.exhausted||void 0===n.nextCursor,lr=void 0,on.value=!1,Object.freeze({ok:!0,operation:"channel-members"})}catch(e){if(!Nt(r,o,t))return Object.freeze({ok:!1,operation:"channel-members",reason:"stale"});const n=Pe(e,"profile.channel-members.page",r);return lr="more",cn.value=n,on.value=!1,Object.freeze({ok:!1,operation:"channel-members",reason:"failed",error:n})}}function Vt(e=null){Vn.clear(),void 0!==cr&&(clearTimeout(cr),cr=void 0),fr+=1,nn.value=null===e?null:ge(e),rn.value=[],tn.value="",on.value=!1,an.value=!1,cn.value=null,ir=void 0,lr=void 0}function Bt(n,r={}){const t=ge(n);if(!0===r.preserveExisting&&je(nn.value,t)){void 0!==cr&&(clearTimeout(cr),cr=void 0);const n=++fr,r=e.getGeneration();return cn.value=null,At(t,r,n)}return Vt(t),Wt(t)}function Ft(n,r,t){return!yn&&e.getGeneration()===r&&mr===t&&je(dn.value,n)}async function Qt(n,r={}){if(pn.value)return Object.freeze({ok:!1,operation:"channel-mentions",reason:"busy"});const t=ge(n),o=mr,a=e.getGeneration();pn.value=!0,hn.value=null;try{const n=!1===r.useCache?null:await q(e,t,mn.value||void 0);if(!Ft(t,a,o))return Object.freeze({ok:!1,operation:"channel-mentions",reason:"stale"});null!==n&&(fn.value=Mr(t.conversationId,Or(Qn,t.conversationId,n.items)),sr=n.nextPageToken,bn.value=n.exhausted||void 0===n.nextPageToken);const i=await F(e,t,mn.value||void 0);return Ft(t,a,o)?(fn.value=Mr(t.conversationId,Or(Qn,t.conversationId,i.items)),sr=i.nextPageToken,bn.value=i.exhausted||void 0===i.nextPageToken,vr=void 0,pn.value=!1,Object.freeze({ok:!0,operation:"channel-mentions"})):Object.freeze({ok:!1,operation:"channel-mentions",reason:"stale"})}catch(e){if(!Ft(t,a,o))return Object.freeze({ok:!1,operation:"channel-mentions",reason:"stale"});const n=Pe(e,"profile.channel-mentions",t);return vr="initial",hn.value=n,pn.value=!1,Object.freeze({ok:!1,operation:"channel-mentions",reason:"failed",error:n})}}async function Ht(){const n=dn.value,r=sr;if(null===n)return Object.freeze({ok:!1,operation:"channel-mentions",reason:"not-ready"});if(pn.value)return Object.freeze({ok:!1,operation:"channel-mentions",reason:"busy"});if(bn.value||void 0===r)return Object.freeze({ok:!1,operation:"channel-mentions",reason:"exhausted"});const t=mr,o=e.getGeneration();pn.value=!0,hn.value=null;try{const a=await U(e,mn.value,r);return Ft(n,o,t)?(fn.value=Mr(n.conversationId,Or(Qn,n.conversationId,jt(fn.value,a.items))),sr=a.nextPageToken,bn.value=a.exhausted||void 0===a.nextPageToken,vr=void 0,pn.value=!1,Object.freeze({ok:!0,operation:"channel-mentions"})):Object.freeze({ok:!1,operation:"channel-mentions",reason:"stale"})}catch(e){if(!Ft(n,o,t))return Object.freeze({ok:!1,operation:"channel-mentions",reason:"stale"});const r=Pe(e,"profile.channel-mentions.page",n);return vr="more",hn.value=r,pn.value=!1,Object.freeze({ok:!1,operation:"channel-mentions",reason:"failed",error:r})}}function Yt(e=null,n=""){void 0!==ur&&(clearTimeout(ur),ur=void 0),mr+=1,dn.value=null===e?null:ge(e),fn.value=[],mn.value=n,pn.value=!1,bn.value=!1,hn.value=null,sr=void 0,vr=void 0}function Xt(e){je(Se.value,e)&&(br(e,{forceRefresh:!0}),pt(e,{forceRefresh:!0,preserveExisting:!0}))}function Zt(e){je(nn.value,e)&&Bt(e,{preserveExisting:!0})}async function eo(e){if(!je(Ve.value,e))return;(await bt(e,{forceRefresh:!0})).ok&&!0===Be.value?.canViewMembers&&Zt(e)}const no=e.subscribeProfileChange(()=>{Te.value+=1}),ro=e.subscribeEvents(function(n){if("profile:updated"===n.type){if("user"===n.profileType)Re.value?.conversationId===n.id?xr({conversationType:"direct",conversationId:n.id},{forceRefresh:!0}):pr(n.id,{forceRefresh:!0});else{const e={conversationType:"group",conversationId:n.id};if(Sr(e)||Hr(e))return void Tn.add(e.conversationId);je(Se.value,e)?mt(e,{includeMembers:!0,forceRefresh:!0}):br(e,{forceRefresh:!0})}return}if("channel-profile:updated"===n.type){const e={conversationType:"channel",conversationId:n.channelId};return void(Wr(e)||at(e)?Nn.add(e.conversationId):eo(e))}if("sync:complete"===n.type){for(const e of n.conversations)if("group"===e.conversationType){const n={conversationType:"group",conversationId:e.conversationId};je(Se.value,n)&&Xt(n)}else if("channel"===e.conversationType){const n={conversationType:"channel",conversationId:e.conversationId};(je(Ve.value,n)||je(nn.value,n)||je(dn.value,n))&&(gr(n),Zt(n))}return}if("message:received"!==n.type&&"message:updated"!==n.type)return;const r=n.message,t=r.body.system?.eventType;if(void 0===t)return;const o=r.body.system?.targetUserIds??[],a=e.getCredentials().userId;if("group"===r.conversationType&&be.has(t)){const i={conversationType:"group",conversationId:r.conversationId},c="live"===(n.source??"live"),l="group_member_renamed"===t&&o.some(e=>e.trim()===a)&&Sr(i,"set-my-nickname"),s="group_member_renamed"===t&&!l;if("group_member_renamed"===t){l||ae(e,r);for(const e of o)l&&e.trim()===a||kt(i,e)}if("group_member_joined"===t||"group_member_invited"===t)for(const e of o)zt(i,e);if(c&&("group_member_left"===t||"group_member_removed"===t))for(const e of o)Ot(i,e);return Hr(i)?void Gn.add(i.conversationId):void(c&&!l&&(s?je(Se.value,i)&&pt(i,{forceRefresh:!0,preserveExisting:!0}):Xt(i)))}const i="live"===(n.source??"live")||!0===n.channelLifecycleEffects;if("channel"!==r.conversationType||!he.has(t)||!i)return;const c={conversationType:"channel",conversationId:r.conversationId};if(!("channel_member_renamed"===t&&o.some(e=>Wr(c,e.trim()===a?"set-my-nickname":"set-member-nickname",e)))){if("channel_member_renamed"===t)for(const e of o)$t(c,e);if("channel_admin_added"===t||"channel_admin_removed"===t){const e="channel_admin_added"===t?"admin":"member";for(const n of o)xt(c,n,e)}if("channel_owner_transferred"===t){for(const e of o)xt(c,e,"owner");const e=r.body.system?.operatorId;void 0===e||o.includes(e)||xt(c,e,"member")}if("channel_member_joined"===t||"channel_member_invited"===t)for(const e of o)Dt(c,e);if("channel_member_left"===t||"channel_member_removed"===t)for(const e of o)Et(c,e);at(c)?function(e,n,r,t){const o=Sn.get(e.conversationId)??{allTargets:!1,affectsMentions:!1,resolvesProfiles:!1,userIds:/* @__PURE__ */new Set},a=t.map(e=>e.trim()).filter(Boolean);0===a.length&&(o.allTargets=!0);for(const e of a)o.userIds.add(e);o.affectsMentions||(o.affectsMentions=n),o.resolvesProfiles||(o.resolvesProfiles=r),Sn.set(e.conversationId,o)}(c,ye.has(t),"channel_member_left"!==t&&"channel_member_removed"!==t&&o.length>0,o):(ye.has(t)?gr(c,o):yr(c,o),"channel_member_left"!==t&&"channel_member_removed"!==t&&o.length>0&&hr(c,o,{forceRefresh:!0}),Zt(c))}});function to(){On["set-remark"]+=1,On.block+=1,On.report+=1,On["delete-friendship"]+=1,In.direct+=1,Re.value=null,xe.value=null,$e.value="unknown",Ee.value=!1,De.value=null,kn+=1,Ue.value=[],qe.value=!1,Ne.value=null}function oo(){for(const e of Object.keys(zn))zn[e]+=1;for(const e of Object.keys(wn))wn[e]+=1;Pn.clear(),_n.clear(),Mn.clear(),Tn.clear(),Gn.clear(),In.group+=1,An+=1,Se.value=null,Ke.value=null,Le.value=[],Ae.value=!1,We.value=!1,Je.value=null}function ao(){for(const e of Object.keys(En))En[e]+=1;Un.clear(),Dn.clear(),xn.clear(),Rn.clear(),Nn.clear(),Sn.clear(),In.channel+=1,Ve.value=null,Be.value=null,Fe.value=!1,Qe.value=null,Wn+=1,ln.value=null,sn.value=null,un.value=!1,vn.value=null,Vt(),Yt()}function io(){g(e),to(),On["search-user"]+=1,On["resolve-application-target"]+=1,On["request-friendship"]+=1,oo(),ao(),Kn.clear();for(const e of["individual","group","channel"])nr[e]+=1,Object.assign(He[e],_e());rr.clear(),gt(),Bn.clear(),Fn.clear(),Qn.clear(),Hn.clear(),Yn.clear(),Zn.clear(),gn.clear(),Ge.value={},Xn.size>0&&(Xn.clear(),er.value+=1)}return{profileRevision:Te,directRef:Re,directProfile:xe,directRelationship:$e,directLoading:Ee,directError:De,directMutualGroups:Ue,directMutualGroupsLoading:qe,directMutualGroupsError:Ne,groupRef:Se,groupProfile:Ke,groupMembers:Le,groupLoading:Ae,groupMembersLoading:We,groupError:Je,channelRef:Ve,channelProfile:Be,channelLoading:Fe,channelError:Qe,directories:He,directorySearchKeyword:Ye,directorySearchResult:Xe,directorySearchLoading:Ze,directorySearchError:en,channelMembersRef:nn,channelMembers:rn,channelMemberQuery:tn,channelMembersLoading:on,channelMembersExhausted:an,channelMembersError:cn,channelMemberDetailRef:ln,channelMemberDetail:sn,channelMemberDetailLoading:un,channelMemberDetailError:vn,channelMentionsRef:dn,channelMentions:fn,channelMentionQuery:mn,channelMentionsLoading:pn,channelMentionsExhausted:bn,channelMentionsError:hn,resolveDisplayName:function(n,r,t){Te.value;const o=e.getSenderProfileCache();if("channel"===n.conversationType){const a=te(o,e.getChannelMemberProfiles(),n.conversationId,r),i=(t??"").trim();return a===r&&""!==i?i:a}return"group"===n.conversationType?oe(o,e.getGroupMemberNames(),n.conversationId,r,t):"direct"===n.conversationType?oe(o,e.getGroupMemberNames(),"",r,t):(t??"").trim()||r},resolveConversationListProfiles:function(n,r){return j(e,n,{...r,isCurrent:()=>!yn})},resolveAvatarUrl:function(n,r){Te.value;const t=e.getSenderProfileCache();return"channel"===n.conversationType?ne(t,e.getChannelMemberProfiles(),n.conversationId,r):re(t,r)},resolvePublicNickname:function(n){return Te.value,ee(e.getSenderProfileCache(),n)},resolveSenderProfile:pr,resolveGroupMemberProfiles:br,resolveChannelMemberProfiles:hr,invalidateChannelMemberProfiles:yr,invalidateChannelMemberSet:gr,channelMentionRevision:function(e){return Ge.value[e.conversationId]??0},loadDirect:xr,resolveProfileAccess:async function(e,n,r={}){const t=n.trim();if(""===t)return Object.freeze({ok:!1,reason:"direct-profile",result:Object.freeze({ok:!1,operation:"direct-profile",reason:"not-found"})});const o=!0===r.forceRefresh;let a;if("channel"===e.conversationType){const n=await bt({conversationType:"channel",conversationId:e.conversationId},{forceRefresh:o});if(!n.ok)return Object.freeze({ok:!1,reason:"channel-profile",result:n});if(a=je(Ve.value,e)?Be.value:null,"blocked"===D({conversation:e,relationship:"unknown",channelProfile:a}))return Object.freeze({ok:!0,destination:"blocked"})}const i=await xr({conversationType:"direct",conversationId:t},{forceRefresh:o});return i.ok?Object.freeze({ok:!0,destination:D({conversation:e,relationship:$e.value,channelProfile:a})}):Object.freeze({ok:!1,reason:"direct-profile",result:i})},loadDirectMutualGroups:async function(n){const r=ge(n),t=++kn,o=e.getGeneration();Re.value=r,qe.value=!0,Ne.value=null;try{const n=await V(e,r.conversationId);return je(Re.value,r)&&o===e.getGeneration()&&t===kn?(Ue.value=n,qe.value=!1,Object.freeze({ok:!0,operation:"direct-mutual-groups"})):Object.freeze({ok:!1,operation:"direct-mutual-groups",reason:"stale"})}catch(n){if(!je(Re.value,r)||o!==e.getGeneration()||t!==kn)return Object.freeze({ok:!1,operation:"direct-mutual-groups",reason:"stale"});const a=Pe(n,"profile.direct-mutual-groups",r);return Ne.value=a,qe.value=!1,Object.freeze({ok:!1,operation:"direct-mutual-groups",reason:"failed",error:a})}},setDirectContactRemark:async function(n,r){const t=ge(n),o=$r("set-remark"),a=await C(e,t,r);if(!Er("set-remark",o)||!je(Re.value,t))return Ie("set-remark",t);if(!a.ok)return a;const i=xe.value,c=null!==i&&i.userId===t.conversationId;return c&&(xe.value=Object.freeze({...i,...void 0===r.name?{}:{remark:r.name},...void 0===r.emails?{}:{remarkEmails:Object.freeze([...r.emails])},...void 0===r.phones?{}:{remarkPhones:Object.freeze(r.phones.map(e=>Object.freeze({countryCode:e.countryCode,mobile:e.mobile})))}})),Object.freeze({...a,projectionUpdated:c})},blockDirectContact:async function(n){const r=ge(n),t=$r("block"),o=await M(e,r);return Er("block",t)&&je(Re.value,r)?o.ok?($e.value="blocked",Object.freeze({...o,projectionUpdated:!0})):o:Ie("block",r)},reportDirectContact:async function(n,r){const t=ge(n),o=$r("report"),a=await w(e,t,r);return Er("report",o)&&je(Re.value,t)?a:Ie("report",t)},deleteDirectFriendship:async function(n){const r=ge(n),t=$r("delete-friendship"),o=await z(e,r);return Er("delete-friendship",t)&&je(Re.value,r)?o.ok?($e.value="none",Object.freeze({...o,projectionUpdated:!0})):o:Ie("delete-friendship",r)},searchDirectContact:async function(n){const r=$r("search-user"),t=await O(e,n);return Er("search-user",r)?t:Ie("search-user",t.conversation)},resolveDirectContactTarget:async function(n){const r=ge(n),t=$r("resolve-application-target"),o=await k(e,r);return Er("resolve-application-target",t)?o:Ie("resolve-application-target",r)},requestDirectFriendship:async function(n,r){const t=ge(n),o=$r("request-friendship"),a=await I(e,t,r);return Er("request-friendship",o)?a:Ie("request-friendship",t)},loadGroup:mt,updateGroupName:async function(n,r){const t=ge(n),o=r.trim(),a=Ur("update-name",t);try{const n=await E(e,t,o);if(!Nr("update-name",a)||!je(Se.value,t))return ke("update-name",t);if(!n.ok)return n;const r=null!==Ke.value;return r&&function(e,n){if(!je(Se.value,e)||null===Ke.value)return;Ke.value=Object.freeze({...Ke.value,name:n})}(t,o),Object.freeze({...n,projectionUpdated:r})}finally{qr(t,a)}},updateGroupAvatar:async function(n,r){const t=ge(n),o=Ur("update-avatar",t);try{const n=await $(e,t,r);if(!Nr("update-avatar",o)||!je(Se.value,t))return ke("update-avatar",t);if(!n.ok)return n;const a=null!==Ke.value&&void 0!==n.avatar;return a&&function(e,n){if(!je(Se.value,e)||null===Ke.value)return;Ke.value=Object.freeze({...Ke.value,avatar:n})}(t,n.avatar),Object.freeze({...n,projectionUpdated:a})}finally{qr(t,o)}},setMyGroupNickname:async function(n,r){const t=ge(n),o=r.trim(),a=Ur("set-my-nickname",t);try{const n=await x(e,t,o);if(!Nr("set-my-nickname",a)||!je(Se.value,t))return ke("set-my-nickname",t);if(!n.ok)return n;const r=Le.value.some(e=>e.userId===n.memberId);return It(t,n.memberId,o),ce(e,t.conversationId,n.memberId,o),Object.freeze({...n,projectionUpdated:r})}finally{qr(t,a)}},updateGroupVerification:async function(n,r,t){const o=ge(n),a=4===r?t?.trim():void 0,i=Ur("update-verification",o);try{const n=await R(e,o,r,a);if(!Nr("update-verification",i)||!je(Se.value,o))return ke("update-verification",o);if(!n.ok)return n;const t=null!==Ke.value;return t&&function(e,n,r){if(!je(Se.value,e)||null===Ke.value)return;const{inviteCode:t,...o}=Ke.value;Ke.value=Object.freeze({...o,verifyWay:n,...void 0===r?{}:{inviteCode:r}})}(o,r,a),Object.freeze({...n,projectionUpdated:t})}finally{qr(o,i)}},isGroupProfileWritePending:Sr,inviteGroupMembers:async function(n,r){const t=ge(n),o=JSON.stringify([...new Set(r.map(e=>e.trim()).filter(Boolean))].sort()),a=Br("invite-members",t,o);try{const n=await G(e,t,r);if(!Qr("invite-members",a))return Ce("invite-members",t);if(!n.ok)return"stale"!==n.outcome&&je(Se.value,t)&&Xr(t),n;if(!je(Se.value,t))return Ce("invite-members",t);const o=n.memberIds.some(e=>wt(t,e));for(const e of n.memberIds)zt(t,e);return Yr(t),Object.freeze({...n,projectionUpdated:o,refreshRequired:!1})}finally{Fr(t,a)}},removeGroupMember:async function(n,r){const t=ge(n),o=Br("remove-member",t,r.trim());try{const n=await T(e,t,r);if(!Qr("remove-member",o))return Ce("remove-member",t);if(!n.ok)return"stale"!==n.outcome&&je(Se.value,t)&&Xr(t),n;if(!je(Se.value,t))return Ce("remove-member",t);const a=Le.value.some(e=>e.userId===n.memberId);return Ot(t,n.memberId),Yr(t),Object.freeze({...n,projectionUpdated:a,refreshRequired:!1})}finally{Fr(t,o)}},transferGroupOwnership:async function(n,r){const t=ge(n),o=Br("transfer-ownership",t,"group-owner");try{const n=await _(e,t,r);if(!Qr("transfer-ownership",o))return Ce("transfer-ownership",t);if(!n.ok)return"stale"!==n.outcome&&je(Se.value,t)&&Xr(t),n;if(!je(Se.value,t))return Ce("transfer-ownership",t);!function(e,n){const r=n.trim();""!==r&&Fn.set(e.conversationId,{ownerId:r,expiresAt:Date.now()+3e4})}(t,n.ownerId);const a=Ke.value,i=null!==a;return null!==a&&(Ke.value=Object.freeze({...a,ownerId:n.ownerId})),Xr(t),Object.freeze({...n,projectionUpdated:i,refreshRequired:!1})}finally{Fr(t,o)}},leaveGroup:async function(n,r={}){const t=ge(n),o=Br("leave",t,"membership");try{const n=await P(e,t,r);if(!n.ok&&!Qr("leave",o))return Ce("leave",t);if(!n.ok)return"transfer-required"===n.outcome&&je(Se.value,t)&&await mt(t,{forceRefresh:!0}),n;Mt(t),ie(e,t.conversationId,{clearCachedNames:!0}),Fn.delete(t.conversationId);const a=je(Se.value,t)&&(null!==Ke.value||Le.value.length>0);return je(Se.value,t)&&(Se.value=null,Ke.value=null,Le.value=[],Ae.value=!1,We.value=!1,Je.value=null),Object.freeze({...n,projectionUpdated:a})}finally{Fr(t,o)}},isGroupMemberManagementPending:Hr,ensureGroupMembers:pt,loadChannel:bt,requestMembershipJoin:async function(n,r={}){const t="group"===n.conversationType?Object.freeze({conversationType:"group",conversationId:n.conversationId}):Object.freeze({conversationType:"channel",conversationId:n.conversationId}),o="group"===t.conversationType?"request-group-join":"request-channel-join",a=e.getProductClient();if(null===a)return Object.freeze({ok:!1,operation:o,reason:"not-ready"});const i=`${t.conversationType}:${t.conversationId}`,c=++Ln,l=e.getGeneration(),s=In[t.conversationType],u="group"===t.conversationType?Se.value:Ve.value,v=null!==u&&je(u,t);Kn.set(i,c);const d=()=>!yn&&e.getGeneration()===l&&In[t.conversationType]===s&&Kn.get(i)===c&&(()=>{const e="group"===t.conversationType?Se.value:Ve.value;return null===u?null===e:null!==e&&je(e,u)})();try{const e="group"===t.conversationType?void 0===r.inviteCode?void 0===r.remarks?await a.groups.requestJoin(t):await a.groups.requestJoin(t,{remarks:r.remarks}):await a.groups.joinByInviteCode(t,r.inviteCode):void 0===r.inviteCode?void 0===r.remarks?await a.channels.requestJoin(t):await a.channels.requestJoin(t,{remarks:r.remarks}):await a.channels.joinByInviteCode(t,r.inviteCode);if(!d())return Object.freeze({ok:!1,operation:o,reason:"stale"});if("joined"===e.outcome)if(v)"group"===t.conversationType?await mt(t,{forceRefresh:!0}):await bt(t,{forceRefresh:!0});else try{"group"===t.conversationType?await a.groups.getProfile(t,{forceRefresh:!0}):await a.channels.getProfile(t,{forceRefresh:!0})}catch(e){d()&&pe.record("error","pinia","profile","membership-join-profile-refresh-failed",()=>({conversation:t,data:{error:Pe(e,o,t)}}))}return d()?Object.freeze({ok:!0,operation:o,outcome:e.outcome}):Object.freeze({ok:!1,operation:o,reason:"stale"})}catch(e){return d()?Object.freeze({ok:!1,operation:o,reason:"failed",error:Pe(e,o,t)}):Object.freeze({ok:!1,operation:o,reason:"stale"})}finally{Kn.get(i)===c&&Kn.delete(i)}},updateChannelName:async function(n,r){const t=ge(n);if(ct(t))return ze("update-name",t);const o=r.trim(),a=Kr("update-name",t);try{const n=await y(e,t,o);if(!Ar(a)||!je(Ve.value,t))return Oe("update-name",t);if(!n.ok)return n;const r=null!==Be.value;return r&&Ct(t,o),Object.freeze({...n,projectionUpdated:r})}finally{Lr(a)}},updateChannelDescription:async function(n,r){const t=ge(n);if(ct(t))return ze("update-description",t);const o=r.trim(),a=Kr("update-description",t);try{const n=await h(e,t,o);if(!Ar(a)||!je(Ve.value,t))return Oe("update-description",t);if(!n.ok)return n;const r=null!==Be.value;return r&&Pt(t,o),Object.freeze({...n,projectionUpdated:r})}finally{Lr(a)}},updateChannelAvatar:async function(n,r){const t=ge(n);if(ct(t))return ze("update-avatar",t);const o=Kr("update-avatar",t);try{const n=await b(e,t,r);if(!Ar(o)||!je(Ve.value,t))return Oe("update-avatar",t);if(!n.ok)return n;const a=null!==Be.value;return a&&_t(t,n.avatar),Object.freeze({...n,projectionUpdated:a})}finally{Lr(o)}},setMyChannelNickname:async function(n,r){const t=ge(n),o=r.trim(),a=Kr("set-my-nickname",t,e.getCredentials().userId);try{const n=await p(e,t,o);return Ar(a)&&je(Ve.value,t)?n.ok?(Rt(t,n.memberId,o,o),Jr(t,n.memberId,o),Object.freeze({...n,projectionUpdated:!0})):n:Oe("set-my-nickname",t)}finally{Lr(a)}},setChannelMemberNickname:async function(n,r,t){const o=ge(n);if(ct(o))return ze("set-member-nickname",o);const a=r.trim(),i=t.trim(),c=Kt(o,a),l=Kr("set-member-nickname",o,a);try{const n=await m(e,o,a,c?.role??"unknown",i);return Ar(l)&&je(Ve.value,o)?n.ok?(Rt(o,n.memberId,i,i),Jr(o,n.memberId,i),Object.freeze({...n,projectionUpdated:!0})):n:Oe("set-member-nickname",o)}finally{Lr(l)}},updateChannelVerification:async function(n,r,t){const o=ge(n);if(ct(o))return ze("update-verification",o);const a=4===r?t?.trim():void 0,i=Kr("update-verification",o);try{const n=await f(e,o,r,a);if(!Ar(i)||!je(Ve.value,o))return Oe("update-verification",o);if(!n.ok)return n;const t=null!==Be.value;return t&&Tt(o,r,a),Object.freeze({...n,projectionUpdated:t})}finally{Lr(i)}},setChannelAllMuted:async function(n,r){const t=ge(n);if(ct(t))return ze("set-all-muted",t);const o=Kr("set-all-muted",t);try{const n=await d(e,t,r);if(!Ar(o)||!je(Ve.value,t))return Oe("set-all-muted",t);if(!n.ok)return n;const a=null!==Be.value;return a&&Gt(t,{allMembersMuted:r}),Object.freeze({...n,projectionUpdated:a})}finally{Lr(o)}},setChannelMemberPrivateChatDisabled:async function(n,r){const t=ge(n);if(ct(t))return ze("set-member-private-chat-disabled",t);const o=Kr("set-member-private-chat-disabled",t);try{const n=await v(e,t,r);if(!Ar(o)||!je(Ve.value,t))return Oe("set-member-private-chat-disabled",t);if(!n.ok)return n;const a=null!==Be.value;return a&&Gt(t,{memberPrivateChatDisabled:r}),Object.freeze({...n,projectionUpdated:a})}finally{Lr(o)}},isChannelProfileWritePending:Wr,inviteChannelMembers:async function(n,r){const t=ge(n);if(ct(t))return Me("invite-members",t);const o=JSON.stringify([...new Set(r.map(e=>e.trim()).filter(Boolean))].sort()),a=rt("invite-members",t,o);try{const n=await u(e,t,r);if(!ot("invite-members",a))return we("invite-members",t);if(!n.ok)return"stale"!==n.outcome&&st(t),n;if(!je(Ve.value,t))return we("invite-members",t);const o=n.memberIds.some(e=>Ut(t,e));for(const e of n.memberIds)Dt(t,e);return gr(t,n.memberIds),vt(t,n.memberIds),ut(t),Object.freeze({...n,projectionUpdated:o,refreshRequired:!1})}finally{tt(a)}},removeChannelMember:async function(n,r){const t=ge(n);if(ct(t))return Me("remove-member",t);const o=it(t,r),a=rt("remove-member",t,r.trim());try{const n=await s(e,t,o??{userId:r,role:"unknown"});if(!ot("remove-member",a))return we("remove-member",t);if(!n.ok)return"stale"!==n.outcome&&st(t),n;if(!je(Ve.value,t))return we("remove-member",t);const i=function(n,r){const t=e.getChannelMemberProfiles(),o=t[n.conversationId];if(void 0===o||void 0===o[r])return!1;const a={...o};return delete a[r],e.setChannelMemberProfiles({...t,[n.conversationId]:a}),!0}(t,n.memberId),c=rn.value.some(e=>e.userId===n.memberId)||fn.value.some(e=>e.userId===n.memberId)||i;return Et(t,n.memberId),gr(t,[n.memberId]),vt(t,[n.memberId]),ut(t),Object.freeze({...n,projectionUpdated:c,refreshRequired:!1})}finally{tt(a)}},setChannelMemberAdmin:async function(n,r,t){const o=ge(n),a=it(o,r),i=t?"add-admin":"remove-admin";if(ct(o))return Me(i,o);const s=rt(i,o,r.trim());try{const n=t?await c(e,o,a??{userId:r,role:"unknown"}):await l(e,o,a??{userId:r,role:"unknown"});if(!ot(i,s))return we(i,o);if(!n.ok)return"stale"!==n.outcome&&st(o),n;if(!je(Ve.value,o))return we(i,o);const u=t?"admin":"member",v=a?.role!==u;return xt(o,n.memberId,u),ut(o),Object.freeze({...n,projectionUpdated:v,refreshRequired:!1})}finally{tt(s)}},transferChannelOwnership:async function(n,r){const t=ge(n);if(ct(t))return Me("transfer-ownership",t);const o=it(t,r),a=rt("transfer-ownership",t,"channel-owner");try{const n=await i(e,t,o??{userId:r,role:"unknown"});if(!ot("transfer-ownership",a))return we("transfer-ownership",t);if(!n.ok)return"stale"!==n.outcome&&st(t),n;if(!je(Ve.value,t))return we("transfer-ownership",t);!function(e,n){const r=n.trim();""!==r&&Hn.set(e.conversationId,{ownerId:r})}(t,n.ownerId);const c=function(e){return!(!je(Ve.value,e)||null===Be.value||(Be.value=lt(e,Be.value),0))}(t);return xt(t,n.ownerId,"owner"),xt(t,e.getCredentials().userId,"member"),ut(t),Object.freeze({...n,projectionUpdated:c,refreshRequired:!1})}finally{tt(a)}},leaveChannel:async function(n,r={}){const t=ge(n),o=void 0===r.newOwnerId?void 0:it(t,r.newOwnerId)??{userId:r.newOwnerId,role:"unknown"},i=rt("leave",t,"membership");try{const n=await a(e,t,o);if(!n.ok&&!ot("leave",i))return we("leave",t);if(!n.ok)return n;const r=je(Ve.value,t)&&(null!==Be.value||rn.value.length>0||fn.value.length>0);return qt(t),Hn.delete(t.conversationId),ft(t),je(Ve.value,t)&&ao(),Object.freeze({...n,projectionUpdated:r})}finally{tt(i)}},dismissChannel:async function(n){const r=ge(n);if(ct(r))return Me("dismiss",r);const t=rt("dismiss",r,"membership");try{const n=await o(e,r);if(!n.ok&&!ot("dismiss",t))return we("dismiss",r);if(!n.ok)return n;const a=je(Ve.value,r)&&(null!==Be.value||rn.value.length>0||fn.value.length>0);return qt(r),Hn.delete(r.conversationId),ft(r),je(Ve.value,r)&&ao(),Object.freeze({...n,projectionUpdated:a})}finally{tt(t)}},isChannelMemberManagementPending:at,loadDirectory:function(e,n=!1){return ht(e,n,!1)},refreshDirectory:function(e){return ht(e,!1,!0)},searchDirectory:function(n,r={}){const t=n.trim();if(""===t)return gt(),Promise.resolve(Object.freeze({ok:!1,operation:"directory-search",reason:"not-ready"}));if(!r.immediate&&or?.keyword===t)return or.promise;if(ar?.keyword===t)return ar.promise;if(!r.immediate&&Ye.value===t&&Xe.value?.keyword===t.toLocaleLowerCase()&&null===en.value)return Promise.resolve(Object.freeze({ok:!0,operation:"directory-search"}));const o=++dr;yt(),Ye.value=t,Xe.value=null,Ze.value=!0,en.value=null;const a=()=>{const n=async function(n,r){const t=e.getGeneration();try{const o=await Z(e,n);return yn||t!==e.getGeneration()||r!==dr?Object.freeze({ok:!1,operation:"directory-search",reason:"stale"}):(Xe.value=o,Ze.value=!1,Object.freeze({ok:!0,operation:"directory-search"}))}catch(n){if(yn||t!==e.getGeneration()||r!==dr)return Object.freeze({ok:!1,operation:"directory-search",reason:"stale"});const o=Pe(n,"directory.search");return en.value=o,Ze.value=!1,Object.freeze({ok:!1,operation:"directory-search",reason:"failed",error:o})}}(t,o);return ar={keyword:t,promise:n},n.finally(()=>{ar?.promise===n&&(ar=void 0)}),n};if(r.immediate)return a();let i;const c=new Promise(e=>{i=e});return or={keyword:t,promise:c,resolve:i},tr=setTimeout(()=>{tr=void 0,or=void 0,a().then(i)},300),c},clearDirectorySearch:gt,openChannelMembers:Bt,getChannelMember:Kt,loadChannelMember:async function(n,r,t={forceRefresh:!0}){const o=ge(n),a=r.trim();if(""===a)return Object.freeze({ok:!1,operation:"channel-member",reason:"not-found"});const i=++Wn,c=++Jn,l=e.getGeneration();ln.value=Object.freeze({...o,userId:a}),sn.value=null,un.value=!0,vn.value=null;try{let n=await S(e,o,a,{forceRefresh:!1!==t.forceRefresh});if(!St(o,a,l,i))return Object.freeze({ok:!1,operation:"channel-member",reason:"stale"});if(je(nn.value,o)&&((Vn.get(a)??0)>c?n=Kt(o,a)??null:Vn.set(a,c)),null===n||Ut(o,a))return je(nn.value,o)&&(rn.value=Object.freeze(rn.value.filter(e=>e.userId!==a))),Object.freeze({ok:!1,operation:"channel-member",reason:"not-found"});sn.value=Cr(o.conversationId,[n])[0]??null;const r=sn.value;return null!==r&&je(nn.value,o)&&(rn.value=Object.freeze(rn.value.map(e=>e.userId===a?r:e))),Object.freeze({ok:!0,operation:"channel-member"})}catch(e){if(!St(o,a,l,i))return Object.freeze({ok:!1,operation:"channel-member",reason:"stale"});const n=Pe(e,"profile.channel-member",o);return vn.value=n,Object.freeze({ok:!1,operation:"channel-member",reason:"failed",error:n})}finally{St(o,a,l,i)&&(un.value=!1)}},setChannelMemberQuery:function(n){const r=nn.value;if(null===r)return;tn.value=n,fr+=1,Vn.clear(),rn.value=[],an.value=!1,cn.value=null,ir=void 0,on.value=!1,void 0!==cr&&clearTimeout(cr);const t=fr,o=e.getGeneration(),a=++Jn;(async()=>{try{const n=await N(e,r,tn.value);if(!Nt(r,o,t))return;null!==n&&(rn.value=Cr(r.conversationId,Or(Qn,r.conversationId,Lt(r,n.items,a))),ir=n.nextCursor,an.value=n.exhausted||void 0===n.nextCursor)}catch(e){if(!Nt(r,o,t))return;cn.value=Pe(e,"profile.channel-members.cache",r)}Nt(r,o,t)&&(cr=setTimeout(()=>{cr=void 0,At(r,o,t)},300))})()},loadMoreChannelMembers:function(){const e=nn.value;return null===e?Promise.resolve(Object.freeze({ok:!1,operation:"channel-members",reason:"not-ready"})):Jt(e)},retryChannelMembers:function(){const e=nn.value;return null===e||void 0===lr?Promise.resolve(Object.freeze({ok:!1,operation:"channel-members",reason:"not-ready"})):"more"===lr?Jt(e):Wt(e)},resetChannelMembers:Vt,updateGroupMemberNicknameProjection:It,clearGroupMemberNicknameProjection:kt,removeGroupMemberProjection:Ot,restoreGroupMemberProjection:zt,isGroupMemberRemovedProjection:wt,clearGroupMemberProjections:Mt,updateChannelNameProjection:Ct,updateChannelDescriptionProjection:Pt,updateChannelAvatarProjection:_t,updateChannelVerificationProjection:Tt,updateChannelManagementProjection:Gt,updateChannelMemberDisplayNameProjection:Rt,updateChannelMemberRoleProjection:xt,clearChannelMemberDisplayNameProjection:$t,channelMemberNicknameProjection:function(e,n){return er.value,Xn.get(e.conversationId)?.get(n.trim())?.nickname},removeChannelMemberProjection:Et,restoreChannelMemberProjection:Dt,isChannelMemberRemovedProjection:Ut,clearChannelMemberProjections:qt,openChannelMentions:function(e,n=""){return je(dn.value,e)&&mn.value===n?(void 0!==ur&&(clearTimeout(ur),ur=void 0),mr+=1,pn.value=!1,hn.value=null,sr=void 0,vr=void 0,Qt(e,{useCache:!1})):(Yt(e,n),Qt(e))},setChannelMentionQuery:function(n){const r=dn.value;if(null===r)return;Yt(r,n);const t=mr,o=e.getGeneration();(async()=>{try{const a=await q(e,r,n||void 0);if(!Ft(r,o,t))return;null!==a&&(fn.value=Mr(r.conversationId,Or(Qn,r.conversationId,a.items)),sr=a.nextPageToken,bn.value=a.exhausted||void 0===a.nextPageToken)}catch(e){if(!Ft(r,o,t))return;hn.value=Pe(e,"profile.channel-mentions.cache",r)}Ft(r,o,t)&&(ur=setTimeout(()=>{ur=void 0,Qt(r)},300))})()},loadMoreChannelMentions:Ht,refreshChannelMentions:function(){const e=dn.value;return null===e?Promise.resolve(Object.freeze({ok:!1,operation:"channel-mentions",reason:"not-ready"})):(void 0!==ur&&(clearTimeout(ur),ur=void 0),mr+=1,pn.value=!1,hn.value=null,sr=void 0,bn.value=!1,vr=void 0,Qt(e,{useCache:!1}))},retryChannelMentions:function(){const e=dn.value;return null===e||void 0===vr?Promise.resolve(Object.freeze({ok:!1,operation:"channel-mentions",reason:"not-ready"})):"more"===vr?Ht():Qt(e)},resetChannelMentions:Yt,resetDirect:to,resetGroup:oo,resetChannel:ao,reset:io,dispose:function(){yn||(io(),yn=!0,Pn.clear(),_n.clear(),Mn.clear(),xn.clear(),Rn.clear(),Un.clear(),Dn.clear(),no(),ro(),pe.record("debug","pinia","profile","profile-directory-disposed"))}}})}const Ge=/* @__PURE__ */new WeakMap,Re=/* @__PURE__ */new WeakMap;function xe(e=pe()){fe(e);let n=Ge.get(e);void 0===n&&(n=Te(e),Ge.set(e,n));const r=n(e);return Re.get(e)!==r&&(Re.set(e,r),me(e,()=>{r.dispose(),r.$dispose(),Re.get(e)===r&&Re.delete(e)})),r}export{xe as useImProfileDirectoryStore};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{resolveSenderName as e}from"./profile.service.js";import{ensureBoundRobotSenderProfiles as t}from"./robot-sender-profile.js";const r=/* @__PURE__ */new WeakMap;function n(e){r.delete(e)}function s(n,s,a){const o=n.getCredentials().userId;if(null===n.getClient()||""===o||!1===a?.isCurrent?.())return Promise.resolve(!1);const i=n.getGeneration();let d=r.get(n);void 0!==d&&d.generation===i||(d={generation:i,tasks:/* @__PURE__ */new Map},r.set(n,d));const{conversationType:c,conversationId:l}=s.ref,f=function(e,t){const r=/* @__PURE__ */new Set;"direct"===e.ref.conversationType&&r.add(e.ref.conversationId),e.lastMessageSenderId&&r.add(e.lastMessageSenderId),e.lastMessageRecalled&&r.add(e.lastMessageRecalled.by),e.lastMessageDeletedForEveryone&&r.add(e.lastMessageDeletedForEveryone.by);const n=e.lastMessageSummary;if("recalled"!==n?.kind&&"channel-moderation-deleted"!==n?.kind||r.add(n.by),"system"===n?.kind){n.system.operatorId&&r.add(n.system.operatorId);for(const e of n.system.targetUserIds??[])r.add(e)}for(const t of e.lastMessageMention?.atUserIds??[])r.add(t);return[...r].filter(e=>""!==e&&"system"!==e&&e!==t).sort()}(s,o),g="group"===c?void 0===s.groupState||"active"===s.groupState:"channel"===c&&(void 0===s.channelState||"active"===s.channelState||"muted"===s.channelState),m=JSON.stringify([c,l]),u=JSON.stringify([f,g,s.timestamp]),y=d.tasks.get(m);if(!(a?.forceRefresh||y?.signature!==u||a?.retryUnresolved&&y.unresolved))return y.task;const k=()=>r.get(n)===d&&n.getGeneration()===i&&!1!==a?.isCurrent?.()&&d.tasks.get(m)?.canReadRobots===g,v=Promise.all(f.map(t=>e(n,t,a))).then(async e=>{if(!k())return!1;const r=n.getSenderProfileCache(),s=f.some(e=>{const t=r[e];return!(t?.remark.trim()||t?.nickname.trim()&&t.nickname!==e)});if(!g||!s||"group"!==c&&"channel"!==c)return e.every(Boolean);const o=await t(n,c,l,{forceRefresh:a?.forceRefresh,isCurrent:k});return k()&&o&&e.every(Boolean)}).then(e=>{const t=d.tasks.get(m);return t?.task===v&&(t.unresolved=!e||f.some(e=>{const t=n.getSenderProfileCache()[e];return!(t?.remark.trim()||t?.nickname.trim()&&t.nickname!==e)})),e});return d.tasks.set(m,{signature:u,canReadRobots:g,task:v}),v}export{n as clearConversationListProfilePreparations,s as resolveConversationListProfiles};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ensureBoundRobotSenderProfiles as e}from"./robot-sender-profile.js";const r=3e5,t=/* @__PURE__ */new WeakMap,n=/* @__PURE__ */new WeakMap;function o(e,r,t=!1){const o=e.getGeneration();let a=n.get(e);void 0!==a&&a.generation===o||(a={generation:o,tokens:/* @__PURE__ */new Map},n.set(e,a));const i=a.tokens.get(r),s=!t&&void 0!==i&&i.readers>0?i:{readers:0};s.readers+=1,a.tokens.set(r,s);const c=()=>e.getGeneration()===o&&a.tokens.get(r)===s;return{isCurrent:c,finish(){s.readers-=1},commit:t=>!!c()&&(e.setSenderProfileCache({...e.getSenderProfileCache(),[r]:t}),!0)}}const a=/* @__PURE__ */new WeakMap,i=/* @__PURE__ */new WeakMap;function s(e,r){const t=r.getGeneration();let n=e.get(r);return void 0!==n&&n.generation===t||(n={generation:t,tasks:/* @__PURE__ */new Map},e.set(r,n)),n.tasks}function c(e,r){return void 0===e?void 0===r?0:-1:void 0===r?1:e.length!==r.length?e.length>r.length?1:-1:e===r?0:e>r?1:-1}const l=/* @__PURE__ */new WeakMap;function u(e){return(e??"").trim()}function d(e,r,t){const n=u(r.nickname),o=u(r.avatar);return"robot-directory"===t?.source?{source:"robot-directory",remark:u(r.remark),nickname:""!==n&&n!==e?n:t.nickname,avatar:""!==o?o:t.avatar}:{remark:u(r.remark),nickname:n,avatar:o}}function f(e){let r=l.get(e);const t=e.getGeneration();return void 0!==r&&r.generation===t||(r={generation:t,groups:/* @__PURE__ */new Map},l.set(e,r)),r}function m(e,r,t,n={}){const o=f(e).groups.get(r);if(void 0===o||0===o.size)return t;const a={...t};for(const[e,r]of o){const i=t[e];(""===r?void 0===i:i===r)&&!0===n.reconcile?o.delete(e):""===r?delete a[e]:a[e]=r}return 0===o.size&&f(e).groups.delete(r),a}function g(e,r,t){const n=f(e).groups.get(r);void 0!==n&&(void 0!==t?(n.delete(t.trim()),0===n.size&&f(e).groups.delete(r)):f(e).groups.delete(r))}function p(e,r,t,n){e.getDiagnostics().record("warn","chat-kit","profile",r,()=>({...void 0===n?{}:{data:n},error:{message:"资料预热失败",data:t}}))}function v(e,r,n){const a=e.getClient(),i=e.getCredentials().userId;if(""===r||"system"===r||r===i||null===a)return Promise.resolve(!1);const c=!0===n?.forceRefresh,l=s(t,e),u=c?void 0:l.get(r);if(void 0!==u)return u;const f=e.getSenderProfileCache();if(!c&&void 0!==f[r])return Promise.resolve(!0);void 0===f[r]&&e.setSenderProfileCache({...f,[r]:{remark:"",nickname:"",avatar:""}});const m=o(e,r,c),g=a.contact.getProfile(r,c?{forceRefresh:!0}:void 0).then(t=>{if(!m.isCurrent())return!1;if(null===t){const t=e.getSenderProfileCache()[r];if(""===t?.remark&&""===t.nickname&&""===t.avatar){const t={...e.getSenderProfileCache()};delete t[r],e.setSenderProfileCache(t)}return!0}return m.commit(d(r,t,e.getSenderProfileCache()[r])),!0}).catch(t=>{if(!m.isCurrent())return!1;if(!c){const t={...e.getSenderProfileCache()};delete t[r],e.setSenderProfileCache(t)}return e.getDiagnostics().record("warn","chat-kit","profile","sender-profile-resolve-failed",()=>({data:{userId:r},error:{message:"解析发送者资料失败",data:t}})),!1}).finally(()=>{m.finish(),l.get(r)===g&&l.delete(r)});return l.set(r,g),g}function h(r,t,n){const o=r.getClient();if(""===t||null===o)return Promise.resolve(!1);const i=!0===n?.forceRefresh,c=s(a,r),l=i?void 0:c.get(t);if(void 0!==l)return l;const u=r.getGroupMemberNames(),d=r.getGeneration(),f=e(r,"group",t,{forceRefresh:i,isCurrent:()=>r.getGeneration()===d});if(!i&&void 0!==u[t])return f.then(()=>!0);const g=void 0!==u[t];g||r.setGroupMemberNames({...u,[t]:{}});const v=d,h=()=>{if(g||r.getGeneration()!==v)return;const e={...r.getGroupMemberNames()};delete e[t],r.setGroupMemberNames(e)},C=Promise.all([o.group.getMemberNames(t,{forceRefresh:i}),f]).then(([e])=>r.getGeneration()===v&&(null===e?(h(),!1):(r.setGroupMemberNames({...r.getGroupMemberNames(),[t]:m(r,t,e,{reconcile:!0})}),!0))).catch(e=>(h(),r.getGeneration()===v&&p(r,"group-member-name-resolve-failed",e,{groupId:t}),!1)).finally(()=>{i||c.get(t)!==C||c.delete(t)});return i||c.set(t,C),C}function C(t,n,o,a){const l=t.getClient();if(null===l||""===n||!1===a?.isCurrent?.())return Promise.resolve(!1);const u=!0===a?.forceRefresh,d=t.getGeneration(),f=e(t,"channel",n,{forceRefresh:u,isCurrent:()=>t.getGeneration()===d&&!1!==a?.isCurrent?.()}),m=t.getChannelMemberProfiles()[n]??{},g=[...new Set(o.map(e=>e.trim()).filter(e=>""!==e&&"system"!==e))].filter(e=>u||void 0===m[e]||m[e].expiresAt<=Date.now());if(0===g.length)return f.then(()=>!0);const p=s(i,t),v=`${n}:${[...g].sort().join(",")}`,h=u?void 0:p.get(v);if(void 0!==h)return h;const C=d,G=Promise.all([l.channel.getMembersByIds(n,g,u?{forceRefresh:!0}:void 0),f]).then(([e])=>{if(t.getGeneration()!==C||!1===a?.isCurrent?.())return!1;const o=Date.now()+r,i={...t.getChannelMemberProfiles()[n]??{}};for(const r of e){const e=i[r.userId];void 0!==e&&c(r.updateVersion,e.updateVersion)<0||(i[r.userId]={displayName:r.displayName,...void 0===r.avatar?{}:{avatar:r.avatar},role:r.role,...void 0===r.updateVersion?{}:{updateVersion:r.updateVersion},expiresAt:o})}return t.setChannelMemberProfiles({...t.getChannelMemberProfiles(),[n]:i}),!0}).catch(e=>(t.getGeneration()===C&&t.getDiagnostics().record("warn","chat-kit","profile","channel-members-resolve-failed",()=>({conversation:{conversationType:"channel",conversationId:n},error:{message:"解析 CHANNEL 成员资料失败",data:e}})),!1)).finally(()=>{u||p.get(v)!==G||p.delete(v)});return u||p.set(v,G),G}function G(e,r,t={}){const n=r.body.system;if("system"!==r.contentType||"group_member_renamed"!==n?.eventType)return;const o=new Set((t.preserveUserIds??[]).map(e=>e.trim()).filter(Boolean));for(const t of n.targetUserIds??[]){const n=t.trim();o.has(n)||g(e,r.conversationId,n)}h(e,r.conversationId,{forceRefresh:!0})}function k(e,r,t){const n={};for(const e of t)""!==e.nickName&&(n[e.userId]=e.nickName);e.setGroupMemberNames({...e.getGroupMemberNames(),[r]:m(e,r,n)})}function P(e,r,t,n){const o=r.trim(),a=t.trim();if(""===o||""===a)return;const i=n.trim(),s=f(e),c=s.groups.get(o)??/* @__PURE__ */new Map;c.set(a,i),s.groups.set(o,c);const l=e.getGroupMemberNames()[o];if(void 0===l)return;const u={...l};""===i?delete u[a]:u[a]=i,e.setGroupMemberNames({...e.getGroupMemberNames(),[o]:u})}function b(e,r,t={}){const n=r.trim();if(""===n)return;if(g(e,n),!0!==t.clearCachedNames)return;const o=e.getGroupMemberNames();if(void 0===o[n])return;const a={...o};delete a[n],e.setGroupMemberNames(a)}function M(e){const r=e.getClient(),t=e.getCredentials().userId;if(""===t||null===r||void 0!==e.getSenderProfileCache()[t])return;const n=e.getGeneration();r.contact.getProfile(t).then(r=>{if(null===r||e.getGeneration()!==n)return;const o=u(r.remark),a=u(r.nickname),i=u(r.avatar);""===o&&""===a&&""===i||void 0!==e.getSenderProfileCache()[t]||e.setSenderProfileCache({...e.getSenderProfileCache(),[t]:{remark:o,nickname:a,avatar:i}})}).catch(r=>{e.getGeneration()===n&&p(e,"self-profile-prefetch-failed",r,{userId:t})})}async function y(e,r){const t=e.getClient();if(null===t)return;const n=e.getGeneration(),o=[],a=[];for(const i of r){const r=i.userId;void 0===e.getSenderProfileCache()[r]&&o.push((async()=>{let o;try{o=await t.contact.peekProfile(r)}catch(t){return void(e.getGeneration()===n&&p(e,"member-avatar-prefetch-failed",t,{userId:r}))}if(null===o||e.getGeneration()!==n)return;const i=u(o.value.remark),s=u(o.value.nickname),c=u(o.value.avatar);""===i&&""===s&&""===c||void 0!==e.getSenderProfileCache()[r]||e.setSenderProfileCache({...e.getSenderProfileCache(),[r]:{remark:i,nickname:s,avatar:c}}),o.stale&&a.push(r)})())}await Promise.allSettled(o),e.getGeneration()===n&&S(e,a,void 0)}async function N(e,t,n,o){const a=e.getClient();if(null===a)return;const i=e.getCredentials().userId,s=e.getGeneration(),l=[],d=[];let f=!1;const g=t[0]?.conversationType;"group"===g&&void 0===e.getGroupMemberNames()[n]&&l.push((async()=>{let r;try{r=await a.group.peekMemberNames(n)}catch(r){return void(e.getGeneration()===s&&p(e,"group-member-name-prefetch-failed",r,{groupId:n}))}null!==r&&e.getGeneration()===s&&(void 0===e.getGroupMemberNames()[n]&&e.setGroupMemberNames({...e.getGroupMemberNames(),[n]:m(e,n,r.value)}),r.stale&&(f=!0))})());const v=[...new Set(t.map(e=>e.senderId).filter(e=>""!==e&&"system"!==e&&e!==i))];"channel"===g&&v.length>0&&l.push((async()=>{let t;try{t=await a.channel.getMembersByIds(n,v)}catch(r){return void(e.getGeneration()===s&&p(e,"channel-member-prefetch-failed",r,{conversation:{conversationType:"channel",conversationId:n}}))}if(e.getGeneration()!==s||!1===o?.isCurrent?.())return;const i=Date.now()+r,l={...e.getChannelMemberProfiles()[n]??{}};for(const e of t){const r=l[e.userId];void 0!==r&&c(e.updateVersion,r.updateVersion)<0||(l[e.userId]={displayName:e.displayName,...void 0===e.avatar?{}:{avatar:e.avatar},role:e.role,...void 0===e.updateVersion?{}:{updateVersion:e.updateVersion},expiresAt:i})}e.setChannelMemberProfiles({...e.getChannelMemberProfiles(),[n]:l})})());for(const r of v)void 0===e.getSenderProfileCache()[r]&&l.push((async()=>{let t;try{t=await a.contact.peekProfile(r)}catch(t){return void(e.getGeneration()===s&&p(e,"sender-profile-prefetch-failed",t,{userId:r}))}if(null===t||e.getGeneration()!==s)return;const n=u(t.value.remark),o=u(t.value.nickname),i=u(t.value.avatar);""===n&&""===o&&""===i||void 0!==e.getSenderProfileCache()[r]||e.setSenderProfileCache({...e.getSenderProfileCache(),[r]:{remark:n,nickname:o,avatar:i}}),t.stale&&d.push(r)})());await Promise.allSettled(l),e.getGeneration()===s&&S(e,d,f?n:void 0)}function S(e,r,t){const n=e.getClient();if(null===n)return;const a=e.getGeneration();void 0!==t&&n.group.getMemberNames(t,{forceRefresh:!0}).then(r=>{null!==r&&e.getGeneration()===a&&e.setGroupMemberNames({...e.getGroupMemberNames(),[t]:m(e,t,r,{reconcile:!0})})}).catch(r=>{e.getGeneration()===a&&p(e,"group-member-name-refresh-failed",r,{groupId:t})});for(const t of r){const r=o(e,t,!0);n.contact.getProfile(t,{forceRefresh:!0}).then(n=>{if(null===n||!r.isCurrent())return;const o=e.getSenderProfileCache()[t],a=d(t,n,o);void 0!==o&&o.remark===a.remark&&o.nickname===a.nickname&&o.avatar===a.avatar||r.commit(a)}).catch(n=>{r.isCurrent()&&p(e,"sender-profile-refresh-failed",n,{userId:t})}).finally(()=>r.finish())}}export{P as applyGroupMemberNickname,G as applyGroupMemberRename,k as applyMemberNames,o as beginSenderProfileUpdate,b as clearGroupMemberNicknameProjection,M as ensureSelfProfile,N as prewarmActiveSenders,y as prewarmMemberAvatars,S as refreshStaleSenders,C as resolveChannelMembers,h as resolveGroupMembers,v as resolveSenderName};
|
|
1
|
+
import{ensureBoundRobotSenderProfiles as e}from"./robot-sender-profile.js";const r=3e5,t=/* @__PURE__ */new WeakMap,n=/* @__PURE__ */new WeakMap;function o(e,r,t=!1){const o=e.getGeneration();let a=n.get(e);void 0!==a&&a.generation===o||(a={generation:o,tokens:/* @__PURE__ */new Map},n.set(e,a));const i=a.tokens.get(r),s=!t&&void 0!==i&&i.readers>0?i:{readers:0};s.readers+=1,a.tokens.set(r,s);const c=()=>e.getGeneration()===o&&a.tokens.get(r)===s;return{isCurrent:c,finish(){s.readers-=1},commit:t=>!!c()&&(e.setSenderProfileCache({...e.getSenderProfileCache(),[r]:t}),!0)}}const a=/* @__PURE__ */new WeakMap,i=/* @__PURE__ */new WeakMap;function s(e,r){const t=r.getGeneration();let n=e.get(r);return void 0!==n&&n.generation===t||(n={generation:t,tasks:/* @__PURE__ */new Map},e.set(r,n)),n.tasks}function c(e,r){return void 0===e?void 0===r?0:-1:void 0===r?1:e.length!==r.length?e.length>r.length?1:-1:e===r?0:e>r?1:-1}const l=/* @__PURE__ */new WeakMap;function u(e){return(e??"").trim()}function d(e,r,t){const n=u(r.nickname),o=u(r.avatar);return"robot-directory"===t?.source?{source:"robot-directory",remark:u(r.remark),nickname:""!==n&&n!==e?n:t.nickname,avatar:""!==o?o:t.avatar}:{remark:u(r.remark),nickname:n,avatar:o}}function f(e){let r=l.get(e);const t=e.getGeneration();return void 0!==r&&r.generation===t||(r={generation:t,groups:/* @__PURE__ */new Map},l.set(e,r)),r}function m(e,r,t,n={}){const o=f(e).groups.get(r);if(void 0===o||0===o.size)return t;const a={...t};for(const[e,r]of o){const i=t[e];(""===r?void 0===i:i===r)&&!0===n.reconcile?o.delete(e):""===r?delete a[e]:a[e]=r}return 0===o.size&&f(e).groups.delete(r),a}function g(e,r,t){const n=f(e).groups.get(r);void 0!==n&&(void 0!==t?(n.delete(t.trim()),0===n.size&&f(e).groups.delete(r)):f(e).groups.delete(r))}function p(e,r,t,n){e.getDiagnostics().record("warn","chat-kit","profile",r,()=>({...void 0===n?{}:{data:n},error:{message:"资料预热失败",data:t}}))}function v(e,r,n){const a=e.getClient(),i=e.getCredentials().userId;if(""===r||"system"===r||r===i||null===a)return Promise.resolve(!1);const c=!0===n?.forceRefresh,l=s(t,e),u=c?void 0:l.get(r);if(void 0!==u)return u;const f=e.getSenderProfileCache();if(!c&&void 0!==f[r])return Promise.resolve(!0);void 0===f[r]&&e.setSenderProfileCache({...f,[r]:{remark:"",nickname:"",avatar:""}});const m=o(e,r,c),g=a.contact.getProfile(r,c?{forceRefresh:!0}:void 0).then(t=>{if(!m.isCurrent())return!1;if(null===t){const t=e.getSenderProfileCache()[r];if(""===t?.remark&&""===t.nickname&&""===t.avatar){const t={...e.getSenderProfileCache()};delete t[r],e.setSenderProfileCache(t)}return!0}return m.commit(d(r,t,e.getSenderProfileCache()[r])),!0}).catch(t=>{if(!m.isCurrent())return!1;const n=e.getSenderProfileCache()[r];if(!c&&""===n?.remark&&""===n.nickname&&""===n.avatar&&void 0===n.source){const t={...e.getSenderProfileCache()};delete t[r],e.setSenderProfileCache(t)}return e.getDiagnostics().record("warn","chat-kit","profile","sender-profile-resolve-failed",()=>({data:{userId:r},error:{message:"解析发送者资料失败",data:t}})),!1}).finally(()=>{m.finish(),l.get(r)===g&&l.delete(r)});return l.set(r,g),g}function h(r,t,n){const o=r.getClient();if(""===t||null===o)return Promise.resolve(!1);const i=!0===n?.forceRefresh,c=s(a,r),l=i?void 0:c.get(t);if(void 0!==l)return l;const u=r.getGroupMemberNames(),d=r.getGeneration(),f=e(r,"group",t,{forceRefresh:i,isCurrent:()=>r.getGeneration()===d});if(!i&&void 0!==u[t])return f.then(()=>!0);const g=void 0!==u[t];g||r.setGroupMemberNames({...u,[t]:{}});const v=d,h=()=>{if(g||r.getGeneration()!==v)return;const e={...r.getGroupMemberNames()};delete e[t],r.setGroupMemberNames(e)},C=Promise.all([o.group.getMemberNames(t,{forceRefresh:i}),f]).then(([e])=>r.getGeneration()===v&&(null===e?(h(),!1):(r.setGroupMemberNames({...r.getGroupMemberNames(),[t]:m(r,t,e,{reconcile:!0})}),!0))).catch(e=>(h(),r.getGeneration()===v&&p(r,"group-member-name-resolve-failed",e,{groupId:t}),!1)).finally(()=>{i||c.get(t)!==C||c.delete(t)});return i||c.set(t,C),C}function C(t,n,o,a){const l=t.getClient();if(null===l||""===n||!1===a?.isCurrent?.())return Promise.resolve(!1);const u=!0===a?.forceRefresh,d=t.getGeneration(),f=e(t,"channel",n,{forceRefresh:u,isCurrent:()=>t.getGeneration()===d&&!1!==a?.isCurrent?.()}),m=t.getChannelMemberProfiles()[n]??{},g=[...new Set(o.map(e=>e.trim()).filter(e=>""!==e&&"system"!==e))].filter(e=>u||void 0===m[e]||m[e].expiresAt<=Date.now());if(0===g.length)return f.then(()=>!0);const p=s(i,t),v=`${n}:${[...g].sort().join(",")}`,h=u?void 0:p.get(v);if(void 0!==h)return h;const C=d,G=Promise.all([l.channel.getMembersByIds(n,g,u?{forceRefresh:!0}:void 0),f]).then(([e])=>{if(t.getGeneration()!==C||!1===a?.isCurrent?.())return!1;const o=Date.now()+r,i={...t.getChannelMemberProfiles()[n]??{}};for(const r of e){const e=i[r.userId];void 0!==e&&c(r.updateVersion,e.updateVersion)<0||(i[r.userId]={displayName:r.displayName,...void 0===r.avatar?{}:{avatar:r.avatar},role:r.role,...void 0===r.updateVersion?{}:{updateVersion:r.updateVersion},expiresAt:o})}return t.setChannelMemberProfiles({...t.getChannelMemberProfiles(),[n]:i}),!0}).catch(e=>(t.getGeneration()===C&&t.getDiagnostics().record("warn","chat-kit","profile","channel-members-resolve-failed",()=>({conversation:{conversationType:"channel",conversationId:n},error:{message:"解析 CHANNEL 成员资料失败",data:e}})),!1)).finally(()=>{u||p.get(v)!==G||p.delete(v)});return u||p.set(v,G),G}function G(e,r,t={}){const n=r.body.system;if("system"!==r.contentType||"group_member_renamed"!==n?.eventType)return;const o=new Set((t.preserveUserIds??[]).map(e=>e.trim()).filter(Boolean));for(const t of n.targetUserIds??[]){const n=t.trim();o.has(n)||g(e,r.conversationId,n)}h(e,r.conversationId,{forceRefresh:!0})}function k(e,r,t){const n={};for(const e of t)""!==e.nickName&&(n[e.userId]=e.nickName);e.setGroupMemberNames({...e.getGroupMemberNames(),[r]:m(e,r,n)})}function P(e,r,t,n){const o=r.trim(),a=t.trim();if(""===o||""===a)return;const i=n.trim(),s=f(e),c=s.groups.get(o)??/* @__PURE__ */new Map;c.set(a,i),s.groups.set(o,c);const l=e.getGroupMemberNames()[o];if(void 0===l)return;const u={...l};""===i?delete u[a]:u[a]=i,e.setGroupMemberNames({...e.getGroupMemberNames(),[o]:u})}function b(e,r,t={}){const n=r.trim();if(""===n)return;if(g(e,n),!0!==t.clearCachedNames)return;const o=e.getGroupMemberNames();if(void 0===o[n])return;const a={...o};delete a[n],e.setGroupMemberNames(a)}function M(e){const r=e.getClient(),t=e.getCredentials().userId;if(""===t||null===r||void 0!==e.getSenderProfileCache()[t])return;const n=e.getGeneration();r.contact.getProfile(t).then(r=>{if(null===r||e.getGeneration()!==n)return;const o=u(r.remark),a=u(r.nickname),i=u(r.avatar);""===o&&""===a&&""===i||void 0!==e.getSenderProfileCache()[t]||e.setSenderProfileCache({...e.getSenderProfileCache(),[t]:{remark:o,nickname:a,avatar:i}})}).catch(r=>{e.getGeneration()===n&&p(e,"self-profile-prefetch-failed",r,{userId:t})})}async function y(e,r){const t=e.getClient();if(null===t)return;const n=e.getGeneration(),o=[],a=[];for(const i of r){const r=i.userId;void 0===e.getSenderProfileCache()[r]&&o.push((async()=>{let o;try{o=await t.contact.peekProfile(r)}catch(t){return void(e.getGeneration()===n&&p(e,"member-avatar-prefetch-failed",t,{userId:r}))}if(null===o||e.getGeneration()!==n)return;const i=u(o.value.remark),s=u(o.value.nickname),c=u(o.value.avatar);""===i&&""===s&&""===c||void 0!==e.getSenderProfileCache()[r]||e.setSenderProfileCache({...e.getSenderProfileCache(),[r]:{remark:i,nickname:s,avatar:c}}),o.stale&&a.push(r)})())}await Promise.allSettled(o),e.getGeneration()===n&&S(e,a,void 0)}async function N(e,t,n,o){const a=e.getClient();if(null===a)return;const i=e.getCredentials().userId,s=e.getGeneration(),l=[],d=[];let f=!1;const g=t[0]?.conversationType;"group"===g&&void 0===e.getGroupMemberNames()[n]&&l.push((async()=>{let r;try{r=await a.group.peekMemberNames(n)}catch(r){return void(e.getGeneration()===s&&p(e,"group-member-name-prefetch-failed",r,{groupId:n}))}null!==r&&e.getGeneration()===s&&(void 0===e.getGroupMemberNames()[n]&&e.setGroupMemberNames({...e.getGroupMemberNames(),[n]:m(e,n,r.value)}),r.stale&&(f=!0))})());const v=[...new Set(t.map(e=>e.senderId).filter(e=>""!==e&&"system"!==e&&e!==i))];"channel"===g&&v.length>0&&l.push((async()=>{let t;try{t=await a.channel.getMembersByIds(n,v)}catch(r){return void(e.getGeneration()===s&&p(e,"channel-member-prefetch-failed",r,{conversation:{conversationType:"channel",conversationId:n}}))}if(e.getGeneration()!==s||!1===o?.isCurrent?.())return;const i=Date.now()+r,l={...e.getChannelMemberProfiles()[n]??{}};for(const e of t){const r=l[e.userId];void 0!==r&&c(e.updateVersion,r.updateVersion)<0||(l[e.userId]={displayName:e.displayName,...void 0===e.avatar?{}:{avatar:e.avatar},role:e.role,...void 0===e.updateVersion?{}:{updateVersion:e.updateVersion},expiresAt:i})}e.setChannelMemberProfiles({...e.getChannelMemberProfiles(),[n]:l})})());for(const r of v)void 0===e.getSenderProfileCache()[r]&&l.push((async()=>{let t;try{t=await a.contact.peekProfile(r)}catch(t){return void(e.getGeneration()===s&&p(e,"sender-profile-prefetch-failed",t,{userId:r}))}if(null===t||e.getGeneration()!==s)return;const n=u(t.value.remark),o=u(t.value.nickname),i=u(t.value.avatar);""===n&&""===o&&""===i||void 0!==e.getSenderProfileCache()[r]||e.setSenderProfileCache({...e.getSenderProfileCache(),[r]:{remark:n,nickname:o,avatar:i}}),t.stale&&d.push(r)})());await Promise.allSettled(l),e.getGeneration()===s&&S(e,d,f?n:void 0)}function S(e,r,t){const n=e.getClient();if(null===n)return;const a=e.getGeneration();void 0!==t&&n.group.getMemberNames(t,{forceRefresh:!0}).then(r=>{null!==r&&e.getGeneration()===a&&e.setGroupMemberNames({...e.getGroupMemberNames(),[t]:m(e,t,r,{reconcile:!0})})}).catch(r=>{e.getGeneration()===a&&p(e,"group-member-name-refresh-failed",r,{groupId:t})});for(const t of r){const r=o(e,t,!0);n.contact.getProfile(t,{forceRefresh:!0}).then(n=>{if(null===n||!r.isCurrent())return;const o=e.getSenderProfileCache()[t],a=d(t,n,o);void 0!==o&&o.remark===a.remark&&o.nickname===a.nickname&&o.avatar===a.avatar||r.commit(a)}).catch(n=>{r.isCurrent()&&p(e,"sender-profile-refresh-failed",n,{userId:t})}).finally(()=>r.finish())}}export{P as applyGroupMemberNickname,G as applyGroupMemberRename,k as applyMemberNames,o as beginSenderProfileUpdate,b as clearGroupMemberNicknameProjection,M as ensureSelfProfile,N as prewarmActiveSenders,y as prewarmMemberAvatars,S as refreshStaleSenders,C as resolveChannelMembers,h as resolveGroupMembers,v as resolveSenderName};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=/* @__PURE__ */new WeakMap;function t(t,o,
|
|
1
|
+
const e=/* @__PURE__ */new WeakMap;function t(t,r,o,n){const i=o.trim();if(""===i||!1===n?.isCurrent?.())return Promise.resolve(!1);const s=function(e){const t=e.getClient();if(null!==t){if(void 0!==t.robots)return t.robots;if(void 0!==t.conversations&&void 0!==t.media&&void 0!==t.session)return e.getProductClient()?.robots}}(t);if(void 0===s)return Promise.resolve(!0);const a=t.getGeneration(),c=()=>t.getGeneration()===a&&!1!==n?.isCurrent?.(),d=function(t){let r=e.get(t);return void 0===r&&(r=/* @__PURE__ */new Map,e.set(t,r)),r}(t),u=`${a}\0${r}\0${i}`,v=d.get(u);if(!0!==n?.forceRefresh&&void 0!==v&&v.isCurrent()&&(0===v.expiresAt||v.expiresAt>Date.now()))return v.task;const f=async function(e,t,r,o){const n=[];let i=await e.listFirstPage({scope:{kind:"conversation",conversationType:t,conversationId:r,filter:"bound"},pageSize:100});n.push(...i.items);let s=1;for(;!i.exhausted&&void 0!==i.nextPageToken&&s<10;){if(!o())return;i=await e.listNextPage(i.nextPageToken),n.push(...i.items),s+=1}return n}(s,r,i,c).then(e=>void 0!==e&&c()&&d.get(u)?.task===f?(function(e,t){const r={...e.getSenderProfileCache()};let o=!1;for(const e of t){const t=e.id.trim(),n=e.displayName.trim();if(""===t||""===n||n===t)continue;const i=r[t],s=void 0!==i&&""!==i.nickname&&i.nickname!==t?i.nickname:n,a=void 0!==i&&""!==i.avatar?i.avatar:e.avatarUrl??"";"robot-directory"===i?.source&&i.nickname===s&&i.avatar===a||(r[t]={source:"robot-directory",remark:i?.remark??"",nickname:s,avatar:a},o=!0)}o&&e.setSenderProfileCache(r)}(t,e),d.set(u,{expiresAt:Date.now()+3e5,task:Promise.resolve(!0),isCurrent:c}),!0):(d.get(u)?.task===f&&d.delete(u),!1)).catch(e=>(d.get(u)?.task===f&&d.delete(u),t.getGeneration()===a&&t.getDiagnostics().record("warn","chat-kit","profile","bound-robot-profiles-resolve-failed",()=>({conversation:{conversationType:r,conversationId:i},error:{message:"解析已绑定机器人名称失败",data:e}})),!1));return d.set(u,{expiresAt:0,task:f,isCurrent:c}),f}export{t as ensureBoundRobotSenderProfiles};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{encodeConversationKey as e}from"../conversation-identity.js";import{assertOutgoingContentBodyMatchesType as t}from"../mapping/content-body.js";import{normalizeStoredVideoBody as n}from"../mapping/video-body.js";import{createDefaultSendStrategyRegistry as o}from"../message-flow/send/send-strategy-registry.js";import{classifyAckFailure as s}from"../mapping/message-mapper.js";import{computeSortKey as r,computeMessageSortKey as a,resolveMessageTimestamp as i}from"../mapping/sort.js";import{describeUnsupportedConversation as d}from"../message-flow/conversation-support.js";import{newClientMessageId as c}from"../mapping/message-id.js";const u=/* @__PURE__ */new Set([32768,0]),p=/* @__PURE__ */new Set([33281,33299]),l=33298,y=/* @__PURE__ */new Set([...p,l]);function f(e){if(e instanceof Uint8Array)return e.slice();if(Array.isArray(e))return e.map(e=>f(e));if(null!==e&&"object"==typeof e){const t={};for(const[n,o]of Object.entries(e))t[n]=f(o);return t}return e}function v(e){return f(e)}function g(e){return f(e)}function m(m,b={}){const I=b.ackTimeoutMs??3e4,T=b.maxAttempts??5,h=m.now??(()=>Date.now()),M=m.sendStrategies??o(),w=/* @__PURE__ */new Map,S=/* @__PURE__ */new Map,A=/* @__PURE__ */new Map,x=/* @__PURE__ */new Map;let C=0;const E=/* @__PURE__ */new Set,k=/* @__PURE__ */new Map,q=/* @__PURE__ */new Set,O=/* @__PURE__ */new Set,F=/* @__PURE__ */new Set,j=/* @__PURE__ */new Map;function P(t){return e(t)}function R(e,t){return e.createdAt!==t.createdAt?e.createdAt-t.createdAt:e.id<t.id?-1:e.id>t.id?1:0}function U(e){const t=P(e),n=S.get(t);if(void 0!==n)return n;let o=0;for(const t of m.domainState.getMessagesByConversation({conversationType:e.conversationType,conversationId:e.conversationId}))o=Math.max(o,i(t));for(const e of w.values())P(e)===t&&(o=Math.max(o,e.createdAt));return S.set(t,o),o}function K(e,t){const n=P(e);t>(S.get(n)??U(e))&&S.set(n,t)}function D(e){const t=U(e),n=Math.max(h(),t+1);return S.set(P(e),n),{id:c(),createdAt:n}}function N(e,t){m.onUpdated?.({messageId:e.id,conversation:{conversationType:e.conversationType,conversationId:e.conversationId},state:t,...void 0===e.lastError?{}:{failure:{reason:e.lastError.reason,retryable:e.lastError.retryable}}})}function $(e){void 0!==m.storage&&m.storage.saveOutboxMessage(v(e)).catch(e=>m.onStorageError?.("Outbox 落盘失败",e))}function B(e){void 0!==m.storage&&m.storage.removeOutboxMessage(e).catch(e=>m.onStorageError?.("Outbox 删除失败",e))}function L(e){const t=A.get(e);void 0!==t&&(clearTimeout(t),A.delete(e))}function z(e,t,n){const o=!0===n?.authoritativeFailure?{authoritativeOutboxFailure:!0}:void 0,s=n?.entry??w.get(e);if(void 0===s)return;const i=m.domainState.getConversationMessage(s,e);if(void 0!==i)return void m.domainState.upsertMessages([{...i,...t}],"live",o);const d={...{id:s.id,conversationId:s.conversationId,conversationType:s.conversationType,senderId:m.getSelfId(),contentType:s.contentType,body:g(s.body),createdAt:s.createdAt,sortKey:r(s.createdAt,s.id),status:s.status,receipt:"unread",encryption:f(s.encryption),failure:void 0===s.lastError?void 0:f(s.lastError),...void 0!==s.mention?{mention:f(s.mention)}:{},...void 0!==s.refMessageId?{refMessageId:s.refMessageId}:{}},...t};m.domainState.upsertMessages([{...d,sortKey:a(d)}],"live",o)}function G(e,t){L(e);const n=w.get(e);void 0!==n&&(n.status="failed",n.lastError=t,z(e,{status:"failed",failure:t}),$(n),N(n,"failed"),J(e))}async function H(e){if(x.has(e.id))return;if(E.has(P(e)))return void G(e.id,{code:-4,reason:"unknown",displayCode:"unknown",message:"会话成员关系已终止,消息不会继续发送",retryable:!1});const t=/* @__PURE__ */Symbol("outbox-dispatch");x.set(e.id,t);const n=C;try{const t=M.resolve(e.conversationType);if(void 0===t)return void G(e.id,{code:-3,reason:"unsupported",displayCode:"conversationUnsupported",params:{type:e.conversationType},message:d(e.conversationType,"outbox.dispatch"),retryable:!1});let o;try{const s={selfId:m.getSelfId(),crypto:m.crypto,resolveEncryptionKey:m.resolvePublicKey},r=void 0===t.buildOutgoingFrames?t.buildOutgoingFrame(e,s):t.buildOutgoingFrames(e,s);if(r instanceof Uint8Array)o=[r];else if(Array.isArray(r))o=r;else{const e=await r;o=e instanceof Uint8Array?[e]:e}if(n!==C)return;if(0===o.length||o.some(e=>!(e instanceof Uint8Array)))throw new Error(`发送策略返回了非法帧序列(conversationType=${e.conversationType})`)}catch{if(n!==C)return;return e.attempts+=1,void G(e.id,{code:-2,reason:"unknown"})}if(E.has(P(e)))return void G(e.id,{code:-4,reason:"unknown",displayCode:"unknown",message:"会话成员关系已终止,消息不会继续发送",retryable:!1});if(!m.isAuthenticated())return e.status="pending",z(e.id,{status:"pending"}),$(e),void N(e,"queued");e.status="sending",e.attempts+=1,z(e.id,{status:"sending"}),$(e),N(e,"sending");for(const e of o)m.sendFrame(e);L(e.id),A.set(e.id,setTimeout(()=>G(e.id,{code:-1,reason:"timeout"}),I))}finally{x.get(e.id)===t&&x.delete(e.id)}}function J(e){const t=j.get(e);void 0!==t&&(j.delete(e),t())}function Q(e){const t=w.get(e);return void 0===t||"sending"!==t.status?Promise.resolve():new Promise(t=>j.set(e,t))}function V(e){return("pending"===e.status||"failed"===e.status)&&!("failed"===e.status&&!1===e.lastError?.retryable)&&"manual"!==e.resumePolicy&&(e.attempts<T||O.has(e.id))&&void 0!==M.resolve(e.conversationType)}function W(e,t){let n;for(const o of w.values())!t.has(o.id)&&P(o)===e&&V(o)&&(void 0===n||R(o,n)<0)&&(n=o);return n}function X(e,t=!1){const n=P(e);t&&F.add(n),k.has(n)?q.add(n):Y(n)}async function Y(e){const t=/* @__PURE__ */Symbol("outbox-drain"),n=C;k.set(e,t);try{do{q.delete(e);const t=/* @__PURE__ */new Set;for(;n===C&&m.isAuthenticated();){const o=W(e,t);if(void 0===o)break;if(t.add(o.id),O.delete(o.id),await H(o),n!==C)return;F.has(e)&&await Q(o.id)}}while(n===C&&q.has(e)&&m.isAuthenticated())}finally{k.get(e)===t&&(k.delete(e),F.delete(e))}}function Z(e,t=!1){t&&F.add(e),k.has(e)?q.add(e):Y(e)}function _(e){const t={code:-2,reason:"unknown",displayCode:"sendCanceled",retryable:!1};e.lastError=t,z(e.id,{status:"failed",failure:t}),O.delete(e.id),w.delete(e.id),B(e.id),N(e,"canceled"),J(e.id)}return{allocateMessageIdentity:D,enqueueText(e){const{id:t,createdAt:n}=D(e),o={encrypted:e.encrypted??!1},s=void 0!==M.resolve(e.conversationType),a=s&&m.isAuthenticated(),i={id:t,conversationId:e.conversationId,conversationType:e.conversationType,senderId:m.getSelfId(),contentType:"text",body:{text:e.text},createdAt:n,sortKey:r(n,t),status:"pending",receipt:"unread",encryption:f(o),...void 0!==e.mention?{mention:f(e.mention)}:{},...void 0!==e.refMessageId?{refMessageId:e.refMessageId}:{}},c={id:t,conversationId:e.conversationId,conversationType:e.conversationType,contentType:"text",body:{text:e.text},encryption:f(o),status:"pending",attempts:0,createdAt:n,...void 0!==e.mention?{mention:f(e.mention)}:{},...void 0!==e.refMessageId?{refMessageId:e.refMessageId}:{}};return w.set(t,c),$(c),N(c,"queued"),m.domainState.upsertMessages([i],"live",{newOutgoing:!0}),s?(a&&X(c),v(c)):(G(t,{code:-3,reason:"unsupported",displayCode:"conversationUnsupported",params:{type:e.conversationType},message:d(e.conversationType,"outbox.enqueueText"),retryable:!1}),v(c))},enqueueContact(e){const t=e.contact.targetId.trim(),n=e.contact.displayName.trim();if(""===t)throw new Error("outbox.enqueueContact: targetId 不能为空");if(""===n)throw new Error("outbox.enqueueContact: displayName 不能为空");if("individual"!==e.contact.kind&&"group"!==e.contact.kind&&"channel"!==e.contact.kind)throw new Error(`outbox.enqueueContact: 不支持发送 ${String(e.contact.kind)} 名片`);const{id:o,createdAt:s}=D(e),a={encrypted:e.encrypted??!1},i=void 0!==M.resolve(e.conversationType),c=i&&m.isAuthenticated(),u={contact:{...e.contact,targetId:t,displayName:n}},p={id:o,conversationId:e.conversationId,conversationType:e.conversationType,senderId:m.getSelfId(),contentType:"contact",body:g(u),createdAt:s,sortKey:r(s,o),status:"pending",receipt:"unread",encryption:f(a),...void 0===e.refMessageId?{}:{refMessageId:e.refMessageId}},l={id:o,conversationId:e.conversationId,conversationType:e.conversationType,contentType:"contact",body:g(u),encryption:f(a),status:"pending",attempts:0,createdAt:s,...void 0===e.refMessageId?{}:{refMessageId:e.refMessageId}};return w.set(o,l),$(l),N(l,"queued"),m.domainState.upsertMessages([p],"live",{newOutgoing:!0}),i?(c&&X(l),v(l)):(G(o,{code:-3,reason:"unsupported",displayCode:"conversationUnsupported",params:{type:e.conversationType},message:d(e.conversationType,"outbox.enqueueContact"),retryable:!1}),v(l))},enqueueMedia(e){const{id:n,createdAt:o}=e,s=g(e.body);t(e.contentType,s,"outbox.enqueueMedia"),K(e,o);const a=void 0!==M.resolve(e.conversationType),i=a&&m.isAuthenticated(),c={id:n,conversationId:e.conversationId,conversationType:e.conversationType,senderId:m.getSelfId(),contentType:e.contentType,body:g(s),createdAt:o,sortKey:r(o,n),status:"pending",receipt:"unread",encryption:f(e.encryption),...void 0!==e.mention?{mention:f(e.mention)}:{},...void 0!==e.refMessageId?{refMessageId:e.refMessageId}:{}},u={id:n,conversationId:e.conversationId,conversationType:e.conversationType,contentType:e.contentType,body:s,encryption:f(e.encryption),status:"pending",attempts:0,createdAt:o,...void 0!==e.mention?{mention:f(e.mention)}:{},...void 0!==e.refMessageId?{refMessageId:e.refMessageId}:{}};return w.set(n,u),$(u),N(u,"queued"),m.domainState.upsertMessages([c],"live",{newOutgoing:!0!==e.optimisticAlreadyCreated}),a?(i&&X(u),v(u)):(G(n,{code:-3,reason:"unsupported",displayCode:"conversationUnsupported",params:{type:e.conversationType},message:d(e.conversationType,"outbox.enqueueMedia"),retryable:!1}),X(u,!0),v(u))},onChatAck(e){L(e.id);const t=w.get(e.id);if(void 0!==t)if(u.has(e.errcode))w.delete(e.id),B(e.id),z(e.id,{status:"sent",serverTime:e.serverTime>0?e.serverTime:void 0,...void 0===e.extensions?{}:{extensions:{...m.domainState.getConversationMessage(t,e.id)?.extensions,...e.extensions}}},{entry:t}),N(t,"sent"),J(e.id);else{t.status="failed",t.lastError=e.failure??s(e.errcode);const n="direct"===t.conversationType&&p.has(e.errcode),o="direct"===t.conversationType&&e.errcode===l;n?t.lastError={...t.lastError,displayCode:"contactRequired",retryable:!1}:o&&(t.lastError={...t.lastError,displayCode:"messageRefused",retryable:!1}),z(e.id,{status:"failed",failure:t.lastError},{authoritativeFailure:!0}),n?m.domainState.appendDirectContactRequiredNotice(t.conversationId,t.id):o&&m.domainState.appendDirectMessageRefusedNotice(t.conversationId,t.id),$(t),N(t,"failed"),J(e.id)}else u.has(e.errcode)||function(e){if(!y.has(e.errcode))return;const t=m.getSelfId(),n=m.domainState.getMessagesById(e.id).filter(e=>"direct"===e.conversationType&&e.senderId===t);if(n.length>1)throw new Error(`DIRECT 终态 ACK 消息 ID 存在多会话歧义:${e.id}`);const o=n[0];if(void 0===o)return;const r=p.has(e.errcode),a=e.errcode===l;let i=e.failure??s(e.errcode);r?i={...i,displayCode:"contactRequired",retryable:!1}:a&&(i={...i,displayCode:"messageRefused",retryable:!1}),m.domainState.upsertMessages([{...o,status:"failed",failure:i}],"live",{authoritativeOutboxFailure:!0}),r?m.domainState.appendDirectContactRequiredNotice(o.conversationId,o.id):a&&m.domainState.appendDirectMessageRefusedNotice(o.conversationId,o.id)}(e)},onAuthenticated(){!function(){const e=/* @__PURE__ */new Set;for(const t of w.values())V(t)&&e.add(P(t));for(const t of e)Z(t,!0)}()},retry(e){const t=w.get(e);return void 0===t?{accepted:!1,reason:"not-found"}:"sending"===t.status||x.has(e)?{accepted:!1,reason:"in-flight"}:"failed"===t.status&&!1===t.lastError?.retryable?{accepted:!1,reason:"not-retryable"}:"failed"===t.status||"pending"===t.status&&"manual"===t.resumePolicy?("manual"===t.resumePolicy&&(t.resumePolicy="automatic",$(t)),O.add(t.id),X(t),{accepted:!0}):{accepted:!1,reason:"invalid-state"}},cancel(e){const t=w.get(e);return void 0===t?{accepted:!1,reason:"not-found"}:"sending"===t.status||x.has(e)?{accepted:!1,reason:"in-flight"}:"pending"!==t.status?{accepted:!1,reason:"invalid-state"}:t.attempts>0?{accepted:!1,reason:"delivery-uncertain"}:(_(t),{accepted:!0})},markConversationTerminated(e,t){const n=P(e);E.add(n);for(const e of[...w.values()])P(e)===n&&("pending"!==e.status||0!==e.attempts||x.has(e.id)?G(e.id,{code:-4,reason:"unknown",displayCode:"unknown",message:`会话成员关系已终止:${t}`,retryable:!1}):_(e))},clearConversationTerminated(e){const t=P(e);E.delete(t),Z(t)},markForLogout(e){for(const t of w.values())if("pending"===t.status||"sending"===t.status||"failed"===t.status){if(L(t.id),t.resumePolicy="manual","fail"===e.policy){const e={code:-2,reason:"unknown",displayCode:"sessionLoggedOut",retryable:!0};t.status="failed",t.lastError=e,z(t.id,{status:"failed",failure:e}),N(t,"failed")}$(t),J(t.id)}},getPending:()=>[...w.values()].map(v),reset(e){e?.discardInFlight&&(C+=1,x.clear(),k.clear(),q.clear(),F.clear());for(const e of[...A.keys()])L(e);for(const e of w.values())"sending"===e.status&&(e.status="pending",z(e.id,{status:"pending"}),$(e),N(e,"queued"),J(e.id))},async hydrate(e=()=>!0){if(void 0!==m.storage&&e())try{const o=await m.storage.getOutbox();if(!e())return;for(const s of o){if(!e())return;const o=v(s);if("sent"===o.status){B(o.id);continue}try{t(o.contentType,o.body,`outbox.hydrate(${o.id})`),void 0!==o.body.video&&(o.body={...o.body,video:n(o.body.video)})}catch(t){if(m.onStorageError?.(`Outbox 持久化条目正文损坏,已删除(id=${o.id})`,t),!e())return;if(B(o.id),void 0!==m.domainState.getConversationMessage(o,o.id)){const e={code:-2,reason:"unknown",displayCode:"unknown",message:"发送账本正文损坏,已停止重试",retryable:!1};z(o.id,{status:"failed",failure:e},{authoritativeFailure:!0,entry:o})}continue}const r="sending"===o.status?"pending":o.status,a={...o,status:r};if(w.set(o.id,a),K(a,a.createdAt),N(a,"pending"===r?"queued":r),!e())return;void 0!==m.domainState.getConversationMessage(o,o.id)&&z(o.id,{status:r,failure:void 0===o.lastError?void 0:f(o.lastError)})}}catch(t){e()&&m.onStorageError?.("Outbox 回读失败",t)}}}}export{m as createOutboxManager};
|
|
1
|
+
import{encodeConversationKey as e}from"../conversation-identity.js";import{assertOutgoingContentBodyMatchesType as t}from"../mapping/content-body.js";import{normalizeStoredVideoBody as n}from"../mapping/video-body.js";import{createDefaultSendStrategyRegistry as o}from"../message-flow/send/send-strategy-registry.js";import{classifyAckFailure as r}from"../mapping/message-mapper.js";import{computeSortKey as s,computeMessageSortKey as a,resolveMessageTimestamp as i}from"../mapping/sort.js";import{describeUnsupportedConversation as d}from"../message-flow/conversation-support.js";import{newClientMessageId as c}from"../mapping/message-id.js";const u=/* @__PURE__ */new Set([32768,0]),p=/* @__PURE__ */new Set([33281,33299]),l=33298,y=/* @__PURE__ */new Set([...p,l]);function f(e){if(e instanceof Uint8Array)return e.slice();if(Array.isArray(e))return e.map(e=>f(e));if(null!==e&&"object"==typeof e){const t={};for(const[n,o]of Object.entries(e))t[n]=f(o);return t}return e}function v(e){return f(e)}function g(e){return f(e)}function m(m,b={}){const I=b.ackTimeoutMs??3e4,T=b.maxAttempts??5,h=m.now??(()=>Date.now()),M=m.sendStrategies??o(),w=/* @__PURE__ */new Map,S=/* @__PURE__ */new Map,A=/* @__PURE__ */new Map,x=/* @__PURE__ */new Map;let C=0;const E=/* @__PURE__ */new Set,k=/* @__PURE__ */new Map,q=/* @__PURE__ */new Set,O=/* @__PURE__ */new Set,F=/* @__PURE__ */new Set,j=/* @__PURE__ */new Map;function P(t){return e(t)}function R(e,t){return e.createdAt!==t.createdAt?e.createdAt-t.createdAt:e.id<t.id?-1:e.id>t.id?1:0}function U(e){const t=P(e),n=S.get(t);if(void 0!==n)return n;let o=0;for(const t of m.domainState.getMessagesByConversation({conversationType:e.conversationType,conversationId:e.conversationId}))o=Math.max(o,i(t));for(const e of w.values())P(e)===t&&(o=Math.max(o,e.createdAt));return S.set(t,o),o}function K(e,t){const n=P(e);t>(S.get(n)??U(e))&&S.set(n,t)}function D(e){const t=U(e),n=Math.max(h(),t+1);return S.set(P(e),n),{id:c(),createdAt:n}}function N(e,t){m.onUpdated?.({messageId:e.id,conversation:{conversationType:e.conversationType,conversationId:e.conversationId},state:t,...void 0===e.lastError?{}:{failure:{reason:e.lastError.reason,retryable:e.lastError.retryable}}})}function $(e){void 0!==m.storage&&m.storage.saveOutboxMessage(v(e)).catch(e=>m.onStorageError?.("Outbox 落盘失败",e))}function B(e){void 0!==m.storage&&m.storage.removeOutboxMessage(e).catch(e=>m.onStorageError?.("Outbox 删除失败",e))}function L(e){const t=A.get(e);void 0!==t&&(clearTimeout(t),A.delete(e))}function z(e,t,n){const o=!0===n?.authoritativeFailure?{authoritativeOutboxFailure:!0}:void 0,r=n?.entry??w.get(e);if(void 0===r)return;const i=m.domainState.getConversationMessage(r,e);if(void 0!==i)return void m.domainState.upsertMessages([{...i,...t}],"live",o);const d={...{id:r.id,conversationId:r.conversationId,conversationType:r.conversationType,senderId:m.getSelfId(),contentType:r.contentType,body:g(r.body),createdAt:r.createdAt,sortKey:s(r.createdAt,r.id),status:r.status,receipt:"unread",encryption:f(r.encryption),failure:void 0===r.lastError?void 0:f(r.lastError),...void 0!==r.mention?{mention:f(r.mention)}:{},...void 0!==r.refMessageId?{refMessageId:r.refMessageId}:{}},...t};m.domainState.upsertMessages([{...d,sortKey:a(d)}],"live",o)}function G(e,t){L(e);const n=w.get(e);void 0!==n&&(n.status="failed",n.lastError=t,z(e,{status:"failed",failure:t}),$(n),N(n,"failed"),J(e))}async function H(e){if(x.has(e.id))return;if(E.has(P(e)))return void G(e.id,{code:-4,reason:"unknown",displayCode:"unknown",message:"会话成员关系已终止,消息不会继续发送",retryable:!1});const t=/* @__PURE__ */Symbol("outbox-dispatch");x.set(e.id,t);const n=C;try{const t=M.resolve(e.conversationType);if(void 0===t)return void G(e.id,{code:-3,reason:"unsupported",displayCode:"conversationUnsupported",params:{type:e.conversationType},message:d(e.conversationType,"outbox.dispatch"),retryable:!1});let o;try{const r={selfId:m.getSelfId(),crypto:m.crypto,resolveEncryptionKey:m.resolvePublicKey},s=void 0===t.buildOutgoingFrames?t.buildOutgoingFrame(e,r):t.buildOutgoingFrames(e,r);if(s instanceof Uint8Array)o=[s];else if(Array.isArray(s))o=s;else{const e=await s;o=e instanceof Uint8Array?[e]:e}if(n!==C)return;if(0===o.length||o.some(e=>!(e instanceof Uint8Array)))throw new Error(`发送策略返回了非法帧序列(conversationType=${e.conversationType})`)}catch{if(n!==C)return;return e.attempts+=1,void G(e.id,{code:-2,reason:"unknown"})}if(E.has(P(e)))return void G(e.id,{code:-4,reason:"unknown",displayCode:"unknown",message:"会话成员关系已终止,消息不会继续发送",retryable:!1});if(!m.isAuthenticated())return e.status="pending",z(e.id,{status:"pending"}),$(e),void N(e,"queued");e.status="sending",e.attempts+=1,z(e.id,{status:"sending"}),$(e),N(e,"sending");for(const e of o)m.sendFrame(e);L(e.id),A.set(e.id,setTimeout(()=>G(e.id,{code:-1,reason:"timeout"}),I))}finally{x.get(e.id)===t&&x.delete(e.id)}}function J(e){const t=j.get(e);void 0!==t&&(j.delete(e),t())}function Q(e){const t=w.get(e);return void 0===t||"sending"!==t.status?Promise.resolve():new Promise(t=>j.set(e,t))}function V(e){return("pending"===e.status||"failed"===e.status)&&!("failed"===e.status&&!1===e.lastError?.retryable)&&"manual"!==e.resumePolicy&&(e.attempts<T||O.has(e.id))&&void 0!==M.resolve(e.conversationType)}function W(e,t){let n;for(const o of w.values())!t.has(o.id)&&P(o)===e&&V(o)&&(void 0===n||R(o,n)<0)&&(n=o);return n}function X(e,t=!1){const n=P(e);t&&F.add(n),k.has(n)?q.add(n):Y(n)}async function Y(e){const t=/* @__PURE__ */Symbol("outbox-drain"),n=C;k.set(e,t);try{do{q.delete(e);const t=/* @__PURE__ */new Set;for(;n===C&&m.isAuthenticated();){const o=W(e,t);if(void 0===o)break;if(t.add(o.id),O.delete(o.id),await H(o),n!==C)return;F.has(e)&&await Q(o.id)}}while(n===C&&q.has(e)&&m.isAuthenticated())}finally{k.get(e)===t&&(k.delete(e),F.delete(e))}}function Z(e,t=!1){t&&F.add(e),k.has(e)?q.add(e):Y(e)}function _(e){const t={code:-2,reason:"unknown",displayCode:"sendCanceled",retryable:!1};e.lastError=t,z(e.id,{status:"failed",failure:t}),O.delete(e.id),w.delete(e.id),B(e.id),N(e,"canceled"),J(e.id)}return{allocateMessageIdentity:D,enqueueText(e){const{id:t,createdAt:n}=D(e),o={encrypted:e.encrypted??!1},r=void 0!==M.resolve(e.conversationType),a=r&&m.isAuthenticated(),i={id:t,conversationId:e.conversationId,conversationType:e.conversationType,senderId:m.getSelfId(),contentType:"text",body:{text:e.text},createdAt:n,sortKey:s(n,t),status:"pending",receipt:"unread",encryption:f(o),...void 0!==e.mention?{mention:f(e.mention)}:{},...void 0!==e.refMessageId?{refMessageId:e.refMessageId}:{}},c={id:t,conversationId:e.conversationId,conversationType:e.conversationType,contentType:"text",body:{text:e.text},encryption:f(o),status:"pending",attempts:0,createdAt:n,...void 0!==e.mention?{mention:f(e.mention)}:{},...void 0!==e.refMessageId?{refMessageId:e.refMessageId}:{}};return w.set(t,c),$(c),N(c,"queued"),m.domainState.upsertMessages([i],"live",{newOutgoing:!0}),r?(a&&X(c),v(c)):(G(t,{code:-3,reason:"unsupported",displayCode:"conversationUnsupported",params:{type:e.conversationType},message:d(e.conversationType,"outbox.enqueueText"),retryable:!1}),v(c))},enqueueContact(e){const t=e.contact.targetId.trim(),n=e.contact.displayName.trim();if(""===t)throw new Error("outbox.enqueueContact: targetId 不能为空");if(""===n)throw new Error("outbox.enqueueContact: displayName 不能为空");if("individual"!==e.contact.kind&&"group"!==e.contact.kind&&"channel"!==e.contact.kind&&"robot"!==e.contact.kind)throw new Error(`outbox.enqueueContact: 不支持发送 ${String(e.contact.kind)} 名片`);const{id:o,createdAt:r}=D(e),a={encrypted:e.encrypted??!1},i=void 0!==M.resolve(e.conversationType),c=i&&m.isAuthenticated(),u={contact:{...e.contact,targetId:t,displayName:n}},p={id:o,conversationId:e.conversationId,conversationType:e.conversationType,senderId:m.getSelfId(),contentType:"contact",body:g(u),createdAt:r,sortKey:s(r,o),status:"pending",receipt:"unread",encryption:f(a),...void 0===e.refMessageId?{}:{refMessageId:e.refMessageId}},l={id:o,conversationId:e.conversationId,conversationType:e.conversationType,contentType:"contact",body:g(u),encryption:f(a),status:"pending",attempts:0,createdAt:r,...void 0===e.refMessageId?{}:{refMessageId:e.refMessageId}};return w.set(o,l),$(l),N(l,"queued"),m.domainState.upsertMessages([p],"live",{newOutgoing:!0}),i?(c&&X(l),v(l)):(G(o,{code:-3,reason:"unsupported",displayCode:"conversationUnsupported",params:{type:e.conversationType},message:d(e.conversationType,"outbox.enqueueContact"),retryable:!1}),v(l))},enqueueMedia(e){const{id:n,createdAt:o}=e,r=g(e.body);t(e.contentType,r,"outbox.enqueueMedia"),K(e,o);const a=void 0!==M.resolve(e.conversationType),i=a&&m.isAuthenticated(),c={id:n,conversationId:e.conversationId,conversationType:e.conversationType,senderId:m.getSelfId(),contentType:e.contentType,body:g(r),createdAt:o,sortKey:s(o,n),status:"pending",receipt:"unread",encryption:f(e.encryption),...void 0!==e.mention?{mention:f(e.mention)}:{},...void 0!==e.refMessageId?{refMessageId:e.refMessageId}:{}},u={id:n,conversationId:e.conversationId,conversationType:e.conversationType,contentType:e.contentType,body:r,encryption:f(e.encryption),status:"pending",attempts:0,createdAt:o,...void 0!==e.mention?{mention:f(e.mention)}:{},...void 0!==e.refMessageId?{refMessageId:e.refMessageId}:{}};return w.set(n,u),$(u),N(u,"queued"),m.domainState.upsertMessages([c],"live",{newOutgoing:!0!==e.optimisticAlreadyCreated}),a?(i&&X(u),v(u)):(G(n,{code:-3,reason:"unsupported",displayCode:"conversationUnsupported",params:{type:e.conversationType},message:d(e.conversationType,"outbox.enqueueMedia"),retryable:!1}),X(u,!0),v(u))},onChatAck(e){L(e.id);const t=w.get(e.id);if(void 0!==t)if(u.has(e.errcode))w.delete(e.id),B(e.id),z(e.id,{status:"sent",serverTime:e.serverTime>0?e.serverTime:void 0,...void 0===e.extensions?{}:{extensions:{...m.domainState.getConversationMessage(t,e.id)?.extensions,...e.extensions}}},{entry:t}),N(t,"sent"),J(e.id);else{t.status="failed",t.lastError=e.failure??r(e.errcode);const n="direct"===t.conversationType&&p.has(e.errcode),o="direct"===t.conversationType&&e.errcode===l;n?t.lastError={...t.lastError,displayCode:"contactRequired",retryable:!1}:o&&(t.lastError={...t.lastError,displayCode:"messageRefused",retryable:!1}),z(e.id,{status:"failed",failure:t.lastError},{authoritativeFailure:!0}),n?m.domainState.appendDirectContactRequiredNotice(t.conversationId,t.id):o&&m.domainState.appendDirectMessageRefusedNotice(t.conversationId,t.id),$(t),N(t,"failed"),J(e.id)}else u.has(e.errcode)||function(e){if(!y.has(e.errcode))return;const t=m.getSelfId(),n=m.domainState.getMessagesById(e.id).filter(e=>"direct"===e.conversationType&&e.senderId===t);if(n.length>1)throw new Error(`DIRECT 终态 ACK 消息 ID 存在多会话歧义:${e.id}`);const o=n[0];if(void 0===o)return;const s=p.has(e.errcode),a=e.errcode===l;let i=e.failure??r(e.errcode);s?i={...i,displayCode:"contactRequired",retryable:!1}:a&&(i={...i,displayCode:"messageRefused",retryable:!1}),m.domainState.upsertMessages([{...o,status:"failed",failure:i}],"live",{authoritativeOutboxFailure:!0}),s?m.domainState.appendDirectContactRequiredNotice(o.conversationId,o.id):a&&m.domainState.appendDirectMessageRefusedNotice(o.conversationId,o.id)}(e)},onAuthenticated(){!function(){const e=/* @__PURE__ */new Set;for(const t of w.values())V(t)&&e.add(P(t));for(const t of e)Z(t,!0)}()},retry(e){const t=w.get(e);return void 0===t?{accepted:!1,reason:"not-found"}:"sending"===t.status||x.has(e)?{accepted:!1,reason:"in-flight"}:"failed"===t.status&&!1===t.lastError?.retryable?{accepted:!1,reason:"not-retryable"}:"failed"===t.status||"pending"===t.status&&"manual"===t.resumePolicy?("manual"===t.resumePolicy&&(t.resumePolicy="automatic",$(t)),O.add(t.id),X(t),{accepted:!0}):{accepted:!1,reason:"invalid-state"}},cancel(e){const t=w.get(e);return void 0===t?{accepted:!1,reason:"not-found"}:"sending"===t.status||x.has(e)?{accepted:!1,reason:"in-flight"}:"pending"!==t.status?{accepted:!1,reason:"invalid-state"}:t.attempts>0?{accepted:!1,reason:"delivery-uncertain"}:(_(t),{accepted:!0})},markConversationTerminated(e,t){const n=P(e);E.add(n);for(const e of[...w.values()])P(e)===n&&("pending"!==e.status||0!==e.attempts||x.has(e.id)?G(e.id,{code:-4,reason:"unknown",displayCode:"unknown",message:`会话成员关系已终止:${t}`,retryable:!1}):_(e))},clearConversationTerminated(e){const t=P(e);E.delete(t),Z(t)},markForLogout(e){for(const t of w.values())if("pending"===t.status||"sending"===t.status||"failed"===t.status){if(L(t.id),t.resumePolicy="manual","fail"===e.policy){const e={code:-2,reason:"unknown",displayCode:"sessionLoggedOut",retryable:!0};t.status="failed",t.lastError=e,z(t.id,{status:"failed",failure:e}),N(t,"failed")}$(t),J(t.id)}},getPending:()=>[...w.values()].map(v),reset(e){e?.discardInFlight&&(C+=1,x.clear(),k.clear(),q.clear(),F.clear());for(const e of[...A.keys()])L(e);for(const e of w.values())"sending"===e.status&&(e.status="pending",z(e.id,{status:"pending"}),$(e),N(e,"queued"),J(e.id))},async hydrate(e=()=>!0){if(void 0!==m.storage&&e())try{const o=await m.storage.getOutbox();if(!e())return;for(const r of o){if(!e())return;const o=v(r);if("sent"===o.status){B(o.id);continue}try{t(o.contentType,o.body,`outbox.hydrate(${o.id})`),void 0!==o.body.video&&(o.body={...o.body,video:n(o.body.video)})}catch(t){if(m.onStorageError?.(`Outbox 持久化条目正文损坏,已删除(id=${o.id})`,t),!e())return;if(B(o.id),void 0!==m.domainState.getConversationMessage(o,o.id)){const e={code:-2,reason:"unknown",displayCode:"unknown",message:"发送账本正文损坏,已停止重试",retryable:!1};z(o.id,{status:"failed",failure:e},{authoritativeFailure:!0,entry:o})}continue}const s="sending"===o.status?"pending":o.status,a={...o,status:s};if(w.set(o.id,a),K(a,a.createdAt),N(a,"pending"===s?"queued":s),!e())return;void 0!==m.domainState.getConversationMessage(o,o.id)&&z(o.id,{status:s,failure:void 0===o.lastError?void 0:f(o.lastError)})}}catch(t){e()&&m.onStorageError?.("Outbox 回读失败",t)}}}}export{m as createOutboxManager};
|
package/dist/sdk.d.ts
CHANGED
|
@@ -2917,9 +2917,9 @@ interface TextMessageOptions {
|
|
|
2917
2917
|
mentions?: readonly MentionInput[];
|
|
2918
2918
|
replyToMessageId?: string;
|
|
2919
2919
|
}
|
|
2920
|
-
/**
|
|
2920
|
+
/** 可主动分享的名片。未知 wire 类别只保留接收,不能放进发送入参。 */
|
|
2921
2921
|
type ContactCardInput = Omit<ImContactBody, 'kind' | 'rawKind'> & {
|
|
2922
|
-
kind: Extract<ImContactBody['kind'], 'individual' | 'group' | 'channel'>;
|
|
2922
|
+
kind: Extract<ImContactBody['kind'], 'individual' | 'group' | 'channel' | 'robot'>;
|
|
2923
2923
|
};
|
|
2924
2924
|
/** 名片发送附加数据;回复关系与其它可发送消息使用同一稳定消息 id。 */
|
|
2925
2925
|
interface ContactMessageOptions {
|