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.
@@ -3254,9 +3254,9 @@ interface TextMessageOptions {
3254
3254
  mentions?: readonly MentionInput[];
3255
3255
  replyToMessageId?: string;
3256
3256
  }
3257
- /** 首期允许主动分享的名片 DTO;机器人和未知 wire 类别只保留接收兼容。 */
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?: {
@@ -3355,9 +3355,9 @@ interface TextMessageOptions {
3355
3355
  mentions?: readonly MentionInput[];
3356
3356
  replyToMessageId?: string;
3357
3357
  }
3358
- /** 首期允许主动分享的名片 DTO;机器人和未知 wire 类别只保留接收兼容。 */
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
- /** 首期允许主动分享的名片 DTO;机器人和未知 wire 类别只保留接收兼容。 */
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,r,n){const i=r.trim();if(""===i||!1===n?.isCurrent?.())return Promise.resolve(!1);const a=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===a)return Promise.resolve(!0);const s=t.getGeneration(),c=()=>t.getGeneration()===s&&!1!==n?.isCurrent?.(),d=function(t){let o=e.get(t);return void 0===o&&(o=/* @__PURE__ */new Map,e.set(t,o)),o}(t),v=`${s}\0${o}\0${i}`,u=d.get(v);if(!0!==n?.forceRefresh&&void 0!==u&&(0===u.expiresAt||u.expiresAt>Date.now()))return u.task;const f=async function(e,t,o,r){const n=[];let i=await e.listFirstPage({scope:{kind:"conversation",conversationType:t,conversationId:o,filter:"bound"},pageSize:100});n.push(...i.items);let a=1;for(;!i.exhausted&&void 0!==i.nextPageToken&&a<10;){if(!r())return;i=await e.listNextPage(i.nextPageToken),n.push(...i.items),a+=1}return n}(a,o,i,c).then(e=>void 0!==e&&c()?(function(e,t){const o={...e.getSenderProfileCache()};let r=!1;for(const e of t){const t=e.id.trim(),n=e.displayName.trim();if(""===t||""===n||n===t)continue;const i=o[t],a=void 0!==i&&""!==i.nickname&&i.nickname!==t?i.nickname:n,s=void 0!==i&&""!==i.avatar?i.avatar:e.avatarUrl??"";"robot-directory"===i?.source&&i.nickname===a&&i.avatar===s||(o[t]={source:"robot-directory",remark:i?.remark??"",nickname:a,avatar:s},r=!0)}r&&e.setSenderProfileCache(o)}(t,e),d.set(v,{expiresAt:Date.now()+3e5,task:Promise.resolve(!0)}),!0):(d.get(v)?.task===f&&d.delete(v),!1)).catch(e=>(d.get(v)?.task===f&&d.delete(v),t.getGeneration()===s&&t.getDiagnostics().record("warn","chat-kit","profile","bound-robot-profiles-resolve-failed",()=>({conversation:{conversationType:o,conversationId:i},error:{message:"解析已绑定机器人名称失败",data:e}})),!1));return d.set(v,{expiresAt:0,task:f}),f}export{t as ensureBoundRobotSenderProfiles};
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
- /** 首期允许主动分享的名片 DTO;机器人和未知 wire 类别只保留接收兼容。 */
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 {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "k2-im",
3
3
  "type": "module",
4
- "version": "0.2.2",
4
+ "version": "0.2.4",
5
5
  "private": false,
6
6
  "license": "MIT",
7
7
  "publishConfig": {