@lusc/fastmail-masked-email
Version:
A library for creating, deleting, and updating Fastmail masked emails
41 lines • 1.41 kB
JavaScript
import { API_HOSTNAME, JMAP } from './constants.js';
import { httpRequest } from './http.js';
import { sessionResponseSchema } from './schemas.js';
const sessionCache = new Map();
// eslint-disable-next-line n/prefer-global/process
const env = typeof process === 'undefined' ? {} : process.env;
export async function getSession(apiToken, hostname) {
hostname ??= env['JMAP_HOSTNAME'] ?? API_HOSTNAME;
apiToken ??= env['JMAP_TOKEN'];
if (!apiToken) {
throw new Error('No api token provided and JMAP_TOKEN environment variable is not set. Please provide a token.');
}
const cached = sessionCache.get(apiToken)?.get(hostname);
if (cached) {
return cached;
}
const authUrl = `https://${hostname}/jmap/session`;
const headers = {
Authorization: `Bearer ${apiToken}`,
};
const result = await httpRequest({
url: authUrl,
headers,
schema: sessionResponseSchema,
action: 'getSession',
});
const accountId = result.primaryAccounts[JMAP.CORE];
const { apiUrl } = result;
const session = {
accountId,
apiUrl,
apiToken,
capabilities: Object.keys(result.capabilities),
};
if (!sessionCache.has(apiToken)) {
sessionCache.set(apiToken, new Map());
}
sessionCache.get(apiToken).set(hostname, session);
return session;
}
//# sourceMappingURL=session.js.map