UNPKG

@lineai/bluebeam-api

Version:

Your unofficial library for Bluebeam API for human and AI developers. Provides TypeScript support, entity classes, and developer-friendly features. Perfect for AI coders, construction professionals, and document management tasks. Includes comprehensive JS

107 lines 8.96 kB
import { DEFAULT_BASE_URL } from './constants'; import { createHttpClient } from './http-client'; import { createMemoryStorage } from './storage'; export const createAuthorizationUrl = (config, state) => { const params = { response_type: 'code', client_id: config.client_id, state, scope: config.scope, redirect_uri: config.redirect_uri, }; const queryString = Object.entries(params) .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`) .join('&'); const baseUrl = config.base_url || DEFAULT_BASE_URL; return `${baseUrl}/oauth2/authorize?${queryString}`; }; export const exchangeCodeForToken = async (httpClient, config, code, codeVerifier) => { const tokenRequest = { client_id: config.client_id, client_secret: config.client_secret, code, grant_type: 'authorization_code', redirect_uri: config.redirect_uri, ...(codeVerifier && { code_verifier: codeVerifier }), }; const response = await httpClient.post('/oauth2/token', tokenRequest, true // isFormData ); return response.data; }; export const refreshAccessToken = async (httpClient, config, refreshToken) => { const tokenRequest = { client_id: config.client_id, client_secret: config.client_secret, grant_type: 'refresh_token', refresh_token: refreshToken, redirect_uri: config.redirect_uri, }; const response = await httpClient.post('/oauth2/token', tokenRequest, true // isFormData ); return response.data; }; export const createTokenManager = async (httpClient, config, storage) => { const getAccessToken = async () => { const tokens = await storage.getTokens(); return tokens?.access_token || null; }; const setTokens = async (tokenResponse) => { const currentTokens = await storage.getTokens(); await storage.setTokens({ ...tokenResponse, refresh_token: tokenResponse.refresh_token || currentTokens?.refresh_token, }); }; const refreshToken = async () => { const tokens = await storage.getTokens(); if (!tokens?.refresh_token) { throw new Error('No refresh token available'); } const tokenResponse = await refreshAccessToken(httpClient, config, tokens.refresh_token); await setTokens(tokenResponse); return tokenResponse; }; const clearTokens = async () => { await storage.clearTokens(); }; return { getAccessToken, setTokens, refreshToken, clearTokens, }; }; export const createOAuthClient = async (config) => { const httpClient = config.httpClient || createHttpClient({ client_id: config.client_id, base_url: config.base_url, }); const oauthConfig = { client_id: config.client_id, client_secret: config.client_secret, redirect_uri: config.redirect_uri, scope: config.scope, base_url: config.base_url, }; const storage = config.tokenStorage || createMemoryStorage(); const tokenManager = await createTokenManager(httpClient, oauthConfig, storage); return { createAuthorizationUrl: (state) => createAuthorizationUrl(oauthConfig, state), exchangeCodeForToken: async (code, codeVerifier) => { const tokenResponse = await exchangeCodeForToken(httpClient, oauthConfig, code, codeVerifier); await tokenManager.setTokens(tokenResponse); return tokenResponse; }, refreshAccessToken: async () => { return tokenManager.refreshToken(); }, getAccessToken: async () => tokenManager.getAccessToken(), clearTokens: async () => { await tokenManager.clearTokens(); }, setTokens: async (tokenResponse) => { await tokenManager.setTokens(tokenResponse); }, }; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVoRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUNwQyxNQUFtQixFQUNuQixLQUFhLEVBQ0wsRUFBRTtJQUNWLE1BQU0sTUFBTSxHQUFtQjtRQUM3QixhQUFhLEVBQUUsTUFBTTtRQUNyQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsS0FBSztRQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7S0FDbEMsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ3ZDLEdBQUcsQ0FDRixDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FDZixHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQzVEO1NBQ0EsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxnQkFBZ0IsQ0FBQztJQUNwRCxPQUFPLEdBQUcsT0FBTyxxQkFBcUIsV0FBVyxFQUFFLENBQUM7QUFDdEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxFQUN2QyxVQUFzQixFQUN0QixNQUFtQixFQUNuQixJQUFZLEVBQ1osWUFBcUIsRUFDRyxFQUFFO0lBQzFCLE1BQU0sWUFBWSxHQUFpQjtRQUNqQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO1FBQ25DLElBQUk7UUFDSixVQUFVLEVBQUUsb0JBQW9CO1FBQ2hDLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtRQUNqQyxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxDQUFDO0tBQ3JELENBQUM7SUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQ3BDLGVBQWUsRUFDZixZQUFZLEVBQ1osSUFBSSxDQUFDLGFBQWE7S0FDbkIsQ0FBQztJQUVGLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztBQUN2QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQ3JDLFVBQXNCLEVBQ3RCLE1BQW1CLEVBQ25CLFlBQW9CLEVBQ0ksRUFBRTtJQUMxQixNQUFNLFlBQVksR0FBaUI7UUFDakMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtRQUNuQyxVQUFVLEVBQUUsZUFBZTtRQUMzQixhQUFhLEVBQUUsWUFBWTtRQUMzQixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7S0FDbEMsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FDcEMsZUFBZSxFQUNmLFlBQVksRUFDWixJQUFJLENBQUMsYUFBYTtLQUNuQixDQUFDO0lBRUYsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQVNGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEtBQUssRUFDckMsVUFBc0IsRUFDdEIsTUFBbUIsRUFDbkIsT0FBcUIsRUFDRSxFQUFFO0lBQ3pCLE1BQU0sY0FBYyxHQUFHLEtBQUssSUFBNEIsRUFBRTtRQUN4RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN6QyxPQUFPLE1BQU0sRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDO0lBQ3RDLENBQUMsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLEtBQUssRUFBRSxhQUE0QixFQUFpQixFQUFFO1FBQ3RFLE1BQU0sYUFBYSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2hELE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUN0QixHQUFHLGFBQWE7WUFDaEIsYUFBYSxFQUFFLGFBQWEsQ0FBQyxhQUFhLElBQUksYUFBYSxFQUFFLGFBQWE7U0FDM0UsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBR0YsTUFBTSxZQUFZLEdBQUcsS0FBSyxJQUE0QixFQUFFO1FBQ3RELE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztTQUMvQztRQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sa0JBQWtCLENBQzVDLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxDQUFDLGFBQWEsQ0FDckIsQ0FBQztRQUVGLE1BQU0sU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLEtBQUssSUFBbUIsRUFBRTtRQUM1QyxNQUFNLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QixDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsY0FBYztRQUNkLFNBQVM7UUFDVCxZQUFZO1FBQ1osV0FBVztLQUNaLENBQUM7QUFDSixDQUFDLENBQUM7QUFZRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEVBQUUsTUFBeUIsRUFBRSxFQUFFO0lBQ25FLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksZ0JBQWdCLENBQUM7UUFDdkQsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtLQUMxQixDQUFDLENBQUM7SUFFSCxNQUFNLFdBQVcsR0FBZ0I7UUFDL0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtRQUNuQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7UUFDakMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1FBQ25CLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtLQUMxQixDQUFDO0lBRUYsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksSUFBSSxtQkFBbUIsRUFBRSxDQUFDO0lBQzdELE1BQU0sWUFBWSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVoRixPQUFPO1FBQ0wsc0JBQXNCLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUN4QyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO1FBRTVDLG9CQUFvQixFQUFFLEtBQUssRUFBRSxJQUFZLEVBQUUsWUFBcUIsRUFBRSxFQUFFO1lBQ2xFLE1BQU0sYUFBYSxHQUFHLE1BQU0sb0JBQW9CLENBQzlDLFVBQVUsRUFDVixXQUFXLEVBQ1gsSUFBSSxFQUNKLFlBQVksQ0FDYixDQUFDO1lBQ0YsTUFBTSxZQUFZLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxrQkFBa0IsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM3QixPQUFPLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBRUQsY0FBYyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRTtRQUd6RCxXQUFXLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdEIsTUFBTSxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUVELFNBQVMsRUFBRSxLQUFLLEVBQUUsYUFBNEIsRUFBRSxFQUFFO1lBQ2hELE1BQU0sWUFBWSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5QyxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9