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.
Files changed (47) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +147 -0
  3. package/dist/credentials/LayerreApi.credentials.d.ts +10 -0
  4. package/dist/credentials/LayerreApi.credentials.js +49 -0
  5. package/dist/credentials/LayerreApi.credentials.js.map +1 -0
  6. package/dist/nodes/Layerre/GenericFunctions.d.ts +2 -0
  7. package/dist/nodes/Layerre/GenericFunctions.js +27 -0
  8. package/dist/nodes/Layerre/GenericFunctions.js.map +1 -0
  9. package/dist/nodes/Layerre/Layerre.node.d.ts +11 -0
  10. package/dist/nodes/Layerre/Layerre.node.js +257 -0
  11. package/dist/nodes/Layerre/Layerre.node.js.map +1 -0
  12. package/dist/nodes/Layerre/Layerre.node.json +22 -0
  13. package/dist/nodes/Layerre/layerre.png +0 -0
  14. package/dist/nodes/Layerre/layerre.svg +34 -0
  15. package/dist/nodes/Layerre/resources/template/create.d.ts +2 -0
  16. package/dist/nodes/Layerre/resources/template/create.js +31 -0
  17. package/dist/nodes/Layerre/resources/template/create.js.map +1 -0
  18. package/dist/nodes/Layerre/resources/template/delete.d.ts +2 -0
  19. package/dist/nodes/Layerre/resources/template/delete.js +24 -0
  20. package/dist/nodes/Layerre/resources/template/delete.js.map +1 -0
  21. package/dist/nodes/Layerre/resources/template/get.d.ts +2 -0
  22. package/dist/nodes/Layerre/resources/template/get.js +24 -0
  23. package/dist/nodes/Layerre/resources/template/get.js.map +1 -0
  24. package/dist/nodes/Layerre/resources/template/getAll.d.ts +2 -0
  25. package/dist/nodes/Layerre/resources/template/getAll.js +71 -0
  26. package/dist/nodes/Layerre/resources/template/getAll.js.map +1 -0
  27. package/dist/nodes/Layerre/resources/template/index.d.ts +2 -0
  28. package/dist/nodes/Layerre/resources/template/index.js +77 -0
  29. package/dist/nodes/Layerre/resources/template/index.js.map +1 -0
  30. package/dist/nodes/Layerre/resources/variant/create.d.ts +2 -0
  31. package/dist/nodes/Layerre/resources/variant/create.js +312 -0
  32. package/dist/nodes/Layerre/resources/variant/create.js.map +1 -0
  33. package/dist/nodes/Layerre/resources/variant/delete.d.ts +2 -0
  34. package/dist/nodes/Layerre/resources/variant/delete.js +39 -0
  35. package/dist/nodes/Layerre/resources/variant/delete.js.map +1 -0
  36. package/dist/nodes/Layerre/resources/variant/get.d.ts +2 -0
  37. package/dist/nodes/Layerre/resources/variant/get.js +39 -0
  38. package/dist/nodes/Layerre/resources/variant/get.js.map +1 -0
  39. package/dist/nodes/Layerre/resources/variant/getAll.d.ts +2 -0
  40. package/dist/nodes/Layerre/resources/variant/getAll.js +72 -0
  41. package/dist/nodes/Layerre/resources/variant/getAll.js.map +1 -0
  42. package/dist/nodes/Layerre/resources/variant/index.d.ts +2 -0
  43. package/dist/nodes/Layerre/resources/variant/index.js +168 -0
  44. package/dist/nodes/Layerre/resources/variant/index.js.map +1 -0
  45. package/dist/package.json +37 -0
  46. package/dist/tsconfig.tsbuildinfo +1 -0
  47. 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,2 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const templateCreateDescription: INodeProperties[];
@@ -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