UNPKG

@proofkit/fmdapi

Version:
80 lines (79 loc) 3.11 kB
var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); import { FileMakerError } from "../client-types.js"; import { memoryStore } from "../tokenStore/memory.js"; import { BaseFetchAdapter } from "./fetch-base.js"; class FetchAdapter extends BaseFetchAdapter { constructor(args) { var _a; super({ ...args, refreshToken: true }); __publicField(this, "username"); __publicField(this, "password"); __publicField(this, "tokenStore"); __publicField(this, "getTokenKey"); /** * Gets a FileMaker Data API token for authentication. * * This token is **NOT** guaranteed to be valid, since it expires 15 minutes after the last use. Pass `refresh=true` to forcibly get a fresh token * * @param args.refresh - If true, forces getting a new token instead of using cached token * @internal This method is intended for internal use, you should not need to use it in most cases. */ __publicField(this, "getToken", async (args) => { const { refresh = false } = args ?? {}; let token = null; if (!refresh) { token = await this.tokenStore.getToken(this.getTokenKey()); } if (!token) { const res = await fetch(`${this.baseUrl}/sessions`, { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Basic ${Buffer.from( `${this.username}:${this.password}` ).toString("base64")}` } }); if (!res.ok) { const data = await res.json(); throw new FileMakerError( data.messages[0].code, data.messages[0].message ); } token = res.headers.get("X-FM-Data-Access-Token"); if (!token) throw new Error("Could not get token"); this.tokenStore.setToken(this.getTokenKey(), token); } return token; }); __publicField(this, "disconnect", async () => { const token = await this.tokenStore.getToken(this.getTokenKey()); if (token) { await this.request({ url: `/sessions/${token}`, method: "DELETE", fetchOptions: { headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" } } }); this.tokenStore.clearToken(this.getTokenKey()); } }); this.username = args.auth.username; this.password = args.auth.password; this.tokenStore = args.tokenStore ?? memoryStore(); this.getTokenKey = ((_a = args.tokenStore) == null ? void 0 : _a.getKey) ?? (() => `${args.server}/${args.db}`); if (this.username === "") throw new Error("Username is required"); if (this.password === "") throw new Error("Password is required"); } } export { FetchAdapter }; //# sourceMappingURL=fetch.js.map