UNPKG

sleeptracker-tools

Version:
106 lines (105 loc) 3.75 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CLIENT_INFO = exports.AUTH_BASE_URL = exports.API_BASE_URL = void 0; exports.authenticate = authenticate; exports.createApiClient = createApiClient; exports.createAuthClient = createAuthClient; exports.handleApiError = handleApiError; const axios_1 = __importDefault(require("axios")); const inquirer_1 = __importDefault(require("inquirer")); const ora_1 = __importDefault(require("ora")); exports.API_BASE_URL = 'https://app.tsi.sleeptracker.com'; exports.AUTH_BASE_URL = 'https://auth.tsi.sleeptracker.com'; exports.CLIENT_INFO = { clientID: 'sleeptracker-android-tsi', clientVersion: '1.9.47' }; async function authenticate() { var _a; const { username, password } = await inquirer_1.default.prompt([ { type: 'input', name: 'username', message: 'Enter your SleepTracker email:', validate: (input) => input.length > 0 && input.includes('@') }, { type: 'password', name: 'password', message: 'Enter your password:', validate: (input) => input.length > 0 } ]); const spinner = (0, ora_1.default)('Logging in...').start(); try { const credentials = Buffer.from(`${username}:${password}`).toString('base64'); const client = await createAuthClient(); const response = await client.post('/v1/app/user/session', { ...exports.CLIENT_INFO, id: 'TEST_ANDROID_getUserSession', scope: 'scope' }, { headers: { 'Authorization': `Basic ${credentials}` } }); if ((_a = response.data) === null || _a === void 0 ? void 0 : _a.token) { spinner.succeed('Login successful!'); return response.data.token; } else { spinner.fail('Login failed: No token received'); throw new Error('No token received'); } } catch (error) { spinner.fail('Login failed'); throw error; } } async function createApiClient(token) { if (!token) { token = await authenticate(); } return axios_1.default.create({ baseURL: exports.API_BASE_URL, headers: { 'Authorization': `Bearer ${token}`, 'Host': 'app.tsi.sleeptracker.com', 'Accept': '*/*', 'Content-Type': 'application/json', 'Accept-Encoding': 'gzip', 'Accept-Language': 'en-US,en;q=0.9' } }); } async function createAuthClient() { return axios_1.default.create({ baseURL: exports.AUTH_BASE_URL, headers: { 'Host': 'auth.tsi.sleeptracker.com', 'Accept': '*/*', 'Content-Type': 'application/json', 'Accept-Encoding': 'gzip', 'Accept-Language': 'en-US,en;q=0.9' } }); } function handleApiError(error) { var _a, _b, _c; if (axios_1.default.isAxiosError(error)) { if ((_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.message) { throw new Error(error.response.data.message); } else if (((_c = error.response) === null || _c === void 0 ? void 0 : _c.status) === 401) { throw new Error('Session expired. Please login again.'); } else { throw new Error('API request failed'); } } throw error instanceof Error ? error : new Error('Failed to connect to SleepTracker API'); }