n8n-nodes-shortio 0.1.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +104 -32
  2. package/dist/nodes/Shortio/Descriptions/LinkDescription.d.ts +1 -1
  3. package/dist/nodes/Shortio/Descriptions/LinkDescription.js +83 -121
  4. package/dist/nodes/Shortio/Descriptions/LinkDescription.js.map +1 -1
  5. package/dist/nodes/Shortio/Descriptions/LinkDescriptionV2.d.ts +3 -0
  6. package/dist/nodes/Shortio/Descriptions/LinkDescriptionV2.js +749 -0
  7. package/dist/nodes/Shortio/Descriptions/LinkDescriptionV2.js.map +1 -0
  8. package/dist/nodes/Shortio/Descriptions/StatisticsDescription.d.ts +3 -0
  9. package/dist/nodes/Shortio/Descriptions/StatisticsDescription.js +237 -0
  10. package/dist/nodes/Shortio/Descriptions/StatisticsDescription.js.map +1 -0
  11. package/dist/nodes/Shortio/GenericFunctions.d.ts +6 -1
  12. package/dist/nodes/Shortio/GenericFunctions.js +36 -4
  13. package/dist/nodes/Shortio/GenericFunctions.js.map +1 -1
  14. package/dist/nodes/Shortio/Interfaces.d.ts +46 -28
  15. package/dist/nodes/Shortio/Resources.js +0 -4
  16. package/dist/nodes/Shortio/Resources.js.map +1 -1
  17. package/dist/nodes/Shortio/Shortio.node.d.ts +3 -4
  18. package/dist/nodes/Shortio/Shortio.node.js +12 -309
  19. package/dist/nodes/Shortio/Shortio.node.js.map +1 -1
  20. package/dist/nodes/Shortio/Shortio.node.json +5 -4
  21. package/dist/nodes/Shortio/oldVersionNotice.d.ts +2 -0
  22. package/dist/nodes/Shortio/oldVersionNotice.js +10 -0
  23. package/dist/nodes/Shortio/oldVersionNotice.js.map +1 -0
  24. package/dist/nodes/Shortio/v1/ShortioV1.node.d.ts +6 -0
  25. package/dist/nodes/Shortio/v1/ShortioV1.node.js +325 -0
  26. package/dist/nodes/Shortio/v1/ShortioV1.node.js.map +1 -0
  27. package/dist/nodes/Shortio/v2/ShortioV2.node.d.ts +11 -0
  28. package/dist/nodes/Shortio/v2/ShortioV2.node.js +480 -0
  29. package/dist/nodes/Shortio/v2/ShortioV2.node.js.map +1 -0
  30. package/dist/package.json +1 -1
  31. package/dist/tsconfig.tsbuildinfo +1 -1
  32. package/package.json +52 -52
package/README.md CHANGED
@@ -1,78 +1,150 @@
1
1
  # Table of Contents
