n8n-nodes-miroapp 1.0.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.
- package/LICENSE.md +19 -0
- package/README.md +349 -0
- package/dist/credentials/MiroApi.credentials.d.ts +10 -0
- package/dist/credentials/MiroApi.credentials.js +41 -0
- package/dist/credentials/MiroApi.credentials.js.map +1 -0
- package/dist/credentials/MiroOAuth2Api.credentials.d.ts +9 -0
- package/dist/credentials/MiroOAuth2Api.credentials.js +52 -0
- package/dist/credentials/MiroOAuth2Api.credentials.js.map +1 -0
- package/dist/credentials/icons/miro.dark.svg +1 -0
- package/dist/credentials/icons/miro.svg +1 -0
- package/dist/nodes/Miro/Miro.node.d.ts +6 -0
- package/dist/nodes/Miro/Miro.node.js +4126 -0
- package/dist/nodes/Miro/Miro.node.js.map +1 -0
- package/dist/nodes/Miro/Miro.node.json +19 -0
- package/dist/nodes/Miro/miro.dark.svg +1 -0
- package/dist/nodes/Miro/miro.svg +1 -0
- package/dist/package.json +57 -0
- package/package.json +57 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Copyright 2022 n8n
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
4
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
5
|
+
the Software without restriction, including without limitation the rights to
|
|
6
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
7
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
|
8
|
+
so, subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
# n8n-nodes-miroapp
|
|
2
|
+
|
|
3
|
+
This is an n8n community node. It lets you interact with Miro in your n8n workflows.
|
|
4
|
+
|
|
5
|
+
Miro is a visual collaboration platform where distributed teams work together on an infinite canvas: they run workshops and retrospectives on sticky notes, map processes as diagrams and flowcharts, build mind maps and customer journeys, organise work on cards and in frames, and keep everything in shared boards that can be tagged, grouped and embedded elsewhere.
|
|
6
|
+
|
|
7
|
+
[n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.
|
|
8
|
+
|
|
9
|
+
[Installation](#installation)
|
|
10
|
+
[Credentials](#credentials)
|
|
11
|
+
[Operations](#operations)
|
|
12
|
+
[Pagination](#pagination)
|
|
13
|
+
[File uploads](#file-uploads)
|
|
14
|
+
[No trigger node](#no-trigger-node)
|
|
15
|
+
[Using as a Tool](#using-as-a-tool)
|
|
16
|
+
[Compatibility](#compatibility)
|
|
17
|
+
[Resources](#resources)
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
|
|
22
|
+
|
|
23
|
+
Alternatively, you can manually install it:
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
git clone https://github.com/Elevate-Agency/n8n-nodes-miro.git
|
|
27
|
+
cd n8n-nodes-miro
|
|
28
|
+
npm install
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Then, place the node file in the `~/.n8n/custom-nodes` directory (or follow instructions specific to your n8n installation).
|
|
32
|
+
|
|
33
|
+
## Credentials
|
|
34
|
+
|
|
35
|
+
This node covers version 2 of the Miro REST API and supports two ways to authenticate.
|
|
36
|
+
|
|
37
|
+
**Miro API (access token)** — the simplest option, and the default. In Miro, go to *Profile settings → Your apps → Create new app*, grant the app the scopes you need, then use **Install app and get OAuth token** and paste the token into the credential. The token does not expire.
|
|
38
|
+
|
|
39
|
+
**Miro OAuth2 API** — for the standard authorization code flow. Create an app the same way, add your n8n OAuth callback URL to the app's redirect URIs, then connect the credential. Note that Miro does **not** accept a `scope` parameter on the authorization URL: the permissions granted to the token are the ones ticked on the app's *Permissions* page, so set them there before connecting.
|
|
40
|
+
|
|
41
|
+
Which scopes you need depends on the operations you call. `boards:read` and `boards:write` cover boards and every item type; the `Governance - *` and `Organization - *` resources need the matching enterprise scopes (`organizations:read`, `organizations:teams:write`, `projects:read`, `auditlogs:read`, `boards:export`, and so on). Each operation's required scope is listed on its page in the [Miro API reference](https://developers.miro.com/reference), and the full list is on [Permission scopes](https://developers.miro.com/reference/scopes).
|
|
42
|
+
|
|
43
|
+
## Operations
|
|
44
|
+
|
|
45
|
+
This node supports the following operations within Miro:
|
|
46
|
+
* **Apps - Metric**
|
|
47
|
+
- Gets app metrics
|
|
48
|
+
- Gets total app metrics
|
|
49
|
+
* **Authentication - Token**
|
|
50
|
+
- Revokes token
|
|
51
|
+
* **Boards - Board**
|
|
52
|
+
- Copies board
|
|
53
|
+
- Creates board
|
|
54
|
+
- Deletes board
|
|
55
|
+
- Gets boards
|
|
56
|
+
- Gets specific board
|
|
57
|
+
- Updates board
|
|
58
|
+
* **Boards - Export Job**
|
|
59
|
+
- Creates board export job
|
|
60
|
+
- Creates task export link
|
|
61
|
+
- Gets board export job status
|
|
62
|
+
- Gets board export job tasks list
|
|
63
|
+
- Gets board export jobs list
|
|
64
|
+
- Gets results for board export job
|
|
65
|
+
- Updates board export job status
|
|
66
|
+
* **Boards - Member**
|
|
67
|
+
- Gets all board members
|
|
68
|
+
- Gets specific board member
|
|
69
|
+
- Removes board member
|
|
70
|
+
- Shares board
|
|
71
|
+
- Updates board member
|
|
72
|
+
* **Boards - User Group Assignment**
|
|
73
|
+
- Creates board user group assignments
|
|
74
|
+
- Deletes board user group assignment
|
|
75
|
+
- Gets board user group assignments
|
|
76
|
+
* **Governance - AI Interaction Log**
|
|
77
|
+
- Gets AI interaction logs
|
|
78
|
+
* **Governance - Audit Log**
|
|
79
|
+
- Gets audit logs
|
|
80
|
+
* **Governance - Board Content Log**
|
|
81
|
+
- Gets content change logs of board items
|
|
82
|
+
* **Governance - Board Data Classification**
|
|
83
|
+
- Gets board classification
|
|
84
|
+
- Updates board classification
|
|
85
|
+
* **Governance - Legal Hold**
|
|
86
|
+
- Closes case
|
|
87
|
+
- Closes legal hold
|
|
88
|
+
- Creates case
|
|
89
|
+
- Creates legal hold
|
|
90
|
+
- Edits case
|
|
91
|
+
- Edits legal hold
|
|
92
|
+
- Gets all cases
|
|
93
|
+
- Gets all legal holds within a case
|
|
94
|
+
- Gets board export jobs of a case
|
|
95
|
+
- Gets case
|
|
96
|
+
- Gets content items under legal hold
|
|
97
|
+
- Gets legal hold information
|
|
98
|
+
* **Governance - Organization Data Classification**
|
|
99
|
+
- Gets organization settings
|
|
100
|
+
* **Governance - Team Data Classification**
|
|
101
|
+
- Bulk updates boards classification
|
|
102
|
+
- Gets team settings
|
|
103
|
+
- Updates team settings
|
|
104
|
+
* **Governance - User Session**
|
|
105
|
+
- Resets all sessions of a user
|
|
106
|
+
* **Items - App Card**
|
|
107
|
+
- Creates app card item
|
|
108
|
+
- Deletes app card item
|
|
109
|
+
- Gets app card item
|
|
110
|
+
- Updates app card item
|
|
111
|
+
* **Items - Card**
|
|
112
|
+
- Creates card item
|
|
113
|
+
- Deletes card item
|
|
114
|
+
- Gets card item
|
|
115
|
+
- Updates card item
|
|
116
|
+
* **Items - Code Widget**
|
|
117
|
+
- Creates code widget item
|
|
118
|
+
- Deletes code widget item
|
|
119
|
+
- Gets code widget item
|
|
120
|
+
- Gets code widget items
|
|
121
|
+
- Moves code widget item
|
|
122
|
+
- Updates code widget item
|
|
123
|
+
* **Items - Connector**
|
|
124
|
+
- Creates connector
|
|
125
|
+
- Deletes connector
|
|
126
|
+
- Gets connectors
|
|
127
|
+
- Gets specific connector
|
|
128
|
+
- Updates connector
|
|
129
|
+
* **Items - Doc Format**
|
|
130
|
+
- Creates doc format item
|
|
131
|
+
- Deletes doc format item
|
|
132
|
+
- Gets doc format item
|
|
133
|
+
* **Items - Document**
|
|
134
|
+
- Creates document item using file from device
|
|
135
|
+
- Creates document item using URL
|
|
136
|
+
- Deletes document item
|
|
137
|
+
- Gets document item
|
|
138
|
+
- Updates document item using file from device
|
|
139
|
+
- Updates document item using URL
|
|
140
|
+
* **Items - Embed**
|
|
141
|
+
- Creates embed item
|
|
142
|
+
- Deletes embed item
|
|
143
|
+
- Gets embed item
|
|
144
|
+
- Updates embed item
|
|
145
|
+
* **Items - Flowchart Shape**
|
|
146
|
+
- Creates shape item
|
|
147
|
+
- Deletes shape item
|
|
148
|
+
- Gets shape item
|
|
149
|
+
- Updates shape item
|
|
150
|
+
* **Items - Frame**
|
|
151
|
+
- Creates frame
|
|
152
|
+
- Deletes frame
|
|
153
|
+
- Gets frame
|
|
154
|
+
- Gets items within frame
|
|
155
|
+
- Updates frame
|
|
156
|
+
* **Items - Group**
|
|
157
|
+
- Creates group
|
|
158
|
+
- Deletes group and its items
|
|
159
|
+
- Gets a group by its ID
|
|
160
|
+
- Gets all groups on a board
|
|
161
|
+
- Gets items of a group by ID
|
|
162
|
+
- Ungroups items
|
|
163
|
+
- Updates group with new items
|
|
164
|
+
* **Items - Image**
|
|
165
|
+
- Creates image item using file from device
|
|
166
|
+
- Creates image item using URL
|
|
167
|
+
- Deletes image item
|
|
168
|
+
- Gets image item
|
|
169
|
+
- Updates image item using file from device
|
|
170
|
+
- Updates image item using URL
|
|
171
|
+
* **Items - Item**
|
|
172
|
+
- Creates items in bulk
|
|
173
|
+
- Creates items in bulk using file from device
|
|
174
|
+
- Deletes experimental item
|
|
175
|
+
- Deletes item
|
|
176
|
+
- Gets experimental items on board
|
|
177
|
+
- Gets items on board
|
|
178
|
+
- Gets specific experimental item on board
|
|
179
|
+
- Gets specific item on board
|
|
180
|
+
- Updates item position or parent
|
|
181
|
+
* **Items - Mind Map Node**
|
|
182
|
+
- Creates mind map node
|
|
183
|
+
- Deletes mind map node
|
|
184
|
+
- Gets mind map nodes
|
|
185
|
+
- Gets specific mind map node
|
|
186
|
+
* **Items - Shape**
|
|
187
|
+
- Creates shape item
|
|
188
|
+
- Deletes shape item
|
|
189
|
+
- Gets shape item
|
|
190
|
+
- Updates shape item
|
|
191
|
+
* **Items - Sticky Note**
|
|
192
|
+
- Creates sticky note item
|
|
193
|
+
- Deletes sticky note item
|
|
194
|
+
- Gets sticky note item
|
|
195
|
+
- Updates sticky note item
|
|
196
|
+
* **Items - Tag**
|
|
197
|
+
- Attaches tag to item
|
|
198
|
+
- Creates tag
|
|
199
|
+
- Deletes tag
|
|
200
|
+
- Gets items by tag
|
|
201
|
+
- Gets tag
|
|
202
|
+
- Gets tags from board
|
|
203
|
+
- Gets tags from item
|
|
204
|
+
- Removes tag from item
|
|
205
|
+
- Updates tag
|
|
206
|
+
* **Items - Text**
|
|
207
|
+
- Creates text item
|
|
208
|
+
- Deletes text item
|
|
209
|
+
- Gets text item
|
|
210
|
+
- Updates text item
|
|
211
|
+
* **Organization - Member**
|
|
212
|
+
- Gets organization member
|
|
213
|
+
- Gets organization members
|
|
214
|
+
* **Organization - Organization**
|
|
215
|
+
- Gets organization info
|
|
216
|
+
* **Organization - Project**
|
|
217
|
+
- Creates project
|
|
218
|
+
- Deletes project
|
|
219
|
+
- Gets project
|
|
220
|
+
- Gets projects
|
|
221
|
+
- Updates project
|
|
222
|
+
* **Organization - Project Member**
|
|
223
|
+
- Adds member in a project
|
|
224
|
+
- Gets project member
|
|
225
|
+
- Gets project members
|
|
226
|
+
- Removes project member
|
|
227
|
+
- Updates project member
|
|
228
|
+
* **Organization - Project Setting**
|
|
229
|
+
- Gets project settings
|
|
230
|
+
- Updates project settings
|
|
231
|
+
* **Organization - Project User Group Assignment**
|
|
232
|
+
- Creates project user group assignments
|
|
233
|
+
- Deletes project user group assignment
|
|
234
|
+
- Gets project user group assignments
|
|
235
|
+
* **Organization - Team**
|
|
236
|
+
- Creates team
|
|
237
|
+
- Deletes team
|
|
238
|
+
- Gets team
|
|
239
|
+
- Gets teams
|
|
240
|
+
- Updates team
|
|
241
|
+
* **Organization - Team Member**
|
|
242
|
+
- Deletes team member from team
|
|
243
|
+
- Gets team member
|
|
244
|
+
- Gets team members
|
|
245
|
+
- Invites team members
|
|
246
|
+
- Updates team member
|
|
247
|
+
* **Organization - Team Setting**
|
|
248
|
+
- Gets default team settings
|
|
249
|
+
- Gets team settings
|
|
250
|
+
- Updates team settings
|
|
251
|
+
* **Organization - Team User Group**
|
|
252
|
+
- Creates user group to team connection
|
|
253
|
+
- Deletes user group to team connection
|
|
254
|
+
- Gets user group of a team
|
|
255
|
+
- Gets user group to team connections
|
|
256
|
+
* **Organization - User Group**
|
|
257
|
+
- Creates user group
|
|
258
|
+
- Deletes user group
|
|
259
|
+
- Gets user group
|
|
260
|
+
- Gets user groups
|
|
261
|
+
- Updates user group
|
|
262
|
+
* **Organization - User Group Member**
|
|
263
|
+
- Bulk edits of membership in user group
|
|
264
|
+
- Creates user group member
|
|
265
|
+
- Deletes user group member
|
|
266
|
+
- Gets user group member
|
|
267
|
+
- Gets user group members
|
|
268
|
+
* **Organization - User Group Team**
|
|
269
|
+
- Gets teams of a user group
|
|
270
|
+
- Gets user group team
|
|
271
|
+
|
|
272
|
+
Retrieve information from the [Miro REST API](https://developers.miro.com/docs/rest-api-reference-guide).
|
|
273
|
+
|
|
274
|
+
Resources prefixed `Governance - ` and `Organization - `, plus `Boards - Export Job` and `Boards - User Group Assignment`, call `/v2/orgs/...` endpoints that require a Miro **Enterprise** plan (a few also require Enterprise Guard). Resources marked *experimental* call `/v2-experimental/...` endpoints, which Miro may change or remove without notice.
|
|
275
|
+
|
|
276
|
+
## Pagination
|
|
277
|
+
|
|
278
|
+
This node does not paginate for you: it sends exactly one request per input item, so you stay in control of how many API credits you spend. Miro uses two conventions, and both are driven from the **Query Parameters** collection:
|
|
279
|
+
|
|
280
|
+
- **Cursor** (items, connectors, groups, mind map nodes, code widgets, teams, projects, audit logs, export jobs): set `Limit`, then feed the `cursor` field of the response back into the `Cursor` parameter on the next call. Stop when the response has no `cursor`.
|
|
281
|
+
- **Offset** (`Get Boards`, `Get All Board Members`, `Get Tags from Board`, `Get Items by Tag`): set `Limit` and `Offset`. Stop when `offset + size >= total`.
|
|
282
|
+
|
|
283
|
+
To collect every page, wrap the node in a loop: a **Loop Over Items** node, or an **If** node testing whether the response still carries a `cursor`, feeding the value back into the Miro node.
|
|
284
|
+
|
|
285
|
+
## File uploads
|
|
286
|
+
|
|
287
|
+
Five operations upload a file instead of sending JSON, and expect binary data on the input item:
|
|
288
|
+
|
|
289
|
+
- `Items - Document → Create Document Item Using File from Device` / `Update Document Item Using File from Device`
|
|
290
|
+
- `Items - Image → Create Image Item Using File from Device` / `Update Image Item Using File from Device`
|
|
291
|
+
- `Items - Item → Create Items in Bulk Using File from Device`
|
|
292
|
+
|
|
293
|
+
Set **Binary Property** to the name of the binary property holding the file. For the bulk operation, **Binary Property** holds the JSON manifest and **Resource Binary Properties** lists the files to create, up to 20. **Miro rejects uploads larger than 6 MB.**
|
|
294
|
+
|
|
295
|
+
## No trigger node
|
|
296
|
+
|
|
297
|
+
There is deliberately no Miro Trigger node. Miro removed its experimental webhooks (`/v2-experimental/webhooks/board_subscriptions`) on 5 December 2025 and has not announced a replacement, so no webhook-based trigger can work today.
|
|
298
|
+
|
|
299
|
+
To react to changes, poll instead: a **Schedule Trigger** followed by `Boards - Board → Get Boards` with `Sort` set to `Last Modified`, or `Items - Item → Get Items on Board`, comparing against what you saw last run.
|
|
300
|
+
|
|
301
|
+
## Using as a Tool
|
|
302
|
+
|
|
303
|
+
This node can be used as a tool in n8n AI Agents. To enable community nodes as tools, you need to set the `N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE` environment variable to `true`.
|
|
304
|
+
|
|
305
|
+
### Setting the Environment Variable
|
|
306
|
+
|
|
307
|
+
**If you're using a bash/zsh shell:**
|
|
308
|
+
```bash
|
|
309
|
+
export N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
|
|
310
|
+
n8n start
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
**If you're using Docker:**
|
|
314
|
+
Add to your docker-compose.yml file:
|
|
315
|
+
```yaml
|
|
316
|
+
environment:
|
|
317
|
+
- N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**If you're using the desktop app:**
|
|
321
|
+
Create a `.env` file in the n8n directory:
|
|
322
|
+
```
|
|
323
|
+
N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
**If you want to set it permanently on Mac/Linux:**
|
|
327
|
+
Add to your `~/.zshrc` or `~/.bash_profile`:
|
|
328
|
+
```bash
|
|
329
|
+
export N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
## Compatibility
|
|
333
|
+
|
|
334
|
+
- Tested with: TBD
|
|
335
|
+
|
|
336
|
+
The 181 operations have been exercised against the live API: 100 on a Miro developer team,
|
|
337
|
+
the remaining 81 on an Enterprise organization with the Company Admin role.
|
|
338
|
+
|
|
339
|
+
Two prerequisites sit on your own tenant rather than on the node. The board classification
|
|
340
|
+
operations need at least one data-classification label defined in the organization, which is
|
|
341
|
+
created in the admin console and has no API. The two `Apps - Metric` operations need an app
|
|
342
|
+
management API token from Developer Hub instead of the install token the rest of the node uses.
|
|
343
|
+
|
|
344
|
+
## Resources
|
|
345
|
+
|
|
346
|
+
- [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
|
|
347
|
+
- [Miro REST API documentation](https://developers.miro.com/docs/rest-api-reference-guide)
|
|
348
|
+
- [Miro permission scopes](https://developers.miro.com/reference/scopes)
|
|
349
|
+
- [Miro rate limiting](https://developers.miro.com/reference/rate-limiting)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties, Icon } from 'n8n-workflow';
|
|
2
|
+
export declare class MiroApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
documentationUrl: string;
|
|
6
|
+
icon: Icon;
|
|
7
|
+
properties: INodeProperties[];
|
|
8
|
+
authenticate: IAuthenticateGeneric;
|
|
9
|
+
test: ICredentialTestRequest;
|
|
10
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MiroApi = void 0;
|
|
4
|
+
class MiroApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'miroApi';
|
|
7
|
+
this.displayName = 'Miro API';
|
|
8
|
+
this.documentationUrl = 'https://developers.miro.com/docs/getting-started-with-oauth';
|
|
9
|
+
this.icon = { light: 'file:icons/miro.svg', dark: 'file:icons/miro.dark.svg' };
|
|
10
|
+
this.properties = [
|
|
11
|
+
{
|
|
12
|
+
displayName: 'Miro Access Token',
|
|
13
|
+
name: 'miroAccessToken',
|
|
14
|
+
type: 'string',
|
|
15
|
+
typeOptions: { password: true },
|
|
16
|
+
default: '',
|
|
17
|
+
required: true,
|
|
18
|
+
description: 'Access token of your Miro app installation. Create an app in Miro (Profile settings, Your apps), then use "Install app and get OAuth token"',
|
|
19
|
+
},
|
|
20
|
+
];
|
|
21
|
+
this.authenticate = {
|
|
22
|
+
type: 'generic',
|
|
23
|
+
properties: {
|
|
24
|
+
headers: {
|
|
25
|
+
Accept: 'application/json',
|
|
26
|
+
Authorization: '=Bearer {{$credentials.miroAccessToken}}',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
this.test = {
|
|
31
|
+
request: {
|
|
32
|
+
method: 'GET',
|
|
33
|
+
baseURL: 'https://api.miro.com',
|
|
34
|
+
url: '/v2/boards',
|
|
35
|
+
qs: { limit: 1 },
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.MiroApi = MiroApi;
|
|
41
|
+
//# sourceMappingURL=MiroApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MiroApi.credentials.js","sourceRoot":"","sources":["../../credentials/MiroApi.credentials.ts"],"names":[],"mappings":";;;AAQA,MAAa,OAAO;IAApB;QACC,SAAI,GAAG,SAAS,CAAC;QACjB,gBAAW,GAAG,UAAU,CAAC;QACzB,qBAAgB,GAAG,6DAA6D,CAAC;QAGjF,SAAI,GAAS,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC;QAChF,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EACV,6IAA6I;aAC9I;SACD,CAAC;QAKF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,MAAM,EAAE,kBAAkB;oBAC1B,aAAa,EAAE,0CAA0C;iBACzD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,sBAAsB;gBAC/B,GAAG,EAAE,YAAY;gBACjB,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;aAChB;SACD,CAAC;IACH,CAAC;CAAA;AAzCD,0BAyCC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ICredentialType, INodeProperties, Icon } from 'n8n-workflow';
|
|
2
|
+
export declare class MiroOAuth2Api implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
extends: string[];
|
|
5
|
+
displayName: string;
|
|
6
|
+
documentationUrl: string;
|
|
7
|
+
icon: Icon;
|
|
8
|
+
properties: INodeProperties[];
|
|
9
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MiroOAuth2Api = void 0;
|
|
4
|
+
class MiroOAuth2Api {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'miroOAuth2Api';
|
|
7
|
+
this.extends = ['oAuth2Api'];
|
|
8
|
+
this.displayName = 'Miro OAuth2 API';
|
|
9
|
+
this.documentationUrl = 'https://developers.miro.com/docs/getting-started-with-oauth';
|
|
10
|
+
this.icon = { light: 'file:icons/miro.svg', dark: 'file:icons/miro.dark.svg' };
|
|
11
|
+
this.properties = [
|
|
12
|
+
{
|
|
13
|
+
displayName: 'Grant Type',
|
|
14
|
+
name: 'grantType',
|
|
15
|
+
type: 'hidden',
|
|
16
|
+
default: 'authorizationCode',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
displayName: 'Authorization URL',
|
|
20
|
+
name: 'authUrl',
|
|
21
|
+
type: 'hidden',
|
|
22
|
+
default: 'https://miro.com/oauth/authorize',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
displayName: 'Access Token URL',
|
|
26
|
+
name: 'accessTokenUrl',
|
|
27
|
+
type: 'hidden',
|
|
28
|
+
default: 'https://api.miro.com/v1/oauth/token',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
displayName: 'Scope',
|
|
32
|
+
name: 'scope',
|
|
33
|
+
type: 'hidden',
|
|
34
|
+
default: '',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
displayName: 'Auth URI Query Parameters',
|
|
38
|
+
name: 'authQueryParameters',
|
|
39
|
+
type: 'hidden',
|
|
40
|
+
default: '',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
displayName: 'Authentication',
|
|
44
|
+
name: 'authentication',
|
|
45
|
+
type: 'hidden',
|
|
46
|
+
default: 'body',
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.MiroOAuth2Api = MiroOAuth2Api;
|
|
52
|
+
//# sourceMappingURL=MiroOAuth2Api.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MiroOAuth2Api.credentials.js","sourceRoot":"","sources":["../../credentials/MiroOAuth2Api.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAa,aAAa;IAA1B;QACC,SAAI,GAAG,eAAe,CAAC;QACvB,YAAO,GAAG,CAAC,WAAW,CAAC,CAAC;QACxB,gBAAW,GAAG,iBAAiB,CAAC;QAChC,qBAAgB,GAAG,6DAA6D,CAAC;QAGjF,SAAI,GAAS,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC;QAChF,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,mBAAmB;aAC5B;YACD;gBACC,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,kCAAkC;aAC3C;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,qCAAqC;aAC9C;YACD;gBAGC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,2BAA2B;gBACxC,IAAI,EAAE,qBAAqB;gBAC3B,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,gBAAgB;gBAC7B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,MAAM;aACf;SACD,CAAC;IACH,CAAC;CAAA;AAhDD,sCAgDC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" role="img" aria-label="Miro"><path fill="#FFD02F" d="M17.392 0H13.9L17 4.808 10.444 0H6.949l3.102 6.3L3.494 0H0l3.05 8.131L0 24h3.494L10.05 6.985 6.949 24h3.494L17 5.494 13.899 24h3.493L24 3.672 17.392 0z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" role="img" aria-label="Miro"><path fill="#050038" d="M17.392 0H13.9L17 4.808 10.444 0H6.949l3.102 6.3L3.494 0H0l3.05 8.131L0 24h3.494L10.05 6.985 6.949 24h3.494L17 5.494 13.899 24h3.493L24 3.672 17.392 0z"/></svg>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
|
|
2
|
+
export declare class Miro implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
5
|
+
}
|
|
6
|
+
export declare function executeItem(this: IExecuteFunctions, i: number): Promise<INodeExecutionData[]>;
|