@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
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVoRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUNwQyxNQUFtQixFQUNuQixLQUFhLEVBQ0wsRUFBRTtJQUNWLE1BQU0sTUFBTSxHQUFtQjtRQUM3QixhQUFhLEVBQUUsTUFBTTtRQUNyQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsS0FBSztRQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7S0FDbEMsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ3ZDLEdBQUcsQ0FDRixDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FDZixHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQzVEO1NBQ0EsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxnQkFBZ0IsQ0FBQztJQUNwRCxPQUFPLEdBQUcsT0FBTyxxQkFBcUIsV0FBVyxFQUFFLENBQUM7QUFDdEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxFQUN2QyxVQUFzQixFQUN0QixNQUFtQixFQUNuQixJQUFZLEVBQ1osWUFBcUIsRUFDRyxFQUFFO0lBQzFCLE1BQU0sWUFBWSxHQUFpQjtRQUNqQyxTQUFT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