UNPKG

@etsoo/appscript

Version:

Applications shared TypeScript framework

244 lines (243 loc) 7.14 kB
import { BaseApi } from "./BaseApi"; import { ActionResult } from "@etsoo/shared"; /** * Authentication API */ export class AuthApi extends BaseApi { /** * Admin support * @param rq Request data * @param payload Payload * @returns Result */ adminSupport(rq, payload) { return this.api.post("Auth/AdminSupport", rq, payload); } /** * API refresh token * @param rq Request data * @param payload Payload * @returns Result */ apiRefreshToken(rq, payload) { const data = { ...rq, timeZone: this.app.getTimeZone() }; return this.api.put("Auth/ApiRefreshToken", data, payload); } /** * Authorization request * @param auth Authorization request data * @param payload Payload */ authRequest(auth, payload) { return this.api.post("Auth/AuthRequest", auth, payload); } /** * Change password * @param oldPassword Ole password * @param password New password * @param payload Payload * @returns Result */ changePassword(oldPassword, password, payload) { const rq = { appId: this.app.settings.appId, deviceId: this.app.deviceId, oldPassword: this.app.encrypt(this.app.hash(oldPassword)), password: this.app.encrypt(this.app.hash(password)) }; return this.api.put("Auth/ChangePassword", rq, payload); } /** * Check user identifier * @param type User identifier type * @param openid Open ID * @param payload Payload * @returns Result */ checkUserIdentifier(type, openid, payload) { const rq = { type, openid: this.app.encrypt(openid), deviceId: this.app.deviceId, region: this.app.region }; return this.api.post("Auth/CheckUserIdentifier", rq, payload); } /** * Exchange token * @param rq Request data * @param payload Payload * @returns Result */ exchangeToken(rq, payload) { const data = { ...rq, timeZone: this.app.getTimeZone() }; return this.api.put("Auth/ExchangeToken", data, payload); } /** * Get auth request * @param deviceId Device ID * @param payload Payload * @param apiHost API host * @returns Result */ getAuthRequest(deviceId, payload, apiHost) { const rq = { region: this.app.region, device: deviceId ?? this.app.deviceId }; return this.api.post(`${apiHost ?? ""}Auth/GetAuthRequest`, rq, payload); } /** * Get log in url * @param deviceId Device ID * @param payload Payload * @param apiHost API host * @returns Result */ getLogInUrl(deviceId, payload, apiHost) { const rq = { region: this.app.region, device: deviceId ?? this.app.deviceId }; return this.api.get(`${apiHost ?? ""}Auth/GetLogInUrl`, rq, payload); } /** * Login * @param rq Request data * @param payload Payload * @param tokenKey Refresh token key * @returns Result */ async login(rq, payload, tokenKey) { // Default values payload ?? (payload = {}); tokenKey ?? (tokenKey = AuthApi.HeaderTokenField); const data = { ...rq, deviceId: this.app.deviceId, region: this.app.region, timeZone: this.app.getTimeZone() }; // Call the API const result = await this.api.post("Auth/Login", data, payload); // Get the refresh token const refreshToken = result?.ok ? this.app.getResponseToken(payload.response, tokenKey) : null; // Return the result return [result, refreshToken]; } /** * Login id check * @param id Check id * @param payload Payload * @returns Result */ loginId(id, payload) { const { deviceId, region } = this.app; id = this.app.encrypt(id); const rq = { id, deviceId, region, timeZone: this.app.getTimeZone() }; return this.api.post("Auth/LoginId", rq, payload); } /** * Refresh token * @param props Props * @returns Result */ async refreshToken(props) { // Destruct const { api = "Auth/RefreshToken", showLoading = false, token, tokenField = AuthApi.HeaderTokenField } = props ?? {}; // Check the token if (!token) { return { ok: false, type: "noData", field: "token", title: this.app.get("noData") }; } // Reqest data const rq = { deviceId: this.app.deviceId, timeZone: this.app.getTimeZone() }; // Payload const payload = { // No loading bar needed to avoid screen flicks showLoading, config: { headers: { [tokenField]: token } }, onError: () => { // Prevent further processing return false; } }; // Call API const result = await this.api.put(api, rq, payload); if (result == null) { return this.api.lastError ? ActionResult.create(this.api.lastError) : { ok: false, type: "unknownError", field: "result", title: this.app.get("unknownError") }; } // Token const refreshToken = this.app.getResponseToken(payload.response, tokenField); // Success return [refreshToken, result]; } /** * Reset password * @param rq Request data * @param payload Payload * @returns Result */ resetPassword(rq, payload) { const data = { ...rq, deviceId: this.app.deviceId, region: this.app.region, timezone: this.app.getTimeZone() }; return this.api.put("Auth/ResetPassword", data, payload); } /** * Signout * @param rq Request data * @param payload Payload * @returns Result */ signout(rq, payload) { return this.api.put("Auth/Signout", rq, payload); } /** * Switch organization * @param rq Request data * @param tokenKey Refresh token key * @param payload Payload */ async switchOrg(rq, payload, tokenKey) { // Default values payload ?? (payload = {}); tokenKey ?? (tokenKey = AuthApi.HeaderTokenField); // Call the API const result = await this.api.put("Auth/SwitchOrg", rq, payload); // Get the refresh token const refreshToken = result?.ok ? this.app.getResponseToken(payload.response, tokenKey) : null; // Return the result return [result, refreshToken]; } } /** * Header token field name */ AuthApi.HeaderTokenField = "Etsoo-Refresh-Token";