@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
105 lines • 9.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createOAuthClient = exports.createTokenManager = exports.refreshAccessToken = exports.exchangeCodeForToken = exports.createAuthorizationUrl = void 0;
const constants_1 = require("./constants");
const http_client_1 = require("./http-client");
const storage_1 = require("./storage");
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 || constants_1.DEFAULT_BASE_URL;
return `${baseUrl}/oauth2/authorize?${queryString}`;
};
exports.createAuthorizationUrl = createAuthorizationUrl;
const exchangeCodeForToken = async (httpClient, config, code, codeVerifier) => {
const tokenRequest = Object.assign({ 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;
};
exports.exchangeCodeForToken = exchangeCodeForToken;
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;
};
exports.refreshAccessToken = refreshAccessToken;
const createTokenManager = async (httpClient, config, storage) => {
const getAccessToken = async () => {
const tokens = await storage.getTokens();
return (tokens === null || tokens === void 0 ? void 0 : tokens.access_token) || null;
};
const setTokens = async (tokenResponse) => {
const currentTokens = await storage.getTokens();
await storage.setTokens(Object.assign(Object.assign({}, tokenResponse), { refresh_token: tokenResponse.refresh_token || (currentTokens === null || currentTokens === void 0 ? void 0 : currentTokens.refresh_token) }));
};
const refreshToken = async () => {
const tokens = await storage.getTokens();
if (!(tokens === null || tokens === void 0 ? void 0 : tokens.refresh_token)) {
throw new Error('No refresh token available');
}
const tokenResponse = await (0, exports.refreshAccessToken)(httpClient, config, tokens.refresh_token);
await setTokens(tokenResponse);
return tokenResponse;
};
const clearTokens = async () => {
await storage.clearTokens();
};
return {
getAccessToken,
setTokens,
refreshToken,
clearTokens,
};
};
exports.createTokenManager = createTokenManager;
const createOAuthClient = async (config) => {
const httpClient = config.httpClient || (0, http_client_1.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 || (0, storage_1.createMemoryStorage)();
const tokenManager = await (0, exports.createTokenManager)(httpClient, oauthConfig, storage);
return {
createAuthorizationUrl: (state) => (0, exports.createAuthorizationUrl)(oauthConfig, state),
exchangeCodeForToken: async (code, codeVerifier) => {
const tokenResponse = await (0, exports.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);
},
};
};
exports.createOAuthClient = createOAuthClient;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFRQSwyQ0FBK0M7QUFDL0MsK0NBQTZEO0FBQzdELHVDQUFnRDtBQUV6QyxNQUFNLHNCQUFzQixHQUFHLENBQ3BDLE1BQW1CLEVBQ25CLEtBQWEsRUFDTCxFQUFFO0lBQ1YsTUFBTSxNQUFNLEdBQW1CO1FBQzdCLGFBQWEsRUFBRSxNQUFNO1FBQ3JCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztRQUMzQixLQUFLO1FBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1FBQ25CLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtLQUNsQyxDQUFDO0lBRUYsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7U0FDdkMsR0FBRyxDQUNGLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUNmLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDNUQ7U0FDQSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFYixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLDRCQUFnQixDQUFDO0lBQ3BELE9BQU8sR0FBRyxPQUFPLHFCQUFxQixXQUFXLEVBQUUsQ0FBQztBQUN0RCxDQUFDLENBQUM7QUFyQlcsUUFBQSxzQkFBc0IsMEJBcUJqQztBQUVLLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxFQUN2QyxVQUFzQixFQUN0QixNQUFtQixFQUNuQixJQUFZLEVBQ1osWUFBcUIsRUFDRyxFQUFFO0lBQzFCLE1BQU0sWUFBWSxtQkFDaEIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQzNCLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYSxFQUNuQyxJQUFJLEVBQ0osVUFBVSxFQUFFLG9CQUFvQixF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