n8n-nodes-cloudinary 0.0.9 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +51 -0
  2. package/dist/credentials/CloudinaryApi.credentials.js +16 -0
  3. package/dist/credentials/CloudinaryApi.credentials.js.map +1 -1
  4. package/dist/nodes/Cloudinary/Cloudinary.node.d.ts +0 -1
  5. package/dist/nodes/Cloudinary/Cloudinary.node.js +26 -707
  6. package/dist/nodes/Cloudinary/Cloudinary.node.js.map +1 -1
  7. package/dist/nodes/Cloudinary/Cloudinary.node.json +5 -1
  8. package/dist/nodes/Cloudinary/cloudinary.utils.d.ts +34 -0
  9. package/dist/nodes/Cloudinary/cloudinary.utils.js +114 -3
  10. package/dist/nodes/Cloudinary/cloudinary.utils.js.map +1 -1
  11. package/dist/nodes/Cloudinary/descriptions/admin/getTags.fields.d.ts +2 -0
  12. package/dist/nodes/Cloudinary/descriptions/admin/getTags.fields.js +64 -0
  13. package/dist/nodes/Cloudinary/descriptions/admin/getTags.fields.js.map +1 -0
  14. package/dist/nodes/Cloudinary/descriptions/admin/search.fields.d.ts +2 -0
  15. package/dist/nodes/Cloudinary/descriptions/admin/search.fields.js +119 -0
  16. package/dist/nodes/Cloudinary/descriptions/admin/search.fields.js.map +1 -0
  17. package/dist/nodes/Cloudinary/descriptions/asset.fields.d.ts +2 -0
  18. package/dist/nodes/Cloudinary/descriptions/asset.fields.js +357 -0
  19. package/dist/nodes/Cloudinary/descriptions/asset.fields.js.map +1 -0
  20. package/dist/nodes/Cloudinary/descriptions/index.d.ts +2 -0
  21. package/dist/nodes/Cloudinary/descriptions/index.js +22 -0
  22. package/dist/nodes/Cloudinary/descriptions/index.js.map +1 -0
  23. package/dist/nodes/Cloudinary/descriptions/resource.d.ts +2 -0
  24. package/dist/nodes/Cloudinary/descriptions/resource.js +267 -0
  25. package/dist/nodes/Cloudinary/descriptions/resource.js.map +1 -0
  26. package/dist/nodes/Cloudinary/descriptions/transform.fields.d.ts +2 -0
  27. package/dist/nodes/Cloudinary/descriptions/transform.fields.js +742 -0
  28. package/dist/nodes/Cloudinary/descriptions/transform.fields.js.map +1 -0
  29. package/dist/nodes/Cloudinary/descriptions/updateAsset.fields.d.ts +2 -0
  30. package/dist/nodes/Cloudinary/descriptions/updateAsset.fields.js +262 -0
  31. package/dist/nodes/Cloudinary/descriptions/updateAsset.fields.js.map +1 -0
  32. package/dist/nodes/Cloudinary/descriptions/upload.fields.d.ts +2 -0
  33. package/dist/nodes/Cloudinary/descriptions/upload.fields.js +191 -0
  34. package/dist/nodes/Cloudinary/descriptions/upload.fields.js.map +1 -0
  35. package/dist/nodes/Cloudinary/descriptions/widget.fields.d.ts +2 -0
  36. package/dist/nodes/Cloudinary/descriptions/widget.fields.js +268 -0
  37. package/dist/nodes/Cloudinary/descriptions/widget.fields.js.map +1 -0
  38. package/dist/nodes/Cloudinary/operations/admin/getMetadataFields.d.ts +2 -0
  39. package/dist/nodes/Cloudinary/operations/admin/getMetadataFields.js +17 -0
  40. package/dist/nodes/Cloudinary/operations/admin/getMetadataFields.js.map +1 -0
  41. package/dist/nodes/Cloudinary/operations/admin/getTags.d.ts +2 -0
  42. package/dist/nodes/Cloudinary/operations/admin/getTags.js +28 -0
  43. package/dist/nodes/Cloudinary/operations/admin/getTags.js.map +1 -0
  44. package/dist/nodes/Cloudinary/operations/admin/search.d.ts +2 -0
  45. package/dist/nodes/Cloudinary/operations/admin/search.js +92 -0
  46. package/dist/nodes/Cloudinary/operations/admin/search.js.map +1 -0
  47. package/dist/nodes/Cloudinary/operations/asset/updateMetadata.d.ts +2 -0
  48. package/dist/nodes/Cloudinary/operations/asset/updateMetadata.js +25 -0
  49. package/dist/nodes/Cloudinary/operations/asset/updateMetadata.js.map +1 -0
  50. package/dist/nodes/Cloudinary/operations/asset/updateTags.d.ts +2 -0
  51. package/dist/nodes/Cloudinary/operations/asset/updateTags.js +30 -0
  52. package/dist/nodes/Cloudinary/operations/asset/updateTags.js.map +1 -0
  53. package/dist/nodes/Cloudinary/operations/index.d.ts +2 -0
  54. package/dist/nodes/Cloudinary/operations/index.js +50 -0
  55. package/dist/nodes/Cloudinary/operations/index.js.map +1 -0
  56. package/dist/nodes/Cloudinary/operations/tagAppend.d.ts +4 -0
  57. package/dist/nodes/Cloudinary/operations/tagAppend.js +44 -0
  58. package/dist/nodes/Cloudinary/operations/tagAppend.js.map +1 -0
  59. package/dist/nodes/Cloudinary/operations/transform/convertImage.d.ts +2 -0
  60. package/dist/nodes/Cloudinary/operations/transform/convertImage.js +23 -0
  61. package/dist/nodes/Cloudinary/operations/transform/convertImage.js.map +1 -0
  62. package/dist/nodes/Cloudinary/operations/transform/cropImage.d.ts +3 -0
  63. package/dist/nodes/Cloudinary/operations/transform/cropImage.js +31 -0
  64. package/dist/nodes/Cloudinary/operations/transform/cropImage.js.map +1 -0
  65. package/dist/nodes/Cloudinary/operations/transform/customTransformation.d.ts +2 -0
  66. package/dist/nodes/Cloudinary/operations/transform/customTransformation.js +28 -0
  67. package/dist/nodes/Cloudinary/operations/transform/customTransformation.js.map +1 -0
  68. package/dist/nodes/Cloudinary/operations/transform/multiStep.d.ts +2 -0
  69. package/dist/nodes/Cloudinary/operations/transform/multiStep.js +78 -0
  70. package/dist/nodes/Cloudinary/operations/transform/multiStep.js.map +1 -0
  71. package/dist/nodes/Cloudinary/operations/transform/optimizeImage.d.ts +2 -0
  72. package/dist/nodes/Cloudinary/operations/transform/optimizeImage.js +22 -0
  73. package/dist/nodes/Cloudinary/operations/transform/optimizeImage.js.map +1 -0
  74. package/dist/nodes/Cloudinary/operations/transform/optimizeVideo.d.ts +2 -0
  75. package/dist/nodes/Cloudinary/operations/transform/optimizeVideo.js +22 -0
  76. package/dist/nodes/Cloudinary/operations/transform/optimizeVideo.js.map +1 -0
  77. package/dist/nodes/Cloudinary/operations/transform/resizeImage.d.ts +3 -0
  78. package/dist/nodes/Cloudinary/operations/transform/resizeImage.js +28 -0
  79. package/dist/nodes/Cloudinary/operations/transform/resizeImage.js.map +1 -0
  80. package/dist/nodes/Cloudinary/operations/transform/shared.d.ts +47 -0
  81. package/dist/nodes/Cloudinary/operations/transform/shared.js +179 -0
  82. package/dist/nodes/Cloudinary/operations/transform/shared.js.map +1 -0
  83. package/dist/nodes/Cloudinary/operations/transform/trimVideo.d.ts +2 -0
  84. package/dist/nodes/Cloudinary/operations/transform/trimVideo.js +24 -0
  85. package/dist/nodes/Cloudinary/operations/transform/trimVideo.js.map +1 -0
  86. package/dist/nodes/Cloudinary/operations/transform/videoThumbnail.d.ts +2 -0
  87. package/dist/nodes/Cloudinary/operations/transform/videoThumbnail.js +34 -0
  88. package/dist/nodes/Cloudinary/operations/transform/videoThumbnail.js.map +1 -0
  89. package/dist/nodes/Cloudinary/operations/types.d.ts +10 -0
  90. package/dist/nodes/Cloudinary/operations/types.js +5 -0
  91. package/dist/nodes/Cloudinary/operations/types.js.map +1 -0
  92. package/dist/nodes/Cloudinary/operations/updateAsset/deleteAssets.d.ts +2 -0
  93. package/dist/nodes/Cloudinary/operations/updateAsset/deleteAssets.js +36 -0
  94. package/dist/nodes/Cloudinary/operations/updateAsset/deleteAssets.js.map +1 -0
  95. package/dist/nodes/Cloudinary/operations/updateAsset/getAsset.d.ts +2 -0
  96. package/dist/nodes/Cloudinary/operations/updateAsset/getAsset.js +20 -0
  97. package/dist/nodes/Cloudinary/operations/updateAsset/getAsset.js.map +1 -0
  98. package/dist/nodes/Cloudinary/operations/updateAsset/updateMetadata.d.ts +2 -0
  99. package/dist/nodes/Cloudinary/operations/updateAsset/updateMetadata.js +27 -0
  100. package/dist/nodes/Cloudinary/operations/updateAsset/updateMetadata.js.map +1 -0
  101. package/dist/nodes/Cloudinary/operations/updateAsset/updateTags.d.ts +2 -0
  102. package/dist/nodes/Cloudinary/operations/updateAsset/updateTags.js +32 -0
  103. package/dist/nodes/Cloudinary/operations/updateAsset/updateTags.js.map +1 -0
  104. package/dist/nodes/Cloudinary/operations/upload/uploadFile.d.ts +2 -0
  105. package/dist/nodes/Cloudinary/operations/upload/uploadFile.js +44 -0
  106. package/dist/nodes/Cloudinary/operations/upload/uploadFile.js.map +1 -0
  107. package/dist/nodes/Cloudinary/operations/upload/uploadUrl.d.ts +2 -0
  108. package/dist/nodes/Cloudinary/operations/upload/uploadUrl.js +34 -0
  109. package/dist/nodes/Cloudinary/operations/upload/uploadUrl.js.map +1 -0
  110. package/dist/nodes/Cloudinary/operations/widget/videoPlayer.d.ts +2 -0
  111. package/dist/nodes/Cloudinary/operations/widget/videoPlayer.js +170 -0
  112. package/dist/nodes/Cloudinary/operations/widget/videoPlayer.js.map +1 -0
  113. package/dist/package.json +7 -3
  114. package/dist/tsconfig.tsbuildinfo +1 -1
  115. package/package.json +7 -3
  116. package/dist/nodes/Cloudinary/sha1.utils.d.ts +0 -1
  117. package/dist/nodes/Cloudinary/sha1.utils.js +0 -68
  118. package/dist/nodes/Cloudinary/sha1.utils.js.map +0 -1
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.widgetFields = void 0;
4
+ exports.widgetFields = [
5
+ {
6
+ displayName: 'Autoplay Mode',
7
+ name: 'playerAutoplayMode',
8
+ type: 'options',
9
+ options: [
10
+ { name: 'Never', value: '', description: 'Do not autoplay (player default)' },
11
+ { name: 'Always', value: 'always', description: 'Autoplay as soon as the player loads' },
12
+ { name: 'On Scroll', value: 'on-scroll', description: 'Autoplay when the player scrolls into view' },
13
+ ],
14
+ default: '',
15
+ description: 'When the video should start playing automatically. Most browsers require the player to be muted for autoplay to work.',
16
+ displayOptions: {
17
+ show: { resource: ['widget'], operation: ['videoPlayer'] },
18
+ },
19
+ },
20
+ {
21
+ displayName: 'Muted',
22
+ name: 'playerMuted',
23
+ type: 'boolean',
24
+ default: false,
25
+ description: 'Whether the player starts muted',
26
+ displayOptions: {
27
+ show: { resource: ['widget'], operation: ['videoPlayer'] },
28
+ },
29
+ },
30
+ {
31
+ displayName: 'Loop',
32
+ name: 'playerLoop',
33
+ type: 'boolean',
34
+ default: false,
35
+ description: 'Whether the video restarts from the beginning when it ends',
36
+ displayOptions: {
37
+ show: { resource: ['widget'], operation: ['videoPlayer'] },
38
+ },
39
+ },
40
+ {
41
+ displayName: 'Source Types',
42
+ name: 'playerSourceTypes',
43
+ type: 'multiOptions',
44
+ options: [
45
+ { name: 'Auto', value: 'auto', description: 'Let the player pick the best available format' },
46
+ { name: 'HLS', value: 'hls', description: 'HTTP Live Streaming (adaptive bitrate)' },
47
+ { name: 'MP4', value: 'mp4', description: 'Progressive MP4' },
48
+ { name: 'MPEG-DASH', value: 'dash', description: 'Dynamic Adaptive Streaming over HTTP' },
49
+ { name: 'Ogg', value: 'ogg', description: 'Progressive Ogg' },
50
+ { name: 'WebM', value: 'webm', description: 'Progressive WebM' },
51
+ ],
52
+ default: [],
53
+ description: 'Preferred delivery formats in fallback order. Leave empty to use the player\'s default format selection. Note: the adaptive-streaming types (HLS, MPEG-DASH) deliver via a streaming profile and cannot be combined with a Transformation that pins a format (an f_ component such as f_auto:video, e.g. from an Optimize step). For adaptive streaming, keep the transformation to resize/crop/trim only.',
54
+ displayOptions: {
55
+ show: { resource: ['widget'], operation: ['videoPlayer'] },
56
+ },
57
+ },
58
+ {
59
+ displayName: 'Poster',
60
+ name: 'playerPoster',
61
+ type: 'string',
62
+ default: '',
63
+ description: 'URL of the still image shown before playback starts. Leave empty to use a frame from the video.',
64
+ displayOptions: {
65
+ show: { resource: ['widget'], operation: ['videoPlayer'] },
66
+ },
67
+ },
68
+ {
69
+ displayName: 'Transformation',
70
+ name: 'playerTransformation',
71
+ type: 'string',
72
+ default: '',
73
+ placeholder: 'c_fill,w_640,h_360/e_blur:500',
74
+ description: 'Cloudinary transformation string applied to the played video stream — in both the iframe embed URL and the player_config output. Use video-capable transforms (resize/crop, trim, e_blur, e_fade, vc_, etc.). Image-only effects such as e_grayscale are silently ignored on video, so they have no visible effect here; the poster image is a separate source and is not affected by this field. See the video effects reference: https://cloudinary.com/documentation/video_effects_and_enhancements.',
75
+ displayOptions: {
76
+ show: { resource: ['widget'], operation: ['videoPlayer'] },
77
+ },
78
+ },
79
+ {
80
+ displayName: 'Fluid',
81
+ name: 'playerFluid',
82
+ type: 'boolean',
83
+ default: false,
84
+ description: 'Whether the player resizes responsively to fill its container. When on, Width and Height are replaced by an aspect-ratio CSS style.',
85
+ displayOptions: {
86
+ show: { resource: ['widget'], operation: ['videoPlayer'] },
87
+ },
88
+ },
89
+ {
90
+ displayName: 'Width',
91
+ name: 'playerWidth',
92
+ type: 'number',
93
+ default: 0,
94
+ description: 'Player width in pixels. Leave 0 for the default (640 px).',
95
+ displayOptions: {
96
+ show: { resource: ['widget'], operation: ['videoPlayer'], playerFluid: [false] },
97
+ },
98
+ },
99
+ {
100
+ displayName: 'Height',
101
+ name: 'playerHeight',
102
+ type: 'number',
103
+ default: 0,
104
+ description: 'Player height in pixels. Leave 0 for the default (360 px).',
105
+ displayOptions: {
106
+ show: { resource: ['widget'], operation: ['videoPlayer'], playerFluid: [false] },
107
+ },
108
+ },
109
+ {
110
+ displayName: 'Aspect Ratio',
111
+ name: 'playerAspectRatio',
112
+ type: 'options',
113
+ options: [
114
+ { name: '1:1', value: '1:1' },
115
+ { name: '16:9', value: '16:9' },
116
+ { name: '9:16', value: '9:16' },
117
+ { name: 'Default', value: '' },
118
+ ],
119
+ default: '',
120
+ description: 'Player aspect ratio. Leave unset to use the video\'s natural dimensions.',
121
+ displayOptions: {
122
+ show: { resource: ['widget'], operation: ['videoPlayer'] },
123
+ },
124
+ },
125
+ {
126
+ displayName: 'Crop Mode',
127
+ name: 'playerCropMode',
128
+ type: 'options',
129
+ options: [
130
+ { name: 'Smart', value: 'smart', description: 'Keep the most important content in view (player default)' },
131
+ { name: 'Fill', value: 'fill', description: 'Cover the frame, cropping as needed' },
132
+ { name: 'Pad', value: 'pad', description: 'Fit the whole video within the frame and add padding' },
133
+ ],
134
+ default: 'smart',
135
+ description: 'How the player resizes the video to the chosen Aspect Ratio. Only relevant when Aspect Ratio is set (applies to progressive delivery, not adaptive streaming). If your Transformation already crops the video to a shape, applying an Aspect Ratio here crops it a second time — leave Aspect Ratio unset to keep just your transformation\'s framing. See https://cloudinary.com/documentation/video_player_customization.',
136
+ displayOptions: {
137
+ show: { resource: ['widget'], operation: ['videoPlayer'], playerAspectRatio: ['1:1', '16:9', '9:16'] },
138
+ },
139
+ },
140
+ {
141
+ displayName: 'Skin',
142
+ name: 'playerSkin',
143
+ type: 'options',
144
+ options: [
145
+ { name: 'Dark', value: 'dark' },
146
+ { name: 'Light', value: 'light' },
147
+ ],
148
+ default: 'dark',
149
+ description: 'Player theme',
150
+ displayOptions: {
151
+ show: { resource: ['widget'], operation: ['videoPlayer'] },
152
+ },
153
+ },
154
+ {
155
+ displayName: 'Base Color',
156
+ name: 'playerBaseColor',
157
+ type: 'color',
158
+ default: '',
159
+ description: 'Player base (background) color, as a hex value',
160
+ displayOptions: {
161
+ show: { resource: ['widget'], operation: ['videoPlayer'] },
162
+ },
163
+ },
164
+ {
165
+ displayName: 'Accent Color',
166
+ name: 'playerAccentColor',
167
+ type: 'color',
168
+ default: '',
169
+ description: 'Player accent (highlight) color, as a hex value',
170
+ displayOptions: {
171
+ show: { resource: ['widget'], operation: ['videoPlayer'] },
172
+ },
173
+ },
174
+ {
175
+ displayName: 'Text Color',
176
+ name: 'playerTextColor',
177
+ type: 'color',
178
+ default: '',
179
+ description: 'Player text color, as a hex value',
180
+ displayOptions: {
181
+ show: { resource: ['widget'], operation: ['videoPlayer'] },
182
+ },
183
+ },
184
+ {
185
+ displayName: 'Font Face',
186
+ name: 'playerFontFace',
187
+ type: 'string',
188
+ default: '',
189
+ description: 'The font applied to player text elements (titles, descriptions, recommendations, time counter). Accepts a Google Font name.',
190
+ displayOptions: {
191
+ show: { resource: ['widget'], operation: ['videoPlayer'] },
192
+ },
193
+ },
194
+ {
195
+ displayName: 'Advanced Player Options',
196
+ name: 'playerAdvancedOptions',
197
+ type: 'collection',
198
+ placeholder: 'Add Option',
199
+ default: {},
200
+ displayOptions: {
201
+ show: { resource: ['widget'], operation: ['videoPlayer'] },
202
+ },
203
+ options: [
204
+ {
205
+ displayName: 'Big Play Button',
206
+ name: 'bigPlayButton',
207
+ type: 'boolean',
208
+ default: true,
209
+ description: 'Whether to show a larger central play button when the video is paused',
210
+ },
211
+ {
212
+ displayName: 'Chapters Button',
213
+ name: 'chaptersButton',
214
+ type: 'boolean',
215
+ default: false,
216
+ description: 'Whether to show the chapters button, which opens a list of chapters',
217
+ },
218
+ {
219
+ displayName: 'Floating When Not Visible',
220
+ name: 'floatingWhenNotVisible',
221
+ type: 'options',
222
+ options: [
223
+ { name: 'Disabled', value: 'disabled' },
224
+ { name: 'Left', value: 'left' },
225
+ { name: 'Right', value: 'right' },
226
+ ],
227
+ default: 'disabled',
228
+ description: 'Whether the player should float into a mini-player corner when scrolled out of view',
229
+ },
230
+ {
231
+ displayName: 'HDR',
232
+ name: 'hdr',
233
+ type: 'boolean',
234
+ default: false,
235
+ description: 'Whether to deliver HDR video when the viewer\'s device and browser support it',
236
+ },
237
+ {
238
+ displayName: 'Picture In Picture Toggle',
239
+ name: 'pictureInPictureToggle',
240
+ type: 'boolean',
241
+ default: false,
242
+ description: 'Whether to show the picture-in-picture toggle, letting users view the video in a floating window',
243
+ },
244
+ {
245
+ displayName: 'Plays Inline',
246
+ name: 'playsinline',
247
+ type: 'boolean',
248
+ default: false,
249
+ description: 'Whether to prevent the player from entering fullscreen automatically on iOS when playback starts',
250
+ },
251
+ {
252
+ displayName: 'Seek Thumbnails',
253
+ name: 'seekThumbnails',
254
+ type: 'boolean',
255
+ default: true,
256
+ description: 'Whether to show thumbnail previews when seeking with the seek bar',
257
+ },
258
+ {
259
+ displayName: 'Show Controls',
260
+ name: 'controls',
261
+ type: 'boolean',
262
+ default: true,
263
+ description: 'Whether to show the built-in playback controls (play, pause, volume, fullscreen, etc.)',
264
+ },
265
+ ],
266
+ },
267
+ ];
268
+ //# sourceMappingURL=widget.fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget.fields.js","sourceRoot":"","sources":["../../../../nodes/Cloudinary/descriptions/widget.fields.ts"],"names":[],"mappings":";;;AAQa,QAAA,YAAY,GAAsB;IAC9C;QACC,WAAW,EAAE,eAAe;QAC5B,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE;YACR,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,kCAAkC,EAAE;YAC7E,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;YACxF,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,4CAA4C,EAAE;SACpG;QACD,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,uHAAuH;QACpI,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;SAC1D;KACD;IACD;QACC,WAAW,EAAE,OAAO;QACpB,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,iCAAiC;QAC9C,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;SAC1D;KACD;IACD;QACC,WAAW,EAAE,MAAM;QACnB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,4DAA4D;QACzE,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;SAC1D;KACD;IACD;QACC,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE;YACR,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,+CAA+C,EAAE;YAC7F,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,wCAAwC,EAAE;YACpF,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE;YAC7D,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,sCAAsC,EAAE;YACzF,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE;YAC7D,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE;SAChE;QACD,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,4YAA4Y;QACzZ,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;SAC1D;KACD;IACD;QACC,WAAW,EAAE,QAAQ;QACrB,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,iGAAiG;QAC9G,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;SAC1D;KACD;IACD;QACC,WAAW,EAAE,gBAAgB;QAC7B,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,+BAA+B;QAC5C,WAAW,EAAE,yeAAye;QACtf,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;SAC1D;KACD;IACD;QACC,WAAW,EAAE,OAAO;QACpB,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,qIAAqI;QAClJ,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;SAC1D;KACD;IACD;QACC,WAAW,EAAE,OAAO;QACpB,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,2DAA2D;QACxE,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE;SAChF;KACD;IACD;QACC,WAAW,EAAE,QAAQ;QACrB,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,4DAA4D;QACzE,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE;SAChF;KACD;IACD;QACC,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE;YACR,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;YAC7B,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;YAC/B,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;YAC/B,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;SAC9B;QACD,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,0EAA0E;QACvF,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;SAC1D;KACD;IACD;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE;YACR,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,0DAA0D,EAAE;YAC1G,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,qCAAqC,EAAE;YACnF,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,sDAAsD,EAAE;SAClG;QACD,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,6ZAA6Z;QAC1a,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;SACtG;KACD;IACD;QACC,WAAW,EAAE,MAAM;QACnB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE;YACR,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;YAC/B,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;SACjC;QACD,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,cAAc;QAC3B,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;SAC1D;KACD;IACD;QACC,WAAW,EAAE,YAAY;QACzB,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,gDAAgD;QAC7D,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;SAC1D;KACD;IACD;QACC,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,iDAAiD;QAC9D,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;SAC1D;KACD;IACD;QACC,WAAW,EAAE,YAAY;QACzB,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,mCAAmC;QAChD,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;SAC1D;KACD;IACD;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,6HAA6H;QAC1I,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;SAC1D;KACD;IACD;QACC,WAAW,EAAE,yBAAyB;QACtC,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,EAAE;QACX,cAAc,EAAE;YACf,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;SAC1D;QACD,OAAO,EAAE;YACR;gBACC,WAAW,EAAE,iBAAiB;gBAC9B,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,uEAAuE;aACpF;YACD;gBACC,WAAW,EAAE,iBAAiB;gBAC9B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,qEAAqE;aAClF;YACD;gBACC,WAAW,EAAE,2BAA2B;gBACxC,IAAI,EAAE,wBAAwB;gBAC9B,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE;oBACR,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;oBACvC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;oBAC/B,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;iBACjC;gBACD,OAAO,EAAE,UAAU;gBACnB,WAAW,EAAE,qFAAqF;aAClG;YACD;gBACC,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,+EAA+E;aAC5F;YACD;gBACC,WAAW,EAAE,2BAA2B;gBACxC,IAAI,EAAE,wBAAwB;gBAC9B,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,kGAAkG;aAC/G;YACD;gBACC,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,kGAAkG;aAC/G;YACD;gBACC,WAAW,EAAE,iBAAiB;gBAC9B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,mEAAmE;aAChF;YACD;gBACC,WAAW,EAAE,eAAe;gBAC5B,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,wFAAwF;aACrG;SACD;KACD;CACD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { OperationHandler } from '../types';
2
+ export declare const getMetadataFields: OperationHandler;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMetadataFields = void 0;
4
+ const cloudinary_utils_1 = require("../../cloudinary.utils");
5
+ const types_1 = require("../types");
6
+ const getMetadataFields = async (ctx, i, creds) => {
7
+ const options = {
8
+ method: 'GET',
9
+ url: `https://api.cloudinary.com/v1_1/${creds.cloudName}/metadata_fields`,
10
+ headers: (0, cloudinary_utils_1.jsonHeaders)(),
11
+ auth: (0, cloudinary_utils_1.basicAuth)(creds),
12
+ };
13
+ const response = await ctx.helpers.httpRequestWithAuthentication.call(ctx, types_1.CREDENTIAL_TYPE, options);
14
+ return [response];
15
+ };
16
+ exports.getMetadataFields = getMetadataFields;
17
+ //# sourceMappingURL=getMetadataFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMetadataFields.js","sourceRoot":"","sources":["../../../../../nodes/Cloudinary/operations/admin/getMetadataFields.ts"],"names":[],"mappings":";;;AACA,6DAAgE;AAChE,oCAA6D;AAEtD,MAAM,iBAAiB,GAAqB,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;IAC1E,MAAM,OAAO,GAAwB;QACpC,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,mCAAmC,KAAK,CAAC,SAAS,kBAAkB;QACzE,OAAO,EAAE,IAAA,8BAAW,GAAE;QACtB,IAAI,EAAE,IAAA,4BAAS,EAAC,KAAK,CAAC;KACtB,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CACpE,GAAG,EACH,uBAAe,EACf,OAAO,CACP,CAAC;IACF,OAAO,CAAC,QAAuB,CAAC,CAAC;AAClC,CAAC,CAAC;AAdW,QAAA,iBAAiB,qBAc5B"}
@@ -0,0 +1,2 @@
1
+ import { OperationHandler } from '../types';
2
+ export declare const getTags: OperationHandler;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTags = void 0;
4
+ const cloudinary_utils_1 = require("../../cloudinary.utils");
5
+ const types_1 = require("../types");
6
+ const getTags = async (ctx, i, creds) => {
7
+ const resourceType = ctx.getNodeParameter('getTagsResourceType', i);
8
+ const prefix = ctx.getNodeParameter('tagsPrefix', i, '');
9
+ const maxResults = ctx.getNodeParameter('tagsMaxResults', i, 100);
10
+ const queryParams = {};
11
+ if (prefix) {
12
+ queryParams.prefix = prefix;
13
+ }
14
+ if (maxResults) {
15
+ queryParams.max_results = maxResults;
16
+ }
17
+ const options = {
18
+ method: 'GET',
19
+ url: `https://api.cloudinary.com/v1_1/${creds.cloudName}/tags/${resourceType}`,
20
+ qs: queryParams,
21
+ headers: (0, cloudinary_utils_1.jsonHeaders)(),
22
+ auth: (0, cloudinary_utils_1.basicAuth)(creds),
23
+ };
24
+ const response = await ctx.helpers.httpRequestWithAuthentication.call(ctx, types_1.CREDENTIAL_TYPE, options);
25
+ return [response];
26
+ };
27
+ exports.getTags = getTags;
28
+ //# sourceMappingURL=getTags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTags.js","sourceRoot":"","sources":["../../../../../nodes/Cloudinary/operations/admin/getTags.ts"],"names":[],"mappings":";;;AACA,6DAAgE;AAChE,oCAA6D;AAEtD,MAAM,OAAO,GAAqB,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;IAChE,MAAM,YAAY,GAAG,GAAG,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAW,CAAC;IAC9E,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAW,CAAC;IACnE,MAAM,UAAU,GAAG,GAAG,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,EAAE,GAAG,CAAW,CAAC;IAE5E,MAAM,WAAW,GAAgB,EAAE,CAAC;IACpC,IAAI,MAAM,EAAE,CAAC;QACZ,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;IAC7B,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QAChB,WAAW,CAAC,WAAW,GAAG,UAAU,CAAC;IACtC,CAAC;IAED,MAAM,OAAO,GAAwB;QACpC,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,mCAAmC,KAAK,CAAC,SAAS,SAAS,YAAY,EAAE;QAC9E,EAAE,EAAE,WAAW;QACf,OAAO,EAAE,IAAA,8BAAW,GAAE;QACtB,IAAI,EAAE,IAAA,4BAAS,EAAC,KAAK,CAAC;KACtB,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CACpE,GAAG,EACH,uBAAe,EACf,OAAO,CACP,CAAC;IACF,OAAO,CAAC,QAAuB,CAAC,CAAC;AAClC,CAAC,CAAC;AA3BW,QAAA,OAAO,WA2BlB"}
@@ -0,0 +1,2 @@
1
+ import { OperationHandler } from '../types';
2
+ export declare const search: OperationHandler;
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.search = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const cloudinary_utils_1 = require("../../cloudinary.utils");
6
+ const types_1 = require("../types");
7
+ const search = async (ctx, i, creds) => {
8
+ const expressionInput = ctx.getNodeParameter('searchExpression', i, '');
9
+ const resourceTypes = ctx.getNodeParameter('searchResourceTypes', i, ['image']);
10
+ const returnAll = ctx.getNodeParameter('searchReturnAll', i, false);
11
+ const additionalFields = ctx.getNodeParameter('searchAdditionalFields', i, {});
12
+ const perPage = returnAll ? 500 : ctx.getNodeParameter('searchMaxResults', i, 50);
13
+ const expression = (0, cloudinary_utils_1.buildSearchExpression)(expressionInput, resourceTypes);
14
+ const baseBody = {};
15
+ if (expression) {
16
+ baseBody.expression = expression;
17
+ }
18
+ if (additionalFields.sortField) {
19
+ const direction = additionalFields.sortDirection || 'desc';
20
+ baseBody.sort_by = [{ [additionalFields.sortField]: direction }];
21
+ }
22
+ if (Array.isArray(additionalFields.with_field) && additionalFields.with_field.length > 0) {
23
+ baseBody.with_field = additionalFields.with_field;
24
+ }
25
+ const searchUrl = `https://api.cloudinary.com/v1_1/${creds.cloudName}/resources/search`;
26
+ let nextCursor = additionalFields.next_cursor;
27
+ let remaining = perPage;
28
+ let pageCount = 0;
29
+ const results = [];
30
+ do {
31
+ const pageSize = returnAll ? 500 : Math.min(remaining, 500);
32
+ const body = {
33
+ ...baseBody,
34
+ max_results: pageSize,
35
+ };
36
+ if (nextCursor) {
37
+ body.next_cursor = nextCursor;
38
+ }
39
+ const options = {
40
+ method: 'POST',
41
+ url: searchUrl,
42
+ body,
43
+ json: true,
44
+ headers: (0, cloudinary_utils_1.jsonHeaders)(),
45
+ auth: (0, cloudinary_utils_1.basicAuth)(creds),
46
+ };
47
+ let response;
48
+ try {
49
+ response = (await ctx.helpers.httpRequestWithAuthentication.call(ctx, types_1.CREDENTIAL_TYPE, options));
50
+ }
51
+ catch (error) {
52
+ const { status, retryAfter, cloudinaryMessage } = (0, cloudinary_utils_1.extractCloudinaryError)(error);
53
+ if (status === 420 || status === 429 || status === '420' || status === '429') {
54
+ const suffix = retryAfter ? ` Retry after ${retryAfter} seconds.` : '';
55
+ throw new n8n_workflow_1.NodeOperationError(ctx.getNode(), 'Cloudinary Search rate limit exceeded', {
56
+ description: `The Search endpoint has a lower hourly limit than other Admin endpoints (~100/hour on free plans).${suffix} Narrow your expression or run less frequently.`,
57
+ itemIndex: i,
58
+ });
59
+ }
60
+ if ((status === 400 || status === '400') &&
61
+ (cloudinaryMessage === null || cloudinaryMessage === void 0 ? void 0 : cloudinaryMessage.toLowerCase().startsWith('query error'))) {
62
+ throw new n8n_workflow_1.NodeOperationError(ctx.getNode(), 'Invalid search expression', {
63
+ description: `${cloudinaryMessage}. Check for unclosed quotes, unbalanced parentheses, or typos in field names. See the Expression syntax link in the field hint.`,
64
+ itemIndex: i,
65
+ });
66
+ }
67
+ if (cloudinaryMessage) {
68
+ throw new n8n_workflow_1.NodeOperationError(ctx.getNode(), 'Cloudinary search failed', {
69
+ description: cloudinaryMessage,
70
+ itemIndex: i,
71
+ });
72
+ }
73
+ throw error;
74
+ }
75
+ const resources = Array.isArray(response.resources)
76
+ ? response.resources
77
+ : [];
78
+ results.push(...resources);
79
+ nextCursor = response.next_cursor;
80
+ pageCount += 1;
81
+ if (!returnAll) {
82
+ remaining -= resources.length;
83
+ if (remaining <= 0)
84
+ break;
85
+ }
86
+ if (pageCount > 1000)
87
+ break;
88
+ } while (returnAll && nextCursor);
89
+ return results;
90
+ };
91
+ exports.search = search;
92
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../../nodes/Cloudinary/operations/admin/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { OperationHandler } from '../types';
2
+ export declare const updateMetadata: OperationHandler;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateMetadata = void 0;
4
+ const cloudinary_utils_1 = require("../../cloudinary.utils");
5
+ const types_1 = require("../types");
6
+ const updateMetadata = async (ctx, i, creds) => {
7
+ const assetId = ctx.getNodeParameter('assetId', i);
8
+ const structuredMetadata = ctx.getNodeParameter('structuredMetadata', i);
9
+ const updateOptions = ctx.getNodeParameter('updateOptions', i, {});
10
+ const body = {
11
+ metadata: (0, cloudinary_utils_1.metadataToPipeString)(structuredMetadata),
12
+ ...updateOptions,
13
+ };
14
+ const options = {
15
+ method: 'PUT',
16
+ url: (0, cloudinary_utils_1.buildResourceByAssetIdUrl)(creds.cloudName, assetId),
17
+ body,
18
+ headers: (0, cloudinary_utils_1.jsonHeaders)(),
19
+ auth: (0, cloudinary_utils_1.basicAuth)(creds),
20
+ };
21
+ const response = await ctx.helpers.httpRequestWithAuthentication.call(ctx, types_1.CREDENTIAL_TYPE, options);
22
+ return [response];
23
+ };
24
+ exports.updateMetadata = updateMetadata;
25
+ //# sourceMappingURL=updateMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateMetadata.js","sourceRoot":"","sources":["../../../../../nodes/Cloudinary/operations/asset/updateMetadata.ts"],"names":[],"mappings":";;;AACA,6DAKgC;AAChC,oCAA6D;AAEtD,MAAM,cAAc,GAAqB,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;IACvE,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAW,CAAC;IAC7D,MAAM,kBAAkB,GAAG,GAAG,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,CAAW,CAAC;IACnF,MAAM,aAAa,GAAG,GAAG,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAgB,CAAC;IAElF,MAAM,IAAI,GAAgB;QACzB,QAAQ,EAAE,IAAA,uCAAoB,EAAC,kBAAkB,CAAC;QAClD,GAAG,aAAa;KAChB,CAAC;IAEF,MAAM,OAAO,GAAwB;QACpC,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,IAAA,4CAAyB,EAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;QACxD,IAAI;QACJ,OAAO,EAAE,IAAA,8BAAW,GAAE;QACtB,IAAI,EAAE,IAAA,4BAAS,EAAC,KAAK,CAAC;KACtB,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CACpE,GAAG,EACH,uBAAe,EACf,OAAO,CACP,CAAC;IACF,OAAO,CAAC,QAAuB,CAAC,CAAC;AAClC,CAAC,CAAC;AAxBW,QAAA,cAAc,kBAwBzB"}
@@ -0,0 +1,2 @@
1
+ import { OperationHandler } from '../types';
2
+ export declare const updateTags: OperationHandler;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateTags = void 0;
4
+ const cloudinary_utils_1 = require("../../cloudinary.utils");
5
+ const types_1 = require("../types");
6
+ const tagAppend_1 = require("../tagAppend");
7
+ const updateTags = async (ctx, i, creds) => {
8
+ const tagMode = ctx.getNodeParameter('tagMode', i, 'set');
9
+ if (tagMode === 'append') {
10
+ return (0, tagAppend_1.appendTags)(ctx, i, creds);
11
+ }
12
+ const assetId = ctx.getNodeParameter('assetId', i);
13
+ const tags = ctx.getNodeParameter('tags', i);
14
+ const updateOptions = ctx.getNodeParameter('updateOptions', i, {});
15
+ const body = {
16
+ tags,
17
+ ...updateOptions,
18
+ };
19
+ const options = {
20
+ method: 'PUT',
21
+ url: (0, cloudinary_utils_1.buildResourceByAssetIdUrl)(creds.cloudName, assetId),
22
+ body,
23
+ headers: (0, cloudinary_utils_1.jsonHeaders)(),
24
+ auth: (0, cloudinary_utils_1.basicAuth)(creds),
25
+ };
26
+ const response = await ctx.helpers.httpRequestWithAuthentication.call(ctx, types_1.CREDENTIAL_TYPE, options);
27
+ return [response];
28
+ };
29
+ exports.updateTags = updateTags;
30
+ //# sourceMappingURL=updateTags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateTags.js","sourceRoot":"","sources":["../../../../../nodes/Cloudinary/operations/asset/updateTags.ts"],"names":[],"mappings":";;;AACA,6DAA2F;AAC3F,oCAA6D;AAC7D,4CAA0C;AAEnC,MAAM,UAAU,GAAqB,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;IACnE,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,CAAW,CAAC;IACpE,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,IAAA,sBAAU,EAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAW,CAAC;IAC7D,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAW,CAAC;IACvD,MAAM,aAAa,GAAG,GAAG,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAgB,CAAC;IAElF,MAAM,IAAI,GAAgB;QACzB,IAAI;QACJ,GAAG,aAAa;KAChB,CAAC;IAEF,MAAM,OAAO,GAAwB;QACpC,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,IAAA,4CAAyB,EAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;QACxD,IAAI;QACJ,OAAO,EAAE,IAAA,8BAAW,GAAE;QACtB,IAAI,EAAE,IAAA,4BAAS,EAAC,KAAK,CAAC;KACtB,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CACpE,GAAG,EACH,uBAAe,EACf,OAAO,CACP,CAAC;IACF,OAAO,CAAC,QAAuB,CAAC,CAAC;AAClC,CAAC,CAAC;AA7BW,QAAA,UAAU,cA6BrB"}
@@ -0,0 +1,2 @@
1
+ import { OperationHandler } from './types';
2
+ export declare const operationHandlers: Record<string, OperationHandler>;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.operationHandlers = void 0;
4
+ const uploadUrl_1 = require("./upload/uploadUrl");
5
+ const uploadFile_1 = require("./upload/uploadFile");
6
+ const deleteAssets_1 = require("./updateAsset/deleteAssets");
7
+ const getAsset_1 = require("./updateAsset/getAsset");
8
+ const updateTags_1 = require("./updateAsset/updateTags");
9
+ const updateMetadata_1 = require("./updateAsset/updateMetadata");
10
+ const updateTags_2 = require("./asset/updateTags");
11
+ const updateMetadata_2 = require("./asset/updateMetadata");
12
+ const search_1 = require("./admin/search");
13
+ const getTags_1 = require("./admin/getTags");
14
+ const getMetadataFields_1 = require("./admin/getMetadataFields");
15
+ const optimizeImage_1 = require("./transform/optimizeImage");
16
+ const resizeImage_1 = require("./transform/resizeImage");
17
+ const cropImage_1 = require("./transform/cropImage");
18
+ const convertImage_1 = require("./transform/convertImage");
19
+ const optimizeVideo_1 = require("./transform/optimizeVideo");
20
+ const trimVideo_1 = require("./transform/trimVideo");
21
+ const videoThumbnail_1 = require("./transform/videoThumbnail");
22
+ const customTransformation_1 = require("./transform/customTransformation");
23
+ const multiStep_1 = require("./transform/multiStep");
24
+ const videoPlayer_1 = require("./widget/videoPlayer");
25
+ exports.operationHandlers = {
26
+ 'upload:uploadUrl': uploadUrl_1.uploadUrl,
27
+ 'upload:uploadFile': uploadFile_1.uploadFile,
28
+ 'updateAsset:updateTags': updateTags_1.updateTags,
29
+ 'updateAsset:updateMetadata': updateMetadata_1.updateMetadata,
30
+ 'asset:getAsset': getAsset_1.getAsset,
31
+ 'asset:deleteAssets': deleteAssets_1.deleteAssets,
32
+ 'asset:updateTags': updateTags_2.updateTags,
33
+ 'asset:updateMetadata': updateMetadata_2.updateMetadata,
34
+ 'asset:search': search_1.search,
35
+ 'admin:getTags': getTags_1.getTags,
36
+ 'admin:getMetadataFields': getMetadataFields_1.getMetadataFields,
37
+ 'transform:optimizeImage': optimizeImage_1.optimizeImage,
38
+ 'transform:resizeImage': resizeImage_1.resizeImage,
39
+ 'transform:cropImage': cropImage_1.cropImage,
40
+ 'transform:convertImage': convertImage_1.convertImage,
41
+ 'transform:optimizeVideo': optimizeVideo_1.optimizeVideo,
42
+ 'transform:resizeVideo': resizeImage_1.resizeVideo,
43
+ 'transform:cropVideo': cropImage_1.cropVideo,
44
+ 'transform:trimVideo': trimVideo_1.trimVideo,
45
+ 'transform:videoThumbnail': videoThumbnail_1.videoThumbnail,
46
+ 'transform:customTransformation': customTransformation_1.customTransformation,
47
+ 'transform:combineTransformations': multiStep_1.multiStep,
48
+ 'widget:videoPlayer': videoPlayer_1.videoPlayer,
49
+ };
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../nodes/Cloudinary/operations/index.ts"],"names":[],"mappings":";;;AACA,kDAA+C;AAC/C,oDAAiD;AACjD,6DAA0D;AAC1D,qDAAkD;AAClD,yDAAsD;AACtD,iEAA8D;AAC9D,mDAAmE;AACnE,2DAA+E;AAC/E,2CAAwC;AACxC,6CAA0C;AAC1C,iEAA8D;AAC9D,6DAA0D;AAC1D,yDAAmE;AACnE,qDAA6D;AAC7D,2DAAwD;AACxD,6DAA0D;AAC1D,qDAAkD;AAClD,+DAA4D;AAC5D,2EAAwE;AACxE,qDAAkD;AAClD,sDAAmD;AAMtC,QAAA,iBAAiB,GAAqC;IAClE,kBAAkB,EAAE,qBAAS;IAC7B,mBAAmB,EAAE,uBAAU;IAC/B,wBAAwB,EAAE,uBAAU;IACpC,4BAA4B,EAAE,+BAAc;IAC5C,gBAAgB,EAAE,mBAAQ;IAC1B,oBAAoB,EAAE,2BAAY;IAClC,kBAAkB,EAAE,uBAAe;IACnC,sBAAsB,EAAE,+BAAmB;IAC3C,cAAc,EAAE,eAAM;IACtB,eAAe,EAAE,iBAAO;IACxB,yBAAyB,EAAE,qCAAiB;IAC5C,yBAAyB,EAAE,6BAAa;IACxC,uBAAuB,EAAE,yBAAW;IACpC,qBAAqB,EAAE,qBAAS;IAChC,wBAAwB,EAAE,2BAAY;IACtC,yBAAyB,EAAE,6BAAa;IACxC,uBAAuB,EAAE,yBAAW;IACpC,qBAAqB,EAAE,qBAAS;IAChC,qBAAqB,EAAE,qBAAS;IAChC,0BAA0B,EAAE,+BAAc;IAC1C,gCAAgC,EAAE,2CAAoB;IACtD,kCAAkC,EAAE,qBAAS;IAC7C,oBAAoB,EAAE,yBAAW;CACjC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { IDataObject } from 'n8n-workflow';
2
+ import type { IExecuteFunctions } from 'n8n-workflow';
3
+ import { CloudinaryCredentials } from './types';
4
+ export declare const appendTags: (ctx: IExecuteFunctions, i: number, creds: CloudinaryCredentials) => Promise<IDataObject[]>;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.appendTags = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const cloudinary_utils_1 = require("../cloudinary.utils");
6
+ const types_1 = require("./types");
7
+ const appendTags = async (ctx, i, creds) => {
8
+ const rawPublicIds = ctx.getNodeParameter('tagAppendPublicIds', i);
9
+ const resourceType = ctx.getNodeParameter('tagAppendResourceType', i, 'image');
10
+ const type = ctx.getNodeParameter('tagAppendType', i, 'upload');
11
+ const tags = ctx.getNodeParameter('tags', i);
12
+ const publicIds = Array.isArray(rawPublicIds)
13
+ ? rawPublicIds.map((s) => String(s).trim()).filter((s) => s.length > 0)
14
+ : (0, cloudinary_utils_1.splitCsvIds)(rawPublicIds);
15
+ if (publicIds.length === 0) {
16
+ throw new n8n_workflow_1.NodeOperationError(ctx.getNode(), 'No public IDs provided', {
17
+ description: 'Provide at least one public_id (comma-separated for many).',
18
+ itemIndex: i,
19
+ });
20
+ }
21
+ const timestamp = Math.round(new Date().getTime() / 1000);
22
+ const params = {
23
+ command: 'add',
24
+ public_ids: publicIds.join(','),
25
+ tag: tags,
26
+ type,
27
+ timestamp,
28
+ api_key: creds.apiKey,
29
+ };
30
+ params.signature = (0, cloudinary_utils_1.generateCloudinarySignature)(params, creds.apiSecret);
31
+ const options = {
32
+ method: 'POST',
33
+ url: (0, cloudinary_utils_1.buildTagsActionUrl)(creds.cloudName, resourceType),
34
+ body: params,
35
+ headers: {
36
+ 'Content-Type': 'application/x-www-form-urlencoded',
37
+ 'User-Agent': cloudinary_utils_1.USER_AGENT,
38
+ },
39
+ };
40
+ const response = await ctx.helpers.httpRequestWithAuthentication.call(ctx, types_1.CREDENTIAL_TYPE, options);
41
+ return [response];
42
+ };
43
+ exports.appendTags = appendTags;
44
+ //# sourceMappingURL=tagAppend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tagAppend.js","sourceRoot":"","sources":["../../../../nodes/Cloudinary/operations/tagAppend.ts"],"names":[],"mappings":";;;AAAA,+CAAoF;AAEpF,0DAK6B;AAC7B,mCAAiE;AAS1D,MAAM,UAAU,GAAG,KAAK,EAC9B,GAAsB,EACtB,CAAS,EACT,KAA4B,EACH,EAAE;IAC3B,MAAM,YAAY,GAAG,GAAG,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,CAAsB,CAAC;IACxF,MAAM,YAAY,GAAG,GAAG,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,CAAC,EAAE,OAAO,CAAW,CAAC;IACzF,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,EAAE,QAAQ,CAAW,CAAC;IAC1E,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAW,CAAC;IAEvD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;QAC5C,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACvE,CAAC,CAAC,IAAA,8BAAW,EAAC,YAAY,CAAC,CAAC;IAE7B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,iCAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,wBAAwB,EAAE;YACrE,WAAW,EAAE,4DAA4D;YACzE,SAAS,EAAE,CAAC;SACZ,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAgB;QAC3B,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/B,GAAG,EAAE,IAAI;QACT,IAAI;QACJ,SAAS;QACT,OAAO,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC;IACF,MAAM,CAAC,SAAS,GAAG,IAAA,8CAA2B,EAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAExE,MAAM,OAAO,GAAwB;QACpC,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,IAAA,qCAAkB,EAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC;QACtD,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE;YACR,cAAc,EAAE,mCAAmC;YACnD,YAAY,EAAE,6BAAU;SACxB;KACD,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CACpE,GAAG,EACH,uBAAe,EACf,OAAO,CACP,CAAC;IACF,OAAO,CAAC,QAAuB,CAAC,CAAC;AAClC,CAAC,CAAC;AAhDW,QAAA,UAAU,cAgDrB"}