n8n-nodes-keephub 1.6.0 β†’ 1.7.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
@@ -414,6 +414,47 @@ Output:
414
414
 
415
415
  ---
416
416
 
417
+ ### πŸ—„οΈ **Storage Operations**
418
+
419
+ | Operation | Description |
420
+ | ------------------- | --------------------------------------------------------- |
421
+ | πŸ”— **Get Signed URL** | Generate a pre-signed URL for secure access to a stored file |
422
+
423
+ **Use case:** Retrieve a signed CloudFront URL for a file attached to a task, form answer, or content item, then pass it directly to an AI vision model for analysis.
424
+
425
+ **Required fields:**
426
+
427
+ | Field | Description |
428
+ | ----- | ----------- |
429
+ | **Origin** | The entity type that owns the file (e.g. `Task Form Answer`, `Content Attachment`) |
430
+ | **Origin ID** | The `_id` of the owning entity β€” use `{{ $json._id }}` from a preceding Keephub node |
431
+ | **Storage ID** | The S3 path of the file β€” use `{{ $json.answers[N].value.value }}` for upload form answers |
432
+ | **Force Download** | Optional. Sets `Content-Disposition: attachment` to force a file download instead of inline display |
433
+
434
+ **Example:**
435
+
436
+ ```json
437
+ {
438
+ "resource": "storage",
439
+ "operation": "getSignedUrl",
440
+ "origin": "taskFormAnswer",
441
+ "originId": "699974e8f6c386b2e3e93cbc",
442
+ "storageId": "live/image/dev/contents/abc123/photo.jpg"
443
+ }
444
+ ```
445
+
446
+ **Output:**
447
+
448
+ ```json
449
+ {
450
+ "url": "https://d2qp115j4w1ptn.cloudfront.net/live/image/...?Expires=...&Signature=..."
451
+ }
452
+ ```
453
+
454
+ > ⚠️ The returned URL is time-limited and contains embedded credentials. Treat it as a secret and use it immediately in your workflow β€” do not log or store it.
455
+
456
+ ---
457
+
417
458
  ## πŸ” Credentials Setup
418
459
 
419
460
  Keephub uses **two separate credential types** β€” select the matching authentication method from the **Authentication** dropdown on the Keephub node.
@@ -578,13 +619,15 @@ n8n-nodes-keephub/
578
619
  β”‚ β”‚ β”œβ”€β”€ ContentDescription.ts
579
620
  β”‚ β”‚ β”œβ”€β”€ TaskDescription.ts
580
621
  β”‚ β”‚ β”œβ”€β”€ FormSubmissionDescription.ts
581
- β”‚ β”‚ └── OrgchartDescription.ts
622
+ β”‚ β”‚ β”œβ”€β”€ OrgchartDescription.ts
623
+ β”‚ β”‚ └── StorageDescription.ts
582
624
  β”‚ β”œβ”€β”€ actions/ # Operation implementations
583
625
  β”‚ β”‚ β”œβ”€β”€ user/
584
626
  β”‚ β”‚ β”œβ”€β”€ content/
585
627
  β”‚ β”‚ β”œβ”€β”€ task/
586
628
  β”‚ β”‚ β”œβ”€β”€ formSubmission/
587
- β”‚ β”‚ └── orgchart/
629
+ β”‚ β”‚ β”œβ”€β”€ orgchart/
630
+ β”‚ β”‚ └── storage/
588
631
  β”‚ └── utils/
589
632
  β”‚ └── helpers.ts
590
633
  β”œβ”€β”€ credentials/
@@ -714,6 +757,13 @@ npm run lint
714
757
  - βœ… Added **Approve Content** operation β€” approve content pending approval
715
758
  - ❌ Added **Reject Content** operation β€” reject content pending approval
716
759
 
760
+ ### v1.7.0 (2026-02-22)
761
+
762
+ - πŸ—„οΈ Added **Storage** resource with **Get Signed URL** operation
763
+ - Generates pre-signed CloudFront URLs for secure file access from tasks, form answers, and content
764
+ - Supports all 11 origin types with inline field hints for common expressions
765
+ - Optional Force Download flag to set `Content-Disposition: attachment`
766
+
717
767
  ---
718
768
 
719
769
  ## 🀝 Contributing
