mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 10:02:05 +00:00
feat(PostBin Node): Add PostBin node (#3236)
* 🚧 Initial progress on PostBin node. * ✨ Implemented Bin and Request operations for PostBin node. * 🚧 Reworked the node in the declarative way. * 🚧 PosBin node refactoring after reworking it. * ✨ Implemented Bin id parsing in PostBin node. Done some final refactoring and documentation. * ⚡ Improvements * ⚡ Add comments * 👌Updating the PostBin node based on the product review * 💄Updating PostBin node Bin ID validation logic * ⚡ Small improvements * ⚡ Transform the bin requests and add additional properties Co-authored-by: ricardo <ricardoespinoza105@gmail.com> Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com>
This commit is contained in:
committed by
GitHub
parent
5f3bed3d4e
commit
06c407def8
113
packages/nodes-base/nodes/PostBin/GenericFunctions.ts
Normal file
113
packages/nodes-base/nodes/PostBin/GenericFunctions.ts
Normal file
@@ -0,0 +1,113 @@
|
||||
import {
|
||||
IExecuteSingleFunctions,
|
||||
IHttpRequestOptions,
|
||||
IN8nHttpFullResponse,
|
||||
INodeExecutionData,
|
||||
NodeApiError,
|
||||
} from 'n8n-workflow';
|
||||
|
||||
// Regular expressions used to extract binId from parameter value
|
||||
const BIN_ID_REGEX = /\b\d{13}-\d{13}\b/g;
|
||||
|
||||
/**
|
||||
* Creates correctly-formatted PostBin API URL based on the entered binId.
|
||||
* This function makes sure binId is in the expected format by parsing it
|
||||
* from current node parameter value.
|
||||
*
|
||||
* @export
|
||||
* @param {IExecuteSingleFunctions} this
|
||||
* @param {IHttpRequestOptions} requestOptions
|
||||
* @returns {Promise<IHttpRequestOptions>} requestOptions
|
||||
*/
|
||||
export async function buildBinAPIURL(this: IExecuteSingleFunctions, requestOptions: IHttpRequestOptions): Promise<IHttpRequestOptions> {
|
||||
const binId = parseBinId(this);
|
||||
// Assemble the PostBin API URL and put it back to requestOptions
|
||||
requestOptions.url = `/developers/postbin/api/bin/${binId}`;
|
||||
|
||||
return requestOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates correctly-formatted PostBin Bin test URL based on the entered binId.
|
||||
* This function makes sure binId is in the expected format by parsing it
|
||||
* from current node parameter value.
|
||||
*
|
||||
* @export
|
||||
* @param {IExecuteSingleFunctions} this
|
||||
* @param {IHttpRequestOptions} requestOptions
|
||||
* @returns {Promise<IHttpRequestOptions>} requestOptions
|
||||
*/
|
||||
export async function buildBinTestURL(this: IExecuteSingleFunctions, requestOptions: IHttpRequestOptions): Promise<IHttpRequestOptions> {
|
||||
const binId = parseBinId(this);
|
||||
|
||||
// Assemble the PostBin API URL and put it back to requestOptions
|
||||
requestOptions.url = `/developers/postbin/${binId}`;
|
||||
return requestOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates correctly-formatted PostBin API URL based on the entered binId and reqId.
|
||||
* This function makes sure binId is in the expected format by parsing it
|
||||
* from current node parameter value.
|
||||
*
|
||||
* @export
|
||||
* @param {IExecuteSingleFunctions} this
|
||||
* @param {IHttpRequestOptions} requestOptions
|
||||
* @returns {Promise<IHttpRequestOptions>} requestOptions
|
||||
*/
|
||||
export async function buildRequestURL(this: IExecuteSingleFunctions, requestOptions: IHttpRequestOptions): Promise<IHttpRequestOptions> {
|
||||
const reqId = this.getNodeParameter('requestId', 'shift') as string;
|
||||
const binId = parseBinId(this);
|
||||
|
||||
requestOptions.url = `/developers/postbin/api/bin/${binId}/req/${reqId}`;
|
||||
return requestOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts the PostBin Bin Id from the specified string.
|
||||
* This method should be able to extract bin Id from the
|
||||
* PostBin URL or from the string in the following format:
|
||||
* `Bin '<binId>'.`
|
||||
*
|
||||
* @param {IExecuteSingleFunctions} this
|
||||
* @param {IHttpRequestOptions} requestOptions
|
||||
* @returns {Promise<IHttpRequestOptions>} requestOptions
|
||||
*/
|
||||
function parseBinId(context: IExecuteSingleFunctions) {
|
||||
const binId = context.getNodeParameter('binId') as string;
|
||||
// Test if the Bin id is in the expected format
|
||||
const idMatch = BIN_ID_REGEX.exec(binId);
|
||||
|
||||
// Return what is matched
|
||||
if(idMatch) {
|
||||
return idMatch[0];
|
||||
}
|
||||
|
||||
// If it's not recognized, error out
|
||||
throw new NodeApiError(context.getNode(), {}, {
|
||||
message: 'Bin ID format is not valid',
|
||||
description: 'Please check the provided Bin ID and try again.',
|
||||
parseXml: false,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the bin response data and adds additional properties
|
||||
*
|
||||
* @param {IExecuteSingleFunctions} this
|
||||
* @param {INodeExecutionData} items[]
|
||||
* @param {IN8nHttpFullResponse} response
|
||||
* @returns {Promise<INodeExecutionData[]>}
|
||||
*/
|
||||
export async function transformBinReponse(this: IExecuteSingleFunctions, items: INodeExecutionData[], response: IN8nHttpFullResponse): Promise<INodeExecutionData[]> {
|
||||
items.forEach(item => item.json = {
|
||||
'binId': item.json.binId,
|
||||
'nowTimestamp': item.json.now,
|
||||
'nowIso': new Date(item.json.now as string).toISOString(),
|
||||
'expiresTimestamp': item.json.expires,
|
||||
'expiresIso': new Date(item.json.expires as string).toISOString(),
|
||||
'requestUrl': 'https://www.toptal.com/developers/postbin/' + item.json.binId,
|
||||
'viewUrl': 'https://www.toptal.com/developers/postbin/b/' + item.json.binId,
|
||||
});
|
||||
return items;
|
||||
}
|
||||
Reference in New Issue
Block a user