UNPKG

@elrondnetwork/erdjs-data-api-client

Version:
54 lines 2.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NativeAuthSigner = void 0; const tslib_1 = require("tslib"); const out_1 = require("@elrondnetwork/erdjs-walletcore/out"); const out_2 = require("@elrondnetwork/erdjs/out"); const native_auth_client_1 = require("@elrondnetwork/native-auth-client"); const moment_1 = tslib_1.__importDefault(require("moment")); const config_1 = require("./config"); class NativeAuthSigner { constructor(config) { this.config = Object.assign(new config_1.NativeAuthSignerConfig(), config); this.nativeAuthClient = new native_auth_client_1.NativeAuthClient(this.config); } async getToken() { const currentDate = (0, moment_1.default)().add(1, 'minutes').toDate(); if (this.accessTokenInfo && currentDate <= this.accessTokenInfo.expiryDate) { return this.accessTokenInfo; } const userSigner = this.getUserSigner(); const signableToken = await this.getSignableToken(); const signerAddress = userSigner.getAddress().bech32(); const signableMessage = this.getSignableMessage(signerAddress, signableToken); await userSigner.sign(signableMessage); const signature = signableMessage.getSignature(); const token = this.nativeAuthClient.getToken(signerAddress, signableToken, signature.hex()); const expiryDate = (0, moment_1.default)().add(this.config.expirySeconds, 'seconds').toDate(); return this.accessTokenInfo = { token, expiryDate, }; } getUserSigner() { if (this.userSigner) { return this.userSigner; } if (!this.config.signerPrivateKey) { throw new Error('Missing SignerPrivateKey in NativeAuthSigner.'); } const pemKey = this.config.signerPrivateKey; return this.userSigner = out_1.UserSigner.fromPem(pemKey); } getSignableToken() { return this.nativeAuthClient.initialize(); } getSignableMessage(signerAddress, signableToken) { const messageToSign = `${signerAddress}${signableToken}{}`; return new out_2.SignableMessage({ message: Buffer.from(messageToSign, 'utf8'), }); } } exports.NativeAuthSigner = NativeAuthSigner; //# sourceMappingURL=native.auth.signer.js.map