n8n-nodes-strijpsocial 0.1.2
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/README.md +126 -0
- package/dist/credentials/StrijpsocialApi.credentials.d.ts +10 -0
- package/dist/credentials/StrijpsocialApi.credentials.js +50 -0
- package/dist/credentials/StrijpsocialApi.credentials.js.map +1 -0
- package/dist/nodes/Strijpsocial/StrijpSocial.node.d.ts +9 -0
- package/dist/nodes/Strijpsocial/StrijpSocial.node.js +69 -0
- package/dist/nodes/Strijpsocial/StrijpSocial.node.js.map +1 -0
- package/dist/nodes/Strijpsocial/StrijpSocial.node.json +18 -0
- package/dist/nodes/Strijpsocial/resources/channel/index.d.ts +2 -0
- package/dist/nodes/Strijpsocial/resources/channel/index.js +37 -0
- package/dist/nodes/Strijpsocial/resources/channel/index.js.map +1 -0
- package/dist/nodes/Strijpsocial/resources/post/create.d.ts +2 -0
- package/dist/nodes/Strijpsocial/resources/post/create.js +120 -0
- package/dist/nodes/Strijpsocial/resources/post/create.js.map +1 -0
- package/dist/nodes/Strijpsocial/resources/post/delete.d.ts +2 -0
- package/dist/nodes/Strijpsocial/resources/post/delete.js +19 -0
- package/dist/nodes/Strijpsocial/resources/post/delete.js.map +1 -0
- package/dist/nodes/Strijpsocial/resources/post/get.d.ts +2 -0
- package/dist/nodes/Strijpsocial/resources/post/get.js +19 -0
- package/dist/nodes/Strijpsocial/resources/post/get.js.map +1 -0
- package/dist/nodes/Strijpsocial/resources/post/getAll.d.ts +2 -0
- package/dist/nodes/Strijpsocial/resources/post/getAll.js +69 -0
- package/dist/nodes/Strijpsocial/resources/post/getAll.js.map +1 -0
- package/dist/nodes/Strijpsocial/resources/post/index.d.ts +2 -0
- package/dist/nodes/Strijpsocial/resources/post/index.js +138 -0
- package/dist/nodes/Strijpsocial/resources/post/index.js.map +1 -0
- package/dist/nodes/Strijpsocial/resources/post/reschedule.d.ts +2 -0
- package/dist/nodes/Strijpsocial/resources/post/reschedule.js +31 -0
- package/dist/nodes/Strijpsocial/resources/post/reschedule.js.map +1 -0
- package/dist/nodes/Strijpsocial/resources/post/update.d.ts +2 -0
- package/dist/nodes/Strijpsocial/resources/post/update.js +59 -0
- package/dist/nodes/Strijpsocial/resources/post/update.js.map +1 -0
- package/dist/nodes/Strijpsocial/shared/utils.d.ts +5 -0
- package/dist/nodes/Strijpsocial/shared/utils.js +96 -0
- package/dist/nodes/Strijpsocial/shared/utils.js.map +1 -0
- package/dist/nodes/Strijpsocial/strijpsocial.dark.svg +5 -0
- package/dist/nodes/Strijpsocial/strijpsocial.svg +5 -0
- package/dist/package.json +58 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +58 -0
package/README.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# n8n-nodes-strijpsocial
|
|
2
|
+
|
|
3
|
+
This is an n8n community node. It lets you use [StrijpSocial](https://strijpsocial.com) in your n8n workflows.
|
|
4
|
+
|
|
5
|
+
StrijpSocial is a multi-platform social media scheduler. This node schedules and publishes posts across your connected social channels, manages the posting queue, and reads back your connected channels — all driven from an n8n workflow.
|
|
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
|
+
[Credentials](#credentials)
|
|
11
|
+
[Operations](#operations)
|
|
12
|
+
[Dynamic channel dropdown](#dynamic-channel-dropdown)
|
|
13
|
+
[Error handling](#error-handling)
|
|
14
|
+
[Example workflow](#example-workflow)
|
|
15
|
+
[Resources](#resources)
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
### Community Nodes (recommended)
|
|
20
|
+
|
|
21
|
+
For users on n8n v0.187+, install directly from the UI:
|
|
22
|
+
|
|
23
|
+
1. Go to **Settings → Community Nodes**.
|
|
24
|
+
2. Select **Install**.
|
|
25
|
+
3. Enter `n8n-nodes-strijpsocial` as the npm package name.
|
|
26
|
+
4. Agree to the risks of using community nodes and select **Install**.
|
|
27
|
+
|
|
28
|
+
After installation the **StrijpSocial** node is available in the node panel.
|
|
29
|
+
|
|
30
|
+
### Manual / npm
|
|
31
|
+
|
|
32
|
+
Install into your n8n instance's node folder:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm install n8n-nodes-strijpsocial
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
For self-hosted Docker setups, see the n8n [community nodes installation guide](https://docs.n8n.io/integrations/community-nodes/installation/).
|
|
39
|
+
|
|
40
|
+
## Credentials
|
|
41
|
+
|
|
42
|
+
You need a StrijpSocial API key.
|
|
43
|
+
|
|
44
|
+
1. Sign in to StrijpSocial.
|
|
45
|
+
2. Go to **Settings → API keys**.
|
|
46
|
+
3. Create a key. It looks like `ssk_live_...`.
|
|
47
|
+
4. In n8n, create new **StrijpSocial API** credentials and paste the key into **API Key**.
|
|
48
|
+
5. Leave **Base URL** at `https://strijpsocial.com/api` unless you self-host, in which case point it at your own instance.
|
|
49
|
+
|
|
50
|
+
The API key is workspace-scoped: every request automatically operates on the workspace the key belongs to. When you save the credentials, n8n verifies them with a live `GET /channels` call — a green check means the key works.
|
|
51
|
+
|
|
52
|
+
## Operations
|
|
53
|
+
|
|
54
|
+
### Post
|
|
55
|
+
|
|
56
|
+
| Operation | Description | API call |
|
|
57
|
+
|-------------|-------------------------------------------------------------------|----------|
|
|
58
|
+
| Create | Create and schedule a post across one or more channels | `POST /posts` |
|
|
59
|
+
| Get | Fetch a single post by ID | `GET /posts/{id}` |
|
|
60
|
+
| Get Many | List posts, with filters for week, status, and channel + a limit | `GET /posts` |
|
|
61
|
+
| Update | Update body, label, scheduled time, or tags of a post | `PATCH /posts/{id}` |
|
|
62
|
+
| Reschedule | Change only the scheduled time | `PATCH /posts/{id}/schedule` |
|
|
63
|
+
| Delete | Cancel / delete a post by ID | `DELETE /posts/{id}` |
|
|
64
|
+
|
|
65
|
+
**Create** highlights:
|
|
66
|
+
|
|
67
|
+
- **Body** — the post text, used as the default for every selected channel.
|
|
68
|
+
- **Channel Names or IDs** — a multi-select loaded live from your account (see below).
|
|
69
|
+
- **Scheduled At** — leave empty for a draft.
|
|
70
|
+
- **Status** — `draft`, `scheduled`, or `needs_approval`. If you set a scheduled time and leave status at the default `draft`, it is sent as `scheduled`.
|
|
71
|
+
- **Tags** — comma-separated hashtags; split into an array before sending.
|
|
72
|
+
- **Label** — internal name / YouTube title.
|
|
73
|
+
- **Additional Fields** — `timezone`, and **Per-Channel Variants** (a `channel` + `body` pair) to override the body for specific channels.
|
|
74
|
+
|
|
75
|
+
Every Create request also sends `source: "n8n"`.
|
|
76
|
+
|
|
77
|
+
### Channel
|
|
78
|
+
|
|
79
|
+
| Operation | Description | API call |
|
|
80
|
+
|-----------|--------------------------------------|----------|
|
|
81
|
+
| Get Many | List all connected social channels | `GET /channels` |
|
|
82
|
+
|
|
83
|
+
## Dynamic channel dropdown
|
|
84
|
+
|
|
85
|
+
The **Channel Names or IDs** field (and the per-channel variant selector) is populated at edit time by a `loadOptions` method named `getChannels`. It calls `GET /channels` with your credentials and returns each channel as:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
name: "<display_name> (<platform>)"
|
|
89
|
+
value: <channel id>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
So you pick channels by their human-readable name instead of pasting UUIDs, and the underlying post payload still carries the real channel IDs.
|
|
93
|
+
|
|
94
|
+
## Error handling
|
|
95
|
+
|
|
96
|
+
API errors are mapped to readable n8n messages:
|
|
97
|
+
|
|
98
|
+
- **401** → `Invalid API key — check your StrijpSocial credentials.`
|
|
99
|
+
- **403** → `Your API key doesn't have the required scope for this operation.`
|
|
100
|
+
- **422** → the validation message returned by the API.
|
|
101
|
+
- Other errors surface the API's message with the HTTP status.
|
|
102
|
+
|
|
103
|
+
The node supports n8n's **Continue On Fail** setting, so a single failed post (for example one channel rejecting a schedule) won't halt a batch — the error is returned as an item and the workflow keeps running.
|
|
104
|
+
|
|
105
|
+
## Example workflow
|
|
106
|
+
|
|
107
|
+
A simple "publish from a spreadsheet" workflow:
|
|
108
|
+
|
|
109
|
+
1. **Schedule Trigger** — run every morning.
|
|
110
|
+
2. **Google Sheets → Get rows** — read the day's planned posts (body, channels, time).
|
|
111
|
+
3. **StrijpSocial → Post → Create** — map the body, select channels from the dropdown, set **Scheduled At** from the sheet, and add tags. With **Continue On Fail** on, any row that fails is captured without stopping the rest.
|
|
112
|
+
4. **Filter / IF** — route failed items (they carry an `error` field) to a Slack notification.
|
|
113
|
+
|
|
114
|
+
You can also run **Channel → Get Many** first to discover channel IDs dynamically, or use **Post → Get Many** with a `week` filter to build a weekly digest.
|
|
115
|
+
|
|
116
|
+
## Resources
|
|
117
|
+
|
|
118
|
+
- [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
|
|
119
|
+
- [StrijpSocial documentation](https://strijpsocial.com/docs)
|
|
120
|
+
|
|
121
|
+
## Version history
|
|
122
|
+
|
|
123
|
+
### 0.1.0
|
|
124
|
+
|
|
125
|
+
- Initial release: Post (Create, Get, Get Many, Update, Reschedule, Delete) and Channel (Get Many), with dynamic channel loading and mapped error messages.
|
|
126
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, Icon, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class StrijpsocialApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
documentationUrl: string;
|
|
6
|
+
icon: Icon;
|
|
7
|
+
properties: INodeProperties[];
|
|
8
|
+
authenticate: IAuthenticateGeneric;
|
|
9
|
+
test: ICredentialTestRequest;
|
|
10
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StrijpsocialApi = void 0;
|
|
4
|
+
class StrijpsocialApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'strijpsocialApi';
|
|
7
|
+
this.displayName = 'StrijpSocial API';
|
|
8
|
+
this.documentationUrl = 'https://strijpsocial.com/docs';
|
|
9
|
+
this.icon = {
|
|
10
|
+
light: 'file:../nodes/Strijpsocial/strijpsocial.svg',
|
|
11
|
+
dark: 'file:../nodes/Strijpsocial/strijpsocial.dark.svg',
|
|
12
|
+
};
|
|
13
|
+
this.properties = [
|
|
14
|
+
{
|
|
15
|
+
displayName: 'API Key',
|
|
16
|
+
name: 'apiKey',
|
|
17
|
+
type: 'string',
|
|
18
|
+
typeOptions: { password: true },
|
|
19
|
+
required: true,
|
|
20
|
+
default: '',
|
|
21
|
+
placeholder: 'ssk_live_...',
|
|
22
|
+
description: 'Your StrijpSocial API key from Settings → API keys',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
displayName: 'Base URL',
|
|
26
|
+
name: 'baseUrl',
|
|
27
|
+
type: 'string',
|
|
28
|
+
default: 'https://strijpsocial.com/api',
|
|
29
|
+
description: 'API base URL. Change only if self-hosting.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
this.authenticate = {
|
|
33
|
+
type: 'generic',
|
|
34
|
+
properties: {
|
|
35
|
+
headers: {
|
|
36
|
+
Authorization: '=Bearer {{$credentials.apiKey}}',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
this.test = {
|
|
41
|
+
request: {
|
|
42
|
+
baseURL: '={{$credentials.baseUrl}}',
|
|
43
|
+
url: '/channels',
|
|
44
|
+
method: 'GET',
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.StrijpsocialApi = StrijpsocialApi;
|
|
50
|
+
//# sourceMappingURL=StrijpsocialApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StrijpsocialApi.credentials.js","sourceRoot":"","sources":["../../credentials/StrijpsocialApi.credentials.ts"],"names":[],"mappings":";;;AAQA,MAAa,eAAe;IAA5B;QACC,SAAI,GAAG,iBAAiB,CAAC;QAEzB,gBAAW,GAAG,kBAAkB,CAAC;QAEjC,qBAAgB,GAAG,+BAA+B,CAAC;QAEnD,SAAI,GAAS;YACZ,KAAK,EAAE,6CAA6C;YACpD,IAAI,EAAE,kDAAkD;SACxD,CAAC;QAEF,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,EAAE,oDAAoD;aACjE;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,8BAA8B;gBACvC,WAAW,EAAE,4CAA4C;aACzD;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,iCAAiC;iBAChD;aACD;SACD,CAAC;QAGF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,2BAA2B;gBACpC,GAAG,EAAE,WAAW;gBAChB,MAAM,EAAE,KAAK;aACb;SACD,CAAC;IACH,CAAC;CAAA;AAjDD,0CAiDC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ILoadOptionsFunctions, type INodePropertyOptions, type INodeType, type INodeTypeDescription } from 'n8n-workflow';
|
|
2
|
+
export declare class StrijpSocial implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
methods: {
|
|
5
|
+
loadOptions: {
|
|
6
|
+
getChannels(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StrijpSocial = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const post_1 = require("./resources/post");
|
|
6
|
+
const channel_1 = require("./resources/channel");
|
|
7
|
+
class StrijpSocial {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.description = {
|
|
10
|
+
displayName: 'StrijpSocial',
|
|
11
|
+
name: 'strijpSocial',
|
|
12
|
+
icon: { light: 'file:strijpsocial.svg', dark: 'file:strijpsocial.dark.svg' },
|
|
13
|
+
group: ['output'],
|
|
14
|
+
version: 1,
|
|
15
|
+
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
16
|
+
description: 'Schedule and publish posts across multiple social platforms',
|
|
17
|
+
defaults: {
|
|
18
|
+
name: 'StrijpSocial',
|
|
19
|
+
},
|
|
20
|
+
usableAsTool: true,
|
|
21
|
+
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
22
|
+
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
23
|
+
credentials: [{ name: 'strijpsocialApi', required: true }],
|
|
24
|
+
requestDefaults: {
|
|
25
|
+
baseURL: '={{$credentials.baseUrl}}',
|
|
26
|
+
headers: {
|
|
27
|
+
Accept: 'application/json',
|
|
28
|
+
'Content-Type': 'application/json',
|
|
29
|
+
},
|
|
30
|
+
ignoreHttpStatusErrors: true,
|
|
31
|
+
},
|
|
32
|
+
properties: [
|
|
33
|
+
{
|
|
34
|
+
displayName: 'Resource',
|
|
35
|
+
name: 'resource',
|
|
36
|
+
type: 'options',
|
|
37
|
+
noDataExpression: true,
|
|
38
|
+
options: [
|
|
39
|
+
{ name: 'Post', value: 'post' },
|
|
40
|
+
{ name: 'Channel', value: 'channel' },
|
|
41
|
+
],
|
|
42
|
+
default: 'post',
|
|
43
|
+
},
|
|
44
|
+
...post_1.postDescription,
|
|
45
|
+
...channel_1.channelDescription,
|
|
46
|
+
],
|
|
47
|
+
};
|
|
48
|
+
this.methods = {
|
|
49
|
+
loadOptions: {
|
|
50
|
+
async getChannels() {
|
|
51
|
+
var _a;
|
|
52
|
+
const credentials = await this.getCredentials('strijpsocialApi');
|
|
53
|
+
const response = (await this.helpers.httpRequestWithAuthentication.call(this, 'strijpsocialApi', {
|
|
54
|
+
method: 'GET',
|
|
55
|
+
baseURL: credentials.baseUrl,
|
|
56
|
+
url: '/channels',
|
|
57
|
+
}));
|
|
58
|
+
const channels = Array.isArray(response) ? response : ((_a = response.data) !== null && _a !== void 0 ? _a : []);
|
|
59
|
+
return channels.map((channel) => ({
|
|
60
|
+
name: `${channel.display_name} (${channel.platform})`,
|
|
61
|
+
value: channel.id,
|
|
62
|
+
}));
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.StrijpSocial = StrijpSocial;
|
|
69
|
+
//# sourceMappingURL=StrijpSocial.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StrijpSocial.node.js","sourceRoot":"","sources":["../../../nodes/Strijpsocial/StrijpSocial.node.ts"],"names":[],"mappings":";;;AAAA,+CAMsB;AACtB,2CAAmD;AACnD,iDAAyD;AAUzD,MAAa,YAAY;IAAzB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,cAAc;YAC3B,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,4BAA4B,EAAE;YAC5E,KAAK,EAAE,CAAC,QAAQ,CAAC;YACjB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8DAA8D;YACxE,WAAW,EAAE,6DAA6D;YAC1E,QAAQ,EAAE;gBACT,IAAI,EAAE,cAAc;aACpB;YACD,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,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC1D,eAAe,EAAE;gBAChB,OAAO,EAAE,2BAA2B;gBACpC,OAAO,EAAE;oBACR,MAAM,EAAE,kBAAkB;oBAC1B,cAAc,EAAE,kBAAkB;iBAClC;gBAGD,sBAAsB,EAAE,IAAI;aAC5B;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,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;wBAC/B,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;qBACrC;oBACD,OAAO,EAAE,MAAM;iBACf;gBACD,GAAG,sBAAe;gBAClB,GAAG,4BAAkB;aACrB;SACD,CAAC;QAEF,YAAO,GAAG;YACT,WAAW,EAAE;gBACZ,KAAK,CAAC,WAAW;;oBAChB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;oBACjE,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CACtE,IAAI,EACJ,iBAAiB,EACjB;wBACC,MAAM,EAAE,KAAK;wBACb,OAAO,EAAE,WAAW,CAAC,OAAiB;wBACtC,GAAG,EAAE,WAAW;qBAChB,CACD,CAAoC,CAAC;oBAEtC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAA,QAAQ,CAAC,IAAI,mCAAI,EAAE,CAAC,CAAC;oBAE5E,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;wBACjC,IAAI,EAAE,GAAG,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,QAAQ,GAAG;wBACrD,KAAK,EAAE,OAAO,CAAC,EAAE;qBACjB,CAAC,CAAC,CAAC;gBACL,CAAC;aACD;SACD,CAAC;IACH,CAAC;CAAA;AAlED,oCAkEC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"node": "n8n-nodes-strijpsocial.strijpSocial",
|
|
3
|
+
"nodeVersion": "1.0",
|
|
4
|
+
"codexVersion": "1.0",
|
|
5
|
+
"categories": ["Marketing", "Communication"],
|
|
6
|
+
"resources": {
|
|
7
|
+
"credentialDocumentation": [
|
|
8
|
+
{
|
|
9
|
+
"url": "https://strijpsocial.com/docs"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"primaryDocumentation": [
|
|
13
|
+
{
|
|
14
|
+
"url": "https://strijpsocial.com/docs"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.channelDescription = void 0;
|
|
4
|
+
const utils_1 = require("../../shared/utils");
|
|
5
|
+
const showOnlyForChannels = {
|
|
6
|
+
resource: ['channel'],
|
|
7
|
+
};
|
|
8
|
+
exports.channelDescription = [
|
|
9
|
+
{
|
|
10
|
+
displayName: 'Operation',
|
|
11
|
+
name: 'operation',
|
|
12
|
+
type: 'options',
|
|
13
|
+
noDataExpression: true,
|
|
14
|
+
displayOptions: {
|
|
15
|
+
show: showOnlyForChannels,
|
|
16
|
+
},
|
|
17
|
+
options: [
|
|
18
|
+
{
|
|
19
|
+
name: 'Get Many',
|
|
20
|
+
value: 'getAll',
|
|
21
|
+
action: 'Get many channels',
|
|
22
|
+
description: 'List many connected social channels',
|
|
23
|
+
routing: {
|
|
24
|
+
request: {
|
|
25
|
+
method: 'GET',
|
|
26
|
+
url: '/channels',
|
|
27
|
+
},
|
|
28
|
+
output: {
|
|
29
|
+
postReceive: [utils_1.handleErrors],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
default: 'getAll',
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../nodes/Strijpsocial/resources/channel/index.ts"],"names":[],"mappings":";;;AACA,8CAAkD;AAElD,MAAM,mBAAmB,GAAG;IAC3B,QAAQ,EAAE,CAAC,SAAS,CAAC;CACrB,CAAC;AAEW,QAAA,kBAAkB,GAAsB;IACpD;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE;YACf,IAAI,EAAE,mBAAmB;SACzB;QACD,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,mBAAmB;gBAC3B,WAAW,EAAE,qCAAqC;gBAClD,OAAO,EAAE;oBACR,OAAO,EAAE;wBACR,MAAM,EAAE,KAAK;wBACb,GAAG,EAAE,WAAW;qBAChB;oBACD,MAAM,EAAE;wBACP,WAAW,EAAE,CAAC,oBAAY,CAAC;qBAC3B;iBACD;aACD;SACD;QACD,OAAO,EAAE,QAAQ;KACjB;CACD,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.postCreateDescription = void 0;
|
|
4
|
+
const showOnlyForPostCreate = {
|
|
5
|
+
operation: ['create'],
|
|
6
|
+
resource: ['post'],
|
|
7
|
+
};
|
|
8
|
+
exports.postCreateDescription = [
|
|
9
|
+
{
|
|
10
|
+
displayName: 'Body',
|
|
11
|
+
name: 'body',
|
|
12
|
+
type: 'string',
|
|
13
|
+
typeOptions: { rows: 4 },
|
|
14
|
+
required: true,
|
|
15
|
+
default: '',
|
|
16
|
+
displayOptions: { show: showOnlyForPostCreate },
|
|
17
|
+
description: 'The post text. Used as the default body for every selected channel.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
displayName: 'Channel Names or IDs',
|
|
21
|
+
name: 'channelIds',
|
|
22
|
+
type: 'multiOptions',
|
|
23
|
+
required: true,
|
|
24
|
+
default: [],
|
|
25
|
+
typeOptions: {
|
|
26
|
+
loadOptionsMethod: 'getChannels',
|
|
27
|
+
},
|
|
28
|
+
displayOptions: { show: showOnlyForPostCreate },
|
|
29
|
+
description: 'The channels to publish to. Choose from the list, or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
displayName: 'Scheduled At',
|
|
33
|
+
name: 'scheduledAt',
|
|
34
|
+
type: 'dateTime',
|
|
35
|
+
default: '',
|
|
36
|
+
displayOptions: { show: showOnlyForPostCreate },
|
|
37
|
+
description: 'When to publish. Leave empty to keep the post as a draft.',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
displayName: 'Status',
|
|
41
|
+
name: 'status',
|
|
42
|
+
type: 'options',
|
|
43
|
+
default: 'draft',
|
|
44
|
+
options: [
|
|
45
|
+
{ name: 'Draft', value: 'draft' },
|
|
46
|
+
{ name: 'Scheduled', value: 'scheduled' },
|
|
47
|
+
{ name: 'Needs Approval', value: 'needs_approval' },
|
|
48
|
+
],
|
|
49
|
+
displayOptions: { show: showOnlyForPostCreate },
|
|
50
|
+
description: 'Post status. Left as Draft with a Scheduled At time set, it is sent as Scheduled.',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
displayName: 'Tags',
|
|
54
|
+
name: 'tags',
|
|
55
|
+
type: 'string',
|
|
56
|
+
default: '',
|
|
57
|
+
placeholder: '#launch, #product',
|
|
58
|
+
displayOptions: { show: showOnlyForPostCreate },
|
|
59
|
+
description: 'Comma-separated hashtags. Split into an array before sending.',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
displayName: 'Label',
|
|
63
|
+
name: 'label',
|
|
64
|
+
type: 'string',
|
|
65
|
+
default: '',
|
|
66
|
+
displayOptions: { show: showOnlyForPostCreate },
|
|
67
|
+
description: 'Internal name / YouTube title for the post',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
displayName: 'Additional Fields',
|
|
71
|
+
name: 'additionalFields',
|
|
72
|
+
type: 'collection',
|
|
73
|
+
placeholder: 'Add Field',
|
|
74
|
+
default: {},
|
|
75
|
+
displayOptions: { show: showOnlyForPostCreate },
|
|
76
|
+
options: [
|
|
77
|
+
{
|
|
78
|
+
displayName: 'Timezone',
|
|
79
|
+
name: 'timezone',
|
|
80
|
+
type: 'string',
|
|
81
|
+
default: '',
|
|
82
|
+
placeholder: 'Europe/Amsterdam',
|
|
83
|
+
description: 'IANA timezone used to interpret the scheduled time',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
displayName: 'Per-Channel Variants',
|
|
87
|
+
name: 'variants',
|
|
88
|
+
type: 'fixedCollection',
|
|
89
|
+
typeOptions: { multipleValues: true },
|
|
90
|
+
default: {},
|
|
91
|
+
description: 'Override the body for specific channels',
|
|
92
|
+
options: [
|
|
93
|
+
{
|
|
94
|
+
name: 'variant',
|
|
95
|
+
displayName: 'Variant',
|
|
96
|
+
values: [
|
|
97
|
+
{
|
|
98
|
+
displayName: 'Channel Name or ID',
|
|
99
|
+
name: 'channelId',
|
|
100
|
+
type: 'options',
|
|
101
|
+
typeOptions: { loadOptionsMethod: 'getChannels' },
|
|
102
|
+
default: '',
|
|
103
|
+
description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>',
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
displayName: 'Body',
|
|
107
|
+
name: 'body',
|
|
108
|
+
type: 'string',
|
|
109
|
+
typeOptions: { rows: 3 },
|
|
110
|
+
default: '',
|
|
111
|
+
description: 'Body text to use for this channel instead of the default',
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
},
|
|
119
|
+
];
|
|
120
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../../nodes/Strijpsocial/resources/post/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.postDeleteDescription = void 0;
|
|
4
|
+
const showOnlyForPostDelete = {
|
|
5
|
+
operation: ['delete'],
|
|
6
|
+
resource: ['post'],
|
|
7
|
+
};
|
|
8
|
+
exports.postDeleteDescription = [
|
|
9
|
+
{
|
|
10
|
+
displayName: 'Post ID',
|
|
11
|
+
name: 'postId',
|
|
12
|
+
type: 'string',
|
|
13
|
+
required: true,
|
|
14
|
+
default: '',
|
|
15
|
+
displayOptions: { show: showOnlyForPostDelete },
|
|
16
|
+
description: 'The ID of the post to delete',
|
|
17
|
+
},
|
|
18
|
+
];
|
|
19
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../../nodes/Strijpsocial/resources/post/delete.ts"],"names":[],"mappings":";;;AAEA,MAAM,qBAAqB,GAAG;IAC7B,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,QAAQ,EAAE,CAAC,MAAM,CAAC;CAClB,CAAC;AAEW,QAAA,qBAAqB,GAAsB;IACvD;QACC,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,EAAE;QACX,cAAc,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE;QAC/C,WAAW,EAAE,8BAA8B;KAC3C;CACD,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.postGetDescription = void 0;
|
|
4
|
+
const showOnlyForPostGet = {
|
|
5
|
+
operation: ['get'],
|
|
6
|
+
resource: ['post'],
|
|
7
|
+
};
|
|
8
|
+
exports.postGetDescription = [
|
|
9
|
+
{
|
|
10
|
+
displayName: 'Post ID',
|
|
11
|
+
name: 'postId',
|
|
12
|
+
type: 'string',
|
|
13
|
+
required: true,
|
|
14
|
+
default: '',
|
|
15
|
+
displayOptions: { show: showOnlyForPostGet },
|
|
16
|
+
description: 'The ID of the post to retrieve',
|
|
17
|
+
},
|
|
18
|
+
];
|
|
19
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../../nodes/Strijpsocial/resources/post/get.ts"],"names":[],"mappings":";;;AAEA,MAAM,kBAAkB,GAAG;IAC1B,SAAS,EAAE,CAAC,KAAK,CAAC;IAClB,QAAQ,EAAE,CAAC,MAAM,CAAC;CAClB,CAAC;AAEW,QAAA,kBAAkB,GAAsB;IACpD;QACC,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,EAAE;QACX,cAAc,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;QAC5C,WAAW,EAAE,gCAAgC;KAC7C;CACD,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.postGetManyDescription = void 0;
|
|
4
|
+
const showOnlyForPostGetMany = {
|
|
5
|
+
operation: ['getAll'],
|
|
6
|
+
resource: ['post'],
|
|
7
|
+
};
|
|
8
|
+
exports.postGetManyDescription = [
|
|
9
|
+
{
|
|
10
|
+
displayName: 'Limit',
|
|
11
|
+
name: 'limit',
|
|
12
|
+
type: 'number',
|
|
13
|
+
default: 50,
|
|
14
|
+
typeOptions: { minValue: 1 },
|
|
15
|
+
displayOptions: { show: showOnlyForPostGetMany },
|
|
16
|
+
routing: {
|
|
17
|
+
send: { type: 'query', property: 'limit' },
|
|
18
|
+
output: { maxResults: '={{$value}}' },
|
|
19
|
+
},
|
|
20
|
+
description: 'Max number of results to return',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
displayName: 'Filters',
|
|
24
|
+
name: 'filters',
|
|
25
|
+
type: 'collection',
|
|
26
|
+
placeholder: 'Add Filter',
|
|
27
|
+
default: {},
|
|
28
|
+
displayOptions: { show: showOnlyForPostGetMany },
|
|
29
|
+
options: [
|
|
30
|
+
{
|
|
31
|
+
displayName: 'Week',
|
|
32
|
+
name: 'week',
|
|
33
|
+
type: 'string',
|
|
34
|
+
default: '',
|
|
35
|
+
placeholder: '2026-09-14',
|
|
36
|
+
description: 'Filter to a week, given as a date (YYYY-MM-DD) within it',
|
|
37
|
+
routing: {
|
|
38
|
+
send: { type: 'query', property: 'week' },
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
displayName: 'Status',
|
|
43
|
+
name: 'status',
|
|
44
|
+
type: 'options',
|
|
45
|
+
default: 'scheduled',
|
|
46
|
+
options: [
|
|
47
|
+
{ name: 'Draft', value: 'draft' },
|
|
48
|
+
{ name: 'Scheduled', value: 'scheduled' },
|
|
49
|
+
{ name: 'Needs Approval', value: 'needs_approval' },
|
|
50
|
+
],
|
|
51
|
+
routing: {
|
|
52
|
+
send: { type: 'query', property: 'status' },
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
displayName: 'Channel Name or ID',
|
|
57
|
+
name: 'channelId',
|
|
58
|
+
type: 'options',
|
|
59
|
+
typeOptions: { loadOptionsMethod: 'getChannels' },
|
|
60
|
+
default: '',
|
|
61
|
+
description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>',
|
|
62
|
+
routing: {
|
|
63
|
+
send: { type: 'query', property: 'channel_id' },
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
//# sourceMappingURL=getAll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getAll.js","sourceRoot":"","sources":["../../../../../nodes/Strijpsocial/resources/post/getAll.ts"],"names":[],"mappings":";;;AAEA,MAAM,sBAAsB,GAAG;IAC9B,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,QAAQ,EAAE,CAAC,MAAM,CAAC;CAClB,CAAC;AAEW,QAAA,sBAAsB,GAAsB;IACxD;QACC,WAAW,EAAE,OAAO;QACpB,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;QAC5B,cAAc,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE;QAChD,OAAO,EAAE;YACR,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE;YAC1C,MAAM,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE;SACrC;QACD,WAAW,EAAE,iCAAiC;KAC9C;IACD;QACC,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,EAAE;QACX,cAAc,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE;QAChD,OAAO,EAAE;YACR;gBACC,WAAW,EAAE,MAAM;gBACnB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,YAAY;gBACzB,WAAW,EAAE,0DAA0D;gBACvE,OAAO,EAAE;oBACR,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;iBACzC;aACD;YACD;gBACC,WAAW,EAAE,QAAQ;gBACrB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE;oBACR,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;oBACjC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;oBACzC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE;iBACnD;gBACD,OAAO,EAAE;oBACR,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;iBAC3C;aACD;YACD;gBACC,WAAW,EAAE,oBAAoB;gBACjC,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,EAAE,iBAAiB,EAAE,aAAa,EAAE;gBACjD,OAAO,EAAE,EAAE;gBACX,WAAW,EACV,gHAAgH;gBACjH,OAAO,EAAE;oBACR,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE;iBAC/C;aACD;SACD;KACD;CACD,CAAC"}
|