axie-ronin-ethers-js-tools
Version:
A set of functions that make it easier for developers to interact with their Axies on the Ronin network and the maketplace.
46 lines (45 loc) • 2.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.refreshToken = exports.exchangeNonce = exports.exchangeToken = exports.generateAccessTokenMessage = void 0;
const utils_1 = require("../utils");
const AUTH_NONCE_URL = 'https://athena.skymavis.com/v2/public/auth/ronin/fetch-nonce';
const AUTH_LOGIN_URL = 'https://athena.skymavis.com/v2/public/auth/ronin/login';
const AUTH_TOKEN_REFRESH_URL = 'https://athena.skymavis.com/v2/public/auth/token/refresh';
// Taken from https://github.com/SM-Trung-Le/temp-accessToken
const generateAccessTokenMessage = async (address, domain = `YOUR_DOMAIN_GOES_HERE`, uri = "https://YOUR_APP_URI", statement = `YOUR_STATEMENT`) => {
const data = await (0, exports.exchangeNonce)(address);
const message = `${domain} wants you to sign in with your Ronin account:\n${address.replace('0x', 'ronin:').toLowerCase()}\n\n${statement}\n\nURI: ${uri}\nVersion: 1\nChain ID: 2020\nNonce: ${data.nonce}\nIssued At: ${data.issued_at}\nExpiration Time: ${data.expiration_time}\nNot Before: ${data.not_before}`;
/*
Example message:
app.axieinfinity.com wants you to sign in with your Ronin account: ronin:af9d50d8e6e19e3163583f293bb9b457cd28e8af I accept the Terms of Use (https://axieinfinity.com/terms-of-use) and the Privacy Policy (https://axieinfinity.com/privacy-policy) URI: https://app.axieinfinity.com Version: 1 Chain ID: 2020 Nonce: 13706446796901304963 Issued At: 2023-06-16T14:05:11Z Expiration Time: 2023-06-16T14:05:41Z Not Before: 2023-06-16T14:05:11Z
*/
return message;
};
exports.generateAccessTokenMessage = generateAccessTokenMessage;
const exchangeToken = async (signature, message) => {
const data = await (0, utils_1.apiRequest)(AUTH_LOGIN_URL, JSON.stringify({ signature, message }));
if (!data.accessToken) {
throw new Error('No access token');
}
return data;
};
exports.exchangeToken = exchangeToken;
const exchangeNonce = async (address) => {
const headers = {};
const data = await (0, utils_1.apiRequest)(`${AUTH_NONCE_URL}?address=${address}`, null, headers, "GET");
if (!data.nonce) {
throw new Error('No access token');
}
return data;
};
exports.exchangeNonce = exchangeNonce;
const refreshToken = async (refreshToken) => {
const data = await (0, utils_1.apiRequest)(AUTH_TOKEN_REFRESH_URL, JSON.stringify({ refreshToken }));
const newAccessToken = data.accessToken;
const newRefreshToken = data.refreshToken;
if (!newAccessToken || !newRefreshToken) {
throw new Error('Error refreshing token, API response: ' + JSON.stringify(data));
}
return { newAccessToken, newRefreshToken };
};
exports.refreshToken = refreshToken;