UNPKG

nepse-api-helper

Version:

a wrapper to use nepse api easily since they set up weird restrictions

72 lines (71 loc) 2.66 kB
"use strict"; 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); } }