@fgz/wxmini-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils.ts","../src/cson-core.ts","../src/pojo.ts","../src/cson.ts","../src/pojo-registry.ts","../src/device-info.ts","../src/ws-client.ts","../src/rpc-core.ts","../src/rpc-interface.ts","../src/wx-mini.ts","../src/wx-mini-api.ts","../src/index.ts"],"names":["uuidv4","PingStatus","pako","WxMiniCmd"],"mappings":"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","file":"index.js","sourcesContent":["import { v4 as uuidv4 } from 'uuid'\r\n\r\nexport class Utils {\r\n static allocUuid(): string {\r\n const uuid = uuidv4()\r\n return '' + uuid\r\n }\r\n\r\n static now(): number {\r\n return new Date().getTime()\r\n }\r\n\r\n /* 浅拷贝, 克隆第一层引用 */\r\n static cloneWithRef<T>(obj: T | null): T | any | null {\r\n if (obj == null) return null\r\n return Object.assign(Object.create(Object.getPrototypeOf(obj)), obj)\r\n }\r\n\r\n static createNew<T>(obj: T | null): T | any | null {\r\n if (obj == null) return null\r\n return Object.create(Object.getPrototypeOf(obj))\r\n }\r\n\r\n static isStringNotEmpty(str: string | null | undefined): boolean {\r\n return !this.isStringEmpty(str)\r\n }\r\n\r\n static isStringEmpty(str: string | null | undefined): boolean {\r\n return str == null || str === ''\r\n }\r\n\r\n static string2Utf8(str: string | null): Uint8Array | null {\r\n if (str == null) return null\r\n return new TextEncoder().encode(str)\r\n }\r\n\r\n static utf8ToString(bytes: Uint8Array | null): string | null {\r\n if (bytes == null) return null\r\n return new TextDecoder().decode(bytes)\r\n }\r\n\r\n static concatUint8Arrays(arrays: Uint8Array[]): Uint8Array {\r\n let totalLength = 0\r\n for (const array of arrays) {\r\n totalLength += array.length\r\n }\r\n\r\n const result = new Uint8Array(totalLength)\r\n let offset = 0\r\n\r\n for (const array of arrays) {\r\n result.set(array, offset)\r\n offset += array.length\r\n }\r\n\r\n return result\r\n }\r\n\r\n static async sleep(ms: number): Promise<void> {\r\n return new Promise((resolve) => setTimeout(resolve, ms))\r\n }\r\n\r\n static async pollAsync(\r\n fn: () => boolean,\r\n timeout: number = 2000,\r\n interval: number = 10\r\n ): Promise<void> {\r\n const endTime = Number(new Date()) + timeout\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n const checkCondition = () => {\r\n if (fn()) {\r\n resolve()\r\n } else if (Number(new Date()) < endTime) {\r\n setTimeout(checkCondition, interval)\r\n } else {\r\n reject(new Error('Timed out to wait for : ' + fn.toString()))\r\n }\r\n }\r\n\r\n checkCondition()\r\n })\r\n }\r\n\r\n static isNumber(value: any): value is number {\r\n return typeof value === 'number' && !isNaN(value)\r\n }\r\n\r\n static isInteger(value: number): boolean {\r\n return Number.isInteger(value)\r\n }\r\n\r\n static isFloat(value: number): boolean {\r\n return this.isNumber(value) && !this.isInteger(value)\r\n }\r\n\r\n static async pollBlock(\r\n fn: () => boolean,\r\n timeout: number,\r\n interval: number,\r\n msg?: string\r\n ): Promise<void> {\r\n const endTime = Number(new Date()) + timeout\r\n\r\n while (Number(new Date()) < endTime) {\r\n const result = fn()\r\n if (result) {\r\n return Promise.resolve()\r\n }\r\n await this.sleep(interval)\r\n }\r\n\r\n if (msg == null) msg = 'Timed out to wait for : ' + fn.toString()\r\n return Promise.reject(new Error(msg))\r\n }\r\n\r\n static error(message?: any, ...optionalParams: any[]) {\r\n console.error(message, optionalParams)\r\n }\r\n static log(message?: any, ...optionalParams: any[]) {\r\n console.log(message, optionalParams)\r\n }\r\n\r\n static _debug: boolean = true\r\n static debug(message?: any, ...optionalParams: any[]) {\r\n if (this._debug) console.debug(message, optionalParams)\r\n }\r\n\r\n static isInstance<T>(obj: any, constructor: new (...args: any[]) => T): boolean {\r\n return obj instanceof constructor || (constructor.name === \"Boolean\" && typeof obj === \"boolean\");\r\n }\r\n\r\n static assertNotNull<T>(obj: T | undefined | null, msg?: string): T {\r\n if (obj == null) throw new Error(msg ?? 'Null value')\r\n return obj\r\n }\r\n static assertTrue(value: boolean, msg?: string) {\r\n if (!value) throw new Error(msg ?? 'Not true')\r\n }\r\n}\r\n\r\nexport class Bytes {\r\n // JAVA端解析是大端序(低位靠前,高位靠后) : 0x00, 0x00, 0x01, 0x44 = 300\r\n static LittleEndian = false\r\n\r\n /**\r\n * Flutter的setInt32,以及Netty等默认都是大端序存储int:[00,00,00,03]\r\n */\r\n static readInt32(bytes: Uint8Array, offset: number): number {\r\n if (offset < 0 || offset + 4 > bytes.length) {\r\n throw new RangeError('Offset is out of bounds.')\r\n }\r\n\r\n const subArray = Array.from(bytes.slice(offset, offset + 4))\r\n return new DataView(new Uint8Array(subArray).buffer).getInt32(0, Bytes.LittleEndian)\r\n }\r\n\r\n static setInt32Bytes(bytes: Uint8Array, offset: number, num: number) {\r\n const dataView = new DataView(bytes.buffer)\r\n dataView.setInt32(offset, num, Bytes.LittleEndian)\r\n }\r\n\r\n static int32ToBytes(v: number): Uint8Array {\r\n const b = new Uint8Array(4)\r\n new DataView(b.buffer).setInt32(0, v)\r\n return b\r\n }\r\n\r\n static stringToBytes(s: string): Uint8Array {\r\n const encoder = new TextEncoder()\r\n return encoder.encode(s)\r\n }\r\n}\r\n","import { Utils } from './utils'\r\n\r\nexport class CsonBean {\r\n static OBJECT_TYPE_FIELD_NAME: string = '_OBJECT_TYPE_'\r\n\r\n // 所有类都会重载此方法, 以获取子类真正对应的java类\r\n getJavaType() {\r\n return this._OBJECT_TYPE_\r\n }\r\n\r\n getSimpleTypeName(removeDtoSuffix?: boolean) {\r\n const type = this.getJavaType();\r\n\r\n const list = type.split(\".\");\r\n\r\n if (list.length > 1) {\r\n let last = list[list.length - 1];\r\n\r\n if (last.endsWith(\"Dto\") && removeDtoSuffix) {\r\n return last.substring(0, last.length - 3);\r\n }\r\n\r\n return last;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n // 每个子类都会通过构造默认初始化此值(由自动代码生成器负责初始化)\r\n public _OBJECT_TYPE_: string = ''\r\n getObjectType(): string {\r\n return this._OBJECT_TYPE_\r\n }\r\n\r\n setObjectType(type: string): CsonBean {\r\n this._OBJECT_TYPE_ = type\r\n return this\r\n }\r\n\r\n public _extJsonMap: { [key: string]: any } | undefined\r\n getExtJsonMap(): { [key: string]: any } | undefined {\r\n return this._extJsonMap\r\n }\r\n setExtJsonMap(extMap: { [key: string]: any } | undefined) {\r\n this._extJsonMap = extMap\r\n }\r\n\r\n constructor() {\r\n this.setObjectType(this.getJavaType())\r\n }\r\n}\r\n\r\nexport class CsonPojo extends CsonBean { }\r\n\r\n/*\r\n * 比较特殊, 这个类只会是前端抛出, 返回给java端\r\n * 对应Java端的FeException\r\n */\r\nexport class FeException extends CsonPojo {\r\n static JAVA_TYPE: string = 'flutter.rpc.FeException'\r\n getJavaType() {\r\n return FeException.JAVA_TYPE\r\n }\r\n\r\n constructor(err?: string, detail?: string) {\r\n super()\r\n\r\n this.err = err\r\n this.detail = detail\r\n }\r\n\r\n public err: string | undefined\r\n\r\n public detail: string | undefined\r\n\r\n public toString(): string {\r\n let s = this.err\r\n if (Utils.isStringNotEmpty(this.detail)) s += '\\n' + this.detail\r\n return `${this.getSimpleTypeName()}: ${s ?? ''}`;\r\n }\r\n}\r\n\r\nexport class FeJavaException extends FeException {\r\n static JAVA_TYPE: string = 'flutter.rpc.FeJavaException'\r\n getJavaType() {\r\n return FeJavaException.JAVA_TYPE\r\n }\r\n\r\n constructor(err?: string, detail?: string) {\r\n super()\r\n\r\n this.err = err\r\n this.detail = detail\r\n }\r\n}\r\n\r\nexport class CRpcFeCmd extends CsonPojo {\r\n static JAVA_TYPE: string = 'cson.rpc.CRpcFeCmd'\r\n getJavaType() {\r\n return CRpcFeCmd.JAVA_TYPE\r\n }\r\n\r\n reqId: number | undefined\r\n\r\n service: string | undefined\r\n\r\n func: string | undefined\r\n\r\n params: any[] | undefined\r\n}\r\n\r\nexport class CRpcFeRsp extends CsonPojo {\r\n static JAVA_TYPE: string = 'cson.rpc.CRpcFeRsp'\r\n getJavaType() {\r\n return CRpcFeRsp.JAVA_TYPE\r\n }\r\n\r\n resultJson: string | undefined\r\n\r\n error: any | undefined\r\n}\r\n","/**\r\n * WxMini 相关 POJO 类定义\r\n *\r\n * 从原工程 all_pojo.ts 中抽取的 WxMini 相关类。\r\n * 原文件由代码生成器自动生成,此处仅保留 WxMini SDK 所需的子集。\r\n */\r\nimport { Transform } from 'class-transformer'\r\nimport * as CSON from './cson'\r\nimport { CsonPojo, CsonBean, FeException } from './cson-core'\r\n\r\n// ==================== SystemCallback ====================\r\n\r\nexport class SystemCallback extends CsonPojo {\r\n static JAVA_TYPE: string = 'fe.cmn.sys.SystemCallback'\r\n getJavaType() {\r\n return SystemCallback.JAVA_TYPE\r\n }\r\n\r\n timeout: number | undefined\r\n static readonly FIELD_timeout: string = 'timeout';\r\n\r\n static debugChannel: Boolean = false;\r\n\r\n static readonly DECLARED_FIELDS: string[] = [this.FIELD_timeout]\r\n}\r\n\r\n// ==================== FePojo ====================\r\n\r\nexport class FePojo extends CsonPojo {\r\n static JAVA_TYPE: string = 'fe.cmn.data.FePojo'\r\n getJavaType() {\r\n return FePojo.JAVA_TYPE\r\n }\r\n\r\n userObject: Object | undefined\r\n static readonly FIELD_userObject: string = 'userObject';\r\n\r\n @Transform(CSON.FUNC_decodeObject, { toClassOnly: true })\r\n userPojo: CsonPojo | undefined\r\n static readonly FIELD_userPojo: string = 'userPojo';\r\n\r\n @Transform(CSON.FUNC_encodeJsonUint8Array, { toPlainOnly: true })\r\n @Transform(CSON.FUNC_decodeJsonUint8Array, { toClassOnly: true })\r\n binaryData: Uint8Array | undefined\r\n static readonly FIELD_binaryData: string = 'binaryData';\r\n\r\n static readonly DECLARED_FIELDS: string[] = [this.FIELD_userObject, this.FIELD_userPojo, this.FIELD_binaryData]\r\n}\r\n\r\n// ==================== NullPojo ====================\r\n\r\nexport class NullPojo extends FePojo {\r\n static JAVA_TYPE: string = 'fe.cmn.data.NullPojo'\r\n getJavaType() {\r\n return NullPojo.JAVA_TYPE\r\n }\r\n\r\n static readonly DECLARED_FIELDS: string[] = []\r\n}\r\n\r\n// ==================== ValuePojo ====================\r\n\r\nexport class ValuePojo extends FePojo {\r\n static JAVA_TYPE: string = 'fe.cmn.data.ValuePojo'\r\n getJavaType() {\r\n return ValuePojo.JAVA_TYPE\r\n }\r\n\r\n value: Object | undefined\r\n static readonly FIELD_value: string = 'value';\r\n\r\n static readonly DECLARED_FIELDS: string[] = [this.FIELD_value]\r\n}\r\n\r\n// ==================== BinBlock ====================\r\n\r\nexport class BinBlock extends CsonPojo {\r\n static JAVA_TYPE: string = 'cson.core.BinBlock'\r\n getJavaType() {\r\n return BinBlock.JAVA_TYPE\r\n }\r\n\r\n id: number | undefined\r\n static readonly FIELD_id: string = 'id';\r\n\r\n start: number | undefined\r\n static readonly FIELD_start: string = 'start';\r\n\r\n end: number | undefined\r\n static readonly FIELD_end: string = 'end';\r\n\r\n @Transform(CSON.FUNC_encodeJsonUint8Array, { toPlainOnly: true })\r\n @Transform(CSON.FUNC_decodeJsonUint8Array, { toClassOnly: true })\r\n extByteArray: Uint8Array | undefined\r\n static readonly FIELD_extByteArray: string = 'extByteArray';\r\n\r\n static readonly DECLARED_FIELDS: string[] = [this.FIELD_id, this.FIELD_start, this.FIELD_end, this.FIELD_extByteArray]\r\n}\r\n\r\n// ==================== PartitionTable ====================\r\n\r\nexport class PartitionTable extends CsonPojo {\r\n static JAVA_TYPE: string = 'cson.core.PartitionTable'\r\n getJavaType() {\r\n return PartitionTable.JAVA_TYPE\r\n }\r\n\r\n callbackBridgeChannel: number | undefined\r\n static readonly FIELD_callbackBridgeChannel: string = 'callbackBridgeChannel';\r\n\r\n bodyLength: number | undefined\r\n static readonly FIELD_bodyLength: string = 'bodyLength';\r\n\r\n @Transform(CSON.FUNC_decodeListJson<BinBlock>, { toClassOnly: true })\r\n lstBin: Array<BinBlock> | undefined\r\n static readonly FIELD_lstBin: string = 'lstBin';\r\n\r\n static readonly DECLARED_FIELDS: string[] = [this.FIELD_callbackBridgeChannel, this.FIELD_bodyLength, this.FIELD_lstBin]\r\n}\r\n\r\n// ==================== FeAbilityExecuteException ====================\r\n\r\nexport class FeAbilityExecuteException extends FeException {\r\n static JAVA_TYPE: string = 'fe.cmn.exception.FeAbilityExecuteException'\r\n getJavaType() {\r\n return FeAbilityExecuteException.JAVA_TYPE\r\n }\r\n\r\n @Transform(CSON.FUNC_decodeObject, { toClassOnly: true })\r\n ability: CsonPojo | undefined\r\n static readonly FIELD_ability: string = 'ability';\r\n\r\n static readonly DECLARED_FIELDS: string[] = [this.FIELD_ability]\r\n}\r\n\r\n// ==================== FeWxMiniCmdException ====================\r\n\r\nexport class FeWxMiniCmdException extends FeAbilityExecuteException {\r\n static JAVA_TYPE: string = 'fe.cmn.exception.FeWxMiniCmdException'\r\n getJavaType() {\r\n return FeWxMiniCmdException.JAVA_TYPE\r\n }\r\n\r\n wxMiniServerUrl: string | undefined\r\n static readonly FIELD_wxMiniServerUrl: string = 'wxMiniServerUrl';\r\n\r\n wxMiniAppUuid: string | undefined\r\n static readonly FIELD_wxMiniAppUuid: string = 'wxMiniAppUuid';\r\n\r\n static readonly DECLARED_FIELDS: string[] = [this.FIELD_wxMiniServerUrl, this.FIELD_wxMiniAppUuid]\r\n}\r\n\r\n// ==================== WxMiniBridgeCommand ====================\r\n\r\nexport class WxMiniBridgeCommand extends CsonPojo {\r\n static JAVA_TYPE: string = 'wx.mini.server.WxMiniBridgeCommand'\r\n getJavaType() {\r\n return WxMiniBridgeCommand.JAVA_TYPE\r\n }\r\n\r\n debugAppUuid: string | undefined\r\n static readonly FIELD_debugAppUuid: string = 'debugAppUuid';\r\n\r\n appId: string | undefined\r\n static readonly FIELD_appId: string = 'appId';\r\n\r\n cmd: string | undefined\r\n static readonly FIELD_cmd: string = 'cmd';\r\n\r\n @Transform(CSON.FUNC_decodeMapJson<string>, { toClassOnly: true })\r\n params: Map<string, string | null> | undefined\r\n static readonly FIELD_params: string = 'params';\r\n\r\n @Transform(CSON.FUNC_decodeMapJson<string>, { toClassOnly: true })\r\n extHeaders: Map<string, string | null> | undefined\r\n static readonly FIELD_extHeaders: string = 'extHeaders';\r\n\r\n waitOnlineTimeoutS: number | undefined\r\n static readonly FIELD_waitOnlineTimeoutS: string = 'waitOnlineTimeoutS';\r\n\r\n timeoutS: number | undefined\r\n static readonly FIELD_timeoutS: string = 'timeoutS';\r\n\r\n static readonly DECLARED_FIELDS: string[] = [this.FIELD_debugAppUuid, this.FIELD_appId, this.FIELD_cmd, this.FIELD_params, this.FIELD_extHeaders, this.FIELD_waitOnlineTimeoutS, this.FIELD_timeoutS]\r\n}\r\n\r\n// ==================== WxMiniCommand ====================\r\n\r\nexport class WxMiniCommand extends SystemCallback {\r\n static JAVA_TYPE: string = 'fe.cmn.weixin.ability.WxMiniCommand'\r\n getJavaType() {\r\n return WxMiniCommand.JAVA_TYPE\r\n }\r\n\r\n debugHttpUrl: string | undefined\r\n static readonly FIELD_debugHttpUrl: string = 'debugHttpUrl';\r\n\r\n debugAppUuid: string | undefined\r\n static readonly FIELD_debugAppUuid: string = 'debugAppUuid';\r\n\r\n cmd: string | undefined\r\n static readonly FIELD_cmd: string = 'cmd';\r\n\r\n @Transform(CSON.FUNC_decodeMapJson<string>, { toClassOnly: true })\r\n params: Map<string, string | null> | undefined\r\n static readonly FIELD_params: string = 'params';\r\n\r\n @Transform(CSON.FUNC_decodeMapJson<string>, { toClassOnly: true })\r\n extHeaders: Map<string, string | null> | undefined\r\n static readonly FIELD_extHeaders: string = 'extHeaders';\r\n\r\n waitOnlineTimeoutS: number | undefined\r\n static readonly FIELD_waitOnlineTimeoutS: string = 'waitOnlineTimeoutS';\r\n\r\n static readonly PARAM_URL: string = \"url\";\r\n static readonly PARAM_TITLE: string = \"title\";\r\n static readonly PARAM_ICON_TYPE: string = \"iconType\";\r\n static readonly PARAM_MESSAGE: string = \"message\";\r\n static readonly PARAM_BUTTON: string = \"button\";\r\n static readonly PARAM_REJECT_BUTTON: string = \"rejectButton\";\r\n static readonly PARAM_FILE_PATH: string = \"filePath\";\r\n static readonly DATA_FIELD_IN_MAP: string = \"data\";\r\n static readonly getUserProfile_TITLE: string = \"title\";\r\n static readonly getUserProfile_ICON_TYPE: string = \"iconType\";\r\n static readonly getUserProfile_MESSAGE: string = \"message\";\r\n static readonly getUserProfile_BUTTON: string = \"button\";\r\n static readonly getUserProfile_QUERY_TYPE: string = \"queryType\";\r\n static readonly getUserProfile_ORG_AVATAR_URL64: string = \"avatarUrl64\";\r\n static readonly getUserProfile_ORG_NICK: string = \"nickName\";\r\n static readonly getPhoneNum_TITLE: string = \"title\";\r\n static readonly getPhoneNum_ICON_TYPE: string = \"iconType\";\r\n static readonly getPhoneNum_MESSAGE: string = \"message\";\r\n static readonly getPhoneNum_BUTTON: string = \"button\";\r\n static readonly getPhoneNum_REJECT_BUTTON: string = \"rejectButton\";\r\n static readonly makePhoneCall_phoneNum: string = \"phoneNum\";\r\n static readonly PARAM_count: string = \"count\";\r\n static readonly PARAM_mediaType: string = \"mediaType\";\r\n static readonly PARAM_sourceType: string = \"sourceType\";\r\n static readonly PARAM_maxDuration: string = \"maxDuration\";\r\n static readonly PARAM_sizeType: string = \"sizeType\";\r\n static readonly PARAM_camera: string = \"camera\";\r\n static readonly MEDIATYPE_image: string = \"image\";\r\n static readonly MEDIATYPE_video: string = \"video\";\r\n static readonly MEDIATYPE_mix: string = \"mix\";\r\n static readonly SOURCETYPE_album: string = \"album\";\r\n static readonly SOURCETYPE_camera: string = \"camera\";\r\n static readonly SIZETYPE_original: string = \"original\";\r\n static readonly SIZETYPE_compressed: string = \"compressed\";\r\n static readonly CAMERA_back: string = \"back\";\r\n static readonly CAMERA_front: string = \"front\";\r\n static readonly PARAM_delta: string = \"delta\";\r\n static readonly PARAM_UPLOAD_FILE_NAME: string = \"fileName\";\r\n static readonly PARAM_UPLOAD_FORM_DATA: string = \"formData\";\r\n static readonly PARAM_SHARE_FILE_NAME: string = \"fileName\";\r\n static readonly PARAM_MAP_JSON: string = \"mapJson\";\r\n static readonly PARAM_APPEND: string = \"append\";\r\n static readonly PARAM_OPENIT: string = \"openIt\";\r\n static readonly PARAM_LOCATION: string = \"location\";\r\n static readonly PARAM_COUNT: string = \"count\";\r\n static readonly PARAM_TYPE: string = \"type\";\r\n static readonly PARAM_EXTENSION: string = \"extension\";\r\n static readonly PARAM_sharePage: string = \"sharePage\";\r\n static readonly PARAM_path: string = \"path\";\r\n static readonly PARAM_style: string = \"style\";\r\n static readonly PARAM_needShowEntrance: string = \"needShowEntrance\";\r\n static readonly PARAM_entrancePath: string = \"entrancePath\";\r\n static readonly CLIP_BOARD_DATA: string = \"data\";\r\n\r\n static readonly DECLARED_FIELDS: string[] = [this.FIELD_debugHttpUrl, this.FIELD_debugAppUuid, this.FIELD_cmd, this.FIELD_params, this.FIELD_extHeaders, this.FIELD_waitOnlineTimeoutS]\r\n}\r\n\r\n// ==================== WxMiniConfigDto ====================\r\n\r\nexport class WxMiniConfigDto extends CsonPojo {\r\n static JAVA_TYPE: string = 'fe.cmn.weixin.WxMiniConfigDto'\r\n getJavaType() {\r\n return WxMiniConfigDto.JAVA_TYPE\r\n }\r\n\r\n wxMiniServerUrl: string | undefined\r\n static readonly FIELD_wxMiniServerUrl: string = 'wxMiniServerUrl';\r\n\r\n wxMiniAppUuid: string | undefined\r\n static readonly FIELD_wxMiniAppUuid: string = 'wxMiniAppUuid';\r\n\r\n sceneFromWxMiniParams: string | undefined\r\n static readonly FIELD_sceneFromWxMiniParams: string = 'sceneFromWxMiniParams';\r\n\r\n @Transform(CSON.FUNC_decodeMapJson<Object>, { toClassOnly: true })\r\n initalQueryParameters: Map<string, any> | undefined\r\n static readonly FIELD_initalQueryParameters: string = 'initalQueryParameters';\r\n\r\n static readonly DECLARED_FIELDS: string[] = [this.FIELD_wxMiniServerUrl, this.FIELD_wxMiniAppUuid, this.FIELD_sceneFromWxMiniParams, this.FIELD_initalQueryParameters]\r\n}\r\n\r\n// ==================== QueryWxMiniParam ====================\r\n\r\nexport class QueryWxMiniParam extends SystemCallback {\r\n static JAVA_TYPE: string = 'fe.cmn.weixin.ability.QueryWxMiniParam'\r\n getJavaType() {\r\n return QueryWxMiniParam.JAVA_TYPE\r\n }\r\n\r\n static readonly DECLARED_FIELDS: string[] = []\r\n}\r\n\r\n// ==================== QuerySceneFromWxMiniParams ====================\r\n\r\nexport class QuerySceneFromWxMiniParams extends SystemCallback {\r\n static JAVA_TYPE: string = 'fe.cmn.weixin.ability.QuerySceneFromWxMiniParams'\r\n getJavaType() {\r\n return QuerySceneFromWxMiniParams.JAVA_TYPE\r\n }\r\n\r\n static readonly DECLARED_FIELDS: string[] = []\r\n}\r\n\r\n// ==================== CRpcCallbackCmd ====================\r\n\r\nexport class CRpcCallbackCmd extends CsonPojo {\r\n static JAVA_TYPE: string = 'flutter.rpc.CRpcCallbackCmd'\r\n getJavaType() {\r\n return CRpcCallbackCmd.JAVA_TYPE\r\n }\r\n\r\n reqId: number | undefined\r\n static readonly FIELD_reqId: string = 'reqId';\r\n\r\n @Transform(CSON.FUNC_decodeObject, { toClassOnly: true })\r\n data: CsonPojo | undefined\r\n static readonly FIELD_data: string = 'data';\r\n\r\n static readonly DECLARED_FIELDS: string[] = [this.FIELD_reqId, this.FIELD_data]\r\n}\r\n\r\n// ==================== CRpcCallbackRsp ====================\r\n\r\nexport class CRpcCallbackRsp extends CsonPojo {\r\n static JAVA_TYPE: string = 'flutter.rpc.CRpcCallbackRsp'\r\n getJavaType() {\r\n return CRpcCallbackRsp.JAVA_TYPE\r\n }\r\n\r\n reqId: number | undefined\r\n static readonly FIELD_reqId: string = 'reqId';\r\n\r\n @Transform(CSON.FUNC_decodeObject, { toClassOnly: true })\r\n result: CsonPojo | undefined\r\n static readonly FIELD_result: string = 'result';\r\n\r\n static readonly DECLARED_FIELDS: string[] = [this.FIELD_reqId, this.FIELD_result]\r\n}\r\n","import 'reflect-metadata'\r\nimport 'class-transformer'\r\n\r\nimport {\r\n plainToClassFromExist,\r\n instanceToPlain,\r\n type TransformFnParams,\r\n plainToInstance,\r\n type ClassConstructor\r\n} from 'class-transformer'\r\nimport {\r\n CsonBean,\r\n CsonPojo,\r\n FeJavaException,\r\n CRpcFeCmd,\r\n CRpcFeRsp,\r\n FeException\r\n} from './cson-core'\r\nimport pako from 'pako'\r\nimport { NullPojo, PartitionTable, ValuePojo } from './pojo'\r\nimport { Bytes, Utils } from './utils'\r\n\r\nexport function FUNC_encodeJsonUint8Array({ value }: TransformFnParams): any {\r\n if (value instanceof Uint8Array) {\r\n const u8 = Cson.putBytes(value)\r\n if (u8 == null) return null\r\n return Array.from(u8)\r\n }\r\n return value\r\n}\r\n\r\nexport function FUNC_decodeJsonUint8Array({ value }: any): any {\r\n value instanceof Object\r\n if (value instanceof Uint8Array) {\r\n return Cson.getBytes(value)\r\n } else if (value instanceof Object) {\r\n Object.values(value)\r\n return Cson.getBytes(new Uint8Array(Object.values(value)))\r\n }\r\n return value\r\n}\r\n\r\n// 通用的 Map 反序列化函数\r\nexport function FUNC_decodeMapJson<T>({ value }: any) {\r\n if (value != null) {\r\n if (value instanceof Map) {\r\n const map = new Map<string, T>()\r\n for (const [key, val] of value.entries()) {\r\n const obj = Cson.decodeObject(val)\r\n map.set(key, obj)\r\n }\r\n return map\r\n } else if (value instanceof Object) {\r\n const map = new Map<string, T>()\r\n for (const [key, val] of Object.entries(value)) {\r\n const obj = Cson.decodeObject(val)\r\n map.set(key, obj)\r\n }\r\n return map\r\n }\r\n }\r\n return undefined\r\n}\r\n\r\nexport function FUNC_decodeListJson<T>({ value }: any) {\r\n if (value != null) {\r\n if (value instanceof Array) {\r\n const lst = new Array<T>()\r\n for (const v of value) {\r\n const obj = Cson.decodeObject(v)\r\n lst.push(obj)\r\n }\r\n return lst\r\n }\r\n }\r\n return undefined\r\n}\r\n\r\nexport function FUNC_decodeObject({ value }: any): any {\r\n return Cson.decodeObject(value)\r\n}\r\n\r\nexport function int32ToBytes(value: number): Uint8Array {\r\n const result = new Uint8Array(4)\r\n for (let i = 0; i < 4; i++) {\r\n result[i] = (value >> (8 * (3 - i))) & 0xff\r\n }\r\n return result\r\n}\r\n\r\nexport function bytesToInt32(bytes: Uint8Array): number {\r\n if (bytes.length !== 4) {\r\n throw new Error('Input must be a Uint8Array of length 4')\r\n }\r\n\r\n let value = 0\r\n for (let i = 0; i < 4; i++) {\r\n value |= bytes[i] << (8 * (3 - i))\r\n }\r\n\r\n return value\r\n}\r\n\r\nexport class Cson {\r\n static _serialNo: number = 0\r\n static _mapBytes: Map<number, Uint8Array> = new Map()\r\n\r\n static _setCache(mapBytes: Map<number, Uint8Array> | null) {\r\n this._serialNo = 0\r\n this._mapBytes = mapBytes == null ? new Map() : mapBytes\r\n }\r\n\r\n static putBytes(data: Uint8Array | null): Uint8Array | null {\r\n if (data === null || data.length === 0) return null\r\n\r\n const id = ++this._serialNo\r\n this._mapBytes.set(id, data)\r\n return int32ToBytes(id)\r\n }\r\n\r\n static getBytes(o: Uint8Array): Uint8Array | null {\r\n if (o != null && o.length === 4) {\r\n return this._mapBytes.get(bytesToInt32(o)) || null\r\n }\r\n return null\r\n }\r\n\r\n static _clearCache() {\r\n this._setCache(null)\r\n }\r\n\r\n static encode(data: any, outputBytes: Map<number, Uint8Array> | null): string {\r\n this._clearCache()\r\n try {\r\n const res = instanceToPlain(data)\r\n if (outputBytes && this._mapBytes.size > 0) {\r\n this._mapBytes.forEach((value, key) => {\r\n outputBytes.set(key, value)\r\n })\r\n }\r\n return JSON.stringify(res)\r\n } finally {\r\n this._clearCache()\r\n }\r\n }\r\n\r\n static decode<T>(\r\n targetClass: ClassConstructor<T>,\r\n json: string,\r\n mapBytes: Map<number, Uint8Array> | null\r\n ): T | null {\r\n const normalJsonObj = JSON.parse(json)\r\n this._setCache(mapBytes)\r\n try {\r\n const jO = plainToInstance<T, Object>(targetClass, normalJsonObj)\r\n if (Array.isArray(jO)) {\r\n throw new Error('Do not support JSON List')\r\n }\r\n return jO as T\r\n } finally {\r\n this._clearCache()\r\n }\r\n }\r\n\r\n static decodeReturn(data: Uint8Array | null, zip: boolean): any {\r\n const mapAttach = new Map<number, Uint8Array>()\r\n const rspJson = Cson.decodeReturnPayload(data, zip, mapAttach)\r\n if (Utils.isStringEmpty(rspJson)) return null\r\n\r\n const rspObj = Cson.decodeJson(rspJson!, mapAttach)\r\n return rspObj\r\n }\r\n\r\n static decodeJson(json: string, mapBytes: Map<number, Uint8Array> | null): any {\r\n Cson._setCache(mapBytes)\r\n try {\r\n let jO: any\r\n try {\r\n jO = JSON.parse(json)\r\n } catch (error) {\r\n throw new Error('Invalid JSON')\r\n }\r\n\r\n return Cson.decodeObject(jO)\r\n } finally {\r\n Cson._clearCache()\r\n }\r\n }\r\n\r\n static decodeObject(org: any): any {\r\n try {\r\n if (org == null) {\r\n return null\r\n } else if (Array.isArray(org)) {\r\n const lstRet: any[] = []\r\n for (const o of org) {\r\n lstRet.push(Cson.decodeObject(o))\r\n }\r\n return lstRet\r\n } else if (!(org instanceof Object)) {\r\n return org\r\n } else if (typeof org === 'object' && org !== null) {\r\n if (Utils.isStringNotEmpty(org[CsonBean.OBJECT_TYPE_FIELD_NAME])) {\r\n const bean = JavaFactory.newBean(org[CsonBean.OBJECT_TYPE_FIELD_NAME], org)\r\n return bean\r\n } else {\r\n const type = org[CsonBean.OBJECT_TYPE_FIELD_NAME]\r\n return JavaFactory.newBean(type, org)\r\n }\r\n }\r\n return org\r\n } catch (error) {\r\n throw new Error('Failed to decode : ' + org.toString() + ', Cause:' + error)\r\n }\r\n }\r\n\r\n static decodeDynamicList(org: any[] | null): any[] | null {\r\n try {\r\n if (org !== null && org.length > 0) {\r\n const lstRet: any[] = []\r\n for (const o of org) {\r\n lstRet.push(Cson.decodeObject(o))\r\n }\r\n return lstRet\r\n }\r\n return null\r\n } catch (error) {\r\n throw new Error(`Failed to decode: ${JSON.stringify(org)}, Cause: ${error}`)\r\n }\r\n }\r\n\r\n /**\r\n * 返回的是成功结果里的 result json\r\n * 同时,参数 mapAttach 是附件二进制包(输出)\r\n * 如果返回是异常对象, 则会抛出FeJavaException\r\n */\r\n static decodeReturnPayload(\r\n data: Uint8Array | null,\r\n zip: boolean,\r\n mapAttach: Map<number, Uint8Array>\r\n ): string | null | undefined {\r\n // 检查是否socket错误 — 由外部 WsClient 检查,此处跳过\r\n // WsClient.checkConnectionError(data)\r\n\r\n const sCmd = Cson.decodeServerPackage(data, zip, mapAttach)\r\n if (sCmd === null) return null\r\n\r\n const rsp: CRpcFeRsp = Cson.decode(CRpcFeRsp, sCmd, mapAttach) as CRpcFeRsp\r\n\r\n if (Utils.isStringNotEmpty(rsp.error)) {\r\n const error = new FeJavaException()\r\n error.err = rsp.error!.error\r\n error.detail = rsp.error!.errorStack\r\n throw error\r\n }\r\n\r\n return rsp.resultJson\r\n }\r\n\r\n static decodeServerPackage(\r\n data: Uint8Array | null,\r\n zip: boolean,\r\n mapAttach: Map<number, Uint8Array>\r\n ): string | null {\r\n if (data === null || data.length === 0) return null\r\n\r\n const parLength = Bytes.readInt32(data, 0)\r\n const btParTable = data.slice(4, 4 + parLength)\r\n const parTable: PartitionTable = Cson.decode(\r\n PartitionTable,\r\n new TextDecoder().decode(btParTable),\r\n null\r\n )!\r\n\r\n const bodyStart = 4 + parLength\r\n const btBody = data.slice(bodyStart, bodyStart + (parTable.bodyLength || 0))\r\n\r\n const attStart = bodyStart + (parTable.bodyLength || 0)\r\n parTable.lstBin?.forEach((bk) => {\r\n if (bk) {\r\n const attBin = data.slice(\r\n attStart + (bk.start || 0),\r\n attStart + (bk.end !== undefined ? bk.end + 1 : 0)\r\n )\r\n if (bk.id !== undefined) {\r\n mapAttach.set(bk.id, attBin)\r\n }\r\n }\r\n })\r\n\r\n let sCmd: string\r\n if (zip) {\r\n const unzipBtBody = pako.ungzip(btBody)\r\n sCmd = new TextDecoder().decode(unzipBtBody)\r\n } else {\r\n sCmd = new TextDecoder().decode(btBody)\r\n }\r\n\r\n return sCmd\r\n }\r\n\r\n static getPojoValue(pojo: CsonPojo | null | undefined): any {\r\n if (pojo == null) return null\r\n if (pojo instanceof ValuePojo) return pojo.value\r\n if (pojo instanceof NullPojo) return null\r\n\r\n return pojo\r\n }\r\n}\r\n\r\nexport class JavaFactory {\r\n static CSON_BEANS: Map<string, CsonBean> = new Map()\r\n\r\n static registPojos(beans: Map<string, CsonBean>): void {\r\n beans.forEach((v, k) => {\r\n JavaFactory.registPojo(k, v)\r\n })\r\n }\r\n\r\n static registPojo(javaType: string, pojo: CsonBean): void {\r\n JavaFactory.CSON_BEANS.set(javaType, pojo)\r\n }\r\n\r\n static getPojoByName(javaType: string, create: boolean = true): CsonBean | undefined | null {\r\n if (javaType === null) return null\r\n const org = JavaFactory.CSON_BEANS.get(javaType)\r\n if (create ?? true) return Utils.cloneWithRef(org)\r\n else return org\r\n }\r\n\r\n static newBean(javaType: string, json: { [key: string]: any } | null): CsonBean | null {\r\n let bean = JavaFactory.getPojoByName(javaType)\r\n if (bean == null) {\r\n bean = new CsonPojo().setObjectType(javaType)\r\n if (json !== null) {\r\n bean.setExtJsonMap(json)\r\n }\r\n return bean\r\n }\r\n\r\n return plainToClassFromExist(bean, json)\r\n }\r\n}\r\n\r\n/**\r\n * 初始化 CSON 序列化系统\r\n * @deprecated POJO 注册由 index.ts 入口自动完成,无需手动调用\r\n */\r\nexport function initCsonSystem() {\r\n // no-op: registration is handled in index.ts\r\n}\r\n","/**\r\n * POJO 类型注册表\r\n *\r\n * 将所有 WxMini SDK 需要的 POJO 类注册到 JavaFactory 中,\r\n * 以便 CSON 反序列化时能正确构造对象实例。\r\n */\r\nimport { JavaFactory } from './cson'\r\nimport { CRpcFeCmd, CRpcFeRsp, FeException, FeJavaException } from './cson-core'\r\nimport {\r\n SystemCallback,\r\n FePojo,\r\n NullPojo,\r\n ValuePojo,\r\n BinBlock,\r\n PartitionTable,\r\n FeAbilityExecuteException,\r\n FeWxMiniCmdException,\r\n WxMiniBridgeCommand,\r\n WxMiniCommand,\r\n WxMiniConfigDto,\r\n QueryWxMiniParam,\r\n QuerySceneFromWxMiniParams,\r\n CRpcCallbackCmd,\r\n CRpcCallbackRsp,\r\n} from './pojo'\r\n\r\nexport function registerAllPojos() {\r\n const beans = new Map<string, any>([\r\n // 基础 RPC 类型\r\n [CRpcFeRsp.JAVA_TYPE, new CRpcFeRsp()],\r\n [CRpcFeCmd.JAVA_TYPE, new CRpcFeCmd()],\r\n [FeException.JAVA_TYPE, new FeException()],\r\n [FeJavaException.JAVA_TYPE, new FeJavaException()],\r\n\r\n // 基础 POJO\r\n [SystemCallback.JAVA_TYPE, new SystemCallback()],\r\n [FePojo.JAVA_TYPE, new FePojo()],\r\n [NullPojo.JAVA_TYPE, new NullPojo()],\r\n [ValuePojo.JAVA_TYPE, new ValuePojo()],\r\n\r\n // 协议相关\r\n [BinBlock.JAVA_TYPE, new BinBlock()],\r\n [PartitionTable.JAVA_TYPE, new PartitionTable()],\r\n [CRpcCallbackCmd.JAVA_TYPE, new CRpcCallbackCmd()],\r\n [CRpcCallbackRsp.JAVA_TYPE, new CRpcCallbackRsp()],\r\n\r\n // 异常类型\r\n [FeAbilityExecuteException.JAVA_TYPE, new FeAbilityExecuteException()],\r\n [FeWxMiniCmdException.JAVA_TYPE, new FeWxMiniCmdException()],\r\n\r\n // WxMini 业务类型\r\n [WxMiniBridgeCommand.JAVA_TYPE, new WxMiniBridgeCommand()],\r\n [WxMiniCommand.JAVA_TYPE, new WxMiniCommand()],\r\n [WxMiniConfigDto.JAVA_TYPE, new WxMiniConfigDto()],\r\n [QueryWxMiniParam.JAVA_TYPE, new QueryWxMiniParam()],\r\n [QuerySceneFromWxMiniParams.JAVA_TYPE, new QuerySceneFromWxMiniParams()],\r\n ])\r\n\r\n JavaFactory.registPojos(beans)\r\n}\r\n","/**\r\n * 设备/环境检测工具\r\n */\r\n\r\n/** 检测是否在微信小程序 WebView 环境中 */\r\nexport function isWxMiniprogram(): boolean {\r\n if (typeof window === 'undefined' || typeof navigator === 'undefined') {\r\n return false\r\n }\r\n const userAgent = window.navigator.userAgent.toLowerCase()\r\n return userAgent.includes('micromessenger') && userAgent.includes('miniprogram')\r\n}\r\n\r\n/** 检测触摸屏支持 */\r\nexport function isTouchDevice(): boolean {\r\n if (typeof window === 'undefined') return false\r\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0\r\n}\r\n\r\n/** 获取平台类型 */\r\nexport function getPlatform(): string {\r\n if (typeof navigator === 'undefined') return 'Unknown'\r\n const ua = navigator.userAgent\r\n if (/Windows/.test(ua)) return 'Windows'\r\n if (/Macintosh|Mac OS X/.test(ua)) return 'macOS'\r\n if (/Linux/.test(ua)) return 'Linux'\r\n if (/Android/.test(ua)) return 'Android'\r\n if (/iPhone|iPad|iPod/.test(ua)) return 'iOS'\r\n return 'Unknown'\r\n}\r\n\r\n/** 获取浏览器名称 */\r\nexport function getBrowserName(): string {\r\n if (typeof navigator === 'undefined') return 'Unknown'\r\n const userAgent = navigator.userAgent.toLowerCase()\r\n\r\n if (userAgent.includes('micromessenger')) return 'WeChat'\r\n if (userAgent.includes('firefox')) return 'Firefox'\r\n if (userAgent.includes('edg')) return 'Edge (Chromium)'\r\n if (userAgent.includes('edge')) return 'Edge (Legacy)'\r\n if (userAgent.includes('opr') || userAgent.includes('opera')) return 'Opera'\r\n if (userAgent.includes('trident') || userAgent.includes('msie')) return 'Internet Explorer'\r\n if (userAgent.includes('chrome')) return 'Chrome'\r\n if (userAgent.includes('safari')) return 'Safari'\r\n return 'Unknown'\r\n}\r\n","/**\r\n * WsClient - WebSocket CSON-RPC 客户端\r\n *\r\n * 从原项目 framework/ws.ts 抽取,移除了 GuiMgr / PanelCallback 等\r\n * Vue 应用层依赖,改为可注入的回调处理器模式。\r\n */\r\nimport * as CSON from './cson'\r\nimport { Cson } from './cson'\r\nimport pako from 'pako'\r\nimport { CRpcFeCmd, CsonBean, CsonPojo, FeException } from './cson-core'\r\nimport {\r\n BinBlock,\r\n CRpcCallbackCmd,\r\n CRpcCallbackRsp,\r\n PartitionTable,\r\n} from './pojo'\r\nimport { Bytes, Utils } from './utils'\r\n\r\n// 特殊的PING服务\r\nconst PING_SERVICE = \"[PING]\";\r\n\r\nexport enum PingStatus {\r\n success,\r\n failed,\r\n timeout,\r\n none,\r\n}\r\n\r\nexport class PingResult {\r\n constructor(status: PingStatus = PingStatus.none, error?: any) {\r\n this.status = status;\r\n this.error = error;\r\n }\r\n\r\n status: PingStatus;\r\n error?: any;\r\n}\r\n\r\ntype RpcResponseFuncType = (data: Uint8Array, isCompressed: boolean) => void\r\n\r\nexport class WebSocketError extends Error {\r\n constructor(msg: string) {\r\n super(msg)\r\n }\r\n}\r\n\r\nexport class WebSocketConnectError extends Error {\r\n name: string = \"WebSocketConnectError\";\r\n cause?: unknown;\r\n\r\n constructor(msg: string, options?: { cause?: unknown }) {\r\n super(msg)\r\n this.cause = options?.cause;\r\n }\r\n}\r\n\r\nexport interface ConnectOptions {\r\n loopRetry: boolean,\r\n}\r\n\r\n/**\r\n * 服务端回调处理器接口\r\n * \r\n * 用于处理来自服务端的回调请求。使用方需要实现此接口来处理\r\n * SystemCallback 和 PanelCallback 等回调。\r\n */\r\nexport interface ServerCallbackHandler {\r\n handleCallback(data: CsonPojo): Promise<any>;\r\n}\r\n\r\nexport const clients = new Set<WsClient>();\r\n\r\nclass WsClient {\r\n private socket: WebSocket | null = null\r\n private url: string\r\n private _callbackHandler: ServerCallbackHandler | undefined\r\n\r\n getSocket(): WebSocket | null {\r\n return this.socket\r\n }\r\n\r\n getUrl(): string {\r\n return this.url\r\n }\r\n\r\n /**\r\n * 设置服务端回调处理器\r\n */\r\n setCallbackHandler(handler: ServerCallbackHandler) {\r\n this._callbackHandler = handler\r\n }\r\n\r\n // 小版本的0位,标识是否压缩\r\n static _maskZipFlag: number = 0x01\r\n\r\n // 四号字节代表返回包类型\r\n static _typeBinRpcRSP: number = 101\r\n static _typeBinRpcCallbackReq: number = 102\r\n static _typeBinRpcCallbackRsp: number = 103\r\n\r\n static _reqLength: number = 13\r\n static _rspLength: number = 13\r\n\r\n static _rspZipFlagOffset: number = 3\r\n static _rspReqIdOffset: number = 5\r\n static _rspTypeFlagOffset: number = 4\r\n\r\n static _int32Length: number = 4\r\n\r\n static _wsFlagSingle: number = 0\r\n static _wsFlagStart: number = 2\r\n static _wsFlagContinue: number = 3\r\n static _wsFlagEnd: number = 4\r\n static _wsMaxFrame: number = 65000\r\n\r\n static _wsBinHeader: Uint8Array = new Uint8Array([\r\n 'L'.charCodeAt(0),\r\n 1,\r\n 0,\r\n 0,\r\n 100\r\n ])\r\n\r\n static _wsBinHeaderZip: Uint8Array = new Uint8Array(['L'.charCodeAt(0), 1, 0, 1, 100])\r\n\r\n static _wsBinHeaderCallbackRSP: Uint8Array = new Uint8Array([\r\n 'L'.charCodeAt(0),\r\n 1,\r\n 0,\r\n 1,\r\n WsClient._typeBinRpcCallbackRsp\r\n ])\r\n\r\n constructor(url: string) {\r\n this.url = url\r\n clients.add(this);\r\n }\r\n\r\n connect(options?: ConnectOptions) {\r\n if (!this.socket || !this.isSocketValid()) {\r\n this.socket = new WebSocket(this.url)\r\n\r\n this.socket.onopen = (event) => this.onSocketConnected(event)\r\n this.socket.onmessage = (event) => this.onSocketMessage(event)\r\n this.socket.onclose = (event) => this.onSocketClose(event)\r\n this.socket.onerror = (event) => this.onSocketError(event)\r\n\r\n if (options?.loopRetry != false) {\r\n this.tryStartLoop()\r\n }\r\n } else {\r\n Utils.log('WebSocket is already connected or connecting')\r\n }\r\n }\r\n\r\n async blockConnect(options?: ConnectOptions) {\r\n this.connect(options)\r\n try {\r\n await Utils.pollBlock(\r\n () => this.isSocketValid(),\r\n 3000,\r\n 100,\r\n 'Timed out to connect server : ' + this.url\r\n )\r\n } catch (err) {\r\n this.close()\r\n throw err\r\n }\r\n }\r\n\r\n pingInterval = 5000\r\n intervalId: ReturnType<typeof setInterval> | undefined\r\n tryStartLoop() {\r\n if (this.intervalId) return\r\n this.intervalId = setInterval(() => this.loopRetryConnect(), this.pingInterval)\r\n }\r\n\r\n close() {\r\n clients.delete(this);\r\n try {\r\n if (this.socket) {\r\n this.socket.close()\r\n }\r\n } catch (err) {\r\n Utils.error(err)\r\n }\r\n\r\n if (this.intervalId != null) {\r\n clearInterval(this.intervalId)\r\n this.intervalId = undefined\r\n }\r\n }\r\n\r\n loopRetryConnect() {\r\n if (this.isSocketValid()) return\r\n Utils.log('Retry connecting : %s ... ', this.url)\r\n this.connect()\r\n }\r\n\r\n onSocketConnected(event: Event) {\r\n Utils.log('WebSocket is connected : %s (%s)', this.url, event)\r\n }\r\n\r\n onSocketClose(event: CloseEvent) {\r\n Utils.log('WebSocket is closed : %s (%s)', this.url, event)\r\n }\r\n\r\n isSocketValid(): boolean {\r\n return this.socket?.readyState === WebSocket.OPEN\r\n }\r\n\r\n onSocketMessage(event: MessageEvent) {\r\n if (event.data instanceof Blob) {\r\n event.data.arrayBuffer().then((bt) => {\r\n this.handleReceivedData(bt)\r\n })\r\n } else throw new Error('Recieved illegal message : ' + event)\r\n }\r\n\r\n static SIM_SERVER_CON_ERROR_HEADER: Uint8Array = new Uint8Array([128, 0, 0, 128, 33, 77])\r\n static checkConnectionError(bytes: Uint8Array | null) {\r\n if (bytes == null) return\r\n\r\n const prefixLength = WsClient.SIM_SERVER_CON_ERROR_HEADER.length\r\n const arrayLength = bytes.length\r\n\r\n if (arrayLength < prefixLength) {\r\n return\r\n }\r\n\r\n for (let i = 0; i < prefixLength; i++) {\r\n if (bytes[i] !== WsClient.SIM_SERVER_CON_ERROR_HEADER[i]) {\r\n return\r\n }\r\n }\r\n\r\n const body = bytes.subarray(prefixLength)\r\n const msg = Utils.utf8ToString(body)\r\n throw new WebSocketError(msg ?? 'Unknown error message')\r\n }\r\n\r\n wrapSocketErrorBytes(error: any): Uint8Array {\r\n const msg = error + ''\r\n const msgBytes = Utils.string2Utf8(msg ?? 'Unknown error')!\r\n return Utils.concatUint8Arrays([WsClient.SIM_SERVER_CON_ERROR_HEADER, msgBytes])\r\n }\r\n\r\n onSocketError(error: Event) {\r\n for (const req of Array.from(this._mapRpc.keys())) {\r\n const func = this._mapRpc.get(req)\r\n this._mapRpc.delete(req)\r\n\r\n const msg =\r\n error.type +\r\n ':' +\r\n this.url +\r\n '(' +\r\n WsClient.getWebSocketStateName(this.socket?.readyState) +\r\n ')'\r\n func?.call(this, this.wrapSocketErrorBytes(msg), true)\r\n }\r\n\r\n Utils.error('WebSocket error : %s', error + '')\r\n }\r\n\r\n _reqId: number = 300\r\n _mapRpc: Map<number, RpcResponseFuncType> = new Map()\r\n _rpcCodec = new RpcCodec()\r\n\r\n async ping(timeout = 5) {\r\n return new Promise<PingResult>((resolve, reject) => {\r\n const cmd = new CRpcFeCmd();\r\n cmd.service = PING_SERVICE;\r\n\r\n const result = new PingResult();\r\n\r\n setTimeout(() => {\r\n result.status = PingStatus.timeout;\r\n resolve(result);\r\n }, timeout * 1000);\r\n\r\n this.rpcAsync(cmd, null)\r\n .then((_) => {\r\n result.status = PingStatus.success;\r\n resolve(result);\r\n })\r\n .catch((error) => {\r\n result.status = PingStatus.failed;\r\n result.error = error;\r\n resolve(result)\r\n });\r\n });\r\n }\r\n\r\n rpc(cmd: any, onAct: RpcResponseFuncType): number {\r\n if (!this.isSocketValid())\r\n throw new Error('Invalid connection status : ' + WsClient.getWebSocketStateName(this.socket?.readyState))\r\n\r\n const req: number = this._reqId++\r\n cmd.reqId = req\r\n\r\n const cmdBytes: Uint8Array = this._rpcCodec.toBytes(cmd)\r\n this._mapRpc.set(req, onAct)\r\n\r\n const header: Uint8Array = WsClient.buildRpcHeader(req, this._rpcCodec.zipOut)\r\n try {\r\n this.sendRpcBytes(header, cmdBytes)\r\n } catch (err) {\r\n if (err instanceof Error) {\r\n console.error(err.message)\r\n } else {\r\n console.error(err)\r\n }\r\n }\r\n return req\r\n }\r\n\r\n async rpcAsync<T>(cmd: any, returnType: any): Promise<T> {\r\n return new Promise((resolve, reject) => {\r\n this.rpc(cmd, (data, isZip) => {\r\n try {\r\n const retData = CSON.Cson.decodeReturn(data, isZip)\r\n\r\n if (returnType != null) {\r\n if (Utils.isInstance(retData, returnType)) resolve(retData as T)\r\n else\r\n reject('Invalid return data type(Desired Type' + returnType + '). Value=' + retData)\r\n } else resolve(retData)\r\n } catch (error) {\r\n if (error instanceof FeException) reject(error)\r\n else reject('Failed to decode RPC return data:' + data)\r\n }\r\n })\r\n })\r\n }\r\n\r\n async handleReceivedData(buffer: ArrayBuffer): Promise<void> {\r\n const data = new Uint8Array(buffer)\r\n const bytes = new Uint8Array(data)\r\n\r\n const lowVer = new DataView(bytes.buffer, bytes.byteOffset).getInt8(WsClient._rspZipFlagOffset)\r\n const zip = (lowVer & WsClient._maskZipFlag) > 0\r\n const pkgType = new DataView(bytes.buffer, bytes.byteOffset).getInt8(\r\n WsClient._rspTypeFlagOffset\r\n )\r\n const req = Bytes.readInt32(bytes, WsClient._rspReqIdOffset + 4)\r\n const body = bytes.slice(WsClient._rspLength)\r\n\r\n if (pkgType === WsClient._typeBinRpcRSP) {\r\n const func = this._mapRpc.get(req) as RpcResponseFuncType | undefined\r\n if (func != null) {\r\n func(body, zip)\r\n this._mapRpc.delete(req)\r\n } else {\r\n Utils.error(`Recieved None Request Response (${req}) ${bytes.byteLength} byte`)\r\n }\r\n } else if (pkgType === WsClient._typeBinRpcCallbackReq) {\r\n this.callbackFromServer(req, body)\r\n }\r\n }\r\n\r\n async callbackFromServer(reqId: number, cmdByte: Uint8Array) {\r\n const rsp: CRpcCallbackRsp = new CRpcCallbackRsp()\r\n rsp.reqId = reqId\r\n\r\n try {\r\n const mapAttach: Map<number, Uint8Array> = new Map()\r\n const rspJson = Cson.decodeServerPackage(cmdByte, true, mapAttach)\r\n if (Utils.isStringEmpty(rspJson)) return null\r\n\r\n const cmd: CRpcCallbackCmd = Cson.decodeJson(rspJson!, mapAttach)\r\n\r\n if (cmd.data != null) {\r\n if (this._callbackHandler) {\r\n const result = await this._callbackHandler.handleCallback(cmd.data)\r\n rsp.result = result == null ? undefined : result\r\n } else {\r\n Utils.log('No callback handler registered, ignoring server callback')\r\n }\r\n }\r\n } catch (error) {\r\n Utils.error('Callback error:', error)\r\n throw error\r\n } finally {\r\n this.sendCallbackRsp(rsp)\r\n }\r\n }\r\n\r\n sendMessage(message: string) {\r\n if (this.socket && this.isSocketValid()) {\r\n this.socket.send(message)\r\n } else {\r\n Utils.error('WebSocket is invalid : %s', this.socket?.readyState)\r\n }\r\n }\r\n\r\n static getWebSocketStateName(state: number | undefined): string {\r\n if (state == null) return 'NULL'\r\n\r\n switch (state) {\r\n case WebSocket.OPEN:\r\n return 'OPEN'\r\n case WebSocket.CONNECTING:\r\n return 'CONNECTING'\r\n case WebSocket.CLOSING:\r\n return 'CLOSING'\r\n default:\r\n case WebSocket.CLOSED:\r\n return 'CLOSED'\r\n }\r\n }\r\n\r\n async sendBinary(data: ArrayBuffer | Blob) {\r\n await Utils.pollBlock(() => this.isSocketValid(), 5000, 200)\r\n\r\n if (this.socket && this.socket.readyState === WebSocket.OPEN) {\r\n this.socket.send(data)\r\n } else {\r\n Utils.error('WebSocket is not open')\r\n }\r\n }\r\n\r\n async sendRpcBytes(header: Uint8Array, bytes: Uint8Array) {\r\n if (!bytes || bytes.length === 0) return\r\n\r\n if (bytes.length <= WsClient._wsMaxFrame) {\r\n const lst = new Uint8Array([...header, WsClient._wsFlagSingle, ...bytes])\r\n this.sendBinary(lst.buffer)\r\n return\r\n }\r\n\r\n const length = bytes.length\r\n for (let i = 0; i < length; i += WsClient._wsMaxFrame) {\r\n let end = i + WsClient._wsMaxFrame\r\n let flag = WsClient._wsFlagEnd\r\n if (i === 0) {\r\n flag = WsClient._wsFlagStart\r\n } else if (end >= length) {\r\n flag = WsClient._wsFlagEnd\r\n end = length\r\n } else {\r\n flag = WsClient._wsFlagContinue\r\n }\r\n\r\n const lst = new Uint8Array([...header, flag, ...bytes.slice(i, end)])\r\n await this.sendBinary(lst.buffer)\r\n }\r\n }\r\n\r\n static buildRpcHeader(reqID: number, zip: boolean): Uint8Array {\r\n const bytes = new Uint8Array(WsClient._reqLength)\r\n const header = zip ? WsClient._wsBinHeaderZip : WsClient._wsBinHeader\r\n bytes.set(header, 0)\r\n\r\n Bytes.setInt32Bytes(bytes, this._reqLength - 4, reqID)\r\n return bytes\r\n }\r\n\r\n static buildCallbackRspHeader(reqID: number): Uint8Array {\r\n const bytes = new Uint8Array(WsClient._reqLength)\r\n bytes.set(WsClient._wsBinHeaderCallbackRSP, 0)\r\n\r\n Bytes.setInt32Bytes(bytes, this._reqLength - 4, reqID)\r\n return bytes\r\n }\r\n\r\n buildCallbackRspHeader(reqID: number): Uint8Array {\r\n const bytes = new Uint8Array(WsClient._reqLength)\r\n bytes.set(WsClient._wsBinHeaderCallbackRSP, 0)\r\n\r\n const dataView = new DataView(bytes.buffer)\r\n dataView.setInt32(9, reqID, true)\r\n return bytes\r\n }\r\n\r\n sendCallbackRsp(rsp: CRpcCallbackRsp): void {\r\n const cmdBytes: Uint8Array = this._rpcCodec.toBytes(rsp)\r\n const header: Uint8Array = this.buildCallbackRspHeader(rsp.reqId!)\r\n\r\n this.sendRpcBytes(header, cmdBytes)\r\n }\r\n}\r\n\r\nexport class RpcCodec {\r\n zipOut: boolean = true\r\n\r\n toBytes(cmd: CsonBean): Uint8Array {\r\n const attach: Map<number, Uint8Array> = new Map()\r\n const json: string = CSON.Cson.encode(cmd, attach)\r\n let bodyBytes: Uint8Array = new TextEncoder().encode(json)\r\n\r\n if (this.zipOut) {\r\n bodyBytes = pako.gzip(bodyBytes)\r\n }\r\n\r\n const pTable: PartitionTable = new PartitionTable()\r\n pTable.bodyLength = bodyBytes.length\r\n pTable.lstBin = []\r\n let lstBin: number[] = []\r\n let pos = 0\r\n for (const [key, value] of attach) {\r\n lstBin = lstBin.concat(Array.from(value))\r\n const bk: BinBlock = new BinBlock()\r\n bk.id = key\r\n bk.start = pos\r\n\r\n const nowlength = lstBin.length\r\n bk.end = nowlength - 1\r\n pos = nowlength\r\n\r\n pTable.lstBin!.push(bk)\r\n }\r\n\r\n const parJson: string = CSON.Cson.encode(pTable, null)\r\n const parBytes: Uint8Array = new TextEncoder().encode(parJson)\r\n\r\n let lstBytes: number[] = Array.from(CSON.int32ToBytes(parBytes.length))\r\n lstBytes = lstBytes.concat(Array.from(parBytes))\r\n lstBytes = lstBytes.concat(Array.from(bodyBytes))\r\n lstBytes = lstBytes.concat(lstBin)\r\n\r\n return new Uint8Array(lstBytes)\r\n }\r\n}\r\n\r\nexport default WsClient\r\n","import type WsClient from './ws-client'\r\n\r\nexport class WsService {\r\n wsClient: WsClient\r\n service: string\r\n constructor(wsClient: WsClient, service: string) {\r\n this.wsClient = wsClient\r\n this.service = service\r\n }\r\n\r\n getClient(): WsClient {\r\n return this.wsClient\r\n }\r\n getServiceName(): string {\r\n return this.service\r\n }\r\n}\r\n","/**\r\n * IWxMiniBridgeService - 微信小程序桥接 RPC 服务接口\r\n *\r\n * 对应 Java 端: cell.wx.mini.server.IWxMiniBridgeService\r\n */\r\nimport { CRpcFeCmd } from './cson-core'\r\nimport { WsService } from './rpc-core'\r\nimport { WxMiniBridgeCommand } from './pojo'\r\nimport type WsClient from './ws-client'\r\n\r\nexport class IWxMiniBridgeService extends WsService {\r\n\r\n static readonly SERVICE: string = 'cell.wx.mini.server.IWxMiniBridgeService';\r\n constructor(wsClient: WsClient) { super(wsClient, IWxMiniBridgeService.SERVICE) }\r\n\r\n static readonly DEFAULT_TIMEOUTS: number = 30;\r\n\r\n static readonly DEFAULT_WAIT_ONLINE_TIMEOUTS: number = 10;\r\n\r\n static readonly DECLARED_FIELDS: string[] = []\r\n\r\n async handleCommand(cmd: WxMiniBridgeCommand): Promise<Object> {\r\n const _cmd = new CRpcFeCmd()\r\n _cmd.service = this.getServiceName()\r\n _cmd.func = 'handleCommand'\r\n _cmd.params = [cmd];\r\n\r\n return this.wsClient.rpcAsync(_cmd, null)\r\n }\r\n}\r\n","/**\r\n * WxMiniBridge - 微信小程序桥接通信核心类\r\n *\r\n * 通过 WebSocket CSON-RPC 协议与微信小程序原生端通信,\r\n * 支持单条命令执行和批量命令执行。\r\n */\r\nimport { isWxMiniprogram } from './device-info'\r\nimport WsClient from './ws-client'\r\nimport {\r\n FeWxMiniCmdException,\r\n WxMiniBridgeCommand,\r\n WxMiniCommand,\r\n WxMiniConfigDto,\r\n} from './pojo'\r\nimport { IWxMiniBridgeService } from './rpc-interface'\r\n\r\ninterface WxMiniBridgeCommandResult {\r\n data: any,\r\n startTime: number,\r\n endTime: number,\r\n}\r\n\r\nfunction isWxMiniBridgeCommandResult(obj: any): obj is WxMiniBridgeCommandResult {\r\n return (\r\n typeof obj === \"object\" &&\r\n obj !== null &&\r\n \"data\" in obj &&\r\n \"startTime\" in obj &&\r\n \"endTime\" in obj &&\r\n typeof obj.startTime === \"number\" &&\r\n typeof obj.endTime === \"number\"\r\n );\r\n}\r\n\r\nconst _kBatchExecuteCommand: string = \"PRECMD_BATCH_CMD_HEX\";\r\n\r\nexport class WxMiniBridge {\r\n serverUrl: string | undefined;\r\n appUuid: string | undefined;\r\n bridgeWebSocketUrl: string | undefined;\r\n sceneFromWxMiniParams: string | undefined;\r\n initalQueryParameters: Map<string, any> | undefined;\r\n\r\n private _bridgeClient: WsClient | undefined;\r\n\r\n private _processOneResult(result: any) {\r\n if (typeof result == \"string\") {\r\n try {\r\n const jsonMap = JSON.parse(result);\r\n if (isWxMiniBridgeCommandResult(jsonMap)) {\r\n return jsonMap.data;\r\n }\r\n } catch (error) { }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n isBatchExecuting(command: WxMiniCommand): boolean {\r\n return command.cmd == _kBatchExecuteCommand;\r\n }\r\n\r\n async prepareBridgeClient(): Promise<WsClient> {\r\n if (!isWxMiniprogram()) {\r\n throw new Error(\"WxMiniCommand can't use out of wxMiniprogram.\");\r\n }\r\n\r\n if (this._bridgeClient == undefined) {\r\n if (this.bridgeWebSocketUrl == undefined) {\r\n throw new Error(\"The wxMini bridge webSocket url is undefined.\");\r\n }\r\n\r\n this._bridgeClient = new WsClient(this.bridgeWebSocketUrl!);\r\n await this._bridgeClient.blockConnect();\r\n }\r\n\r\n return this._bridgeClient;\r\n }\r\n\r\n async handleBridgeCallback(command: WxMiniCommand) {\r\n try {\r\n let bridgeCommand: WxMiniBridgeCommand = new WxMiniBridgeCommand();\r\n bridgeCommand.appId = this.appUuid;\r\n bridgeCommand.cmd = command.cmd;\r\n bridgeCommand.params = command.params;\r\n bridgeCommand.timeoutS = command.timeout;\r\n bridgeCommand.waitOnlineTimeoutS = command.waitOnlineTimeoutS;\r\n\r\n let result = await this.handleBridgeCommand(bridgeCommand);\r\n\r\n if (typeof result == \"string\") {\r\n result = this._processOneResult(result);\r\n\r\n if (this.isBatchExecuting(command)) {\r\n // 批量处理\r\n if (typeof result == \"string\") {\r\n result = JSON.parse(result);\r\n }\r\n\r\n result = Object.fromEntries(Object.entries(result).map((value) => [value[0], this._processOneResult(value[1])]));\r\n result = JSON.stringify(result);\r\n }\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n throw this._getWxMiniComdException(error, command);\r\n }\r\n }\r\n\r\n async handleBridgeCommand(command: WxMiniBridgeCommand) {\r\n if (command.appId == undefined) {\r\n command.appId = this.appUuid;\r\n }\r\n\r\n let service: IWxMiniBridgeService = new IWxMiniBridgeService(await this.prepareBridgeClient());\r\n let result = await service.handleCommand(command);\r\n return result;\r\n }\r\n\r\n queryConfig() {\r\n const configDto = new WxMiniConfigDto();\r\n configDto.wxMiniAppUuid = this.appUuid;\r\n configDto.wxMiniServerUrl = this.serverUrl;\r\n configDto.sceneFromWxMiniParams = this.sceneFromWxMiniParams;\r\n configDto.initalQueryParameters = this.initalQueryParameters;\r\n return configDto;\r\n }\r\n\r\n querySceneFromWxMiniParams() {\r\n return this.sceneFromWxMiniParams;\r\n }\r\n\r\n /**\r\n * 关闭桥接连接\r\n */\r\n close() {\r\n if (this._bridgeClient) {\r\n this._bridgeClient.close();\r\n this._bridgeClient = undefined;\r\n }\r\n }\r\n\r\n private _getWxMiniComdException(error: unknown, command: WxMiniCommand): FeWxMiniCmdException {\r\n const exception = new FeWxMiniCmdException();\r\n exception.ability = command;\r\n exception.wxMiniAppUuid = this.appUuid;\r\n exception.wxMiniServerUrl = this.serverUrl;\r\n\r\n if (error instanceof Error) {\r\n exception.err = error.message;\r\n exception.err = `${error}`;\r\n } else {\r\n exception.err = `${error}`;\r\n }\r\n\r\n return exception;\r\n }\r\n}\r\n","/**\r\n * WxMini API - 微信小程序高层调用接口\r\n *\r\n * 对 WxMiniBridge.handleBridgeCallback 的封装,将每个小程序功能封装为可直接 await 的前端方法。\r\n * 对应 Java 端:fe.cmn.weixin.ability.WxMiniCommand\r\n *\r\n * 所有 API 参数均采用对象形式传参,所有参数对象通过继承 BaseOptions 而统一支持 timeout 设置。\r\n */\r\n\r\nimport { WxMiniBridge } from './wx-mini'\r\nimport { WxMiniCommand } from './pojo'\r\n\r\n// ========================= 命令字枚举 =========================\r\n\r\n/** 小程序端支持的命令字,对应 Java 枚举 WxMiniCmd */\r\nexport enum WxMiniCmd {\r\n getUserProfile = 'getUserProfile',\r\n makePhoneCall = 'makePhoneCall',\r\n /** 调起相机并选取照片/视频 */\r\n chooseMedia = 'chooseMedia',\r\n readLocalFile = 'readLocalFile',\r\n getPhoneNum = 'getPhoneNum',\r\n scanCode = 'scanCode',\r\n /** 参数:url; 跳转到某内部页面 */\r\n navigateTo = 'navigateTo',\r\n /** 参数:url; 关闭当前页面跳转到某内部页面 */\r\n redirectTo = 'redirectTo',\r\n /** 参数:url; 关闭所有页面,打开到应用内的某个页面 */\r\n reLaunch = 'reLaunch',\r\n /** 参数:delta; 关闭当前页面,返回上一页面或多级页面 */\r\n navigateBack = 'navigateBack',\r\n /** 登录并返回登录码 code */\r\n loginGetCode = 'loginGetCode',\r\n saveProjectConfigParam = 'saveProjectConfigParam',\r\n loadProjectConfigParam = 'loadProjectConfigParam',\r\n /** 下载文件,返回临时文件路径 */\r\n downloadFile = 'downloadFile',\r\n /** 上传文件到服务器 */\r\n uploadFile = 'uploadFile',\r\n saveFileToDisk = 'saveFileToDisk',\r\n shareFileMessage = 'shareFileMessage',\r\n openDocument = 'openDocument',\r\n getLocation = 'getLocation',\r\n openLocation = 'openLocation',\r\n chooseLocation = 'chooseLocation',\r\n queryAppGlobalData = 'queryAppGlobalData',\r\n chooseMessageFile = 'chooseMessageFile',\r\n setSharePageMessage = 'setSharePageMessage',\r\n showShareImageMenu = 'showShareImageMenu',\r\n saveImageToPhotosAlbum = 'saveImageToPhotosAlbum',\r\n saveVideoToPhotosAlbum = 'saveVideoToPhotosAlbum',\r\n getClipboardData = 'getClipboardData',\r\n setClipboardData = 'setClipboardData',\r\n startAudioRecord = 'startAudioRecord',\r\n stopAudioRecord = 'stopAudioRecord',\r\n pauseAudioRecord = 'pauseAudioRecord',\r\n resumeAudioRecord = 'resumeAudioRecord',\r\n}\r\n\r\n// ========================= 基础类型 =========================\r\n\r\n/** 所有 API 参数对象的基类,统一支持 timeout 设置 */\r\nexport interface BaseOptions {\r\n /** 超时时间(毫秒),默认 60000ms */\r\n timeout?: number\r\n}\r\n\r\n/** WxMiniApi 初始化配置 */\r\nexport interface WxMiniApiConfig {\r\n /** 应用 UUID */\r\n appUuid?: string\r\n /** 桥接 WebSocket 地址 */\r\n bridgeWebSocketUrl?: string\r\n}\r\n\r\n// ========================= 公共数据类型 =========================\r\n\r\nexport type UserProfileQueryType = 'NickName' | 'Avartar' | 'All'\r\n\r\nexport interface GpsLocationDto {\r\n latitude?: number\r\n longitude?: number\r\n altitude?: number\r\n horizontalAccuracy?: number\r\n verticalAccuracy?: number\r\n speed?: number\r\n address?: string\r\n}\r\n\r\nexport interface WxLocalFile {\r\n /** 本地临时文件路径 */\r\n tempFilePath?: string\r\n /** 文件大小 */\r\n size?: number\r\n /** 文件类型 */\r\n fileType?: string\r\n /** 视频时长(秒),视频时有效 */\r\n duration?: number\r\n /** 视频缩略图 */\r\n thumbTempFilePath?: string\r\n /** 宽度,媒体文件有效 */\r\n width?: number\r\n /** 高度,媒体文件有效 */\r\n height?: number\r\n}\r\n\r\nexport interface WxSharePageInfo {\r\n title?: string\r\n path?: string\r\n imageUrl?: string\r\n desc?: string\r\n}\r\n\r\nexport interface WxMiniAppInfo {\r\n appId?: string\r\n appSecret?: string\r\n}\r\n\r\n// ========================= 各 API 参数类型 =========================\r\n\r\nexport interface GetUserProfileOptions extends BaseOptions {\r\n /** 显示在确认授权对话框里的文字信息 */\r\n message: string\r\n /** 显示在确认对话框里的按钮标签 */\r\n buttonLabel: string\r\n /** 获取信息的类型 */\r\n type?: UserProfileQueryType\r\n}\r\n\r\nexport interface GetPhoneNumOptions extends BaseOptions {\r\n /** 显示在确认授权对话框里的文字信息 */\r\n message: string\r\n /** 确认按钮标签 */\r\n buttonLabel: string\r\n /** 拒绝按钮标签 */\r\n rejectButtonLabel?: string\r\n}\r\n\r\nexport interface MakePhoneCallOptions extends BaseOptions {\r\n /** 电话号码 */\r\n phoneNum: string\r\n}\r\n\r\nexport interface ChooseMediaOptions extends BaseOptions {\r\n /** 最多选取数量,默认 2 */\r\n count?: number\r\n /** 媒体类型,如 ['image', 'video', 'mix'],默认 ['mix'] */\r\n mediaTypes?: string[]\r\n /** 来源类型,如 ['album', 'camera'],默认 ['album', 'camera'] */\r\n sourceTypes?: string[]\r\n /** 最大时长(秒),默认 30 */\r\n maxDuration?: number\r\n /** 尺寸类型,如 ['original', 'compressed'],默认 ['compressed', 'original'] */\r\n sizeTypes?: string[]\r\n /** 摄像头方向 'back' | 'front',默认 'back' */\r\n camera?: string\r\n}\r\n\r\nexport interface ReadLocalFileOptions extends BaseOptions {\r\n /** 文件路径 */\r\n filePath: string\r\n}\r\n\r\nexport interface DownloadFileOptions extends BaseOptions {\r\n /** 文件 URL */\r\n url: string\r\n}\r\n\r\nexport interface UploadFileOptions extends BaseOptions {\r\n /** 上传目标服务器地址 */\r\n url: string\r\n /** 本地临时文件路径 */\r\n filePath: string\r\n /** 上传的目标文件名 */\r\n fileName: string\r\n /** 其它表单参数(如用户/授权等) */\r\n formData?: Record<string, string>\r\n}\r\n\r\nexport interface OpenDocumentOptions extends BaseOptions {\r\n /** 临时文件路径 */\r\n filePath: string\r\n}\r\n\r\nexport interface SaveToAlbumOptions extends BaseOptions {\r\n /** 文件路径 */\r\n filePath: string\r\n}\r\n\r\nexport interface ShareFileMessageOptions extends BaseOptions {\r\n /** 要分享的临时文件路径 */\r\n filePath: string\r\n /** 显示在聊天界面的文件名(注意扩展名要正确) */\r\n fileName: string\r\n}\r\n\r\nexport interface ChooseMessageFileOptions extends BaseOptions {\r\n /** 最多可以选择的文件个数(0~100) */\r\n count: number\r\n /** 文件类型:'all' | 'video' | 'image' | 'file',默认 'all' */\r\n type?: string\r\n /** 文件扩展名过滤(仅 type=file 时有效) */\r\n extensions?: string[]\r\n}\r\n\r\nexport interface NavigateToOptions extends BaseOptions {\r\n /** 页面路径(如 '/pages/index/index') */\r\n path: string\r\n}\r\n\r\nexport interface RedirectToOptions extends BaseOptions {\r\n /** 页面路径 */\r\n path: string\r\n}\r\n\r\nexport interface ReLaunchOptions extends BaseOptions {\r\n /** 页面路径 */\r\n path: string\r\n}\r\n\r\nexport interface NavigateBackOptions extends BaseOptions {\r\n /** 返回的页面数,默认 1 */\r\n delta?: number\r\n}\r\n\r\nexport interface GetLocationOptions extends BaseOptions {\r\n /** 获取后是否打开地图,默认 false */\r\n openIt?: boolean\r\n}\r\n\r\nexport interface OpenLocationOptions extends BaseOptions {\r\n /** 位置坐标 */\r\n location: GpsLocationDto\r\n}\r\n\r\nexport interface ChooseLocationOptions extends BaseOptions {\r\n /** 初始定位(可选) */\r\n initLocation?: GpsLocationDto\r\n}\r\n\r\nexport interface SaveExtProjectConfigOptions extends BaseOptions {\r\n /** 配置参数键值对 */\r\n params: Record<string, string>\r\n /** true: 追加合并; false: 全量替换 */\r\n append: boolean\r\n}\r\n\r\nexport interface SetSharePageMessageOptions extends BaseOptions {\r\n /** 分享页信息 */\r\n sharePage: WxSharePageInfo\r\n}\r\n\r\nexport interface ShowShareImageMenuOptions extends BaseOptions {\r\n /** 图片路径 */\r\n path: string\r\n /** 样式 */\r\n style: string\r\n /** 是否需要显示入口 */\r\n needShowEntrance: string\r\n /** 入口路径 */\r\n entrancePath: string\r\n}\r\n\r\nexport interface SetClipboardDataOptions extends BaseOptions {\r\n /** 剪贴板内容 */\r\n data: string\r\n}\r\n\r\nexport interface StartAudioRecordOptions extends BaseOptions {\r\n /** 录音时长(毫秒) */\r\n duration?: number\r\n /** 采样率 */\r\n sampleRate?: number\r\n /** 通道数 */\r\n numberOfChannels?: number\r\n /** 编码码率 */\r\n encodeBitRate?: number\r\n /** 音频格式 */\r\n format?: string\r\n /** 帧大小 */\r\n frameSize?: number\r\n}\r\n\r\n// ========================= 命令构建辅助函数 =========================\r\n\r\nconst DEFAULT_TIMEOUT = 60 * 1000 // 60s\r\n\r\n/**\r\n * 创建一个 WxMiniCommand\r\n */\r\nfunction buildCmd(cmd: WxMiniCmd, opts?: BaseOptions, params?: Record<string, string | null>): WxMiniCommand {\r\n const command = new WxMiniCommand()\r\n command.cmd = cmd\r\n command.timeout = opts?.timeout ?? DEFAULT_TIMEOUT\r\n if (params) {\r\n command.params = new Map(Object.entries(params))\r\n }\r\n return command\r\n}\r\n\r\nfunction addParams(cmd: WxMiniCommand, params: Record<string, string | null | undefined>): WxMiniCommand {\r\n if (!cmd.params) {\r\n cmd.params = new Map()\r\n }\r\n for (const [k, v] of Object.entries(params)) {\r\n cmd.params.set(k, v ?? null)\r\n }\r\n return cmd\r\n}\r\n\r\n// ========================= WxMiniApi 类 =========================\r\n\r\n/**\r\n * 微信小程序高层 API 封装。\r\n *\r\n * 所有方法都是对 `WxMiniBridge.handleBridgeCallback` 的语义化包装,\r\n * 不再需要手动构建 WxMiniCommand 对象。\r\n * 所有方法参数都采用对象形式,并统一继承自 BaseOptions 以支持自定义 timeout。\r\n *\r\n * @example\r\n * ```ts\r\n * import { WxMiniApi } from 'wxmini-sdk'\r\n *\r\n * // 方式一:构造函数传配置\r\n * const api = new WxMiniApi({\r\n * appUuid: 'xxx',\r\n * bridgeWebSocketUrl: 'wss://...',\r\n * })\r\n *\r\n * // 方式二:后续动态设置\r\n * const api2 = new WxMiniApi()\r\n * api2.configure({ appUuid: 'xxx', bridgeWebSocketUrl: 'wss://...' })\r\n *\r\n * // 获取手机号\r\n * const phoneResult = await api.getPhoneNum({ message: '请授权手机号', buttonLabel: '允许' })\r\n *\r\n * // 扫二维码(自定义超时 30 秒)\r\n * const scanResult = await api.scanCode({ timeout: 30000 })\r\n * ```\r\n */\r\nexport class WxMiniApi {\r\n /** @internal 底层桥接实例 */\r\n private readonly _bridge: WxMiniBridge\r\n\r\n constructor(config?: WxMiniApiConfig) {\r\n this._bridge = new WxMiniBridge()\r\n if (config) {\r\n this.configure(config)\r\n }\r\n }\r\n\r\n /**\r\n * 设置或更新配置\r\n * @param config - appUuid 和 bridgeWebSocketUrl\r\n */\r\n configure(config: WxMiniApiConfig): void {\r\n if (config.appUuid !== undefined) {\r\n this._bridge.appUuid = config.appUuid\r\n }\r\n if (config.bridgeWebSocketUrl !== undefined) {\r\n this._bridge.bridgeWebSocketUrl = config.bridgeWebSocketUrl\r\n }\r\n }\r\n\r\n /**\r\n * 关闭桥接连接,释放资源\r\n */\r\n close(): void {\r\n this._bridge.close()\r\n }\r\n\r\n /** 执行一个命令并返回结果 */\r\n private async execute(command: WxMiniCommand): Promise<any> {\r\n return this._bridge.handleBridgeCallback(command)\r\n }\r\n\r\n /** 执行并将结果 JSON 解析为对象 */\r\n private async executeAs<T>(command: WxMiniCommand): Promise<T> {\r\n const result = await this.execute(command)\r\n if (typeof result === 'string') {\r\n return JSON.parse(result) as T\r\n }\r\n return result as T\r\n }\r\n\r\n // ========================= 用户信息 =========================\r\n\r\n /**\r\n * 通过微信小程序接口, 获取用户信息(昵称/头像等)\r\n */\r\n async getUserProfile(opts: GetUserProfileOptions): Promise<string> {\r\n const command = buildCmd(WxMiniCmd.getUserProfile, opts, {\r\n [WxMiniCommand.getUserProfile_MESSAGE]: opts.message,\r\n [WxMiniCommand.getUserProfile_BUTTON]: opts.buttonLabel,\r\n [WxMiniCommand.getUserProfile_QUERY_TYPE]: opts.type ?? 'All',\r\n })\r\n return this.execute(command)\r\n }\r\n\r\n // ========================= 手机号 =========================\r\n\r\n /**\r\n * 通过微信小程序接口,获取用户手机号码\r\n */\r\n async getPhoneNum(opts: GetPhoneNumOptions): Promise<string> {\r\n const command = buildCmd(WxMiniCmd.getPhoneNum, opts, {\r\n [WxMiniCommand.getPhoneNum_MESSAGE]: opts.message,\r\n [WxMiniCommand.getPhoneNum_BUTTON]: opts.buttonLabel,\r\n [WxMiniCommand.getPhoneNum_REJECT_BUTTON]: opts.rejectButtonLabel ?? null,\r\n })\r\n return this.execute(command)\r\n }\r\n\r\n // ========================= 拨打电话 =========================\r\n\r\n /**\r\n * 拨打电话\r\n */\r\n async makePhoneCall(opts: MakePhoneCallOptions): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.makePhoneCall, opts, {\r\n [WxMiniCommand.makePhoneCall_phoneNum]: opts.phoneNum,\r\n })\r\n await this.execute(command)\r\n }\r\n\r\n // ========================= 媒体选择 =========================\r\n\r\n /**\r\n * 调起相机并选取照片/视频\r\n */\r\n async chooseMedia(opts: ChooseMediaOptions = {}): Promise<WxLocalFile[]> {\r\n const {\r\n count = 2,\r\n mediaTypes = [WxMiniCommand.MEDIATYPE_mix],\r\n sourceTypes = [WxMiniCommand.SOURCETYPE_album, WxMiniCommand.SOURCETYPE_camera],\r\n maxDuration = 30,\r\n sizeTypes = [WxMiniCommand.SIZETYPE_compressed, WxMiniCommand.SIZETYPE_original],\r\n camera = WxMiniCommand.CAMERA_back,\r\n } = opts\r\n const command = buildCmd(WxMiniCmd.chooseMedia, opts, {\r\n [WxMiniCommand.PARAM_count]: String(count),\r\n [WxMiniCommand.PARAM_mediaType]: JSON.stringify(mediaTypes),\r\n [WxMiniCommand.PARAM_sourceType]: JSON.stringify(sourceTypes),\r\n [WxMiniCommand.PARAM_maxDuration]: String(maxDuration),\r\n [WxMiniCommand.PARAM_sizeType]: JSON.stringify(sizeTypes),\r\n [WxMiniCommand.PARAM_camera]: camera,\r\n })\r\n return this.executeAs<WxLocalFile[]>(command)\r\n }\r\n\r\n // ========================= 扫码 =========================\r\n\r\n /**\r\n * 扫描二维码,返回二维码内容\r\n */\r\n async scanCode(opts: BaseOptions = {}): Promise<string> {\r\n const command = buildCmd(WxMiniCmd.scanCode, opts)\r\n return this.execute(command)\r\n }\r\n\r\n // ========================= 文件操作 =========================\r\n\r\n /**\r\n * 读取本地文件内容\r\n * @warning 文件超过 60K 会导致链接中断,适合小文件\r\n */\r\n async readLocalFile(opts: ReadLocalFileOptions): Promise<string> {\r\n const command = buildCmd(WxMiniCmd.readLocalFile, opts, {\r\n [WxMiniCommand.PARAM_FILE_PATH]: opts.filePath,\r\n })\r\n return this.execute(command)\r\n }\r\n\r\n /**\r\n * 下载文件,返回临时文件路径\r\n */\r\n async downloadFile(opts: DownloadFileOptions): Promise<string> {\r\n const command = buildCmd(WxMiniCmd.downloadFile, opts, {\r\n [WxMiniCommand.PARAM_URL]: opts.url,\r\n })\r\n return this.execute(command)\r\n }\r\n\r\n /**\r\n * 上传文件到服务器\r\n */\r\n async uploadFile(opts: UploadFileOptions): Promise<string> {\r\n const command = buildCmd(WxMiniCmd.uploadFile, opts, {\r\n [WxMiniCommand.PARAM_URL]: opts.url,\r\n [WxMiniCommand.PARAM_FILE_PATH]: opts.filePath,\r\n [WxMiniCommand.PARAM_UPLOAD_FILE_NAME]: opts.fileName,\r\n [WxMiniCommand.PARAM_UPLOAD_FORM_DATA]: opts.formData ? JSON.stringify(opts.formData) : null,\r\n })\r\n return this.execute(command)\r\n }\r\n\r\n /**\r\n * 打开预览文档(支持 txt/pdf/excel/word/ppt 等格式)\r\n */\r\n async openDocument(opts: OpenDocumentOptions): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.openDocument, opts, {\r\n [WxMiniCommand.PARAM_FILE_PATH]: opts.filePath,\r\n })\r\n await this.execute(command)\r\n }\r\n\r\n /**\r\n * 保存图片到相册\r\n */\r\n async saveImageToPhotosAlbum(opts: SaveToAlbumOptions): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.saveImageToPhotosAlbum, opts, {\r\n [WxMiniCommand.PARAM_FILE_PATH]: opts.filePath,\r\n })\r\n await this.execute(command)\r\n }\r\n\r\n /**\r\n * 保存视频到相册\r\n */\r\n async saveVideoToPhotosAlbum(opts: SaveToAlbumOptions): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.saveVideoToPhotosAlbum, opts, {\r\n [WxMiniCommand.PARAM_FILE_PATH]: opts.filePath,\r\n })\r\n await this.execute(command)\r\n }\r\n\r\n /**\r\n * 分享文件消息(将临时文件分享给他人)\r\n */\r\n async shareFileMessage(opts: ShareFileMessageOptions): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.shareFileMessage, opts, {\r\n [WxMiniCommand.PARAM_FILE_PATH]: opts.filePath,\r\n [WxMiniCommand.PARAM_SHARE_FILE_NAME]: opts.fileName,\r\n })\r\n await this.execute(command)\r\n }\r\n\r\n /**\r\n * 从聊天记录中选择文件\r\n */\r\n async chooseMessageFile(opts: ChooseMessageFileOptions): Promise<WxLocalFile[]> {\r\n const command = buildCmd(WxMiniCmd.chooseMessageFile, opts, {\r\n [WxMiniCommand.PARAM_COUNT]: String(opts.count),\r\n [WxMiniCommand.PARAM_TYPE]: opts.type ?? 'all',\r\n [WxMiniCommand.PARAM_EXTENSION]: opts.extensions ? JSON.stringify(opts.extensions) : null,\r\n })\r\n return this.executeAs<WxLocalFile[]>(command)\r\n }\r\n\r\n // ========================= 页面导航 =========================\r\n\r\n /**\r\n * 跳转到小程序内部页面\r\n */\r\n async navigateTo(opts: NavigateToOptions): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.navigateTo, opts, {\r\n [WxMiniCommand.PARAM_URL]: opts.path,\r\n })\r\n await this.execute(command)\r\n }\r\n\r\n /**\r\n * 关闭当前页面后跳转\r\n */\r\n async redirectTo(opts: RedirectToOptions): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.redirectTo, opts, {\r\n [WxMiniCommand.PARAM_URL]: opts.path,\r\n })\r\n await this.execute(command)\r\n }\r\n\r\n /**\r\n * 关闭所有页面,打开应用内某页面(清空页面栈)\r\n */\r\n async reLaunch(opts: ReLaunchOptions): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.reLaunch, opts, {\r\n [WxMiniCommand.PARAM_URL]: opts.path,\r\n })\r\n await this.execute(command)\r\n }\r\n\r\n /**\r\n * 关闭当前页面,返回上一页面或多级页面\r\n */\r\n async navigateBack(opts: NavigateBackOptions = {}): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.navigateBack, opts, {\r\n [WxMiniCommand.PARAM_delta]: String(opts.delta ?? 1),\r\n })\r\n await this.execute(command)\r\n }\r\n\r\n // ========================= 登录 =========================\r\n\r\n /**\r\n * 调用微信登录,返回登录码 code\r\n */\r\n async loginGetCode(opts: BaseOptions = {}): Promise<string> {\r\n const command = buildCmd(WxMiniCmd.loginGetCode, opts)\r\n return this.execute(command)\r\n }\r\n\r\n // ========================= 位置 =========================\r\n\r\n /**\r\n * 获取当前位置(经纬度)\r\n */\r\n async getLocation(opts: GetLocationOptions = {}): Promise<GpsLocationDto> {\r\n const command = buildCmd(WxMiniCmd.getLocation, opts, {\r\n [WxMiniCommand.PARAM_OPENIT]: String(opts.openIt ?? false),\r\n })\r\n return this.executeAs<GpsLocationDto>(command)\r\n }\r\n\r\n /**\r\n * 打开地图并定位到指定位置\r\n */\r\n async openLocation(opts: OpenLocationOptions): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.openLocation, opts, {\r\n [WxMiniCommand.PARAM_LOCATION]: JSON.stringify(opts.location),\r\n })\r\n await this.execute(command)\r\n }\r\n\r\n /**\r\n * 打开地图让用户选择位置,返回所选位置坐标\r\n */\r\n async chooseLocation(opts: ChooseLocationOptions = {}): Promise<GpsLocationDto> {\r\n const command = buildCmd(WxMiniCmd.chooseLocation, opts)\r\n addParams(command, {\r\n [WxMiniCommand.PARAM_LOCATION]: opts.initLocation ? JSON.stringify(opts.initLocation) : '{}'\r\n })\r\n return this.executeAs<GpsLocationDto>(command)\r\n }\r\n\r\n // ========================= 工程配置 =========================\r\n\r\n /**\r\n * 保存扩展的工程配置参数到小程序本地(页面启动时会自动合并传入)\r\n */\r\n async saveExtProjectConfig(opts: SaveExtProjectConfigOptions): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.saveProjectConfigParam, opts, {\r\n [WxMiniCommand.PARAM_MAP_JSON]: JSON.stringify(opts.params),\r\n [WxMiniCommand.PARAM_APPEND]: String(opts.append),\r\n })\r\n await this.execute(command)\r\n }\r\n\r\n /**\r\n * 读取保存在小程序本地的扩展工程配置参数\r\n */\r\n async loadExtProjectConfig(opts: BaseOptions = {}): Promise<Record<string, string>> {\r\n const command = buildCmd(WxMiniCmd.loadProjectConfigParam, { timeout: opts.timeout ?? 5000 })\r\n return this.executeAs<Record<string, string>>(command)\r\n }\r\n\r\n // ========================= 应用数据 =========================\r\n\r\n /**\r\n * 查询小程序 App 的 GlobalData\r\n */\r\n async queryAppGlobalData<T = any>(opts: BaseOptions = {}): Promise<T> {\r\n const command = buildCmd(WxMiniCmd.queryAppGlobalData, opts)\r\n return this.executeAs<T>(command)\r\n }\r\n\r\n // ========================= 分享 =========================\r\n\r\n /**\r\n * 设置分享页信息(用于分享转发,全局一份)\r\n */\r\n async setSharePageMessage(opts: SetSharePageMessageOptions): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.setSharePageMessage, opts, {\r\n [WxMiniCommand.PARAM_sharePage]: JSON.stringify(opts.sharePage),\r\n })\r\n await this.execute(command)\r\n }\r\n\r\n /**\r\n * 显示图片分享菜单\r\n */\r\n async showShareImageMenu(opts: ShowShareImageMenuOptions): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.showShareImageMenu, opts, {\r\n [WxMiniCommand.PARAM_path]: opts.path,\r\n [WxMiniCommand.PARAM_style]: opts.style,\r\n [WxMiniCommand.PARAM_needShowEntrance]: opts.needShowEntrance,\r\n [WxMiniCommand.PARAM_entrancePath]: opts.entrancePath,\r\n })\r\n await this.execute(command)\r\n }\r\n\r\n // ========================= 剪贴板 =========================\r\n\r\n /**\r\n * 读取剪贴板内容\r\n */\r\n async getClipboardData(opts: BaseOptions = {}): Promise<string> {\r\n const command = buildCmd(WxMiniCmd.getClipboardData, opts)\r\n return this.execute(command)\r\n }\r\n\r\n /**\r\n * 写入剪贴板\r\n */\r\n async setClipboardData(opts: SetClipboardDataOptions): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.setClipboardData, opts, {\r\n [WxMiniCommand.CLIP_BOARD_DATA]: opts.data,\r\n })\r\n await this.execute(command)\r\n }\r\n\r\n // ========================= 录音 =========================\r\n\r\n /**\r\n * 开始录音\r\n */\r\n async startAudioRecord(opts: StartAudioRecordOptions = {}): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.startAudioRecord, opts)\r\n const { duration, sampleRate, numberOfChannels, encodeBitRate, format, frameSize } = opts\r\n const recOpts: Record<string, any> = {}\r\n if (duration !== undefined) recOpts.duration = duration\r\n if (sampleRate !== undefined) recOpts.sampleRate = sampleRate\r\n if (numberOfChannels !== undefined) recOpts.numberOfChannels = numberOfChannels\r\n if (encodeBitRate !== undefined) recOpts.encodeBitRate = encodeBitRate\r\n if (format !== undefined) recOpts.format = format\r\n if (frameSize !== undefined) recOpts.frameSize = frameSize\r\n if (Object.keys(recOpts).length > 0) {\r\n addParams(command, { options: JSON.stringify(recOpts) })\r\n }\r\n await this.execute(command)\r\n }\r\n\r\n /**\r\n * 停止录音,返回录音文件临时路径\r\n */\r\n async stopAudioRecord(opts: BaseOptions = {}): Promise<string> {\r\n const command = buildCmd(WxMiniCmd.stopAudioRecord, opts)\r\n return this.execute(command)\r\n }\r\n\r\n /**\r\n * 暂停录音\r\n */\r\n async pauseAudioRecord(opts: BaseOptions = {}): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.pauseAudioRecord, opts)\r\n await this.execute(command)\r\n }\r\n\r\n /**\r\n * 继续录音\r\n */\r\n async resumeAudioRecord(opts: BaseOptions = {}): Promise<void> {\r\n const command = buildCmd(WxMiniCmd.resumeAudioRecord, opts)\r\n await this.execute(command)\r\n }\r\n}\r\n","/**\r\n * WxMini SDK\r\n *\r\n * 微信小程序桥接通信 SDK,通过 WebSocket CSON-RPC 协议与微信小程序原生端通信。\r\n * 与 Vue/React 等框架无关,可直接打包用于任何 TypeScript/JavaScript 项目。\r\n */\r\n\r\n// 初始化 CSON 系统\r\nimport { registerAllPojos } from './pojo-registry'\r\nregisterAllPojos()\r\n\r\n// ==================== 核心导出 ====================\r\n\r\nexport { WxMiniBridge } from './wx-mini'\r\nexport {\r\n WxMiniApi,\r\n WxMiniCmd,\r\n type BaseOptions,\r\n type WxMiniApiConfig,\r\n type GpsLocationDto,\r\n type WxLocalFile,\r\n type WxSharePageInfo,\r\n type WxMiniAppInfo,\r\n type UserProfileQueryType,\r\n type GetUserProfileOptions,\r\n type GetPhoneNumOptions,\r\n type MakePhoneCallOptions,\r\n type ChooseMediaOptions,\r\n type ReadLocalFileOptions,\r\n type DownloadFileOptions,\r\n type UploadFileOptions,\r\n type OpenDocumentOptions,\r\n type SaveToAlbumOptions,\r\n type ShareFileMessageOptions,\r\n type ChooseMessageFileOptions,\r\n type NavigateToOptions,\r\n type RedirectToOptions,\r\n type ReLaunchOptions,\r\n type NavigateBackOptions,\r\n type GetLocationOptions,\r\n type OpenLocationOptions,\r\n type ChooseLocationOptions,\r\n type SaveExtProjectConfigOptions,\r\n type SetSharePageMessageOptions,\r\n type ShowShareImageMenuOptions,\r\n type SetClipboardDataOptions,\r\n type StartAudioRecordOptions,\r\n} from './wx-mini-api'\r\n\r\n// ==================== WebSocket / RPC ====================\r\n\r\nexport {\r\n default as WsClient,\r\n PingStatus,\r\n PingResult,\r\n WebSocketError,\r\n WebSocketConnectError,\r\n RpcCodec,\r\n clients,\r\n type ConnectOptions,\r\n type ServerCallbackHandler,\r\n} from './ws-client'\r\n\r\nexport { WsService } from './rpc-core'\r\nexport { IWxMiniBridgeService } from './rpc-interface'\r\n\r\n// ==================== CSON 序列化 ====================\r\n\r\nexport { Cson, JavaFactory } from './cson'\r\nexport {\r\n CsonBean,\r\n CsonPojo,\r\n FeException,\r\n FeJavaException,\r\n CRpcFeCmd,\r\n CRpcFeRsp,\r\n} from './cson-core'\r\n\r\n// ==================== POJO 数据类型 ====================\r\n\r\nexport {\r\n SystemCallback,\r\n FePojo,\r\n NullPojo,\r\n ValuePojo,\r\n BinBlock,\r\n PartitionTable,\r\n FeAbilityExecuteException,\r\n FeWxMiniCmdException,\r\n WxMiniBridgeCommand,\r\n WxMiniCommand,\r\n WxMiniConfigDto,\r\n QueryWxMiniParam,\r\n QuerySceneFromWxMiniParams,\r\n CRpcCallbackCmd,\r\n CRpcCallbackRsp,\r\n} from './pojo'\r\n\r\n// ==================== 工具 ====================\r\n\r\nexport { Utils, Bytes } from './utils'\r\nexport {\r\n isWxMiniprogram,\r\n isTouchDevice,\r\n getPlatform,\r\n getBrowserName,\r\n} from './device-info'\r\n"]}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@fgz/wxmini-sdk",
3
+ "version": "1.0.0",
4
+ "description": "WxMini Bridge SDK - 微信小程序桥接通信 SDK",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "publishConfig": {
20
+ "access": "public",
21
+ "registry": "https://registry.npmjs.org/"
22
+ },
23
+ "scripts": {
24
+ "build": "tsup",
25
+ "dev": "tsup --watch",
26
+ "type-check": "tsc --noEmit",
27
+ "prepublishOnly": "npm run build"
28
+ },
29
+ "dependencies": {
30
+ "class-transformer": "^0.5.1",
31
+ "pako": "^2.1.0",
32
+ "reflect-metadata": "^0.2.2",
33
+ "uuid": "^11.1.0"
34
+ },
35
+ "devDependencies": {
36
+ "@types/pako": "^2.0.3",
37
+ "tsup": "^8.4.0",
38
+ "typescript": "^5.9.2"
39
+ }
40
+ }