@elrondnetwork/erdjs-data-api-client
Version:
MultiversX Data API client
54 lines • 2.35 kB
JavaScript
;
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