pull:初次提交
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
import {
|
||||
type IExecuteFunctions,
|
||||
type INodeExecutionData,
|
||||
type INodeProperties,
|
||||
NodeApiError,
|
||||
} from 'n8n-workflow';
|
||||
|
||||
import { ERROR_MESSAGES, OPERATION_TIMEOUT } from '../../constants';
|
||||
import {
|
||||
validateRequiredStringField,
|
||||
validateSessionAndWindowId,
|
||||
validateAirtopApiResponse,
|
||||
} from '../../GenericFunctions';
|
||||
import { apiRequest } from '../../transport';
|
||||
import type { IAirtopResponse } from '../../transport/types';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Form Data',
|
||||
name: 'formData',
|
||||
type: 'string',
|
||||
typeOptions: {
|
||||
rows: 4,
|
||||
},
|
||||
required: true,
|
||||
default: '',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['interaction'],
|
||||
operation: ['fill'],
|
||||
},
|
||||
},
|
||||
description: 'The information to fill into the form written in natural language',
|
||||
placeholder: 'e.g. "Name: John Doe, Email: john.doe@example.com"',
|
||||
},
|
||||
];
|
||||
|
||||
export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
index: number,
|
||||
timeout = OPERATION_TIMEOUT,
|
||||
): Promise<INodeExecutionData[]> {
|
||||
const { sessionId, windowId } = validateSessionAndWindowId.call(this, index);
|
||||
const formData = validateRequiredStringField.call(this, index, 'formData', 'Form Data');
|
||||
|
||||
// run automation
|
||||
const asyncAutomationResponse = await apiRequest.call(
|
||||
this,
|
||||
'POST',
|
||||
`/async/sessions/${sessionId}/windows/${windowId}/execute-automation`,
|
||||
{
|
||||
automationId: 'auto',
|
||||
parameters: {
|
||||
customData: formData,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
const reqId = asyncAutomationResponse.requestId as string;
|
||||
|
||||
// Poll status every second until it's completed or timeout is reached
|
||||
const startTime = Date.now();
|
||||
let automationStatusResponse: IAirtopResponse;
|
||||
|
||||
while (true) {
|
||||
automationStatusResponse = await apiRequest.call(this, 'GET', `/requests/${reqId}/status`);
|
||||
const status = automationStatusResponse?.status ?? '';
|
||||
|
||||
validateAirtopApiResponse(this.getNode(), automationStatusResponse);
|
||||
|
||||
if (status === 'completed' || status === 'error') {
|
||||
break;
|
||||
}
|
||||
|
||||
const elapsedTime = Date.now() - startTime;
|
||||
if (elapsedTime >= timeout) {
|
||||
throw new NodeApiError(this.getNode(), {
|
||||
message: ERROR_MESSAGES.TIMEOUT_REACHED,
|
||||
code: 500,
|
||||
});
|
||||
}
|
||||
|
||||
// Wait one second
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
}
|
||||
|
||||
return this.helpers.returnJsonArray({ sessionId, windowId, ...automationStatusResponse });
|
||||
}
|
||||
Reference in New Issue
Block a user