n8n-nodes-happ 0.1.1

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.
Files changed (27) hide show
  1. package/README.md +54 -0
  2. package/dist/credentials/HappApi.credentials.d.ts +9 -0
  3. package/dist/credentials/HappApi.credentials.js +54 -0
  4. package/dist/credentials/HappApi.credentials.js.map +1 -0
  5. package/dist/nodes/Happ/GenericFunctions.d.ts +3 -0
  6. package/dist/nodes/Happ/GenericFunctions.js +23 -0
  7. package/dist/nodes/Happ/GenericFunctions.js.map +1 -0
  8. package/dist/nodes/Happ/Happ.node.d.ts +10 -0
  9. package/dist/nodes/Happ/Happ.node.js +89 -0
  10. package/dist/nodes/Happ/Happ.node.js.map +1 -0
  11. package/dist/nodes/Happ/HappTrigger.node.d.ts +5 -0
  12. package/dist/nodes/Happ/HappTrigger.node.js +116 -0
  13. package/dist/nodes/Happ/HappTrigger.node.js.map +1 -0
  14. package/dist/nodes/Happ/descriptions/AssistantDescription.d.ts +3 -0
  15. package/dist/nodes/Happ/descriptions/AssistantDescription.js +440 -0
  16. package/dist/nodes/Happ/descriptions/AssistantDescription.js.map +1 -0
  17. package/dist/nodes/Happ/descriptions/ChatDescription.d.ts +3 -0
  18. package/dist/nodes/Happ/descriptions/ChatDescription.js +213 -0
  19. package/dist/nodes/Happ/descriptions/ChatDescription.js.map +1 -0
  20. package/dist/nodes/Happ/descriptions/MessageDescription.d.ts +6 -0
  21. package/dist/nodes/Happ/descriptions/MessageDescription.js +384 -0
  22. package/dist/nodes/Happ/descriptions/MessageDescription.js.map +1 -0
  23. package/dist/nodes/Happ/happ.svg +4 -0
  24. package/dist/nodes/Happ/triggerHelpers.d.ts +15 -0
  25. package/dist/nodes/Happ/triggerHelpers.js +55 -0
  26. package/dist/nodes/Happ/triggerHelpers.js.map +1 -0
  27. package/package.json +62 -0
