@automata-network/pom-js-sdk
Advanced tools
Comparing version 0.0.40 to 0.0.41
@@ -1,2 +0,2 @@ | ||
"use strict";var e,r,o,t,a=require("@automata-network/pom-socket"),s=require("qs"),i=require("qrcode"),n=require("./util.js");exports.ChainId=void 0,(e=exports.ChainId||(exports.ChainId={})).LineaSepolia="0xe705",e.AutomataTestnet="0x1555e3",e.AutomataMainnet="0x10000",exports.POMPlatform=void 0,(r=exports.POMPlatform||(exports.POMPlatform={})).Android="android",r.iOS="iOS",r.macOS="macOS",exports.IdentityStatus=void 0,(o=exports.IdentityStatus||(exports.IdentityStatus={})).None="none",o.Generated="generated",o.Registered="registered",exports.CallbackBrowser=void 0,(t=exports.CallbackBrowser||(exports.CallbackBrowser={})).iOSChrome="iOSChrome",t.iOSSafari="iOSSafari",t.iOSEdge="iOSEdge",t.iOSFirefox="iOSFirefox",t.iOSOpera="iOSOpera",t.iOSBrave="iOSBrave",t.iOSAloha="iOSAloha",t.androidChrome="androidChrome",t.androidEdge="androidEdge",t.androidFirefox="androidFirefox",t.androidOpera="androidOpera",t.androidBrave="androidBrave",t.androidAloha="androidAloha",t.macOSChrome="macOSChrome",t.macOSSafari="macOSSafari",t.macOSEdge="macOSEdge",t.macOSFirefox="macOSFirefox",t.macOSOpera="macOSOpera",t.macOSBrave="macOSBrave",t.macOSAloha="macOSAloha";const c={macOS:{[exports.CallbackBrowser.macOSChrome]:"com.google.Chrome",[exports.CallbackBrowser.macOSSafari]:"com.apple.safari",[exports.CallbackBrowser.macOSFirefox]:"org.mozilla.firefox",[exports.CallbackBrowser.macOSEdge]:"com.microsoft.edgemac",[exports.CallbackBrowser.macOSBrave]:"com.brave.Browser",[exports.CallbackBrowser.macOSOpera]:"com.operasoftware.Opera",[exports.CallbackBrowser.macOSAloha]:"com.alohabrowser.alohabrowser"},iOS:{[exports.CallbackBrowser.iOSChrome]:"com.google.chrome.ios",[exports.CallbackBrowser.iOSSafari]:"com.apple.mobilesafari",[exports.CallbackBrowser.iOSFirefox]:"org.mozilla.ios.Firefox",[exports.CallbackBrowser.iOSEdge]:"com.microsoft.msedge",[exports.CallbackBrowser.iOSBrave]:"com.brave.ios.browser",[exports.CallbackBrowser.iOSOpera]:"com.opera.OperaTouch",[exports.CallbackBrowser.iOSAloha]:"com.alohabrowser.alohabrowser"},android:{[exports.CallbackBrowser.androidChrome]:"com.android.chrome",[exports.CallbackBrowser.androidFirefox]:"org.mozilla.firefox",[exports.CallbackBrowser.androidEdge]:"com.microsoft.emmx",[exports.CallbackBrowser.androidBrave]:"com.brave.browser",[exports.CallbackBrowser.androidOpera]:"com.opera.browser",[exports.CallbackBrowser.androidAloha]:"com.aloha.browser"}},d="pom://pomrn.ata.network/connect",l=new Error("deep link is invalid"),p=new Error("deep link parameters is invalid"),m=new Error("socket is connecting"),S=new Error("get identity status timeout"),O=new Error("identity is empty");class h{pomSocket;constructor(...[e,r]){this.pomSocket=a.getSocket(e,r)}static generateDeepLink(e){const{sessionId:r,dhSharedPublicNumber:o,hkdfSalt:t,callbackBrowser:a,callbackDeepLinkUrl:i}=e,n={id:r,dh:o,s:t,cb:a,cu:i};return`${d}?${s.stringify({q:n})}`}static parseDeepLinkQuery(e){const[r,o]=e.split("?");if(r!==d)throw l;const t=s.parse(o);if(null!=t.id&&"string"!=typeof t.id||null!=t.dh&&"string"!=typeof t.dh||null!=t.s&&"string"!=typeof t.s||null!=t.cu&&"string"!=typeof t.cu||null!=t.cb&&"string"!=typeof t.cb)throw p;return t}static async generateQrcode(e,r){const{sessionId:o,dhSharedPublicNumber:t,hkdfSalt:a}=e,s=[t?{data:t,mode:"numeric"}:void 0,a?{data:a,mode:"alphanumeric"}:void 0,o?{data:o}:void 0];return await i.toDataURL(s.filter((e=>null!=e)),{errorCorrectionLevel:r?.level||"L"})}static parseQrcode(e){const r=e.slice(0,462),o=e.slice(462,494);return{id:e.slice(494),dh:r,s:o}}async sign(e){const{chainId:r,caller:o,message:t,qrcodeLevel:s,onRenderQrcode:i,onGetIdentityOnChain:c,onRegisterIdentity:d}=e;let l=this.pomSocket.getSocketStatus();if(l===a.SocketStatus.Connecting)throw m;l===a.SocketStatus.Disconnected&&await this.connectSocketAndWait({qrcodeLevel:s,onRenderQrcode:i});const p=await this.getIdentityStatus({chainId:r}).promise;let S;if(p.status!==exports.IdentityStatus.None&&p.status!==exports.IdentityStatus.Generated||(S=await this.attestDevice({chainId:r,caller:o}).promise),p.status===exports.IdentityStatus.None||p.status===exports.IdentityStatus.Generated){if(null==S)throw O;await d(S),await n.runWithErrorRetry((()=>{const e=c({chainId:r,identity:S.identity});if(!e)throw n.ERR_NEED_RETRY;return e}))}return await this.signMessage({chainId:r,caller:o,message:t}).promise}async connectSocketAndWait(e){try{const{qrcodeLevel:r,onRenderQrcode:o}=e,t=await this.connectSocket(),a=h.generateDeepLink(t);o({deepLink:a,imageBase64:await h.generateQrcode(t,r?{level:r}:void 0)}),await this.waitForConnectedEvent(),await this.waitForKeyExchangeEvent()}catch(r){if(r!==a.ERR_SESSION_IS_EXPIRED)throw r;this.connectSocketAndWait(e)}}async connectSocket(){return this.pomSocket.connect()}async waitForConnectedEvent(){return this.pomSocket.waitForConnectedEvent()}async waitForKeyExchangeEvent(){return this.pomSocket.waitForKeyExchangeEvent()}getIdentityStatus(e){const{chainId:r}=e;let o;return{promise:new Promise(((e,t)=>{o=n.sendMessageAndWaitForResponse({socket:this.pomSocket,op:n.POMOperation.GetIdentityStatus,data:{chainId:r},resolver:e,rejecter:t})})),cancel:o}}attestDevice(e){let r;return{promise:new Promise(((o,t)=>{r=n.sendMessageAndWaitForResponse({socket:this.pomSocket,op:n.POMOperation.AttestDevice,data:e,resolver:o,rejecter:t})})),cancel:r}}signMessage(e){let r;return{promise:new Promise(((o,t)=>{r=n.sendMessageAndWaitForResponse({socket:this.pomSocket,op:n.POMOperation.SignMessage,data:e,resolver:o,rejecter:t})})),cancel:r}}}exports.ERR_OPERATION_CANCELLED=n.ERR_OPERATION_CANCELLED,Object.defineProperty(exports,"POMOperation",{enumerable:!0,get:function(){return n.POMOperation}}),exports.decodeMessageData=n.decodeMessageData,exports.encodeMessageData=n.encodeMessageData,exports.getCallbackBrowser=n.getCallbackBrowser,exports.ERR_GET_IDENTITY_STATUS_TIMEOUT=S,exports.ERR_IDENTITY_IS_EMPTY=O,exports.ERR_INVALID_DEEP_LINK=l,exports.ERR_INVALID_DEEP_LINK_PARAMETERS=p,exports.ERR_SOCKET_IS_CONNECTING=m,exports.POMClinet=h,exports.bundleIds=c,exports.pomAppBasePath=d; | ||
"use strict";var e,r,o,t,a=require("@automata-network/pom-socket"),s=require("qs"),i=require("qrcode"),n=require("./util.js");exports.ChainId=void 0,(e=exports.ChainId||(exports.ChainId={})).LineaSepolia="0xe705",e.AutomataTestnet="0x1555e3",e.AutomataMainnet="0x10000",exports.POMPlatform=void 0,(r=exports.POMPlatform||(exports.POMPlatform={})).Android="android",r.iOS="iOS",r.macOS="macOS",exports.IdentityStatus=void 0,(o=exports.IdentityStatus||(exports.IdentityStatus={})).None="none",o.Generated="generated",o.Registered="registered",exports.CallbackBrowser=void 0,(t=exports.CallbackBrowser||(exports.CallbackBrowser={})).iOSChrome="iOSChrome",t.iOSSafari="iOSSafari",t.iOSEdge="iOSEdge",t.iOSFirefox="iOSFirefox",t.iOSOpera="iOSOpera",t.iOSBrave="iOSBrave",t.iOSAloha="iOSAloha",t.androidChrome="androidChrome",t.androidEdge="androidEdge",t.androidFirefox="androidFirefox",t.androidOpera="androidOpera",t.androidBrave="androidBrave",t.androidAloha="androidAloha",t.macOSChrome="macOSChrome",t.macOSSafari="macOSSafari",t.macOSEdge="macOSEdge",t.macOSFirefox="macOSFirefox",t.macOSOpera="macOSOpera",t.macOSBrave="macOSBrave",t.macOSAloha="macOSAloha";const c={macOS:{[exports.CallbackBrowser.macOSChrome]:"com.google.Chrome",[exports.CallbackBrowser.macOSSafari]:"com.apple.safari",[exports.CallbackBrowser.macOSFirefox]:"org.mozilla.firefox",[exports.CallbackBrowser.macOSEdge]:"com.microsoft.edgemac",[exports.CallbackBrowser.macOSBrave]:"com.brave.Browser",[exports.CallbackBrowser.macOSOpera]:"com.operasoftware.Opera",[exports.CallbackBrowser.macOSAloha]:"com.alohabrowser.alohabrowser"},iOS:{[exports.CallbackBrowser.iOSChrome]:"com.google.chrome.ios",[exports.CallbackBrowser.iOSSafari]:"com.apple.mobilesafari",[exports.CallbackBrowser.iOSFirefox]:"org.mozilla.ios.Firefox",[exports.CallbackBrowser.iOSEdge]:"com.microsoft.msedge",[exports.CallbackBrowser.iOSBrave]:"com.brave.ios.browser",[exports.CallbackBrowser.iOSOpera]:"com.opera.OperaTouch",[exports.CallbackBrowser.iOSAloha]:"com.alohabrowser.alohabrowser"},android:{[exports.CallbackBrowser.androidChrome]:"com.android.chrome",[exports.CallbackBrowser.androidFirefox]:"org.mozilla.firefox",[exports.CallbackBrowser.androidEdge]:"com.microsoft.emmx",[exports.CallbackBrowser.androidBrave]:"com.brave.browser",[exports.CallbackBrowser.androidOpera]:"com.opera.browser",[exports.CallbackBrowser.androidAloha]:"com.aloha.browser"}},d="pom://pomrn.ata.network/connect",l=new Error("deep link is invalid"),p=new Error("deep link parameters is invalid"),m=new Error("socket is connecting"),S=new Error("get identity status timeout"),O=new Error("identity is empty");class h{pomSocket;constructor(...[e,r]){this.pomSocket=a.getSocket(e,r)}static generateDeepLink(e){const{sessionId:r,dhSharedPublicNumber:o,hkdfSalt:t,callbackBrowser:a,callbackDeepLinkUrl:i}=e,n={id:r,dh:o,s:t,cb:a,cu:i};return`${d}?${s.stringify({q:n})}`}static parseDeepLinkQuery(e){const[r,o]=e.split("?");if(r!==d)throw l;const t=s.parse(o);if(null!=t.id&&"string"!=typeof t.id||null!=t.dh&&"string"!=typeof t.dh||null!=t.s&&"string"!=typeof t.s||null!=t.cu&&"string"!=typeof t.cu||null!=t.cb&&"string"!=typeof t.cb)throw p;return t}static async generateQrcode(e,r){const{sessionId:o,dhSharedPublicNumber:t,hkdfSalt:a}=e,s=[t?{data:t,mode:"alphanumeric"}:void 0,a?{data:a,mode:"alphanumeric"}:void 0,o?{data:o}:void 0];return await i.toDataURL(s.filter((e=>null!=e)),{errorCorrectionLevel:r?.level||"L"})}static parseQrcode(e){const r=e.slice(0,462),o=e.slice(462,494);return{id:e.slice(494),dh:r,s:o}}async sign(e){const{chainId:r,caller:o,message:t,qrcodeLevel:s,onRenderQrcode:i,onGetIdentityOnChain:c,onRegisterIdentity:d}=e;let l=this.pomSocket.getSocketStatus();if(l===a.SocketStatus.Connecting)throw m;l===a.SocketStatus.Disconnected&&await this.connectSocketAndWait({qrcodeLevel:s,onRenderQrcode:i});const p=await this.getIdentityStatus({chainId:r}).promise;let S;if(p.status!==exports.IdentityStatus.None&&p.status!==exports.IdentityStatus.Generated||(S=await this.attestDevice({chainId:r,caller:o}).promise),p.status===exports.IdentityStatus.None||p.status===exports.IdentityStatus.Generated){if(null==S)throw O;await d(S),await n.runWithErrorRetry((()=>{const e=c({chainId:r,identity:S.identity});if(!e)throw n.ERR_NEED_RETRY;return e}))}return await this.signMessage({chainId:r,caller:o,message:t}).promise}async connectSocketAndWait(e){try{const{qrcodeLevel:r,onRenderQrcode:o}=e,t=await this.connectSocket(),a=h.generateDeepLink(t);o({deepLink:a,imageBase64:await h.generateQrcode(t,r?{level:r}:void 0)}),await this.waitForConnectedEvent(),await this.waitForKeyExchangeEvent()}catch(r){if(r!==a.ERR_SESSION_IS_EXPIRED)throw r;this.connectSocketAndWait(e)}}async connectSocket(){return this.pomSocket.connect()}async waitForConnectedEvent(){return this.pomSocket.waitForConnectedEvent()}async waitForKeyExchangeEvent(){return this.pomSocket.waitForKeyExchangeEvent()}getIdentityStatus(e){const{chainId:r}=e;let o;return{promise:new Promise(((e,t)=>{o=n.sendMessageAndWaitForResponse({socket:this.pomSocket,op:n.POMOperation.GetIdentityStatus,data:{chainId:r},resolver:e,rejecter:t})})),cancel:o}}attestDevice(e){let r;return{promise:new Promise(((o,t)=>{r=n.sendMessageAndWaitForResponse({socket:this.pomSocket,op:n.POMOperation.AttestDevice,data:e,resolver:o,rejecter:t})})),cancel:r}}signMessage(e){let r;return{promise:new Promise(((o,t)=>{r=n.sendMessageAndWaitForResponse({socket:this.pomSocket,op:n.POMOperation.SignMessage,data:e,resolver:o,rejecter:t})})),cancel:r}}}exports.ERR_OPERATION_CANCELLED=n.ERR_OPERATION_CANCELLED,Object.defineProperty(exports,"POMOperation",{enumerable:!0,get:function(){return n.POMOperation}}),exports.decodeMessageData=n.decodeMessageData,exports.encodeMessageData=n.encodeMessageData,exports.getCallbackBrowser=n.getCallbackBrowser,exports.ERR_GET_IDENTITY_STATUS_TIMEOUT=S,exports.ERR_IDENTITY_IS_EMPTY=O,exports.ERR_INVALID_DEEP_LINK=l,exports.ERR_INVALID_DEEP_LINK_PARAMETERS=p,exports.ERR_SOCKET_IS_CONNECTING=m,exports.POMClinet=h,exports.bundleIds=c,exports.pomAppBasePath=d; | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "@automata-network/pom-js-sdk", | ||
"version": "0.0.40", | ||
"version": "0.0.41", | ||
"description": "A socket clinet for automata's Proof Of Machinehood", | ||
@@ -25,3 +25,3 @@ "main": "dist/index.js", | ||
"dependencies": { | ||
"@automata-network/pom-socket": "^0.0.10", | ||
"@automata-network/pom-socket": "^0.0.11", | ||
"qrcode": "^1.5.4", | ||
@@ -28,0 +28,0 @@ "qs": "^6.11.2" |
@@ -253,2 +253,8 @@ import { | ||
// According to the QR code standard, it supports numeric, alphanumeric, and bytes. | ||
// Bytes take up more space and make the QR code difficult to scan. | ||
// So, we use numeric and alphanumeric modes to generate the QR code with | ||
// - diffie - hellman public numbers(numeric, fixed length: 462) | ||
// - hkdf salt(alphanumeric, fixed length: 32) | ||
// - session id(bytes, fixed length: 16) | ||
static async generateQrcode( | ||
@@ -262,3 +268,3 @@ query: QrcodeGenerationRequest, | ||
dhSharedPublicNumber | ||
? {data: dhSharedPublicNumber, mode: 'numeric'} | ||
? {data: dhSharedPublicNumber, mode: 'alphanumeric'} | ||
: undefined, | ||
@@ -265,0 +271,0 @@ hkdfSalt ? {data: hkdfSalt, mode: 'alphanumeric'} : undefined, |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
65656
900
+ Added@automata-network/pom-socket@0.0.11(transitive)
+ Addedecdh@0.2.0(transitive)
+ Addedjsbn@0.1.0(transitive)
+ Addedobject-inspect@1.13.3(transitive)
- Removed@automata-network/pom-socket@0.0.10(transitive)
- Removedbig-integer@1.6.52(transitive)
- Removeddiffie-hellman-ts@1.0.0(transitive)
- Removedobject-inspect@1.13.4(transitive)