@automata-network/pom-js-sdk
Advanced tools
Comparing version 0.0.3 to 0.0.4
@@ -79,2 +79,3 @@ import { POMSocket, getSocket, SocketConnectionResult } from '@automata-network/pom-socket'; | ||
sign(options: SignatureOptions): Promise<SignatureResult>; | ||
private connectSocketAndWait; | ||
connectSocket(): Promise<SocketConnectionResult>; | ||
@@ -81,0 +82,0 @@ waitForConnectedEvent(): Promise<void>; |
@@ -1,2 +0,2 @@ | ||
"use strict";var e,t,n=require("@automata-network/pom-socket"),s=require("qs"),r=require("@nuintun/qrcode"),o=require("./util.js");exports.POMPlatform=void 0,(e=exports.POMPlatform||(exports.POMPlatform={})).Android="android",e.iOS="iOS",e.macOS="macOS",exports.IdentityStatus=void 0,(t=exports.IdentityStatus||(exports.IdentityStatus={})).None="none",t.Generated="generated",t.Registered="registered";const i="pom://pomrn.ata.network/connect",a=new Error("deep link is invalid"),c=new Error("deep link parameters is invalid"),d=new Error("socket is connecting"),p=new Error("get identity status timeout"),u=new Error("identity is empty");exports.ERR_OPERATION_CANCELLED=o.ERR_OPERATION_CANCELLED,Object.defineProperty(exports,"POMOperation",{enumerable:!0,get:function(){return o.POMOperation}}),exports.ERR_GET_IDENTITY_STATUS_TIMEOUT=p,exports.ERR_IDENTITY_IS_EMPTY=u,exports.ERR_INVALID_DEEP_LINK=a,exports.ERR_INVALID_DEEP_LINK_PARAMETERS=c,exports.ERR_SOCKET_IS_CONNECTING=d,exports.POMClinet=class{pomSocket;constructor(...[e,t]){this.pomSocket=n.getSocket(e,t)}async sign(e){const{chainId:t,message:s,qrcodeLevel:r,onRenderQrcode:i,onGetIdentityOnChain:a,onRegisterIdentity:c}=e;if(this.pomSocket.status===n.SocketStatus.Connecting)throw d;if(this.pomSocket.status===n.SocketStatus.Disconnected){const e=await this.connectSocket(),t=this.generateDeepLink(e);i({deepLink:t,imageBase64:this.generateQrcode(t,r?{level:r}:void 0)}),await this.waitForConnectedEvent(),await this.waitForKeyExchangeEvent()}const p=await this.getIdentityStatus({chainId:t,onGetIdentityOnChain:a}).promise;let E;if(p.status===exports.IdentityStatus.None?E=await this.attestDevice({chainId:t}).promise:p.status!==exports.IdentityStatus.Generated&&p.status!==exports.IdentityStatus.Registered||(E=p.payload),null==E)throw u;p.status!==exports.IdentityStatus.None&&p.status!==exports.IdentityStatus.Generated||(await c(E),await o.runWithErrorRetry((()=>{const e=a({chainId:t,identity:E.identity});if(!e)throw o.ERR_NEED_RETRY;return e})));return{signature:await this.signMessage({chainId:t,message:s}).promise,...E}}async connectSocket(){return this.pomSocket.connect()}waitForConnectedEvent(){return this.pomSocket.waitForConnectedEvent()}waitForKeyExchangeEvent(){return this.pomSocket.waitForKeyExchangeEvent()}generateDeepLink(e){const{sessionId:t,dhSharedPublicNumber:n,hkdfSalt:r}=e,o={id:t,dh:n,s:r};return`${i}?${s.stringify(o)}`}parseDeepLinkQuery(e){const[t,n]=e.split("?");if(t!==i)throw a;const r=s.parse(n);if("string"!=typeof r.id||"string"!=typeof r.dh||"string"!=typeof r.s||""===r.id||""===r.dh||""===r.s)throw c;return s.parse(n)}generateQrcode(e,t){return new r.Encoder({level:t?.level||"M"}).encode(new r.Byte(e)).toDataURL()}getIdentityStatus(e){const{chainId:t,onGetIdentityOnChain:n}=e;let s;return{promise:new Promise(((e,r)=>{s=o.sendMessageAndWaitForResponse({socket:this.pomSocket,op:o.POMOperation.GetIdentityStatus,data:{chainId:t},resolver:s=>{s?n({chainId:t,identity:s.identity}).then((t=>{e({status:t?exports.IdentityStatus.Registered:exports.IdentityStatus.Generated,payload:s})})).catch((e=>{r(e)})):e({status:exports.IdentityStatus.None})},rejecter:r})})),cancel:s}}attestDevice(e){let t;return{promise:new Promise(((n,s)=>{t=o.sendMessageAndWaitForResponse({socket:this.pomSocket,op:o.POMOperation.AttestDevice,data:e,resolver:n,rejecter:s})})),cancel:t}}signMessage(e){let t;return{promise:new Promise(((n,s)=>{t=o.sendMessageAndWaitForResponse({socket:this.pomSocket,op:o.POMOperation.SignMessage,data:e,resolver:n,rejecter:s})})),cancel:t}}}; | ||
"use strict";var e,t,n=require("@automata-network/pom-socket"),s=require("qs"),r=require("@nuintun/qrcode"),o=require("./util.js");exports.POMPlatform=void 0,(e=exports.POMPlatform||(exports.POMPlatform={})).Android="android",e.iOS="iOS",e.macOS="macOS",exports.IdentityStatus=void 0,(t=exports.IdentityStatus||(exports.IdentityStatus={})).None="none",t.Generated="generated",t.Registered="registered";const i="pom://pomrn.ata.network/connect",a=new Error("deep link is invalid"),c=new Error("deep link parameters is invalid"),d=new Error("socket is connecting"),p=new Error("get identity status timeout"),u=new Error("identity is empty");exports.ERR_OPERATION_CANCELLED=o.ERR_OPERATION_CANCELLED,Object.defineProperty(exports,"POMOperation",{enumerable:!0,get:function(){return o.POMOperation}}),exports.ERR_GET_IDENTITY_STATUS_TIMEOUT=p,exports.ERR_IDENTITY_IS_EMPTY=u,exports.ERR_INVALID_DEEP_LINK=a,exports.ERR_INVALID_DEEP_LINK_PARAMETERS=c,exports.ERR_SOCKET_IS_CONNECTING=d,exports.POMClinet=class{pomSocket;constructor(...[e,t]){this.pomSocket=n.getSocket(e,t)}async sign(e){const{chainId:t,message:s,qrcodeLevel:r,onRenderQrcode:i,onGetIdentityOnChain:a,onRegisterIdentity:c}=e;if(this.pomSocket.status===n.SocketStatus.Connecting)throw d;this.pomSocket.status===n.SocketStatus.Disconnected&&await this.connectSocketAndWait({qrcodeLevel:r,onRenderQrcode:i});const p=await this.getIdentityStatus({chainId:t,onGetIdentityOnChain:a}).promise;let S;if(p.status===exports.IdentityStatus.None?S=await this.attestDevice({chainId:t}).promise:p.status!==exports.IdentityStatus.Generated&&p.status!==exports.IdentityStatus.Registered||(S=p.payload),null==S)throw u;p.status!==exports.IdentityStatus.None&&p.status!==exports.IdentityStatus.Generated||(await c(S),await o.runWithErrorRetry((()=>{const e=a({chainId:t,identity:S.identity});if(!e)throw o.ERR_NEED_RETRY;return e})));return{signature:await this.signMessage({chainId:t,message:s}).promise,...S}}async connectSocketAndWait(e){try{const{qrcodeLevel:t,onRenderQrcode:n}=e,s=await this.connectSocket(),r=this.generateDeepLink(s);n({deepLink:r,imageBase64:this.generateQrcode(r,t?{level:t}:void 0)}),await this.waitForConnectedEvent(),await this.waitForKeyExchangeEvent()}catch(t){if(t!==n.ERR_SESSION_IS_EXPIRED)throw t;this.connectSocketAndWait(e)}}async connectSocket(){return this.pomSocket.connect()}async waitForConnectedEvent(){return this.pomSocket.waitForConnectedEvent()}async waitForKeyExchangeEvent(){return this.pomSocket.waitForKeyExchangeEvent()}generateDeepLink(e){const{sessionId:t,dhSharedPublicNumber:n,hkdfSalt:r}=e,o={id:t,dh:n,s:r};return`${i}?${s.stringify(o)}`}parseDeepLinkQuery(e){const[t,n]=e.split("?");if(t!==i)throw a;const r=s.parse(n);if("string"!=typeof r.id||"string"!=typeof r.dh||"string"!=typeof r.s||""===r.id||""===r.dh||""===r.s)throw c;return s.parse(n)}generateQrcode(e,t){return new r.Encoder({level:t?.level||"M"}).encode(new r.Byte(e)).toDataURL()}getIdentityStatus(e){const{chainId:t,onGetIdentityOnChain:n}=e;let s;return{promise:new Promise(((e,r)=>{s=o.sendMessageAndWaitForResponse({socket:this.pomSocket,op:o.POMOperation.GetIdentityStatus,data:{chainId:t},resolver:s=>{s?n({chainId:t,identity:s.identity}).then((t=>{e({status:t?exports.IdentityStatus.Registered:exports.IdentityStatus.Generated,payload:s})})).catch((e=>{r(e)})):e({status:exports.IdentityStatus.None})},rejecter:r})})),cancel:s}}attestDevice(e){let t;return{promise:new Promise(((n,s)=>{t=o.sendMessageAndWaitForResponse({socket:this.pomSocket,op:o.POMOperation.AttestDevice,data:e,resolver:n,rejecter:s})})),cancel:t}}signMessage(e){let t;return{promise:new Promise(((n,s)=>{t=o.sendMessageAndWaitForResponse({socket:this.pomSocket,op:o.POMOperation.SignMessage,data:e,resolver:n,rejecter:s})})),cancel:t}}}; | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "@automata-network/pom-js-sdk", | ||
"version": "0.0.3", | ||
"version": "0.0.4", | ||
"description": "A socket clinet for automata's Proof Of Machinehood", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
import { | ||
ERR_SESSION_IS_EXPIRED, | ||
POMSocket, | ||
@@ -129,14 +130,3 @@ SocketConnectionResult, | ||
} else if (this.pomSocket.status === SocketStatus.Disconnected) { | ||
const session = await this.connectSocket(); | ||
const deepLink = this.generateDeepLink(session); | ||
const qrcodeImageBase64 = this.generateQrcode( | ||
deepLink, | ||
qrcodeLevel ? {level: qrcodeLevel} : undefined, | ||
); | ||
onRenderQrcode({deepLink, imageBase64: qrcodeImageBase64}); | ||
await this.waitForConnectedEvent(); | ||
await this.waitForKeyExchangeEvent(); | ||
await this.connectSocketAndWait({qrcodeLevel, onRenderQrcode}); | ||
} | ||
@@ -192,2 +182,28 @@ | ||
private async connectSocketAndWait( | ||
options: Pick<SignatureOptions, 'qrcodeLevel' | 'onRenderQrcode'>, | ||
) { | ||
try { | ||
const {qrcodeLevel, onRenderQrcode} = options; | ||
const session = await this.connectSocket(); | ||
const deepLink = this.generateDeepLink(session); | ||
const qrcodeImageBase64 = this.generateQrcode( | ||
deepLink, | ||
qrcodeLevel ? {level: qrcodeLevel} : undefined, | ||
); | ||
onRenderQrcode({deepLink, imageBase64: qrcodeImageBase64}); | ||
await this.waitForConnectedEvent(); | ||
await this.waitForKeyExchangeEvent(); | ||
} catch (e) { | ||
if (e === ERR_SESSION_IS_EXPIRED) { | ||
this.connectSocketAndWait(options); | ||
} else { | ||
throw e; | ||
} | ||
} | ||
} | ||
async connectSocket() { | ||
@@ -197,7 +213,7 @@ return this.pomSocket.connect(); | ||
waitForConnectedEvent() { | ||
async waitForConnectedEvent() { | ||
return this.pomSocket.waitForConnectedEvent(); | ||
} | ||
waitForKeyExchangeEvent() { | ||
async waitForKeyExchangeEvent() { | ||
return this.pomSocket.waitForKeyExchangeEvent(); | ||
@@ -204,0 +220,0 @@ } |
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
40417
580