n8n-nodes-befroosh 0.4.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -1
- package/dist/lib/offsetParser.d.ts +1 -0
- package/dist/lib/offsetParser.js +17 -0
- package/dist/lib/offsetParser.js.map +1 -0
- package/dist/nodes/BefrooshAssignAction/BefrooshAssignAction.node.js +19 -6
- package/dist/nodes/BefrooshAssignAction/BefrooshAssignAction.node.js.map +1 -1
- package/dist/nodes/BefrooshStatus/BefrooshStatus.node.d.ts +5 -0
- package/dist/nodes/BefrooshStatus/BefrooshStatus.node.js +79 -0
- package/dist/nodes/BefrooshStatus/BefrooshStatus.node.js.map +1 -0
- package/dist/nodes/BefrooshStatus/befroosh.svg +1 -0
- package/dist/nodes/BefrooshWait/BefrooshWait.node.d.ts +5 -0
- package/dist/nodes/BefrooshWait/BefrooshWait.node.js +199 -0
- package/dist/nodes/BefrooshWait/BefrooshWait.node.js.map +1 -0
- package/dist/nodes/BefrooshWait/befroosh.svg +1 -0
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -19,7 +19,10 @@ apps/n8n-nodes/
|
|
|
19
19
|
├── nodes/
|
|
20
20
|
│ ├── BefrooshSms/
|
|
21
21
|
│ ├── BefrooshAnalyticsTrigger/ # webhook trigger (verifies + emits events)
|
|
22
|
-
│
|
|
22
|
+
│ ├── BefrooshReplay/ # schedule/cancel/status replay calls
|
|
23
|
+
│ ├── BefrooshAssignAction/ # create + assign an admin task
|
|
24
|
+
│ ├── BefrooshWait/ # pause on an offset schedule
|
|
25
|
+
│ └── BefrooshStatus/ # route by user status (10 outputs)
|
|
23
26
|
├── scripts/copy-icons.mjs # copies .svg/.png into dist after tsc
|
|
24
27
|
├── tsconfig.json
|
|
25
28
|
└── package.json # the "n8n" field registers nodes + credentials
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function parseOffsetMs(input: string): number;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseOffsetMs = parseOffsetMs;
|
|
4
|
+
// Same offset-string format as apps/core's partner-api/offset.util.ts, reimplemented
|
|
5
|
+
// here because this package must stay self-contained (CLAUDE.md §12) and cannot import
|
|
6
|
+
// across the apps/core workspace boundary.
|
|
7
|
+
function parseOffsetMs(input) {
|
|
8
|
+
const s = (input !== null && input !== void 0 ? input : '').trim();
|
|
9
|
+
const m = s.match(/^(?:(\d+)d)?(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$/);
|
|
10
|
+
if (!s || !m || (!m[1] && !m[2] && !m[3] && !m[4])) {
|
|
11
|
+
throw new Error(`Invalid offset "${input}"`);
|
|
12
|
+
}
|
|
13
|
+
const [, d, h, min, sec] = m;
|
|
14
|
+
return ((Number(d || 0) * 86400 + Number(h || 0) * 3600 + Number(min || 0) * 60 + Number(sec || 0)) *
|
|
15
|
+
1000);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=offsetParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offsetParser.js","sourceRoot":"","sources":["../../lib/offsetParser.ts"],"names":[],"mappings":";;AAGA,sCAWC;AAdD,qFAAqF;AACrF,uFAAuF;AACvF,2CAA2C;AAC3C,SAAgB,aAAa,CAAC,KAAa;IACzC,MAAM,CAAC,GAAG,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,GAAG,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,CACL,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC3F,IAAI,CACL,CAAC;AACJ,CAAC"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BefrooshAssignAction = void 0;
|
|
4
4
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
5
|
const eventDefaults_1 = require("../../lib/eventDefaults");
|
|
6
|
+
const offsetParser_1 = require("../../lib/offsetParser");
|
|
6
7
|
class BefrooshAssignAction {
|
|
7
8
|
constructor() {
|
|
8
9
|
this.description = {
|
|
@@ -59,11 +60,15 @@ class BefrooshAssignAction {
|
|
|
59
60
|
default: '',
|
|
60
61
|
},
|
|
61
62
|
{
|
|
62
|
-
displayName: 'Action Date',
|
|
63
|
+
displayName: 'Action Date Offset',
|
|
63
64
|
name: 'actionDate',
|
|
64
|
-
type: '
|
|
65
|
+
type: 'string',
|
|
65
66
|
default: '',
|
|
66
|
-
|
|
67
|
+
placeholder: '1d',
|
|
68
|
+
description: 'When the task is due, as an offset from execution time (e.g. 1d, 12h, 30m, 45s, ' +
|
|
69
|
+
"combos like 4d5h) — same format as Befroosh Replay's schedule. Unlike a fixed " +
|
|
70
|
+
'calendar date, this is recomputed on every execution instead of applying the same ' +
|
|
71
|
+
'literal date every time. Defaults to now if empty.',
|
|
67
72
|
},
|
|
68
73
|
{
|
|
69
74
|
displayName: 'Status',
|
|
@@ -145,9 +150,17 @@ class BefrooshAssignAction {
|
|
|
145
150
|
const description = this.getNodeParameter('description', i) || '';
|
|
146
151
|
if (description)
|
|
147
152
|
body.description = description;
|
|
148
|
-
const
|
|
149
|
-
if (
|
|
150
|
-
|
|
153
|
+
const actionDateOffset = this.getNodeParameter('actionDate', i).trim();
|
|
154
|
+
if (actionDateOffset) {
|
|
155
|
+
let offsetMs;
|
|
156
|
+
try {
|
|
157
|
+
offsetMs = (0, offsetParser_1.parseOffsetMs)(actionDateOffset);
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), err.message, { itemIndex: i });
|
|
161
|
+
}
|
|
162
|
+
body.actionDate = new Date(Date.now() + offsetMs).toISOString();
|
|
163
|
+
}
|
|
151
164
|
if (mode === 'username') {
|
|
152
165
|
body.username = this.getNodeParameter('username', i).trim();
|
|
153
166
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BefrooshAssignAction.node.js","sourceRoot":"","sources":["../../../nodes/BefrooshAssignAction/BefrooshAssignAction.node.ts"],"names":[],"mappings":";;;AAAA,+CAUsB;AACtB,2DAA4D;
|
|
1
|
+
{"version":3,"file":"BefrooshAssignAction.node.js","sourceRoot":"","sources":["../../../nodes/BefrooshAssignAction/BefrooshAssignAction.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
|
|
2
|
+
export declare class BefrooshStatus implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
5
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BefrooshStatus = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const eventDefaults_1 = require("../../lib/eventDefaults");
|
|
6
|
+
// Mirrors `UserStatusEnum` in `packages/entities/src/users/user.enum.ts` on the backend.
|
|
7
|
+
// Not imported from there — this package is self-contained/published (CLAUDE.md §10) — so
|
|
8
|
+
// keep this list in sync by hand if the backend enum ever changes.
|
|
9
|
+
const STATUSES = [
|
|
10
|
+
{ name: 'Lost', value: 'lost' },
|
|
11
|
+
{ name: 'Inactive', value: 'inactive' },
|
|
12
|
+
{ name: 'Removed', value: 'removed' },
|
|
13
|
+
{ name: 'New', value: 'new' },
|
|
14
|
+
{ name: 'Onboarding', value: 'onboarding' },
|
|
15
|
+
{ name: 'Needed', value: 'needed' },
|
|
16
|
+
{ name: 'Semi Active', value: 'semiActive' },
|
|
17
|
+
{ name: 'Active', value: 'active' },
|
|
18
|
+
{ name: 'Key User', value: 'keyUser' },
|
|
19
|
+
];
|
|
20
|
+
// Trailing bucket for a status that doesn't match any known value (empty, stale node
|
|
21
|
+
// version, or a future backend status this node hasn't been updated for) — every item
|
|
22
|
+
// still reaches exactly one output, never silently dropped.
|
|
23
|
+
const OTHER_OUTPUT_INDEX = STATUSES.length;
|
|
24
|
+
const OTHER_OUTPUT_NAME = 'Other';
|
|
25
|
+
class BefrooshStatus {
|
|
26
|
+
constructor() {
|
|
27
|
+
this.description = {
|
|
28
|
+
displayName: 'Befroosh Status',
|
|
29
|
+
name: 'befrooshStatus',
|
|
30
|
+
icon: 'file:befroosh.svg',
|
|
31
|
+
group: ['transform'],
|
|
32
|
+
version: 1,
|
|
33
|
+
description: "Route items by the user's status onto a separate output branch per status",
|
|
34
|
+
defaults: { name: 'Befroosh Status' },
|
|
35
|
+
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
36
|
+
outputs: STATUSES.map(() => n8n_workflow_1.NodeConnectionTypes.Main).concat(n8n_workflow_1.NodeConnectionTypes.Main),
|
|
37
|
+
outputNames: [...STATUSES.map((s) => s.name), OTHER_OUTPUT_NAME],
|
|
38
|
+
properties: [
|
|
39
|
+
{
|
|
40
|
+
displayName: 'Status',
|
|
41
|
+
name: 'status',
|
|
42
|
+
type: 'string',
|
|
43
|
+
default: `={{ $json.context?.user?.status ?? ${eventDefaults_1.TRIGGER_ITEM_JSON}.context?.user?.status ?? '' }}`,
|
|
44
|
+
required: true,
|
|
45
|
+
description: "The status value to route on. Defaults to the acting user's status from the " +
|
|
46
|
+
'webhook context, resolved regardless of how many nodes sit in between — same ' +
|
|
47
|
+
"fallback pattern as Befroosh Assign Action's User / Lead ID.",
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
async execute() {
|
|
53
|
+
const items = this.getInputData();
|
|
54
|
+
const outputs = Array.from({ length: STATUSES.length + 1 }, () => []);
|
|
55
|
+
for (let i = 0; i < items.length; i++) {
|
|
56
|
+
try {
|
|
57
|
+
const status = (this.getNodeParameter('status', i) || '').trim();
|
|
58
|
+
const index = STATUSES.findIndex((s) => s.value === status);
|
|
59
|
+
outputs[index === -1 ? OTHER_OUTPUT_INDEX : index].push({
|
|
60
|
+
json: items[i].json,
|
|
61
|
+
pairedItem: { item: i },
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (this.continueOnFail()) {
|
|
66
|
+
outputs[OTHER_OUTPUT_INDEX].push({
|
|
67
|
+
json: { ...items[i].json, error: error.message },
|
|
68
|
+
pairedItem: { item: i },
|
|
69
|
+
});
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return outputs;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.BefrooshStatus = BefrooshStatus;
|
|
79
|
+
//# sourceMappingURL=BefrooshStatus.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BefrooshStatus.node.js","sourceRoot":"","sources":["../../../nodes/BefrooshStatus/BefrooshStatus.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><rect width="24" height="24" rx="5" fill="#6366f1"/><path d="M7 12a5 5 0 1 1 1.6 3.7" fill="none" stroke="#fff" stroke-width="2.1" stroke-linecap="round"/><path d="M7 8.5V12h3.5" fill="none" stroke="#fff" stroke-width="2.1" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BefrooshWait = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const eventDefaults_1 = require("../../lib/eventDefaults");
|
|
6
|
+
const offsetParser_1 = require("../../lib/offsetParser");
|
|
7
|
+
/**
|
|
8
|
+
* Thrown by fetchSnapshot() on any non-2xx snapshot response. Carries the parsed
|
|
9
|
+
* response body's `code` field (e.g. ANALYTICS_SNAPSHOT_ENTITY_NOTFOUND) so callers
|
|
10
|
+
* can distinguish a "this entity is gone right now" soft failure from a genuine
|
|
11
|
+
* configuration error, without re-parsing the error message string.
|
|
12
|
+
*/
|
|
13
|
+
class SnapshotApiError extends n8n_workflow_1.NodeApiError {
|
|
14
|
+
constructor(node, errorResponse, options, code) {
|
|
15
|
+
super(node, errorResponse, options);
|
|
16
|
+
this.code = code;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async function fetchSnapshot(ctx, baseUrl, apiKey, eventId) {
|
|
20
|
+
var _a;
|
|
21
|
+
const apiRes = (await ctx.helpers.httpRequest({
|
|
22
|
+
method: 'POST',
|
|
23
|
+
url: `${baseUrl}/analytics/snapshot`,
|
|
24
|
+
headers: { Authorization: `Bearer ${apiKey}`, Accept: 'application/json' },
|
|
25
|
+
body: { eventId },
|
|
26
|
+
json: true,
|
|
27
|
+
returnFullResponse: true,
|
|
28
|
+
ignoreHttpStatusErrors: true,
|
|
29
|
+
}));
|
|
30
|
+
if (apiRes.statusCode >= 400) {
|
|
31
|
+
const b = apiRes.body;
|
|
32
|
+
const code = (b && b.code) || `HTTP_${apiRes.statusCode}`;
|
|
33
|
+
throw new SnapshotApiError(ctx.getNode(), { statusCode: apiRes.statusCode, body: apiRes.body }, {
|
|
34
|
+
httpCode: String(apiRes.statusCode),
|
|
35
|
+
message: `Snapshot refresh failed (HTTP ${apiRes.statusCode}): ${code}`,
|
|
36
|
+
description: typeof apiRes.body === 'string' ? apiRes.body : JSON.stringify(apiRes.body),
|
|
37
|
+
}, code);
|
|
38
|
+
}
|
|
39
|
+
const body = apiRes.body;
|
|
40
|
+
return (_a = body.data) !== null && _a !== void 0 ? _a : {};
|
|
41
|
+
}
|
|
42
|
+
class BefrooshWait {
|
|
43
|
+
constructor() {
|
|
44
|
+
this.description = {
|
|
45
|
+
displayName: 'Befroosh Wait',
|
|
46
|
+
name: 'befrooshWait',
|
|
47
|
+
icon: 'file:befroosh.svg',
|
|
48
|
+
group: ['output'],
|
|
49
|
+
version: 1,
|
|
50
|
+
subtitle: '={{ $parameter["schedule"].length }} offset(s)',
|
|
51
|
+
description: 'Pause the workflow for a schedule of offsets, refreshing Analytics-sourced data on each resume',
|
|
52
|
+
defaults: { name: 'Befroosh Wait' },
|
|
53
|
+
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
54
|
+
outputs: [n8n_workflow_1.NodeConnectionTypes.Main, n8n_workflow_1.NodeConnectionTypes.Main],
|
|
55
|
+
outputNames: ['Loop', 'Done'],
|
|
56
|
+
credentials: [{ name: 'befrooshAnalyticsApi', required: true }],
|
|
57
|
+
properties: [
|
|
58
|
+
{
|
|
59
|
+
displayName: 'Schedule',
|
|
60
|
+
name: 'schedule',
|
|
61
|
+
type: 'string',
|
|
62
|
+
typeOptions: { multipleValues: true },
|
|
63
|
+
default: ['1d'],
|
|
64
|
+
required: true,
|
|
65
|
+
placeholder: '1d',
|
|
66
|
+
description: 'Sequential wait offsets (e.g. 1d, 12h, 30m, 45s). Each offset waits starting from ' +
|
|
67
|
+
"when the PREVIOUS one resumed, not from the start (unlike Befroosh Replay's schedule). " +
|
|
68
|
+
"Wire this node's Loop output back into its own input, same as Split In Batches. " +
|
|
69
|
+
'Practical ceiling: keep the total cumulative schedule well under 30 days, or later ' +
|
|
70
|
+
'resumes may silently degrade to stale data once the backing delivery record is pruned.',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
displayName: 'Event ID',
|
|
74
|
+
name: 'eventId',
|
|
75
|
+
type: 'string',
|
|
76
|
+
default: `={{ $json.eventId ?? ${eventDefaults_1.TRIGGER_ITEM_JSON}.eventId ?? '' }}`,
|
|
77
|
+
required: true,
|
|
78
|
+
description: 'Analytics event this item was sourced from; defaults to the current item\'s "eventId", ' +
|
|
79
|
+
'falling back to the original trigger event — resolved regardless of how many nodes sit in between.',
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
async execute() {
|
|
85
|
+
const items = this.getInputData();
|
|
86
|
+
const loopOut = [];
|
|
87
|
+
const doneOut = [];
|
|
88
|
+
const credentials = await this.getCredentials('befrooshAnalyticsApi');
|
|
89
|
+
const baseUrl = String(credentials.baseUrl || '').replace(/\/+$/, '');
|
|
90
|
+
const apiKey = credentials.apiKey;
|
|
91
|
+
if (!baseUrl || !apiKey) {
|
|
92
|
+
const message = !baseUrl
|
|
93
|
+
? 'Base URL is not configured on the befrooshAnalyticsApi credential'
|
|
94
|
+
: 'Replay API Key is not configured on the befrooshAnalyticsApi credential';
|
|
95
|
+
if (this.continueOnFail()) {
|
|
96
|
+
return [
|
|
97
|
+
[],
|
|
98
|
+
items.map((_, i) => ({
|
|
99
|
+
json: { success: false, error: message },
|
|
100
|
+
pairedItem: { item: i },
|
|
101
|
+
})),
|
|
102
|
+
];
|
|
103
|
+
}
|
|
104
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), message);
|
|
105
|
+
}
|
|
106
|
+
for (let i = 0; i < items.length; i++) {
|
|
107
|
+
const json = items[i].json;
|
|
108
|
+
try {
|
|
109
|
+
const state = json.__befrooshWait;
|
|
110
|
+
if (!state) {
|
|
111
|
+
// First entry: validate the schedule + event up front, prime fresh data
|
|
112
|
+
// before the very first wait (see spec §5.3). Snapshot failures here are
|
|
113
|
+
// fail-fast (respecting continueOnFail() via the outer catch) EXCEPT
|
|
114
|
+
// ANALYTICS_SNAPSHOT_ENTITY_NOTFOUND, which spec §6 treats as a
|
|
115
|
+
// graceful-degrade case even on first entry: the event/config is fine,
|
|
116
|
+
// the entity is just gone right now (e.g. an already-soft-deleted
|
|
117
|
+
// automation on an automation.deleted event), so we proceed with
|
|
118
|
+
// json.data unset and record the error instead of hard-failing the node.
|
|
119
|
+
const schedule = this.getNodeParameter('schedule', i);
|
|
120
|
+
if (!(schedule === null || schedule === void 0 ? void 0 : schedule.length)) {
|
|
121
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Schedule must have at least one offset', {
|
|
122
|
+
itemIndex: i,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
for (const offset of schedule) {
|
|
126
|
+
try {
|
|
127
|
+
(0, offsetParser_1.parseOffsetMs)(offset);
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), err.message, {
|
|
131
|
+
itemIndex: i,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const eventId = this.getNodeParameter('eventId', i).trim();
|
|
136
|
+
if (!eventId) {
|
|
137
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Event ID is required', { itemIndex: i });
|
|
138
|
+
}
|
|
139
|
+
try {
|
|
140
|
+
json.data = await fetchSnapshot(this, baseUrl, apiKey, eventId);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
if (error instanceof SnapshotApiError &&
|
|
144
|
+
error.code === 'ANALYTICS_SNAPSHOT_ENTITY_NOTFOUND') {
|
|
145
|
+
json.__befrooshWaitError = error.message;
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
throw error;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const nextState = { offsets: schedule, index: 0 };
|
|
152
|
+
json.__befrooshWait = nextState;
|
|
153
|
+
await this.putExecutionToWait(new Date(Date.now() + (0, offsetParser_1.parseOffsetMs)(schedule[0])));
|
|
154
|
+
loopOut.push({ json, pairedItem: { item: i } });
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
// Resumed: this round's offset just elapsed. Refresh failures degrade
|
|
158
|
+
// gracefully — a multi-day paused execution must not die over one
|
|
159
|
+
// transient failure (spec §2/§6). This includes resolving the Event ID
|
|
160
|
+
// parameter itself: if its expression references the trigger node by
|
|
161
|
+
// name (see lib/eventDefaults.ts) and that node was renamed/removed
|
|
162
|
+
// since the execution started, getNodeParameter throws — that failure
|
|
163
|
+
// must degrade the same as an HTTP/fetch failure, not escape this
|
|
164
|
+
// protective try/catch.
|
|
165
|
+
try {
|
|
166
|
+
const eventId = this.getNodeParameter('eventId', i).trim();
|
|
167
|
+
json.data = await fetchSnapshot(this, baseUrl, apiKey, eventId);
|
|
168
|
+
delete json.__befrooshWaitError;
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
json.__befrooshWaitError = error.message;
|
|
172
|
+
}
|
|
173
|
+
if (state.index + 1 < state.offsets.length) {
|
|
174
|
+
state.index += 1;
|
|
175
|
+
json.__befrooshWait = state;
|
|
176
|
+
await this.putExecutionToWait(new Date(Date.now() + (0, offsetParser_1.parseOffsetMs)(state.offsets[state.index])));
|
|
177
|
+
loopOut.push({ json, pairedItem: { item: i } });
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
delete json.__befrooshWait;
|
|
181
|
+
doneOut.push({ json, pairedItem: { item: i } });
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
if (this.continueOnFail()) {
|
|
186
|
+
doneOut.push({
|
|
187
|
+
json: { success: false, error: error.message },
|
|
188
|
+
pairedItem: { item: i },
|
|
189
|
+
});
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
throw error;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return [loopOut, doneOut];
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
exports.BefrooshWait = BefrooshWait;
|
|
199
|
+
//# sourceMappingURL=BefrooshWait.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BefrooshWait.node.js","sourceRoot":"","sources":["../../../nodes/BefrooshWait/BefrooshWait.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><rect width="24" height="24" rx="5" fill="#6366f1"/><path d="M7 12a5 5 0 1 1 1.6 3.7" fill="none" stroke="#fff" stroke-width="2.1" stroke-linecap="round"/><path d="M7 8.5V12h3.5" fill="none" stroke="#fff" stroke-width="2.1" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n8n-nodes-befroosh",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Befroosh custom n8n nodes (SMS providers, analytics webhook trigger, event replay)",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"dev": "tsc --watch",
|
|
25
25
|
"check-types": "tsc --noEmit",
|
|
26
26
|
"send-test": "node scripts/send-test-event.mjs",
|
|
27
|
-
"test": "node --test lib/signature.test.ts scripts/send-test-event.test.ts",
|
|
27
|
+
"test": "node --test lib/signature.test.ts lib/offsetParser.test.ts scripts/send-test-event.test.ts",
|
|
28
28
|
"lint": "eslint .",
|
|
29
29
|
"lint:fix": "eslint . --fix",
|
|
30
30
|
"prepublishOnly": "npm run build"
|
|
@@ -42,7 +42,9 @@
|
|
|
42
42
|
"dist/nodes/BefrooshSms/BefrooshSms.node.js",
|
|
43
43
|
"dist/nodes/BefrooshAnalyticsTrigger/BefrooshAnalyticsTrigger.node.js",
|
|
44
44
|
"dist/nodes/BefrooshReplay/BefrooshReplay.node.js",
|
|
45
|
-
"dist/nodes/BefrooshAssignAction/BefrooshAssignAction.node.js"
|
|
45
|
+
"dist/nodes/BefrooshAssignAction/BefrooshAssignAction.node.js",
|
|
46
|
+
"dist/nodes/BefrooshWait/BefrooshWait.node.js",
|
|
47
|
+
"dist/nodes/BefrooshStatus/BefrooshStatus.node.js"
|
|
46
48
|
]
|
|
47
49
|
},
|
|
48
50
|
"files": [
|