@net.christianto/n8n-nodes-shlink 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +82 -0
- package/dist/chunks/constants-DGk4O-Zm.js +2 -0
- package/dist/chunks/constants-DGk4O-Zm.js.map +1 -0
- package/dist/credentials/ShlinkApi.credentials.js +2 -0
- package/dist/credentials/ShlinkApi.credentials.js.map +1 -0
- package/dist/credentials/icon/shlink-dark.svg +8 -0
- package/dist/credentials/icon/shlink-light.svg +8 -0
- package/dist/nodes/Shlink/Shlink.node.js +2 -0
- package/dist/nodes/Shlink/Shlink.node.js.map +1 -0
- package/dist/nodes/Shlink/icon/shlink-dark.svg +8 -0
- package/dist/nodes/Shlink/icon/shlink-light.svg +8 -0
- package/package.json +78 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Gunawan "chez14" Christianto <chris@christianto.net>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# @net.christianto/n8n-nodes-shlink
|
|
2
|
+
|
|
3
|
+
This is an n8n community node. It lets you use [Shlink](https://shlink.io/) in your n8n workflows.
|
|
4
|
+
|
|
5
|
+
[n8n](https://n8n.io/) is a [fair-code
|
|
6
|
+
licensed](https://docs.n8n.io/reference/license/) workflow automation platform.
|
|
7
|
+
|
|
8
|
+
## Table of Contents
|
|
9
|
+
|
|
10
|
+
[[_TOC_]]
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
Follow these steps to install the node from the n8n UI:
|
|
15
|
+
|
|
16
|
+
1. Go to **Settings > Community Nodes**.
|
|
17
|
+
2. Select **Install**.
|
|
18
|
+
3. Enter `@net.christianto/n8n-nodes-shlink` in the **Enter npm package name**
|
|
19
|
+
field.
|
|
20
|
+
4. Agree to the risks by selecting **I understand the risks of installing
|
|
21
|
+
unverified code from a public source.**
|
|
22
|
+
5. Select **Install**.
|
|
23
|
+
|
|
24
|
+
## Operations
|
|
25
|
+
|
|
26
|
+
This node supports the following operations:
|
|
27
|
+
|
|
28
|
+
- **Manage Short URLs:**
|
|
29
|
+
- Create, list, get, update, and delete short URLs.
|
|
30
|
+
|
|
31
|
+
- **Manage Domains:**
|
|
32
|
+
- List all configured domains.
|
|
33
|
+
- Set and update redirect rules for your domains.
|
|
34
|
+
|
|
35
|
+
- **Manage Tags:**
|
|
36
|
+
- List, rename, and delete tags.
|
|
37
|
+
- Get statistics for tags, such as the number of associated short URLs and visits.
|
|
38
|
+
|
|
39
|
+
- **Track Visits:**
|
|
40
|
+
- Get global visit statistics.
|
|
41
|
+
- Get visit data for specific short URLs, tags, or domains.
|
|
42
|
+
- Manage "orphan" visits (visits to invalid or deleted short URLs), including viewing and deleting them.
|
|
43
|
+
- Delete visit history for specific short URLs.
|
|
44
|
+
|
|
45
|
+
## Credentials
|
|
46
|
+
|
|
47
|
+
You'll need to provide a Instance URL and API Key to authenticate with your
|
|
48
|
+
Shlink instance. The instance url should be the domain of your Shlink instance.
|
|
49
|
+
The API Key can be generated via CLI, please see the documentation in the
|
|
50
|
+
following link:
|
|
51
|
+
|
|
52
|
+
- Authentication:
|
|
53
|
+
https://shlink.io/documentation/api-docs/authentication/
|
|
54
|
+
|
|
55
|
+
- API Key Role:
|
|
56
|
+
https://shlink.io/documentation/api-docs/api-key-roles/
|
|
57
|
+
|
|
58
|
+
Once created, you can add the credentials to n8n by finding the Credentials
|
|
59
|
+
settings, then find "Shlink API Key".
|
|
60
|
+
|
|
61
|
+

|
|
62
|
+
|
|
63
|
+
## Compatibility
|
|
64
|
+
|
|
65
|
+
This node currently tested against:
|
|
66
|
+
- **n8n** 1.101.2
|
|
67
|
+
- **Shlink Server** v4.2.0
|
|
68
|
+
with REST API version v3.
|
|
69
|
+
|
|
70
|
+
## Resources
|
|
71
|
+
|
|
72
|
+
* [n8n community nodes
|
|
73
|
+
documentation](https://docs.n8n.io/integrations/#community-nodes)
|
|
74
|
+
* https://shlink.io/
|
|
75
|
+
|
|
76
|
+
## Version history
|
|
77
|
+
|
|
78
|
+
Currently only one version that has been published so far. I'll update this
|
|
79
|
+
section if I release a new version.
|
|
80
|
+
|
|
81
|
+
For the time being, you can check our [Release
|
|
82
|
+
page](https://gitlab.com/net.christianto/n8n-nodes-shlink/-/releases).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants-DGk4O-Zm.js","sources":["../../src/shared/constants.ts"],"sourcesContent":["export const SHLINK_CREDENTIAL = \"shlink_credential\";\n"],"names":["SHLINK_CREDENTIAL"],"mappings":"aAAO,MAAMA,EAAoB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../chunks/constants-DGk4O-Zm.js");class a{name=e.SHLINK_CREDENTIAL;displayName="Shlink API Key";icon={light:"file:icon/shlink-light.svg",dark:"file:icon/shlink-dark.svg"};properties=[{displayName:"Instance URL",name:"apiBaseUrl",type:"string",default:"",placeholder:"https://domain.tld",validateType:"url"},{displayName:"API Key",name:"apiKey",type:"string",typeOptions:{password:!0},placeholder:"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",default:""}];documentationUrl="https://shlink.io/documentation/api-docs/authentication/";authenticate={type:"generic",properties:{headers:{"X-Api-Key":"={{$credentials.apiKey}}"}}};test={request:{method:"GET",baseURL:"={{$credentials.apiBaseUrl.replace(/\\/$/, '')}}/rest",url:"/v3/short-urls",qs:{page:1,itemsPerPage:1}}}}exports.ShlinkApi=a;
|
|
2
|
+
//# sourceMappingURL=ShlinkApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShlinkApi.credentials.js","sources":["../../src/credentials/ShlinkApi.credentials.ts"],"sourcesContent":["import type {\n IAuthenticate,\n Icon,\n ICredentialTestRequest,\n ICredentialType,\n INodeProperties,\n} from \"n8n-workflow\";\nimport { SHLINK_CREDENTIAL } from \"../shared/constants\";\n\nexport class ShlinkApi implements ICredentialType {\n name = SHLINK_CREDENTIAL;\n displayName = \"Shlink API Key\";\n icon: Icon = {\n light: \"file:icon/shlink-light.svg\",\n dark: \"file:icon/shlink-dark.svg\",\n };\n properties: INodeProperties[] = [\n {\n displayName: \"Instance URL\",\n name: \"apiBaseUrl\",\n type: \"string\",\n default: \"\",\n placeholder: \"https://domain.tld\",\n validateType: \"url\",\n },\n {\n displayName: \"API Key\",\n name: \"apiKey\",\n type: \"string\",\n typeOptions: {\n password: true,\n },\n placeholder: \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\",\n default: \"\",\n },\n ];\n documentationUrl =\n \"https://shlink.io/documentation/api-docs/authentication/\";\n authenticate: IAuthenticate = {\n type: \"generic\",\n properties: {\n headers: {\n \"X-Api-Key\": \"={{$credentials.apiKey}}\",\n },\n },\n };\n test: ICredentialTestRequest = {\n request: {\n method: \"GET\",\n baseURL: \"={{$credentials.apiBaseUrl.replace(/\\\\/$/, '')}}/rest\",\n url: \"/v3/short-urls\",\n qs: {\n page: 1,\n itemsPerPage: 1,\n },\n },\n };\n}\n"],"names":["ShlinkApi","SHLINK_CREDENTIAL"],"mappings":"mIASO,MAAMA,CAAqC,CAChD,KAAOC,EAAAA,kBACP,YAAc,iBACd,KAAa,CACX,MAAO,6BACP,KAAM,2BAAA,EAER,WAAgC,CAC9B,CACE,YAAa,eACb,KAAM,aACN,KAAM,SACN,QAAS,GACT,YAAa,qBACb,aAAc,KAAA,EAEhB,CACE,YAAa,UACb,KAAM,SACN,KAAM,SACN,YAAa,CACX,SAAU,EAAA,EAEZ,YAAa,uCACb,QAAS,EAAA,CACX,EAEF,iBACE,2DACF,aAA8B,CAC5B,KAAM,UACN,WAAY,CACV,QAAS,CACP,YAAa,0BAAA,CACf,CACF,EAEF,KAA+B,CAC7B,QAAS,CACP,OAAQ,MACR,QAAS,wDACT,IAAK,iBACL,GAAI,CACF,KAAM,EACN,aAAc,CAAA,CAChB,CACF,CAEJ"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<svg width="512pt" height="512pt" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g fill="#FFFFFF">
|
|
3
|
+
<path d=" M 23.71 85.08 C 17.22 49.81 49.44 14.86 85.08 18.12 C 118.83 19.21 145.72 53.33 139.45 86.37 C 155.64 102.30 171.32 118.83 187.87 134.36 C 198.32 111.73 208.84 89.12 219.57 66.62 C 226.05 53.84 243.47 48.74 255.73 56.27 C 263.76 62.10 270.34 69.69 277.25 76.75 C 286.28 86.61 285.72 102.89 276.31 112.31 C 223.38 165.37 170.38 218.37 117.35 271.34 C 107.72 280.99 91.01 281.25 81.11 271.86 C 74.39 264.94 66.82 258.69 61.24 250.77 C 53.72 238.52 58.85 221.07 71.64 214.62 C 94.11 203.87 116.72 193.38 139.33 182.91 C 123.81 166.36 107.30 150.68 91.37 134.49 C 60.20 140.28 27.37 116.78 23.71 85.08 Z"/>
|
|
4
|
+
<path d=" M 205.21 201.23 C 225.32 181.36 260.88 181.11 281.14 200.86 C 299.25 218.75 317.37 236.65 335.10 254.93 C 356.73 278.01 352.01 318.70 326.03 336.56 C 320.07 330.47 313.73 324.65 308.12 318.28 C 323.86 309.39 328.76 286.18 316.63 272.39 C 301.73 256.95 286.30 242.03 271.24 226.75 C 264.49 219.65 256.80 212.00 246.37 211.52 C 224.65 208.64 205.52 233.36 214.49 253.58 C 221.09 266.81 234.22 275.12 243.62 286.24 C 240.43 295.96 238.09 306.13 238.29 316.46 C 225.55 304.29 213.16 291.73 200.89 279.09 C 180.97 257.57 183.10 220.45 205.21 201.23 Z"/>
|
|
5
|
+
<path d=" M 273.90 352.07 C 252.28 328.99 256.98 288.31 282.96 270.46 C 288.93 276.54 295.26 282.36 300.88 288.72 C 285.14 297.62 280.23 320.82 292.38 334.61 C 307.27 350.05 322.70 364.96 337.75 380.25 C 344.51 387.35 352.20 395.00 362.64 395.48 C 384.35 398.37 403.49 373.64 394.51 353.42 C 387.92 340.18 374.78 331.88 365.38 320.76 C 368.56 311.04 370.91 300.86 370.71 290.54 C 383.45 302.70 395.84 315.27 408.11 327.91 C 428.03 349.43 425.90 386.55 403.78 405.77 C 383.68 425.64 348.13 425.89 327.86 406.14 C 309.75 388.25 291.60 370.37 273.90 352.07 Z"/>
|
|
6
|
+
<path d=" M 422.11 403.83 C 431.96 394.07 441.60 384.06 451.66 374.51 C 460.90 383.74 471.89 392.70 474.89 406.11 C 480.16 429.97 484.08 454.13 488.76 478.12 C 490.00 483.41 484.47 488.29 479.35 486.63 C 454.66 481.52 429.55 478.12 405.14 471.84 C 393.17 467.97 385.20 457.75 376.55 449.27 C 386.39 439.49 396.13 429.60 406.06 419.91 C 416.37 433.45 435.74 414.00 422.11 403.83 Z"/>
|
|
7
|
+
</g>
|
|
8
|
+
</svg>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<svg width="512pt" height="512pt" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g fill="#2078CF">
|
|
3
|
+
<path d=" M 23.71 85.08 C 17.22 49.81 49.44 14.86 85.08 18.12 C 118.83 19.21 145.72 53.33 139.45 86.37 C 155.64 102.30 171.32 118.83 187.87 134.36 C 198.32 111.73 208.84 89.12 219.57 66.62 C 226.05 53.84 243.47 48.74 255.73 56.27 C 263.76 62.10 270.34 69.69 277.25 76.75 C 286.28 86.61 285.72 102.89 276.31 112.31 C 223.38 165.37 170.38 218.37 117.35 271.34 C 107.72 280.99 91.01 281.25 81.11 271.86 C 74.39 264.94 66.82 258.69 61.24 250.77 C 53.72 238.52 58.85 221.07 71.64 214.62 C 94.11 203.87 116.72 193.38 139.33 182.91 C 123.81 166.36 107.30 150.68 91.37 134.49 C 60.20 140.28 27.37 116.78 23.71 85.08 Z"/>
|
|
4
|
+
<path d=" M 205.21 201.23 C 225.32 181.36 260.88 181.11 281.14 200.86 C 299.25 218.75 317.37 236.65 335.10 254.93 C 356.73 278.01 352.01 318.70 326.03 336.56 C 320.07 330.47 313.73 324.65 308.12 318.28 C 323.86 309.39 328.76 286.18 316.63 272.39 C 301.73 256.95 286.30 242.03 271.24 226.75 C 264.49 219.65 256.80 212.00 246.37 211.52 C 224.65 208.64 205.52 233.36 214.49 253.58 C 221.09 266.81 234.22 275.12 243.62 286.24 C 240.43 295.96 238.09 306.13 238.29 316.46 C 225.55 304.29 213.16 291.73 200.89 279.09 C 180.97 257.57 183.10 220.45 205.21 201.23 Z"/>
|
|
5
|
+
<path d=" M 273.90 352.07 C 252.28 328.99 256.98 288.31 282.96 270.46 C 288.93 276.54 295.26 282.36 300.88 288.72 C 285.14 297.62 280.23 320.82 292.38 334.61 C 307.27 350.05 322.70 364.96 337.75 380.25 C 344.51 387.35 352.20 395.00 362.64 395.48 C 384.35 398.37 403.49 373.64 394.51 353.42 C 387.92 340.18 374.78 331.88 365.38 320.76 C 368.56 311.04 370.91 300.86 370.71 290.54 C 383.45 302.70 395.84 315.27 408.11 327.91 C 428.03 349.43 425.90 386.55 403.78 405.77 C 383.68 425.64 348.13 425.89 327.86 406.14 C 309.75 388.25 291.60 370.37 273.90 352.07 Z"/>
|
|
6
|
+
<path d=" M 422.11 403.83 C 431.96 394.07 441.60 384.06 451.66 374.51 C 460.90 383.74 471.89 392.70 474.89 406.11 C 480.16 429.97 484.08 454.13 488.76 478.12 C 490.00 483.41 484.47 488.29 479.35 486.63 C 454.66 481.52 429.55 478.12 405.14 471.84 C 393.17 467.97 385.20 457.75 376.55 449.27 C 386.39 439.49 396.13 429.60 406.06 419.91 C 416.37 433.45 435.74 414.00 422.11 403.83 Z"/>
|
|
7
|
+
</g>
|
|
8
|
+
</svg>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("n8n-workflow"),w=require("../../chunks/constants-DGk4O-Zm.js"),s={resource:"resource",operation:"operation"},h={shortUrl:"shortUrl",tags:"tags",visits:"visits",domains:"domains"},a={list:"list",create:"create",get:"get",delete:"delete",update:"update"},g={rename:"rename",stats:"stats"},o={getGlobalVisits:"getGlobalVisits",getShortUrlVisits:"getShortUrlVisits",deleteShortUrlVisits:"deleteShortUrlVisits",getTagVisits:"getTagVisits",getDomainVisits:"getDomainVisits",getOrphanVisits:"getOrphanVisits",deleteOrphanVisits:"deleteOrphanVisits",getNonOrphanVisits:"getNonOrphanVisits"},O={setRedirects:"setRedirects"},m={displayName:"Domain",name:"domain",type:"resourceLocator",modes:[{displayName:"From List",name:"list",type:"list",typeOptions:{searchable:!0,searchListMethod:"searchDomains",searchFilterRequired:!1}},{displayName:"From Input",name:"input",type:"string"}],default:{mode:"list",value:""},hint:"The domain to which the short URL will be attached"},n={allPages:{displayName:"All Pages",name:"allPages",type:"boolean",default:!1,hint:"If true, all items from all pages will be returned."},page:{displayName:"Page",name:"page",type:"number",default:1,hint:"The page to be displayed. Defaults to 1.",displayOptions:{hide:{allPages:[!0]}}},itemsPerPage:{displayName:"Items per Page",name:"itemsPerPage",type:"number",default:10,typeOptions:{minValue:0},hint:"The amount of items to return on every page. Defaults to 10.",displayOptions:{hide:{allPages:[!0]}}}},L=[n.allPages,n.page,n.itemsPerPage],T={startDate:{displayName:"Start Date",name:"startDate",type:"dateTime",default:"",hint:"ISO-8601 date from which to get data"},endDate:{displayName:"End Date",name:"endDate",type:"dateTime",default:"",hint:"ISO-8601 date until which to get data"}},y=[T.startDate,T.endDate],U=[{...m,hint:"The domain in which the short code should be searched for"},{displayName:"Short Code",name:"shortCode",type:"string",required:!0,default:"",hint:"The short code for the short URL"}],R=[...U],A=[...U],b=[{displayName:"Long URL",name:"longUrl",type:"string",required:!0,default:"",hint:"The long URL this short URL will redirect to"},m,{displayName:"Tags",name:"tags",type:"string",typeOptions:{multipleValues:!0},default:[],hint:"The list of tags to set to the short URL"},{displayName:"Options",name:"options",type:"collection",placeholder:"Add Option",default:{},options:[{displayName:"Short Code Length",name:"shortCodeLength",type:"number",typeOptions:{minValue:4},default:5,hint:"The length for generated short code (min: 4, default: 5). Ignored when custom slug is provided"},{displayName:"Title",name:"title",type:"string",default:"",hint:"A descriptive title of the short URL"},{displayName:"Custom Slug",name:"customSlug",type:"string",default:"",hint:"A unique custom slug to be used instead of the generated short code"},{displayName:"Path Prefix",name:"pathPrefix",type:"string",default:"",hint:"A prefix that will be prepended to provided custom slug or auto-generated short code"},{displayName:"Valid Since",name:"validSince",type:"dateTime",default:"",hint:"The date (in ISO-8601 format) from which this short code will be valid"},{displayName:"Valid Until",name:"validUntil",type:"dateTime",default:"",hint:"The date (in ISO-8601 format) until which this short code will be valid"},{displayName:"Maximum Visits",name:"maxVisits",type:"number",default:0,hint:"The maximum number of allowed visits for this short code"},{displayName:"Crawlable",name:"crawlable",type:"boolean",default:!1,hint:"Tells if this URL will be included as 'Allow' in Shlink's robots.txt"},{displayName:"Forward Query",name:"forwardQuery",type:"boolean",default:!0,hint:"Tells if the query params should be forwarded from the short URL to the long one"},{displayName:"Find If Exists",name:"findIfExists",type:"boolean",default:!1,hint:"Will force existing matching URL to be returned if found, instead of creating a new one"}]}],C=[{displayName:"Short Code",name:"shortCode",type:"string",required:!0,default:"",hint:"The short code for the short URL"},{displayName:"Options",name:"options",type:"collection",placeholder:"Add Option",default:{},options:[{displayName:"Long URL",name:"longUrl",type:"string",default:"",hint:"The new long URL this short URL will redirect to"},{displayName:"Title",name:"title",type:"string",default:"",hint:"A descriptive title of the short URL"},{displayName:"Tags",name:"tags",type:"string",typeOptions:{multipleValues:!0},default:[],hint:"The list of tags to set to the short URL"},{displayName:"Valid Since",name:"validSince",type:"dateTime",default:"",hint:"The date (in ISO-8601 format) from which this short code will be valid"},{displayName:"Valid Until",name:"validUntil",type:"dateTime",default:"",hint:"The date (in ISO-8601 format) until which this short code will be valid"},{displayName:"Crawlable",name:"crawlable",type:"boolean",default:!1,hint:"Tells if this URL will be included as 'Allow' in Shlink's robots.txt"},{displayName:"Forward Query",name:"forwardQuery",type:"boolean",default:!0,hint:"Tells if the query params should be forwarded from the short URL to the long one"}]}],P=[...L,{displayName:"Options",name:"options",type:"collection",placeholder:"Add Option",default:{},options:[{displayName:"Search Term",name:"searchTerm",type:"string",default:"",hint:"A query used to filter results by searching for it on the longUrl and shortCode fields."},{displayName:"Tags",name:"tags",type:"string",typeOptions:{multipleValues:!0},default:"",hint:"A list of tags used to filter the result set. Only short URLs tagged with at least one of the provided tags will be returned."},{displayName:"Tags Mode",name:"tagsMode",type:"options",options:[{name:"All",value:"all"},{name:"Any",value:"any"}],default:"any",hint:"Tells how the filtering by tags should work, returning short URLs containing 'any' of the tags, or 'all' the tags. It's ignored if no tags are provided, and defaults to 'any' if not provided."},{displayName:"Order By",name:"orderBy",type:"options",options:[{name:"Long URL (Z-A)",value:"longUrl-DESC"},{name:"Long URL (A-Z)",value:"longUrl-ASC"},{name:"Short Code (Z-A)",value:"shortCode-DESC"},{name:"Short Code (A-Z)",value:"shortCode-ASC"},{name:"Date Created (Latest - Oldest)",value:"dateCreated-DESC"},{name:"Date Created (Oldest - Latest)",value:"dateCreated-ASC"},{name:"Title (Z-A)",value:"title-DESC"},{name:"Title (A-Z)",value:"title-ASC"},{name:"Visits (High to Low)",value:"visits-DESC"},{name:"Visits (Low to High)",value:"visits-ASC"},{name:"Non-Bot Visits (High to Low)",value:"nonBotVisits-DESC"},{name:"Non-Bot Visits (Low to High)",value:"nonBotVisits-ASC"},{name:"Default",value:""}],default:"",hint:"The field from which you want to order the result."},...y,{displayName:"Exclude Max Visits Reached",name:"excludeMaxVisitsReached",type:"boolean",default:!1,hint:"If true, short URLs which already reached their maximum amount of visits will be excluded."},{displayName:"Exclude Past Valid Until",name:"excludePastValidUntil",type:"boolean",default:!1,hint:"If true, short URLs which validUntil date is on the past will be excluded."},{...m,name:"domain",hint:"Get short URLs for this particular domain only. Use 'DEFAULT' keyword for default domain."}]}],u={show:{[s.resource]:[h.shortUrl]}},E=[{displayName:"Operation",name:s.operation,type:"options",default:a.list,options:[{name:"List",value:a.list},{name:"Create",value:a.create},{name:"Get",value:a.get},{name:"Delete",value:a.delete},{name:"Update",value:a.update}],displayOptions:u},...P.map(e=>{var t;return{...e,displayOptions:{...u,...e.displayOptions,show:{...u.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[a.list]}}}}),...b.map(e=>{var t;return{...e,displayOptions:{...u,...e.displayOptions,show:{...u.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[a.create]}}}}),...R.map(e=>{var t;return{...e,displayOptions:{...u,...e.displayOptions,show:{...u.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[a.get]}}}}),...A.map(e=>{var t;return{...e,displayOptions:{...u,...e.displayOptions,show:{...u.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[a.delete]}}}}),...C.map(e=>{var t;return{...e,displayOptions:{...u,...e.displayOptions,show:{...u.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[a.update]}}}})],V={displayName:"Tag Name",name:"tagName",type:"string",required:!0,default:"",hint:"The name of the tag"},D=[n.allPages,n.page,{...n.itemsPerPage,default:0,typeOptions:{minValue:0},hint:"The amount of items to return on every page. Defaults to all the items"},{displayName:"Options",name:"options",type:"collection",placeholder:"Add Option",default:{},options:[{displayName:"Search Term",name:"searchTerm",type:"string",default:"",hint:"A query used to filter results by searching for it on the tag name"},{displayName:"Order By",name:"orderBy",type:"options",options:[{name:"Tag Name (A-Z)",value:"tag-ASC"},{name:"Tag Name (Z-A)",value:"tag-DESC"},{name:"Short URLs Count (Low to High)",value:"shortUrlsCount-ASC"},{name:"Short URLs Count (High to Low)",value:"shortUrlsCount-DESC"},{name:"Total Visits (Low to High)",value:"visits-ASC"},{name:"Total Visits (High to Low)",value:"visits-DESC"},{name:"Non-Bot Visits (Low to High)",value:"nonBotVisits-ASC"},{name:"Non-Bot Visits (High to Low)",value:"nonBotVisits-DESC"}],default:"tag-ASC",hint:"The order in which to return the tags. Note: Ordering by shortUrlsCount, visits or nonBotVisits may impact performance on large datasets."}]}],x=[n.allPages,n.page,{...n.itemsPerPage,default:0,typeOptions:{minValue:0},hint:"The amount of items to return on every page. Defaults to all the items"},{displayName:"Options",name:"options",type:"collection",placeholder:"Add Option",default:{},options:[{displayName:"Search Term",name:"searchTerm",type:"string",default:"",hint:"A query used to filter results by searching for it on the tag name"},{displayName:"Order By",name:"orderBy",type:"options",options:[{name:"Tag Name (A-Z)",value:"tag-ASC"},{name:"Tag Name (Z-A)",value:"tag-DESC"}],default:"tag-ASC",hint:"The order in which to return the tags"}]}],G=[{...V,displayName:"Current Tag Name",name:"oldName",hint:"The current name of the tag to rename",required:!0},{...V,displayName:"New Tag Name",name:"newName",hint:"The new name for the tag",required:!0}],q=[{displayName:"Tags",name:"tags",type:"string",typeOptions:{multipleValues:!0},default:[],required:!0,hint:"The names of the tags to delete"}],c={show:{[s.resource]:[h.tags]}},I=[{displayName:"Operation",name:s.operation,type:"options",default:a.list,options:[{name:"List",value:a.list},{name:"Stats",value:g.stats},{name:"Rename",value:g.rename},{name:"Delete",value:a.delete}],displayOptions:c},...x.map(e=>{var t;return{...e,displayOptions:{...c,...e.displayOptions,show:{...c.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[a.list]}}}}),...G.map(e=>{var t;return{...e,displayOptions:{...c,...e.displayOptions,show:{...c.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[g.rename]}}}}),...q.map(e=>{var t;return{...e,displayOptions:{...c,...e.displayOptions,show:{...c.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[a.delete]}}}}),...D.map(e=>{var t;return{...e,displayOptions:{...c,...e.displayOptions,show:{...c.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[g.stats]}}}})],B=[],J=[{displayName:"Short Code",name:"shortCode",type:"string",required:!0,default:"",hint:"The short code for the short URL"},n.allPages,n.page,{...n.itemsPerPage,default:0,typeOptions:{minValue:0},hint:"Number of items per page (0 for all)"},{displayName:"Options",name:"options",type:"collection",placeholder:"Add Option",default:{},options:[{...m,hint:"The domain in which the short code should be searched for"},...y,{displayName:"Exclude Bots",name:"excludeBots",type:"boolean",default:!1,hint:"Exclude visits from potential bots"}]}],k=[{...m,hint:"The domain in which the short code should be searched for"},{displayName:"Short Code",name:"shortCode",type:"string",required:!0,default:"",hint:"The short code for the short URL"}],H=[{displayName:"Tag",name:"tag",type:"string",required:!0,default:"",hint:"Tag to get visits for"},n.allPages,n.page,{...n.itemsPerPage,default:0,typeOptions:{minValue:0},hint:"Number of items per page (0 for all)"},{displayName:"Options",name:"options",type:"collection",placeholder:"Add Option",default:{},options:[...y,{displayName:"Exclude Bots",name:"excludeBots",type:"boolean",default:!1,hint:"Exclude visits from potential bots"}]}],$=[{...m,hint:"Domain to get visits for",required:!0},n.allPages,n.page,{...n.itemsPerPage,default:0,typeOptions:{minValue:0},hint:"Number of items per page (0 for all)"},{displayName:"Options",name:"options",type:"collection",placeholder:"Add Option",default:{},options:[...y,{displayName:"Exclude Bots",name:"excludeBots",type:"boolean",default:!1,hint:"Exclude visits from potential bots"}]}],F=[n.allPages,n.page,{...n.itemsPerPage,default:0,typeOptions:{minValue:0},hint:"Number of items per page (0 for all)"},{displayName:"Options",name:"options",type:"collection",placeholder:"Add Option",default:{},options:[{displayName:"Type",name:"type",type:"options",options:[{name:"Invalid Short URL",value:"invalid_short_url"},{name:"Base URL",value:"base_url"},{name:"Regular 404",value:"regular_404"}],default:"",hint:"Type of orphan visit to return (optional)"},{displayName:"Exclude Bots",name:"excludeBots",type:"boolean",default:!1,hint:"Exclude visits from potential bots"},...y]}],M=[],_=[n.allPages,n.page,{...n.itemsPerPage,default:0,typeOptions:{minValue:0},hint:"Number of items per page (0 for all)"},{displayName:"Options",name:"options",type:"collection",placeholder:"Add Option",default:{},options:[{displayName:"Exclude Bots",name:"excludeBots",type:"boolean",default:!1,hint:"Exclude visits from potential bots"},...y]}],d={show:{[s.resource]:[h.visits]}},Z=[{displayName:"Operation",name:s.operation,type:"options",options:[{name:"Delete Orphan Visits",value:o.deleteOrphanVisits},{name:"Delete Short URL Visits",value:o.deleteShortUrlVisits},{name:"Get Domain Visits",value:o.getDomainVisits},{name:"Get Global Visits",value:o.getGlobalVisits},{name:"Get Non-Orphan Visits",value:o.getNonOrphanVisits},{name:"Get Orphan Visits",value:o.getOrphanVisits},{name:"Get Short URL Visits",value:o.getShortUrlVisits},{name:"Get Tag Visits",value:o.getTagVisits}],default:"getGlobalVisits",displayOptions:d},...B.map(e=>{var t;return{...e,displayOptions:{...d,...e.displayOptions,show:{...d.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[o.getGlobalVisits]}}}}),...J.map(e=>{var t;return{...e,displayOptions:{...d,...e.displayOptions,show:{...d.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[o.getShortUrlVisits]}}}}),...k.map(e=>{var t;return{...e,displayOptions:{...d,...e.displayOptions,show:{...d.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[o.deleteShortUrlVisits]}}}}),...H.map(e=>{var t;return{...e,displayOptions:{...d,...e.displayOptions,show:{...d.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[o.getTagVisits]}}}}),...$.map(e=>{var t;return{...e,displayOptions:{...d,...e.displayOptions,show:{...d.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[o.getDomainVisits]}}}}),...F.map(e=>{var t;return{...e,displayOptions:{...d,...e.displayOptions,show:{...d.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[o.getOrphanVisits]}}}}),...M.map(e=>{var t;return{...e,displayOptions:{...d,...e.displayOptions,show:{...d.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[o.deleteOrphanVisits]}}}}),..._.map(e=>{var t;return{...e,displayOptions:{...d,...e.displayOptions,show:{...d.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[o.getNonOrphanVisits]}}}})],j=[],Q=[{displayName:"Options",name:"options",type:"collection",placeholder:"Add Option",default:{},options:[{...m,name:"domain",hint:"The domain's authority for which you want to set redirects"},{displayName:"Base URL Redirect",name:"baseUrlRedirect",type:"string",default:"",hint:"URL to redirect to when a user hits the domain's base URL"},{displayName:"Regular 404 Redirect",name:"regular404Redirect",type:"string",default:"",hint:"URL to redirect to when a user hits a not found URL other than an invalid short URL"},{displayName:"Invalid Short URL Redirect",name:"invalidShortUrlRedirect",type:"string",default:"",hint:"URL to redirect to when a user hits an invalid short URL"}]}],f={show:{[s.resource]:[h.domains]}},W=[{displayName:"Operation",name:s.operation,type:"options",default:a.list,options:[{name:"List",value:a.list},{name:"Set Redirects",value:O.setRedirects}],displayOptions:f},...j.map(e=>{var t;return{...e,displayOptions:{...f,...e.displayOptions,show:{...f.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[a.list]}}}}),...Q.map(e=>{var t;return{...e,displayOptions:{...f,...e.displayOptions,show:{...f.show,...(t=e.displayOptions)==null?void 0:t.show,[s.operation]:[O.setRedirects]}}}})];async function l(e,t,i,r){r=r||{},i=i||{};const S=(await this.getCredentials(w.SHLINK_CREDENTIAL,0)).apiBaseUrl,N={method:e,body:i,qs:r,uri:`${S.replace(/\/$/,"")}/${t}`,json:!0};return e==="GET"&&delete N.body,await this.helpers.requestWithAuthentication.call(this,w.SHLINK_CREDENTIAL,N)}function p(){const e=this.getNode().parameters,t={};for(const r of Object.keys(e))r!=="options"&&(t[r]=this.getNodeParameter(r,0));const i=this.getNodeParameter("options",0,{});for(const r of Object.keys(i))t[r]=i[r];return t}async function K(){switch(this.getNodeParameter("operation",0)){case a.list:return z.call(this);case a.create:return X.call(this);case a.get:return Y.call(this);case a.delete:return ee.call(this);case a.update:return te.call(this);default:return Promise.resolve(null)}}async function z(){const e=p.call(this),t=await l.call(this,"GET","/rest/v3/short-urls",{},e);return[this.helpers.returnJsonArray(t.shortUrls.data)]}async function X(){const e=p.call(this),t=await l.call(this,"POST","/rest/v3/short-urls",e);return[this.helpers.returnJsonArray([t])]}async function Y(){const e=this.getNodeParameter("shortCode",0),t={domain:this.getNodeParameter("domain",0)},i=await l.call(this,"GET",`/rest/v3/short-urls/${e}`,{},t);return[this.helpers.returnJsonArray([i])]}async function ee(){const e=this.getNodeParameter("shortCode",0),t={domain:this.getNodeParameter("domain",0)},i=await l.call(this,"DELETE",`/rest/v3/short-urls/${e}`,{},t);return[this.helpers.returnJsonArray([i])]}async function te(){const e=this.getNodeParameter("shortCode",0),t=p.call(this),i={domain:this.getNodeParameter("domain",0)},r=await l.call(this,"PATCH",`/rest/v3/short-urls/${e}`,t,i);return[this.helpers.returnJsonArray([r])]}async function se(){switch(this.getNodeParameter("operation",0)){case a.list:return ae.call(this);case g.stats:return ie.call(this);case g.rename:return oe.call(this);case a.delete:return ne.call(this);default:return Promise.resolve(null)}}async function ae(){const e=p.call(this),t=await l.call(this,"GET","/rest/v3/tags",{},e);return[this.helpers.returnJsonArray(t.tags.data.map(i=>({tag:i})))]}async function ie(){const e=p.call(this),t=await l.call(this,"GET","/rest/v3/tags/stats",{},e);return[this.helpers.returnJsonArray(t.tags.data)]}async function oe(){const e={oldName:this.getNodeParameter("oldName",0),newName:this.getNodeParameter("newName",0)},t=await l.call(this,"PUT","/rest/v3/tags",e);return[this.helpers.returnJsonArray([t])]}async function ne(){const e={tags:this.getNodeParameter("tags",0)},t=await l.call(this,"DELETE","/rest/v3/tags",{},e);return[this.helpers.returnJsonArray([t])]}async function le(){switch(this.getNodeParameter("operation",0)){case o.getGlobalVisits:return re.call(this);case o.getShortUrlVisits:return de.call(this);case o.deleteShortUrlVisits:return he.call(this);case o.getTagVisits:return pe.call(this);case o.getDomainVisits:return ue.call(this);case o.getOrphanVisits:return ce.call(this);case o.deleteOrphanVisits:return me.call(this);case o.getNonOrphanVisits:return ge.call(this);default:return Promise.resolve(null)}}async function re(){const e=p.call(this),t=await l.call(this,"GET","/rest/v3/visits",{},e);return[this.helpers.returnJsonArray(t.visits.data)]}async function de(){const e=this.getNodeParameter("shortCode",0),t=p.call(this);delete t.shortCode;const i=await l.call(this,"GET",`/rest/v3/short-urls/${e}/visits`,{},t);return[this.helpers.returnJsonArray(i.visits.data)]}async function he(){const e=this.getNodeParameter("shortCode",0),t={domain:this.getNodeParameter("domain",0)},i=await l.call(this,"DELETE",`/rest/v3/short-urls/${e}/visits`,{},t);return[this.helpers.returnJsonArray([i])]}async function pe(){const t=this.getNodeParameter("options",0,{}).tag,i=p.call(this);delete i.tag;const r=await l.call(this,"GET",`/rest/v3/tags/${t}/visits`,{},i);return[this.helpers.returnJsonArray(r.visits.data)]}async function ue(){const e=this.getNodeParameter("domain",0),t=p.call(this);delete t.domain;const i=await l.call(this,"GET",`/rest/v3/domains/${e}/visits`,{},t);return[this.helpers.returnJsonArray(i.visits.data)]}async function ce(){const e=p.call(this),t=await l.call(this,"GET","/rest/v3/visits/orphan",{},e);return[this.helpers.returnJsonArray(t.visits.data)]}async function me(){const e=await l.call(this,"DELETE","/rest/v3/visits/orphan",{});return[this.helpers.returnJsonArray([e])]}async function ge(){const e=p.call(this),t=await l.call(this,"GET","/rest/v3/visits/non-orphan",{},e);return[this.helpers.returnJsonArray(t.visits.data)]}async function ye(){switch(this.getNodeParameter("operation",0)){case a.list:return fe.call(this);case O.setRedirects:return we.call(this);default:return Promise.resolve(null)}}async function fe(){const e=await l.call(this,"GET","/rest/v3/domains",{},{});return[this.helpers.returnJsonArray(e.domains.data)]}async function we(){const e=p.call(this),t=await l.call(this,"PATCH","/rest/v3/domains/redirects",e);return[this.helpers.returnJsonArray(t)]}class Oe{description={displayName:"Shlink",version:1,defaults:{name:"Shorten URL"},inputs:[v.NodeConnectionType.Main],outputs:[v.NodeConnectionType.Main],credentials:[{name:w.SHLINK_CREDENTIAL,required:!0}],properties:[{displayName:"Resources",name:s.resource,type:"options",default:h.shortUrl,options:[{name:"Short Url",value:h.shortUrl},{name:"Tags",value:h.tags},{name:"Visits",value:h.visits},{name:"Domains",value:h.domains}]},...E,...I,...Z,...W],name:"shlink",group:["Utility","Analytics","Miscellaneous"],description:"Shlink Integration Node",icon:{light:"file:icon/shlink-light.svg",dark:"file:icon/shlink-dark.svg"}};async execute(){switch(this.getNodeParameter("resource",0)){case h.shortUrl:return K.call(this);case h.tags:return se.call(this);case h.visits:return le.call(this);case h.domains:return ye.call(this);default:return Promise.resolve(null)}}methods={listSearch:{async searchDomains(t){return{results:(await l.call(this,"GET","rest/v3/domains",{},{})).domains.data.map(r=>({name:r.domain,value:r.domain})).filter(r=>t===void 0||r.name.toLowerCase().includes(t==null?void 0:t.toLowerCase()))}}}}}exports.Shlink=Oe;
|
|
2
|
+
//# sourceMappingURL=Shlink.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Shlink.node.js","sources":["../../../src/nodes/Shlink/constants.ts","../../../src/nodes/Shlink/properties/domain.properties.ts","../../../src/nodes/Shlink/properties/pagination.properties.ts","../../../src/nodes/Shlink/properties/date.properties.ts","../../../src/nodes/Shlink/properties/short-url.properties.ts","../../../src/nodes/Shlink/operations/short-url.operations.ts","../../../src/nodes/Shlink/properties/tags.properties.ts","../../../src/nodes/Shlink/operations/tags.operations.ts","../../../src/nodes/Shlink/properties/visit.properties.ts","../../../src/nodes/Shlink/operations/visit.operations.ts","../../../src/nodes/Shlink/properties/domains.properties.ts","../../../src/nodes/Shlink/operations/domains.operations.ts","../../../src/nodes/shared/generic-functions.ts","../../../src/nodes/shared/executions/utils.ts","../../../src/nodes/Shlink/execute/short-url.execute.ts","../../../src/nodes/Shlink/execute/tags.execute.ts","../../../src/nodes/Shlink/execute/visit.execute.ts","../../../src/nodes/Shlink/execute/domains.execute.ts","../../../src/nodes/Shlink/Shlink.node.ts"],"sourcesContent":["export const PROPERTIES = {\n resource: \"resource\",\n operation: \"operation\",\n}\n\nexport const RESOURCE = {\n shortUrl: \"shortUrl\",\n redirectRules: \"redirectRules\",\n tags: \"tags\",\n visits: \"visits\",\n domains: \"domains\",\n}\n\nexport const GENERIC_OPERATION = {\n list: \"list\",\n create: \"create\",\n get: \"get\",\n delete: \"delete\",\n update: \"update\",\n \n}\n\nexport const TAG_OPERATION = {\n rename: \"rename\",\n stats: \"stats\",\n}\n\nexport const VISIT_OPERATION = {\n getGlobalVisits: \"getGlobalVisits\",\n getShortUrlVisits: \"getShortUrlVisits\",\n deleteShortUrlVisits: \"deleteShortUrlVisits\",\n getTagVisits: \"getTagVisits\",\n getDomainVisits: \"getDomainVisits\",\n getOrphanVisits: \"getOrphanVisits\",\n deleteOrphanVisits: \"deleteOrphanVisits\",\n getNonOrphanVisits: \"getNonOrphanVisits\",\n}\n\nexport const DOMAIN_OPERATION = {\n setRedirects: \"setRedirects\",\n}","import { INodeProperties } from \"n8n-workflow\";\n\nexport const domainResourceLocator: INodeProperties = {\n displayName: \"Domain\",\n name: \"domain\",\n type: \"resourceLocator\",\n modes: [\n {\n displayName: \"From List\",\n name: \"list\",\n type: \"list\",\n typeOptions: {\n searchable: true,\n searchListMethod: 'searchDomains',\n searchFilterRequired: false,\n },\n },\n {\n displayName: \"From Input\",\n name: \"input\",\n type: \"string\",\n },\n ],\n default: {\n mode: 'list',\n value: '',\n },\n hint: \"The domain to which the short URL will be attached\",\n};\n","import { INodeProperties } from \"n8n-workflow\";\n\n\nexport const paginationFields: Record<string, INodeProperties> = {\n allPages: {\n displayName: 'All Pages',\n name: \"allPages\",\n type: \"boolean\",\n default: false,\n hint: \"If true, all items from all pages will be returned.\",\n },\n page: {\n displayName: \"Page\",\n name: \"page\",\n type: \"number\",\n default: 1,\n hint: \"The page to be displayed. Defaults to 1.\",\n displayOptions: {\n hide: {\n allPages: [true]\n }\n }\n },\n itemsPerPage: {\n displayName: 'Items per Page',\n name: \"itemsPerPage\",\n type: \"number\",\n default: 10,\n typeOptions: {\n minValue: 0,\n },\n hint: \"The amount of items to return on every page. Defaults to 10.\",\n displayOptions: {\n hide: {\n allPages: [true]\n }\n }\n },\n}\n\n\nexport const pagination: INodeProperties[] = [\n paginationFields.allPages,\n paginationFields.page,\n paginationFields.itemsPerPage,\n]","import { INodeProperties } from \"n8n-workflow\";\n\nexport const dateFields: Record<string, INodeProperties> = {\n startDate: {\n displayName: \"Start Date\",\n name: \"startDate\",\n type: \"dateTime\",\n default: \"\",\n hint: \"ISO-8601 date from which to get data\",\n },\n endDate: {\n displayName: \"End Date\",\n name: \"endDate\",\n type: \"dateTime\",\n default: \"\",\n hint: \"ISO-8601 date until which to get data\",\n },\n};\n\nexport const dateRange: INodeProperties[] = [\n dateFields.startDate,\n dateFields.endDate,\n];\n","import { INodeProperties } from \"n8n-workflow\";\nimport { domainResourceLocator } from \"./domain.properties\";\nimport { pagination } from \"./pagination.properties\";\nimport { dateRange } from \"./date.properties\";\n\nconst shortCodeAndDomainFields: INodeProperties[] = [\n {\n ...domainResourceLocator,\n hint: \"The domain in which the short code should be searched for\",\n },\n {\n displayName: \"Short Code\",\n name: \"shortCode\",\n type: \"string\",\n required: true,\n default: \"\",\n hint: \"The short code for the short URL\",\n },\n];\n\nexport const shortUrlGet: INodeProperties[] = [...shortCodeAndDomainFields];\n\nexport const shortUrlDelete: INodeProperties[] = [...shortCodeAndDomainFields];\n\nexport const shortUrlCreate: INodeProperties[] = [\n {\n displayName: \"Long URL\",\n name: \"longUrl\",\n type: \"string\",\n required: true,\n default: \"\",\n hint: \"The long URL this short URL will redirect to\",\n },\n domainResourceLocator,\n {\n displayName: \"Tags\",\n name: \"tags\",\n type: \"string\",\n typeOptions: {\n multipleValues: true,\n },\n default: [],\n hint: \"The list of tags to set to the short URL\",\n },\n {\n displayName: 'Options',\n name: 'options',\n type: 'collection',\n placeholder: 'Add Option',\n default: {},\n options: [\n {\n displayName: \"Short Code Length\",\n name: \"shortCodeLength\",\n type: \"number\",\n typeOptions: {\n minValue: 4,\n },\n default: 5,\n hint: \"The length for generated short code (min: 4, default: 5). Ignored when custom slug is provided\",\n },\n {\n displayName: \"Title\",\n name: \"title\",\n type: \"string\",\n default: \"\",\n hint: \"A descriptive title of the short URL\",\n },\n {\n displayName: \"Custom Slug\",\n name: \"customSlug\",\n type: \"string\",\n default: \"\",\n hint: \"A unique custom slug to be used instead of the generated short code\",\n },\n {\n displayName: \"Path Prefix\",\n name: \"pathPrefix\",\n type: \"string\",\n default: \"\",\n hint: \"A prefix that will be prepended to provided custom slug or auto-generated short code\",\n },\n {\n displayName: \"Valid Since\",\n name: \"validSince\",\n type: \"dateTime\",\n default: \"\",\n hint: \"The date (in ISO-8601 format) from which this short code will be valid\",\n },\n {\n displayName: \"Valid Until\",\n name: \"validUntil\",\n type: \"dateTime\",\n default: \"\",\n hint: \"The date (in ISO-8601 format) until which this short code will be valid\",\n },\n {\n displayName: \"Maximum Visits\",\n name: \"maxVisits\",\n type: \"number\",\n default: 0,\n hint: \"The maximum number of allowed visits for this short code\",\n },\n {\n displayName: \"Crawlable\",\n name: \"crawlable\",\n type: \"boolean\",\n default: false,\n hint: \"Tells if this URL will be included as 'Allow' in Shlink's robots.txt\",\n },\n {\n displayName: \"Forward Query\",\n name: \"forwardQuery\",\n type: \"boolean\",\n default: true,\n hint: \"Tells if the query params should be forwarded from the short URL to the long one\",\n },\n {\n displayName: \"Find If Exists\",\n name: \"findIfExists\",\n type: \"boolean\",\n default: false,\n hint: \"Will force existing matching URL to be returned if found, instead of creating a new one\",\n },\n ],\n },\n];\n\n// Fields that are allowed to be updated\nexport const shortUrlUpdate: INodeProperties[] = [\n {\n displayName: \"Short Code\",\n name: \"shortCode\",\n type: \"string\",\n required: true,\n default: \"\",\n hint: \"The short code for the short URL\",\n },\n {\n displayName: 'Options',\n name: 'options',\n type: 'collection',\n placeholder: 'Add Option',\n default: {},\n options: [\n {\n displayName: \"Long URL\",\n name: \"longUrl\",\n type: \"string\",\n default: \"\",\n hint: \"The new long URL this short URL will redirect to\",\n },\n {\n displayName: \"Title\",\n name: \"title\",\n type: \"string\",\n default: \"\",\n hint: \"A descriptive title of the short URL\",\n },\n {\n displayName: \"Tags\",\n name: \"tags\",\n type: \"string\",\n typeOptions: {\n multipleValues: true,\n },\n default: [],\n hint: \"The list of tags to set to the short URL\",\n }, \n {\n displayName: \"Valid Since\",\n name: \"validSince\",\n type: \"dateTime\",\n default: \"\",\n hint: \"The date (in ISO-8601 format) from which this short code will be valid\",\n },\n {\n displayName: \"Valid Until\",\n name: \"validUntil\",\n type: \"dateTime\",\n default: \"\",\n hint: \"The date (in ISO-8601 format) until which this short code will be valid\",\n },\n {\n displayName: \"Crawlable\",\n name: \"crawlable\",\n type: \"boolean\",\n default: false,\n hint: \"Tells if this URL will be included as 'Allow' in Shlink's robots.txt\",\n },\n {\n displayName: \"Forward Query\",\n name: \"forwardQuery\",\n type: \"boolean\",\n default: true,\n hint: \"Tells if the query params should be forwarded from the short URL to the long one\",\n },\n ],\n },\n];\n\nexport const shortUrlList: INodeProperties[] = [\n ...pagination,\n {\n displayName: 'Options',\n name: 'options',\n type: 'collection',\n placeholder: 'Add Option',\n default: {},\n options: [\n {\n displayName: \"Search Term\",\n name: \"searchTerm\",\n type: \"string\",\n default: \"\",\n hint: \"A query used to filter results by searching for it on the longUrl and shortCode fields.\",\n },\n {\n displayName: \"Tags\",\n name: \"tags\",\n type: \"string\",\n typeOptions: {\n multipleValues: true,\n },\n default: \"\",\n hint: \"A list of tags used to filter the result set. Only short URLs tagged with at least one of the provided tags will be returned.\",\n },\n {\n displayName: \"Tags Mode\",\n name: \"tagsMode\",\n type: \"options\",\n options: [\n {\n name: \"All\",\n value: \"all\",\n },\n {\n name: \"Any\",\n value: \"any\",\n },\n ],\n default: \"any\",\n hint: \"Tells how the filtering by tags should work, returning short URLs containing 'any' of the tags, or 'all' the tags. It's ignored if no tags are provided, and defaults to 'any' if not provided.\",\n },\n {\n displayName: \"Order By\",\n name: \"orderBy\",\n type: \"options\",\n // eslint-disable-next-line n8n-nodes-base/node-param-options-type-unsorted-items\n options: [\n {\n name: \"Long URL (Z-A)\",\n value: \"longUrl-DESC\",\n },\n {\n name: \"Long URL (A-Z)\",\n value: \"longUrl-ASC\",\n },\n {\n name: \"Short Code (Z-A)\",\n value: \"shortCode-DESC\",\n },\n {\n name: \"Short Code (A-Z)\",\n value: \"shortCode-ASC\",\n },\n {\n name: \"Date Created (Latest - Oldest)\",\n value: \"dateCreated-DESC\",\n },\n {\n name: \"Date Created (Oldest - Latest)\",\n value: \"dateCreated-ASC\",\n },\n {\n name: \"Title (Z-A)\",\n value: \"title-DESC\",\n },\n {\n name: \"Title (A-Z)\",\n value: \"title-ASC\",\n },\n {\n name: \"Visits (High to Low)\",\n value: \"visits-DESC\",\n },\n {\n name: \"Visits (Low to High)\",\n value: \"visits-ASC\",\n },\n {\n name: \"Non-Bot Visits (High to Low)\",\n value: \"nonBotVisits-DESC\",\n },\n {\n name: \"Non-Bot Visits (Low to High)\",\n value: \"nonBotVisits-ASC\",\n },\n {\n name: \"Default\",\n value: \"\",\n },\n ],\n default: \"\",\n hint: \"The field from which you want to order the result.\",\n },\n ...dateRange,\n {\n displayName: \"Exclude Max Visits Reached\",\n name: \"excludeMaxVisitsReached\",\n type: \"boolean\",\n default: false,\n hint: \"If true, short URLs which already reached their maximum amount of visits will be excluded.\",\n },\n {\n displayName: \"Exclude Past Valid Until\",\n name: \"excludePastValidUntil\",\n type: \"boolean\",\n default: false,\n hint: \"If true, short URLs which validUntil date is on the past will be excluded.\",\n },\n {\n ...domainResourceLocator,\n name: \"domain\",\n hint: \"Get short URLs for this particular domain only. Use 'DEFAULT' keyword for default domain.\",\n },\n ],\n },\n];\n","import { type INodeProperties } from \"n8n-workflow\";\nimport {\n GENERIC_OPERATION,\n PROPERTIES,\n RESOURCE,\n} from \"../constants\";\nimport { shortUrlCreate, shortUrlDelete, shortUrlGet, shortUrlList, shortUrlUpdate } from \"../properties/short-url.properties\";\n\nexport const condition: INodeProperties[\"displayOptions\"] = {\n show: {\n [PROPERTIES.resource]: [RESOURCE.shortUrl],\n },\n};\n\nexport const operation: INodeProperties[] = [\n // eslint-disable-next-line n8n-nodes-base/node-param-default-missing\n {\n displayName: \"Operation\",\n name: PROPERTIES.operation,\n type: \"options\",\n default: GENERIC_OPERATION.list,\n options: [\n {\n name: \"List\",\n value: GENERIC_OPERATION.list,\n },\n {\n name: \"Create\",\n value: GENERIC_OPERATION.create,\n },\n {\n name: \"Get\",\n value: GENERIC_OPERATION.get,\n },\n {\n name: \"Delete\",\n value: GENERIC_OPERATION.delete,\n },\n {\n name: \"Update\",\n value: GENERIC_OPERATION.update,\n },\n ],\n displayOptions: condition,\n },\n\n /**\n * Short URL List\n * \n * GET /rest/v3/short-urls\n */\n ...shortUrlList.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [GENERIC_OPERATION.list],\n },\n },\n })),\n \n /**\n * Short URL Create\n * \n * POST /rest/v3/short-urls\n */\n ...shortUrlCreate.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [GENERIC_OPERATION.create],\n },\n },\n })),\n \n /**\n * Short URL Get\n * \n * GET /rest/v3/short-urls/{shortCode}\n */\n ...shortUrlGet.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [GENERIC_OPERATION.get],\n },\n },\n })),\n \n /**\n * Short URL Delete\n * \n * DELETE /rest/v3/short-urls/{shortCode}\n */\n ...shortUrlDelete.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [GENERIC_OPERATION.delete],\n },\n },\n })),\n \n /**\n * Short URL Update\n * \n * PUT /rest/v3/short-urls/{shortCode}\n */\n ...shortUrlUpdate.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [GENERIC_OPERATION.update],\n },\n },\n })),\n];\n","import { INodeProperties } from \"n8n-workflow\";\nimport { paginationFields } from \"./pagination.properties\";\n\n// Common fields used in multiple operations\nconst tagNameField: INodeProperties = {\n displayName: \"Tag Name\",\n name: \"tagName\",\n type: \"string\",\n required: true,\n default: \"\",\n hint: \"The name of the tag\",\n};\n\n// Tags Stats Operation\nexport const tagsWithStats: INodeProperties[] = [\n paginationFields.allPages,\n paginationFields.page,\n {\n ...paginationFields.itemsPerPage,\n default: 0,\n typeOptions: {\n minValue: 0,\n },\n hint: \"The amount of items to return on every page. Defaults to all the items\",\n },\n {\n displayName: \"Options\",\n name: \"options\",\n type: \"collection\",\n placeholder: \"Add Option\",\n default: {},\n options: [\n {\n displayName: \"Search Term\",\n name: \"searchTerm\",\n type: \"string\",\n default: \"\",\n hint: \"A query used to filter results by searching for it on the tag name\",\n },\n {\n displayName: \"Order By\",\n name: \"orderBy\",\n type: \"options\",\n // eslint-disable-next-line n8n-nodes-base/node-param-options-type-unsorted-items\n options: [\n {\n name: \"Tag Name (A-Z)\",\n value: \"tag-ASC\",\n },\n {\n name: \"Tag Name (Z-A)\",\n value: \"tag-DESC\",\n },\n {\n name: \"Short URLs Count (Low to High)\",\n value: \"shortUrlsCount-ASC\",\n },\n {\n name: \"Short URLs Count (High to Low)\",\n value: \"shortUrlsCount-DESC\",\n },\n {\n name: \"Total Visits (Low to High)\",\n value: \"visits-ASC\",\n },\n {\n name: \"Total Visits (High to Low)\",\n value: \"visits-DESC\",\n },\n {\n name: \"Non-Bot Visits (Low to High)\",\n value: \"nonBotVisits-ASC\",\n },\n {\n name: \"Non-Bot Visits (High to Low)\",\n value: \"nonBotVisits-DESC\",\n },\n ],\n default: \"tag-ASC\",\n hint: \"The order in which to return the tags. Note: Ordering by shortUrlsCount, visits or nonBotVisits may impact performance on large datasets.\",\n },\n ],\n },\n];\n\n// List Tags Operation\nexport const tagsList: INodeProperties[] = [\n paginationFields.allPages,\n paginationFields.page,\n {\n ...paginationFields.itemsPerPage,\n default: 0,\n typeOptions: {\n minValue: 0,\n },\n hint: \"The amount of items to return on every page. Defaults to all the items\",\n },\n {\n displayName: \"Options\",\n name: \"options\",\n type: \"collection\",\n placeholder: \"Add Option\",\n default: {},\n options: [\n {\n displayName: \"Search Term\",\n name: \"searchTerm\",\n type: \"string\",\n default: \"\",\n hint: \"A query used to filter results by searching for it on the tag name\",\n },\n {\n displayName: \"Order By\",\n name: \"orderBy\",\n type: \"options\",\n options: [\n {\n name: \"Tag Name (A-Z)\",\n value: \"tag-ASC\",\n },\n {\n name: \"Tag Name (Z-A)\",\n value: \"tag-DESC\",\n },\n ],\n default: \"tag-ASC\",\n hint: \"The order in which to return the tags\",\n },\n ],\n },\n];\n\n// Rename Tag Operation\nexport const tagsRename: INodeProperties[] = [\n {\n ...tagNameField,\n displayName: \"Current Tag Name\",\n name: \"oldName\",\n hint: \"The current name of the tag to rename\",\n required: true\n },\n {\n ...tagNameField,\n displayName: \"New Tag Name\",\n name: \"newName\",\n hint: \"The new name for the tag\",\n required: true\n },\n];\n\n// Delete Tags Operation\nexport const tagsDelete: INodeProperties[] = [\n {\n displayName: \"Tags\",\n name: \"tags\",\n type: \"string\",\n typeOptions: {\n multipleValues: true,\n },\n default: [],\n required: true,\n hint: \"The names of the tags to delete\",\n },\n];\n","import { type INodeProperties } from \"n8n-workflow\";\nimport {\n GENERIC_OPERATION,\n PROPERTIES,\n RESOURCE,\n TAG_OPERATION,\n} from \"../constants\";\nimport { tagsDelete, tagsList, tagsRename, tagsWithStats } from \"../properties/tags.properties\";\n\nexport const condition: INodeProperties[\"displayOptions\"] = {\n show: {\n [PROPERTIES.resource]: [RESOURCE.tags],\n },\n};\n\nexport const operation: INodeProperties[] = [\n // eslint-disable-next-line n8n-nodes-base/node-param-default-missing\n {\n displayName: \"Operation\",\n name: PROPERTIES.operation,\n type: \"options\",\n default: GENERIC_OPERATION.list,\n options: [\n {\n name: \"List\",\n value: GENERIC_OPERATION.list,\n },\n {\n name: \"Stats\",\n value: TAG_OPERATION.stats,\n },\n {\n name: \"Rename\",\n value: TAG_OPERATION.rename,\n },\n {\n name: \"Delete\",\n value: GENERIC_OPERATION.delete,\n },\n ],\n displayOptions: condition,\n },\n\n /**\n * Tags List\n * \n * GET /rest/v3/tags\n */\n ...tagsList.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [GENERIC_OPERATION.list],\n },\n },\n })),\n \n /**\n * Tags Rename\n * \n * PUT /rest/v3/tags\n */\n ...tagsRename.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [TAG_OPERATION.rename],\n },\n },\n })),\n \n /**\n * Tags Delete\n * \n * DELETE /rest/v3/tags\n */\n ...tagsDelete.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [GENERIC_OPERATION.delete],\n },\n },\n })),\n \n /**\n * Tags With Stats\n * \n * GET /rest/v3/tags/stats\n */\n ...tagsWithStats.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [TAG_OPERATION.stats],\n },\n },\n })),\n];\n","import { type INodeProperties } from \"n8n-workflow\";\nimport { domainResourceLocator } from \"../properties/domain.properties\";\nimport { dateRange } from \"./date.properties\";\nimport { paginationFields } from \"./pagination.properties\";\n\n// Visit resource operation: Get Global Visits\nexport const getGlobalVisits: INodeProperties[] = [];\n\n// Visit resource operation: Get Short URL Visits\nexport const getShortUrlVisits: INodeProperties[] = [\n {\n displayName: \"Short Code\",\n name: \"shortCode\",\n type: \"string\",\n required: true,\n default: \"\",\n hint: \"The short code for the short URL\",\n },\n paginationFields.allPages,\n paginationFields.page,\n {\n ...paginationFields.itemsPerPage,\n default: 0,\n typeOptions: {\n minValue: 0,\n },\n hint: \"Number of items per page (0 for all)\",\n },\n {\n displayName: \"Options\",\n name: \"options\",\n type: \"collection\",\n placeholder: \"Add Option\",\n default: {},\n options: [\n {\n ...domainResourceLocator,\n hint: \"The domain in which the short code should be searched for\",\n },\n ...dateRange,\n\n {\n displayName: \"Exclude Bots\",\n name: \"excludeBots\",\n type: \"boolean\",\n default: false,\n hint: \"Exclude visits from potential bots\",\n },\n ],\n },\n];\n\n// Visit resource operation: Delete Short URL Visits\nexport const deleteShortUrlVisits: INodeProperties[] = [\n {\n ...domainResourceLocator,\n hint: \"The domain in which the short code should be searched for\",\n },\n {\n displayName: \"Short Code\",\n name: \"shortCode\",\n type: \"string\",\n required: true,\n default: \"\",\n hint: \"The short code for the short URL\",\n },\n];\n\n// Visit resource operation: Get Tag Visits\nexport const getTagVisits: INodeProperties[] = [\n {\n displayName: \"Tag\",\n name: \"tag\",\n type: \"string\",\n required: true,\n default: \"\",\n hint: \"Tag to get visits for\",\n },\n paginationFields.allPages,\n paginationFields.page,\n {\n ...paginationFields.itemsPerPage,\n default: 0,\n typeOptions: {\n minValue: 0,\n },\n hint: \"Number of items per page (0 for all)\",\n },\n {\n displayName: \"Options\",\n name: \"options\",\n type: \"collection\",\n placeholder: \"Add Option\",\n default: {},\n options: [\n ...dateRange,\n {\n displayName: \"Exclude Bots\",\n name: \"excludeBots\",\n type: \"boolean\",\n default: false,\n hint: \"Exclude visits from potential bots\",\n },\n ],\n },\n];\n\n// Visit resource operation: Get Domain Visits\nexport const getDomainVisits: INodeProperties[] = [\n {\n ...domainResourceLocator,\n hint: \"Domain to get visits for\",\n required: true,\n },\n paginationFields.allPages,\n paginationFields.page,\n {\n ...paginationFields.itemsPerPage,\n default: 0,\n typeOptions: {\n minValue: 0,\n },\n hint: \"Number of items per page (0 for all)\",\n },\n {\n displayName: \"Options\",\n name: \"options\",\n type: \"collection\",\n placeholder: \"Add Option\",\n default: {},\n options: [\n ...dateRange,\n {\n displayName: \"Exclude Bots\",\n name: \"excludeBots\",\n type: \"boolean\",\n default: false,\n hint: \"Exclude visits from potential bots\",\n },\n ],\n },\n];\n\n// Visit resource operation: Get Orphan Visits\nexport const getOrphanVisits: INodeProperties[] = [\n paginationFields.allPages,\n paginationFields.page,\n {\n ...paginationFields.itemsPerPage,\n default: 0,\n typeOptions: {\n minValue: 0,\n },\n hint: \"Number of items per page (0 for all)\",\n },\n {\n displayName: \"Options\",\n name: \"options\",\n type: \"collection\",\n placeholder: \"Add Option\",\n default: {},\n options: [\n {\n displayName: \"Type\",\n name: \"type\",\n type: \"options\",\n options: [\n { name: 'Invalid Short URL', value: \"invalid_short_url\" },\n { name: \"Base URL\", value: \"base_url\" },\n { name: \"Regular 404\", value: \"regular_404\" },\n ],\n default: \"\",\n hint: \"Type of orphan visit to return (optional)\",\n },\n {\n displayName: \"Exclude Bots\",\n name: \"excludeBots\",\n type: \"boolean\",\n default: false,\n hint: \"Exclude visits from potential bots\",\n },\n ...dateRange,\n ],\n },\n];\n\n// Visit resource operation: Delete Orphan Visits\nexport const deleteOrphanVisits: INodeProperties[] = [];\n\n// Visit resource operation: Get Non-Orphan Visits\nexport const getNonOrphanVisits: INodeProperties[] = [\n paginationFields.allPages,\n paginationFields.page,\n {\n ...paginationFields.itemsPerPage,\n default: 0,\n typeOptions: {\n minValue: 0,\n },\n hint: \"Number of items per page (0 for all)\",\n },\n {\n displayName: \"Options\",\n name: \"options\",\n type: \"collection\",\n placeholder: \"Add Option\",\n default: {},\n options: [\n {\n displayName: \"Exclude Bots\",\n name: \"excludeBots\",\n type: \"boolean\",\n default: false,\n hint: \"Exclude visits from potential bots\",\n },\n ...dateRange,\n ],\n },\n];\n","import { type INodeProperties } from \"n8n-workflow\";\nimport { PROPERTIES, RESOURCE, VISIT_OPERATION } from \"../constants\";\nimport {\n getGlobalVisits,\n getShortUrlVisits,\n deleteShortUrlVisits,\n getTagVisits,\n getDomainVisits,\n getOrphanVisits,\n deleteOrphanVisits,\n getNonOrphanVisits,\n} from \"../properties/visit.properties\";\n\nexport const condition: INodeProperties[\"displayOptions\"] = {\n show: {\n [PROPERTIES.resource]: [RESOURCE.visits],\n },\n};\n\nexport const visitsOperations: INodeProperties[] = [\n {\n displayName: \"Operation\",\n name: PROPERTIES.operation,\n type: \"options\",\n options: [\n { name: \"Delete Orphan Visits\", value: VISIT_OPERATION.deleteOrphanVisits },\n { name: \"Delete Short URL Visits\", value: VISIT_OPERATION.deleteShortUrlVisits },\n { name: \"Get Domain Visits\", value: VISIT_OPERATION.getDomainVisits },\n { name: \"Get Global Visits\", value: VISIT_OPERATION.getGlobalVisits },\n { name: \"Get Non-Orphan Visits\", value: VISIT_OPERATION.getNonOrphanVisits },\n { name: \"Get Orphan Visits\", value: VISIT_OPERATION.getOrphanVisits },\n { name: \"Get Short URL Visits\", value: VISIT_OPERATION.getShortUrlVisits },\n { name: \"Get Tag Visits\", value: VISIT_OPERATION.getTagVisits },\n ],\n default: \"getGlobalVisits\",\n displayOptions: condition,\n },\n\n /**\n * Get Global Visits\n * \n * GET /rest/v3/visits\n */\n ...getGlobalVisits.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [VISIT_OPERATION.getGlobalVisits],\n },\n },\n })),\n\n /**\n * Get Short URL Visits\n * \n * GET /rest/v3/short-urls/{shortCode}/visits\n */\n ...getShortUrlVisits.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [VISIT_OPERATION.getShortUrlVisits],\n },\n },\n })),\n\n /**\n * Delete Short URL Visits\n * \n * DELETE /rest/v3/short-urls/{shortCode}/visits\n */\n ...deleteShortUrlVisits.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [VISIT_OPERATION.deleteShortUrlVisits],\n },\n },\n })),\n\n /**\n * Get Tag Visits\n * \n * GET /rest/v3/tags/{tag}/visits\n */\n ...getTagVisits.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [VISIT_OPERATION.getTagVisits],\n },\n },\n })),\n\n /**\n * Get Domain Visits\n * \n * GET /rest/v3/domains/{domain}/visits\n */\n ...getDomainVisits.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [VISIT_OPERATION.getDomainVisits],\n },\n },\n })),\n\n /**\n * Get Orphan Visits\n * \n * GET /rest/v3/visits/orphan\n */\n ...getOrphanVisits.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [VISIT_OPERATION.getOrphanVisits],\n },\n },\n })),\n\n /**\n * Delete Orphan Visits\n * \n * DELETE /rest/v3/visits/orphan\n */\n ...deleteOrphanVisits.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [VISIT_OPERATION.deleteOrphanVisits],\n },\n },\n })),\n\n /**\n * Get Non-Orphan Visits\n * \n * GET /rest/v3/visits/non-orphan\n */\n ...getNonOrphanVisits.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [VISIT_OPERATION.getNonOrphanVisits],\n },\n },\n })),\n];\n","import { INodeProperties } from \"n8n-workflow\";\nimport { domainResourceLocator } from \"./domain.properties\";\n\n// Domain resource operation: List Domains\nexport const listDomains: INodeProperties[] = [];\n\n// Domain resource operation: Set Domain Redirects\nexport const setDomainRedirects: INodeProperties[] = [\n {\n displayName: 'Options',\n name: 'options',\n type: 'collection',\n placeholder: 'Add Option',\n default: {},\n options: [\n {\n ...domainResourceLocator,\n name: 'domain',\n hint: \"The domain's authority for which you want to set redirects\",\n },\n {\n displayName: \"Base URL Redirect\",\n name: \"baseUrlRedirect\",\n type: \"string\",\n default: \"\",\n hint: \"URL to redirect to when a user hits the domain's base URL\",\n },\n {\n displayName: \"Regular 404 Redirect\",\n name: \"regular404Redirect\",\n type: \"string\",\n default: \"\",\n hint: \"URL to redirect to when a user hits a not found URL other than an invalid short URL\",\n },\n {\n displayName: \"Invalid Short URL Redirect\",\n name: \"invalidShortUrlRedirect\",\n type: \"string\",\n default: \"\",\n hint: \"URL to redirect to when a user hits an invalid short URL\",\n },\n ],\n },\n];\n","import { type INodeProperties } from \"n8n-workflow\";\nimport {\n DOMAIN_OPERATION,\n GENERIC_OPERATION,\n PROPERTIES,\n RESOURCE,\n} from \"../constants\";\nimport { listDomains, setDomainRedirects } from \"../properties/domains.properties\";\n\nexport const condition: INodeProperties[\"displayOptions\"] = {\n show: {\n [PROPERTIES.resource]: [RESOURCE.domains],\n },\n};\n\nexport const operation: INodeProperties[] = [\n // eslint-disable-next-line n8n-nodes-base/node-param-default-missing\n {\n displayName: \"Operation\",\n name: PROPERTIES.operation,\n type: \"options\",\n default: GENERIC_OPERATION.list,\n options: [\n {\n name: \"List\",\n value: GENERIC_OPERATION.list,\n },\n {\n name: \"Set Redirects\",\n value: DOMAIN_OPERATION.setRedirects,\n },\n ],\n displayOptions: condition,\n },\n\n /**\n * List Domains\n * \n * GET /rest/v3/domains\n */\n ...listDomains.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [GENERIC_OPERATION.list],\n },\n },\n })),\n \n /**\n * Set Domain Redirects\n * \n * PATCH /rest/v3/domains/redirects\n */\n ...setDomainRedirects.map((property) => ({\n ...property,\n displayOptions: {\n ...condition,\n ...property.displayOptions,\n show: {\n ...condition.show,\n ...property.displayOptions?.show,\n [PROPERTIES.operation]: [DOMAIN_OPERATION.setRedirects],\n },\n },\n })),\n];\n","import { IHookFunctions, IExecuteFunctions, ILoadOptionsFunctions, IHttpRequestMethods, IDataObject, IRequestOptions } from \"n8n-workflow\";\nimport { SHLINK_CREDENTIAL } from \"../../shared/constants\";\n\nexport async function apiRequest(\n\tthis: IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions,\n\tmethod: IHttpRequestMethods,\n\tendpoint: string,\n\tbody: object,\n\tquery?: IDataObject,\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Promise<any> {\n\tquery = query || {};\n\tbody = body || {};\n\n\tconst baseUrl = (await this.getCredentials(SHLINK_CREDENTIAL, 0)).apiBaseUrl as string;\n\n\tconst options: IRequestOptions = {\n\t\tmethod,\n\t\tbody,\n\t\tqs: query,\n\t\turi: `${baseUrl.replace(/\\/$/, '')}/${endpoint}`,\n\t\tjson: true,\n\t};\n\n\tif (method === 'GET') {\n\t\tdelete options.body;\n\t}\n \n\treturn await this.helpers.requestWithAuthentication.call(this, SHLINK_CREDENTIAL, options);\n}\n","import { IExecuteFunctions, IDataObject } from 'n8n-workflow';\n\n/**\n * Gets the request parameters for the operation, including those in\n * collections.\n */\nexport function getRequestParameters(this: IExecuteFunctions): IDataObject {\n\tconst properties = this.getNode().parameters;\n\tconst requestParameters: IDataObject = {};\n\n\t// Get top-level properties\n\tfor (const propertyName of Object.keys(properties)) {\n\t\tif (propertyName !== 'options') {\n\t\t\trequestParameters[propertyName] = this.getNodeParameter(propertyName, 0);\n\t\t}\n\t}\n\n\t// Get properties from 'options' collection\n\tconst options = this.getNodeParameter('options', 0, {}) as unknown as IDataObject;\n\tfor (const optionName of Object.keys(options)) {\n\t\trequestParameters[optionName] = options[optionName];\n\t}\n\n\treturn requestParameters;\n}\n","import {\n IExecuteFunctions,\n INodeExecutionData,\n NodeExecutionWithMetadata,\n} from \"n8n-workflow\";\nimport { getRequestParameters } from \"../../shared/executions/utils\";\nimport { apiRequest } from \"../../shared/generic-functions\";\nimport { GENERIC_OPERATION } from \"../constants\";\n\nexport async function executeShortUrl(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][] | NodeExecutionWithMetadata[][] | null> {\n const operation = this.getNodeParameter(\"operation\", 0) as string;\n\n switch (operation) {\n case GENERIC_OPERATION.list:\n return executeShortUrlList.call(this);\n case GENERIC_OPERATION.create:\n return executeShortUrlCreate.call(this);\n case GENERIC_OPERATION.get:\n return executeShortUrlGet.call(this);\n case GENERIC_OPERATION.delete:\n return executeShortUrlDelete.call(this);\n case GENERIC_OPERATION.update:\n return executeShortUrlUpdate.call(this);\n default:\n return Promise.resolve(null);\n }\n}\n\nasync function executeShortUrlList(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const qs = getRequestParameters.call(this);\n const response = await apiRequest.call(\n this,\n \"GET\",\n \"/rest/v3/short-urls\",\n {},\n qs\n );\n return [this.helpers.returnJsonArray(response.shortUrls.data)];\n}\n\nasync function executeShortUrlCreate(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const body = getRequestParameters.call(this);\n const response = await apiRequest.call(\n this,\n \"POST\",\n \"/rest/v3/short-urls\",\n body\n );\n return [this.helpers.returnJsonArray([response])];\n}\n\nasync function executeShortUrlGet(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const shortCode = this.getNodeParameter(\"shortCode\", 0) as string;\n const qs = {\n domain: this.getNodeParameter(\"domain\", 0) as string | undefined,\n };\n const response = await apiRequest.call(\n this,\n \"GET\",\n `/rest/v3/short-urls/${shortCode}`,\n {},\n qs\n );\n return [this.helpers.returnJsonArray([response])];\n}\n\nasync function executeShortUrlDelete(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const shortCode = this.getNodeParameter(\"shortCode\", 0) as string;\n const qs = {\n domain: this.getNodeParameter(\"domain\", 0) as string | undefined,\n };\n const response = await apiRequest.call(\n this,\n \"DELETE\",\n `/rest/v3/short-urls/${shortCode}`,\n {},\n qs\n );\n return [this.helpers.returnJsonArray([response])];\n}\n\nasync function executeShortUrlUpdate(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const shortCode = this.getNodeParameter(\"shortCode\", 0) as string;\n const body = getRequestParameters.call(this);\n const qs = {\n domain: this.getNodeParameter(\"domain\", 0) as string | undefined,\n };\n const response = await apiRequest.call(\n this,\n \"PATCH\",\n `/rest/v3/short-urls/${shortCode}`,\n body,\n qs\n );\n return [this.helpers.returnJsonArray([response])];\n}\n","import {\n IExecuteFunctions,\n INodeExecutionData,\n NodeExecutionWithMetadata,\n} from \"n8n-workflow\";\nimport { getRequestParameters } from \"../../shared/executions/utils\";\nimport { apiRequest } from \"../../shared/generic-functions\";\nimport { GENERIC_OPERATION, TAG_OPERATION } from \"../constants\";\n\nexport async function executeTags(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][] | NodeExecutionWithMetadata[][] | null> {\n const operation = this.getNodeParameter(\"operation\", 0) as string;\n\n switch (operation) {\n case GENERIC_OPERATION.list:\n return executeTagsList.call(this);\n case TAG_OPERATION.stats:\n return executeTagsStats.call(this);\n case TAG_OPERATION.rename:\n return executeTagsRename.call(this);\n case GENERIC_OPERATION.delete:\n return executeTagsDelete.call(this);\n default:\n return Promise.resolve(null);\n }\n}\n\nasync function executeTagsList(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const qs = getRequestParameters.call(this);\n const response = await apiRequest.call(this, \"GET\", \"/rest/v3/tags\", {}, qs);\n return [this.helpers.returnJsonArray(response.tags.data.map((tag: string) => ({ tag })))];\n}\n\nasync function executeTagsStats(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const qs = getRequestParameters.call(this);\n const response = await apiRequest.call(\n this,\n \"GET\",\n \"/rest/v3/tags/stats\",\n {},\n qs\n );\n return [this.helpers.returnJsonArray(response.tags.data)];\n}\n\nasync function executeTagsRename(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const body = {\n oldName: this.getNodeParameter(\"oldName\", 0) as string,\n newName: this.getNodeParameter(\"newName\", 0) as string,\n };\n const response = await apiRequest.call(this, \"PUT\", \"/rest/v3/tags\", body);\n return [this.helpers.returnJsonArray([response])];\n}\n\nasync function executeTagsDelete(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const qs = {\n tags: this.getNodeParameter(\"tags\", 0) as string[],\n };\n const response = await apiRequest.call(\n this,\n \"DELETE\",\n \"/rest/v3/tags\",\n {},\n qs\n );\n return [this.helpers.returnJsonArray([response])];\n}\n","import {\n IDataObject,\n IExecuteFunctions,\n INodeExecutionData,\n NodeExecutionWithMetadata,\n} from \"n8n-workflow\";\nimport { getRequestParameters } from \"../../shared/executions/utils\";\nimport { apiRequest } from \"../../shared/generic-functions\";\nimport { VISIT_OPERATION } from \"../constants\";\n\nexport async function executeVisits(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][] | NodeExecutionWithMetadata[][] | null> {\n const operation = this.getNodeParameter(\"operation\", 0) as string;\n\n switch (operation) {\n case VISIT_OPERATION.getGlobalVisits:\n return executeGetGlobalVisits.call(this);\n case VISIT_OPERATION.getShortUrlVisits:\n return executeGetShortUrlVisits.call(this);\n case VISIT_OPERATION.deleteShortUrlVisits:\n return executeDeleteShortUrlVisits.call(this);\n case VISIT_OPERATION.getTagVisits:\n return executeGetTagVisits.call(this);\n case VISIT_OPERATION.getDomainVisits:\n return executeGetDomainVisits.call(this);\n case VISIT_OPERATION.getOrphanVisits:\n return executeGetOrphanVisits.call(this);\n case VISIT_OPERATION.deleteOrphanVisits:\n return executeDeleteOrphanVisits.call(this);\n case VISIT_OPERATION.getNonOrphanVisits:\n return executeGetNonOrphanVisits.call(this);\n default:\n return Promise.resolve(null);\n }\n}\n\nasync function executeGetGlobalVisits(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const qs = getRequestParameters.call(this);\n const response = await apiRequest.call(\n this,\n \"GET\",\n \"/rest/v3/visits\",\n {},\n qs\n );\n return [this.helpers.returnJsonArray(response.visits.data)];\n}\n\nasync function executeGetShortUrlVisits(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const shortCode = this.getNodeParameter(\"shortCode\", 0) as string;\n const qs = getRequestParameters.call(this);\n delete qs.shortCode;\n const response = await apiRequest.call(\n this,\n \"GET\",\n `/rest/v3/short-urls/${shortCode}/visits`,\n {},\n qs\n );\n return [this.helpers.returnJsonArray(response.visits.data)];\n}\n\nasync function executeDeleteShortUrlVisits(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const shortCode = this.getNodeParameter(\"shortCode\", 0) as string;\n const qs = {\n domain: this.getNodeParameter(\"domain\", 0) as string | undefined,\n };\n const response = await apiRequest.call(\n this,\n \"DELETE\",\n `/rest/v3/short-urls/${shortCode}/visits`,\n {},\n qs\n );\n return [this.helpers.returnJsonArray([response])];\n}\n\nasync function executeGetTagVisits(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const options = this.getNodeParameter(\n \"options\",\n 0,\n {}\n ) as unknown as IDataObject;\n const tag = options.tag as string;\n const qs = getRequestParameters.call(this);\n delete qs.tag;\n const response = await apiRequest.call(\n this,\n \"GET\",\n `/rest/v3/tags/${tag}/visits`,\n {},\n qs\n );\n return [this.helpers.returnJsonArray(response.visits.data)];\n}\n\nasync function executeGetDomainVisits(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const domain = this.getNodeParameter(\"domain\", 0) as string;\n const qs = getRequestParameters.call(this);\n delete qs.domain;\n const response = await apiRequest.call(\n this,\n \"GET\",\n `/rest/v3/domains/${domain}/visits`,\n {},\n qs\n );\n return [this.helpers.returnJsonArray(response.visits.data)];\n}\n\nasync function executeGetOrphanVisits(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const qs = getRequestParameters.call(this);\n const response = await apiRequest.call(\n this,\n \"GET\",\n \"/rest/v3/visits/orphan\",\n {},\n qs\n );\n return [this.helpers.returnJsonArray(response.visits.data)];\n}\n\nasync function executeDeleteOrphanVisits(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const response = await apiRequest.call(\n this,\n \"DELETE\",\n \"/rest/v3/visits/orphan\",\n {}\n );\n return [this.helpers.returnJsonArray([response])];\n}\n\nasync function executeGetNonOrphanVisits(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const qs = getRequestParameters.call(this);\n const response = await apiRequest.call(\n this,\n \"GET\",\n \"/rest/v3/visits/non-orphan\",\n {},\n qs\n );\n return [this.helpers.returnJsonArray(response.visits.data)];\n}\n","import {\n IExecuteFunctions,\n INodeExecutionData,\n NodeExecutionWithMetadata,\n} from \"n8n-workflow\";\nimport { getRequestParameters } from \"../../shared/executions/utils\";\nimport { apiRequest } from \"../../shared/generic-functions\";\nimport { DOMAIN_OPERATION, GENERIC_OPERATION } from \"../constants\";\n\nexport async function executeDomains(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][] | NodeExecutionWithMetadata[][] | null> {\n const operation = this.getNodeParameter(\"operation\", 0) as string;\n\n switch (operation) {\n case GENERIC_OPERATION.list:\n return executeDomainsList.call(this);\n case DOMAIN_OPERATION.setRedirects:\n return executeDomainsSetRedirects.call(this);\n default:\n return Promise.resolve(null);\n }\n}\n\nasync function executeDomainsList(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const response = await apiRequest.call(\n this,\n \"GET\",\n \"/rest/v3/domains\",\n {},\n {}\n );\n return [this.helpers.returnJsonArray(response.domains.data)];\n}\n\nasync function executeDomainsSetRedirects(\n this: IExecuteFunctions\n): Promise<INodeExecutionData[][]> {\n const body = getRequestParameters.call(this);\n const response = await apiRequest.call(\n this,\n \"PATCH\",\n \"/rest/v3/domains/redirects\",\n body\n );\n return [this.helpers.returnJsonArray(response)];\n}\n","import {\n IExecuteFunctions,\n ILoadOptionsFunctions,\n INodeExecutionData,\n INodeListSearchResult,\n NodeConnectionType,\n NodeExecutionWithMetadata,\n type INodeType,\n type INodeTypeDescription,\n} from \"n8n-workflow\";\nimport { SHLINK_CREDENTIAL } from \"../../shared/constants\";\nimport { PROPERTIES, RESOURCE } from \"./constants\";\nimport { operation as shortUrlOperations } from \"./operations/short-url.operations\";\nimport { operation as tagsOperations } from \"./operations/tags.operations\";\nimport { visitsOperations } from \"./operations/visit.operations\";\nimport { operation as domainsOperations } from \"./operations/domains.operations\";\nimport { apiRequest } from \"../shared/generic-functions\";\nimport { executeShortUrl } from \"./execute/short-url.execute\";\nimport { executeTags } from './execute/tags.execute';\nimport { executeVisits } from './execute/visit.execute';\nimport { executeDomains } from './execute/domains.execute';\n\nexport class Shlink implements INodeType {\n description: INodeTypeDescription = {\n displayName: \"Shlink\",\n version: 1,\n defaults: {\n name: \"Shorten URL\",\n },\n inputs: [NodeConnectionType.Main],\n outputs: [NodeConnectionType.Main],\n credentials: [\n {\n name: SHLINK_CREDENTIAL,\n required: true,\n },\n ],\n properties: [\n // eslint-disable-next-line n8n-nodes-base/node-param-default-missing\n {\n displayName: \"Resources\",\n name: PROPERTIES.resource,\n type: \"options\",\n default: RESOURCE.shortUrl,\n options: [\n {\n name: \"Short Url\",\n value: RESOURCE.shortUrl,\n },\n // Redirect Rules seems like have incomplete swagger doc.\n // {\n // name: \"Redirect Rules\",\n // value: RESOURCE.redirectRules,\n // },\n {\n name: \"Tags\",\n value: RESOURCE.tags,\n },\n {\n name: \"Visits\",\n value: RESOURCE.visits,\n },\n {\n name: \"Domains\",\n value: RESOURCE.domains,\n },\n ],\n },\n\n // Short URL Operations\n ...shortUrlOperations,\n\n // Tags Operations\n ...tagsOperations,\n\n // Visits Operations\n ...visitsOperations,\n\n // Domains Operations\n ...domainsOperations,\n ],\n name: 'shlink',\n group: [\"Utility\", \"Analytics\", \"Miscellaneous\"],\n description: \"Shlink Integration Node\",\n icon: {\n light: \"file:icon/shlink-light.svg\",\n dark: \"file:icon/shlink-dark.svg\",\n },\n };\n\n async execute(\n this: IExecuteFunctions\n ): Promise<INodeExecutionData[][] | NodeExecutionWithMetadata[][] | null> {\n const resource = this.getNodeParameter('resource', 0) as string;\n\n switch (resource) {\n case RESOURCE.shortUrl:\n return executeShortUrl.call(this);\n case RESOURCE.tags:\n return executeTags.call(this);\n case RESOURCE.visits:\n return executeVisits.call(this);\n case RESOURCE.domains:\n return executeDomains.call(this);\n default:\n return Promise.resolve(null);\n }\n }\n\n methods = {\n listSearch: {\n async searchDomains(\n this: ILoadOptionsFunctions,\n query?: string\n ): Promise<INodeListSearchResult> {\n const searchResults = await apiRequest.call(\n this,\n \"GET\",\n \"rest/v3/domains\",\n {},\n {}\n );\n\n return {\n results: searchResults.domains.data\n .map((d: { domain: string }) => ({\n name: d.domain,\n value: d.domain,\n }))\n .filter(\n (d: { name: string }) =>\n query === undefined ||\n d.name.toLowerCase().includes(query?.toLowerCase())\n ),\n };\n },\n },\n };\n}\n"],"names":["PROPERTIES","RESOURCE","GENERIC_OPERATION","TAG_OPERATION","VISIT_OPERATION","DOMAIN_OPERATION","domainResourceLocator","paginationFields","pagination","dateFields","dateRange","shortCodeAndDomainFields","shortUrlGet","shortUrlDelete","shortUrlCreate","shortUrlUpdate","shortUrlList","condition","operation","property","_a","tagNameField","tagsWithStats","tagsList","tagsRename","tagsDelete","getGlobalVisits","getShortUrlVisits","deleteShortUrlVisits","getTagVisits","getDomainVisits","getOrphanVisits","deleteOrphanVisits","getNonOrphanVisits","visitsOperations","listDomains","setDomainRedirects","apiRequest","method","endpoint","body","query","baseUrl","SHLINK_CREDENTIAL","options","getRequestParameters","properties","requestParameters","propertyName","optionName","executeShortUrl","executeShortUrlList","executeShortUrlCreate","executeShortUrlGet","executeShortUrlDelete","executeShortUrlUpdate","qs","response","shortCode","executeTags","executeTagsList","executeTagsStats","executeTagsRename","executeTagsDelete","tag","executeVisits","executeGetGlobalVisits","executeGetShortUrlVisits","executeDeleteShortUrlVisits","executeGetTagVisits","executeGetDomainVisits","executeGetOrphanVisits","executeDeleteOrphanVisits","executeGetNonOrphanVisits","domain","executeDomains","executeDomainsList","executeDomainsSetRedirects","Shlink","NodeConnectionType","shortUrlOperations","tagsOperations","domainsOperations","d"],"mappings":"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AM,aACN,YAAa,aACb,QAAS,CAAA,EACT,QAAS,CACP,CACE,YAAa,WACb,KAAM,UACN,KAAM,SACN,QAAS,GACT,KAAM,kDAAA,EAER,CACE,YAAa,QACb,KAAM,QACN,KAAM,SACN,QAAS,GACT,KAAM,sCAAA,EAER,CACE,YAAa,OACb,KAAM,OACN,KAAM,SACN,YAAa,CACX,eAAgB,EAAA,EAElB,QAAS,CAAA,EACT,KAAM,0CAAA,EAER,CACE,YAAa,cACb,KAAM,aACN,KAAM,WACN,QAAS,GACT,KAAM,wEAAA,EAER,CACE,YAAa,cACb,KAAM,aACN,KAAM,WACN,QAAS,GACT,KAAM,yEAAA,EAER,CACE,YAAa,YACb,KAAM,YACN,KAAM,UACN,QAAS,GACT,KAAM,sEAAA,EAER,CACE,YAAa,gBACb,KAAM,eACN,KAAM,UACN,QAAS,GACT,KAAM,kFAAA,CACR,CACF,CAEJ,EAEaC,EAAkC,CAC7C,GAAGR,EACH,CACE,YAAa,UACb,KAAM,UACN,KAAM,aACN,YAAa,aACb,QAAS,CAAA,EACT,QAAS,CACP,CACE,YAAa,cACb,KAAM,aACN,KAAM,SACN,QAAS,GACT,KAAM,yFAAA,EAER,CACE,YAAa,OACb,KAAM,OACN,KAAM,SACN,YAAa,CACX,eAAgB,EAAA,EAElB,QAAS,GACT,KAAM,+HAAA,EAER,CACE,YAAa,YACb,KAAM,WACN,KAAM,UACN,QAAS,CACP,CACE,KAAM,MACN,MAAO,KAAA,EAET,CACE,KAAM,MACN,MAAO,KAAA,CACT,EAEF,QAAS,MACT,KAAM,iMAAA,EAER,CACE,YAAa,WACb,KAAM,UACN,KAAM,UAEN,QAAS,CACP,CACE,KAAM,iBACN,MAAO,cAAA,EAET,CACE,KAAM,iBACN,MAAO,aAAA,EAET,CACE,KAAM,mBACN,MAAO,gBAAA,EAET,CACE,KAAM,mBACN,MAAO,eAAA,EAET,CACE,KAAM,iCACN,MAAO,kBAAA,EAET,CACE,KAAM,iCACN,MAAO,iBAAA,EAET,CACE,KAAM,cACN,MAAO,YAAA,EAET,CACE,KAAM,cACN,MAAO,WAAA,EAET,CACE,KAAM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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<svg width="512pt" height="512pt" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g fill="#FFFFFF">
|
|
3
|
+
<path d=" M 23.71 85.08 C 17.22 49.81 49.44 14.86 85.08 18.12 C 118.83 19.21 145.72 53.33 139.45 86.37 C 155.64 102.30 171.32 118.83 187.87 134.36 C 198.32 111.73 208.84 89.12 219.57 66.62 C 226.05 53.84 243.47 48.74 255.73 56.27 C 263.76 62.10 270.34 69.69 277.25 76.75 C 286.28 86.61 285.72 102.89 276.31 112.31 C 223.38 165.37 170.38 218.37 117.35 271.34 C 107.72 280.99 91.01 281.25 81.11 271.86 C 74.39 264.94 66.82 258.69 61.24 250.77 C 53.72 238.52 58.85 221.07 71.64 214.62 C 94.11 203.87 116.72 193.38 139.33 182.91 C 123.81 166.36 107.30 150.68 91.37 134.49 C 60.20 140.28 27.37 116.78 23.71 85.08 Z"/>
|
|
4
|
+
<path d=" M 205.21 201.23 C 225.32 181.36 260.88 181.11 281.14 200.86 C 299.25 218.75 317.37 236.65 335.10 254.93 C 356.73 278.01 352.01 318.70 326.03 336.56 C 320.07 330.47 313.73 324.65 308.12 318.28 C 323.86 309.39 328.76 286.18 316.63 272.39 C 301.73 256.95 286.30 242.03 271.24 226.75 C 264.49 219.65 256.80 212.00 246.37 211.52 C 224.65 208.64 205.52 233.36 214.49 253.58 C 221.09 266.81 234.22 275.12 243.62 286.24 C 240.43 295.96 238.09 306.13 238.29 316.46 C 225.55 304.29 213.16 291.73 200.89 279.09 C 180.97 257.57 183.10 220.45 205.21 201.23 Z"/>
|
|
5
|
+
<path d=" M 273.90 352.07 C 252.28 328.99 256.98 288.31 282.96 270.46 C 288.93 276.54 295.26 282.36 300.88 288.72 C 285.14 297.62 280.23 320.82 292.38 334.61 C 307.27 350.05 322.70 364.96 337.75 380.25 C 344.51 387.35 352.20 395.00 362.64 395.48 C 384.35 398.37 403.49 373.64 394.51 353.42 C 387.92 340.18 374.78 331.88 365.38 320.76 C 368.56 311.04 370.91 300.86 370.71 290.54 C 383.45 302.70 395.84 315.27 408.11 327.91 C 428.03 349.43 425.90 386.55 403.78 405.77 C 383.68 425.64 348.13 425.89 327.86 406.14 C 309.75 388.25 291.60 370.37 273.90 352.07 Z"/>
|
|
6
|
+
<path d=" M 422.11 403.83 C 431.96 394.07 441.60 384.06 451.66 374.51 C 460.90 383.74 471.89 392.70 474.89 406.11 C 480.16 429.97 484.08 454.13 488.76 478.12 C 490.00 483.41 484.47 488.29 479.35 486.63 C 454.66 481.52 429.55 478.12 405.14 471.84 C 393.17 467.97 385.20 457.75 376.55 449.27 C 386.39 439.49 396.13 429.60 406.06 419.91 C 416.37 433.45 435.74 414.00 422.11 403.83 Z"/>
|
|
7
|
+
</g>
|
|
8
|
+
</svg>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<svg width="512pt" height="512pt" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g fill="#2078CF">
|
|
3
|
+
<path d=" M 23.71 85.08 C 17.22 49.81 49.44 14.86 85.08 18.12 C 118.83 19.21 145.72 53.33 139.45 86.37 C 155.64 102.30 171.32 118.83 187.87 134.36 C 198.32 111.73 208.84 89.12 219.57 66.62 C 226.05 53.84 243.47 48.74 255.73 56.27 C 263.76 62.10 270.34 69.69 277.25 76.75 C 286.28 86.61 285.72 102.89 276.31 112.31 C 223.38 165.37 170.38 218.37 117.35 271.34 C 107.72 280.99 91.01 281.25 81.11 271.86 C 74.39 264.94 66.82 258.69 61.24 250.77 C 53.72 238.52 58.85 221.07 71.64 214.62 C 94.11 203.87 116.72 193.38 139.33 182.91 C 123.81 166.36 107.30 150.68 91.37 134.49 C 60.20 140.28 27.37 116.78 23.71 85.08 Z"/>
|
|
4
|
+
<path d=" M 205.21 201.23 C 225.32 181.36 260.88 181.11 281.14 200.86 C 299.25 218.75 317.37 236.65 335.10 254.93 C 356.73 278.01 352.01 318.70 326.03 336.56 C 320.07 330.47 313.73 324.65 308.12 318.28 C 323.86 309.39 328.76 286.18 316.63 272.39 C 301.73 256.95 286.30 242.03 271.24 226.75 C 264.49 219.65 256.80 212.00 246.37 211.52 C 224.65 208.64 205.52 233.36 214.49 253.58 C 221.09 266.81 234.22 275.12 243.62 286.24 C 240.43 295.96 238.09 306.13 238.29 316.46 C 225.55 304.29 213.16 291.73 200.89 279.09 C 180.97 257.57 183.10 220.45 205.21 201.23 Z"/>
|
|
5
|
+
<path d=" M 273.90 352.07 C 252.28 328.99 256.98 288.31 282.96 270.46 C 288.93 276.54 295.26 282.36 300.88 288.72 C 285.14 297.62 280.23 320.82 292.38 334.61 C 307.27 350.05 322.70 364.96 337.75 380.25 C 344.51 387.35 352.20 395.00 362.64 395.48 C 384.35 398.37 403.49 373.64 394.51 353.42 C 387.92 340.18 374.78 331.88 365.38 320.76 C 368.56 311.04 370.91 300.86 370.71 290.54 C 383.45 302.70 395.84 315.27 408.11 327.91 C 428.03 349.43 425.90 386.55 403.78 405.77 C 383.68 425.64 348.13 425.89 327.86 406.14 C 309.75 388.25 291.60 370.37 273.90 352.07 Z"/>
|
|
6
|
+
<path d=" M 422.11 403.83 C 431.96 394.07 441.60 384.06 451.66 374.51 C 460.90 383.74 471.89 392.70 474.89 406.11 C 480.16 429.97 484.08 454.13 488.76 478.12 C 490.00 483.41 484.47 488.29 479.35 486.63 C 454.66 481.52 429.55 478.12 405.14 471.84 C 393.17 467.97 385.20 457.75 376.55 449.27 C 386.39 439.49 396.13 429.60 406.06 419.91 C 416.37 433.45 435.74 414.00 422.11 403.83 Z"/>
|
|
7
|
+
</g>
|
|
8
|
+
</svg>
|
package/package.json
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@net.christianto/n8n-nodes-shlink",
|
|
3
|
+
"private": false,
|
|
4
|
+
"version": "0.0.0",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"n8n-community-node-package",
|
|
7
|
+
"shlink"
|
|
8
|
+
],
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Gunawan \"chez\" Christianto",
|
|
11
|
+
"url": "http://christianto.net"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "https://gitlab.com/net.christianto/n8n-nodes-shlink.git"
|
|
16
|
+
},
|
|
17
|
+
"homepage": "https://gitlab.com/net.christianto/n8n-nodes-shlink",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"scripts": {
|
|
20
|
+
"dev": "vite",
|
|
21
|
+
"build": "tsc && vite build",
|
|
22
|
+
"preview": "vite preview",
|
|
23
|
+
"lint": "eslint .",
|
|
24
|
+
"test": "vitest",
|
|
25
|
+
"test:coverage": "vitest run --coverage"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@eslint/js": "^9.32.0",
|
|
29
|
+
"@eslint/json": "^0.13.1",
|
|
30
|
+
"@eslint/markdown": "^7.1.0",
|
|
31
|
+
"@net.christianto/eslint-config": "^0.2.2",
|
|
32
|
+
"@types/luxon": "^3.6.2",
|
|
33
|
+
"@types/node": "^24.0.15",
|
|
34
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
35
|
+
"@vitest/ui": "3.2.4",
|
|
36
|
+
"eslint": "^9.32.0",
|
|
37
|
+
"eslint-config-prettier": "^10.1.8",
|
|
38
|
+
"eslint-formatter-gitlab": "^6.0.1",
|
|
39
|
+
"eslint-plugin-n": "^17.21.0",
|
|
40
|
+
"eslint-plugin-n8n-nodes-base": "^1.16.3",
|
|
41
|
+
"glob": "^11.0.3",
|
|
42
|
+
"globals": "^16.3.0",
|
|
43
|
+
"jiti": "^2.5.1",
|
|
44
|
+
"n8n-workflow": "*",
|
|
45
|
+
"typescript": "~5.8.3",
|
|
46
|
+
"typescript-eslint": "^8.38.0",
|
|
47
|
+
"vite": "^7.0.4",
|
|
48
|
+
"vite-plugin-static-copy": "^3.1.1",
|
|
49
|
+
"vitest": "^3.2.4"
|
|
50
|
+
},
|
|
51
|
+
"n8n": {
|
|
52
|
+
"n8nNodesApiVersion": 1,
|
|
53
|
+
"credentials": [
|
|
54
|
+
"dist/credentials/Shlink.credentials.js"
|
|
55
|
+
],
|
|
56
|
+
"nodes": [
|
|
57
|
+
"dist/nodes/Shlink/Shlink.node.js"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"files": [
|
|
61
|
+
"dist"
|
|
62
|
+
],
|
|
63
|
+
"pnpm": {
|
|
64
|
+
"peerDependencyRules": {
|
|
65
|
+
"ignoreMissing": [
|
|
66
|
+
"eslint-plugin-react"
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
"onlyBuiltDependencies": [
|
|
70
|
+
"eslint-plugin-n8n-nodes-base"
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
"packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be",
|
|
74
|
+
"publishConfig": {
|
|
75
|
+
"access": "public",
|
|
76
|
+
"provenance": false
|
|
77
|
+
}
|
|
78
|
+
}
|