{"version":3,"sources":["../../src/index.ts","../../src/message/index.ts"],"sourcesContent":["/* import { Buffer } from 'buffer';\r\nglobalThis.Buffer = Buffer; */\r\nimport { PostMessage } from './message';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport {\r\n  IInitData,\r\n  UserResponse,\r\n  AccountInfo,\r\n  UserResponseStatus,\r\n  UserRejection,\r\n  NetworkInfo,\r\n  ChainData,\r\n} from './types';\r\n// web and WebView\r\n///// #if BUILD_PLATFORM !== 'MINIPROGRAM'\r\n///// #endif\r\nimport { getChain, getChainIdByName, isApproveTx, isLuffa, isLuffaMiniProgram, isLuffaMiniProgramWebview, normalizeMessageForDisplay } from './utils';\r\nimport { EvmSDKEvent, EvmSDKEventPayload, EvmSDKEventType, IRequestData } from './message/types';\r\nexport { isLuffa, isLuffaMiniProgram, isLuffaMiniProgramWebview } from './utils';\r\nexport interface Metadata {\r\n  title: string;\r\n  url: string;\r\n  origin: string;\r\n  icon: string;\r\n  gameId: string;\r\n  userId: string;\r\n  walletAddress: string;\r\n}\r\nexport { EvmSDKEvent } from './message/types';\r\nexport { UserResponseStatus } from './types';\r\nexport type { UserResponse, AccountInfo } from './types';\r\nexport enum MethodName {\r\n  CONNECT = 'connect',\r\n  GETACCOUNT = 'getAccount',\r\n  DISCONNECT = 'disconnect',\r\n  CURRENT_CHAIN = 'currentChain',\r\n  NETWORK_CHANGE = 'luffa_switchChain',\r\n  SIGN_MESSAGE = 'signMessage',\r\n  SEND_TRANSACTION = 'sendTransaction',\r\n  SIGN_AND_SUBMIT_TRANSACTION = 'signAndSubmitTransaction',\r\n  SIGN_TRANSACTION = 'signTransaction',\r\n  SIGN_BUILD_TRANSACTION = 'signBuildTransaction',\r\n  EVM_APPROVE = 'evmApprove',\r\n  ACCOUNT_CHANGE = 'accountChange',\r\n}\r\nexport class LuffaEvmSdk {\r\n  static readonly version: string = '1.0.8';\r\n  private static _instance: LuffaEvmSdk;\r\n  private message: PostMessage | null = null;\r\n  private _metadata: Metadata = {} as Metadata;\r\n  private _initData: IInitData = {} as IInitData;\r\n  private accountAddress: string | null = null;\r\n\r\n  static getIninData = (): IInitData => {\r\n    if (LuffaEvmSdk._instance) {\r\n      return LuffaEvmSdk._instance._initData;\r\n    } else {\r\n      return {} as IInitData;\r\n    }\r\n  };\r\n  static getAccountAddress = () => {\r\n    if (LuffaEvmSdk._instance) {\r\n      return LuffaEvmSdk._instance.accountAddress;\r\n    } else {\r\n      return null;\r\n    }\r\n  };\r\n  static setAccountAddress = (accountAddress: string | null) => {\r\n    if (LuffaEvmSdk._instance) {\r\n      LuffaEvmSdk._instance.accountAddress = accountAddress;\r\n    }\r\n  };\r\n\r\n  constructor(initData: IInitData) {\r\n    if (LuffaEvmSdk._instance) return LuffaEvmSdk._instance;\r\n    this.message = new PostMessage();\r\n    this.getMetadata();\r\n    this.initConfig(initData);\r\n    LuffaEvmSdk._instance = this;\r\n  }\r\n\r\n  private initConfig(initData: IInitData) {\r\n    this._initData.callbackWalletName = 'evmWallet';\r\n    this._initData.network = initData.network;\r\n    const evmProvider = Object.freeze({\r\n      isMetaMask: false,\r\n      request: this.request,\r\n      on: this.on,\r\n      removeListener: this.off,\r\n    });\r\n    Object.defineProperty(globalThis, 'ethereum', {\r\n      value: evmProvider,\r\n      writable: false,\r\n    });\r\n    function announceProvider() {\r\n      const info = {\r\n        uuid: uuidv4(),\r\n        name: 'LuffaEvmWallet',\r\n        icon: '',\r\n        rdns: 'org.luffa.wallet',\r\n      };\r\n      window.dispatchEvent(\r\n        new CustomEvent('eip6963:announceProvider', {\r\n          detail: Object.freeze({ info, provider: evmProvider }),\r\n        })\r\n      );\r\n    }\r\n\r\n    window.addEventListener('eip6963:requestProvider', () => {\r\n      announceProvider();\r\n    });\r\n\r\n    announceProvider();\r\n  }\r\n\r\n  async sendTransaction(params: any) {\r\n    if (!this.accountAddress) {\r\n      const res = await this.connect();\r\n      this.accountAddress = res[0];\r\n    }\r\n    console.log('sendTransaction params: ', params);\r\n    const { isApprove, spender } = isApproveTx(params.params[0].data);\r\n    console.log('isApprove: ', isApprove, spender);\r\n    if (isApprove) {\r\n      params.to = spender;\r\n      return this.signAndSubmitTransaction(params, MethodName.EVM_APPROVE);\r\n    } else {\r\n      return this.signAndSubmitTransaction(params);\r\n    }\r\n  }\r\n\r\n  private getMetadata() {\r\n    if (!window) {\r\n      return;\r\n    }\r\n    const iconLink = document.querySelector('link[rel=\"icon\"]') || document.querySelector('link[rel=\"shortcut icon\"]');\r\n    let iconUrl = iconLink?.getAttribute('href') || '';\r\n    if (iconUrl && !iconUrl.startsWith('http')) {\r\n      iconUrl = new URL(iconUrl, window.location.origin).href;\r\n    }\r\n\r\n    this._metadata.title = window.document.title;\r\n    this._metadata.url = window.location.href;\r\n    this._metadata.origin = window.location.origin;\r\n    this._metadata.icon = iconUrl;\r\n  }\r\n\r\n  request = (data: IRequestData, callback?: (data: unknown) => void) => {\r\n    switch (data.method) {\r\n      case 'eth_requestAccounts':\r\n        return this.connect();\r\n      case 'eth_accounts':\r\n        return this.getAccount();\r\n      case 'eth_chainId':\r\n        return this.currentChain();\r\n      case 'wallet_switchEthereumChain':\r\n        return this.luffa_switchChain(data);\r\n      case 'eth_sendTransaction':\r\n        return this.sendTransaction(data);\r\n      case 'personal_sign':\r\n        return this.signMessage(data);\r\n      case 'wallet_revokePermissions':\r\n        return this.disconnect();\r\n\r\n      default: {\r\n        throw new Error('Unsupported method: ' + data.method);\r\n      }\r\n    }\r\n  };\r\n\r\n  luffa_switchChain = (data: IRequestData): Promise<string | { status: string }> => {\r\n    return new Promise((resolve) => {\r\n      const network = getChain(data?.params[0]?.chainId);\r\n\r\n      this.message?.sendMessage(\r\n        {\r\n          uuid: new Date().getTime().toString(),\r\n          methodName: MethodName.NETWORK_CHANGE,\r\n          metadata: this._metadata,\r\n          data: { targetNet: network },\r\n        },\r\n        (res) => {\r\n          if (res?.network) {\r\n            this._initData.network = res.network;\r\n          }\r\n          const result = {\r\n            ...res,\r\n          };\r\n          resolve(result);\r\n        }\r\n      );\r\n    });\r\n  };\r\n\r\n  currentChain = (): Promise<string | { status: string }> => {\r\n    return new Promise((resolve) => {\r\n      this.message?.sendMessage(\r\n        {\r\n          uuid: new Date().getTime().toString(),\r\n          methodName: MethodName.CURRENT_CHAIN,\r\n          metadata: this._metadata,\r\n          data: {},\r\n        },\r\n        (res) => {\r\n          if (res?.network) {\r\n            this._initData.network = res?.network;\r\n            const result = `0x${getChainIdByName(res?.network)?.toString(16)}`;\r\n            resolve(result);\r\n          } else {\r\n            const result = { status: 'Rejected' };\r\n            resolve(result);\r\n          }\r\n        }\r\n      );\r\n    });\r\n  };\r\n\r\n  getAccount = (): Promise<string[]> => {\r\n    return new Promise((resolve) => {\r\n      this.message?.sendMessage(\r\n        {\r\n          uuid: new Date().getTime().toString(),\r\n          methodName: MethodName.GETACCOUNT,\r\n          metadata: this._metadata,\r\n          data: {},\r\n        },\r\n        (data) => {\r\n          if (data?.account) {\r\n            this.accountAddress = data.account;\r\n            resolve([data.account]);\r\n          } else {\r\n            resolve([]);\r\n          }\r\n        }\r\n      );\r\n    });\r\n  };\r\n\r\n  connect = (): Promise<[string]> => {\r\n    return new Promise((resolve, reject) => {\r\n      this.message?.sendMessage(\r\n        {\r\n          uuid: new Date().getTime().toString(),\r\n          methodName: MethodName.CONNECT,\r\n          metadata: this._metadata,\r\n          data: {},\r\n        },\r\n        (data) => {\r\n          let res;\r\n          if (data?.account) {\r\n            this.accountAddress = data.account;\r\n            res = [data.account] as [string];\r\n            resolve(res);\r\n          } else {\r\n            res = {\r\n              code: 4001,\r\n              message: 'User rejected the request.',\r\n            };\r\n            reject(res);\r\n          }\r\n        }\r\n      );\r\n    });\r\n  };\r\n\r\n  disconnect = (callback?: (data: unknown) => void): Promise<void> => {\r\n    return new Promise((resolve, reject) => {\r\n      this.message?.sendMessage(\r\n        {\r\n          uuid: new Date().getTime().toString(),\r\n          methodName: MethodName.DISCONNECT,\r\n          metadata: this._metadata,\r\n          data: {},\r\n        },\r\n        (data: unknown) => {\r\n          this.accountAddress = null;\r\n          if (callback) callback(data);\r\n          resolve();\r\n        }\r\n      );\r\n    });\r\n  };\r\n\r\n  on = <K extends EvmSDKEventType>(methodName: K, callback: (payload: EvmSDKEventPayload<K>) => void) => {\r\n    if (this.message?.addListener) {\r\n      this.message?.addListener(methodName, callback);\r\n    }\r\n  };\r\n  off = <K extends EvmSDKEventType>(methodName: K, callback?: (payload: EvmSDKEventPayload<K>) => void) => {\r\n    if (this.message?.removeListener) {\r\n      this.message?.removeListener(methodName, callback);\r\n    }\r\n  };\r\n\r\n  signAndSubmitTransaction = async (\r\n    data: IRequestData,\r\n    methodName = MethodName.SIGN_AND_SUBMIT_TRANSACTION\r\n  ): Promise<any> => {\r\n    if (!this.accountAddress) {\r\n      const res = await this.connect();\r\n      this.accountAddress = res[0];\r\n    }\r\n    return new Promise(async (resolve, reject) => {\r\n      this.message?.sendMessage(\r\n        {\r\n          uuid: new Date().getTime().toString(),\r\n          methodName: methodName,\r\n          metadata: this._metadata,\r\n          data: data.params[0],\r\n        },\r\n        (res) => {\r\n          if (res?.hash) {\r\n            resolve(res.hash);\r\n          } else {\r\n            reject({\r\n              code: 4001,\r\n              message: res?.message,\r\n            });\r\n          }\r\n        }\r\n      );\r\n    });\r\n  };\r\n\r\n  signTransaction = (params: any, methodName = MethodName.SIGN_BUILD_TRANSACTION): Promise<any> => {\r\n    return new Promise(async (resolve, reject) => {\r\n      const data: { raw_data_hex: string; to?: string } = {\r\n        raw_data_hex: params.raw_data_hex,\r\n      };\r\n      if (params.to) {\r\n        data.to = params.to;\r\n      }\r\n      this.message?.sendMessage(\r\n        {\r\n          uuid: new Date().getTime().toString(),\r\n          methodName,\r\n          metadata: this._metadata,\r\n          data,\r\n        },\r\n        (res) => {\r\n          const signature = res?.signature?.split(',') || [];\r\n          console.log('luffa evm signature: ', signature);\r\n          if (Array.isArray(signature) && signature.length > 0) {\r\n            const result = {\r\n              ...params,\r\n              signature,\r\n            };\r\n            resolve(result);\r\n          } else {\r\n            reject('Confirmation declined by user');\r\n          }\r\n        }\r\n      );\r\n    });\r\n  };\r\n\r\n  signMessage = (\r\n    data: IRequestData,\r\n    callback?: (data: unknown) => void\r\n  ): Promise<UserResponse<any>> => {\r\n    return new Promise(async (resolve) => {\r\n      if (!this.accountAddress) {\r\n        await this.connect();\r\n      }\r\n      this.message?.sendMessage(\r\n        {\r\n          uuid: new Date().getTime().toString(),\r\n          methodName: MethodName.SIGN_MESSAGE,\r\n          metadata: this._metadata,\r\n          data: {\r\n            message: normalizeMessageForDisplay(data.params[0])\r\n          }\r\n        },\r\n        (res) => {\r\n          console.log('signMessage res: ', res);\r\n          if (res?.signature) {\r\n            const result: UserResponse<any> = {\r\n              status: UserResponseStatus.APPROVED,\r\n              args: res,\r\n            };\r\n            resolve(result);\r\n          } else {\r\n            const result: UserRejection = { status: UserResponseStatus.REJECTED, message: res?.message };\r\n            resolve(result);\r\n          }\r\n          if (callback) callback(res);\r\n        }\r\n      );\r\n    });\r\n  };\r\n\r\n  onAccountChange = (callback: (data: AccountInfo) => void) => {\r\n    this.on(EvmSDKEvent.ACCOUNT_CHANGE, callback);\r\n  };\r\n\r\n  onNetworkChange = (callback: (data: NetworkInfo) => void) => {\r\n    this.on(EvmSDKEvent.NETWORK_CHANGE, callback);\r\n  };\r\n}\r\n","import { AccountInfo, LuffaEvmSdk, MethodName } from '../index';\r\nimport type { IMessageData, EvmSDKEventListenersType, EvmSDKEventPayload, EvmSDKEventType } from './types';\r\nimport { EvmSDKEvent, IResponseMessageData } from './types';\r\nimport { isLuffaMiniProgramWebview, isLuffaMiniProgram, isLuffa, networkMap, getChainIdByName } from '../utils';\r\n\r\nexport class PostMessage {\r\n  private static _instance: PostMessage;\r\n  callbacks: {\r\n    [key: string]: (data: unknown) => void;\r\n  } = {};\r\n  private listeners: EvmSDKEventListenersType = {};\r\n\r\n  constructor() {\r\n    if (PostMessage._instance) return PostMessage._instance;\r\n    PostMessage._instance = this;\r\n    if (isLuffa()) {\r\n      window.evmWallet = {\r\n        sendResponse: this.sendResponse.bind(this),\r\n      };\r\n    }\r\n  }\r\n  // wallet emit sdk\r\n  // SDK processing method itself\r\n  private readonly receive = (msg: { data: IResponseMessageData }) => {\r\n    console.log('luffa evm receive msg.data: ', msg.data);\r\n    const eventType = msg.data.methodName as EvmSDKEventType | MethodName;\r\n    // sdk callbacks\r\n    if (this.callbacks[msg.data.uuid + eventType]) {\r\n      this.callbacks[msg.data.uuid + eventType](msg.data.data);\r\n      delete this.callbacks[msg.data.uuid + eventType];\r\n    }\r\n\r\n    // Some events are being monitored by dapp and require running a monitoring callback\r\n    switch (eventType) {\r\n      case EvmSDKEvent.NETWORK_CHANGE: {\r\n        let network = msg.data.data.network;\r\n        if (!network) break;\r\n        if (isLuffaMiniProgram()) {\r\n          network = msg.data.data;\r\n        }\r\n        this.emit(eventType, network);\r\n        this.emit(EvmSDKEvent.CHAIN_CHANGED, `0x${getChainIdByName(network)?.toString(16)}`);\r\n\r\n        break;\r\n      }\r\n\r\n      // sdk to dapp send event\r\n      case EvmSDKEvent.CONNECT:\r\n        this.emit(eventType, [msg?.data?.data?.account]);\r\n        break;\r\n      case EvmSDKEvent.ACCOUNT_CHANGE: {\r\n        if (msg?.data?.data?.account) {\r\n          LuffaEvmSdk.setAccountAddress(msg.data.data.account);\r\n          this.emit(EvmSDKEvent.ACCOUNTS_CHANGE, [msg?.data?.data?.account]);\r\n        } else {\r\n          LuffaEvmSdk.setAccountAddress(null);\r\n        }\r\n        break;\r\n      }\r\n\r\n      case EvmSDKEvent.DISCONNECT: {\r\n        LuffaEvmSdk.setAccountAddress(null);\r\n        this.emit(eventType, msg.data.data);\r\n        this.emit(EvmSDKEvent.ACCOUNTS_CHANGE, []);\r\n        break;\r\n      }\r\n\r\n      default:\r\n        this.emit(eventType as EvmSDKEventType, msg.data.data);\r\n        break;\r\n    }\r\n  };\r\n\r\n  readonly addListener = <K extends EvmSDKEventType>(\r\n    methodName: K,\r\n    callback: (payload: EvmSDKEventPayload<K>) => void,\r\n  ) => {\r\n    console.log('addListener: ', methodName, this.listeners[methodName]);\r\n    if (!this.listeners[methodName]) {\r\n      this.listeners[methodName] = [];\r\n    }\r\n    this.listeners[methodName].push(callback);\r\n  };\r\n\r\n  readonly removeListener = <K extends EvmSDKEventType>(\r\n    methodName: K,\r\n    callback?: (payload: EvmSDKEventPayload<K>) => void,\r\n  ) => {\r\n    if (callback) {\r\n      const index = this.listeners[methodName]?.indexOf(callback) ?? -1;\r\n      if (index > -1) {\r\n        this.listeners?.[methodName]?.splice(index, 1);\r\n      }\r\n    } else {\r\n      this.listeners[methodName] = [];\r\n    }\r\n  };\r\n\r\n  readonly emit = <K extends EvmSDKEventType>(methodName: K, payload: EvmSDKEventPayload<K>) => {\r\n    console.log('emit: ', methodName, payload);\r\n    this.listeners?.[methodName]?.forEach((d) => d(payload));\r\n  };\r\n\r\n  readonly sendMessage = (data: IMessageData, callback?: (data: any) => void) => {\r\n    try {\r\n      if (isLuffa()) {\r\n        this.sendLuffaMessage(data, callback);\r\n        return;\r\n      }\r\n      if (isLuffaMiniProgram() || isLuffaMiniProgramWebview()) {\r\n        this.sendMiniProgramMessage(data, callback);\r\n        return;\r\n      }\r\n    } catch (error) {\r\n      console.error('sendMessage error: ', error);\r\n    }\r\n  };\r\n\r\n  private sendLuffaMessage(data: IMessageData, callback?: (data: any) => void) {\r\n    const initData = data?.initData || LuffaEvmSdk.getIninData();\r\n    data.initData = {\r\n      ...(initData || {}),\r\n      network: networkMap[initData.network] ?? initData.network,\r\n    };\r\n    data.from = LuffaEvmSdk.getAccountAddress();\r\n    if (callback) {\r\n      this.callbacks[data.uuid + data.methodName] = callback;\r\n    }\r\n    console.log('luffa evm sendLuffaMessage: ', data);\r\n    if (window?._evmWallet) {\r\n      window._evmWallet?.sendMessage(JSON.stringify(data));\r\n    } else if (window?.webkit && window?.webkit?.messageHandlers?._evmWallet) {\r\n      window.webkit.messageHandlers._evmWallet?.postMessage(data);\r\n    }\r\n  }\r\n\r\n  private sendResponse(response: string) {\r\n    console.log('luffa evm sendResponse: ', response);\r\n    const responseData = JSON.parse(response);\r\n    console.log('luffa evm responseData: ', responseData);\r\n    this.receive({\r\n      data: responseData,\r\n    });\r\n  }\r\n\r\n  private sendMiniProgramMessage(data: IMessageData, callback?: (data: any) => void) {\r\n    let funName = 'invokeNativePlugin';\r\n    const accountAddress = LuffaEvmSdk.getAccountAddress();\r\n    const initData = LuffaEvmSdk.getIninData();\r\n    let api_name = 'luffaWebRequest';\r\n    let params = {\r\n      api_name,\r\n      data: {\r\n        func: data.methodName,\r\n        chainType: 'endless',\r\n        ...data,\r\n        initData: {\r\n          ...initData,\r\n          network: networkMap[initData.network] ?? initData.network,\r\n        },\r\n        from: accountAddress,\r\n      },\r\n    };\r\n    let callbackSuccessFun = (res: any) => {\r\n      callback &&\r\n        callback({\r\n          status: 'success',\r\n          ...(res.data || {}),\r\n        });\r\n    };\r\n    let callbackErrorFun = (res: any) => {\r\n      callback &&\r\n        callback({\r\n          status: 'error',\r\n          ...(res.data || {}),\r\n        });\r\n    };\r\n    switch (data.methodName) {\r\n      case MethodName.CONNECT:\r\n      case MethodName.GETACCOUNT:\r\n        callbackSuccessFun = (res) => {\r\n          LuffaEvmSdk.setAccountAddress(res.data.account);\r\n          callback &&\r\n            callback({\r\n              account: res?.data?.address || '',\r\n              ...(res.data || {}),\r\n            });\r\n        };\r\n        break;\r\n      case MethodName.SIGN_MESSAGE:\r\n      case MethodName.SIGN_TRANSACTION:\r\n      case MethodName.SIGN_BUILD_TRANSACTION:\r\n      case MethodName.SIGN_AND_SUBMIT_TRANSACTION:\r\n      case MethodName.EVM_APPROVE:\r\n        callbackSuccessFun = (res: any) => {\r\n          callback &&\r\n            callback({\r\n              status: 'success',\r\n              ...(res.data || {}),\r\n            });\r\n        };\r\n        callbackErrorFun = (res: any) => {\r\n          callback &&\r\n            callback({\r\n              status: 'error',\r\n              ...(res.data || {}),\r\n            });\r\n        };\r\n        break;\r\n\r\n      default:\r\n        break;\r\n    }\r\n    console.log('luffa evm funName: ', funName);\r\n    console.log('luffa evm params: ', params);\r\n    if (isLuffaMiniProgram()) {\r\n      wx[funName]({\r\n        ...params,\r\n        complete: (res: any) => {\r\n          console.log(`luffa evm wx ${funName} res: `, res);\r\n          if (res.status === undefined) {\r\n            callback &&\r\n              callback({\r\n                ...res,\r\n              });\r\n          } else if (res.status === 'success') {\r\n            callbackSuccessFun(res);\r\n            this.receive({\r\n              data: res,\r\n            });\r\n          } else {\r\n            callbackErrorFun(res);\r\n          }\r\n        },\r\n      });\r\n    } else if (isLuffaMiniProgramWebview()) {\r\n      window.WeixinJSBridge?.invoke(funName, params, (res) => {\r\n        console.log(`luffa evm WeixinJSBridge ${funName} res: `, res);\r\n        if (res.status === undefined) {\r\n          callback &&\r\n            callback({\r\n              ...res,\r\n            });\r\n        } else if (res.status === 'success') {\r\n          callbackSuccessFun(res);\r\n          this.receive({\r\n            data: res,\r\n          });\r\n        } else {\r\n          callbackErrorFun(res);\r\n        }\r\n      });\r\n    }\r\n  }\r\n}\r\n"],"mappings":"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","names":["uuidv4","MethodName","_LuffaEvmSdk","initData","__publicField","data","callback","resolve","network","getChain","res","result","getChainIdByName","reject","methodName","params","signature","normalizeMessageForDisplay","PostMessage","evmProvider","announceProvider","info","uuidv4","isApprove","spender","isApproveTx","iconUrl","accountAddress","LuffaEvmSdk","_PostMessage","__publicField","msg","eventType","network","isLuffaMiniProgram","getChainIdByName","LuffaEvmSdk","methodName","callback","index","payload","d","data","isLuffa","isLuffaMiniProgramWebview","initData","networkMap","response","responseData","funName","accountAddress","params","callbackSuccessFun","res","callbackErrorFun","PostMessage"]}