@n8n/n8n-nodes-langchain
Version:
74 lines • 3.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CHAT_MODEL_USER_AGENT = void 0;
exports.getDatabricksTokenProvider = getDatabricksTokenProvider;
exports.createDatabricksFetch = createDatabricksFetch;
const ai_utilities_1 = require("@n8n/ai-utilities");
const client_oauth2_1 = require("@n8n/client-oauth2");
const n8n_workflow_1 = require("n8n-workflow");
exports.CHAT_MODEL_USER_AGENT = 'n8n_DatabricksNode';
function getDatabricksTokenProvider(node, credential, egressFilter) {
const tokenUrl = `${credential.host.replace(/\/$/, '')}/oidc/v1/token`;
let cached;
let expiresAt = 0;
const mint = async () => {
try {
const oAuthClient = new client_oauth2_1.ClientOAuth2({
clientId: credential.clientId,
clientSecret: credential.clientSecret,
accessTokenUri: tokenUrl,
scopes: credential.scope?.split(' '),
authentication: credential.authentication,
ssrfBridge: egressFilter,
headers: { 'User-Agent': exports.CHAT_MODEL_USER_AGENT },
});
const token = await oAuthClient.credentials.getToken();
const expiresIn = Number(token.data.expires_in);
expiresAt = Number.isNaN(expiresIn) ? 0 : Date.now() + (expiresIn - 60) * 1000;
return token.accessToken;
}
catch (error) {
cached = undefined;
expiresAt = 0;
const message = error instanceof Error ? error.message : undefined;
throw new n8n_workflow_1.NodeOperationError(node, 'Failed to retrieve Databricks access token', {
description: message && credential.clientSecret
? message.replaceAll(credential.clientSecret, '***')
: message,
});
}
};
return async () => {
if (!cached || Date.now() >= expiresAt) {
expiresAt = Infinity;
cached = mint();
}
return await cached;
};
}
function createDatabricksFetch(getToken, egressFilter) {
return async (input, init) => {
const headers = new Headers(init?.headers ?? (input instanceof Request ? input.headers : undefined));
headers.set('authorization', `Bearer ${await getToken()}`);
headers.set('user-agent', exports.CHAT_MODEL_USER_AGENT);
const requestInit = { ...init };
if (input instanceof Request) {
requestInit.method ??= input.method;
requestInit.signal ??= input.signal;
if (requestInit.body === undefined && input.body) {
requestInit.body = await input.arrayBuffer();
}
}
const startUrl = input instanceof Request ? input.url : input;
return await (0, ai_utilities_1.fetchFollowingRedirects)(fetch, startUrl, { ...requestInit, headers }, {
onBeforeHop: async (hopUrl) => {
if (egressFilter) {
const result = await egressFilter.validateUrl(hopUrl);
if (!result.ok)
throw result.error;
}
},
});
};
}
//# sourceMappingURL=token-provider.js.map