@@ -1 +1 @@
1
- {"version":3,"file":"Keephub.node.d.ts","sourceRoot":"","sources":["../../../nodes/Keephub/Keephub.node.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EAGpB,MAAM,cAAc,CAAC;AAYtB,qBAAa,OAAQ,YAAW,SAAS;IACxC,WAAW,EAAE,oBAAoB,CAuE/B;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAgFvE"}
1
+ {"version":3,"file":"Keephub.node.d.ts","sourceRoot":"","sources":["../../../nodes/Keephub/Keephub.node.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EAGpB,MAAM,cAAc,CAAC;AActB,qBAAa,OAAQ,YAAW,SAAS;IACxC,WAAW,EAAE,oBAAoB,CAyE/B;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAmFvE"}
@@ -40,11 +40,13 @@ const formSubmissionActions = __importStar(require("./actions/formSubmission/ind
40
40
  const orgchartActions = __importStar(require("./actions/orgchart/index"));
41
41
  const userActions = __importStar(require("./actions/user"));
42
42
  const taskActions = __importStar(require("./actions/task"));
43
+ const storageActions = __importStar(require("./actions/storage"));
43
44
  const ContentDescription_1 = require("./descriptions/ContentDescription");
44
45
  const FormSubmissionDescription_1 = require("./descriptions/FormSubmissionDescription");
45
46
  const OrgchartDescription_1 = require("./descriptions/OrgchartDescription");
46
47
  const TaskDescription_1 = require("./descriptions/TaskDescription");
47
48
  const UserDescription_1 = require("./descriptions/UserDescription");
49
+ const StorageDescription_1 = require("./descriptions/StorageDescription");
48
50
  class Keephub {
49
51
  constructor() {
50
52
  this.description = {
@@ -106,6 +108,7 @@ class Keephub {
106
108
  { name: 'Content', value: 'content' },
107
109
  { name: 'Form Submission', value: 'formSubmission' },
108
110
  { name: 'Orgchart', value: 'orgchart' },
111
+ { name: 'Storage', value: 'storage' },
109
112
  { name: 'Task', value: 'task' },
110
113
  { name: 'User', value: 'user' },
111
114
  ],
@@ -114,6 +117,7 @@ class Keephub {
114
117
  ...ContentDescription_1.contentFields,
115
118
  ...FormSubmissionDescription_1.formSubmissionFields,
116
119
  ...OrgchartDescription_1.orgchartFields,
120
+ ...StorageDescription_1.storageFields,
117
121
  ...TaskDescription_1.taskFields,
118
122
  ...UserDescription_1.userFields,
119
123
  ],
@@ -160,6 +164,9 @@ class Keephub {
160
164
  approveTask: taskActions.approveTaskExecute,
161
165
  rejectTask: taskActions.rejectTaskExecute,
162
166
  },
167
+ storage: {
168
+ getSignedUrl: storageActions.getSignedUrlExecute,
169
+ },
163
170
  user: {
164
171
  getById: userActions.getByIdExecute,
165
172
  findByLoginName: userActions.findByLoginNameExecute,
@@ -1 +1 @@
1
- {"version":3,"file":"Keephub.node.js","sourceRoot":"","sources":["../../../nodes/Keephub/Keephub.node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Keephub.node.js","sourceRoot":"","sources":["../../../nodes/Keephub/Keephub.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { INodeExecutionData, IExecuteFunctions } from 'n8n-workflow';
2
+ export declare const description: {
3
+ displayName: string;
4
+ name: string;
5
+ action: string;
6
+ description: string;
7
+ };
8
+ export declare function execute(this: IExecuteFunctions, item: INodeExecutionData, index: number): Promise<INodeExecutionData[]>;
9
+ //# sourceMappingURL=getSignedUrl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSignedUrl.d.ts","sourceRoot":"","sources":["../../../../../nodes/Keephub/actions/storage/getSignedUrl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAe,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAIvF,eAAO,MAAM,WAAW;;;;;CAKvB,CAAC;AAEF,wBAAsB,OAAO,CAC5B,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAyC/B"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.description = void 0;
4
+ exports.execute = execute;
5
+ const n8n_workflow_1 = require("n8n-workflow");
6
+ const helpers_1 = require("../../utils/helpers");
7
+ exports.description = {
8
+ displayName: 'Get Signed URL',
9
+ name: 'getSignedUrl',
10
+ action: 'Get a signed URL for a stored file',
11
+ description: 'Generate a pre-signed URL for secure access to a file stored in Keephub',
12
+ };
13
+ async function execute(item, index) {
14
+ const origin = this.getNodeParameter('origin', index);
15
+ const originId = this.getNodeParameter('originId', index);
16
+ const storageId = this.getNodeParameter('storageId', index);
17
+ const attachment = this.getNodeParameter('attachment', index, false);
18
+ if (!origin || origin.trim().length === 0) {
19
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Origin cannot be empty', { itemIndex: index });
20
+ }
21
+ if (!originId || originId.trim().length === 0) {
22
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Origin ID cannot be empty', {
23
+ itemIndex: index,
24
+ });
25
+ }
26
+ if (!storageId || storageId.trim().length === 0) {
27
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Storage ID cannot be empty', {
28
+ itemIndex: index,
29
+ });
30
+ }
31
+ const body = {
32
+ signType: 'getObject',
33
+ origin,
34
+ originId,
35
+ storageId,
36
+ };
37
+ if (attachment) {
38
+ body.attachment = true;
39
+ }
40
+ const response = await helpers_1.apiRequest.call(this, 'POST', '/signurl', body);
41
+ return [
42
+ {
43
+ json: response,
44
+ pairedItem: { item: index },
45
+ },
46
+ ];
47
+ }
48
+ //# sourceMappingURL=getSignedUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSignedUrl.js","sourceRoot":"","sources":["../../../../../nodes/Keephub/actions/storage/getSignedUrl.ts"],"names":[],"mappings":";;;AAWA,0BA6CC;AAvDD,+CAAkD;AAClD,iDAAiD;AAEpC,QAAA,WAAW,GAAG;IAC1B,WAAW,EAAE,gBAAgB;IAC7B,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,oCAAoC;IAC5C,WAAW,EAAE,yEAAyE;CACtF,CAAC;AAEK,KAAK,UAAU,OAAO,CAE5B,IAAwB,EACxB,KAAa;IAEb,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAW,CAAC;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAW,CAAC;IACpE,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAW,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAY,CAAC;IAEhF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,wBAAwB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,2BAA2B,EAAE;YACzE,SAAS,EAAE,KAAK;SAChB,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,4BAA4B,EAAE;YAC1E,SAAS,EAAE,KAAK;SAChB,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAgB;QACzB,QAAQ,EAAE,WAAW;QACrB,MAAM;QACN,QAAQ;QACR,SAAS;KACT,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QAChB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,oBAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAEvE,OAAO;QACN;YACC,IAAI,EAAE,QAAuB;YAC7B,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;SAC3B;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { execute as getSignedUrlExecute } from './getSignedUrl';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../nodes/Keephub/actions/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSignedUrlExecute = void 0;
4
+ var getSignedUrl_1 = require("./getSignedUrl");
5
+ Object.defineProperty(exports, "getSignedUrlExecute", { enumerable: true, get: function () { return getSignedUrl_1.execute; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../nodes/Keephub/actions/storage/index.ts"],"names":[],"mappings":";;;AAAA,+CAAgE;AAAvD,mHAAA,OAAO,OAAuB"}
@@ -0,0 +1,3 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const storageFields: INodeProperties[];
3
+ //# sourceMappingURL=StorageDescription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageDescription.d.ts","sourceRoot":"","sources":["../../../../nodes/Keephub/descriptions/StorageDescription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,eAAO,MAAM,aAAa,EAAE,eAAe,EA8E1C,CAAC"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.storageFields = void 0;
4
+ exports.storageFields = [
5
+ {
6
+ displayName: 'Operation',
7
+ name: 'operation',
8
+ type: 'options',
9
+ noDataExpression: true,
10
+ displayOptions: { show: { resource: ['storage'] } },
11
+ options: [
12
+ {
13
+ name: 'Get Signed URL',
14
+ value: 'getSignedUrl',
15
+ description: 'Generate a pre-signed URL for secure access to a stored file',
16
+ action: 'Get a signed URL for a stored file',
17
+ },
18
+ ],
19
+ default: 'getSignedUrl',
20
+ },
21
+ // ── Origin ──────────────────────────────────────────────────────────────
22
+ {
23
+ displayName: 'Origin',
24
+ name: 'origin',
25
+ type: 'options',
26
+ required: true,
27
+ displayOptions: { show: { resource: ['storage'], operation: ['getSignedUrl'] } },
28
+ options: [
29
+ { name: 'Content Attachment', value: 'contentAttachment' },
30
+ { name: 'Content Template Attachment', value: 'contentTemplateAttachment' },
31
+ { name: 'Content Video', value: 'contentVideo' },
32
+ { name: 'External Attachment', value: 'externalAttachment' },
33
+ { name: 'Form Values Attachment', value: 'formValuesAttachment' },
34
+ { name: 'Form Values Video', value: 'formValuesVideo' },
35
+ { name: 'Lesson Attachment', value: 'lessonAttachment' },
36
+ { name: 'Task Attachment', value: 'taskAttachment' },
37
+ { name: 'Task Form Answer', value: 'taskFormAnswer' },
38
+ { name: 'Tasktemplate Attachment', value: 'tasktemplateAttachment' },
39
+ { name: 'Tasktemplate Video', value: 'tasktemplateVideo' },
40
+ ],
41
+ default: 'taskFormAnswer',
42
+ description: 'The origin type of the file. Determines which entity is used for access verification.',
43
+ },
44
+ // ── Origin ID ────────────────────────────────────────────────────────────
45
+ {
46
+ displayName: 'Origin ID',
47
+ name: 'originId',
48
+ type: 'string',
49
+ required: true,
50
+ displayOptions: { show: { resource: ['storage'], operation: ['getSignedUrl'] } },
51
+ default: '',
52
+ description: 'ID of the entity that owns the file (task, content, form, etc.). Use the _id field from a preceding Keephub node output.',
53
+ placeholder: 'e.g. 699974e8f6c386b2e3e93cbc',
54
+ },
55
+ // ── Storage ID ───────────────────────────────────────────────────────────
56
+ {
57
+ displayName: 'Storage ID',
58
+ name: 'storageId',
59
+ type: 'string',
60
+ required: true,
61
+ displayOptions: { show: { resource: ['storage'], operation: ['getSignedUrl'] } },
62
+ default: '',
63
+ description: 'S3 storage path of the file. For upload form answers, use the value.value field of the matching answer entry.',
64
+ placeholder: 'e.g. live/image/dev/contents/abc123/photo.jpg',
65
+ },
66
+ // ── Force Download (optional) ────────────────────────────────────────────
67
+ {
68
+ displayName: 'Force Download',
69
+ name: 'attachment',
70
+ type: 'boolean',
71
+ displayOptions: { show: { resource: ['storage'], operation: ['getSignedUrl'] } },
72
+ default: false,
73
+ description: 'Whether to set Content-Disposition to attachment, forcing a file download instead of inline display in the browser',
74
+ },
75
+ ];
76
+ //# sourceMappingURL=StorageDescription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageDescription.js","sourceRoot":"","sources":["../../../../nodes/Keephub/descriptions/StorageDescription.ts"],"names":[],"mappings":";;;AAEa,QAAA,aAAa,GAAsB;IAC/C;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE;QACnD,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,cAAc;gBACrB,WAAW,EAAE,8DAA8D;gBAC3E,MAAM,EAAE,oCAAoC;aAC5C;SACD;QACD,OAAO,EAAE,cAAc;KACvB;IAED,2EAA2E;IAC3E;QACC,WAAW,EAAE,QAAQ;QACrB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE;QAChF,OAAO,EAAE;YACR,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,mBAAmB,EAAE;YAC1D,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,2BAA2B,EAAE;YAC3E,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE;YAChD,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,oBAAoB,EAAE;YAC5D,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,sBAAsB,EAAE;YACjE,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE;YACvD,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,kBAAkB,EAAE;YACxD,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,EAAE;YACpD,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,EAAE;YACrD,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,wBAAwB,EAAE;YACpE,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,mBAAmB,EAAE;SAC1D;QACD,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,uFAAuF;KACpG;IAED,4EAA4E;IAC5E;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE;QAChF,OAAO,EAAE,EAAE;QACX,WAAW,EACV,0HAA0H;QAC3H,WAAW,EAAE,+BAA+B;KAC5C;IAED,4EAA4E;IAC5E;QACC,WAAW,EAAE,YAAY;QACzB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE;QAChF,OAAO,EAAE,EAAE;QACX,WAAW,EACV,+GAA+G;QAChH,WAAW,EAAE,+CAA+C;KAC5D;IAED,4EAA4E;IAC5E;QACC,WAAW,EAAE,gBAAgB;QAC7B,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,SAAS;QACf,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE;QAChF,OAAO,EAAE,KAAK;QACd,WAAW,EACV,oHAAoH;KACrH;CACD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-nodes-keephub",
3
- "version": "1.6.0",
3
+ "version": "1.7.0",
4
4
  "description": "Keephub integration node for n8n workflow automation",
5
5
  "longDescription": "Keephub is your AI-powered frontline employee platform. Connect teams across communication, scheduling, HR admin, tasks, and auditsβ€”all from one hub. With n8n, automate workflows that sync schedules, trigger HR actions, coordinate communications, and manage tasks across your entire tech stack.",
6
6
  "license": "MIT",