@cloudconvert/n8n-nodes-cloudconvert 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 (87) hide show
  1. package/LICENSE.md +19 -0
  2. package/README.md +68 -0
  3. package/dist/credentials/CloudConvertApi.credentials.d.ts +9 -0
  4. package/dist/credentials/CloudConvertApi.credentials.js +36 -0
  5. package/dist/credentials/CloudConvertApi.credentials.js.map +1 -0
  6. package/dist/credentials/CloudConvertOAuth2Api.credentials.d.ts +8 -0
  7. package/dist/credentials/CloudConvertOAuth2Api.credentials.js +52 -0
  8. package/dist/credentials/CloudConvertOAuth2Api.credentials.js.map +1 -0
  9. package/dist/credentials/ExampleCredentialsApi.credentials.d.ts +8 -0
  10. package/dist/credentials/ExampleCredentialsApi.credentials.js +46 -0
  11. package/dist/credentials/ExampleCredentialsApi.credentials.js.map +1 -0
  12. package/dist/credentials/HttpBinApi.credentials.d.ts +9 -0
  13. package/dist/credentials/HttpBinApi.credentials.js +40 -0
  14. package/dist/credentials/HttpBinApi.credentials.js.map +1 -0
  15. package/dist/nodes/CloudConvert/CloudConvert.node.d.ts +11 -0
  16. package/dist/nodes/CloudConvert/CloudConvert.node.js +315 -0
  17. package/dist/nodes/CloudConvert/CloudConvert.node.js.map +1 -0
  18. package/dist/nodes/CloudConvert/CloudConvert.node.json +22 -0
  19. package/dist/nodes/CloudConvert/Interfaces.d.ts +37 -0
  20. package/dist/nodes/CloudConvert/Interfaces.js +3 -0
  21. package/dist/nodes/CloudConvert/Interfaces.js.map +1 -0
  22. package/dist/nodes/CloudConvert/Utils.d.ts +9 -0
  23. package/dist/nodes/CloudConvert/Utils.js +117 -0
  24. package/dist/nodes/CloudConvert/Utils.js.map +1 -0
  25. package/dist/nodes/CloudConvert/cloudconvert.png +0 -0
  26. package/dist/nodes/CloudConvert/convert/execute.d.ts +2 -0
  27. package/dist/nodes/CloudConvert/convert/execute.js +64 -0
  28. package/dist/nodes/CloudConvert/convert/execute.js.map +1 -0
  29. package/dist/nodes/CloudConvert/operations/archive/execute.d.ts +2 -0
  30. package/dist/nodes/CloudConvert/operations/archive/execute.js +41 -0
  31. package/dist/nodes/CloudConvert/operations/archive/execute.js.map +1 -0
  32. package/dist/nodes/CloudConvert/operations/capture-website/execute.d.ts +2 -0
  33. package/dist/nodes/CloudConvert/operations/capture-website/execute.js +53 -0
  34. package/dist/nodes/CloudConvert/operations/capture-website/execute.js.map +1 -0
  35. package/dist/nodes/CloudConvert/operations/capture-website/fields.d.ts +2 -0
  36. package/dist/nodes/CloudConvert/operations/capture-website/fields.js +19 -0
  37. package/dist/nodes/CloudConvert/operations/capture-website/fields.js.map +1 -0
  38. package/dist/nodes/CloudConvert/operations/convert/execute.d.ts +2 -0
  39. package/dist/nodes/CloudConvert/operations/convert/execute.js +60 -0
  40. package/dist/nodes/CloudConvert/operations/convert/execute.js.map +1 -0
  41. package/dist/nodes/CloudConvert/operations/execute.d.ts +2 -0
  42. package/dist/nodes/CloudConvert/operations/execute.js +7 -0
  43. package/dist/nodes/CloudConvert/operations/execute.js.map +1 -0
  44. package/dist/nodes/CloudConvert/operations/merge/execute.d.ts +2 -0
  45. package/dist/nodes/CloudConvert/operations/merge/execute.js +41 -0
  46. package/dist/nodes/CloudConvert/operations/merge/execute.js.map +1 -0
  47. package/dist/nodes/CloudConvert/operations/metadata/execute.d.ts +2 -0
  48. package/dist/nodes/CloudConvert/operations/metadata/execute.js +36 -0
  49. package/dist/nodes/CloudConvert/operations/metadata/execute.js.map +1 -0
  50. package/dist/nodes/CloudConvert/operations/optimize/execute.d.ts +2 -0
  51. package/dist/nodes/CloudConvert/operations/optimize/execute.js +59 -0
  52. package/dist/nodes/CloudConvert/operations/optimize/execute.js.map +1 -0
  53. package/dist/nodes/CloudConvert/operations/thumbnail/description.d.ts +2 -0
  54. package/dist/nodes/CloudConvert/operations/thumbnail/description.js +58 -0
  55. package/dist/nodes/CloudConvert/operations/thumbnail/description.js.map +1 -0
  56. package/dist/nodes/CloudConvert/operations/thumbnail/execute.d.ts +2 -0
  57. package/dist/nodes/CloudConvert/operations/thumbnail/execute.js +65 -0
  58. package/dist/nodes/CloudConvert/operations/thumbnail/execute.js.map +1 -0
  59. package/dist/nodes/CloudConvert/operations/thumbnail/fields.d.ts +2 -0
  60. package/dist/nodes/CloudConvert/operations/thumbnail/fields.js +58 -0
  61. package/dist/nodes/CloudConvert/operations/thumbnail/fields.js.map +1 -0
  62. package/dist/nodes/CloudConvert/operations/watermark/execute.d.ts +2 -0
  63. package/dist/nodes/CloudConvert/operations/watermark/execute.js +80 -0
  64. package/dist/nodes/CloudConvert/operations/watermark/execute.js.map +1 -0
  65. package/dist/nodes/CloudConvert/operations/watermark/fields.d.ts +2 -0
  66. package/dist/nodes/CloudConvert/operations/watermark/fields.js +164 -0
  67. package/dist/nodes/CloudConvert/operations/watermark/fields.js.map +1 -0
  68. package/dist/nodes/CloudConvert/test/CloudConvert.node.test.d.ts +1 -0
  69. package/dist/nodes/CloudConvert/test/CloudConvert.node.test.js +103 -0
  70. package/dist/nodes/CloudConvert/test/CloudConvert.node.test.js.map +1 -0
  71. package/dist/nodes/CloudConvert/test/CloudConvert.workflow.test.json +354 -0
  72. package/dist/nodes/CloudConvert/test/ExecuteWorkflow.d.ts +7 -0
  73. package/dist/nodes/CloudConvert/test/ExecuteWorkflow.js +48 -0
  74. package/dist/nodes/CloudConvert/test/ExecuteWorkflow.js.map +1 -0
  75. package/dist/nodes/CloudConvert/test/FakeCredentialsMap.d.ts +8 -0
  76. package/dist/nodes/CloudConvert/test/FakeCredentialsMap.js +12 -0
  77. package/dist/nodes/CloudConvert/test/FakeCredentialsMap.js.map +1 -0
  78. package/dist/nodes/CloudConvert/test/Helpers.d.ts +32 -0
  79. package/dist/nodes/CloudConvert/test/Helpers.js +240 -0
  80. package/dist/nodes/CloudConvert/test/Helpers.js.map +1 -0
  81. package/dist/nodes/CloudConvert/test/types.d.ts +16 -0
  82. package/dist/nodes/CloudConvert/test/types.js +3 -0
  83. package/dist/nodes/CloudConvert/test/types.js.map +1 -0
  84. package/dist/package.json +67 -0
  85. package/dist/tsconfig.tsbuildinfo +1 -0
  86. package/index.js +0 -0
  87. package/package.json +67 -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,68 @@
