@weslink/n8n-nodes-kibi-connect 0.1.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/LICENSE.md +22 -0
- package/README.md +38 -0
- package/dist/credentials/KibiConnectApi.credentials.d.ts +10 -0
- package/dist/credentials/KibiConnectApi.credentials.js +85 -0
- package/dist/credentials/KibiConnectApi.credentials.js.map +1 -0
- package/dist/icons/kibiConnect.dark.svg +37 -0
- package/dist/icons/kibiConnect.svg +37 -0
- package/dist/nodes/KibiConnect/KibiConnect.node.d.ts +12 -0
- package/dist/nodes/KibiConnect/KibiConnect.node.js +109 -0
- package/dist/nodes/KibiConnect/KibiConnect.node.js.map +1 -0
- package/dist/nodes/KibiConnect/KibiConnect.node.json +18 -0
- package/dist/nodes/KibiConnect/listSearch/getConversations.d.ts +2 -0
- package/dist/nodes/KibiConnect/listSearch/getConversations.js +33 -0
- package/dist/nodes/KibiConnect/listSearch/getConversations.js.map +1 -0
- package/dist/nodes/KibiConnect/listSearch/getUsers.d.ts +2 -0
- package/dist/nodes/KibiConnect/listSearch/getUsers.js +26 -0
- package/dist/nodes/KibiConnect/listSearch/getUsers.js.map +1 -0
- package/dist/nodes/KibiConnect/resources/calendarEvent/index.d.ts +2 -0
- package/dist/nodes/KibiConnect/resources/calendarEvent/index.js +236 -0
- package/dist/nodes/KibiConnect/resources/calendarEvent/index.js.map +1 -0
- package/dist/nodes/KibiConnect/resources/chat/index.d.ts +2 -0
- package/dist/nodes/KibiConnect/resources/chat/index.js +221 -0
- package/dist/nodes/KibiConnect/resources/chat/index.js.map +1 -0
- package/dist/nodes/KibiConnect/resources/notification/index.d.ts +2 -0
- package/dist/nodes/KibiConnect/resources/notification/index.js +131 -0
- package/dist/nodes/KibiConnect/resources/notification/index.js.map +1 -0
- package/dist/nodes/KibiConnect/resources/post/index.d.ts +2 -0
- package/dist/nodes/KibiConnect/resources/post/index.js +176 -0
- package/dist/nodes/KibiConnect/resources/post/index.js.map +1 -0
- package/dist/nodes/KibiConnect/resources/task/index.d.ts +2 -0
- package/dist/nodes/KibiConnect/resources/task/index.js +229 -0
- package/dist/nodes/KibiConnect/resources/task/index.js.map +1 -0
- package/dist/nodes/KibiConnect/resources/user/index.d.ts +2 -0
- package/dist/nodes/KibiConnect/resources/user/index.js +91 -0
- package/dist/nodes/KibiConnect/resources/user/index.js.map +1 -0
- package/dist/nodes/KibiConnect/resources/wiki/index.d.ts +2 -0
- package/dist/nodes/KibiConnect/resources/wiki/index.js +167 -0
- package/dist/nodes/KibiConnect/resources/wiki/index.js.map +1 -0
- package/dist/nodes/KibiConnect/shared/descriptions.d.ts +3 -0
- package/dist/nodes/KibiConnect/shared/descriptions.js +52 -0
- package/dist/nodes/KibiConnect/shared/descriptions.js.map +1 -0
- package/dist/nodes/KibiConnect/shared/errors.d.ts +6 -0
- package/dist/nodes/KibiConnect/shared/errors.js +42 -0
- package/dist/nodes/KibiConnect/shared/errors.js.map +1 -0
- package/dist/nodes/KibiConnect/shared/fields.d.ts +7 -0
- package/dist/nodes/KibiConnect/shared/fields.js +120 -0
- package/dist/nodes/KibiConnect/shared/fields.js.map +1 -0
- package/dist/nodes/KibiConnect/shared/transport.d.ts +13 -0
- package/dist/nodes/KibiConnect/shared/transport.js +39 -0
- package/dist/nodes/KibiConnect/shared/transport.js.map +1 -0
- package/dist/package.json +66 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +66 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Weslink GmbH
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
package/README.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# @weslink/n8n-nodes-kibi-connect
|
|
2
|
+
|
|
3
|
+
An [n8n](https://n8n.io) community node for [Kibi Connect](https://kibi.de) — the European
|
|
4
|
+
workplace collaboration platform, made in Germany. Chat, feed, wiki, tasks, calendar, files
|
|
5
|
+
and time tracking, with data kept in the EU.
|
|
6
|
+
|
|
7
|
+
> **Early release.** The package currently ships the credential and the resources
|
|
8
|
+
> Calendar Event, Chat, Notification, Post, Task, User and Wiki. Documents, time
|
|
9
|
+
> tracking and the webhook trigger are being added.
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
Follow the [community node installation guide](https://docs.n8n.io/integrations/community-nodes/installation/)
|
|
14
|
+
and enter `@weslink/n8n-nodes-kibi-connect` as the package name.
|
|
15
|
+
|
|
16
|
+
## Credentials
|
|
17
|
+
|
|
18
|
+
Create an API token in Kibi under **My Profile > Integrations** and grant it the scopes the
|
|
19
|
+
operations you plan to use need. Tokens cannot be edited afterwards — a missing scope means
|
|
20
|
+
issuing a new token.
|
|
21
|
+
|
|
22
|
+
The credential takes three fields:
|
|
23
|
+
|
|
24
|
+
| Field | Notes |
|
|
25
|
+
|---|---|
|
|
26
|
+
| Base URL | Your tenant's address, e.g. `https://acme.kibi.de`. No trailing slash, no `/api`. |
|
|
27
|
+
| API Token | The token itself. |
|
|
28
|
+
| Integration Slug | Only the trigger node needs it. Chosen when the token is created and immutable afterwards. |
|
|
29
|
+
|
|
30
|
+
The REST API also has to be switched on for the tenant, under **Administration > API**.
|
|
31
|
+
|
|
32
|
+
## Compatibility
|
|
33
|
+
|
|
34
|
+
Requires n8n 1.x and a Kibi Connect tenant with the REST API enabled.
|
|
35
|
+
|
|
36
|
+
## License
|
|
37
|
+
|
|
38
|
+
[MIT](LICENSE.md)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, Icon, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class KibiConnectApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
icon: Icon;
|
|
6
|
+
documentationUrl: string;
|
|
7
|
+
properties: INodeProperties[];
|
|
8
|
+
authenticate: IAuthenticateGeneric;
|
|
9
|
+
test: ICredentialTestRequest;
|
|
10
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KibiConnectApi = void 0;
|
|
4
|
+
class KibiConnectApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'kibiConnectApi';
|
|
7
|
+
this.displayName = 'Kibi Connect API';
|
|
8
|
+
this.icon = {
|
|
9
|
+
light: 'file:../icons/kibiConnect.svg',
|
|
10
|
+
dark: 'file:../icons/kibiConnect.dark.svg',
|
|
11
|
+
};
|
|
12
|
+
this.documentationUrl = 'https://github.com/weslinkde/n8n-nodes-kibi-connect#credentials';
|
|
13
|
+
this.properties = [
|
|
14
|
+
{
|
|
15
|
+
displayName: 'Base URL',
|
|
16
|
+
name: 'baseUrl',
|
|
17
|
+
type: 'string',
|
|
18
|
+
default: '',
|
|
19
|
+
required: true,
|
|
20
|
+
placeholder: 'https://acme.kibi.de',
|
|
21
|
+
description: 'The address of your Kibi Connect tenant. No trailing slash, and without /api — the node appends the API path itself',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
displayName: 'API Token',
|
|
25
|
+
name: 'apiToken',
|
|
26
|
+
type: 'string',
|
|
27
|
+
typeOptions: { password: true },
|
|
28
|
+
default: '',
|
|
29
|
+
required: true,
|
|
30
|
+
description: 'Create one in Kibi under My Profile > Integrations, and grant it the scopes the operations you plan to use need. Tokens cannot be edited afterwards — a missing scope means a new token',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
displayName: 'Integration Slug',
|
|
34
|
+
name: 'integrationSlug',
|
|
35
|
+
type: 'string',
|
|
36
|
+
default: '',
|
|
37
|
+
description: 'The slug chosen when the token was created. Only the trigger node needs it: to register its own webhook, and to skip the events this integration caused itself. Leave empty if the token has none',
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
this.authenticate = {
|
|
41
|
+
type: 'generic',
|
|
42
|
+
properties: {
|
|
43
|
+
headers: {
|
|
44
|
+
Authorization: '=Bearer {{$credentials?.apiToken}}',
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
this.test = {
|
|
49
|
+
request: {
|
|
50
|
+
baseURL: '={{$credentials.baseUrl}}/api/v1',
|
|
51
|
+
url: '/users',
|
|
52
|
+
method: 'GET',
|
|
53
|
+
qs: { limit: 1 },
|
|
54
|
+
},
|
|
55
|
+
rules: [
|
|
56
|
+
{
|
|
57
|
+
type: 'responseSuccessBody',
|
|
58
|
+
properties: {
|
|
59
|
+
key: 'error',
|
|
60
|
+
value: 'Insufficient scope',
|
|
61
|
+
message: 'The token works. It just does not carry the users:read scope this test uses — grant that scope, or ignore this if the operations you need are covered by the scopes it does have.',
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
type: 'responseSuccessBody',
|
|
66
|
+
properties: {
|
|
67
|
+
key: 'error',
|
|
68
|
+
value: 'API disabled',
|
|
69
|
+
message: 'The REST API is switched off for this tenant. A system administrator turns it on under Administration > API.',
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
type: 'responseSuccessBody',
|
|
74
|
+
properties: {
|
|
75
|
+
key: 'error',
|
|
76
|
+
value: 'IP not allowed',
|
|
77
|
+
message: "This n8n instance's IP address is not on the tenant's allow list. A system administrator maintains it under Administration > API.",
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.KibiConnectApi = KibiConnectApi;
|
|
85
|
+
//# sourceMappingURL=KibiConnectApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KibiConnectApi.credentials.js","sourceRoot":"","sources":["../../credentials/KibiConnectApi.credentials.ts"],"names":[],"mappings":";;;AAQA,MAAa,cAAc;IAA3B;QACC,SAAI,GAAG,gBAAgB,CAAC;QAExB,gBAAW,GAAG,kBAAkB,CAAC;QAEjC,SAAI,GAAS;YACZ,KAAK,EAAE,+BAA+B;YACtC,IAAI,EAAE,oCAAoC;SAC1C,CAAC;QAEF,qBAAgB,GAAG,iEAAiE,CAAC;QAErF,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,sBAAsB;gBACnC,WAAW,EACV,qHAAqH;aACtH;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EACV,yLAAyL;aAC1L;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EACV,mMAAmM;aACpM;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,oCAAoC;iBACnD;aACD;SACD,CAAC;QAMF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,kCAAkC;gBAC3C,GAAG,EAAE,QAAQ;gBACb,MAAM,EAAE,KAAK;gBACb,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;aAChB;YACD,KAAK,EAAE;gBACN;oBACC,IAAI,EAAE,qBAAqB;oBAC3B,UAAU,EAAE;wBACX,GAAG,EAAE,OAAO;wBACZ,KAAK,EAAE,oBAAoB;wBAC3B,OAAO,EACN,mLAAmL;qBACpL;iBACD;gBACD;oBACC,IAAI,EAAE,qBAAqB;oBAC3B,UAAU,EAAE;wBACX,GAAG,EAAE,OAAO;wBACZ,KAAK,EAAE,cAAc;wBACrB,OAAO,EACN,8GAA8G;qBAC/G;iBACD;gBACD;oBACC,IAAI,EAAE,qBAAqB;oBAC3B,UAAU,EAAE;wBACX,GAAG,EAAE,OAAO;wBACZ,KAAK,EAAE,gBAAgB;wBACvB,OAAO,EACN,mIAAmI;qBACpI;iBACD;aACD;SACD,CAAC;IACH,CAAC;CAAA;AA7FD,wCA6FC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<svg version="1.1" width="684" height="684" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
|
|
2
|
+
viewBox="-120 0 684 684" style="enable-background:new 0 0 1490.2 683.9;" xml:space="preserve">
|
|
3
|
+
<circle fill="#8B90F0" cx="102.4" cy="102.3" r="102.3"/>
|
|
4
|
+
<circle fill="#8B90F0" cx="102.4" cy="581.6" r="102.3"/>
|
|
5
|
+
<circle fill="#8B90F0" cx="342.1" cy="341.9" r="102.3"/>
|
|
6
|
+
<path fill="#8B90F0" d="M204.5,337.4c-0.1,1.6-0.1,3.2-0.1,4.8s0,3.2,0.1,4.7c2.5,73.4,62.5,132.2,136.4,132.6h1.9
|
|
7
|
+
c55.4,0.3,100.2,44.7,101.4,99.8v104.5h-98.3c-1.3,0.1-2.7,0.1-4.1,0.1c-55.4,0-100.5-43.9-102.2-98.9c0-1.2,0.1-2.3,0.1-3.5
|
|
8
|
+
s0-2.2-0.1-3.4c-1.8-73.2-60.7-132.1-133.8-134h-7C44,442.2,0,397.1,0,341.9s45.8-102.3,102.3-102.3h0.2
|
|
9
|
+
c74.1,0,134.5-58.6,137.2-132c0.1-1.8,0.1-3.5,0.1-5.3s0-3.5-0.1-5.2c1.4-27,13.2-51.3,31.6-68.8c17.9-17,41.9-27.7,68.4-28.2V0
|
|
10
|
+
h104.5v104.5h-0.1c-1.1,55.2-46,99.7-101.3,100.2h-1.9C267,205.2,207,263.9,204.5,337.4z"/>
|
|
11
|
+
<path fill="#8B90F0" d="M761.5,432.6L670,306.1v126.5h-85.9V32H670v239.8l85.9-125.4H856L751.8,289.6l107,143.1L761.5,432.6
|
|
12
|
+
L761.5,432.6z"/>
|
|
13
|
+
<path fill="#8B90F0" d="M881.7,69.8c0-28,23.5-51.5,51.5-51.5s51.5,23.5,51.5,51.5s-23.5,51.5-51.5,51.5S881.7,97.8,881.7,69.8z
|
|
14
|
+
M890.3,146.5h85.9v286.2h-85.9V146.5L890.3,146.5z"/>
|
|
15
|
+
<path fill="#8B90F0" d="M1347.1,289.6c0,85.3-61.8,151.1-136.8,151.1c-38.3,0-66.4-13.2-85.3-34.9v26.9h-85.9V32h85.9v141.4
|
|
16
|
+
c18.9-21.8,46.9-34.9,85.3-34.9C1285.3,138.5,1347.1,204.3,1347.1,289.6z M1261.2,289.6c0-42.9-28.6-69.8-68.1-69.8
|
|
17
|
+
s-68.1,26.9-68.1,69.8s28.6,69.8,68.1,69.8S1261.2,332.5,1261.2,289.6z"/>
|
|
18
|
+
<path fill="#8B90F0" d="M1387.2,69.8c0-28,23.5-51.5,51.5-51.5s51.5,23.5,51.5,51.5s-23.5,51.5-51.5,51.5S1387.2,97.8,1387.2,69.8z
|
|
19
|
+
M1395.7,146.5h85.9v286.2h-85.9V146.5L1395.7,146.5z"/>
|
|
20
|
+
<path fill="#8B90F0" d="M577,596c0-34,25.8-60,60.5-60c22.5,0,41.9,11.5,50.1,29.4l-9.4,5.5c-6.7-14.5-22.3-23.9-40.7-23.9
|
|
21
|
+
c-27.8,0-48.8,21.6-48.8,49s20.9,49,48.8,49c18.6,0,33.8-9.7,41.4-23.9l9.7,5.8c-9.2,17.7-28.5,29.2-51.1,29.2
|
|
22
|
+
C602.8,656.1,577,630.1,577,596z"/>
|
|
23
|
+
<path fill="#8B90F0" d="M704.9,596c0-34,26.9-60,60.5-60s60.3,26,60.3,60s-26.9,60-60.3,60S704.9,630.1,704.9,596z M813.9,596
|
|
24
|
+
c0-27.4-21.2-49-48.5-49s-48.8,21.6-48.8,49s21.4,49,48.8,49S813.9,623.4,813.9,596L813.9,596z"/>
|
|
25
|
+
<path fill="#8B90F0" d="M950.5,582v71.5h-11.7V582c0-21.2-12.2-35-33.8-35s-40.2,14.7-40.2,45.8v60.7h-11.5v-115h11.5v21.8
|
|
26
|
+
c8.7-17,23.5-24.4,41.2-24.4C933.3,536,950.5,554.2,950.5,582z"/>
|
|
27
|
+
<path fill="#8B90F0" d="M1080.3,582v71.5h-11.7V582c0-21.2-12.2-35-33.8-35s-40.2,14.7-40.2,45.8v60.7H983v-115h11.5v21.8
|
|
28
|
+
c8.7-17,23.5-24.4,41.2-24.4C1063,536,1080.3,554.2,1080.3,582z"/>
|
|
29
|
+
<path fill="#8B90F0" d="M1221.3,596.5c0,1.8-0.2,3.7-0.2,5.5h-104.2c2.8,26,22.5,43,48.8,43c18.9,0,33.1-8.7,39.8-20.9l10.1,6
|
|
30
|
+
c-9.4,15.6-27.4,26-50.1,26c-35.4,0-60.5-25.3-60.5-60s24.4-60,59.6-60S1221.3,565,1221.3,596.5L1221.3,596.5z M1116.8,590.7h92.5
|
|
31
|
+
c-2.5-28.1-22.3-43.7-44.8-43.7C1138.2,547,1119.1,565.2,1116.8,590.7z"/>
|
|
32
|
+
<path fill="#8B90F0" d="M1240.3,596c0-34,25.8-60,60.5-60c22.5,0,41.9,11.5,50.1,29.4l-9.4,5.5c-6.7-14.5-22.3-23.9-40.7-23.9
|
|
33
|
+
c-27.8,0-48.8,21.6-48.8,49s20.9,49,48.8,49c18.6,0,33.8-9.7,41.4-23.9l9.7,5.8c-9.2,17.7-28.5,29.2-51.1,29.2
|
|
34
|
+
C1266.1,656.1,1240.3,630.1,1240.3,596z"/>
|
|
35
|
+
<path fill="#8B90F0" d="M1401.8,549.8v74.8c0,20.2,10.8,20.7,34.3,18.6v10.3c-30.1,4.6-46-2.8-46-29v-74.8h-25.3v-11.3h25.3v-28.8
|
|
36
|
+
l11.7-3.5v32.2h34.3v11.3H1401.8z"/>
|
|
37
|
+
</svg>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<svg version="1.1" width="684" height="684" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
|
|
2
|
+
viewBox="-120 0 684 684" style="enable-background:new 0 0 1490.2 683.9;" xml:space="preserve">
|
|
3
|
+
<circle fill="#5158DD" cx="102.4" cy="102.3" r="102.3"/>
|
|
4
|
+
<circle fill="#5158DD" cx="102.4" cy="581.6" r="102.3"/>
|
|
5
|
+
<circle fill="#5158DD" cx="342.1" cy="341.9" r="102.3"/>
|
|
6
|
+
<path fill="#5158DD" d="M204.5,337.4c-0.1,1.6-0.1,3.2-0.1,4.8s0,3.2,0.1,4.7c2.5,73.4,62.5,132.2,136.4,132.6h1.9
|
|
7
|
+
c55.4,0.3,100.2,44.7,101.4,99.8v104.5h-98.3c-1.3,0.1-2.7,0.1-4.1,0.1c-55.4,0-100.5-43.9-102.2-98.9c0-1.2,0.1-2.3,0.1-3.5
|
|
8
|
+
s0-2.2-0.1-3.4c-1.8-73.2-60.7-132.1-133.8-134h-7C44,442.2,0,397.1,0,341.9s45.8-102.3,102.3-102.3h0.2
|
|
9
|
+
c74.1,0,134.5-58.6,137.2-132c0.1-1.8,0.1-3.5,0.1-5.3s0-3.5-0.1-5.2c1.4-27,13.2-51.3,31.6-68.8c17.9-17,41.9-27.7,68.4-28.2V0
|
|
10
|
+
h104.5v104.5h-0.1c-1.1,55.2-46,99.7-101.3,100.2h-1.9C267,205.2,207,263.9,204.5,337.4z"/>
|
|
11
|
+
<path fill="#5158DD" d="M761.5,432.6L670,306.1v126.5h-85.9V32H670v239.8l85.9-125.4H856L751.8,289.6l107,143.1L761.5,432.6
|
|
12
|
+
L761.5,432.6z"/>
|
|
13
|
+
<path fill="#5158DD" d="M881.7,69.8c0-28,23.5-51.5,51.5-51.5s51.5,23.5,51.5,51.5s-23.5,51.5-51.5,51.5S881.7,97.8,881.7,69.8z
|
|
14
|
+
M890.3,146.5h85.9v286.2h-85.9V146.5L890.3,146.5z"/>
|
|
15
|
+
<path fill="#5158DD" d="M1347.1,289.6c0,85.3-61.8,151.1-136.8,151.1c-38.3,0-66.4-13.2-85.3-34.9v26.9h-85.9V32h85.9v141.4
|
|
16
|
+
c18.9-21.8,46.9-34.9,85.3-34.9C1285.3,138.5,1347.1,204.3,1347.1,289.6z M1261.2,289.6c0-42.9-28.6-69.8-68.1-69.8
|
|
17
|
+
s-68.1,26.9-68.1,69.8s28.6,69.8,68.1,69.8S1261.2,332.5,1261.2,289.6z"/>
|
|
18
|
+
<path fill="#5158DD" d="M1387.2,69.8c0-28,23.5-51.5,51.5-51.5s51.5,23.5,51.5,51.5s-23.5,51.5-51.5,51.5S1387.2,97.8,1387.2,69.8z
|
|
19
|
+
M1395.7,146.5h85.9v286.2h-85.9V146.5L1395.7,146.5z"/>
|
|
20
|
+
<path fill="#5158DD" d="M577,596c0-34,25.8-60,60.5-60c22.5,0,41.9,11.5,50.1,29.4l-9.4,5.5c-6.7-14.5-22.3-23.9-40.7-23.9
|
|
21
|
+
c-27.8,0-48.8,21.6-48.8,49s20.9,49,48.8,49c18.6,0,33.8-9.7,41.4-23.9l9.7,5.8c-9.2,17.7-28.5,29.2-51.1,29.2
|
|
22
|
+
C602.8,656.1,577,630.1,577,596z"/>
|
|
23
|
+
<path fill="#5158DD" d="M704.9,596c0-34,26.9-60,60.5-60s60.3,26,60.3,60s-26.9,60-60.3,60S704.9,630.1,704.9,596z M813.9,596
|
|
24
|
+
c0-27.4-21.2-49-48.5-49s-48.8,21.6-48.8,49s21.4,49,48.8,49S813.9,623.4,813.9,596L813.9,596z"/>
|
|
25
|
+
<path fill="#5158DD" d="M950.5,582v71.5h-11.7V582c0-21.2-12.2-35-33.8-35s-40.2,14.7-40.2,45.8v60.7h-11.5v-115h11.5v21.8
|
|
26
|
+
c8.7-17,23.5-24.4,41.2-24.4C933.3,536,950.5,554.2,950.5,582z"/>
|
|
27
|
+
<path fill="#5158DD" d="M1080.3,582v71.5h-11.7V582c0-21.2-12.2-35-33.8-35s-40.2,14.7-40.2,45.8v60.7H983v-115h11.5v21.8
|
|
28
|
+
c8.7-17,23.5-24.4,41.2-24.4C1063,536,1080.3,554.2,1080.3,582z"/>
|
|
29
|
+
<path fill="#5158DD" d="M1221.3,596.5c0,1.8-0.2,3.7-0.2,5.5h-104.2c2.8,26,22.5,43,48.8,43c18.9,0,33.1-8.7,39.8-20.9l10.1,6
|
|
30
|
+
c-9.4,15.6-27.4,26-50.1,26c-35.4,0-60.5-25.3-60.5-60s24.4-60,59.6-60S1221.3,565,1221.3,596.5L1221.3,596.5z M1116.8,590.7h92.5
|
|
31
|
+
c-2.5-28.1-22.3-43.7-44.8-43.7C1138.2,547,1119.1,565.2,1116.8,590.7z"/>
|
|
32
|
+
<path fill="#5158DD" d="M1240.3,596c0-34,25.8-60,60.5-60c22.5,0,41.9,11.5,50.1,29.4l-9.4,5.5c-6.7-14.5-22.3-23.9-40.7-23.9
|
|
33
|
+
c-27.8,0-48.8,21.6-48.8,49s20.9,49,48.8,49c18.6,0,33.8-9.7,41.4-23.9l9.7,5.8c-9.2,17.7-28.5,29.2-51.1,29.2
|
|
34
|
+
C1266.1,656.1,1240.3,630.1,1240.3,596z"/>
|
|
35
|
+
<path fill="#5158DD" d="M1401.8,549.8v74.8c0,20.2,10.8,20.7,34.3,18.6v10.3c-30.1,4.6-46-2.8-46-29v-74.8h-25.3v-11.3h25.3v-28.8
|
|
36
|
+
l11.7-3.5v32.2h34.3v11.3H1401.8z"/>
|
|
37
|
+
</svg>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type INodeType, type INodeTypeDescription } from 'n8n-workflow';
|
|
2
|
+
import { getConversations } from './listSearch/getConversations';
|
|
3
|
+
import { getUsers } from './listSearch/getUsers';
|
|
4
|
+
export declare class KibiConnect implements INodeType {
|
|
5
|
+
description: INodeTypeDescription;
|
|
6
|
+
methods: {
|
|
7
|
+
listSearch: {
|
|
8
|
+
getUsers: typeof getUsers;
|
|
9
|
+
getConversations: typeof getConversations;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KibiConnect = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const getConversations_1 = require("./listSearch/getConversations");
|
|
6
|
+
const getUsers_1 = require("./listSearch/getUsers");
|
|
7
|
+
const calendarEvent_1 = require("./resources/calendarEvent");
|
|
8
|
+
const chat_1 = require("./resources/chat");
|
|
9
|
+
const notification_1 = require("./resources/notification");
|
|
10
|
+
const post_1 = require("./resources/post");
|
|
11
|
+
const task_1 = require("./resources/task");
|
|
12
|
+
const user_1 = require("./resources/user");
|
|
13
|
+
const wiki_1 = require("./resources/wiki");
|
|
14
|
+
class KibiConnect {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.description = {
|
|
17
|
+
displayName: 'Kibi Connect',
|
|
18
|
+
name: 'kibiConnect',
|
|
19
|
+
icon: {
|
|
20
|
+
light: 'file:../../icons/kibiConnect.svg',
|
|
21
|
+
dark: 'file:../../icons/kibiConnect.dark.svg',
|
|
22
|
+
},
|
|
23
|
+
group: ['input'],
|
|
24
|
+
version: 1,
|
|
25
|
+
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
26
|
+
description: 'Read and write chat, posts, wiki pages, tasks and calendar events in Kibi Connect',
|
|
27
|
+
defaults: {
|
|
28
|
+
name: 'Kibi Connect',
|
|
29
|
+
},
|
|
30
|
+
usableAsTool: true,
|
|
31
|
+
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
32
|
+
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
33
|
+
credentials: [
|
|
34
|
+
{
|
|
35
|
+
name: 'kibiConnectApi',
|
|
36
|
+
required: true,
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
requestDefaults: {
|
|
40
|
+
baseURL: '={{$credentials.baseUrl}}/api/v1',
|
|
41
|
+
headers: {
|
|
42
|
+
Accept: 'application/json',
|
|
43
|
+
'Content-Type': 'application/json',
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
properties: [
|
|
47
|
+
{
|
|
48
|
+
displayName: 'Resource',
|
|
49
|
+
name: 'resource',
|
|
50
|
+
type: 'options',
|
|
51
|
+
noDataExpression: true,
|
|
52
|
+
options: [
|
|
53
|
+
{
|
|
54
|
+
name: 'Calendar Event',
|
|
55
|
+
value: 'calendarEvent',
|
|
56
|
+
description: 'Appointments and meetings',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'Chat',
|
|
60
|
+
value: 'chat',
|
|
61
|
+
description: 'Send and read messages, react to them',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'Notification',
|
|
65
|
+
value: 'notification',
|
|
66
|
+
description: "Notify people through Kibi's own delivery rules",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'Post',
|
|
70
|
+
value: 'post',
|
|
71
|
+
description: 'News and announcements in the feed',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'Task',
|
|
75
|
+
value: 'task',
|
|
76
|
+
description: 'Work items on a board',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: 'User',
|
|
80
|
+
value: 'user',
|
|
81
|
+
description: 'Look people up in the employee directory',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'Wiki Page',
|
|
85
|
+
value: 'wiki',
|
|
86
|
+
description: 'Knowledge base pages',
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
default: 'chat',
|
|
90
|
+
},
|
|
91
|
+
...calendarEvent_1.calendarEventDescription,
|
|
92
|
+
...chat_1.chatDescription,
|
|
93
|
+
...notification_1.notificationDescription,
|
|
94
|
+
...post_1.postDescription,
|
|
95
|
+
...task_1.taskDescription,
|
|
96
|
+
...user_1.userDescription,
|
|
97
|
+
...wiki_1.wikiDescription,
|
|
98
|
+
],
|
|
99
|
+
};
|
|
100
|
+
this.methods = {
|
|
101
|
+
listSearch: {
|
|
102
|
+
getUsers: getUsers_1.getUsers,
|
|
103
|
+
getConversations: getConversations_1.getConversations,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.KibiConnect = KibiConnect;
|
|
109
|
+
//# sourceMappingURL=KibiConnect.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KibiConnect.node.js","sourceRoot":"","sources":["../../../nodes/KibiConnect/KibiConnect.node.ts"],"names":[],"mappings":";;;AAAA,+CAA8F;AAE9F,oEAAiE;AACjE,oDAAiD;AACjD,6DAAqE;AACrE,2CAAmD;AACnD,2DAAmE;AACnE,2CAAmD;AACnD,2CAAmD;AACnD,2CAAmD;AACnD,2CAAmD;AAEnD,MAAa,WAAW;IAAxB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,cAAc;YAC3B,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE;gBACL,KAAK,EAAE,kCAAkC;gBACzC,IAAI,EAAE,uCAAuC;aAC7C;YACD,KAAK,EAAE,CAAC,OAAO,CAAC;YAChB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8DAA8D;YACxE,WAAW,EAAE,mFAAmF;YAChG,QAAQ,EAAE;gBACT,IAAI,EAAE,cAAc;aACpB;YACD,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,WAAW,EAAE;gBACZ;oBACC,IAAI,EAAE,gBAAgB;oBACtB,QAAQ,EAAE,IAAI;iBACd;aACD;YAGD,eAAe,EAAE;gBAChB,OAAO,EAAE,kCAAkC;gBAC3C,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;4BACC,IAAI,EAAE,gBAAgB;4BACtB,KAAK,EAAE,eAAe;4BACtB,WAAW,EAAE,2BAA2B;yBACxC;wBACD;4BACC,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,MAAM;4BACb,WAAW,EAAE,uCAAuC;yBACpD;wBACD;4BACC,IAAI,EAAE,cAAc;4BACpB,KAAK,EAAE,cAAc;4BACrB,WAAW,EAAE,iDAAiD;yBAC9D;wBACD;4BACC,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,MAAM;4BACb,WAAW,EAAE,oCAAoC;yBACjD;wBACD;4BACC,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,MAAM;4BACb,WAAW,EAAE,uBAAuB;yBACpC;wBACD;4BACC,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,MAAM;4BACb,WAAW,EAAE,0CAA0C;yBACvD;wBACD;4BACC,IAAI,EAAE,WAAW;4BACjB,KAAK,EAAE,MAAM;4BACb,WAAW,EAAE,sBAAsB;yBACnC;qBACD;oBACD,OAAO,EAAE,MAAM;iBACf;gBACD,GAAG,wCAAwB;gBAC3B,GAAG,sBAAe;gBAClB,GAAG,sCAAuB;gBAC1B,GAAG,sBAAe;gBAClB,GAAG,sBAAe;gBAClB,GAAG,sBAAe;gBAClB,GAAG,sBAAe;aAClB;SACD,CAAC;QAKF,YAAO,GAAG;YACT,UAAU,EAAE;gBACX,QAAQ,EAAR,mBAAQ;gBACR,gBAAgB,EAAhB,mCAAgB;aAChB;SACD,CAAC;IACH,CAAC;CAAA;AAjGD,kCAiGC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"node": "@weslink/n8n-nodes-kibi-connect.kibiConnect",
|
|
3
|
+
"nodeVersion": "1.0",
|
|
4
|
+
"codexVersion": "1.0",
|
|
5
|
+
"categories": ["Communication", "Productivity"],
|
|
6
|
+
"resources": {
|
|
7
|
+
"credentialDocumentation": [
|
|
8
|
+
{
|
|
9
|
+
"url": "https://github.com/weslinkde/n8n-nodes-kibi-connect#credentials"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"primaryDocumentation": [
|
|
13
|
+
{
|
|
14
|
+
"url": "https://github.com/weslinkde/n8n-nodes-kibi-connect#readme"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getConversations = getConversations;
|
|
4
|
+
const transport_1 = require("../shared/transport");
|
|
5
|
+
async function getConversations(filter, paginationToken) {
|
|
6
|
+
const page = paginationToken ? Number(paginationToken) : 1;
|
|
7
|
+
const response = (await transport_1.kibiApiRequest.call(this, 'GET', '/chat/conversations', undefined, {
|
|
8
|
+
limit: 50,
|
|
9
|
+
page,
|
|
10
|
+
}));
|
|
11
|
+
const needle = filter === null || filter === void 0 ? void 0 : filter.toLowerCase();
|
|
12
|
+
const results = response.data
|
|
13
|
+
.filter((conversation) => {
|
|
14
|
+
var _a;
|
|
15
|
+
if (!needle)
|
|
16
|
+
return true;
|
|
17
|
+
return ((_a = conversation.name) !== null && _a !== void 0 ? _a : '').toLowerCase().includes(needle);
|
|
18
|
+
})
|
|
19
|
+
.map((conversation) => {
|
|
20
|
+
var _a;
|
|
21
|
+
return ({
|
|
22
|
+
name: ((_a = conversation.name) !== null && _a !== void 0 ? _a : `Conversation ${conversation.id}`) +
|
|
23
|
+
(conversation.type === 'group' ? ' (group)' : ''),
|
|
24
|
+
value: conversation.id,
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
const meta = response.meta;
|
|
28
|
+
return {
|
|
29
|
+
results,
|
|
30
|
+
paginationToken: meta && meta.current_page < meta.last_page ? String(meta.current_page + 1) : undefined,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=getConversations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getConversations.js","sourceRoot":"","sources":["../../../../nodes/KibiConnect/listSearch/getConversations.ts"],"names":[],"mappings":";;AA2BA,4CAiCC;AAzDD,mDAAqD;AAwB9C,KAAK,UAAU,gBAAgB,CAErC,MAAe,EACf,eAAwB;IAExB,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAG,CAAC,MAAM,0BAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE;QAC1F,KAAK,EAAE,EAAE;QACT,IAAI;KACJ,CAAC,CAAoC,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,EAAE,CAAC;IAErC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI;SAC3B,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE;;QACxB,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,CAAC,MAAA,YAAY,CAAC,IAAI,mCAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;;QAAC,OAAA,CAAC;YACvB,IAAI,EACH,CAAC,MAAA,YAAY,CAAC,IAAI,mCAAI,gBAAgB,YAAY,CAAC,EAAE,EAAE,CAAC;gBACxD,CAAC,YAAY,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,KAAK,EAAE,YAAY,CAAC,EAAE;SACtB,CAAC,CAAA;KAAA,CAAC,CAAC;IAEL,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAE3B,OAAO;QACN,OAAO;QACP,eAAe,EACd,IAAI,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;KACvF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getUsers = getUsers;
|
|
4
|
+
const transport_1 = require("../shared/transport");
|
|
5
|
+
async function getUsers(filter, paginationToken) {
|
|
6
|
+
const page = paginationToken ? Number(paginationToken) : 1;
|
|
7
|
+
const response = (await transport_1.kibiApiRequest.call(this, 'GET', '/users', undefined, {
|
|
8
|
+
...(filter ? { search: filter } : {}),
|
|
9
|
+
limit: 50,
|
|
10
|
+
page,
|
|
11
|
+
}));
|
|
12
|
+
const meta = response.meta;
|
|
13
|
+
return {
|
|
14
|
+
results: response.data.map((user) => {
|
|
15
|
+
var _a;
|
|
16
|
+
return ({
|
|
17
|
+
name: [(_a = user.name) !== null && _a !== void 0 ? _a : user.id, user.department, user.position]
|
|
18
|
+
.filter((part) => part !== null && part !== undefined && part !== '')
|
|
19
|
+
.join(' — '),
|
|
20
|
+
value: user.id,
|
|
21
|
+
});
|
|
22
|
+
}),
|
|
23
|
+
paginationToken: meta && meta.current_page < meta.last_page ? String(meta.current_page + 1) : undefined,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=getUsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getUsers.js","sourceRoot":"","sources":["../../../../nodes/KibiConnect/listSearch/getUsers.ts"],"names":[],"mappings":";;AAoBA,4BA2BC;AA5CD,mDAAqD;AAiB9C,KAAK,UAAU,QAAQ,CAE7B,MAAe,EACf,eAAwB;IAExB,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAG,CAAC,MAAM,0BAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE;QAC7E,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,KAAK,EAAE,EAAE;QACT,IAAI;KACJ,CAAC,CAA4B,CAAC;IAE/B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAE3B,OAAO;QACN,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;;YAAC,OAAA,CAAC;gBAGrC,IAAI,EAAE,CAAC,MAAA,IAAI,CAAC,IAAI,mCAAI,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;qBAC1D,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC;qBACpE,IAAI,CAAC,KAAK,CAAC;gBACb,KAAK,EAAE,IAAI,CAAC,EAAE;aACd,CAAC,CAAA;SAAA,CAAC;QACH,eAAe,EACd,IAAI,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;KACvF,CAAC;AACH,CAAC"}
|