package/README.md ADDED
@@ -0,0 +1,54 @@
1
+ # n8n-nodes-happ
2
+
3
+ n8n community node for the [Happ Platform API](https://api.happ.tools/reference) —
4
+ connect messenger channels (Telegram, Instagram, WhatsApp) and AI voice assistants
5
+ to your n8n workflows.
6
+
7
+ ## Installation
8
+
9
+ In n8n: **Settings → Community Nodes → Install** → enter `n8n-nodes-happ`.
10
+
11
+ Manual install into a self-hosted n8n:
12
+
13
+ ```bash
14
+ cd ~/.n8n/nodes
15
+ npm install n8n-nodes-happ
16
+ ```
17
+
18
+ ## Credentials
19
+
20
+ 1. Sign in at [my.happ.tools](https://my.happ.tools) and generate an **Access Token**
21
+ (or `POST /api/companies/{companyId}/access-tokens` with a JWT).
22
+ 2. In n8n create **Happ API** credentials: paste the token (`happ_...`) and pick the
23
+ environment (Production / Development).
24
+
25
+ ## Nodes
26
+
27
+ ### Happ
28
+
29
+ | Resource | Operations |
30
+ |---|---|
31
+ | Chat | Get Many, Get, Create, Update, Delete, Toggle AI Control, Assign/Unassign Assistant, Get Messengers |
32
+ | Message | Send, Get Many, Get, Get Last, Update, Delete |
33
+ | Assistant | Get Many, Get, Create, Update, Delete, Originate Call |
34
+
35
+ The node is marked `usableAsTool`, so an n8n AI Agent can call it as a tool.
36
+
37
+ ### Happ Trigger
38
+
39
+ Polling trigger. Events:
40
+
41
+ - **New Message** — a single chat, or all chats via the last-message endpoint
42
+ (in all-chats mode only the latest message per chat is delivered each poll and
43
+ at most the first 100 chats are watched); optional role filter (e.g. only `User`
44
+ messages).
45
+ - **New Chat** — fires when a new conversation appears.
46
+
47
+ ## Resources
48
+
49
+ - [Happ API reference](https://api.happ.tools/reference)
50
+ - [Happ docs](https://docs.happ.tools/en/docs/api)
51
+
52
+ ## License
53
+
54
+ MIT
@@ -0,0 +1,9 @@
1
+ import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class HappApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ properties: INodeProperties[];
7
+ authenticate: IAuthenticateGeneric;
8
+ test: ICredentialTestRequest;
9
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HappApi = void 0;
4
+ class HappApi {
5
+ constructor() {
6
+ this.name = 'happApi';
7
+ this.displayName = 'Happ API';
8
+ this.documentationUrl = 'https://docs.happ.tools/en/docs/api';
9
+ this.properties = [
10
+ {
11
+ displayName: 'Access Token',
12
+ name: 'accessToken',
13
+ type: 'string',
14
+ typeOptions: { password: true },
15
+ required: true,
16
+ default: '',
17
+ description: 'Company-scoped access token (format: happ_...). Generate one at my.happ.tools or via POST /api/companies/{companyId}/access-tokens.',
18
+ },
19
+ {
20
+ displayName: 'Environment',
21
+ name: 'baseUrl',
22
+ type: 'options',
23
+ options: [
24
+ {
25
+ name: 'Production',
26
+ value: 'https://api.happ.tools',
27
+ },
28
+ {
29
+ name: 'Development',
30
+ value: 'https://api.dev.happ.tools',
31
+ },
32
+ ],
33
+ default: 'https://api.happ.tools',
34
+ description: 'API environment to connect to. Use Production for live data.',
35
+ },
36
+ ];
37
+ this.authenticate = {
38
+ type: 'generic',
39
+ properties: {
40
+ headers: {
41
+ 'X-Access-Token': '={{$credentials.accessToken}}',
42
+ },
43
+ },
44
+ };
45
+ this.test = {
46
+ request: {
47
+ baseURL: '={{$credentials.baseUrl}}',
48
+ url: '/api/chats/messengers',
49
+ },
50
+ };
51
+ }
52
+ }
53
+ exports.HappApi = HappApi;
54
+ //# sourceMappingURL=HappApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HappApi.credentials.js","sourceRoot":"","sources":["../../credentials/HappApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,OAAO;IAApB;QACC,SAAI,GAAG,SAAS,CAAC;QAEjB,gBAAW,GAAG,UAAU,CAAC;QAGzB,qBAAgB,GAAG,qCAAqC,CAAC;QAEzD,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EACV,qIAAqI;aACtI;YACD;gBACC,WAAW,EAAE,aAAa;gBAC1B,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,YAAY;wBAClB,KAAK,EAAE,wBAAwB;qBAC/B;oBACD;wBACC,IAAI,EAAE,aAAa;wBACnB,KAAK,EAAE,4BAA4B;qBACnC;iBACD;gBACD,OAAO,EAAE,wBAAwB;gBACjC,WAAW,EAAE,8DAA8D;aAC3E;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,gBAAgB,EAAE,+BAA+B;iBACjD;aACD;SACD,CAAC;QAIF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,2BAA2B;gBACpC,GAAG,EAAE,uBAAuB;aAC5B;SACD,CAAC;IACH,CAAC;CAAA;AAvDD,0BAuDC"}
@@ -0,0 +1,3 @@
1
+ import type { IDataObject, IExecuteFunctions, IHttpRequestMethods, ILoadOptionsFunctions, IPollFunctions } from 'n8n-workflow';
2
+ export declare function happApiRequest(this: IExecuteFunctions | ILoadOptionsFunctions | IPollFunctions, method: IHttpRequestMethods, endpoint: string, qs?: IDataObject): Promise<unknown>;
3
+ export declare function toListItems(response: unknown): IDataObject[];
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.happApiRequest = happApiRequest;
4
+ exports.toListItems = toListItems;
5
+ async function happApiRequest(method, endpoint, qs = {}) {
6
+ const credentials = await this.getCredentials('happApi');
7
+ const options = {
8
+ method,
9
+ url: `${credentials.baseUrl}${endpoint}`,
10
+ qs,
11
+ json: true,
12
+ };
13
+ return await this.helpers.httpRequestWithAuthentication.call(this, 'happApi', options);
14
+ }
15
+ function toListItems(response) {
16
+ if (Array.isArray(response))
17
+ return response;
18
+ const data = response === null || response === void 0 ? void 0 : response.data;
19
+ if (Array.isArray(data))
20
+ return data;
21
+ return [];
22
+ }
23
+ //# sourceMappingURL=GenericFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/Happ/GenericFunctions.ts"],"names":[],"mappings":";;AASA,wCAcC;AAED,kCAKC;AArBM,KAAK,UAAU,cAAc,CAEnC,MAA2B,EAC3B,QAAgB,EAChB,KAAkB,EAAE;IAEpB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,OAAO,GAAwB;QACpC,MAAM;QACN,GAAG,EAAE,GAAG,WAAW,CAAC,OAAiB,GAAG,QAAQ,EAAE;QAClD,EAAE;QACF,IAAI,EAAE,IAAI;KACV,CAAC;IACF,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACxF,CAAC;AAED,SAAgB,WAAW,CAAC,QAAiB;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAyB,CAAC;IAC9D,MAAM,IAAI,GAAI,QAA+B,aAA/B,QAAQ,uBAAR,QAAQ,CAAyB,IAAI,CAAC;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAqB,CAAC;IACtD,OAAO,EAAE,CAAC;AACX,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ILoadOptionsFunctions, INodePropertyOptions, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class Happ implements INodeType {
3
+ description: INodeTypeDescription;
4
+ methods: {
5
+ loadOptions: {
6
+ getAssistants(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
7
+ getCompanies(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
8
+ };
9
+ };
10
+ }
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Happ = void 0;
4
+ const AssistantDescription_1 = require("./descriptions/AssistantDescription");
5
+ const ChatDescription_1 = require("./descriptions/ChatDescription");
6
+ const MessageDescription_1 = require("./descriptions/MessageDescription");
7
+ const GenericFunctions_1 = require("./GenericFunctions");
8
+ class Happ {
9
+ constructor() {
10
+ this.description = {
11
+ displayName: 'Happ',
12
+ name: 'happ',
13
+ icon: 'file:happ.svg',
14
+ group: ['transform'],
15
+ version: 1,
16
+ subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
17
+ description: 'Interact with the Happ Platform API: messenger chats, messages and AI assistants',
18
+ defaults: {
19
+ name: 'Happ',
20
+ },
21
+ inputs: ['main'],
22
+ outputs: ['main'],
23
+ usableAsTool: true,
24
+ credentials: [
25
+ {
26
+ name: 'happApi',
27
+ required: true,
28
+ },
29
+ ],
30
+ requestDefaults: {
31
+ baseURL: '={{$credentials.baseUrl}}',
32
+ headers: {
33
+ Accept: 'application/json',
34
+ 'Content-Type': 'application/json',
35
+ },
36
+ },
37
+ properties: [
38
+ {
39
+ displayName: 'Resource',
40
+ name: 'resource',
41
+ type: 'options',
42
+ noDataExpression: true,
43
+ options: [
44
+ { name: 'Assistant', value: 'assistant' },
45
+ { name: 'Chat', value: 'chat' },
46
+ { name: 'Message', value: 'message' },
47
+ ],
48
+ default: 'message',
49
+ },
50
+ ...AssistantDescription_1.assistantOperations,
51
+ ...AssistantDescription_1.assistantFields,
52
+ ...ChatDescription_1.chatOperations,
53
+ ...ChatDescription_1.chatFields,
54
+ ...MessageDescription_1.messageOperations,
55
+ ...MessageDescription_1.messageFields,
56
+ ],
57
+ };
58
+ this.methods = {
59
+ loadOptions: {
60
+ async getAssistants() {
61
+ const response = await GenericFunctions_1.happApiRequest.call(this, 'GET', '/api/assistants', {
62
+ take: 100,
63
+ });
64
+ return (0, GenericFunctions_1.toListItems)(response).map((assistant) => {
65
+ var _a;
66
+ return ({
67
+ name: String((_a = assistant.name) !== null && _a !== void 0 ? _a : assistant.id),
68
+ value: String(assistant.id),
69
+ });
70
+ });
71
+ },
72
+ async getCompanies() {
73
+ const response = await GenericFunctions_1.happApiRequest.call(this, 'GET', '/api/companies', {
74
+ take: 100,
75
+ });
76
+ return (0, GenericFunctions_1.toListItems)(response).map((company) => {
77
+ var _a;
78
+ return ({
79
+ name: String((_a = company.name) !== null && _a !== void 0 ? _a : company.id),
80
+ value: String(company.id),
81
+ });
82
+ });
83
+ },
84
+ },
85
+ };
86
+ }
87
+ }
88
+ exports.Happ = Happ;
89
+ //# sourceMappingURL=Happ.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Happ.node.js","sourceRoot":"","sources":["../../../nodes/Happ/Happ.node.ts"],"names":[],"mappings":";;;AAQA,8EAA2F;AAC3F,oEAA4E;AAC5E,0EAAqF;AACrF,yDAAiE;AAEjE,MAAa,IAAI;IAAjB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,MAAM;YACnB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8DAA8D;YACxE,WAAW,EACV,kFAAkF;YACnF,QAAQ,EAAE;gBACT,IAAI,EAAE,MAAM;aACZ;YACD,MAAM,EAAE,CAAC,MAAM,CAAC;YAChB,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE;gBACZ;oBACC,IAAI,EAAE,SAAS;oBACf,QAAQ,EAAE,IAAI;iBACd;aACD;YACD,eAAe,EAAE;gBAChB,OAAO,EAAE,2BAA2B;gBACpC,OAAO,EAAE;oBACR,MAAM,EAAE,kBAAkB;oBAC1B,cAAc,EAAE,kBAAkB;iBAClC;aACD;YACD,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE;wBACR,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;wBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;wBAC/B,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;qBACrC;oBACD,OAAO,EAAE,SAAS;iBAClB;gBACD,GAAG,0CAAmB;gBACtB,GAAG,sCAAe;gBAClB,GAAG,gCAAc;gBACjB,GAAG,4BAAU;gBACb,GAAG,sCAAiB;gBACpB,GAAG,kCAAa;aAChB;SACD,CAAC;QAEF,YAAO,GAAG;YACT,WAAW,EAAE;gBACZ,KAAK,CAAC,aAAa;oBAClB,MAAM,QAAQ,GAAG,MAAM,iCAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE;wBAC1E,IAAI,EAAE,GAAG;qBACT,CAAC,CAAC;oBACH,OAAO,IAAA,8BAAW,EAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,SAAsB,EAAE,EAAE;;wBAAC,OAAA,CAAC;4BAC7D,IAAI,EAAE,MAAM,CAAC,MAAA,SAAS,CAAC,IAAI,mCAAI,SAAS,CAAC,EAAE,CAAC;4BAC5C,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;yBAC3B,CAAC,CAAA;qBAAA,CAAC,CAAC;gBACL,CAAC;gBACD,KAAK,CAAC,YAAY;oBAGjB,MAAM,QAAQ,GAAG,MAAM,iCAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE;wBACzE,IAAI,EAAE,GAAG;qBACT,CAAC,CAAC;oBACH,OAAO,IAAA,8BAAW,EAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,OAAoB,EAAE,EAAE;;wBAAC,OAAA,CAAC;4BAC3D,IAAI,EAAE,MAAM,CAAC,MAAA,OAAO,CAAC,IAAI,mCAAI,OAAO,CAAC,EAAE,CAAC;4BACxC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;yBACzB,CAAC,CAAA;qBAAA,CAAC,CAAC;gBACL,CAAC;aACD;SACD,CAAC;IACH,CAAC;CAAA;AA3ED,oBA2EC"}
@@ -0,0 +1,5 @@
1
+ import type { INodeExecutionData, INodeType, INodeTypeDescription, IPollFunctions } from 'n8n-workflow';
2
+ export declare class HappTrigger implements INodeType {
3
+ description: INodeTypeDescription;
4
+ poll(this: IPollFunctions): Promise<INodeExecutionData[][] | null>;
5
+ }
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HappTrigger = void 0;
4
+ const MessageDescription_1 = require("./descriptions/MessageDescription");
5
+ const GenericFunctions_1 = require("./GenericFunctions");
6
+ const triggerHelpers_1 = require("./triggerHelpers");
7
+ class HappTrigger {
8
+ constructor() {
9
+ this.description = {
10
+ displayName: 'Happ Trigger',
11
+ name: 'happTrigger',
12
+ icon: 'file:happ.svg',
13
+ group: ['trigger'],
14
+ version: 1,
15
+ subtitle: '={{$parameter["event"]}}',
16
+ description: 'Starts the workflow when new Happ chats or messages appear',
17
+ defaults: {
18
+ name: 'Happ Trigger',
19
+ },
20
+ polling: true,
21
+ inputs: [],
22
+ outputs: ['main'],
23
+ credentials: [
24
+ {
25
+ name: 'happApi',
26
+ required: true,
27
+ },
28
+ ],
29
+ properties: [
30
+ {
31
+ displayName: 'Event',
32
+ name: 'event',
33
+ type: 'options',
34
+ options: [
35
+ { name: 'New Chat', value: 'newChat' },
36
+ { name: 'New Message', value: 'newMessage' },
37
+ ],
38
+ default: 'newMessage',
39
+ },
40
+ {
41
+ displayName: 'Chat ID',
42
+ name: 'chatId',
43
+ type: 'string',
44
+ default: '',
45
+ description: 'Watch a single chat. Leave empty to watch every chat (one extra API call per poll). In all-chats mode only the latest message per chat is delivered each poll (rapid bursts in one chat may be coalesced) and at most the first 100 chats are watched.',
46
+ displayOptions: { show: { event: ['newMessage'] } },
47
+ },
48
+ {
49
+ displayName: 'Roles',
50
+ name: 'roles',
51
+ type: 'multiOptions',
52
+ options: MessageDescription_1.messageRoleOptions,
53
+ default: [],
54
+ description: 'Only emit messages whose role matches. Pick "User" to react to customer messages only. Empty means all roles.',
55
+ displayOptions: { show: { event: ['newMessage'] } },
56
+ },
57
+ ],
58
+ };
59
+ }
60
+ async poll() {
61
+ const event = this.getNodeParameter('event');
62
+ const staticData = this.getWorkflowStaticData('node');
63
+ let items = [];
64
+ if (event === 'newChat') {
65
+ const response = await GenericFunctions_1.happApiRequest.call(this, 'GET', '/api/chats', { take: 100 });
66
+ items = (0, GenericFunctions_1.toListItems)(response);
67
+ }
68
+ else {
69
+ const chatId = this.getNodeParameter('chatId');
70
+ if (chatId) {
71
+ const response = await GenericFunctions_1.happApiRequest.call(this, 'GET', '/api/messages', {
72
+ chatId,
73
+ take: 100,
74
+ });
75
+ items = (0, GenericFunctions_1.toListItems)(response);
76
+ }
77
+ else {
78
+ const chatsResponse = await GenericFunctions_1.happApiRequest.call(this, 'GET', '/api/chats', {
79
+ take: 100,
80
+ });
81
+ const chatIds = (0, GenericFunctions_1.toListItems)(chatsResponse)
82
+ .map((chat) => chat.id)
83
+ .filter((id) => id !== undefined && id !== null)
84
+ .join(',');
85
+ if (chatIds !== '') {
86
+ const lastMessages = (await GenericFunctions_1.happApiRequest.call(this, 'GET', '/api/messages/last', {
87
+ chatIds,
88
+ }));
89
+ items = Object.values(lastMessages !== null && lastMessages !== void 0 ? lastMessages : {}).filter((message) => message !== null && typeof message === 'object');
90
+ }
91
+ }
92
+ const roles = this.getNodeParameter('roles', []);
93
+ items = (0, triggerHelpers_1.filterByRoles)(items, roles);
94
+ }
95
+ if (this.getMode() === 'manual') {
96
+ const { newItems } = (0, triggerHelpers_1.selectNewItems)(items, {});
97
+ const latest = newItems[newItems.length - 1];
98
+ if (latest === undefined)
99
+ return null;
100
+ return [this.helpers.returnJsonArray([latest])];
101
+ }
102
+ const isFirstPoll = staticData.lastTimestamp === undefined;
103
+ const { newItems, nextState } = (0, triggerHelpers_1.selectNewItems)(items, staticData);
104
+ staticData.lastTimestamp = nextState.lastTimestamp;
105
+ staticData.seenIds = nextState.seenIds;
106
+ if (isFirstPoll && staticData.lastTimestamp === undefined) {
107
+ staticData.lastTimestamp = new Date().toISOString();
108
+ staticData.seenIds = [];
109
+ }
110
+ if (isFirstPoll || newItems.length === 0)
111
+ return null;
112
+ return [this.helpers.returnJsonArray(newItems)];
113
+ }
114
+ }
115
+ exports.HappTrigger = HappTrigger;
116
+ //# sourceMappingURL=HappTrigger.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HappTrigger.node.js","sourceRoot":"","sources":["../../../nodes/Happ/HappTrigger.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const assistantOperations: INodeProperties[];
3
+ export declare const assistantFields: INodeProperties[];