1
+ # n8n-nodes-cloudconvert
2
+
3
+ This is an n8n community node. It lets you use [CloudConvert](https://cloudconvert.com) your n8n workflows.
4
+
5
+ CloudConvert is an online file conversion and processing API which allows to convert files, create thumbnails, merge files, add watermarks and more!
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
+ [Operations](#operations)
11
+ [Credentials](#credentials) <!-- delete if no auth needed -->
12
+ [Compatibility](#compatibility)
13
+ [Usage](#usage) <!-- delete if not using this section -->
14
+ [Resources](#resources)
15
+ [Version history](#version-history) <!-- delete if not using this section -->
16
+
17
+ ## Installation
18
+
19
+ Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
20
+
21
+ 1. Go to **Settings > Community Nodes**.
22
+ 2. Select **Install**.
23
+ 3. Enter `@cloudconvert/n8n-nodes-cloudconvert` in **Enter npm package name**.
24
+ 4. Agree to the [risks](https://docs.n8n.io/integrations/community-nodes/risks/) of using community nodes: select **I understand the risks of installing unverified code from a public source**.
25
+ 5. Select **Install**.
26
+
27
+ After installing the node, you can use it like any other node. n8n displays the node in search results in the **Nodes** panel.
28
+
29
+ ## Operations
30
+
31
+ It supports these operations:
32
+
33
+ - Convert files from one format to another
34
+ - Create thumbnails of files
35
+ - Add watermarks to images, PDFs and videos
36
+ - Capture website screenshots and save websites as PDF
37
+ - Merge multiple input files in one single PDF
38
+ - Create archives (ZIP, RAR...) for multiple input files
39
+ - Get file metadata (EXIF etc)
40
+
41
+ ## Credentials
42
+
43
+ Create a free CloudConvert account [here](https://cloudconvert.com/register) which allows 25 free credits per day.
44
+
45
+ - Generate OAuth 2 credentials (default auth method) here: https://cloudconvert.com/dashboard/api/v2/clients
46
+ - Generate an API key (alternative auth method) here: https://cloudconvert.com/dashboard/api/v2/keys
47
+
48
+ ## Compatibility
49
+
50
+ Tested against n8n version 0.226+.
51
+
52
+ ## Usage
53
+
54
+ A typical workflow using this node would look like this:
55
+ <img width="906" alt="image" src="https://github.com/n8n-io/n8n/assets/1945577/3cd6f332-74ee-4997-8e67-7d873a124592">
56
+
57
+ This is a workflow merging multiple input files in a single PDF:
58
+ <img width="1276" alt="image" src="https://github.com/n8n-io/n8n/assets/1945577/9324c941-eb86-48ac-8d83-aaeecf16fd09">
59
+
60
+
61
+
62
+ ## Resources
63
+
64
+ * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
65
+ * [CloudConvert API v2 Documentation](https://cloudconvert.com/api/v2)
66
+
67
+
68
+
@@ -0,0 +1,9 @@
1
+ import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class CloudConvertApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ properties: INodeProperties[];
7
+ authenticate: IAuthenticateGeneric;
8
+ test: ICredentialTestRequest;
9
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CloudConvertApi = void 0;
4
+ class CloudConvertApi {
5
+ constructor() {
6
+ this.name = 'cloudConvertApi';
7
+ this.displayName = 'CloudConvert API';
8
+ this.documentationUrl = 'https://cloudconvert.com/dashboard/api/v2/keys';
9
+ this.properties = [
10
+ {
11
+ displayName: 'API Key',
12
+ name: 'apiKey',
13
+ description: 'The API Key can be generated on your dashboard. The n8n nodes requires the "user.read", "task.read" and "task.write" scopes.',
14
+ type: 'string',
15
+ typeOptions: { password: true },
16
+ default: '',
17
+ },
18
+ ];
19
+ this.authenticate = {
20
+ type: 'generic',
21
+ properties: {
22
+ headers: {
23
+ Authorization: '=Bearer {{$credentials.apiKey}}',
24
+ },
25
+ },
26
+ };
27
+ this.test = {
28
+ request: {
29
+ baseURL: 'https://api.cloudconvert.com/v2',
30
+ url: '/me',
31
+ },
32
+ };
33
+ }
34
+ }
35
+ exports.CloudConvertApi = CloudConvertApi;
36
+ //# sourceMappingURL=CloudConvertApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudConvertApi.credentials.js","sourceRoot":"","sources":["../../credentials/CloudConvertApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,eAAe;IAA5B;QACC,SAAI,GAAG,iBAAiB,CAAC;QAEzB,gBAAW,GAAG,kBAAkB,CAAC;QAEjC,qBAAgB,GAAG,gDAAgD,CAAC;QAEpE,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,WAAW,EACV,8HAA8H;gBAC/H,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;aACX;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,iCAAiC;gBAC1C,GAAG,EAAE,KAAK;aACV;SACD,CAAC;IACH,CAAC;CAAA;AAlCD,0CAkCC"}
@@ -0,0 +1,8 @@
1
+ import type { ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class CloudConvertOAuth2Api implements ICredentialType {
3
+ name: string;
4
+ extends: string[];
5
+ displayName: string;
6
+ documentationUrl: string;
7
+ properties: INodeProperties[];
8
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CloudConvertOAuth2Api = void 0;
4
+ const scopes = ['user.read', 'task.read', 'task.write'];
5
+ class CloudConvertOAuth2Api {
6
+ constructor() {
7
+ this.name = 'cloudConvertOAuth2Api';
8
+ this.extends = ['oAuth2Api'];
9
+ this.displayName = 'CloudConvert OAuth2 API';
10
+ this.documentationUrl = 'https://cloudconvert.com/api/v2#authentication';
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://cloudconvert.com/oauth/authorize',
23
+ },
24
+ {
25
+ displayName: 'Access Token URL',
26
+ name: 'accessTokenUrl',
27
+ type: 'hidden',
28
+ default: 'https://cloudconvert.com/oauth/token',
29
+ },
30
+ {
31
+ displayName: 'Auth URI Query Parameters',
32
+ name: 'authQueryParameters',
33
+ type: 'hidden',
34
+ default: '',
35
+ },
36
+ {
37
+ displayName: 'Authentication',
38
+ name: 'authentication',
39
+ type: 'hidden',
40
+ default: 'body',
41
+ },
42
+ {
43
+ displayName: 'Scope',
44
+ name: 'scope',
45
+ type: 'hidden',
46
+ default: scopes.join(' '),
47
+ },
48
+ ];
49
+ }
50
+ }
51
+ exports.CloudConvertOAuth2Api = CloudConvertOAuth2Api;
52
+ //# sourceMappingURL=CloudConvertOAuth2Api.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudConvertOAuth2Api.credentials.js","sourceRoot":"","sources":["../../credentials/CloudConvertOAuth2Api.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAM,MAAM,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAExD,MAAa,qBAAqB;IAAlC;QACC,SAAI,GAAG,uBAAuB,CAAC;QAE/B,YAAO,GAAG,CAAC,WAAW,CAAC,CAAC;QAExB,gBAAW,GAAG,yBAAyB,CAAC;QAExC,qBAAgB,GAAG,gDAAgD,CAAC;QAEpE,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,0CAA0C;aACnD;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,sCAAsC;aAC/C;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;YACD;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;aACzB;SACD,CAAC;IACH,CAAC;CAAA;AA/CD,sDA+CC"}
@@ -0,0 +1,8 @@
1
+ import { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class ExampleCredentialsApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ properties: INodeProperties[];
6
+ authenticate: IAuthenticateGeneric;
7
+ test: ICredentialTestRequest;
8
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExampleCredentialsApi = void 0;
4
+ class ExampleCredentialsApi {
5
+ constructor() {
6
+ this.name = 'exampleCredentialsApi';
7
+ this.displayName = 'Example Credentials API';
8
+ this.properties = [
9
+ {
10
+ displayName: 'User Name',
11
+ name: 'username',
12
+ type: 'string',
13
+ default: '',
14
+ },
15
+ {
16
+ displayName: 'Password',
17
+ name: 'password',
18
+ type: 'string',
19
+ typeOptions: {
20
+ password: true,
21
+ },
22
+ default: '',
23
+ },
24
+ ];
25
+ this.authenticate = {
26
+ type: 'generic',
27
+ properties: {
28
+ auth: {
29
+ username: '={{ $credentials.username }}',
30
+ password: '={{ $credentials.password }}',
31
+ },
32
+ qs: {
33
+ n8n: 'rocks',
34
+ },
35
+ },
36
+ };
37
+ this.test = {
38
+ request: {
39
+ baseURL: 'https://example.com/',
40
+ url: '',
41
+ },
42
+ };
43
+ }
44
+ }
45
+ exports.ExampleCredentialsApi = ExampleCredentialsApi;
46
+ //# sourceMappingURL=ExampleCredentialsApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExampleCredentialsApi.credentials.js","sourceRoot":"","sources":["../../credentials/ExampleCredentialsApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,qBAAqB;IAAlC;QACC,SAAI,GAAG,uBAAuB,CAAC;QAC/B,gBAAW,GAAG,yBAAyB,CAAC;QACxC,eAAU,GAAsB;YAI/B;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;aACX;SACD,CAAC;QAKF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,IAAI,EAAE;oBACL,QAAQ,EAAE,8BAA8B;oBACxC,QAAQ,EAAE,8BAA8B;iBACxC;gBACD,EAAE,EAAE;oBAEH,GAAG,EAAE,OAAO;iBACZ;aACD;SACD,CAAC;QAGF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,sBAAsB;gBAC/B,GAAG,EAAE,EAAE;aACP;SACD,CAAC;IACH,CAAC;CAAA;AAhDD,sDAgDC"}
@@ -0,0 +1,9 @@
1
+ import { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class HttpBinApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ properties: INodeProperties[];
7
+ authenticate: IAuthenticateGeneric;
8
+ test: ICredentialTestRequest;
9
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpBinApi = void 0;
4
+ class HttpBinApi {
5
+ constructor() {
6
+ this.name = 'httpbinApi';
7
+ this.displayName = 'HttpBin API';
8
+ this.documentationUrl = '<your-docs-url>';
9
+ this.properties = [
10
+ {
11
+ displayName: 'Token',
12
+ name: 'token',
13
+ type: 'string',
14
+ default: '',
15
+ },
16
+ {
17
+ displayName: 'Domain',
18
+ name: 'domain',
19
+ type: 'string',
20
+ default: 'https://httpbin.org',
21
+ },
22
+ ];
23
+ this.authenticate = {
24
+ type: 'generic',
25
+ properties: {
26
+ headers: {
27
+ Authorization: '={{"Bearer " + $credentials.token}}',
28
+ },
29
+ },
30
+ };
31
+ this.test = {
32
+ request: {
33
+ baseURL: '={{$credentials?.domain}}',
34
+ url: '/bearer',
35
+ },
36
+ };
37
+ }
38
+ }
39
+ exports.HttpBinApi = HttpBinApi;
40
+ //# sourceMappingURL=HttpBinApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpBinApi.credentials.js","sourceRoot":"","sources":["../../credentials/HttpBinApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,UAAU;IAAvB;QACC,SAAI,GAAG,YAAY,CAAC;QACpB,gBAAW,GAAG,aAAa,CAAC;QAC5B,qBAAgB,GAAG,iBAAiB,CAAC;QACrC,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,QAAQ;gBACrB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,qBAAqB;aAC9B;SACD,CAAC;QAMF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,qCAAqC;iBACpD;aACD;SACD,CAAC;QAGF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,2BAA2B;gBACpC,GAAG,EAAE,SAAS;aACd;SACD,CAAC;IACH,CAAC;CAAA;AAvCD,gCAuCC"}
@@ -0,0 +1,11 @@
1
+ import type { IExecuteFunctions } from 'n8n-core';
2
+ import type { ILoadOptionsFunctions, INodeExecutionData, INodePropertyOptions, INodeType, INodeTypeDescription } from 'n8n-workflow';
3
+ export declare class CloudConvert implements INodeType {
4
+ description: INodeTypeDescription;
5
+ methods: {
6
+ loadOptions: {
7
+ loadOutputFormats(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
8
+ };
9
+ };
10
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
11
+ }
@@ -0,0 +1,315 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CloudConvert = void 0;
7
+ const lodash_keys_1 = __importDefault(require("lodash.keys"));
8
+ const lodash_keyby_1 = __importDefault(require("lodash.keyby"));
9
+ const n8n_workflow_1 = require("n8n-workflow");
10
+ const fields_1 = require("./operations/thumbnail/fields");
11
+ const execute_1 = require("./operations/thumbnail/execute");
12
+ const execute_2 = require("./operations/convert/execute");
13
+ const execute_3 = require("./operations/merge/execute");
14
+ const execute_4 = require("./operations/archive/execute");
15
+ const execute_5 = require("./operations/optimize/execute");
16
+ const fields_2 = require("./operations/watermark/fields");
17
+ const execute_6 = require("./operations/watermark/execute");
18
+ const execute_7 = require("./operations/metadata/execute");
19
+ const execute_8 = require("./operations/capture-website/execute");
20
+ const fields_3 = require("./operations/capture-website/fields");
21
+ class CloudConvert {
22
+ constructor() {
23
+ this.description = {
24
+ displayName: 'CloudConvert',
25
+ name: 'cloudConvert',
26
+ icon: 'file:cloudconvert.png',
27
+ group: ['transform'],
28
+ version: 1,
29
+ subtitle: '={{ $parameter["operation"] }}',
30
+ description: 'Use CloudConvert to convert files, create thumbnails, merge files, add watermarks and more!',
31
+ defaults: {
32
+ name: 'CloudConvert',
33
+ },
34
+ inputs: ['main'],
35
+ outputs: ['main'],
36
+ credentials: [
37
+ {
38
+ name: 'cloudConvertApi',
39
+ required: true,
40
+ displayOptions: {
41
+ show: {
42
+ authentication: ['apiKey'],
43
+ },
44
+ },
45
+ },
46
+ {
47
+ name: 'cloudConvertOAuth2Api',
48
+ required: true,
49
+ displayOptions: {
50
+ show: {
51
+ authentication: ['oAuth2'],
52
+ },
53
+ },
54
+ },
55
+ ],
56
+ properties: [
57
+ {
58
+ displayName: 'Authentication',
59
+ name: 'authentication',
60
+ type: 'options',
61
+ options: [
62
+ {
63
+ name: 'OAuth2 (Recommended)',
64
+ value: 'oAuth2',
65
+ },
66
+ {
67
+ name: 'API Key',
68
+ value: 'apiKey',
69
+ },
70
+ ],
71
+ default: 'oAuth2',
72
+ },
73
+ {
74
+ displayName: 'Operation',
75
+ name: 'operation',
76
+ type: 'options',
77
+ options: [
78
+ {
79
+ name: 'Add Watermark',
80
+ value: 'watermark',
81
+ description: 'Add a watermark to a PDF file, to an image or to a video',
82
+ action: 'Add watermark to a file',
83
+ },
84
+ {
85
+ name: 'Capture Website',
86
+ value: 'capture-website',
87
+ description: 'Creates job to capture a website as PDF or create a website screenshot as JPG or PNG',
88
+ action: 'Capture website',
89
+ },
90
+ {
91
+ name: 'Convert File',
92
+ value: 'convert',
93
+ description: 'Convert a file to a different format',
94
+ action: 'Convert a file',
95
+ },
96
+ {
97
+ name: 'Create Archive',
98
+ value: 'archive',
99
+ description: 'Create an archive (ZIP, RAR...) for multiple files',
100
+ action: 'Create archive',
101
+ },
102
+ {
103
+ name: 'Create Thumbnail',
104
+ value: 'thumbnail',
105
+ description: 'Create a thumbnail of a file',
106
+ action: 'Create a thumbnail',
107
+ },
108
+ {
109
+ name: 'Get Metadata',
110
+ value: 'metadata',
111
+ description: 'Extract metadata from files',
112
+ action: 'Get metadata from a file',
113
+ },
114
+ {
115
+ name: 'Merge Files',
116
+ value: 'merge',
117
+ description: 'Merge multiple files into a single PDF',
118
+ action: 'Merge files to PDF',
119
+ },
120
+ {
121
+ name: 'Optimize File',
122
+ value: 'optimize',
123
+ description: 'Optimize / compress a file to reduce its size',
124
+ action: 'Optimize a file',
125
+ },
126
+ ],
127
+ default: 'convert',
128
+ noDataExpression: true,
129
+ },
130
+ {
131
+ displayName: 'Output Format',
132
+ name: 'outputFormat',
133
+ type: 'options',
134
+ default: '',
135
+ required: true,
136
+ displayOptions: {
137
+ show: {
138
+ operation: ['convert', 'merge', 'archive', 'thumbnail', 'capture-website'],
139
+ },
140
+ },
141
+ typeOptions: {
142
+ loadOptionsDependsOn: ['operation'],
143
+ loadOptionsMethod: 'loadOutputFormats',
144
+ },
145
+ placeholder: '',
146
+ description: 'Output format the file should be converted to',
147
+ },
148
+ {
149
+ displayName: 'Binary Input Data',
150
+ name: 'inputBinaryData',
151
+ type: 'boolean',
152
+ default: true,
153
+ displayOptions: {
154
+ show: {
155
+ operation: [
156
+ 'convert',
157
+ 'merge',
158
+ 'archive',
159
+ 'thumbnail',
160
+ 'optimize',
161
+ 'metadata',
162
+ 'watermark',
163
+ ],
164
+ },
165
+ },
166
+ description: 'Whether the input file to upload should be taken from binary field',
167
+ },
168
+ {
169
+ displayName: 'Input File Content',
170
+ name: 'inputFileContent',
171
+ type: 'string',
172
+ default: '',
173
+ required: true,
174
+ displayOptions: {
175
+ show: {
176
+ operation: [
177
+ 'convert',
178
+ 'merge',
179
+ 'archive',
180
+ 'thumbnail',
181
+ 'optimize',
182
+ 'metadata',
183
+ 'watermark',
184
+ ],
185
+ inputBinaryData: [false],
186
+ },
187
+ },
188
+ placeholder: '',
189
+ description: 'The text content of the file to upload',
190
+ },
191
+ {
192
+ displayName: 'Input Filename',
193
+ name: 'inputFilename',
194
+ type: 'string',
195
+ default: '',
196
+ required: true,
197
+ displayOptions: {
198
+ show: {
199
+ operation: [
200
+ 'convert',
201
+ 'merge',
202
+ 'archive',
203
+ 'thumbnail',
204
+ 'optimize',
205
+ 'metadata',
206
+ 'watermark',
207
+ ],
208
+ inputBinaryData: [false],
209
+ },
210
+ },
211
+ placeholder: '',
212
+ description: 'The input filename, including extension',
213
+ },
214
+ {
215
+ displayName: 'Binary Property',
216
+ name: 'inputBinaryPropertyName',
217
+ type: 'string',
218
+ default: 'data',
219
+ required: true,
220
+ displayOptions: {
221
+ show: {
222
+ operation: [
223
+ 'convert',
224
+ 'merge',
225
+ 'archive',
226
+ 'thumbnail',
227
+ 'optimize',
228
+ 'metadata',
229
+ 'watermark',
230
+ ],
231
+ inputBinaryData: [true],
232
+ },
233
+ },
234
+ placeholder: '',
235
+ description: 'Name of the binary property which contains the data for the file to be converted',
236
+ },
237
+ ...fields_3.captureWebsiteFields,
238
+ ...fields_1.thumbnailFields,
239
+ ...fields_2.watermarkFields,
240
+ {
241
+ displayName: 'Additional Options',
242
+ name: 'additionalOptions',
243
+ type: 'json',
244
+ default: '',
245
+ displayOptions: {
246
+ show: {
247
+ operation: [
248
+ 'convert',
249
+ 'thumbnail',
250
+ 'optimize',
251
+ 'metadata',
252
+ 'watermark',
253
+ 'capture-website',
254
+ ],
255
+ },
256
+ },
257
+ placeholder: '{}',
258
+ description: 'JSON dictionary of additional options which will be added to the converting task. You can use the CloudConvert job builder to show and generate these options.',
259
+ },
260
+ ],
261
+ };
262
+ this.methods = {
263
+ loadOptions: {
264
+ async loadOutputFormats() {
265
+ const operation = this.getCurrentNodeParameter('operation');
266
+ const returnData = [];
267
+ const { data } = await this.helpers.request({
268
+ method: 'GET',
269
+ json: true,
270
+ url: `https://api.cloudconvert.com/v2/operations?filter[operation]=${operation}`,
271
+ });
272
+ for (const outputFormat of (0, lodash_keys_1.default)((0, lodash_keyby_1.default)(data, 'output_format'))) {
273
+ returnData.push({
274
+ name: outputFormat,
275
+ value: outputFormat,
276
+ });
277
+ }
278
+ return returnData;
279
+ },
280
+ },
281
+ };
282
+ }
283
+ async execute() {
284
+ const operation = this.getNodeParameter('operation', 0);
285
+ if (operation === 'convert') {
286
+ return execute_2.executeConvert.call(this);
287
+ }
288
+ else if (operation === 'thumbnail') {
289
+ return execute_1.executeThumbnail.call(this);
290
+ }
291
+ else if (operation === 'merge') {
292
+ return execute_3.executeMerge.call(this);
293
+ }
294
+ else if (operation === 'archive') {
295
+ return execute_4.executeArchive.call(this);
296
+ }
297
+ else if (operation === 'optimize') {
298
+ return execute_5.executeOptimize.call(this);
299
+ }
300
+ else if (operation === 'watermark') {
301
+ return execute_6.executeWatermark.call(this);
302
+ }
303
+ else if (operation === 'metadata') {
304
+ return execute_7.executeMetadata.call(this);
305
+ }
306
+ else if (operation === 'capture-website') {
307
+ return execute_8.executeCaptureWebsite.call(this);
308
+ }
309
+ else {
310
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Invalid operation ${operation}`);
311
+ }
312
+ }
313
+ }
314
+ exports.CloudConvert = CloudConvert;
315
+ //# sourceMappingURL=CloudConvert.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudConvert.node.js","sourceRoot":"","sources":["../../../nodes/CloudConvert/CloudConvert.node.ts"],"names":[],"mappings":"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"}