2
+
2
3
  - [Table of Contents](#table-of-contents)
3
4
  - [Overview of Community Short.io n8n Node](#overview-of-community-shortio-n8n-node)
4
- - [If you want a custom node](#if-you-want-a-custom-node)
5
5
  - [Bugs/Contributing/Feature Request](#bugscontributingfeature-request)
6
6
  - [Documentation](#documentation)
7
- - [Installation](#installation)
8
- - [Credentials](#credentials)
9
- - [Links](#links)
10
- - [List Links](#list-links)
11
- - [Get Link Info](#get-link-info)
12
- - [Create Link](#create-link)
13
- - [Update Existing Link](#update-existing-link)
14
- - [Delete Link](#delete-link)
7
+ - [Installation](#installation)
8
+ - [Credentials](#credentials)
9
+ - [Links](#links)
10
+ - [List Links](#list-links)
11
+ - [Get Link Info](#get-link-info)
12
+ - [Create Link](#create-link)
13
+ - [Update Existing Link](#update-existing-link)
14
+ - [Delete Link](#delete-link)
15
+ - [Generate QR For Link](#generate-qr-for-link)
16
+ - [Statistics](#statistics)
17
+ - [Get Link Statistics](#get-link-statistics)
18
+ - [Get Domain Statistics](#get-domain-statistics)
15
19
 
16
20
  # Overview of Community Short.io n8n Node
17
- I have no affiliation with short.io beyond being a user.
18
-
19
- I created this node for use within my company as well as for our clients. I left out a few features, but I included the options for them so people can see what is possible. Feel free to submit a PR with the updated functionality, or get in touch to discuss us completing it.
20
21
 
21
- # If you want a custom node
22
- Please reach out to me using the info on [my GitHub page](https://github.com/liamdmcgarrigle). \
23
- Nodes can be built for the community as well as privately just for one organization.
22
+ I have no affiliation with short.io beyond being a user. I work for n8n but this is not an official node.
24
23
 
25
24
  # Bugs/Contributing/Feature Request
26
25
 
27
26
  If you have a bug to report or a feature request, please [submit a GitHub issue](https://github.com/liamdmcgarrigle/n8n-nodes-shortio/issues/new) with as much detail as you're able to give.
28
27
 
29
- Feel free to submit PRs, but please get in touch with me first to make sure I am willing to add the feature before you spend the time on it.
30
-
31
28
  # Documentation
32
29
 
33
30
  ## Installation
34
31
 
35
- This can only be installed if you are self-hosting n8n.
32
+ This is now available on cloud as a verified community node. Simply search for shortio in the node panel.
36
33
 
37
- Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
34
+ Or follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
38
35
 
39
36
  ## Credentials
40
37
 
41
38
  To use this node you will need to set up short.io credentials with a key from short.io. You also will need an account and may need a paid account.
42
39
 
43
40
  1. Go to https://app.short.io/settings/integrations/api-key and click on "Create API Key"
44
- ![Screenshot1](/readme_files/step-1.jpeg)
41
+ ![Screenshot1](/readme_files/step-1.jpeg)
45
42
 
46
43
  2. Add a description, pick the domain to use, and press "Create"
47
- ![Screenshot2](/readme_files/step-2.jpeg)
44
+ ![Screenshot2](/readme_files/step-2.jpeg)
48
45
 
49
46
  3. Copy your new token. It will only be shown once
50
47
 
51
48
  4. Go to the credential page in n8n, in add credentials add "Short.io API", then paste in your token. Then add the domain you chose in the previous step and press save
52
- ![Screenshot3](/readme_files/step-3.png)
49
+ ![Screenshot3](/readme_files/step-3.png)
53
50
 
54
51
  ## Links
55
52
 
56
53
  ### List Links
57
- Get a list of your short links. These will only be links from the domain in your credential.
58
54
 
59
- You will need to choose how many results are returned. Anything over 150 is automatically paginationed.
55
+ Get a list of your short links. These will only be links from the domain in your credential.
56
+
57
+ You will need to choose how many results are returned. Anything over 150 is automatically paginationed.
60
58
 
61
59
  You can filter the results by adding:
62
- Before date: returns links before the listed date
63
- After date: returns links after the listed date
64
- Date Sort Order: changes the order the links are in based on the date
60
+
61
+ - **Before date**: returns links before the listed date
62
+ - **After date**: returns links after the listed date
63
+ - **Date Sort Order**: changes the order the links are in based on the date
65
64
 
66
65
  ### Get Link Info
67
- Get link details from the domain in your credential and the path.
68
66
 
67
+ Get link details from the domain in your credential and the path.
69
68
 
70
69
  ### Create Link
71
- Create a link. There are many options. Please see the descriptions I added to n8n's interface.
70
+
71
+ Create a link. There are many options available in the additional fields:
72
+
73
+ - **Path**: Custom path for the short link
74
+ - **Folder**: Assign the link to a folder (select from list or enter folder ID)
75
+ - **Allow Duplicates**: Allow multiple links with the same original URL
76
+ - **Title**: Title shown in the short.io admin panel
77
+ - **Expiration settings**: Set expiry date and redirect URL for expired links
78
+ - **Device-specific URLs**: Separate URLs for iPhone and Android users
79
+ - **Cloaking**: Hide the original URL in the browser address bar
80
+ - **Redirect Type**: Choose HTTP redirect code (301, 302, etc.)
81
+ - **Password**: Password-protect the link (requires Personal plan)
82
+ - **UTM Parameters**: Add tracking parameters (source, medium, campaign, term, content)
83
+ - **Tags**: Add tags to organize your links
72
84
 
73
85
  ### Update Existing Link
74
- You can update an existing short link by using the path or the link `idString`.
75
- You can change anything about the link including the full long URL.
86
+
87
+ You can update an existing short link by using the path or the link `idString`.
88
+ You can change anything about the link including the full long URL and folder assignment.
76
89
 
77
90
  ### Delete Link
78
- You can delete an existing short link by using the path or the link `idString`.
91
+
92
+ You can delete an existing short link by using the path or the link `idString`.
93
+
94
+ ### Generate QR For Link
95
+
96
+ Generate a QR code image for any short link. You can identify the link by path or `idString`.
97
+
98
+ Options available:
99
+
100
+ - **Color**: QR code foreground color
101
+ - **Background Color**: QR code background color
102
+ - **Size**: QR code size (1-99)
103
+ - **Type**: Image format (PNG or SVG)
104
+
105
+ The operation returns binary data that can be used with other n8n nodes (e.g., save to file, send via email, upload to cloud storage).
106
+
107
+ ## Statistics
108
+
109
+ Get detailed analytics for your links and domain.
110
+
111
+ ### Get Link Statistics
112
+
113
+ Get detailed statistics for a specific link. Identify the link by path or `idString`.
114
+
115
+ **Period options:**
116
+
117
+ - Today
118
+ - Yesterday
119
+ - Last 7 Days
120
+ - Last 30 Days
121
+ - Last Month
122
+ - All Time
123
+ - Custom (specify start and end dates)
124
+
125
+ **Additional options:**
126
+
127
+ - **Clicks Chart Interval**: Data granularity for the clicks chart (hour, day, week, month)
128
+ - **Skip Top Records**: Skip top records like referer, browser, and country breakdowns
129
+
130
+ Returns detailed statistics including total clicks, human clicks, click trends, and breakdowns by referer, browser, country, and more.
131
+
132
+ ### Get Domain Statistics
133
+
134
+ Get detailed statistics for your entire domain (as configured in your credentials).
135
+
136
+ **Period options:**
137
+
138
+ - Today
139
+ - Yesterday
140
+ - Last 7 Days
141
+ - Last 30 Days
142
+ - Last Month
143
+ - All Time
144
+ - Custom (specify start and end dates)
145
+
146
+ **Additional options:**
147
+
148
+ - **Clicks Chart Interval**: Data granularity for the clicks chart (hour, day, week, month)
149
+
150
+ Returns domain-wide statistics including total clicks, link counts, clicks per link averages, and breakdowns by referer, browser, country, and more.
@@ -1,3 +1,3 @@
1
- import { INodeProperties } from "n8n-workflow";
1
+ import { INodeProperties } from 'n8n-workflow';
2
2
  export declare const linkOperations: INodeProperties[];
3
3
  export declare const linkFields: INodeProperties[];
@@ -42,9 +42,7 @@ exports.linkOperations = [
42
42
  default: 'getLinkList',
43
43
  displayOptions: {
44
44
  show: {
45
- resource: [
46
- 'links',
47
- ]
45
+ resource: ['links'],
48
46
  },
49
47
  },
50
48
  },
@@ -63,13 +61,9 @@ exports.linkFields = [
63
61
  description: 'The number of domains that will be returned',
64
62
  displayOptions: {
65
63
  show: {
66
- resource: [
67
- 'links',
68
- ],
69
- operation: [
70
- 'getLinkList'
71
- ]
72
- }
64
+ resource: ['links'],
65
+ operation: ['getLinkList'],
66
+ },
73
67
  },
74
68
  },
75
69
  {
@@ -80,13 +74,9 @@ exports.linkFields = [
80
74
  placeholder: 'Add Field',
81
75
  displayOptions: {
82
76
  show: {
83
- resource: [
84
- 'links',
85
- ],
86
- operation: [
87
- 'getLinkList'
88
- ]
89
- }
77
+ resource: ['links'],
78
+ operation: ['getLinkList'],
79
+ },
90
80
  },
91
81
  options: [
92
82
  {
@@ -118,26 +108,22 @@ exports.linkFields = [
118
108
  },
119
109
  ],
120
110
  default: 'asc',
121
- }
111
+ },
122
112
  ],
123
113
  },
124
114
  {
125
115
  displayName: 'Path',
126
116
  name: 'path',
127
- description: "The path of the link",
117
+ description: 'The path of the link',
128
118
  type: 'string',
129
119
  required: true,
130
120
  default: '',
131
- placeholder: "6fzQYy",
121
+ placeholder: '6fzQYy',
132
122
  displayOptions: {
133
123
  show: {
134
- resource: [
135
- 'links',
136
- ],
137
- operation: [
138
- 'getLinkInfo'
139
- ]
140
- }
124
+ resource: ['links'],
125
+ operation: ['getLinkInfo'],
126
+ },
141
127
  },
142
128
  },
143
129
  {
@@ -146,16 +132,12 @@ exports.linkFields = [
146
132
  type: 'string',
147
133
  required: true,
148
134
  default: '',
149
- placeholder: "https://iAmALongURL.com",
135
+ placeholder: 'https://iAmALongURL.com',
150
136
  displayOptions: {
151
137
  show: {
152
- resource: [
153
- 'links',
154
- ],
155
- operation: [
156
- 'createLink'
157
- ]
158
- }
138
+ resource: ['links'],
139
+ operation: ['createLink'],
140
+ },
159
141
  },
160
142
  },
161
143
  {
@@ -166,37 +148,33 @@ exports.linkFields = [
166
148
  placeholder: 'Add Field',
167
149
  displayOptions: {
168
150
  show: {
169
- resource: [
170
- 'links',
171
- ],
172
- operation: [
173
- 'createLink'
174
- ]
175
- }
151
+ resource: ['links'],
152
+ operation: ['createLink'],
153
+ },
176
154
  },
177
155
  options: [
178
156
  {
179
157
  displayName: 'Path',
180
158
  name: 'path',
181
- description: "The path of the link",
159
+ description: 'The path of the link',
182
160
  type: 'string',
183
161
  default: '',
184
- placeholder: "6fzQYy",
162
+ placeholder: '6fzQYy',
185
163
  },
186
164
  {
187
165
  displayName: 'Allow Duplicates',
188
166
  name: 'allowDuplicates',
189
- description: "Whether you can create multiple links with the same original URL",
167
+ description: 'Whether you can create multiple links with the same original URL',
190
168
  type: 'boolean',
191
169
  default: false,
192
170
  },
193
171
  {
194
172
  displayName: 'Title',
195
173
  name: 'title',
196
- description: "Title of created URL to be shown in short.io admin panel",
174
+ description: 'Title of created URL to be shown in short.io admin panel',
197
175
  type: 'string',
198
176
  default: '',
199
- placeholder: "Short Link From n8n",
177
+ placeholder: 'Short Link From n8n',
200
178
  },
201
179
  {
202
180
  displayName: 'Expires At (Unix Miliseconds)',
@@ -214,31 +192,31 @@ exports.linkFields = [
214
192
  {
215
193
  displayName: 'Expired URL',
216
194
  name: 'expiredURL',
217
- description: "URL to redirect when the link is expired",
195
+ description: 'URL to redirect when the link is expired',
218
196
  type: 'string',
219
197
  default: '',
220
- placeholder: "https://example.com/expired",
198
+ placeholder: 'https://example.com/expired',
221
199
  },
222
200
  {
223
201
  displayName: 'iphone URL',
224
202
  name: 'iphoneURL',
225
- description: "If users open the URL with iPhone, they will be redirected to this URL",
203
+ description: 'If users open the URL with iPhone, they will be redirected to this URL',
226
204
  type: 'string',
227
205
  default: '',
228
- placeholder: "https://iAmALongURL.com",
206
+ placeholder: 'https://iAmALongURL.com',
229
207
  },
230
208
  {
231
209
  displayName: 'Android URL',
232
210
  name: 'androidURL',
233
- description: "If users open the URL with Android, they will be redirected to this URL",
211
+ description: 'If users open the URL with Android, they will be redirected to this URL',
234
212
  type: 'string',
235
213
  default: '',
236
- placeholder: "https://iAmALongURL.com",
214
+ placeholder: 'https://iAmALongURL.com',
237
215
  },
238
216
  {
239
217
  displayName: 'Cloaking',
240
218
  name: 'cloaking',
241
- description: "Whether the link will be cloaked. Cloaked links will redirect to the original URL, but will not show the original URL in the browser address bar.",
219
+ description: 'Whether the link will be cloaked. Cloaked links will redirect to the original URL, but will not show the original URL in the browser address bar.',
242
220
  type: 'boolean',
243
221
  default: false,
244
222
  },
@@ -282,13 +260,13 @@ exports.linkFields = [
282
260
  {
283
261
  displayName: 'Password',
284
262
  name: 'password',
285
- description: "Requires Personal plan. Password to be asked when user visits a link. This password will not be stored in plain text, we will hash it with salt.",
263
+ description: 'Requires Personal plan. Password to be asked when user visits a link. This password will not be stored in plain text, we will hash it with salt.',
286
264
  type: 'string',
287
265
  typeOptions: {
288
- password: true
266
+ password: true,
289
267
  },
290
268
  default: '',
291
- placeholder: "Password123!",
269
+ placeholder: 'Password123!',
292
270
  },
293
271
  {
294
272
  displayName: 'Deletes At (Unix Miliseconds)',
@@ -296,43 +274,43 @@ exports.linkFields = [
296
274
  description: "The date and time when the link will delete in unix miliseconds. If not set, link will never expire. Unlike expiresAt the link will be deleted and won't be counted in account link limit. TTL can not be earlier than 1 week from the current time.",
297
275
  type: 'string',
298
276
  default: '',
299
- placeholder: "1714442044236",
277
+ placeholder: '1714442044236',
300
278
  },
301
279
  {
302
280
  displayName: 'UTM Source',
303
281
  name: 'utmSource',
304
- description: "The referrer: (e.g. google, newsletter)",
282
+ description: 'The referrer: (e.g. google, newsletter)',
305
283
  type: 'string',
306
284
  default: '',
307
- placeholder: "Google",
285
+ placeholder: 'Google',
308
286
  },
309
287
  {
310
288
  displayName: 'UTM Medium',
311
289
  name: 'utmMedium',
312
- description: "Marketing medium: (e.g. cpc, banner, email)",
290
+ description: 'Marketing medium: (e.g. cpc, banner, email)',
313
291
  type: 'string',
314
292
  default: '',
315
- placeholder: "banner_ad",
293
+ placeholder: 'banner_ad',
316
294
  },
317
295
  {
318
296
  displayName: 'UTM Campaign',
319
297
  name: 'utmCampaign',
320
- description: "Product, promo code, or slogan (e.g. spring_sale)",
298
+ description: 'Product, promo code, or slogan (e.g. spring_sale)',
321
299
  type: 'string',
322
300
  default: '',
323
- placeholder: "spring_sale",
301
+ placeholder: 'spring_sale',
324
302
  },
325
303
  {
326
304
  displayName: 'UTM Term',
327
305
  name: 'utmTerm',
328
- description: "Identify the paid keywords",
306
+ description: 'Identify the paid keywords',
329
307
  type: 'string',
330
308
  default: '',
331
309
  },
332
310
  {
333
311
  displayName: 'UTM Content',
334
312
  name: 'utmContent',
335
- description: "Use to differentiate ads",
313
+ description: 'Use to differentiate ads',
336
314
  type: 'string',
337
315
  default: '',
338
316
  },
@@ -358,7 +336,7 @@ exports.linkFields = [
358
336
  ],
359
337
  },
360
338
  ],
361
- }
339
+ },
362
340
  ],
363
341
  },
364
342
  {
@@ -385,13 +363,9 @@ exports.linkFields = [
385
363
  ],
386
364
  displayOptions: {
387
365
  show: {
388
- resource: [
389
- 'links',
390
- ],
391
- operation: [
392
- 'updateExistingLink'
393
- ]
394
- }
366
+ resource: ['links'],
367
+ operation: ['updateExistingLink'],
368
+ },
395
369
  },
396
370
  },
397
371
  {
@@ -399,16 +373,12 @@ exports.linkFields = [
399
373
  name: 'originalURL',
400
374
  type: 'string',
401
375
  default: '',
402
- placeholder: "https://iAmALongURL.com",
376
+ placeholder: 'https://iAmALongURL.com',
403
377
  displayOptions: {
404
378
  show: {
405
- resource: [
406
- 'links',
407
- ],
408
- operation: [
409
- 'updateExistingLink'
410
- ]
411
- }
379
+ resource: ['links'],
380
+ operation: ['updateExistingLink'],
381
+ },
412
382
  },
413
383
  },
414
384
  {
@@ -419,37 +389,33 @@ exports.linkFields = [
419
389
  placeholder: 'Add Field',
420
390
  displayOptions: {
421
391
  show: {
422
- resource: [
423
- 'links',
424
- ],
425
- operation: [
426
- 'updateExistingLink'
427
- ]
428
- }
392
+ resource: ['links'],
393
+ operation: ['updateExistingLink'],
394
+ },
429
395
  },
430
396
  options: [
431
397
  {
432
398
  displayName: 'Path',
433
399
  name: 'path',
434
- description: "The path of the link",
400
+ description: 'The path of the link',
435
401
  type: 'string',
436
402
  default: '',
437
- placeholder: "6fzQYy",
403
+ placeholder: '6fzQYy',
438
404
  },
439
405
  {
440
406
  displayName: 'Allow Duplicates',
441
407
  name: 'allowDuplicates',
442
- description: "Whether you can create multiple links with the same original URL",
408
+ description: 'Whether you can create multiple links with the same original URL',
443
409
  type: 'boolean',
444
410
  default: false,
445
411
  },
446
412
  {
447
413
  displayName: 'Title',
448
414
  name: 'title',
449
- description: "Title of created URL to be shown in short.io admin panel",
415
+ description: 'Title of created URL to be shown in short.io admin panel',
450
416
  type: 'string',
451
417
  default: '',
452
- placeholder: "Short Link From n8n",
418
+ placeholder: 'Short Link From n8n',
453
419
  },
454
420
  {
455
421
  displayName: 'Expires At (Unix Miliseconds)',
@@ -467,31 +433,31 @@ exports.linkFields = [
467
433
  {
468
434
  displayName: 'Expired URL',
469
435
  name: 'expiredURL',
470
- description: "URL to redirect when the link is expired",
436
+ description: 'URL to redirect when the link is expired',
471
437
  type: 'string',
472
438
  default: '',
473
- placeholder: "https://example.com/expired",
439
+ placeholder: 'https://example.com/expired',
474
440
  },
475
441
  {
476
442
  displayName: 'iphone URL',
477
443
  name: 'iphoneURL',
478
- description: "If users open the URL with iPhone, they will be redirected to this URL",
444
+ description: 'If users open the URL with iPhone, they will be redirected to this URL',
479
445
  type: 'string',
480
446
  default: '',
481
- placeholder: "https://iAmALongURL.com",
447
+ placeholder: 'https://iAmALongURL.com',
482
448
  },
483
449
  {
484
450
  displayName: 'Android URL',
485
451
  name: 'androidURL',
486
- description: "If users open the URL with Android, they will be redirected to this URL",
452
+ description: 'If users open the URL with Android, they will be redirected to this URL',
487
453
  type: 'string',
488
454
  default: '',
489
- placeholder: "https://iAmALongURL.com",
455
+ placeholder: 'https://iAmALongURL.com',
490
456
  },
491
457
  {
492
458
  displayName: 'Cloaking',
493
459
  name: 'cloaking',
494
- description: "Whether the link will be cloaked. Cloaked links will redirect to the original URL, but will not show the original URL in the browser address bar.",
460
+ description: 'Whether the link will be cloaked. Cloaked links will redirect to the original URL, but will not show the original URL in the browser address bar.',
495
461
  type: 'boolean',
496
462
  default: false,
497
463
  },
@@ -535,13 +501,13 @@ exports.linkFields = [
535
501
  {
536
502
  displayName: 'Password',
537
503
  name: 'password',
538
- description: "Requires Personal plan. Password to be asked when user visits a link. This password will not be stored in plain text, we will hash it with salt.",
504
+ description: 'Requires Personal plan. Password to be asked when user visits a link. This password will not be stored in plain text, we will hash it with salt.',
539
505
  type: 'string',
540
506
  typeOptions: {
541
- password: true
507
+ password: true,
542
508
  },
543
509
  default: '',
544
- placeholder: "Password123!",
510
+ placeholder: 'Password123!',
545
511
  },
546
512
  {
547
513
  displayName: 'Deletes At (Unix Miliseconds)',
@@ -549,43 +515,43 @@ exports.linkFields = [
549
515
  description: "The date and time when the link will delete in unix miliseconds. If not set, link will never expire. Unlike expiresAt the link will be deleted and won't be counted in account link limit. TTL can not be earlier than 1 week from the current time.",
550
516
  type: 'string',
551
517
  default: '',
552
- placeholder: "1714442044236",
518
+ placeholder: '1714442044236',
553
519
  },
554
520
  {
555
521
  displayName: 'UTM Source',
556
522
  name: 'utmSource',
557
- description: "The referrer: (e.g. google, newsletter)",
523
+ description: 'The referrer: (e.g. google, newsletter)',
558
524
  type: 'string',
559
525
  default: '',
560
- placeholder: "Google",
526
+ placeholder: 'Google',
561
527
  },
562
528
  {
563
529
  displayName: 'UTM Medium',
564
530
  name: 'utmMedium',
565
- description: "Marketing medium: (e.g. cpc, banner, email)",
531
+ description: 'Marketing medium: (e.g. cpc, banner, email)',
566
532
  type: 'string',
567
533
  default: '',
568
- placeholder: "banner_ad",
534
+ placeholder: 'banner_ad',
569
535
  },
570
536
  {
571
537
  displayName: 'UTM Campaign',
572
538
  name: 'utmCampaign',
573
- description: "Product, promo code, or slogan (e.g. spring_sale)",
539
+ description: 'Product, promo code, or slogan (e.g. spring_sale)',
574
540
  type: 'string',
575
541
  default: '',
576
- placeholder: "spring_sale",
542
+ placeholder: 'spring_sale',
577
543
  },
578
544
  {
579
545
  displayName: 'UTM Term',
580
546
  name: 'utmTerm',
581
- description: "Identify the paid keywords",
547
+ description: 'Identify the paid keywords',
582
548
  type: 'string',
583
549
  default: '',
584
550
  },
585
551
  {
586
552
  displayName: 'UTM Content',
587
553
  name: 'utmContent',
588
- description: "Use to differentiate ads",
554
+ description: 'Use to differentiate ads',
589
555
  type: 'string',
590
556
  default: '',
591
557
  },
@@ -611,7 +577,7 @@ exports.linkFields = [
611
577
  ],
612
578
  },
613
579
  ],
614
- }
580
+ },
615
581
  ],
616
582
  },
617
583
  {
@@ -638,13 +604,9 @@ exports.linkFields = [
638
604
  ],
639
605
  displayOptions: {
640
606
  show: {
641
- resource: [
642
- 'links',
643
- ],
644
- operation: [
645
- 'deleteLink'
646
- ]
647
- }
607
+ resource: ['links'],
608
+ operation: ['deleteLink'],
609
+ },
648
610
  },
649
611
  },
650
612
  ];