UNPKG

n8n-nodes-refresh-token-auth

Version:
295 lines 15.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HttpRequestWithRefreshToken = void 0; const n8n_workflow_1 = require("n8n-workflow"); const Description_1 = require("./Description"); const CREDENTIALS_NAME = 'refreshTokenAuth'; function parseJsonParameter(value) { if (typeof value === 'string') { if (!value.trim()) return {}; return JSON.parse(value); } return value; } class HttpRequestWithRefreshToken { constructor() { this.description = { displayName: 'HTTP Request (Refresh Token Auth)', name: 'httpRequestWithRefreshToken', group: ['output'], version: 1, subtitle: '={{$parameter["method"] + ": " + $parameter["url"]}}', description: 'Makes an HTTP request using RefreshTokenAuth credentials with automatic token refresh.', icon: 'file:refresh-token-auth.svg', defaults: { name: 'HTTP Request (Refresh Token Auth)', }, inputs: ['main'], outputs: ['main'], credentials: [ { name: CREDENTIALS_NAME, required: true, }, ], properties: Description_1.mainProperties, }; } async execute() { var _a, _b, _c, _d, _e, _f, _g, _h, _j; const items = this.getInputData(); const returnItems = []; for (let itemIndex = 0; itemIndex < items.length; itemIndex++) { try { const url = this.getNodeParameter('url', itemIndex); const method = this.getNodeParameter('method', itemIndex); if (!url) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'URL is required', { itemIndex }); } if (!url.startsWith('http://') && !url.startsWith('https://')) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Invalid URL: ${url}. URL must start with "http://" or "https://".`, { itemIndex }); } const requestOptions = { method, url, returnFullResponse: true, }; const sendQuery = this.getNodeParameter('sendQuery', itemIndex, false); if (sendQuery) { const specifyQuery = this.getNodeParameter('specifyQuery', itemIndex, 'keypair'); if (specifyQuery === 'keypair') { const queryParameters = this.getNodeParameter('queryParameters.parameters', itemIndex, []); if (queryParameters.length > 0) { requestOptions.qs = {}; for (const param of queryParameters) { if (param.name) { requestOptions.qs[param.name] = param.value; } } } } else if (specifyQuery === 'json') { const jsonQuery = this.getNodeParameter('jsonQuery', itemIndex, ''); requestOptions.qs = parseJsonParameter(jsonQuery); } } const sendHeaders = this.getNodeParameter('sendHeaders', itemIndex, false); if (sendHeaders) { const specifyHeaders = this.getNodeParameter('specifyHeaders', itemIndex, 'keypair'); if (specifyHeaders === 'keypair') { const headerParameters = this.getNodeParameter('headerParameters.parameters', itemIndex, []); if (headerParameters.length > 0) { requestOptions.headers = {}; for (const param of headerParameters) { if (param.name) { requestOptions.headers[param.name.toLowerCase()] = param.value; } } } } else if (specifyHeaders === 'json') { const jsonHeaders = this.getNodeParameter('jsonHeaders', itemIndex, ''); const parsedHeaders = parseJsonParameter(jsonHeaders); requestOptions.headers = {}; for (const [key, value] of Object.entries(parsedHeaders)) { requestOptions.headers[key.toLowerCase()] = value; } } } const sendBody = this.getNodeParameter('sendBody', itemIndex, false); if (sendBody && ['POST', 'PUT', 'PATCH', 'DELETE'].includes(method)) { const contentType = this.getNodeParameter('contentType', itemIndex, 'json'); if (contentType === 'json') { const specifyBody = this.getNodeParameter('specifyBody', itemIndex, 'keypair'); if (specifyBody === 'keypair') { const bodyParameters = this.getNodeParameter('bodyParameters.parameters', itemIndex, []); if (bodyParameters.length > 0) { requestOptions.body = {}; for (const param of bodyParameters) { if (param.name) { requestOptions.body[param.name] = param.value; } } } } else if (specifyBody === 'json') { const jsonBody = this.getNodeParameter('jsonBody', itemIndex, ''); requestOptions.body = parseJsonParameter(jsonBody); } requestOptions.headers = { ...requestOptions.headers, 'content-type': 'application/json', }; } else if (contentType === 'form-urlencoded') { const specifyBody = this.getNodeParameter('specifyBody', itemIndex, 'keypair'); if (specifyBody === 'keypair') { const bodyParameters = this.getNodeParameter('bodyParameters.parameters', itemIndex, []); const formData = {}; for (const param of bodyParameters) { if (param.name) { formData[param.name] = param.value; } } requestOptions.body = new URLSearchParams(formData).toString(); } else if (specifyBody === 'string') { requestOptions.body = this.getNodeParameter('body', itemIndex, ''); } requestOptions.headers = { ...requestOptions.headers, 'content-type': 'application/x-www-form-urlencoded', }; } else if (contentType === 'multipart-form-data') { const bodyParameters = this.getNodeParameter('bodyParameters.parameters', itemIndex, []); const formData = {}; for (const param of bodyParameters) { if (param.name) { if (param.parameterType === 'formBinaryData' && param.inputDataFieldName) { const binaryData = this.helpers.assertBinaryData(itemIndex, param.inputDataFieldName); const itemBinaryData = items[itemIndex].binary[param.inputDataFieldName]; let uploadData; if (itemBinaryData.id) { const stream = await this.helpers.getBinaryStream(itemBinaryData.id); const chunks = []; for await (const chunk of stream) { chunks.push(Buffer.from(chunk)); } uploadData = Buffer.concat(chunks); } else { uploadData = Buffer.from(itemBinaryData.data, 'base64'); } formData[param.name] = { value: uploadData, options: { filename: binaryData.fileName, contentType: binaryData.mimeType, }, }; } else { formData[param.name] = param.value; } } } requestOptions.formData = formData; } else if (contentType === 'raw') { const rawContentType = this.getNodeParameter('rawContentType', itemIndex, 'text/plain'); requestOptions.body = this.getNodeParameter('body', itemIndex, ''); requestOptions.headers = { ...requestOptions.headers, 'content-type': rawContentType }; } else if (contentType === 'binaryData') { const inputDataFieldName = this.getNodeParameter('inputDataFieldName', itemIndex); const itemBinaryData = this.helpers.assertBinaryData(itemIndex, inputDataFieldName); let uploadData; if (itemBinaryData.id) { const stream = await this.helpers.getBinaryStream(itemBinaryData.id); const chunks = []; for await (const chunk of stream) { chunks.push(Buffer.from(chunk)); } uploadData = Buffer.concat(chunks); } else { uploadData = Buffer.from(itemBinaryData.data, 'base64'); } requestOptions.body = uploadData; requestOptions.headers = { ...requestOptions.headers, 'content-type': (_a = itemBinaryData.mimeType) !== null && _a !== void 0 ? _a : 'application/octet-stream', 'content-length': uploadData.length.toString(), }; } } const options = this.getNodeParameter('options', itemIndex, {}); if (options.allowUnauthorizedCerts) { requestOptions.skipSslCertificateValidation = true; } if (options.timeout) { requestOptions.timeout = options.timeout; } if (options.proxy) { requestOptions.proxy = { host: options.proxy, port: 80 }; } const redirect = options.redirect; if (((_b = redirect === null || redirect === void 0 ? void 0 : redirect.redirect) === null || _b === void 0 ? void 0 : _b.followRedirects) === false) { requestOptions.ignoreHttpStatusErrors = true; } const response = await this.helpers.httpRequestWithAuthentication.call(this, CREDENTIALS_NAME, requestOptions); const responseOptions = options.response; const fullResponse = (_d = (_c = responseOptions === null || responseOptions === void 0 ? void 0 : responseOptions.response) === null || _c === void 0 ? void 0 : _c.fullResponse) !== null && _d !== void 0 ? _d : false; const responseFormat = (_f = (_e = responseOptions === null || responseOptions === void 0 ? void 0 : responseOptions.response) === null || _e === void 0 ? void 0 : _e.responseFormat) !== null && _f !== void 0 ? _f : 'autodetect'; const outputPropertyName = (_h = (_g = responseOptions === null || responseOptions === void 0 ? void 0 : responseOptions.response) === null || _g === void 0 ? void 0 : _g.outputPropertyName) !== null && _h !== void 0 ? _h : 'data'; let responseBody; let responseHeaders = {}; let statusCode; let statusMessage; if (typeof response === 'object' && response !== null && 'body' in response) { responseBody = response.body; responseHeaders = (_j = response.headers) !== null && _j !== void 0 ? _j : {}; statusCode = response.statusCode; statusMessage = response.statusMessage; } else { responseBody = response; } if (fullResponse) { returnItems.push({ json: { body: responseBody, headers: responseHeaders, statusCode, statusMessage, }, pairedItem: { item: itemIndex }, }); } else if (responseFormat === 'file' || responseFormat === 'text') { const textValue = typeof responseBody === 'string' ? responseBody : JSON.stringify(responseBody); returnItems.push({ json: { [outputPropertyName]: textValue }, pairedItem: { item: itemIndex }, }); } else { if (Array.isArray(responseBody)) { for (const item of responseBody) { returnItems.push({ json: item, pairedItem: { item: itemIndex }, }); } } else if (typeof responseBody === 'object' && responseBody !== null) { returnItems.push({ json: responseBody, pairedItem: { item: itemIndex }, }); } else { returnItems.push({ json: { data: responseBody }, pairedItem: { item: itemIndex }, }); } } } catch (error) { if (!this.continueOnFail()) { throw error; } returnItems.push({ json: { error: error.message }, pairedItem: { item: itemIndex }, }); } } return [returnItems]; } } exports.HttpRequestWithRefreshToken = HttpRequestWithRefreshToken; //# sourceMappingURL=HttpRequestWithRefreshToken.node.js.map