@multiversx/sdk-web-wallet-cross-window-provider 2.0.0-alpha.1 → 2.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.
Files changed (59) hide show
  1. package/README.md +6 -2
  2. package/out/CrossWindowProvider/CrossWindowProvider.mjs +2 -0
  3. package/out/CrossWindowProvider/CrossWindowProvider.mjs.map +7 -0
  4. package/out/CrossWindowProvider/PopupConsent/PopupConsent.mjs +2 -0
  5. package/out/CrossWindowProvider/PopupConsent/PopupConsent.mjs.map +7 -0
  6. package/out/CrossWindowProvider/PopupConsent/getStyles.mjs +2 -0
  7. package/out/CrossWindowProvider/PopupConsent/getStyles.mjs.map +7 -0
  8. package/out/CrossWindowProvider/PopupConsent/index.mjs +2 -0
  9. package/out/CrossWindowProvider/PopupConsent/index.mjs.map +7 -0
  10. package/out/CrossWindowProvider/index.mjs +2 -0
  11. package/out/CrossWindowProvider/index.mjs.map +7 -0
  12. package/out/WindowManager/WindowManager.mjs +2 -0
  13. package/out/WindowManager/WindowManager.mjs.map +7 -0
  14. package/out/WindowManager/index.mjs +2 -0
  15. package/out/WindowManager/index.mjs.map +7 -0
  16. package/out/__chunks__/chunk-67SNURO7.mjs +133 -0
  17. package/out/__chunks__/chunk-67SNURO7.mjs.map +7 -0
  18. package/out/__chunks__/chunk-7BAKJMGJ.mjs +2 -0
  19. package/out/__chunks__/chunk-7BAKJMGJ.mjs.map +7 -0
  20. package/out/__chunks__/chunk-7EG66KV4.mjs +2 -0
  21. package/out/__chunks__/chunk-7EG66KV4.mjs.map +7 -0
  22. package/out/__chunks__/chunk-ARPF4OON.mjs +2 -0
  23. package/out/__chunks__/chunk-ARPF4OON.mjs.map +7 -0
  24. package/out/__chunks__/chunk-CRKVTTK2.mjs +2 -0
  25. package/out/__chunks__/chunk-CRKVTTK2.mjs.map +7 -0
  26. package/out/__chunks__/chunk-IFJNPC67.mjs +1 -0
  27. package/out/__chunks__/chunk-IFJNPC67.mjs.map +7 -0
  28. package/out/__chunks__/chunk-ILRVZBDL.mjs +2 -0
  29. package/out/__chunks__/chunk-ILRVZBDL.mjs.map +7 -0
  30. package/out/__chunks__/chunk-LO6PRAW2.mjs +2 -0
  31. package/out/__chunks__/chunk-LO6PRAW2.mjs.map +7 -0
  32. package/out/__chunks__/chunk-MFDD33CC.mjs +2 -0
  33. package/out/__chunks__/chunk-MFDD33CC.mjs.map +7 -0
  34. package/out/__chunks__/chunk-P5U2NZJJ.mjs +2 -0
  35. package/out/__chunks__/chunk-P5U2NZJJ.mjs.map +7 -0
  36. package/out/__chunks__/chunk-PE2DWF25.mjs +20 -0
  37. package/out/__chunks__/chunk-PE2DWF25.mjs.map +7 -0
  38. package/out/__chunks__/chunk-UADEV64E.mjs +2 -0
  39. package/out/__chunks__/chunk-UADEV64E.mjs.map +7 -0
  40. package/out/__chunks__/chunk-UHIELAL2.mjs +102 -0
  41. package/out/__chunks__/chunk-UHIELAL2.mjs.map +7 -0
  42. package/out/__chunks__/chunk-X6LLUYE7.mjs +2 -0
  43. package/out/__chunks__/chunk-X6LLUYE7.mjs.map +7 -0
  44. package/out/errors.mjs +2 -0
  45. package/out/errors.mjs.map +7 -0
  46. package/out/index.mjs +2 -0
  47. package/out/index.mjs.map +7 -0
  48. package/out/test-utils/createMockTransaction.mjs +2 -0
  49. package/out/test-utils/createMockTransaction.mjs.map +7 -0
  50. package/out/test-utils/getWalletWindowMock.mjs +2 -0
  51. package/out/test-utils/getWalletWindowMock.mjs.map +7 -0
  52. package/out/test-utils/index.mjs +2 -0
  53. package/out/test-utils/index.mjs.map +7 -0
  54. package/out/test-utils/mockWindowManager.d.ts +2 -0
  55. package/out/test-utils/mockWindowManager.js +11 -0
  56. package/out/test-utils/mockWindowManager.js.map +1 -0
  57. package/out/test-utils/mockWindowManager.mjs +2 -0
  58. package/out/test-utils/mockWindowManager.mjs.map +7 -0
  59. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ import{a as W,b as g}from"./chunk-X6LLUYE7.mjs";import{d as w,f as c,g as h}from"./chunk-CRKVTTK2.mjs";import{e as d}from"./chunk-ARPF4OON.mjs";var t=d(g()),n=d(W());var a=class a{constructor(){this._walletUrl="";this.initialized=!1;this.walletWindow=null;t.safeWindow.addEventListener?.("beforeunload",()=>{this.walletWindow?.close()}),t.safeWindow.name=t.safeWindow.location?.origin,a._instance=this}get walletUrl(){return this._walletUrl}static getInstance(){return a._instance}setWalletUrl(e){return this._walletUrl=e,a._instance}async init(){return this.initialized=!0,this.initialized}isWalletOpened(e){return e===n.CrossWindowProviderRequestEnums.cancelAction&&!!this.walletWindow}async handshake(e){if(this.isWalletOpened(e))return!0;this.walletWindow?.close(),this.walletWindow=t.safeWindow.open?.(this.walletUrl,this.walletUrl)??null;let{payload:s}=await this.listenOnce(n.CrossWindowProviderResponseEnums.handshakeResponse);if(!s)throw new w;return this.walletWindow?.postMessage({type:n.CrossWindowProviderRequestEnums.finalizeHandshakeRequest},this.walletUrl),this.addHandshakeChangeListener(),!0}async addHandshakeChangeListener(){let e=this.walletUrl,i=s=>{try{let{type:r,payload:l}=s.data;if(!(s.origin===new URL(e).origin))return;switch(r){case n.CrossWindowProviderResponseEnums.handshakeResponse:l===!1&&(this.walletWindow?.close(),this.walletWindow=null,t.safeWindow.removeEventListener?.("message",i));break}}catch{}};t.safeWindow.addEventListener?.("message",i)}async listenOnce(e){if(!this.walletWindow)throw new c;return await new Promise(i=>{let s=this.walletUrl;t.safeWindow.addEventListener?.("message",async function r(l){let{type:o,payload:u}=l.data,y=l.origin===new URL(s).origin;!(e===o||o===n.CrossWindowProviderResponseEnums.cancelResponse)||!y||(t.safeWindow.removeEventListener?.("message",r),i({type:o,payload:u}))})})}async closeConnection(){if(!this.initialized)throw new h;return await this.postMessage({type:n.CrossWindowProviderRequestEnums.logoutRequest,payload:void 0}),!0}isInitialized(){return this.initialized}async postMessage({type:e,payload:i}){await this.handshake(e),this.walletWindow?.postMessage({type:e,payload:i},this.walletUrl);let s=await this.listenOnce(t.responseTypeMap[e]);return this.walletWindow?.close(),s}};a._instance=new a;var p=a;export{p as a};
