n8n-nodes-smartprofiling 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 +21 -0
- package/README.md +283 -0
- package/dist/credentials/SmartProfilingApi.credentials.d.ts +10 -0
- package/dist/credentials/SmartProfilingApi.credentials.js +48 -0
- package/dist/credentials/SmartProfilingApi.credentials.js.map +1 -0
- package/dist/credentials/smartprofiling.svg +10 -0
- package/dist/icons/smartprofiling.dark.svg +10 -0
- package/dist/icons/smartprofiling.svg +10 -0
- package/dist/nodes/SmartProfiling/SmartProfiling.node.d.ts +4 -0
- package/dist/nodes/SmartProfiling/SmartProfiling.node.js +90 -0
- package/dist/nodes/SmartProfiling/SmartProfiling.node.js.map +1 -0
- package/dist/nodes/SmartProfiling/resources/channel/index.d.ts +2 -0
- package/dist/nodes/SmartProfiling/resources/channel/index.js +96 -0
- package/dist/nodes/SmartProfiling/resources/channel/index.js.map +1 -0
- package/dist/nodes/SmartProfiling/resources/chapters/index.d.ts +2 -0
- package/dist/nodes/SmartProfiling/resources/chapters/index.js +97 -0
- package/dist/nodes/SmartProfiling/resources/chapters/index.js.map +1 -0
- package/dist/nodes/SmartProfiling/resources/chat/index.d.ts +2 -0
- package/dist/nodes/SmartProfiling/resources/chat/index.js +88 -0
- package/dist/nodes/SmartProfiling/resources/chat/index.js.map +1 -0
- package/dist/nodes/SmartProfiling/resources/playlist/index.d.ts +2 -0
- package/dist/nodes/SmartProfiling/resources/playlist/index.js +58 -0
- package/dist/nodes/SmartProfiling/resources/playlist/index.js.map +1 -0
- package/dist/nodes/SmartProfiling/resources/summarize/index.d.ts +2 -0
- package/dist/nodes/SmartProfiling/resources/summarize/index.js +135 -0
- package/dist/nodes/SmartProfiling/resources/summarize/index.js.map +1 -0
- package/dist/nodes/SmartProfiling/resources/transcript/index.d.ts +2 -0
- package/dist/nodes/SmartProfiling/resources/transcript/index.js +130 -0
- package/dist/nodes/SmartProfiling/resources/transcript/index.js.map +1 -0
- package/dist/nodes/SmartProfiling/shared/descriptions.d.ts +9 -0
- package/dist/nodes/SmartProfiling/shared/descriptions.js +99 -0
- package/dist/nodes/SmartProfiling/shared/descriptions.js.map +1 -0
- package/dist/nodes/SmartProfiling/smartprofiling.dark.svg +10 -0
- package/dist/nodes/SmartProfiling/smartprofiling.svg +10 -0
- package/dist/package.json +57 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +57 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Smart Profiling
|
|
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.
|
package/README.md
ADDED
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
# n8n-nodes-smartprofiling
|
|
2
|
+
|
|
3
|
+
> **Extract YouTube transcripts, generate AI summaries, and chat with videos** - all directly in your n8n workflows.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/n8n-nodes-smartprofiling)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Quick Start (2 minutes)
|
|
11
|
+
|
|
12
|
+
### Step 1: Install the Node
|
|
13
|
+
|
|
14
|
+
1. Open your n8n instance
|
|
15
|
+
2. Go to **Settings** (gear icon) → **Community Nodes**
|
|
16
|
+
3. Click **Install a community node**
|
|
17
|
+
4. Paste: `n8n-nodes-smartprofiling`
|
|
18
|
+
5. Click **Install**
|
|
19
|
+
|
|
20
|
+
### Step 2: Get Your API Key
|
|
21
|
+
|
|
22
|
+
1. Go to [yttapi.com/signup](https://yttapi.com/signup)
|
|
23
|
+
2. Create a free account
|
|
24
|
+
3. Go to **Dashboard** → **API Keys**
|
|
25
|
+
4. Click **Create API Key**
|
|
26
|
+
5. Copy your key (starts with `ytt_`)
|
|
27
|
+
|
|
28
|
+
### Step 3: Add Credentials in n8n
|
|
29
|
+
|
|
30
|
+
1. In n8n, go to **Credentials** → **Add Credential**
|
|
31
|
+
2. Search for **Smart Profiling API**
|
|
32
|
+
3. Paste your API key
|
|
33
|
+
4. Click **Save**
|
|
34
|
+
|
|
35
|
+
**Done!** You're ready to use the node.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## What Can You Do?
|
|
40
|
+
|
|
41
|
+
| Feature | Description | Use Case |
|
|
42
|
+
|---------|-------------|----------|
|
|
43
|
+
| **Transcripts** | Extract captions from any YouTube video | Content repurposing, SEO |
|
|
44
|
+
| **Summarize** | AI-powered video summaries | Newsletter digests, research |
|
|
45
|
+
| **Chat** | Ask questions about video content | Customer support, Q&A bots |
|
|
46
|
+
| **Chapters** | Auto-generate timestamps | YouTube descriptions |
|
|
47
|
+
| **Channel** | Get all videos from a channel | Bulk processing, monitoring |
|
|
48
|
+
| **Playlist** | Get videos from a playlist | Course processing, archives |
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Step-by-Step Examples
|
|
53
|
+
|
|
54
|
+
### Example 1: Extract a Transcript
|
|
55
|
+
|
|
56
|
+
**Goal:** Get the transcript of a YouTube video
|
|
57
|
+
|
|
58
|
+
1. Add a **Smart Profiling** node to your workflow
|
|
59
|
+
2. Set **Resource** → `Transcript`
|
|
60
|
+
3. Set **Operation** → `Get Single`
|
|
61
|
+
4. Enter the **Video ID**: `dQw4w9WgXcQ` (or paste full URL)
|
|
62
|
+
5. Choose **Format**: `text` or `json`
|
|
63
|
+
6. Execute!
|
|
64
|
+
|
|
65
|
+
**Output:**
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"transcript": "Never gonna give you up, never gonna let you down...",
|
|
69
|
+
"videoId": "dQw4w9WgXcQ",
|
|
70
|
+
"language": "en"
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
### Example 2: Summarize a Video
|
|
77
|
+
|
|
78
|
+
**Goal:** Get an AI summary of a video
|
|
79
|
+
|
|
80
|
+
1. Add a **Smart Profiling** node
|
|
81
|
+
2. Set **Resource** → `Summarize`
|
|
82
|
+
3. Set **Operation** → `Generate Summary`
|
|
83
|
+
4. Enter the **Video ID**
|
|
84
|
+
5. Choose **Summary Type**:
|
|
85
|
+
- `brief` - 2-3 sentences
|
|
86
|
+
- `detailed` - Full analysis with key points
|
|
87
|
+
- `bullets` - Bullet point list
|
|
88
|
+
- `takeaways` - Key learnings
|
|
89
|
+
|
|
90
|
+
**Output:**
|
|
91
|
+
```json
|
|
92
|
+
{
|
|
93
|
+
"summary": "This video explains the basics of...",
|
|
94
|
+
"videoId": "abc123",
|
|
95
|
+
"type": "brief"
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
### Example 3: Chat with a Video
|
|
102
|
+
|
|
103
|
+
**Goal:** Ask questions about video content
|
|
104
|
+
|
|
105
|
+
1. Add a **Smart Profiling** node
|
|
106
|
+
2. Set **Resource** → `Chat`
|
|
107
|
+
3. Set **Operation** → `Ask Question`
|
|
108
|
+
4. Enter the **Video ID**
|
|
109
|
+
5. Type your **Question**: "What are the main topics discussed?"
|
|
110
|
+
|
|
111
|
+
**Output:**
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"answer": "The main topics discussed are...",
|
|
115
|
+
"videoId": "abc123"
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
### Example 4: Get Channel Videos
|
|
122
|
+
|
|
123
|
+
**Goal:** Get all videos from a YouTube channel
|
|
124
|
+
|
|
125
|
+
1. Add a **Smart Profiling** node
|
|
126
|
+
2. Set **Resource** → `Channel`
|
|
127
|
+
3. Set **Operation** → `Get Videos`
|
|
128
|
+
4. Enter the **Channel ID or Handle**: `@mkbhd` or `UCBJycsmduvYEL83R_U4JriQ`
|
|
129
|
+
5. Set **Limit**: `50` (max videos to return)
|
|
130
|
+
|
|
131
|
+
**Output:** Array of video objects with IDs, titles, thumbnails, etc.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Workflow Templates
|
|
136
|
+
|
|
137
|
+
### Template 1: Daily YouTube Digest
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
Schedule Trigger (Daily)
|
|
141
|
+
↓
|
|
142
|
+
Smart Profiling (Channel → Get Videos)
|
|
143
|
+
↓
|
|
144
|
+
Smart Profiling (Summarize each video)
|
|
145
|
+
↓
|
|
146
|
+
Send Email / Slack / Notion
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Template 2: Video Q&A Bot
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
Webhook (receives question)
|
|
153
|
+
↓
|
|
154
|
+
Smart Profiling (Chat → Ask Question)
|
|
155
|
+
↓
|
|
156
|
+
Respond to Webhook
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Template 3: Bulk Transcript Export
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
Smart Profiling (Playlist → Get Videos)
|
|
163
|
+
↓
|
|
164
|
+
Loop Over Items
|
|
165
|
+
↓
|
|
166
|
+
Smart Profiling (Transcript → Get Single)
|
|
167
|
+
↓
|
|
168
|
+
Google Sheets / Airtable / Database
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## API Reference
|
|
174
|
+
|
|
175
|
+
### Resources & Operations
|
|
176
|
+
|
|
177
|
+
#### Transcript
|
|
178
|
+
| Operation | Description |
|
|
179
|
+
|-----------|-------------|
|
|
180
|
+
| Get Single | Extract transcript from one video |
|
|
181
|
+
| Get Bulk | Extract transcripts from multiple videos |
|
|
182
|
+
|
|
183
|
+
#### Summarize
|
|
184
|
+
| Operation | Description |
|
|
185
|
+
|-----------|-------------|
|
|
186
|
+
| Generate Summary | AI summary (brief/detailed/bullets/takeaways) |
|
|
187
|
+
|
|
188
|
+
#### Chat
|
|
189
|
+
| Operation | Description |
|
|
190
|
+
|-----------|-------------|
|
|
191
|
+
| Ask Question | Ask a question about video content |
|
|
192
|
+
|
|
193
|
+
#### Chapter
|
|
194
|
+
| Operation | Description |
|
|
195
|
+
|-----------|-------------|
|
|
196
|
+
| Generate Chapters | Auto-generate timestamps |
|
|
197
|
+
|
|
198
|
+
#### Channel
|
|
199
|
+
| Operation | Description |
|
|
200
|
+
|-----------|-------------|
|
|
201
|
+
| Get Videos | Get all videos from channel |
|
|
202
|
+
| Get Shorts | Get shorts from channel |
|
|
203
|
+
| Get Playlists | Get playlists from channel |
|
|
204
|
+
|
|
205
|
+
#### Playlist
|
|
206
|
+
| Operation | Description |
|
|
207
|
+
|-----------|-------------|
|
|
208
|
+
| Get Videos | Get all videos in a playlist |
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Supported Formats
|
|
213
|
+
|
|
214
|
+
### Transcript Formats
|
|
215
|
+
- `json` - Structured JSON with timestamps
|
|
216
|
+
- `text` - Plain text
|
|
217
|
+
- `srt` - SubRip subtitle format
|
|
218
|
+
- `vtt` - WebVTT subtitle format
|
|
219
|
+
|
|
220
|
+
### Summary Types
|
|
221
|
+
- `brief` - 2-3 sentence summary
|
|
222
|
+
- `detailed` - Comprehensive with key points
|
|
223
|
+
- `bullets` - Bullet point list
|
|
224
|
+
- `takeaways` - Key learnings and action items
|
|
225
|
+
|
|
226
|
+
### Chapter Formats
|
|
227
|
+
- `json` - Structured data
|
|
228
|
+
- `youtube` - Ready for YouTube description
|
|
229
|
+
- `markdown` - Markdown formatted
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Troubleshooting
|
|
234
|
+
|
|
235
|
+
### "Node not appearing in search"
|
|
236
|
+
|
|
237
|
+
1. Go to **Settings** → **Community Nodes**
|
|
238
|
+
2. Check if `n8n-nodes-smartprofiling` shows version `0.1.0`
|
|
239
|
+
3. If not, click **Update** or uninstall/reinstall
|
|
240
|
+
4. Hard refresh browser: `Ctrl+Shift+R` (Windows) or `Cmd+Shift+R` (Mac)
|
|
241
|
+
|
|
242
|
+
### "Invalid API Key"
|
|
243
|
+
|
|
244
|
+
1. Make sure your key starts with `ytt_`
|
|
245
|
+
2. Check for extra spaces when copying
|
|
246
|
+
3. Verify key is active at [yttapi.com/dashboard](https://yttapi.com/dashboard)
|
|
247
|
+
|
|
248
|
+
### "Video not found"
|
|
249
|
+
|
|
250
|
+
1. Check if video is public (not private/unlisted)
|
|
251
|
+
2. Verify the video ID is correct
|
|
252
|
+
3. Try pasting the full YouTube URL instead
|
|
253
|
+
|
|
254
|
+
### "Rate limit exceeded"
|
|
255
|
+
|
|
256
|
+
1. Check your usage at [yttapi.com/dashboard](https://yttapi.com/dashboard)
|
|
257
|
+
2. Upgrade your plan if needed
|
|
258
|
+
3. Add delays between requests in bulk operations
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## Pricing
|
|
263
|
+
|
|
264
|
+
| Plan | Credits/Month | Best For |
|
|
265
|
+
|------|---------------|----------|
|
|
266
|
+
| Free | 100 | Testing & small projects |
|
|
267
|
+
| Pro | 10,000 | Regular workflows |
|
|
268
|
+
| Business | 100,000 | High-volume automation |
|
|
269
|
+
|
|
270
|
+
Get your API key at [yttapi.com](https://yttapi.com)
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Support
|
|
275
|
+
|
|
276
|
+
- **Documentation:** [yttapi.com/api-docs](https://yttapi.com/api-docs)
|
|
277
|
+
- **Email:** support@yttapi.com
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## License
|
|
282
|
+
|
|
283
|
+
[MIT](LICENSE.md) - Use freely in personal and commercial projects.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class SmartProfilingApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
icon: "file:smartprofiling.svg";
|
|
6
|
+
documentationUrl: string;
|
|
7
|
+
properties: INodeProperties[];
|
|
8
|
+
authenticate: IAuthenticateGeneric;
|
|
9
|
+
test: ICredentialTestRequest;
|
|
10
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SmartProfilingApi = void 0;
|
|
4
|
+
class SmartProfilingApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'smartProfilingApi';
|
|
7
|
+
this.displayName = 'Smart Profiling API';
|
|
8
|
+
this.icon = 'file:smartprofiling.svg';
|
|
9
|
+
this.documentationUrl = 'https://yttapi.com/api-docs';
|
|
10
|
+
this.properties = [
|
|
11
|
+
{
|
|
12
|
+
displayName: 'API Key',
|
|
13
|
+
name: 'apiKey',
|
|
14
|
+
type: 'string',
|
|
15
|
+
typeOptions: { password: true },
|
|
16
|
+
default: '',
|
|
17
|
+
description: 'Your Smart Profiling API key. Get one at https://yttapi.com/dashboard',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
displayName: 'Base URL',
|
|
21
|
+
name: 'baseUrl',
|
|
22
|
+
type: 'string',
|
|
23
|
+
default: 'https://yttapi.com',
|
|
24
|
+
description: 'The base URL of the Smart Profiling API (change only for self-hosted instances)',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
this.authenticate = {
|
|
28
|
+
type: 'generic',
|
|
29
|
+
properties: {
|
|
30
|
+
headers: {
|
|
31
|
+
Authorization: '=Bearer {{$credentials?.apiKey}}',
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
this.test = {
|
|
36
|
+
request: {
|
|
37
|
+
baseURL: '={{$credentials?.baseUrl}}',
|
|
38
|
+
url: '/api/v1/transcripts',
|
|
39
|
+
method: 'GET',
|
|
40
|
+
qs: {
|
|
41
|
+
id: 'dQw4w9WgXcQ',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.SmartProfilingApi = SmartProfilingApi;
|
|
48
|
+
//# sourceMappingURL=SmartProfilingApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartProfilingApi.credentials.js","sourceRoot":"","sources":["../../credentials/SmartProfilingApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,iBAAiB;IAA9B;QACC,SAAI,GAAG,mBAAmB,CAAC;QAE3B,gBAAW,GAAG,qBAAqB,CAAC;QAEpC,SAAI,GAAG,yBAAkC,CAAC;QAE1C,qBAAgB,GAAG,6BAA6B,CAAC;QAEjD,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,uEAAuE;aACpF;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,oBAAoB;gBAC7B,WAAW,EAAE,iFAAiF;aAC9F;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,kCAAkC;iBACjD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,4BAA4B;gBACrC,GAAG,EAAE,qBAAqB;gBAC1B,MAAM,EAAE,KAAK;gBACb,EAAE,EAAE;oBACH,EAAE,EAAE,aAAa;iBACjB;aACD;SACD,CAAC;IACH,CAAC;CAAA;AA9CD,8CA8CC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" viewBox="0 0 225 225">
|
|
2
|
+
<!-- Background circle for better visibility on both light/dark modes -->
|
|
3
|
+
<circle cx="112.5" cy="112.5" r="105" fill="#2a2a2a"/>
|
|
4
|
+
<!-- Left wing - light gray fill with subtle stroke -->
|
|
5
|
+
<path fill="#e8e8e8" stroke="#888888" stroke-width="4" d="M 109.039062 64.859375 C 109.371094 74.886719 110.269531 162.460938 109.253906 168.550781 C 108.339844 174.035156 104.832031 183.945312 98.136719 184.984375 C 91.4375 186.023438 87.09375 180.988281 85.082031 180.328125 C 83.074219 179.671875 77.519531 183.070312 73.125 180.066406 C 68.734375 177.0625 69.695312 169.203125 68.46875 167.867188 C 67.246094 166.535156 60.445312 168.109375 57.1875 163.609375 C 53.929688 159.109375 56.761719 154.296875 55.730469 152.992188 C 54.699219 151.6875 44.65625 150.511719 43.238281 139.996094 C 41.621094 127.929688 51.296875 125.570312 51.246094 123.691406 C 51.191406 121.816406 43.222656 111.550781 47.257812 98.933594 C 51.289062 86.316406 61.90625 84.964844 62.527344 83.832031 C 63.148438 82.699219 58.289062 75.746094 64.683594 65.722656 C 71.078125 55.695312 80.304688 58.40625 81.613281 57.511719 C 82.925781 56.621094 81.390625 52.671875 85.835938 47.074219 C 89.941406 41.90625 97.792969 40.636719 103.464844 43.902344 C 108.609375 46.898438 108.703125 54.835938 109.039062 64.859375 Z"/>
|
|
6
|
+
<!-- Right wing - light gray fill with subtle stroke -->
|
|
7
|
+
<path fill="#e8e8e8" stroke="#888888" stroke-width="4" d="M 115.875 62.804688 C 115.355469 72.890625 114.414062 160.898438 115.332031 167.039062 C 116.152344 172.5625 117.65625 178.753906 125.875 182.742188 C 132.082031 185.753906 137.996094 180.859375 139.945312 180.222656 C 141.890625 179.585938 146.546875 180.429688 151.054688 177.480469 C 155.5625 174.535156 157.527344 167.9375 158.753906 167.246094 C 159.980469 166.558594 165.914062 167.152344 169.304688 162.675781 C 172.695312 158.199219 169.925781 153.527344 170.3125 152.070312 C 170.703125 150.609375 179.5625 148.886719 181.222656 139.320312 C 183.273438 127.550781 173.683594 124.375 173.417969 122.785156 C 173.15625 121.195312 180.617188 115.617188 178.300781 104.511719 C 175.761719 92.382812 167.910156 90.941406 167.3125 89.441406 C 166.714844 87.945312 171.316406 84.113281 168.925781 77.183594 C 166.535156 70.253906 160.390625 70.410156 159.488281 68.910156 C 158.589844 67.414062 160.785156 63.640625 157.023438 58.984375 C 153.105469 54.136719 145.148438 56.589844 143.832031 55.882812 C 142.511719 55.175781 142.542969 50.335938 137.988281 45.507812 C 134.417969 41.730469 126.636719 39.773438 121.46875 44.164062 C 116.882812 48.046875 116.425781 52.730469 115.875 62.804688 Z"/>
|
|
8
|
+
<!-- Lightning bolt - brand red color -->
|
|
9
|
+
<path fill="#e63b2e" d="M 131.292969 72.253906 C 127.800781 69.8125 91.121094 107.046875 92.300781 110.097656 C 93.480469 113.148438 105.4375 112.96875 107.042969 114.824219 C 108.648438 116.679688 94.054688 149.332031 96.761719 151.449219 C 98.792969 153 135.425781 117.128906 134.882812 113.910156 C 134.339844 110.6875 124.519531 111.292969 122.367188 109.253906 C 120.21875 107.210938 133.789062 74.015625 131.292969 72.253906 Z"/>
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" viewBox="0 0 225 225">
|
|
2
|
+
<!-- Background circle - lighter for dark mode UI -->
|
|
3
|
+
<circle cx="112.5" cy="112.5" r="105" fill="#f5f5f5"/>
|
|
4
|
+
<!-- Left wing - dark fill for dark mode -->
|
|
5
|
+
<path fill="#2a2a2a" stroke="#444444" stroke-width="4" d="M 109.039062 64.859375 C 109.371094 74.886719 110.269531 162.460938 109.253906 168.550781 C 108.339844 174.035156 104.832031 183.945312 98.136719 184.984375 C 91.4375 186.023438 87.09375 180.988281 85.082031 180.328125 C 83.074219 179.671875 77.519531 183.070312 73.125 180.066406 C 68.734375 177.0625 69.695312 169.203125 68.46875 167.867188 C 67.246094 166.535156 60.445312 168.109375 57.1875 163.609375 C 53.929688 159.109375 56.761719 154.296875 55.730469 152.992188 C 54.699219 151.6875 44.65625 150.511719 43.238281 139.996094 C 41.621094 127.929688 51.296875 125.570312 51.246094 123.691406 C 51.191406 121.816406 43.222656 111.550781 47.257812 98.933594 C 51.289062 86.316406 61.90625 84.964844 62.527344 83.832031 C 63.148438 82.699219 58.289062 75.746094 64.683594 65.722656 C 71.078125 55.695312 80.304688 58.40625 81.613281 57.511719 C 82.925781 56.621094 81.390625 52.671875 85.835938 47.074219 C 89.941406 41.90625 97.792969 40.636719 103.464844 43.902344 C 108.609375 46.898438 108.703125 54.835938 109.039062 64.859375 Z"/>
|
|
6
|
+
<!-- Right wing - dark fill for dark mode -->
|
|
7
|
+
<path fill="#2a2a2a" stroke="#444444" stroke-width="4" d="M 115.875 62.804688 C 115.355469 72.890625 114.414062 160.898438 115.332031 167.039062 C 116.152344 172.5625 117.65625 178.753906 125.875 182.742188 C 132.082031 185.753906 137.996094 180.859375 139.945312 180.222656 C 141.890625 179.585938 146.546875 180.429688 151.054688 177.480469 C 155.5625 174.535156 157.527344 167.9375 158.753906 167.246094 C 159.980469 166.558594 165.914062 167.152344 169.304688 162.675781 C 172.695312 158.199219 169.925781 153.527344 170.3125 152.070312 C 170.703125 150.609375 179.5625 148.886719 181.222656 139.320312 C 183.273438 127.550781 173.683594 124.375 173.417969 122.785156 C 173.15625 121.195312 180.617188 115.617188 178.300781 104.511719 C 175.761719 92.382812 167.910156 90.941406 167.3125 89.441406 C 166.714844 87.945312 171.316406 84.113281 168.925781 77.183594 C 166.535156 70.253906 160.390625 70.410156 159.488281 68.910156 C 158.589844 67.414062 160.785156 63.640625 157.023438 58.984375 C 153.105469 54.136719 145.148438 56.589844 143.832031 55.882812 C 142.511719 55.175781 142.542969 50.335938 137.988281 45.507812 C 134.417969 41.730469 126.636719 39.773438 121.46875 44.164062 C 116.882812 48.046875 116.425781 52.730469 115.875 62.804688 Z"/>
|
|
8
|
+
<!-- Lightning bolt - brand red color -->
|
|
9
|
+
<path fill="#e63b2e" d="M 131.292969 72.253906 C 127.800781 69.8125 91.121094 107.046875 92.300781 110.097656 C 93.480469 113.148438 105.4375 112.96875 107.042969 114.824219 C 108.648438 116.679688 94.054688 149.332031 96.761719 151.449219 C 98.792969 153 135.425781 117.128906 134.882812 113.910156 C 134.339844 110.6875 124.519531 111.292969 122.367188 109.253906 C 120.21875 107.210938 133.789062 74.015625 131.292969 72.253906 Z"/>
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" viewBox="0 0 225 225">
|
|
2
|
+
<!-- Background circle for better visibility on both light/dark modes -->
|
|
3
|
+
<circle cx="112.5" cy="112.5" r="105" fill="#2a2a2a"/>
|
|
4
|
+
<!-- Left wing - light gray fill with subtle stroke -->
|
|
5
|
+
<path fill="#e8e8e8" stroke="#888888" stroke-width="4" d="M 109.039062 64.859375 C 109.371094 74.886719 110.269531 162.460938 109.253906 168.550781 C 108.339844 174.035156 104.832031 183.945312 98.136719 184.984375 C 91.4375 186.023438 87.09375 180.988281 85.082031 180.328125 C 83.074219 179.671875 77.519531 183.070312 73.125 180.066406 C 68.734375 177.0625 69.695312 169.203125 68.46875 167.867188 C 67.246094 166.535156 60.445312 168.109375 57.1875 163.609375 C 53.929688 159.109375 56.761719 154.296875 55.730469 152.992188 C 54.699219 151.6875 44.65625 150.511719 43.238281 139.996094 C 41.621094 127.929688 51.296875 125.570312 51.246094 123.691406 C 51.191406 121.816406 43.222656 111.550781 47.257812 98.933594 C 51.289062 86.316406 61.90625 84.964844 62.527344 83.832031 C 63.148438 82.699219 58.289062 75.746094 64.683594 65.722656 C 71.078125 55.695312 80.304688 58.40625 81.613281 57.511719 C 82.925781 56.621094 81.390625 52.671875 85.835938 47.074219 C 89.941406 41.90625 97.792969 40.636719 103.464844 43.902344 C 108.609375 46.898438 108.703125 54.835938 109.039062 64.859375 Z"/>
|
|
6
|
+
<!-- Right wing - light gray fill with subtle stroke -->
|
|
7
|
+
<path fill="#e8e8e8" stroke="#888888" stroke-width="4" d="M 115.875 62.804688 C 115.355469 72.890625 114.414062 160.898438 115.332031 167.039062 C 116.152344 172.5625 117.65625 178.753906 125.875 182.742188 C 132.082031 185.753906 137.996094 180.859375 139.945312 180.222656 C 141.890625 179.585938 146.546875 180.429688 151.054688 177.480469 C 155.5625 174.535156 157.527344 167.9375 158.753906 167.246094 C 159.980469 166.558594 165.914062 167.152344 169.304688 162.675781 C 172.695312 158.199219 169.925781 153.527344 170.3125 152.070312 C 170.703125 150.609375 179.5625 148.886719 181.222656 139.320312 C 183.273438 127.550781 173.683594 124.375 173.417969 122.785156 C 173.15625 121.195312 180.617188 115.617188 178.300781 104.511719 C 175.761719 92.382812 167.910156 90.941406 167.3125 89.441406 C 166.714844 87.945312 171.316406 84.113281 168.925781 77.183594 C 166.535156 70.253906 160.390625 70.410156 159.488281 68.910156 C 158.589844 67.414062 160.785156 63.640625 157.023438 58.984375 C 153.105469 54.136719 145.148438 56.589844 143.832031 55.882812 C 142.511719 55.175781 142.542969 50.335938 137.988281 45.507812 C 134.417969 41.730469 126.636719 39.773438 121.46875 44.164062 C 116.882812 48.046875 116.425781 52.730469 115.875 62.804688 Z"/>
|
|
8
|
+
<!-- Lightning bolt - brand red color -->
|
|
9
|
+
<path fill="#e63b2e" d="M 131.292969 72.253906 C 127.800781 69.8125 91.121094 107.046875 92.300781 110.097656 C 93.480469 113.148438 105.4375 112.96875 107.042969 114.824219 C 108.648438 116.679688 94.054688 149.332031 96.761719 151.449219 C 98.792969 153 135.425781 117.128906 134.882812 113.910156 C 134.339844 110.6875 124.519531 111.292969 122.367188 109.253906 C 120.21875 107.210938 133.789062 74.015625 131.292969 72.253906 Z"/>
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SmartProfiling = void 0;
|
|
4
|
+
const transcript_1 = require("./resources/transcript");
|
|
5
|
+
const summarize_1 = require("./resources/summarize");
|
|
6
|
+
const chat_1 = require("./resources/chat");
|
|
7
|
+
const chapters_1 = require("./resources/chapters");
|
|
8
|
+
const channel_1 = require("./resources/channel");
|
|
9
|
+
const playlist_1 = require("./resources/playlist");
|
|
10
|
+
class SmartProfiling {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.description = {
|
|
13
|
+
displayName: 'Smart Profiling',
|
|
14
|
+
name: 'smartProfiling',
|
|
15
|
+
icon: 'file:smartprofiling.svg',
|
|
16
|
+
group: ['transform'],
|
|
17
|
+
version: 1,
|
|
18
|
+
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
19
|
+
description: 'Extract transcripts, generate AI summaries, and chat with YouTube videos',
|
|
20
|
+
defaults: {
|
|
21
|
+
name: 'Smart Profiling',
|
|
22
|
+
},
|
|
23
|
+
usableAsTool: true,
|
|
24
|
+
inputs: ['main'],
|
|
25
|
+
outputs: ['main'],
|
|
26
|
+
credentials: [
|
|
27
|
+
{
|
|
28
|
+
name: 'smartProfilingApi',
|
|
29
|
+
required: true,
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
requestDefaults: {
|
|
33
|
+
baseURL: '={{$credentials?.baseUrl || "https://yttapi.com"}}',
|
|
34
|
+
headers: {
|
|
35
|
+
Accept: 'application/json',
|
|
36
|
+
'Content-Type': 'application/json',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
properties: [
|
|
40
|
+
{
|
|
41
|
+
displayName: 'Resource',
|
|
42
|
+
name: 'resource',
|
|
43
|
+
type: 'options',
|
|
44
|
+
noDataExpression: true,
|
|
45
|
+
options: [
|
|
46
|
+
{
|
|
47
|
+
name: 'Channel',
|
|
48
|
+
value: 'channel',
|
|
49
|
+
description: 'Get videos, shorts, or playlists from a channel',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'Chapter',
|
|
53
|
+
value: 'chapters',
|
|
54
|
+
description: 'Auto-generate video chapters with timestamps',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'Chat',
|
|
58
|
+
value: 'chat',
|
|
59
|
+
description: 'Chat with video content using AI',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'Playlist',
|
|
63
|
+
value: 'playlist',
|
|
64
|
+
description: 'Get videos from a playlist',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'Summarize',
|
|
68
|
+
value: 'summarize',
|
|
69
|
+
description: 'Generate AI-powered video summaries',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: 'Transcript',
|
|
73
|
+
value: 'transcript',
|
|
74
|
+
description: 'Extract transcripts from YouTube videos',
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
default: 'transcript',
|
|
78
|
+
},
|
|
79
|
+
...transcript_1.transcriptDescription,
|
|
80
|
+
...summarize_1.summarizeDescription,
|
|
81
|
+
...chat_1.chatDescription,
|
|
82
|
+
...chapters_1.chaptersDescription,
|
|
83
|
+
...channel_1.channelDescription,
|
|
84
|
+
...playlist_1.playlistDescription,
|
|
85
|
+
],
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.SmartProfiling = SmartProfiling;
|
|
90
|
+
//# sourceMappingURL=SmartProfiling.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartProfiling.node.js","sourceRoot":"","sources":["../../../nodes/SmartProfiling/SmartProfiling.node.ts"],"names":[],"mappings":";;;AACA,uDAA+D;AAC/D,qDAA6D;AAC7D,2CAAmD;AACnD,mDAA2D;AAC3D,iDAAyD;AACzD,mDAA2D;AAE3D,MAAa,cAAc;IAA3B;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,iBAAiB;YAC9B,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,yBAAyB;YAC/B,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8DAA8D;YACxE,WAAW,EAAE,0EAA0E;YACvF,QAAQ,EAAE;gBACT,IAAI,EAAE,iBAAiB;aACvB;YACD,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,CAAC,MAAM,CAAC;YAChB,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE;gBACZ;oBACC,IAAI,EAAE,mBAAmB;oBACzB,QAAQ,EAAE,IAAI;iBACd;aACD;YACD,eAAe,EAAE;gBAChB,OAAO,EAAE,oDAAoD;gBAC7D,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,SAAS;4BACf,KAAK,EAAE,SAAS;4BAChB,WAAW,EAAE,iDAAiD;yBAC9D;wBACD;4BACC,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,UAAU;4BACjB,WAAW,EAAE,8CAA8C;yBAC3D;wBACD;4BACC,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,MAAM;4BACb,WAAW,EAAE,kCAAkC;yBAC/C;wBACD;4BACC,IAAI,EAAE,UAAU;4BAChB,KAAK,EAAE,UAAU;4BACjB,WAAW,EAAE,4BAA4B;yBACzC;wBACD;4BACC,IAAI,EAAE,WAAW;4BACjB,KAAK,EAAE,WAAW;4BAClB,WAAW,EAAE,qCAAqC;yBAClD;wBACD;4BACC,IAAI,EAAE,YAAY;4BAClB,KAAK,EAAE,YAAY;4BACnB,WAAW,EAAE,yCAAyC;yBACtD;qBACD;oBACD,OAAO,EAAE,YAAY;iBACrB;gBACD,GAAG,kCAAqB;gBACxB,GAAG,gCAAoB;gBACvB,GAAG,sBAAe;gBAClB,GAAG,8BAAmB;gBACtB,GAAG,4BAAkB;gBACrB,GAAG,8BAAmB;aACtB;SACD,CAAC;IACH,CAAC;CAAA;AA5ED,wCA4EC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.channelDescription = void 0;
|
|
4
|
+
const descriptions_1 = require("../../shared/descriptions");
|
|
5
|
+
const showOnlyForChannel = {
|
|
6
|
+
resource: ['channel'],
|
|
7
|
+
};
|
|
8
|
+
exports.channelDescription = [
|
|
9
|
+
{
|
|
10
|
+
displayName: 'Operation',
|
|
11
|
+
name: 'operation',
|
|
12
|
+
type: 'options',
|
|
13
|
+
noDataExpression: true,
|
|
14
|
+
displayOptions: {
|
|
15
|
+
show: showOnlyForChannel,
|
|
16
|
+
},
|
|
17
|
+
options: [
|
|
18
|
+
{
|
|
19
|
+
name: 'Get Videos',
|
|
20
|
+
value: 'getVideos',
|
|
21
|
+
action: 'Get channel videos',
|
|
22
|
+
description: 'Get list of videos from a YouTube channel',
|
|
23
|
+
routing: {
|
|
24
|
+
request: {
|
|
25
|
+
method: 'GET',
|
|
26
|
+
url: '/api/v1/channels',
|
|
27
|
+
qs: {
|
|
28
|
+
id: '={{$parameter.channelId}}',
|
|
29
|
+
content: 'videos',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'Get Shorts',
|
|
36
|
+
value: 'getShorts',
|
|
37
|
+
action: 'Get channel shorts',
|
|
38
|
+
description: 'Get list of shorts from a YouTube channel',
|
|
39
|
+
routing: {
|
|
40
|
+
request: {
|
|
41
|
+
method: 'GET',
|
|
42
|
+
url: '/api/v1/channels',
|
|
43
|
+
qs: {
|
|
44
|
+
id: '={{$parameter.channelId}}',
|
|
45
|
+
content: 'shorts',
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'Get Playlists',
|
|
52
|
+
value: 'getPlaylists',
|
|
53
|
+
action: 'Get channel playlists',
|
|
54
|
+
description: 'Get list of playlists from a YouTube channel',
|
|
55
|
+
routing: {
|
|
56
|
+
request: {
|
|
57
|
+
method: 'GET',
|
|
58
|
+
url: '/api/v1/channels',
|
|
59
|
+
qs: {
|
|
60
|
+
id: '={{$parameter.channelId}}',
|
|
61
|
+
content: 'playlists',
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
default: 'getVideos',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
...descriptions_1.channelIdField,
|
|
71
|
+
displayOptions: {
|
|
72
|
+
show: showOnlyForChannel,
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
displayName: 'Additional Options',
|
|
77
|
+
name: 'additionalOptions',
|
|
78
|
+
type: 'collection',
|
|
79
|
+
placeholder: 'Add Option',
|
|
80
|
+
default: {},
|
|
81
|
+
displayOptions: {
|
|
82
|
+
show: showOnlyForChannel,
|
|
83
|
+
},
|
|
84
|
+
options: [
|
|
85
|
+
{
|
|
86
|
+
displayName: 'Continuation Token',
|
|
87
|
+
name: 'continuationToken',
|
|
88
|
+
type: 'string',
|
|
89
|
+
typeOptions: { password: true },
|
|
90
|
+
default: '',
|
|
91
|
+
description: 'Token for pagination (from previous response)',
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
];
|
|
96
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../nodes/SmartProfiling/resources/channel/index.ts"],"names":[],"mappings":";;;AACA,4DAA2D;AAE3D,MAAM,kBAAkB,GAAG;IAC1B,QAAQ,EAAE,CAAC,SAAS,CAAC;CACrB,CAAC;AAEW,QAAA,kBAAkB,GAAsB;IACpD;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE;YACf,IAAI,EAAE,kBAAkB;SACxB;QACD,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,oBAAoB;gBAC5B,WAAW,EAAE,2CAA2C;gBACxD,OAAO,EAAE;oBACR,OAAO,EAAE;wBACR,MAAM,EAAE,KAAK;wBACb,GAAG,EAAE,kBAAkB;wBACvB,EAAE,EAAE;4BACH,EAAE,EAAE,2BAA2B;4BAC/B,OAAO,EAAE,QAAQ;yBACjB;qBACD;iBACD;aACD;YACD;gBACC,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,oBAAoB;gBAC5B,WAAW,EAAE,2CAA2C;gBACxD,OAAO,EAAE;oBACR,OAAO,EAAE;wBACR,MAAM,EAAE,KAAK;wBACb,GAAG,EAAE,kBAAkB;wBACvB,EAAE,EAAE;4BACH,EAAE,EAAE,2BAA2B;4BAC/B,OAAO,EAAE,QAAQ;yBACjB;qBACD;iBACD;aACD;YACD;gBACC,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,cAAc;gBACrB,MAAM,EAAE,uBAAuB;gBAC/B,WAAW,EAAE,8CAA8C;gBAC3D,OAAO,EAAE;oBACR,OAAO,EAAE;wBACR,MAAM,EAAE,KAAK;wBACb,GAAG,EAAE,kBAAkB;wBACvB,EAAE,EAAE;4BACH,EAAE,EAAE,2BAA2B;4BAC/B,OAAO,EAAE,WAAW;yBACpB;qBACD;iBACD;aACD;SACD;QACD,OAAO,EAAE,WAAW;KACpB;IACD;QACC,GAAG,6BAAc;QACjB,cAAc,EAAE;YACf,IAAI,EAAE,kBAAkB;SACxB;KACD;IACD;QACC,WAAW,EAAE,oBAAoB;QACjC,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,EAAE;QACX,cAAc,EAAE;YACf,IAAI,EAAE,kBAAkB;SACxB;QACD,OAAO,EAAE;YACR;gBACC,WAAW,EAAE,oBAAoB;gBACjC,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,+CAA+C;aAC5D;SACD;KACD;CACD,CAAC"}
|