@luffalab/luffa-tron-sdk
Version:
luffa tron ts sdk
1 lines • 29.8 kB
Source Map (JSON)
{"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 {\r\n IInitData,\r\n UserResponse,\r\n AccountInfo,\r\n UserResponseStatus,\r\n EndlessSignMessageInput,\r\n EndlessSignMessageOutput,\r\n EndlessSignAndSubmitTransactionInput,\r\n EndlessWalletTransactionType,\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 { isApproveTx, isLuffa, isLuffaMiniProgram, isLuffaMiniProgramWebview } from './utils';\r\nimport { TronWebOptions } from 'tronWeb/lib/esm/types';\r\nimport { EndLessSDKEvent, EndLessSDKEventPayload, EndLessSDKEventType, 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 interface TronRequestParams {\r\n method: 'eth_requestAccounts' | string;\r\n params?: any;\r\n}\r\nexport { EndLessSDKEvent } from './message/types';\r\nexport { UserResponseStatus, EndlessSendTransactionType, EndlessWalletTransactionType } from './types';\r\nexport type { UserResponse, AccountInfo, EndlessSignAndSubmitTransactionInput } from './types';\r\nexport enum MethodName {\r\n CONNECT = 'connect',\r\n GETACCOUNT = 'getAccount',\r\n DISCONNECT = 'disconnect',\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 LuffaTronSdk {\r\n static readonly version: string = '1.0.4';\r\n private static _instance: LuffaTronSdk;\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 private _wallet: any | null = null;\r\n\r\n static getIninData = (): IInitData => {\r\n if (LuffaTronSdk._instance) {\r\n return LuffaTronSdk._instance._initData;\r\n } else {\r\n return {} as IInitData;\r\n }\r\n };\r\n static getAccountAddress = () => {\r\n if (LuffaTronSdk._instance) {\r\n return LuffaTronSdk._instance.accountAddress;\r\n } else {\r\n return null;\r\n }\r\n };\r\n static setAccountAddress = (accountAddress: string | null) => {\r\n if (LuffaTronSdk._instance) {\r\n LuffaTronSdk._instance.accountAddress = accountAddress;\r\n }\r\n };\r\n\r\n constructor(initData: TronWebOptions & { network: string }) {\r\n if (LuffaTronSdk._instance) return LuffaTronSdk._instance;\r\n this.message = new PostMessage();\r\n this.getMetadata();\r\n this.initConfig(initData);\r\n LuffaTronSdk._instance = this;\r\n }\r\n\r\n private initConfig(initData: TronWebOptions & { network: string }) {\r\n this._initData.callbackWalletName = 'tronWallet';\r\n this._initData.network = initData.network;\r\n if (isLuffaMiniProgram()) {\r\n return;\r\n }\r\n // web and WebView\r\n// /// #if BUILD_PLATFORM !== 'MINIPROGRAM'\r\n\r\n this._wallet = new window.TronWeb.TronWeb(initData);\r\n this._wallet.trx.sign = this.sendTransaction.bind(this);\r\n this._wallet.trx.signTransaction = this.sendTransaction.bind(this);\r\n\r\n const tronProvider = Object.freeze({\r\n isTronLink: false,\r\n request: async (params: TronRequestParams) => {\r\n switch (params.method) {\r\n case 'eth_requestAccounts':\r\n return this.connect();\r\n\r\n default:\r\n return { code: 4200, message: 'Unknown method called' };\r\n }\r\n },\r\n tronWeb: this._wallet,\r\n on: this.on,\r\n removeListener: this.off,\r\n });\r\n\r\n Object.defineProperty(globalThis, 'tronWeb', {\r\n value: this._wallet,\r\n writable: false,\r\n configurable: false,\r\n enumerable: true\r\n });\r\n\r\n Object.defineProperty(globalThis, 'tron', {\r\n value: tronProvider,\r\n writable: false,\r\n configurable: false,\r\n enumerable: true\r\n });\r\n// /// #endif\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 const { isApprove, spender } = isApproveTx(params);\r\n console.log('isApprove: ', isApprove, spender);\r\n if (isApprove) {\r\n params.to = spender;\r\n return this.signTransaction(params, MethodName.EVM_APPROVE)\r\n } else {\r\n return this.signTransaction(params)\r\n }\r\n }\r\n\r\n changeNetwork(chainData: ChainData) {\r\n this.message?.sendMessage({\r\n uuid: new Date().getTime().toString(),\r\n methodName: MethodName.NETWORK_CHANGE,\r\n metadata: this._metadata,\r\n data: {\r\n ...chainData,\r\n },\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 this.message?.sendMessage(\r\n {\r\n uuid: new Date().getTime().toString(),\r\n methodName: data.method,\r\n metadata: this._metadata,\r\n data: data.data,\r\n initData: data?.initData,\r\n },\r\n callback\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 const res: UserResponse<AccountInfo> = {\r\n status: UserResponseStatus.REJECTED,\r\n message: data?.message || 'Wallet is not connected',\r\n };\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._wallet.setAddress(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 signMessage = (\r\n data: EndlessSignMessageInput,\r\n callback?: (data: unknown) => void\r\n ): Promise<UserResponse<EndlessSignMessageOutput>> => {\r\n return new Promise((resolve) => {\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: data,\r\n },\r\n (res) => {\r\n console.log('signMessage res: ', res);\r\n if (res?.signature) {\r\n const result: UserResponse<EndlessSignMessageOutput> = {\r\n status: UserResponseStatus.APPROVED,\r\n args: {\r\n fullMessage: data.message,\r\n signature: res.signature,\r\n publicKey: res.publicKey,\r\n nonce: '',\r\n message: data.message,\r\n prefix: 'Endless',\r\n },\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 on = <K extends EndLessSDKEventType>(methodName: K, callback: (payload: EndLessSDKEventPayload<K>) => void) => {\r\n if (this.message?.addListener) {\r\n this.message?.addListener(methodName, callback);\r\n }\r\n };\r\n off = <K extends EndLessSDKEventType>(methodName: K, callback?: (payload: EndLessSDKEventPayload<K>) => void) => {\r\n if (this.message?.removeListener) {\r\n this.message?.removeListener(methodName, callback);\r\n }\r\n };\r\n\r\n signAndSubmitTransaction = (params: any): Promise<any> => {\r\n console.log('signAndSubmitTransaction data: ', params);\r\n return new Promise(async (resolve) => {\r\n this.message?.sendMessage(\r\n {\r\n uuid: new Date().getTime().toString(),\r\n methodName: MethodName.SIGN_AND_SUBMIT_TRANSACTION,\r\n metadata: this._metadata,\r\n data: params\r\n },\r\n (res) => {\r\n if (res?.hash) {\r\n resolve(res.hash);\r\n } else {\r\n resolve({\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 tron 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 onAccountChange = (callback: (data: AccountInfo) => void) => {\r\n this.on(EndLessSDKEvent.ACCOUNT_CHANGE, callback);\r\n };\r\n\r\n onNetworkChange = (callback: (data: NetworkInfo) => void) => {\r\n this.on(EndLessSDKEvent.NETWORK_CHANGE, callback);\r\n };\r\n}\r\n","import { AccountInfo, LuffaTronSdk, MethodName } from '../index';\r\nimport type { IMessageData, EndLessSDKEventListenersType, EndLessSDKEventPayload, EndLessSDKEventType } from './types';\r\nimport { EndLessSDKEvent, 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: EndLessSDKEventListenersType = {};\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.tronWallet = {\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 const eventType = msg.data.methodName as EndLessSDKEventType | 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 EndLessSDKEvent.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(EndLessSDKEvent.CHAIN_CHANGED, `0x${getChainIdByName(network)?.toString(16)}`);\r\n\r\n break;\r\n }\r\n\r\n // wallet to sdk send onAccountChange | connect\r\n // sdk to dapp send event\r\n // CONNECT and ACCOUNT_CHANGE return account as AccountAddress\r\n case EndLessSDKEvent.CONNECT:\r\n case EndLessSDKEvent.ACCOUNT_CHANGE: {\r\n const accountInfo: AccountInfo = {\r\n ...msg.data.data,\r\n };\r\n if (msg?.data?.data?.account) {\r\n LuffaTronSdk.setAccountAddress(msg.data.data.account);\r\n } else {\r\n LuffaTronSdk.setAccountAddress(null);\r\n }\r\n this.emit(eventType, accountInfo);\r\n break;\r\n }\r\n\r\n case EndLessSDKEvent.DISCONNECT: {\r\n LuffaTronSdk.setAccountAddress(null);\r\n this.emit(eventType, msg.data.data);\r\n break;\r\n }\r\n\r\n default:\r\n this.emit(eventType as EndLessSDKEventType, msg.data.data);\r\n break;\r\n }\r\n };\r\n\r\n readonly addListener = <K extends EndLessSDKEventType>(\r\n methodName: K,\r\n callback: (payload: EndLessSDKEventPayload<K>) => void\r\n ) => {\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 EndLessSDKEventType>(\r\n methodName: K,\r\n callback?: (payload: EndLessSDKEventPayload<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 EndLessSDKEventType>(methodName: K, payload: EndLessSDKEventPayload<K>) => {\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 || LuffaTronSdk.getIninData();\r\n (data.initData = {\r\n ...(initData || {}),\r\n network: networkMap[initData.network] ?? initData.network,\r\n }),\r\n (data.from = LuffaTronSdk.getAccountAddress());\r\n if (callback) {\r\n this.callbacks[data.uuid + data.methodName] = callback;\r\n }\r\n console.log('luffa tron sendLuffaMessage: ', data);\r\n if (window?._tronWallet) {\r\n window._tronWallet?.sendMessage(JSON.stringify(data));\r\n } else if (window?.webkit && window?.webkit?.messageHandlers?._tronWallet) {\r\n window.webkit.messageHandlers._tronWallet?.postMessage(data);\r\n }\r\n }\r\n\r\n private sendResponse(response: string) {\r\n console.log('luffa tron sendResponse: ', response);\r\n const responseData = JSON.parse(response);\r\n console.log('luffa tron 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 = LuffaTronSdk.getAccountAddress();\r\n const initData = LuffaTronSdk.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 LuffaTronSdk.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 callbackErrorFun = (res) => {\r\n callback &&\r\n callback({\r\n account: '',\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 tron funName: ', funName);\r\n console.log('luffa tron params: ', params);\r\n if (isLuffaMiniProgram()) {\r\n wx[funName]({\r\n ...params,\r\n complete: (res: any) => {\r\n console.log(`luffa tron 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 tron 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":["MethodName","_LuffaTronSdk","initData","__publicField","data","callback","resolve","res","reject","result","methodName","params","signature","PostMessage","isLuffaMiniProgram","tronProvider","isApprove","spender","isApproveTx","chainData","iconUrl","accountAddress","LuffaTronSdk","_PostMessage","__publicField","msg","eventType","network","isLuffaMiniProgram","getChainIdByName","accountInfo","LuffaTronSdk","methodName","callback","index","payload","d","data","isLuffa","isLuffaMiniProgramWebview","initData","networkMap","response","responseData","funName","accountAddress","params","callbackSuccessFun","res","callbackErrorFun","PostMessage"]}