2
+ //# sourceMappingURL=chunk-ILRVZBDL.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/WindowManager/WindowManager.ts"],
4
+ "sourcesContent": ["import {\n responseTypeMap,\n safeWindow\n} from '@multiversx/sdk-dapp-utils/out/constants/crossWindowProviderConstants';\nimport {\n CrossWindowProviderRequestEnums,\n CrossWindowProviderResponseEnums\n} from '@multiversx/sdk-dapp-utils/out/enums/crossWindowProviderEnums';\nimport {\n PostMessageParamsType,\n PostMessageReturnType,\n ReplyWithPostMessageEventType,\n ReplyWithPostMessagePayloadType\n} from '@multiversx/sdk-dapp-utils/out/types/crossWindowProviderTypes';\nimport {\n ErrCannotEstablishHandshake,\n ErrProviderNotInitialized,\n ErrWalletWindowNotInstantiated\n} from '../errors';\n\nexport class WindowManager {\n private _walletUrl = '';\n private initialized = false;\n private static _instance: WindowManager = new WindowManager();\n walletWindow: Window | null = null;\n\n constructor() {\n safeWindow.addEventListener?.('beforeunload', () => {\n this.walletWindow?.close();\n });\n\n safeWindow.name = safeWindow.location?.origin;\n WindowManager._instance = this; // TODO: remove singleton\n }\n\n public get walletUrl(): string {\n return this._walletUrl;\n }\n\n public static getInstance(): WindowManager {\n return WindowManager._instance;\n }\n\n public setWalletUrl(url: string): WindowManager {\n this._walletUrl = url;\n return WindowManager._instance;\n }\n\n async init(): Promise<boolean> {\n this.initialized = true;\n return this.initialized;\n }\n\n public isWalletOpened(type?: CrossWindowProviderRequestEnums) {\n return (\n type === CrossWindowProviderRequestEnums.cancelAction &&\n Boolean(this.walletWindow)\n );\n }\n\n async handshake(type: CrossWindowProviderRequestEnums): Promise<boolean> {\n const isOpened = this.isWalletOpened(type);\n if (isOpened) {\n return true;\n }\n\n this.walletWindow?.close();\n this.walletWindow =\n safeWindow.open?.(this.walletUrl, this.walletUrl) ?? null;\n\n const { payload: isWalletReady } = await this.listenOnce(\n CrossWindowProviderResponseEnums.handshakeResponse\n );\n\n if (!isWalletReady) {\n throw new ErrCannotEstablishHandshake();\n }\n\n this.walletWindow?.postMessage(\n {\n type: CrossWindowProviderRequestEnums.finalizeHandshakeRequest\n },\n this.walletUrl\n );\n\n this.addHandshakeChangeListener();\n return true;\n }\n\n private async addHandshakeChangeListener() {\n const walletUrl = this.walletUrl;\n\n const eventHandler = (\n event: MessageEvent<ReplyWithPostMessageEventType>\n ) => {\n try {\n const { type, payload } = event.data;\n const isWalletEvent = event.origin === new URL(walletUrl).origin;\n\n if (!isWalletEvent) {\n return;\n }\n\n switch (type) {\n case CrossWindowProviderResponseEnums.handshakeResponse:\n if (payload === false) {\n this.walletWindow?.close();\n this.walletWindow = null;\n safeWindow.removeEventListener?.('message', eventHandler);\n }\n break;\n }\n } catch {}\n };\n\n safeWindow.addEventListener?.('message', eventHandler);\n }\n\n async listenOnce<T extends CrossWindowProviderResponseEnums>(\n action: T\n ): Promise<{\n type: T;\n payload: ReplyWithPostMessagePayloadType<T>;\n }> {\n if (!this.walletWindow) {\n throw new ErrWalletWindowNotInstantiated();\n }\n\n return await new Promise((resolve) => {\n const walletUrl = this.walletUrl;\n\n safeWindow.addEventListener?.(\n 'message',\n async function eventHandler(\n event: MessageEvent<{\n type: T;\n payload: ReplyWithPostMessagePayloadType<T>;\n }>\n ) {\n const { type, payload } = event.data;\n const isWalletEvent = event.origin === new URL(walletUrl).origin;\n\n const isCurrentAction =\n action === type ||\n type === CrossWindowProviderResponseEnums.cancelResponse;\n\n if (!isCurrentAction || !isWalletEvent) {\n return;\n }\n\n safeWindow.removeEventListener?.('message', eventHandler);\n resolve({ type, payload });\n }\n );\n });\n }\n\n async closeConnection(): Promise<boolean> {\n if (!this.initialized) {\n throw new ErrProviderNotInitialized();\n }\n\n await this.postMessage({\n type: CrossWindowProviderRequestEnums.logoutRequest,\n payload: undefined\n });\n\n return true;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n async postMessage<T extends CrossWindowProviderRequestEnums>({\n type,\n payload\n }: PostMessageParamsType<T>): Promise<PostMessageReturnType<T>> {\n await this.handshake(type);\n\n this.walletWindow?.postMessage(\n {\n type,\n payload\n },\n this.walletUrl\n );\n\n const data = await this.listenOnce(responseTypeMap[type]);\n\n this.walletWindow?.close();\n\n return data;\n }\n}\n"],
5
+ "mappings": "gJAAA,IAAAA,EAGO,OACPC,EAGO,OAaA,IAAMC,EAAN,MAAMA,CAAc,CAMzB,aAAc,CALd,KAAQ,WAAa,GACrB,KAAQ,YAAc,GAEtB,kBAA8B,KAG5B,aAAW,mBAAmB,eAAgB,IAAM,CAClD,KAAK,cAAc,MAAM,CAC3B,CAAC,EAED,aAAW,KAAO,aAAW,UAAU,OACvCA,EAAc,UAAY,IAC5B,CAEA,IAAW,WAAoB,CAC7B,OAAO,KAAK,UACd,CAEA,OAAc,aAA6B,CACzC,OAAOA,EAAc,SACvB,CAEO,aAAaC,EAA4B,CAC9C,YAAK,WAAaA,EACXD,EAAc,SACvB,CAEA,MAAM,MAAyB,CAC7B,YAAK,YAAc,GACZ,KAAK,WACd,CAEO,eAAeE,EAAwC,CAC5D,OACEA,IAAS,kCAAgC,cACzC,EAAQ,KAAK,YAEjB,CAEA,MAAM,UAAUA,EAAyD,CAEvE,GADiB,KAAK,eAAeA,CAAI,EAEvC,MAAO,GAGT,KAAK,cAAc,MAAM,EACzB,KAAK,aACH,aAAW,OAAO,KAAK,UAAW,KAAK,SAAS,GAAK,KAEvD,GAAM,CAAE,QAASC,CAAc,EAAI,MAAM,KAAK,WAC5C,mCAAiC,iBACnC,EAEA,GAAI,CAACA,EACH,MAAM,IAAIC,EAGZ,YAAK,cAAc,YACjB,CACE,KAAM,kCAAgC,wBACxC,EACA,KAAK,SACP,EAEA,KAAK,2BAA2B,EACzB,EACT,CAEA,MAAc,4BAA6B,CACzC,IAAMC,EAAY,KAAK,UAEjBC,EACJC,GACG,CACH,GAAI,CACF,GAAM,CAAE,KAAAL,EAAM,QAAAM,CAAQ,EAAID,EAAM,KAGhC,GAAI,EAFkBA,EAAM,SAAW,IAAI,IAAIF,CAAS,EAAE,QAGxD,OAGF,OAAQH,EAAM,CACZ,KAAK,mCAAiC,kBAChCM,IAAY,KACd,KAAK,cAAc,MAAM,EACzB,KAAK,aAAe,KACpB,aAAW,sBAAsB,UAAWF,CAAY,GAE1D,KACJ,CACF,MAAQ,CAAC,CACX,EAEA,aAAW,mBAAmB,UAAWA,CAAY,CACvD,CAEA,MAAM,WACJG,EAIC,CACD,GAAI,CAAC,KAAK,aACR,MAAM,IAAIC,EAGZ,OAAO,MAAM,IAAI,QAASC,GAAY,CACpC,IAAMN,EAAY,KAAK,UAEvB,aAAW,mBACT,UACA,eAAeC,EACbC,EAIA,CACA,GAAM,CAAE,KAAAL,EAAM,QAAAM,CAAQ,EAAID,EAAM,KAC1BK,EAAgBL,EAAM,SAAW,IAAI,IAAIF,CAAS,EAAE,OAMtD,EAHFI,IAAWP,GACXA,IAAS,mCAAiC,iBAEpB,CAACU,IAIzB,aAAW,sBAAsB,UAAWN,CAAY,EACxDK,EAAQ,CAAE,KAAAT,EAAM,QAAAM,CAAQ,CAAC,EAC3B,CACF,CACF,CAAC,CACH,CAEA,MAAM,iBAAoC,CACxC,GAAI,CAAC,KAAK,YACR,MAAM,IAAIK,EAGZ,aAAM,KAAK,YAAY,CACrB,KAAM,kCAAgC,cACtC,QAAS,MACX,CAAC,EAEM,EACT,CAEA,eAAyB,CACvB,OAAO,KAAK,WACd,CAEA,MAAM,YAAuD,CAC3D,KAAAX,EACA,QAAAM,CACF,EAAgE,CAC9D,MAAM,KAAK,UAAUN,CAAI,EAEzB,KAAK,cAAc,YACjB,CACE,KAAAA,EACA,QAAAM,CACF,EACA,KAAK,SACP,EAEA,IAAMM,EAAO,MAAM,KAAK,WAAW,kBAAgBZ,CAAI,CAAC,EAExD,YAAK,cAAc,MAAM,EAElBY,CACT,CACF,EA9Kad,EAGI,UAA2B,IAAIA,EAHzC,IAAMe,EAANf",
6
+ "names": ["import_crossWindowProviderConstants", "import_crossWindowProviderEnums", "_WindowManager", "url", "type", "isWalletReady", "ErrCannotEstablishHandshake", "walletUrl", "eventHandler", "event", "payload", "action", "ErrWalletWindowNotInstantiated", "resolve", "isWalletEvent", "ErrProviderNotInitialized", "data", "WindowManager"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as e}from"./chunk-ILRVZBDL.mjs";var n=()=>e.getInstance=jest.fn().mockReturnValue({init:jest.fn().mockResolvedValue(!0),postMessage:jest.fn().mockResolvedValue({payload:{}}),closeConnection:jest.fn().mockResolvedValue(!0)});export{n as a};
2
+ //# sourceMappingURL=chunk-LO6PRAW2.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/test-utils/mockWindowManager.ts"],
4
+ "sourcesContent": ["import { WindowManager } from '../WindowManager/WindowManager';\n\nexport const mockWindoManager = () =>\n (WindowManager.getInstance = jest.fn().mockReturnValue({\n init: jest.fn().mockResolvedValue(true),\n postMessage: jest.fn().mockResolvedValue({ payload: {} }),\n closeConnection: jest.fn().mockResolvedValue(true)\n }));\n"],
5
+ "mappings": "yCAEO,IAAMA,EAAmB,IAC7BC,EAAc,YAAc,KAAK,GAAG,EAAE,gBAAgB,CACrD,KAAM,KAAK,GAAG,EAAE,kBAAkB,EAAI,EACtC,YAAa,KAAK,GAAG,EAAE,kBAAkB,CAAE,QAAS,CAAC,CAAE,CAAC,EACxD,gBAAiB,KAAK,GAAG,EAAE,kBAAkB,EAAI,CACnD,CAAC",
6
+ "names": ["mockWindoManager", "WindowManager"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as T}from"./chunk-ILRVZBDL.mjs";import{a as I,b}from"./chunk-7BAKJMGJ.mjs";import{a as M}from"./chunk-UHIELAL2.mjs";import{a as z,b as A}from"./chunk-X6LLUYE7.mjs";import{b as C,c as f,e as P,g as u,h as g,i as d,j as l,k as y,l as w}from"./chunk-CRKVTTK2.mjs";import{a as E}from"./chunk-PE2DWF25.mjs";import{e as h,f as v}from"./chunk-ARPF4OON.mjs";var m=h(E()),c=h(A()),s=h(z());b();var r=class r{constructor(){this.account={address:""};this.initialized=!1;this.accessToken=void 0;this._shouldShowConsentPopup=!1;if(r._instance)throw new P;this.windowManager=T.getInstance(),r._instance=this}setShouldShowConsentPopup(n){this._shouldShowConsentPopup=n}ensureConnected(){if(!this.account.address)throw new f}disconnect(){this.account={address:""}}static getInstance(){return r._instance}setAddress(n){return this.account.address=n,r._instance}setWalletUrl(n){return this.windowManager.setWalletUrl(n),r._instance}async init(){return this.initialized=await this.windowManager.init(),this.initialized}async login(n={}){if(!this.initialized)throw new u;if(await this.isConnected()){let{address:p,signature:a,multisig:S,impersonate:W}=this.account;return{address:p,signature:a,multisig:S,impersonate:W}}if(this.accessToken=n.token,!await this.openPopupConsent())throw new g;let{payload:{data:e,error:i}}=await this.windowManager.postMessage({type:s.CrossWindowProviderRequestEnums.loginRequest,payload:{token:this.accessToken}});if(i||!e)throw new g;return this.account.address=e.address,this.account.signature=e.signature,this.account.multisig=e.multisig,this.account.impersonate=e.impersonate,{address:this.account.address,signature:this.account.signature,multisig:this.account.multisig,impersonate:this.account.impersonate}}async logout(){let n=await this.openPopupConsent();if(!this.initialized||!n)throw new u;this.ensureConnected();let o=await this.windowManager.closeConnection();return this.initialized=!1,this.disconnect(),o}async getAddress(){if(!this.initialized)throw new u;return this.account?.address??""}isInitialized(){return this.initialized}async isConnected(){return!!this.account.address}async signTransaction(n){this.ensureConnected();let o=await this.signTransactions([n]);if(o.length!=1)throw new C;return o[0]}async signTransactions(n){if(this.ensureConnected(),!await this.openPopupConsent())throw new d;let{type:t,payload:{data:e,error:i}}=await this.windowManager.postMessage({type:s.CrossWindowProviderRequestEnums.signTransactionsRequest,payload:n.map(a=>a.toPlainObject())});if(i||!e)throw new l;if(t===s.CrossWindowProviderResponseEnums.cancelResponse)throw new d;if(!(e?.length>0))throw new l;return e.map(a=>m.Transaction.fromPlainObject(a))}async guardTransactions(n){if(this.ensureConnected(),!await this.openPopupConsent())throw new d;let{type:t,payload:{data:e,error:i}}=await this.windowManager.postMessage({type:s.CrossWindowProviderRequestEnums.guardTransactionsRequest,payload:n.map(a=>a.toPlainObject())});if(i||!e)throw new l;if(t===s.CrossWindowProviderResponseEnums.cancelResponse)throw new d;if(!(e?.length>0))throw new y;return e.map(a=>m.Transaction.fromPlainObject(a))}async signMessage(n){if(this.ensureConnected(),!await this.openPopupConsent())throw new w;let{payload:{data:t,error:e}}=await this.windowManager.postMessage({type:s.CrossWindowProviderRequestEnums.signMessageRequest,payload:{message:n.message.toString()}});if(e||!t)throw new w;let{status:i,signature:p}=t;if(i!==s.SignMessageStatusEnum.signed)throw new w;return n.applySignature(Buffer.from(String(p),"hex")),n}cancelAction(){if(this.windowManager?.isWalletOpened(s.CrossWindowProviderRequestEnums.cancelAction))return this.windowManager?.postMessage({type:s.CrossWindowProviderRequestEnums.cancelAction,payload:void 0})}async openPopupConsent(){b();let n=c.safeWindow.document?.createElement("div"),o=c.safeWindow.document;if(!this._shouldShowConsentPopup||!o||!n)return!0;let t=c.safeWindow.document?.createElement(M);t.walletUrl=this.windowManager.walletUrl,c.safeWindow.document?.body.appendChild(t);let e=await new Promise(i=>{t.onConfirm=()=>{i(!0),c.safeWindow.document?.body.removeChild(t)},t.onCancel=()=>{i(!1),c.safeWindow.document?.body.removeChild(t)}});return this._shouldShowConsentPopup=!1,e}};r._instance=new r;var R=r;export{R as a};
2
+ //# sourceMappingURL=chunk-MFDD33CC.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/CrossWindowProvider/CrossWindowProvider.ts"],
4
+ "sourcesContent": ["import { SignableMessage, Transaction } from '@multiversx/sdk-core';\nimport { safeWindow } from '@multiversx/sdk-dapp-utils/out/constants/crossWindowProviderConstants';\nimport {\n CrossWindowProviderRequestEnums,\n CrossWindowProviderResponseEnums,\n SignMessageStatusEnum\n} from '@multiversx/sdk-dapp-utils/out/enums/crossWindowProviderEnums';\nimport {\n ErrAccountNotConnected,\n ErrCannotSignSingleTransaction,\n ErrCouldNotGuardTransactions,\n ErrCouldNotLogin,\n ErrCouldNotSignMessage,\n ErrCouldNotSignTransactions,\n ErrInstantiationFailed,\n ErrProviderNotInitialized,\n ErrTransactionCancelled\n} from '../errors';\nimport { WindowManager } from '../WindowManager';\nimport { PopupConsent, confirmationDialogTag } from './PopupConsent';\n\ninterface ICrossWindowWalletAccount {\n address: string;\n signature?: string;\n multisig?: string;\n impersonate?: string;\n}\n\nexport class CrossWindowProvider {\n public account: ICrossWindowWalletAccount = { address: '' };\n private initialized = false;\n private windowManager: WindowManager;\n private static _instance: CrossWindowProvider = new CrossWindowProvider();\n private accessToken: string | undefined = undefined;\n protected _shouldShowConsentPopup = false;\n\n private constructor() {\n if (CrossWindowProvider._instance) {\n throw new ErrInstantiationFailed();\n }\n this.windowManager = WindowManager.getInstance();\n CrossWindowProvider._instance = this;\n }\n\n public setShouldShowConsentPopup(shouldShow: boolean) {\n this._shouldShowConsentPopup = shouldShow;\n }\n\n private ensureConnected() {\n if (!this.account.address) {\n throw new ErrAccountNotConnected();\n }\n }\n\n private disconnect() {\n this.account = { address: '' };\n }\n\n public static getInstance(): CrossWindowProvider {\n return CrossWindowProvider._instance;\n }\n\n public setAddress(address: string): CrossWindowProvider {\n this.account.address = address;\n return CrossWindowProvider._instance;\n }\n\n public setWalletUrl(url: string): CrossWindowProvider {\n this.windowManager.setWalletUrl(url);\n return CrossWindowProvider._instance;\n }\n\n async init(): Promise<boolean> {\n this.initialized = await this.windowManager.init();\n return this.initialized;\n }\n\n async login(\n options: {\n token?: string;\n } = {}\n ): Promise<ICrossWindowWalletAccount> {\n if (!this.initialized) {\n throw new ErrProviderNotInitialized();\n }\n\n const isRelogin = await this.isConnected();\n\n if (isRelogin) {\n const { address, signature, multisig, impersonate } = this.account;\n return {\n address,\n signature,\n multisig,\n impersonate\n };\n }\n\n this.accessToken = options.token;\n\n const popupConsentResponse = await this.openPopupConsent();\n\n if (!popupConsentResponse) {\n throw new ErrCouldNotLogin();\n }\n\n const {\n payload: { data, error }\n } = await this.windowManager.postMessage({\n type: CrossWindowProviderRequestEnums.loginRequest,\n payload: {\n token: this.accessToken\n }\n });\n\n if (error || !data) {\n throw new ErrCouldNotLogin();\n }\n\n this.account.address = data.address;\n this.account.signature = data.signature;\n this.account.multisig = data.multisig;\n this.account.impersonate = data.impersonate;\n\n return {\n address: this.account.address,\n signature: this.account.signature,\n multisig: this.account.multisig,\n impersonate: this.account.impersonate\n };\n }\n\n async logout(): Promise<boolean> {\n const popupConsentResponse = await this.openPopupConsent();\n\n if (!this.initialized || !popupConsentResponse) {\n throw new ErrProviderNotInitialized();\n }\n\n this.ensureConnected();\n const connectionClosed = await this.windowManager.closeConnection();\n this.initialized = false;\n this.disconnect();\n\n return connectionClosed;\n }\n\n async getAddress(): Promise<string> {\n if (!this.initialized) {\n throw new ErrProviderNotInitialized();\n }\n return this.account?.address ?? '';\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n async isConnected(): Promise<boolean> {\n return Boolean(this.account.address);\n }\n\n async signTransaction(transaction: Transaction): Promise<Transaction> {\n this.ensureConnected();\n\n const signedTransactions = await this.signTransactions([transaction]);\n\n if (signedTransactions.length != 1) {\n throw new ErrCannotSignSingleTransaction();\n }\n\n return signedTransactions[0];\n }\n\n async signTransactions(transactions: Transaction[]): Promise<Transaction[]> {\n this.ensureConnected();\n\n const popupConsentResponse = await this.openPopupConsent();\n\n if (!popupConsentResponse) {\n throw new ErrTransactionCancelled();\n }\n\n const {\n type,\n payload: { data: signedPlainTransactions, error }\n } = await this.windowManager.postMessage({\n type: CrossWindowProviderRequestEnums.signTransactionsRequest,\n payload: transactions.map((tx) => tx.toPlainObject())\n });\n\n if (error || !signedPlainTransactions) {\n throw new ErrCouldNotSignTransactions();\n }\n\n if (type === CrossWindowProviderResponseEnums.cancelResponse) {\n throw new ErrTransactionCancelled();\n }\n\n const hasTransactions = signedPlainTransactions?.length > 0;\n\n if (!hasTransactions) {\n throw new ErrCouldNotSignTransactions();\n }\n\n return signedPlainTransactions.map((tx) => Transaction.fromPlainObject(tx));\n }\n\n async guardTransactions(transactions: Transaction[]): Promise<Transaction[]> {\n this.ensureConnected();\n\n const popupConsentResponse = await this.openPopupConsent();\n\n if (!popupConsentResponse) {\n throw new ErrTransactionCancelled();\n }\n\n const {\n type,\n payload: { data: signedPlainTransactions, error }\n } = await this.windowManager.postMessage({\n type: CrossWindowProviderRequestEnums.guardTransactionsRequest,\n payload: transactions.map((tx) => tx.toPlainObject())\n });\n\n if (error || !signedPlainTransactions) {\n throw new ErrCouldNotSignTransactions();\n }\n\n if (type === CrossWindowProviderResponseEnums.cancelResponse) {\n throw new ErrTransactionCancelled();\n }\n\n const hasTransactions = signedPlainTransactions?.length > 0;\n\n if (!hasTransactions) {\n throw new ErrCouldNotGuardTransactions();\n }\n\n return signedPlainTransactions.map((tx) => Transaction.fromPlainObject(tx));\n }\n\n async signMessage(message: SignableMessage): Promise<SignableMessage> {\n this.ensureConnected();\n\n const popupConsentResponse = await this.openPopupConsent();\n\n if (!popupConsentResponse) {\n throw new ErrCouldNotSignMessage();\n }\n\n const {\n payload: { data, error }\n } = await this.windowManager.postMessage({\n type: CrossWindowProviderRequestEnums.signMessageRequest,\n payload: {\n message: message.message.toString()\n }\n });\n\n if (error || !data) {\n throw new ErrCouldNotSignMessage();\n }\n\n const { status, signature } = data;\n\n if (status !== SignMessageStatusEnum.signed) {\n throw new ErrCouldNotSignMessage();\n }\n\n message.applySignature(Buffer.from(String(signature), 'hex'));\n\n return message;\n }\n\n cancelAction() {\n const isWalletOpened = this.windowManager?.isWalletOpened(\n CrossWindowProviderRequestEnums.cancelAction\n );\n if (!isWalletOpened) {\n return;\n }\n\n return this.windowManager?.postMessage({\n type: CrossWindowProviderRequestEnums.cancelAction,\n payload: undefined\n });\n }\n\n protected async openPopupConsent(): Promise<boolean> {\n require('./PopupConsent');\n const dialog = safeWindow.document?.createElement('div');\n const document = safeWindow.document;\n\n if (!this._shouldShowConsentPopup || !document || !dialog) {\n return true;\n }\n\n const popup = safeWindow.document?.createElement(\n confirmationDialogTag\n ) as PopupConsent;\n\n popup.walletUrl = this.windowManager.walletUrl;\n\n safeWindow.document?.body.appendChild(popup);\n\n const popupConsentResponse: boolean = await new Promise<boolean>(\n (resolve) => {\n popup.onConfirm = () => {\n resolve(true);\n safeWindow.document?.body.removeChild(popup);\n };\n popup.onCancel = () => {\n resolve(false);\n safeWindow.document?.body.removeChild(popup);\n };\n }\n );\n\n this._shouldShowConsentPopup = false;\n return popupConsentResponse;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_sdk_core", "import_crossWindowProviderConstants", "import_crossWindowProviderEnums", "init_PopupConsent", "_CrossWindowProvider", "ErrInstantiationFailed", "WindowManager", "shouldShow", "ErrAccountNotConnected", "address", "url", "options", "ErrProviderNotInitialized", "signature", "multisig", "impersonate", "ErrCouldNotLogin", "data", "error", "popupConsentResponse", "connectionClosed", "transaction", "signedTransactions", "ErrCannotSignSingleTransaction", "transactions", "ErrTransactionCancelled", "type", "signedPlainTransactions", "tx", "ErrCouldNotSignTransactions", "ErrCouldNotGuardTransactions", "message", "ErrCouldNotSignMessage", "status", "dialog", "document", "popup", "confirmationDialogTag", "resolve", "CrossWindowProvider"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as s}from"./chunk-PE2DWF25.mjs";import{e as t}from"./chunk-ARPF4OON.mjs";var e=t(s()),i=({data:a,receiverUsername:r,senderUsername:n})=>new e.Transaction({sender:new e.Address("erd1wh9c0sjr2xn8hzf02lwwcr4jk2s84tat9ud2kaq6zr7xzpvl9l5q8awmex"),receiver:new e.Address("erd1wh9c0sjr2xn8hzf02lwwcr4jk2s84tat9ud2kaq6zr7xzpvl9l5q8awmex"),data:new e.TransactionPayload(a),receiverUsername:r?Buffer.from(r).toString("base64"):void 0,senderUsername:n?Buffer.from(n).toString("base64"):void 0,gasLimit:1e5,chainID:"1",value:"0"});export{i as a};
2
+ //# sourceMappingURL=chunk-P5U2NZJJ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/test-utils/createMockTransaction.ts"],
4
+ "sourcesContent": ["import {\n Address,\n Transaction,\n TransactionPayload\n} from '@multiversx/sdk-core/out';\n\nexport const createMockTransaction = ({\n data,\n receiverUsername,\n senderUsername\n}: {\n data: string;\n receiverUsername: string;\n senderUsername: string;\n}) => {\n return new Transaction({\n // ...other necessary transaction properties\n sender: new Address(\n 'erd1wh9c0sjr2xn8hzf02lwwcr4jk2s84tat9ud2kaq6zr7xzpvl9l5q8awmex'\n ),\n receiver: new Address(\n 'erd1wh9c0sjr2xn8hzf02lwwcr4jk2s84tat9ud2kaq6zr7xzpvl9l5q8awmex'\n ),\n data: new TransactionPayload(data),\n receiverUsername: receiverUsername\n ? Buffer.from(receiverUsername).toString('base64')\n : undefined,\n senderUsername: senderUsername\n ? Buffer.from(senderUsername).toString('base64')\n : undefined,\n gasLimit: 100000,\n chainID: '1',\n value: '0'\n });\n};\n"],
5
+ "mappings": "kFAAA,IAAAA,EAIO,OAEMC,EAAwB,CAAC,CACpC,KAAAC,EACA,iBAAAC,EACA,eAAAC,CACF,IAKS,IAAI,cAAY,CAErB,OAAQ,IAAI,UACV,gEACF,EACA,SAAU,IAAI,UACZ,gEACF,EACA,KAAM,IAAI,qBAAmBF,CAAI,EACjC,iBAAkBC,EACd,OAAO,KAAKA,CAAgB,EAAE,SAAS,QAAQ,EAC/C,OACJ,eAAgBC,EACZ,OAAO,KAAKA,CAAc,EAAE,SAAS,QAAQ,EAC7C,OACJ,SAAU,IACV,QAAS,IACT,MAAO,GACT,CAAC",
6
+ "names": ["import_out", "createMockTransaction", "data", "receiverUsername", "senderUsername"]
7
+ }