nepse-api-helper
Version:
a wrapper to use nepse api easily since they set up weird restrictions
72 lines (71 loc) • 2.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getProveObject = getProveObject;
exports.generateValidToken = generateValidToken;
exports.getAccessToken = getAccessToken;
const constants_1 = require("./constants");
const errors_1 = require("./errors");
const http_1 = require("./http");
// auth.ts - Authentication functions
async function getProveObject() {
try {
const response = await (0, http_1.fetchWithTimeout)(`${constants_1.BASE_URL}/api/authenticate/prove`, {
headers: {
"User-Agent": "Mozilla/5.0",
"Referer": constants_1.BASE_URL
},
method: "GET"
});
if (!response.ok) {
throw (0, errors_1.createNepseError)(`Failed to get prove object: ${response.status} ${response.statusText}`, 'PROVE_FETCH_ERROR');
}
return await response.json();
}
catch (error) {
if (error.code) {
throw error;
}
throw (0, errors_1.createNepseError)('Failed to get prove object', 'PROVE_FETCH_ERROR', error);
}
}
function generateValidToken(proveObj, wasmExports) {
const { accessToken, salt1, salt2, salt3, salt4, salt5 } = proveObj;
const { cdx, rdx, bdx, ndx, mdx } = wasmExports;
const c = cdx(salt1, salt2, salt3, salt4, salt5);
const r = rdx(salt1, salt2, salt4, salt3, salt5);
const b = bdx(salt1, salt2, salt4, salt3, salt5);
const n = ndx(salt1, salt2, salt4, salt3, salt5);
const m = mdx(salt1, salt2, salt4, salt3, salt5);
return accessToken.slice(0, c) +
accessToken.slice(c + 1, r) +
accessToken.slice(r + 1, b) +
accessToken.slice(b + 1, n) +
accessToken.slice(n + 1, m) +
accessToken.slice(m + 1);
}
async function getAccessToken(state) {
const now = Date.now();
// Return cached token if valid
if (state.token.value && now < state.token.expiry) {
return [state, state.token.value];
}
if (!state.wasmExports) {
throw (0, errors_1.createNepseError)('WASM module not instantiated', 'WASM_NOT_INSTANTIATED');
}
try {
const proveObj = await getProveObject();
const token = generateValidToken(proveObj, state.wasmExports);
// Return new token and updated state
const newState = {
...state,
token: {
value: token,
expiry: now + constants_1.TOKEN_TTL_MS
}
};
return [newState, token];
}
catch (error) {
throw (0, errors_1.createNepseError)('Failed to get access token', 'TOKEN_ACQUISITION_ERROR', error);
}
}