@automata-network/pom-js-sdk
Advanced tools
Comparing version 0.0.4 to 0.0.5
@@ -78,2 +78,7 @@ import { POMSocket, getSocket, SocketConnectionResult } from '@automata-network/pom-socket'; | ||
constructor(...[socketUrl, options]: Parameters<typeof getSocket>); | ||
static generateDeepLink(options: SocketConnectionResult): string; | ||
static parseDeepLinkQuery(deepLink: string): DeepLinkQuery; | ||
static generateQrcode(deepLink: string, options?: { | ||
level?: 'L' | 'M' | 'Q' | 'H'; | ||
}): string; | ||
sign(options: SignatureOptions): Promise<SignatureResult>; | ||
@@ -84,7 +89,2 @@ private connectSocketAndWait; | ||
waitForKeyExchangeEvent(): Promise<void>; | ||
generateDeepLink(options: SocketConnectionResult): string; | ||
parseDeepLinkQuery(deepLink: string): DeepLinkQuery; | ||
generateQrcode(deepLink: string, options?: { | ||
level?: 'L' | 'M' | 'Q' | 'H'; | ||
}): string; | ||
getIdentityStatus(options: GetIdentityStatusOptions): MessageResult<IdentityStatusResult>; | ||
@@ -91,0 +91,0 @@ attestDevice(options: ChainIdOptions): MessageResult<AttestDeviceData>; |
@@ -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;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}}}; | ||
"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");class S{pomSocket;constructor(...[e,t]){this.pomSocket=n.getSocket(e,t)}static generateDeepLink(e){const{sessionId:t,dhSharedPublicNumber:n,hkdfSalt:r}=e,o={id:t,dh:n,s:r};return`${i}?${s.stringify(o)}`}static 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)}static generateQrcode(e,t){return new r.Encoder({level:t?.level||"M"}).encode(new r.Byte(e)).toDataURL()}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=S.generateDeepLink(s);n({deepLink:r,imageBase64:S.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()}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}}}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=S; | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "@automata-network/pom-js-sdk", | ||
"version": "0.0.4", | ||
"version": "0.0.5", | ||
"description": "A socket clinet for automata's Proof Of Machinehood", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -117,2 +117,49 @@ import { | ||
static generateDeepLink(options: SocketConnectionResult): string { | ||
const {sessionId, dhSharedPublicNumber, hkdfSalt} = options; | ||
const query: DeepLinkQuery = { | ||
id: sessionId, | ||
dh: dhSharedPublicNumber, | ||
s: hkdfSalt, | ||
}; | ||
return `${pomAppBasePath}?${stringify(query)}`; | ||
} | ||
static parseDeepLinkQuery(deepLink: string): DeepLinkQuery { | ||
const [basePath, query] = deepLink.split('?'); | ||
if (basePath !== pomAppBasePath) { | ||
throw ERR_INVALID_DEEP_LINK; | ||
} | ||
const parsedQs = parse(query); | ||
if ( | ||
typeof parsedQs.id !== 'string' || | ||
typeof parsedQs.dh !== 'string' || | ||
typeof parsedQs.s !== 'string' || | ||
parsedQs.id === '' || | ||
parsedQs.dh === '' || | ||
parsedQs.s === '' | ||
) { | ||
throw ERR_INVALID_DEEP_LINK_PARAMETERS; | ||
} | ||
return parse(query) as unknown as DeepLinkQuery; | ||
} | ||
static generateQrcode( | ||
deepLink: string, | ||
options?: {level?: 'L' | 'M' | 'Q' | 'H'}, | ||
) { | ||
const encoder = new Encoder({ | ||
level: options?.level || 'M', | ||
}); | ||
const qrcode = encoder.encode(new Byte(deepLink)); | ||
return qrcode.toDataURL(); | ||
} | ||
async sign(options: SignatureOptions): Promise<SignatureResult> { | ||
@@ -188,4 +235,4 @@ const { | ||
const session = await this.connectSocket(); | ||
const deepLink = this.generateDeepLink(session); | ||
const qrcodeImageBase64 = this.generateQrcode( | ||
const deepLink = POMClinet.generateDeepLink(session); | ||
const qrcodeImageBase64 = POMClinet.generateQrcode( | ||
deepLink, | ||
@@ -221,46 +268,2 @@ qrcodeLevel ? {level: qrcodeLevel} : undefined, | ||
generateDeepLink(options: SocketConnectionResult): string { | ||
const {sessionId, dhSharedPublicNumber, hkdfSalt} = options; | ||
const query: DeepLinkQuery = { | ||
id: sessionId, | ||
dh: dhSharedPublicNumber, | ||
s: hkdfSalt, | ||
}; | ||
return `${pomAppBasePath}?${stringify(query)}`; | ||
} | ||
parseDeepLinkQuery(deepLink: string): DeepLinkQuery { | ||
const [basePath, query] = deepLink.split('?'); | ||
if (basePath !== pomAppBasePath) { | ||
throw ERR_INVALID_DEEP_LINK; | ||
} | ||
const parsedQs = parse(query); | ||
if ( | ||
typeof parsedQs.id !== 'string' || | ||
typeof parsedQs.dh !== 'string' || | ||
typeof parsedQs.s !== 'string' || | ||
parsedQs.id === '' || | ||
parsedQs.dh === '' || | ||
parsedQs.s === '' | ||
) { | ||
throw ERR_INVALID_DEEP_LINK_PARAMETERS; | ||
} | ||
return parse(query) as unknown as DeepLinkQuery; | ||
} | ||
generateQrcode(deepLink: string, options?: {level?: 'L' | 'M' | 'Q' | 'H'}) { | ||
const encoder = new Encoder({ | ||
level: options?.level || 'M', | ||
}); | ||
const qrcode = encoder.encode(new Byte(deepLink)); | ||
return qrcode.toDataURL(); | ||
} | ||
getIdentityStatus( | ||
@@ -267,0 +270,0 @@ options: GetIdentityStatusOptions, |
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
40529
583