n8n-nodes-saascity 0.0.0-stage → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +77 -2
- package/dist/credentials/SaasCityApi.credentials.d.ts +10 -0
- package/dist/credentials/SaasCityApi.credentials.js +39 -0
- package/dist/credentials/SaasCityApi.credentials.js.map +1 -0
- package/dist/nodes/SaasCity/SaasCity.node.d.ts +4 -0
- package/dist/nodes/SaasCity/SaasCity.node.js +58 -0
- package/dist/nodes/SaasCity/SaasCity.node.js.map +1 -0
- package/dist/nodes/SaasCity/SaasCity.node.json +14 -0
- package/dist/nodes/SaasCity/resources/account.d.ts +2 -0
- package/dist/nodes/SaasCity/resources/account.js +23 -0
- package/dist/nodes/SaasCity/resources/account.js.map +1 -0
- package/dist/nodes/SaasCity/resources/directory.d.ts +2 -0
- package/dist/nodes/SaasCity/resources/directory.js +81 -0
- package/dist/nodes/SaasCity/resources/directory.js.map +1 -0
- package/dist/nodes/SaasCity/resources/draft.d.ts +2 -0
- package/dist/nodes/SaasCity/resources/draft.js +110 -0
- package/dist/nodes/SaasCity/resources/draft.js.map +1 -0
- package/dist/nodes/SaasCity/resources/listing.d.ts +2 -0
- package/dist/nodes/SaasCity/resources/listing.js +180 -0
- package/dist/nodes/SaasCity/resources/listing.js.map +1 -0
- package/dist/nodes/SaasCity/resources/upvote.d.ts +2 -0
- package/dist/nodes/SaasCity/resources/upvote.js +38 -0
- package/dist/nodes/SaasCity/resources/upvote.js.map +1 -0
- package/dist/nodes/SaasCity/saascity.dark.svg +1 -0
- package/dist/nodes/SaasCity/saascity.svg +1 -0
- package/dist/nodes/SaasCity/shared.d.ts +7 -0
- package/dist/nodes/SaasCity/shared.js +46 -0
- package/dist/nodes/SaasCity/shared.js.map +1 -0
- package/dist/nodes/SaasCityTrigger/SaasCityTrigger.node.d.ts +5 -0
- package/dist/nodes/SaasCityTrigger/SaasCityTrigger.node.js +94 -0
- package/dist/nodes/SaasCityTrigger/SaasCityTrigger.node.js.map +1 -0
- package/dist/nodes/SaasCityTrigger/SaasCityTrigger.node.json +14 -0
- package/dist/nodes/SaasCityTrigger/saascity.dark.svg +1 -0
- package/dist/nodes/SaasCityTrigger/saascity.svg +1 -0
- package/dist/package.json +55 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +54 -5
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 SaaSCity
|
|
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
CHANGED
|
@@ -1,3 +1,78 @@
|
|
|
1
|
-
#
|
|
1
|
+
# n8n-nodes-saascity
|
|
2
2
|
|
|
3
|
-
This
|
|
3
|
+
This is an n8n community node. It lets you use [SaaSCity](https://saascity.io), a launch directory for SaaS, startups and AI tools, in your n8n workflows.
|
|
4
|
+
|
|
5
|
+
With it you can read and edit your own SaaSCity listings, react to new upvotes, watch for listings going live, search the directory and start listing drafts. Both nodes work as tools for an n8n AI Agent.
|
|
6
|
+
|
|
7
|
+
[n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation platform.
|
|
8
|
+
|
|
9
|
+
- [Installation](#installation)
|
|
10
|
+
- [Operations](#operations)
|
|
11
|
+
- [Credentials](#credentials)
|
|
12
|
+
- [Compatibility](#compatibility)
|
|
13
|
+
- [Usage](#usage)
|
|
14
|
+
- [Resources](#resources)
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
In n8n, open **Settings > Community Nodes**, select **Install**, and enter `n8n-nodes-saascity`. See the [community nodes installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) for details.
|
|
19
|
+
|
|
20
|
+
## Operations
|
|
21
|
+
|
|
22
|
+
### SaaSCity node
|
|
23
|
+
|
|
24
|
+
| Resource | Operation | What it does |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| Account | Get | The account the API key belongs to |
|
|
27
|
+
| Listing | Get | One of your listings, by ID or slug |
|
|
28
|
+
| Listing | Get Many | Your listings, newest first, optionally filtered by state |
|
|
29
|
+
| Listing | Update | Edit title, tagline, description, category, links, tags or pricing model. The edit goes back to review until a person approves it |
|
|
30
|
+
| Upvote | Get Many | Upvotes on your listings, newest first. Votes are anonymous: you see when and on which listing, never who |
|
|
31
|
+
| Directory | Search | Search live listings in the directory by text, category and sort |
|
|
32
|
+
| Draft | Create | Start a listing draft and get its claim URL |
|
|
33
|
+
|
|
34
|
+
A draft is not a listing. Nothing is listed or charged until a person opens the claim URL, signs in, picks a plan, pays and submits the form. Every listing is reviewed by a person.
|
|
35
|
+
|
|
36
|
+
### SaaSCity Trigger node
|
|
37
|
+
|
|
38
|
+
Polls SaaSCity and starts the workflow when:
|
|
39
|
+
|
|
40
|
+
- **New Upvote on My Listing**: someone upvoted one of your listings.
|
|
41
|
+
- **Listing Went Live**: one of your listings is now live.
|
|
42
|
+
- **New Product in Directory**: any new product went live in the directory.
|
|
43
|
+
|
|
44
|
+
On activation the trigger remembers what already exists and only fires for new items after that. A manual test run returns the newest item so you can map its fields.
|
|
45
|
+
|
|
46
|
+
## Credentials
|
|
47
|
+
|
|
48
|
+
1. Sign in at [saascity.io](https://saascity.io).
|
|
49
|
+
2. Open [Dashboard > Settings > API](https://saascity.io/dashboard/settings/api) and create a key. It starts with `scm_live_`.
|
|
50
|
+
3. In n8n, create a **SaaSCity API** credential and paste the key.
|
|
51
|
+
|
|
52
|
+
n8n tests the key against `GET /me` when you save it. The key is sent in the `X-Api-Key` header.
|
|
53
|
+
|
|
54
|
+
Limits: 60 requests a minute per key and 10 drafts a day per account. Lists return at most 100 items.
|
|
55
|
+
|
|
56
|
+
## Compatibility
|
|
57
|
+
|
|
58
|
+
Built with `@n8n/node-cli` and `n8nNodesApiVersion` 1. Requires n8n 1.0 or later.
|
|
59
|
+
|
|
60
|
+
## Usage
|
|
61
|
+
|
|
62
|
+
**Post new upvotes to Slack.** SaaSCity Trigger (New Upvote on My Listing) → Slack (Send Message) with `{{$json.listing_title}}` and `{{$json.listing_url}}`.
|
|
63
|
+
|
|
64
|
+
**Let an AI Agent manage your listing.** Add the SaaSCity node as a tool on an AI Agent node. The agent can look up your listings, fix a tagline with Update, or search the directory for similar products.
|
|
65
|
+
|
|
66
|
+
**Announce launch day.** SaaSCity Trigger (Listing Went Live) → X or LinkedIn post with the listing URL.
|
|
67
|
+
|
|
68
|
+
## Resources
|
|
69
|
+
|
|
70
|
+
- [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
|
|
71
|
+
- [SaaSCity Maker API reference (OpenAPI)](https://saascity.io/api/maker/v1/openapi.json)
|
|
72
|
+
- [SaaSCity](https://saascity.io)
|
|
73
|
+
|
|
74
|
+
## Version history
|
|
75
|
+
|
|
76
|
+
### 0.1.0
|
|
77
|
+
|
|
78
|
+
First release: SaaSCity node (account, listings, upvotes, directory search, drafts) and SaaSCity Trigger node (new upvote, listing went live, new product).
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class SaasCityApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
icon: "file:../nodes/SaasCity/saascity.svg";
|
|
6
|
+
documentationUrl: string;
|
|
7
|
+
properties: INodeProperties[];
|
|
8
|
+
authenticate: IAuthenticateGeneric;
|
|
9
|
+
test: ICredentialTestRequest;
|
|
10
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SaasCityApi = void 0;
|
|
4
|
+
class SaasCityApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'saasCityApi';
|
|
7
|
+
this.displayName = 'SaaSCity API';
|
|
8
|
+
this.icon = 'file:../nodes/SaasCity/saascity.svg';
|
|
9
|
+
this.documentationUrl = 'https://github.com/nyyhao/n8n-nodes-saascity?tab=readme-ov-file#credentials';
|
|
10
|
+
this.properties = [
|
|
11
|
+
{
|
|
12
|
+
displayName: 'API Key',
|
|
13
|
+
name: 'apiKey',
|
|
14
|
+
type: 'string',
|
|
15
|
+
typeOptions: { password: true },
|
|
16
|
+
required: true,
|
|
17
|
+
default: '',
|
|
18
|
+
placeholder: 'scm_live_...',
|
|
19
|
+
description: 'Create a key at https://saascity.io/dashboard/settings/api. It starts with scm_live_.',
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
this.authenticate = {
|
|
23
|
+
type: 'generic',
|
|
24
|
+
properties: {
|
|
25
|
+
headers: {
|
|
26
|
+
'X-Api-Key': '={{$credentials.apiKey}}',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
this.test = {
|
|
31
|
+
request: {
|
|
32
|
+
baseURL: 'https://saascity.io/api/maker/v1',
|
|
33
|
+
url: '/me',
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.SaasCityApi = SaasCityApi;
|
|
39
|
+
//# sourceMappingURL=SaasCityApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SaasCityApi.credentials.js","sourceRoot":"","sources":["../../credentials/SaasCityApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,WAAW;IAAxB;QACC,SAAI,GAAG,aAAa,CAAC;QAErB,gBAAW,GAAG,cAAc,CAAC;QAE7B,SAAI,GAAG,qCAA8C,CAAC;QAEtD,qBAAgB,GAAG,6EAA6E,CAAC;QAEjG,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,cAAc;gBAC3B,WAAW,EACV,uFAAuF;aACxF;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,WAAW,EAAE,0BAA0B;iBACvC;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,kCAAkC;gBAC3C,GAAG,EAAE,KAAK;aACV;SACD,CAAC;IACH,CAAC;CAAA;AAtCD,kCAsCC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SaasCity = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const account_1 = require("./resources/account");
|
|
6
|
+
const directory_1 = require("./resources/directory");
|
|
7
|
+
const draft_1 = require("./resources/draft");
|
|
8
|
+
const listing_1 = require("./resources/listing");
|
|
9
|
+
const upvote_1 = require("./resources/upvote");
|
|
10
|
+
const shared_1 = require("./shared");
|
|
11
|
+
class SaasCity {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.description = {
|
|
14
|
+
displayName: 'SaaSCity',
|
|
15
|
+
name: 'saasCity',
|
|
16
|
+
icon: { light: 'file:saascity.svg', dark: 'file:saascity.dark.svg' },
|
|
17
|
+
group: ['transform'],
|
|
18
|
+
version: 1,
|
|
19
|
+
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
20
|
+
description: 'Manage your SaaSCity listings, read upvotes and search the directory',
|
|
21
|
+
defaults: { name: 'SaaSCity' },
|
|
22
|
+
usableAsTool: true,
|
|
23
|
+
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
24
|
+
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
25
|
+
credentials: [{ name: 'saasCityApi', required: true }],
|
|
26
|
+
requestDefaults: {
|
|
27
|
+
baseURL: shared_1.BASE_URL,
|
|
28
|
+
headers: {
|
|
29
|
+
Accept: 'application/json',
|
|
30
|
+
'Content-Type': 'application/json',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
properties: [
|
|
34
|
+
{
|
|
35
|
+
displayName: 'Resource',
|
|
36
|
+
name: 'resource',
|
|
37
|
+
type: 'options',
|
|
38
|
+
noDataExpression: true,
|
|
39
|
+
options: [
|
|
40
|
+
{ name: 'Account', value: 'account' },
|
|
41
|
+
{ name: 'Directory', value: 'directory' },
|
|
42
|
+
{ name: 'Draft', value: 'draft' },
|
|
43
|
+
{ name: 'Listing', value: 'listing' },
|
|
44
|
+
{ name: 'Upvote', value: 'upvote' },
|
|
45
|
+
],
|
|
46
|
+
default: 'listing',
|
|
47
|
+
},
|
|
48
|
+
...account_1.accountDescription,
|
|
49
|
+
...directory_1.directoryDescription,
|
|
50
|
+
...draft_1.draftDescription,
|
|
51
|
+
...listing_1.listingDescription,
|
|
52
|
+
...upvote_1.upvoteDescription,
|
|
53
|
+
],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.SaasCity = SaasCity;
|
|
58
|
+
//# sourceMappingURL=SaasCity.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SaasCity.node.js","sourceRoot":"","sources":["../../../nodes/SaasCity/SaasCity.node.ts"],"names":[],"mappings":";;;AAAA,+CAA8F;AAC9F,iDAAyD;AACzD,qDAA6D;AAC7D,6CAAqD;AACrD,iDAAyD;AACzD,+CAAuD;AACvD,qCAAoC;AAEpC,MAAa,QAAQ;IAArB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,UAAU;YACvB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,wBAAwB,EAAE;YACpE,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8DAA8D;YACxE,WAAW,EAAE,sEAAsE;YACnF,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;YAC9B,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACtD,eAAe,EAAE;gBAChB,OAAO,EAAE,iBAAQ;gBACjB,OAAO,EAAE;oBACR,MAAM,EAAE,kBAAkB;oBAC1B,cAAc,EAAE,kBAAkB;iBAClC;aACD;YACD,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE;wBACR,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;wBACrC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;wBACzC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;wBACjC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;wBACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;qBACnC;oBACD,OAAO,EAAE,SAAS;iBAClB;gBACD,GAAG,4BAAkB;gBACrB,GAAG,gCAAoB;gBACvB,GAAG,wBAAgB;gBACnB,GAAG,4BAAkB;gBACrB,GAAG,0BAAiB;aACpB;SACD,CAAC;IACH,CAAC;CAAA;AA3CD,4BA2CC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"node": "n8n-nodes-saascity.saasCity",
|
|
3
|
+
"nodeVersion": "1.0",
|
|
4
|
+
"codexVersion": "1.0",
|
|
5
|
+
"categories": ["Marketing & Content"],
|
|
6
|
+
"resources": {
|
|
7
|
+
"credentialDocumentation": [
|
|
8
|
+
{ "url": "https://github.com/nyyhao/n8n-nodes-saascity?tab=readme-ov-file#credentials" }
|
|
9
|
+
],
|
|
10
|
+
"primaryDocumentation": [
|
|
11
|
+
{ "url": "https://github.com/nyyhao/n8n-nodes-saascity?tab=readme-ov-file" }
|
|
12
|
+
]
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.accountDescription = void 0;
|
|
4
|
+
exports.accountDescription = [
|
|
5
|
+
{
|
|
6
|
+
displayName: 'Operation',
|
|
7
|
+
name: 'operation',
|
|
8
|
+
type: 'options',
|
|
9
|
+
noDataExpression: true,
|
|
10
|
+
displayOptions: { show: { resource: ['account'] } },
|
|
11
|
+
options: [
|
|
12
|
+
{
|
|
13
|
+
name: 'Get',
|
|
14
|
+
value: 'get',
|
|
15
|
+
action: 'Get my account',
|
|
16
|
+
description: 'Get the account the API key belongs to',
|
|
17
|
+
routing: { request: { method: 'GET', url: '/me' } },
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
default: 'get',
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../../nodes/SaasCity/resources/account.ts"],"names":[],"mappings":";;;AAEa,QAAA,kBAAkB,GAAsB;IACpD;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE;QACnD,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,gBAAgB;gBACxB,WAAW,EAAE,wCAAwC;gBACrD,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;aACnD;SACD;QACD,OAAO,EAAE,KAAK;KACd;CACD,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.directoryDescription = void 0;
|
|
4
|
+
const shared_1 = require("../shared");
|
|
5
|
+
const show = { show: { resource: ['directory'], operation: ['search'] } };
|
|
6
|
+
exports.directoryDescription = [
|
|
7
|
+
{
|
|
8
|
+
displayName: 'Operation',
|
|
9
|
+
name: 'operation',
|
|
10
|
+
type: 'options',
|
|
11
|
+
noDataExpression: true,
|
|
12
|
+
displayOptions: { show: { resource: ['directory'] } },
|
|
13
|
+
options: [
|
|
14
|
+
{
|
|
15
|
+
name: 'Search',
|
|
16
|
+
value: 'search',
|
|
17
|
+
action: 'Search the directory',
|
|
18
|
+
description: 'Search live listings in the SaaSCity directory',
|
|
19
|
+
routing: {
|
|
20
|
+
request: { method: 'GET', url: '/search' },
|
|
21
|
+
output: {
|
|
22
|
+
postReceive: [{ type: 'rootProperty', properties: { property: 'listings' } }],
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
default: 'search',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
displayName: 'Query',
|
|
31
|
+
name: 'query',
|
|
32
|
+
type: 'string',
|
|
33
|
+
default: '',
|
|
34
|
+
placeholder: 'email marketing',
|
|
35
|
+
description: 'Matched against title and tagline. Leave empty to browse.',
|
|
36
|
+
displayOptions: show,
|
|
37
|
+
routing: {
|
|
38
|
+
send: { type: 'query', property: 'query', value: '={{ $value || undefined }}' },
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
displayName: 'Limit',
|
|
43
|
+
name: 'limit',
|
|
44
|
+
type: 'number',
|
|
45
|
+
typeOptions: { minValue: 1, maxValue: 100 },
|
|
46
|
+
default: 50,
|
|
47
|
+
description: 'Max number of results to return',
|
|
48
|
+
displayOptions: show,
|
|
49
|
+
routing: { send: { type: 'query', property: 'limit' } },
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
displayName: 'Options',
|
|
53
|
+
name: 'options',
|
|
54
|
+
type: 'collection',
|
|
55
|
+
placeholder: 'Add Option',
|
|
56
|
+
default: {},
|
|
57
|
+
displayOptions: show,
|
|
58
|
+
options: [
|
|
59
|
+
{
|
|
60
|
+
displayName: 'Category',
|
|
61
|
+
name: 'category',
|
|
62
|
+
type: 'options',
|
|
63
|
+
options: shared_1.CATEGORY_OPTIONS,
|
|
64
|
+
default: 'saas',
|
|
65
|
+
routing: { send: { type: 'query', property: 'category' } },
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
displayName: 'Sort',
|
|
69
|
+
name: 'sort',
|
|
70
|
+
type: 'options',
|
|
71
|
+
options: [
|
|
72
|
+
{ name: 'Newest', value: 'newest' },
|
|
73
|
+
{ name: 'Most Points', value: 'points' },
|
|
74
|
+
],
|
|
75
|
+
default: 'newest',
|
|
76
|
+
routing: { send: { type: 'query', property: 'sort' } },
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
//# sourceMappingURL=directory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory.js","sourceRoot":"","sources":["../../../../nodes/SaasCity/resources/directory.ts"],"names":[],"mappings":";;;AACA,sCAA6C;AAE7C,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;AAE7D,QAAA,oBAAoB,GAAsB;IACtD;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE;QACrD,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,sBAAsB;gBAC9B,WAAW,EAAE,gDAAgD;gBAC7D,OAAO,EAAE;oBACR,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE;oBAC1C,MAAM,EAAE;wBACP,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC;qBAC7E;iBACD;aACD;SACD;QACD,OAAO,EAAE,QAAQ;KACjB;IACD;QACC,WAAW,EAAE,OAAO;QACpB,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE,2DAA2D;QACxE,cAAc,EAAE,IAAI;QACpB,OAAO,EAAE;YACR,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,4BAA4B,EAAE;SAC/E;KACD;IACD;QACC,WAAW,EAAE,OAAO;QACpB,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;QAC3C,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,iCAAiC;QAC9C,cAAc,EAAE,IAAI;QACpB,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;KACvD;IACD;QACC,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,EAAE;QACX,cAAc,EAAE,IAAI;QACpB,OAAO,EAAE;YACR;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,yBAAgB;gBACzB,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE;aAC1D;YACD;gBACC,WAAW,EAAE,MAAM;gBACnB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE;oBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;oBACnC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE;iBACxC;gBACD,OAAO,EAAE,QAAQ;gBACjB,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;aACtD;SACD;KACD;CACD,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.draftDescription = void 0;
|
|
4
|
+
const shared_1 = require("../shared");
|
|
5
|
+
const show = { show: { resource: ['draft'], operation: ['create'] } };
|
|
6
|
+
exports.draftDescription = [
|
|
7
|
+
{
|
|
8
|
+
displayName: 'Operation',
|
|
9
|
+
name: 'operation',
|
|
10
|
+
type: 'options',
|
|
11
|
+
noDataExpression: true,
|
|
12
|
+
displayOptions: { show: { resource: ['draft'] } },
|
|
13
|
+
options: [
|
|
14
|
+
{
|
|
15
|
+
name: 'Create',
|
|
16
|
+
value: 'create',
|
|
17
|
+
action: 'Create a listing draft',
|
|
18
|
+
description: 'Start a listing draft and get its claim URL. Nothing is listed or charged until a person opens the URL, picks a plan and submits.',
|
|
19
|
+
routing: { request: { method: 'POST', url: '/drafts' } },
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
default: 'create',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
displayName: 'Title',
|
|
26
|
+
name: 'title',
|
|
27
|
+
type: 'string',
|
|
28
|
+
required: true,
|
|
29
|
+
default: '',
|
|
30
|
+
description: 'Product name, 3 to 60 characters',
|
|
31
|
+
displayOptions: show,
|
|
32
|
+
routing: { send: { type: 'body', property: 'title' } },
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
displayName: 'Tagline',
|
|
36
|
+
name: 'tagline',
|
|
37
|
+
type: 'string',
|
|
38
|
+
required: true,
|
|
39
|
+
default: '',
|
|
40
|
+
description: 'One line, 10 to 100 characters',
|
|
41
|
+
displayOptions: show,
|
|
42
|
+
routing: { send: { type: 'body', property: 'tagline' } },
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
displayName: 'Category',
|
|
46
|
+
name: 'category',
|
|
47
|
+
type: 'options',
|
|
48
|
+
required: true,
|
|
49
|
+
options: shared_1.CATEGORY_OPTIONS,
|
|
50
|
+
default: 'saas',
|
|
51
|
+
displayOptions: show,
|
|
52
|
+
routing: { send: { type: 'body', property: 'category' } },
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
displayName: 'Description',
|
|
56
|
+
name: 'description',
|
|
57
|
+
type: 'string',
|
|
58
|
+
required: true,
|
|
59
|
+
typeOptions: { rows: 5 },
|
|
60
|
+
default: '',
|
|
61
|
+
description: '50 to 5,000 characters',
|
|
62
|
+
displayOptions: show,
|
|
63
|
+
routing: { send: { type: 'body', property: 'description' } },
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
displayName: 'Website URL',
|
|
67
|
+
name: 'website_url',
|
|
68
|
+
type: 'string',
|
|
69
|
+
required: true,
|
|
70
|
+
default: '',
|
|
71
|
+
placeholder: 'https://example.com',
|
|
72
|
+
description: 'Https, on its own domain. Free subdomain hosts are refused.',
|
|
73
|
+
displayOptions: show,
|
|
74
|
+
routing: { send: { type: 'body', property: 'website_url' } },
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
displayName: 'Additional Fields',
|
|
78
|
+
name: 'additionalFields',
|
|
79
|
+
type: 'collection',
|
|
80
|
+
placeholder: 'Add Field',
|
|
81
|
+
default: {},
|
|
82
|
+
displayOptions: show,
|
|
83
|
+
options: [
|
|
84
|
+
{
|
|
85
|
+
displayName: 'GitHub URL',
|
|
86
|
+
name: 'github_url',
|
|
87
|
+
type: 'string',
|
|
88
|
+
default: '',
|
|
89
|
+
routing: { send: { type: 'body', property: 'github_url' } },
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
displayName: 'Tags',
|
|
93
|
+
name: 'tags',
|
|
94
|
+
type: 'string',
|
|
95
|
+
default: '',
|
|
96
|
+
placeholder: 'analytics, seo',
|
|
97
|
+
description: 'Comma-separated, up to 10',
|
|
98
|
+
routing: { send: { type: 'body', property: 'tags', value: shared_1.TAGS_EXPRESSION } },
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
displayName: 'X (Twitter) URL',
|
|
102
|
+
name: 'twitter_url',
|
|
103
|
+
type: 'string',
|
|
104
|
+
default: '',
|
|
105
|
+
routing: { send: { type: 'body', property: 'twitter_url' } },
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
},
|
|
109
|
+
];
|
|
110
|
+
//# sourceMappingURL=draft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft.js","sourceRoot":"","sources":["../../../../nodes/SaasCity/resources/draft.ts"],"names":[],"mappings":"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"}
|