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 CHANGED
@@ -19,7 +19,10 @@ apps/n8n-nodes/
19
19
  ├── nodes/
20
20
  │ ├── BefrooshSms/
21
21
  │ ├── BefrooshAnalyticsTrigger/ # webhook trigger (verifies + emits events)
22
- └── BefrooshReplay/ # schedule/cancel/status replay calls
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: 'dateTime',
65
+ type: 'string',
65
66
  default: '',
66
- description: 'When the task is due; defaults to now if empty',
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 actionDate = this.getNodeParameter('actionDate', i) || '';
149
- if (actionDate)
150
- body.actionDate = actionDate;
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":"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"}
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,5 @@
1
+ import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class BefrooshWait implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
5
+ }
@@ -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.4.1",
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": [