n8n-nodes-layerre 1.0.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 +22 -0
- package/README.md +147 -0
- package/dist/credentials/LayerreApi.credentials.d.ts +10 -0
- package/dist/credentials/LayerreApi.credentials.js +49 -0
- package/dist/credentials/LayerreApi.credentials.js.map +1 -0
- package/dist/nodes/Layerre/GenericFunctions.d.ts +2 -0
- package/dist/nodes/Layerre/GenericFunctions.js +27 -0
- package/dist/nodes/Layerre/GenericFunctions.js.map +1 -0
- package/dist/nodes/Layerre/Layerre.node.d.ts +11 -0
- package/dist/nodes/Layerre/Layerre.node.js +257 -0
- package/dist/nodes/Layerre/Layerre.node.js.map +1 -0
- package/dist/nodes/Layerre/Layerre.node.json +22 -0
- package/dist/nodes/Layerre/layerre.png +0 -0
- package/dist/nodes/Layerre/layerre.svg +34 -0
- package/dist/nodes/Layerre/resources/template/create.d.ts +2 -0
- package/dist/nodes/Layerre/resources/template/create.js +31 -0
- package/dist/nodes/Layerre/resources/template/create.js.map +1 -0
- package/dist/nodes/Layerre/resources/template/delete.d.ts +2 -0
- package/dist/nodes/Layerre/resources/template/delete.js +24 -0
- package/dist/nodes/Layerre/resources/template/delete.js.map +1 -0
- package/dist/nodes/Layerre/resources/template/get.d.ts +2 -0
- package/dist/nodes/Layerre/resources/template/get.js +24 -0
- package/dist/nodes/Layerre/resources/template/get.js.map +1 -0
- package/dist/nodes/Layerre/resources/template/getAll.d.ts +2 -0
- package/dist/nodes/Layerre/resources/template/getAll.js +71 -0
- package/dist/nodes/Layerre/resources/template/getAll.js.map +1 -0
- package/dist/nodes/Layerre/resources/template/index.d.ts +2 -0
- package/dist/nodes/Layerre/resources/template/index.js +77 -0
- package/dist/nodes/Layerre/resources/template/index.js.map +1 -0
- package/dist/nodes/Layerre/resources/variant/create.d.ts +2 -0
- package/dist/nodes/Layerre/resources/variant/create.js +312 -0
- package/dist/nodes/Layerre/resources/variant/create.js.map +1 -0
- package/dist/nodes/Layerre/resources/variant/delete.d.ts +2 -0
- package/dist/nodes/Layerre/resources/variant/delete.js +39 -0
- package/dist/nodes/Layerre/resources/variant/delete.js.map +1 -0
- package/dist/nodes/Layerre/resources/variant/get.d.ts +2 -0
- package/dist/nodes/Layerre/resources/variant/get.js +39 -0
- package/dist/nodes/Layerre/resources/variant/get.js.map +1 -0
- package/dist/nodes/Layerre/resources/variant/getAll.d.ts +2 -0
- package/dist/nodes/Layerre/resources/variant/getAll.js +72 -0
- package/dist/nodes/Layerre/resources/variant/getAll.js.map +1 -0
- package/dist/nodes/Layerre/resources/variant/index.d.ts +2 -0
- package/dist/nodes/Layerre/resources/variant/index.js +168 -0
- package/dist/nodes/Layerre/resources/variant/index.js.map +1 -0
- package/dist/package.json +37 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +50 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Layerre
|
|
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,147 @@
|
|
|
1
|
+
# n8n-nodes-layerre
|
|
2
|
+
|
|
3
|
+
This is an n8n community node for [Layerre](https://layerre.com) - a platform for creating templates and variants from Canva designs.
|
|
4
|
+
|
|
5
|
+
[n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.
|
|
6
|
+
|
|
7
|
+
[Installation](#installation)
|
|
8
|
+
[Operations](#operations)
|
|
9
|
+
[Credentials](#credentials)
|
|
10
|
+
[Usage](#usage)
|
|
11
|
+
[Contributing](#contributing)
|
|
12
|
+
[License](#license)
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install n8n-nodes-layerre
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Operations
|
|
23
|
+
|
|
24
|
+
### Template
|
|
25
|
+
|
|
26
|
+
- **Create** - Create a new template from a Canva design URL
|
|
27
|
+
- **Get** - Get a template by ID with all its layers
|
|
28
|
+
- **Get Many** - List all templates for the current user
|
|
29
|
+
- **Delete** - Delete a template
|
|
30
|
+
|
|
31
|
+
### Variant
|
|
32
|
+
|
|
33
|
+
- **Create** - Create a new variant with layer overrides (text, images, colors, positions, etc.)
|
|
34
|
+
- **Get** - Get a variant by ID
|
|
35
|
+
- **Get Many** - List all variants for a template
|
|
36
|
+
- **Delete** - Delete a variant
|
|
37
|
+
|
|
38
|
+
## Credentials
|
|
39
|
+
|
|
40
|
+
To use this node, you need a Layerre API key:
|
|
41
|
+
|
|
42
|
+
1. Log in to your [Layerre account](https://layerre.com/app)
|
|
43
|
+
2. Go to API Keys
|
|
44
|
+
3. Create a new API key
|
|
45
|
+
4. Copy the key (starts with `lyr_`)
|
|
46
|
+
|
|
47
|
+
In n8n:
|
|
48
|
+
1. Go to Credentials → Add Credential
|
|
49
|
+
2. Search for "Layerre API"
|
|
50
|
+
3. Paste your API key
|
|
51
|
+
|
|
52
|
+
## Usage
|
|
53
|
+
|
|
54
|
+
### Creating a Template from Canva
|
|
55
|
+
|
|
56
|
+
1. Add the **Layerre** node to your workflow
|
|
57
|
+
2. Select **Template** as the resource
|
|
58
|
+
3. Select **Create** as the operation
|
|
59
|
+
4. Paste your Canva share URL (e.g., `https://www.canva.com/design/...`)
|
|
60
|
+
5. Execute the node
|
|
61
|
+
|
|
62
|
+
The node will return the template with all extracted layers.
|
|
63
|
+
|
|
64
|
+
### Creating a Variant with Overrides
|
|
65
|
+
|
|
66
|
+
1. Add the **Layerre** node to your workflow
|
|
67
|
+
2. Select **Variant** as the resource
|
|
68
|
+
3. Select **Create** as the operation
|
|
69
|
+
4. Choose a template from the dropdown (dynamically loaded from your account)
|
|
70
|
+
5. (Optional) Set variant dimensions (width/height) to override the template size
|
|
71
|
+
6. Add layer overrides:
|
|
72
|
+
- Select a layer from the dropdown (dynamically loaded from the selected template)
|
|
73
|
+
- Configure override options:
|
|
74
|
+
- **Text layers**: text content, color, font name, font size, font weight, italic, underline, text align, letter spacing, line spacing
|
|
75
|
+
- **Image layers**: image URL, opacity, flip horizontal/vertical
|
|
76
|
+
- **All layers**: position (x, y), size (width, height), rotation, color
|
|
77
|
+
7. Execute the node
|
|
78
|
+
|
|
79
|
+
The node will render the variant and return the image URL.
|
|
80
|
+
|
|
81
|
+
### Example: Bulk Image Generation
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
[Spreadsheet] → [Loop Over Items] → [Layerre: Create Variant] → [Download Image]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Use data from a spreadsheet to create personalized images at scale by mapping columns to layer overrides.
|
|
88
|
+
|
|
89
|
+
## Contributing
|
|
90
|
+
|
|
91
|
+
Contributions are welcome! Here's how to get started:
|
|
92
|
+
|
|
93
|
+
### Development Setup
|
|
94
|
+
|
|
95
|
+
1. Fork the repository on GitHub
|
|
96
|
+
|
|
97
|
+
2. Clone your fork:
|
|
98
|
+
```bash
|
|
99
|
+
git clone https://github.com/YOUR_USERNAME/n8n-nodes-layerre.git
|
|
100
|
+
cd n8n-nodes-layerre
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
3. Install dependencies:
|
|
104
|
+
```bash
|
|
105
|
+
npm install
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
4. Install n8n globally:
|
|
109
|
+
```bash
|
|
110
|
+
npm install n8n -g
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
5. Start development mode (runs n8n with the node loaded):
|
|
114
|
+
```bash
|
|
115
|
+
npm run dev
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
5. Make your changes and test in the n8n UI
|
|
119
|
+
|
|
120
|
+
### Building
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
npm run build
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Linting
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
npm run lint
|
|
130
|
+
npm run lint:fix # Auto-fix issues
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Submitting Changes
|
|
134
|
+
|
|
135
|
+
1. Create a feature branch (`git checkout -b feature/amazing-feature`)
|
|
136
|
+
3. Commit your changes (`git commit -m 'Add amazing feature'`)
|
|
137
|
+
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
138
|
+
5. Open a Pull Request
|
|
139
|
+
|
|
140
|
+
## Resources
|
|
141
|
+
|
|
142
|
+
- [Layerre Documentation](https://layerre.com/docs)
|
|
143
|
+
- [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)
|
|
144
|
+
|
|
145
|
+
## License
|
|
146
|
+
|
|
147
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties, Icon } from 'n8n-workflow';
|
|
2
|
+
export declare class LayerreApi 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,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LayerreApi = void 0;
|
|
4
|
+
class LayerreApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'layerreApi';
|
|
7
|
+
this.displayName = 'Layerre API';
|
|
8
|
+
this.documentationUrl = 'https://layerre.com/docs';
|
|
9
|
+
this.icon = 'file:../nodes/Layerre/layerre.svg';
|
|
10
|
+
this.properties = [
|
|
11
|
+
{
|
|
12
|
+
displayName: 'API Key',
|
|
13
|
+
name: 'apiKey',
|
|
14
|
+
type: 'string',
|
|
15
|
+
typeOptions: { password: true },
|
|
16
|
+
required: true,
|
|
17
|
+
default: '',
|
|
18
|
+
description: 'Your Layerre API key (starts with lyr_)',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
displayName: 'Base URL',
|
|
22
|
+
name: 'baseUrl',
|
|
23
|
+
type: 'string',
|
|
24
|
+
default: 'https://api.layerre.com',
|
|
25
|
+
description: 'The base URL of the Layerre API',
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
this.authenticate = {
|
|
29
|
+
type: 'generic',
|
|
30
|
+
properties: {
|
|
31
|
+
headers: {
|
|
32
|
+
Authorization: '=Bearer {{$credentials.apiKey}}',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
this.test = {
|
|
37
|
+
request: {
|
|
38
|
+
baseURL: '={{$credentials.baseUrl}}',
|
|
39
|
+
url: '/v1/templates',
|
|
40
|
+
method: 'GET',
|
|
41
|
+
qs: {
|
|
42
|
+
limit: 1,
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.LayerreApi = LayerreApi;
|
|
49
|
+
//# sourceMappingURL=LayerreApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LayerreApi.credentials.js","sourceRoot":"","sources":["../../credentials/LayerreApi.credentials.ts"],"names":[],"mappings":";;;AAQA,MAAa,UAAU;IAAvB;QACC,SAAI,GAAG,YAAY,CAAC;QAEpB,gBAAW,GAAG,aAAa,CAAC;QAE5B,qBAAgB,GAAG,0BAA0B,CAAC;QAE9C,SAAI,GAAS,mCAAmC,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,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,yCAAyC;aACtD;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,yBAAyB;gBAClC,WAAW,EAAE,iCAAiC;aAC9C;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,iCAAiC;iBAChD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,2BAA2B;gBACpC,GAAG,EAAE,eAAe;gBACpB,MAAM,EAAE,KAAK;gBACb,EAAE,EAAE;oBACH,KAAK,EAAE,CAAC;iBACR;aACD;SACD,CAAC;IACH,CAAC;CAAA;AA/CD,gCA+CC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { IExecuteFunctions, ILoadOptionsFunctions, IHttpRequestMethods, IDataObject } from 'n8n-workflow';
|
|
2
|
+
export declare function layerreApiRequest(this: IExecuteFunctions | ILoadOptionsFunctions, method: IHttpRequestMethods, endpoint: string, body?: IDataObject, qs?: IDataObject): Promise<IDataObject | IDataObject[]>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.layerreApiRequest = layerreApiRequest;
|
|
4
|
+
async function layerreApiRequest(method, endpoint, body = {}, qs = {}) {
|
|
5
|
+
const credentials = await this.getCredentials('layerreApi');
|
|
6
|
+
const baseUrl = credentials.baseUrl || 'https://api.layerre.com';
|
|
7
|
+
const options = {
|
|
8
|
+
method,
|
|
9
|
+
url: `${baseUrl}${endpoint}`,
|
|
10
|
+
qs,
|
|
11
|
+
body,
|
|
12
|
+
json: true,
|
|
13
|
+
headers: {
|
|
14
|
+
Authorization: `Bearer ${credentials.apiKey}`,
|
|
15
|
+
'Content-Type': 'application/json',
|
|
16
|
+
Accept: 'application/json',
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
if (Object.keys(body).length === 0) {
|
|
20
|
+
delete options.body;
|
|
21
|
+
}
|
|
22
|
+
if (Object.keys(qs).length === 0) {
|
|
23
|
+
delete options.qs;
|
|
24
|
+
}
|
|
25
|
+
return await this.helpers.httpRequest(options);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=GenericFunctions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/Layerre/GenericFunctions.ts"],"names":[],"mappings":";;AAWA,8CAgCC;AAhCM,KAAK,UAAU,iBAAiB,CAEtC,MAA2B,EAC3B,QAAgB,EAChB,OAAoB,EAAE,EACtB,KAAkB,EAAE;IAEpB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAI,WAAW,CAAC,OAAkB,IAAI,yBAAyB,CAAC;IAE7E,MAAM,OAAO,GAAwB;QACpC,MAAM;QACN,GAAG,EAAE,GAAG,OAAO,GAAG,QAAQ,EAAE;QAC5B,EAAE;QACF,IAAI;QACJ,IAAI,EAAE,IAAI;QACV,OAAO,EAAE;YACR,aAAa,EAAE,UAAU,WAAW,CAAC,MAAM,EAAE;YAC7C,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;SAC1B;KACD,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type INodeType, type INodeTypeDescription, type ILoadOptionsFunctions, type INodePropertyOptions } from 'n8n-workflow';
|
|
2
|
+
export declare class Layerre implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
methods: {
|
|
5
|
+
loadOptions: {
|
|
6
|
+
getTemplates(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
|
|
7
|
+
getLayers(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
|
|
8
|
+
getVariants(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Layerre = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const template_1 = require("./resources/template");
|
|
6
|
+
const variant_1 = require("./resources/variant");
|
|
7
|
+
const GenericFunctions_1 = require("./GenericFunctions");
|
|
8
|
+
class Layerre {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.description = {
|
|
11
|
+
displayName: 'Layerre',
|
|
12
|
+
name: 'layerre',
|
|
13
|
+
icon: 'file:layerre.svg',
|
|
14
|
+
group: ['transform'],
|
|
15
|
+
version: 1,
|
|
16
|
+
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
17
|
+
description: 'Create templates and variants from Canva designs with Layerre',
|
|
18
|
+
defaults: {
|
|
19
|
+
name: 'Layerre',
|
|
20
|
+
},
|
|
21
|
+
usableAsTool: true,
|
|
22
|
+
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
23
|
+
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
24
|
+
credentials: [{ name: 'layerreApi', required: true }],
|
|
25
|
+
requestDefaults: {
|
|
26
|
+
baseURL: '={{$credentials.baseUrl || "https://api.layerre.com"}}/v1',
|
|
27
|
+
headers: {
|
|
28
|
+
Accept: 'application/json',
|
|
29
|
+
'Content-Type': 'application/json',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
properties: [
|
|
33
|
+
{
|
|
34
|
+
displayName: 'Resource',
|
|
35
|
+
name: 'resource',
|
|
36
|
+
type: 'options',
|
|
37
|
+
noDataExpression: true,
|
|
38
|
+
options: [
|
|
39
|
+
{
|
|
40
|
+
name: 'Template',
|
|
41
|
+
value: 'template',
|
|
42
|
+
description: 'Create and manage templates from Canva designs',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Variant',
|
|
46
|
+
value: 'variant',
|
|
47
|
+
description: 'Create variants with layer overrides',
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
default: 'template',
|
|
51
|
+
},
|
|
52
|
+
...template_1.templateDescription,
|
|
53
|
+
...variant_1.variantDescription,
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
this.methods = {
|
|
57
|
+
loadOptions: {
|
|
58
|
+
async getTemplates() {
|
|
59
|
+
try {
|
|
60
|
+
const templates = await GenericFunctions_1.layerreApiRequest.call(this, 'GET', '/v1/templates', {}, {
|
|
61
|
+
limit: 100,
|
|
62
|
+
skip: 0,
|
|
63
|
+
});
|
|
64
|
+
if (!Array.isArray(templates)) {
|
|
65
|
+
return [
|
|
66
|
+
{
|
|
67
|
+
name: 'Invalid Response From API',
|
|
68
|
+
value: '',
|
|
69
|
+
description: 'Please check your API credentials and try again',
|
|
70
|
+
},
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
if (templates.length === 0) {
|
|
74
|
+
return [
|
|
75
|
+
{
|
|
76
|
+
name: 'No Templates Found',
|
|
77
|
+
value: '',
|
|
78
|
+
description: 'Create a template first to see it here',
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
}
|
|
82
|
+
const sortedTemplates = templates.sort((a, b) => {
|
|
83
|
+
const dateA = a.updated_at ? new Date(a.updated_at).getTime() : 0;
|
|
84
|
+
const dateB = b.updated_at ? new Date(b.updated_at).getTime() : 0;
|
|
85
|
+
return dateB - dateA;
|
|
86
|
+
});
|
|
87
|
+
const options = sortedTemplates.map((template) => {
|
|
88
|
+
const name = template.name || 'Unnamed Template';
|
|
89
|
+
const id = template.id.substring(0, 8);
|
|
90
|
+
return {
|
|
91
|
+
name: `${name}`,
|
|
92
|
+
value: template.id,
|
|
93
|
+
description: `ID: ${id}`,
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
if (templates.length >= 100) {
|
|
97
|
+
options.push({
|
|
98
|
+
name: '─────────────────────────────',
|
|
99
|
+
value: '',
|
|
100
|
+
description: 'Showing most recent 100 templates. Use Template ID directly if not listed.',
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return options;
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
return [
|
|
107
|
+
{
|
|
108
|
+
name: 'Could Not Load Templates',
|
|
109
|
+
value: '',
|
|
110
|
+
description: `${error instanceof Error ? error.message : 'Unknown error'}. Please check your API credentials and try again.`,
|
|
111
|
+
},
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
async getLayers() {
|
|
116
|
+
try {
|
|
117
|
+
const templateId = this.getCurrentNodeParameter('templateId');
|
|
118
|
+
if (!templateId) {
|
|
119
|
+
return [
|
|
120
|
+
{
|
|
121
|
+
name: 'Please Select a Template First',
|
|
122
|
+
value: '',
|
|
123
|
+
description: 'Choose a template to see its layers',
|
|
124
|
+
},
|
|
125
|
+
];
|
|
126
|
+
}
|
|
127
|
+
const template = (await GenericFunctions_1.layerreApiRequest.call(this, 'GET', `/v1/template/${templateId}`));
|
|
128
|
+
if (!template || !Array.isArray(template.layers)) {
|
|
129
|
+
return [
|
|
130
|
+
{
|
|
131
|
+
name: 'Could Not Load Template Layers',
|
|
132
|
+
value: '',
|
|
133
|
+
description: 'Template may not exist or has no layers. Please check the template ID and try again.',
|
|
134
|
+
},
|
|
135
|
+
];
|
|
136
|
+
}
|
|
137
|
+
if (template.layers.length === 0) {
|
|
138
|
+
return [
|
|
139
|
+
{
|
|
140
|
+
name: 'No Layers Found',
|
|
141
|
+
value: '',
|
|
142
|
+
description: 'This template has no editable layers',
|
|
143
|
+
},
|
|
144
|
+
];
|
|
145
|
+
}
|
|
146
|
+
const layers = template.layers;
|
|
147
|
+
const sortedLayers = layers.sort((a, b) => {
|
|
148
|
+
const typeOrder = { text: 1, image: 2, shape: 3 };
|
|
149
|
+
const typeA = typeOrder[a.layer_type] || 99;
|
|
150
|
+
const typeB = typeOrder[b.layer_type] || 99;
|
|
151
|
+
if (typeA !== typeB)
|
|
152
|
+
return typeA - typeB;
|
|
153
|
+
return a.name.localeCompare(b.name);
|
|
154
|
+
});
|
|
155
|
+
return sortedLayers.map((layer) => {
|
|
156
|
+
const layerType = layer.layer_type;
|
|
157
|
+
const properties = layer.properties || {};
|
|
158
|
+
const layerName = layer.name;
|
|
159
|
+
let description = `${layerType.charAt(0).toUpperCase() + layerType.slice(1)} layer`;
|
|
160
|
+
if (layerType === 'text' && properties.text) {
|
|
161
|
+
const text = properties.text;
|
|
162
|
+
description = text.length > 40 ? `"${text.substring(0, 40)}..."` : `"${text}"`;
|
|
163
|
+
}
|
|
164
|
+
else if (layerType === 'image' && properties.img_url) {
|
|
165
|
+
const url = properties.img_url;
|
|
166
|
+
const fileName = url.split('/').pop() || 'image';
|
|
167
|
+
description = fileName.length > 30 ? fileName.substring(0, 30) + '...' : fileName;
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
name: layerName,
|
|
171
|
+
value: layer.id,
|
|
172
|
+
description: description,
|
|
173
|
+
};
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
return [
|
|
178
|
+
{
|
|
179
|
+
name: 'Could Not Load Layers',
|
|
180
|
+
value: '',
|
|
181
|
+
description: `${error instanceof Error ? error.message : 'Unknown error'}. Please check the template ID and try again.`,
|
|
182
|
+
},
|
|
183
|
+
];
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
async getVariants() {
|
|
187
|
+
try {
|
|
188
|
+
const templateId = this.getCurrentNodeParameter('templateId');
|
|
189
|
+
if (!templateId) {
|
|
190
|
+
return [
|
|
191
|
+
{
|
|
192
|
+
name: 'Please Select a Template First',
|
|
193
|
+
value: '',
|
|
194
|
+
description: 'Choose a template to see its variants',
|
|
195
|
+
},
|
|
196
|
+
];
|
|
197
|
+
}
|
|
198
|
+
const variants = await GenericFunctions_1.layerreApiRequest.call(this, 'GET', `/v1/template/${templateId}/variants`, {}, { limit: 100 });
|
|
199
|
+
if (!Array.isArray(variants)) {
|
|
200
|
+
return [
|
|
201
|
+
{
|
|
202
|
+
name: 'Invalid Response From API',
|
|
203
|
+
value: '',
|
|
204
|
+
description: 'Please check your API credentials and try again',
|
|
205
|
+
},
|
|
206
|
+
];
|
|
207
|
+
}
|
|
208
|
+
if (variants.length === 0) {
|
|
209
|
+
return [
|
|
210
|
+
{
|
|
211
|
+
name: 'No Variants Found',
|
|
212
|
+
value: '',
|
|
213
|
+
description: 'Create a variant for this template first',
|
|
214
|
+
},
|
|
215
|
+
];
|
|
216
|
+
}
|
|
217
|
+
const sortedVariants = variants.sort((a, b) => {
|
|
218
|
+
const dateA = a.created_at ? new Date(a.created_at).getTime() : 0;
|
|
219
|
+
const dateB = b.created_at ? new Date(b.created_at).getTime() : 0;
|
|
220
|
+
return dateB - dateA;
|
|
221
|
+
});
|
|
222
|
+
const options = sortedVariants.map((variant, index) => {
|
|
223
|
+
const id = variant.id.substring(0, 8);
|
|
224
|
+
const createdAt = variant.created_at
|
|
225
|
+
? new Date(variant.created_at).toLocaleDateString()
|
|
226
|
+
: 'Unknown date';
|
|
227
|
+
return {
|
|
228
|
+
name: `Variant #${index + 1} (${createdAt})`,
|
|
229
|
+
value: variant.id,
|
|
230
|
+
description: `ID: ${id}`,
|
|
231
|
+
};
|
|
232
|
+
});
|
|
233
|
+
if (variants.length >= 100) {
|
|
234
|
+
options.push({
|
|
235
|
+
name: '─────────────────────────────',
|
|
236
|
+
value: '',
|
|
237
|
+
description: 'Showing most recent 100 variants. Use Variant ID directly if not listed.',
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
return options;
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
return [
|
|
244
|
+
{
|
|
245
|
+
name: 'Could Not Load Variants',
|
|
246
|
+
value: '',
|
|
247
|
+
description: `${error instanceof Error ? error.message : 'Unknown error'}. Please check the template ID and try again.`,
|
|
248
|
+
},
|
|
249
|
+
];
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
exports.Layerre = Layerre;
|
|
257
|
+
//# sourceMappingURL=Layerre.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Layerre.node.js","sourceRoot":"","sources":["../../../nodes/Layerre/Layerre.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"node": "n8n-nodes-layerre.layerre",
|
|
3
|
+
"nodeVersion": "1.0",
|
|
4
|
+
"codexVersion": "1.0",
|
|
5
|
+
"categories": ["Marketing & Content", "Productivity"],
|
|
6
|
+
"resources": {
|
|
7
|
+
"credentialDocumentation": [
|
|
8
|
+
{
|
|
9
|
+
"url": "https://layerre.com/docs"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"primaryDocumentation": [
|
|
13
|
+
{
|
|
14
|
+
"url": "https://layerre.com/docs"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"alias": ["canva", "template", "image", "design", "variant"],
|
|
19
|
+
"subcategories": {
|
|
20
|
+
"Marketing & Content": ["Content Creation"]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
3
|
+
<!-- Creator: CorelDRAW -->
|
|
4
|
+
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="1800px" height="1380px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd"
|
|
5
|
+
viewBox="0 0 1800 1380"
|
|
6
|
+
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
7
|
+
xmlns:xodm="http://www.corel.com/coreldraw/odm/2003">
|
|
8
|
+
<defs>
|
|
9
|
+
<style type="text/css">
|
|
10
|
+
<![CDATA[
|
|
11
|
+
.str0 {stroke:black;stroke-width:0.9;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:22.9256}
|
|
12
|
+
.fil2 {fill:#172A38}
|
|
13
|
+
.fil1 {fill:#60D0FA}
|
|
14
|
+
.fil3 {fill:#172A38;fill-rule:nonzero}
|
|
15
|
+
.fil0 {fill:url(#id0)}
|
|
16
|
+
]]>
|
|
17
|
+
</style>
|
|
18
|
+
<linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="950.15" y1="1275.28" x2="922.23" y2="50.1">
|
|
19
|
+
<stop offset="0" style="stop-opacity:1; stop-color:#9AE2FB"/>
|
|
20
|
+
<stop offset="0.168627" style="stop-opacity:1; stop-color:#C5EFFD"/>
|
|
21
|
+
<stop offset="0.529412" style="stop-opacity:1; stop-color:#F1FCFF"/>
|
|
22
|
+
<stop offset="1" style="stop-opacity:1; stop-color:white"/>
|
|
23
|
+
</linearGradient>
|
|
24
|
+
</defs>
|
|
25
|
+
<g id="Layer_x0020_1">
|
|
26
|
+
<metadata id="CorelCorpID_0Corel-Layer"/>
|
|
27
|
+
<path class="fil0 str0" d="M230.26 732.83c6.04,-4.45 12.45,-8.45 19.21,-11.93 -167.19,-220.74 42.2,-518.14 309.37,-447.58 102.55,-331.06 571.52,-323.39 659.69,11.82 186.45,-49.13 357.02,133.13 288.29,319.04 71.27,3.25 115.62,37.91 139.35,87.97 122.34,-62.45 195.16,103.4 5.93,222.51 -21.27,78.2 -62.15,150.55 -111.39,188.01 -63.97,48.67 -153.92,60.26 -231.92,41.19 -143.99,249.22 -482.1,277.65 -685.03,60.49 -92.65,48.57 -202.99,40.68 -290.8,-13.2 -86.39,-53.01 -142.38,-144.09 -150.98,-245.16 -281.39,-149.88 -113.24,-362.76 48.28,-213.16z"/>
|
|
28
|
+
<path class="fil1" d="M1664.1 856.08c-13.6,98.94 -61.98,199.87 -123.39,246.59 -63.97,48.67 -153.92,60.26 -231.92,41.19 -143.99,249.22 -482.1,277.65 -685.03,60.49 -92.65,48.57 -202.99,40.68 -290.8,-13.2 -86.39,-53.01 -142.38,-144.09 -150.98,-245.16 12.97,5.23 29.66,11.94 50.05,20.14 95.54,143.45 243.55,187.69 380.64,133.79 11.72,-4.61 19.6,-5.17 26.15,0.95 203.79,190.45 525.65,159.05 647.99,-66.33 6.13,-11.29 8.37,-12.61 19.38,-10.15 160.97,35.96 280.95,-23.4 357.91,-168.31z"/>
|
|
29
|
+
<path class="fil2" d="M715.58 518.16c35.52,0 57.25,36.8 57.25,82.21 0,45.41 -20.43,82.22 -57.25,82.22 -36.83,0 -57.26,-36.81 -57.26,-82.22 0,-45.41 21.73,-82.21 57.26,-82.21z"/>
|
|
30
|
+
<path class="fil2" d="M1094.02 518.16c35.52,0 57.25,36.8 57.25,82.21 0,45.41 -20.43,82.22 -57.25,82.22 -36.83,0 -57.26,-36.81 -57.26,-82.22 0,-45.41 21.73,-82.21 57.26,-82.21z"/>
|
|
31
|
+
<path class="fil3" d="M813.09 771.1c-11.57,-12.66 -11.98,-27.37 -3.54,-36.75 8.08,-8.99 23.28,-11.98 35.51,-1.01 20.72,18.6 47.98,27.97 75.36,28.24 27.38,-0.27 54.63,-9.64 75.36,-28.24 12.23,-10.97 27.42,-7.98 35.5,1.01 8.44,9.38 8.03,24.09 -3.54,36.75 -28.49,31.16 -66.82,48.64 -107.32,48.49 -40.51,0.15 -78.83,-17.33 -107.33,-48.49z"/>
|
|
32
|
+
<path class="fil3" d="M218.24 986.98c7.02,29.22 18.48,56.98 33.83,82.33 23.52,38.87 56.25,72.22 96.16,96.71 40.33,24.75 85.8,38.78 131.69,40.86 43.97,2 89.3,-10.9 129.81,-31.8 11.57,-6.94 25.78,-5.14 35.39,5.11 30.77,32.93 64.8,63.81 100.78,84.75 151.91,81.67 341.83,68.75 466.81,-46.1 24.87,-23.42 45.9,-54.12 64.88,-85.71 8.72,-14.5 18.55,-21.6 39.4,-16.54 36.27,10.37 74.21,9.05 111.72,2.39 34.47,-6.12 67.19,-19.19 94.32,-39.82 44.62,-33.95 81.99,-101.43 101.48,-174.76 12.94,-48.69 17.73,-99.39 11.25,-144.02 -10.86,-74.88 -42.49,-131.7 -128.13,-126.7 -20.56,0.58 -35.04,-15.05 -27.75,-34.79 16.28,-44.04 16.75,-91.71 6.46,-131.06 -8.57,-32.75 -24.97,-62.92 -47.02,-88.06 -53.71,-61.26 -131.51,-86.05 -210.46,-65.25 -15.66,4.14 -31.05,-2.63 -35.17,-18.35 -22.13,-84.14 -73.8,-147.87 -133.95,-186.54 -49.5,-31.83 -107.16,-48.38 -165.22,-49.55 -58.12,-1.17 -116.6,13.08 -167.67,42.84 -58.37,34.03 -105.87,90.42 -133.24,165.81 -4.88,13.45 -9.67,29.48 -21.64,35.25 -12.24,5.88 -27.32,-1.91 -39.5,-5.38 -98.45,-28.06 -204.98,19.47 -267.36,111.5 -62.68,92.48 -58.11,205.94 8.83,294.89 1.25,1.56 2.36,3.26 3.31,5.12 5.4,10.62 3.75,22.99 -3.22,31.74 6.48,4.26 11.29,5.8 17.8,9.89 25.6,16.08 51.53,28.68 76.06,39.3 14.9,6.43 21.79,23.76 15.38,38.72 -6.4,14.96 -23.68,21.87 -38.58,15.45 -26.72,-11.57 -55.17,-25.43 -83.86,-43.45 -28.95,-18.18 -57.92,-40.5 -85.23,-68.8 -2.43,-2.53 -5.06,-4.86 -7.84,-6.99 -14.08,-10.8 -31.63,-15.83 -48.79,-15.17 -16.68,0.64 -32.77,6.72 -44.55,18.17 -2.07,2.01 -4.03,4.23 -5.87,6.64 -10.11,13.29 -12.85,30.14 -10.37,47.28 3.13,21.67 14.19,43.38 29.54,60.05 25.12,27.28 51.36,46.91 84.42,63.14 34.31,16.86 76.57,30.4 132.49,45 15.66,4.07 30.89,20.12 26.83,35.84 -4.06,15.73 -25.87,25.17 -41.53,21.1 -26.55,-6.94 -50.21,-13.84 -71.69,-21.04zm-31.53 -315.77c-38.84,-92.04 -25.64,-208.68 27.13,-292.46 68.63,-108.96 197.78,-164.09 323.72,-140.92 123.74,-323.9 595.34,-314.46 705.27,13 89.12,-14 177.42,20.03 237.85,86.53 29.31,32.26 51.11,71.47 62.38,114.58 10.48,40.07 11.89,83.33 1.82,127.32 48.7,3.24 88.28,26.37 113.22,74.4 61.8,-15.26 118.8,3.75 136.84,68.89 24.2,87.34 -42.31,170.73 -116.29,206.16 -23.38,81.66 -69.48,157.14 -122.5,197.47 -55.91,42.53 -158.43,80.62 -233.1,50.71 -20.47,31.99 -44.09,60.29 -70.16,84.82 -71.93,67.72 -162.34,106.79 -256.74,116.11 -94.1,9.28 -192.13,-11 -279.64,-61.94 -35.04,-20.39 -68.39,-45.68 -99.09,-75.94 -44.85,19.6 -92.69,27.87 -140.03,25.72 -168.13,-4.59 -314.7,-132.78 -324.14,-304.46 -2.08,-0.98 -4.15,-1.98 -6.19,-2.98 -39.77,-19.53 -69.43,-41.88 -99.7,-74.76 -45.68,-49.6 -67.25,-124.45 -23.58,-181.66 21.11,-27.64 53.78,-46.45 93.12,-49.78 23.84,-0.92 48.21,6.52 69.81,19.19zm1497.34 37.3c4.38,13.91 7.63,28.5 9.81,43.57 4.51,31.06 4.47,64.3 0.61,97.83 28.65,-23.26 44.81,-50.9 49.83,-76.48 2.42,-12.34 2.19,-23.86 -0.53,-33.68 -2.4,-8.68 -6.81,-16.11 -13.06,-21.51 -10.02,-8.67 -25.63,-12.76 -46.66,-9.73z"/>
|
|
33
|
+
</g>
|
|
34
|
+
</svg>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.templateCreateDescription = void 0;
|
|
4
|
+
const showOnlyForTemplateCreate = {
|
|
5
|
+
operation: ['create'],
|
|
6
|
+
resource: ['template'],
|
|
7
|
+
};
|
|
8
|
+
exports.templateCreateDescription = [
|
|
9
|
+
{
|
|
10
|
+
displayName: 'Canva URL',
|
|
11
|
+
name: 'canvaUrl',
|
|
12
|
+
type: 'string',
|
|
13
|
+
default: '',
|
|
14
|
+
required: true,
|
|
15
|
+
typeOptions: {
|
|
16
|
+
maxLength: 2048,
|
|
17
|
+
},
|
|
18
|
+
displayOptions: {
|
|
19
|
+
show: showOnlyForTemplateCreate,
|
|
20
|
+
},
|
|
21
|
+
placeholder: 'e.g. https://www.canva.com/design/DAFxyz123/example',
|
|
22
|
+
description: 'The Canva share URL for the design to import as a template',
|
|
23
|
+
routing: {
|
|
24
|
+
send: {
|
|
25
|
+
type: 'body',
|
|
26
|
+
property: 'canva_url',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
//# sourceMappingURL=create.js.map
|