n8n-nodes-sendit 1.0.4 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +109 -39
- package/dist/credentials/SendItApi.credentials.js +5 -2
- package/dist/nodes/SendIt/SendIt.node.js +2284 -224
- package/dist/nodes/SendIt/SendItTrigger.node.js +157 -58
- package/dist/nodes/SendIt/sendit.svg +22 -4
- package/package.json +13 -3
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# n8n-nodes-sendit
|
|
2
2
|
|
|
3
|
-
This is an n8n community node for [SendIt](https://sendit.infiniteappsai.com) -
|
|
3
|
+
This is an n8n community node for [SendIt](https://sendit.infiniteappsai.com), an AI-native multi-platform social publishing API.
|
|
4
4
|
|
|
5
5
|
[n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.
|
|
6
6
|
|
|
@@ -12,62 +12,132 @@ Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes
|
|
|
12
12
|
npm install n8n-nodes-sendit
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## Node Coverage (v1.1.0)
|
|
16
16
|
|
|
17
|
-
###
|
|
17
|
+
### Trigger
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
19
|
+
`SendIt Trigger` supports catalog events plus custom override:
|
|
20
|
+
|
|
21
|
+
- Post lifecycle: `post.published`, `post.scheduled`, `post.failed`, `post.deleted`, `post.dead_lettered`
|
|
22
|
+
- Account lifecycle: `account.connected`, `account.disconnected`, `account.token_expiring`, `account.token_refresh_failed`, `account.reconnect_required`, `account.refresh_recovered`, `account.auth_recovery_completed`
|
|
23
|
+
- Listening: `mention.detected`, `mention.negative_sentiment`
|
|
24
|
+
- Team: `team.member_joined`, `team.member_left`, `team.member_role_changed`, `team.invitation_sent`, `team.invitation_accepted`, `team.invitation_declined`
|
|
25
|
+
- Approvals: `approval.submitted`, `approval.step_approved`, `approval.request_changes`, `approval.rejected`
|
|
26
|
+
- Analytics/Security/Audit: `analytics.anomaly_detected`, `security.api_key_rotation_due`, `audit.critical`
|
|
27
|
+
|
|
28
|
+
`Custom Event` lets you subscribe to an event string not listed yet in the static dropdown.
|
|
25
29
|
|
|
26
30
|
### Actions
|
|
27
31
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
| Resource | Operation(s) |
|
|
33
|
+
|----------|---------------|
|
|
34
|
+
| `post` | `publish`, `publishAi` |
|
|
35
|
+
| `ai` | `generate` |
|
|
36
|
+
| `media` | `upload` |
|
|
37
|
+
| `scheduledPost` | `create`, `getAll`, `delete`, `trigger` |
|
|
38
|
+
| `account` | `getAll` |
|
|
39
|
+
| `validation` | `validate` |
|
|
40
|
+
| `analytics` | `getAnalytics` |
|
|
41
|
+
| `brandVoice` | `create`, `list` |
|
|
42
|
+
| `campaign` | `plan`, `list`, `schedule` |
|
|
43
|
+
| `inbox` | `list`, `reply`, `getThread`, `updateStatus` |
|
|
44
|
+
| `listening` | `refresh`, `listKeywords`, `createKeyword`, `getKeyword`, `updateKeyword`, `deleteKeyword`, `listMentions`, `getMention`, `markMentionsRead`, `archiveMentions`, `listAlerts`, `markAlertsRead`, `dismissAlerts`, `getSummary` |
|
|
45
|
+
| `aiMedia` | `create`, `getStatus` |
|
|
46
|
+
| `meta` | `getCapabilities`, `getRequirements`, `getPlatformSettingsSchema`, `getBestTimes`, `getWebhookEventsCatalog`, `getWebhookTriggers` |
|
|
47
|
+
| `contentScore` | `score` |
|
|
48
|
+
| `library` | `list`, `create`, `get`, `update`, `delete`, `listCategories`, `listTags` |
|
|
49
|
+
| `approvals` | `list`, `approve`, `reject` |
|
|
50
|
+
| `bulkSchedule` | `listImports`, `getImport`, `validateCsv`, `importCsv`, `downloadTemplate` |
|
|
51
|
+
| `connect` | `getConnectAction`, `connectToken`, `connectWebhook` |
|
|
52
|
+
| `webhooks` | `testWebhook` |
|
|
53
|
+
| `advanced` | `apiRequest` |
|
|
54
|
+
|
|
55
|
+
### Global Optional Headers
|
|
56
|
+
|
|
57
|
+
The action node supports optional request-scoped headers:
|
|
58
|
+
|
|
59
|
+
- `teamId` -> sent as `X-Team-ID`
|
|
60
|
+
- `idempotencyKey` -> sent as `Idempotency-Key`
|
|
35
61
|
|
|
36
62
|
## Supported Platforms
|
|
37
63
|
|
|
38
|
-
-
|
|
39
|
-
- Instagram
|
|
40
|
-
- Threads
|
|
41
|
-
- TikTok
|
|
42
|
-
- X (Twitter)
|
|
64
|
+
The node ships with the full SendIt platform catalog option list and should be treated as catalog-driven. Always use capabilities/meta operations (`meta.getCapabilities`) to verify current operator-side availability.
|
|
43
65
|
|
|
44
|
-
##
|
|
66
|
+
## Examples
|
|
45
67
|
|
|
46
|
-
|
|
68
|
+
### Connect token credentials (`connect.connectToken`)
|
|
47
69
|
|
|
48
|
-
|
|
70
|
+
`Credentials JSON` example:
|
|
49
71
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
4. Give it a name (e.g., "n8n Integration") and click Create
|
|
54
|
-
5. **Copy your API key immediately** - it's only shown once!
|
|
72
|
+
```json
|
|
73
|
+
{"apiKey":"your-platform-key","apiSecret":"your-platform-secret"}
|
|
74
|
+
```
|
|
55
75
|
|
|
56
|
-
###
|
|
76
|
+
### Create library item (`library.create`)
|
|
57
77
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
78
|
+
- `libraryTitle`: `Weekly Product Update`
|
|
79
|
+
- `libraryText`: `New launch highlights...`
|
|
80
|
+
- `libraryType`: `template`
|
|
81
|
+
- `libraryTargetPlatforms`: `linkedin`, `x`
|
|
82
|
+
|
|
83
|
+
### Approve scheduled post (`approvals.approve`)
|
|
84
|
+
|
|
85
|
+
- `approvalPostId`: `sched_abc123`
|
|
86
|
+
- `approvalComment`: `Approved for publishing`
|
|
87
|
+
|
|
88
|
+
### Advanced request (`advanced.apiRequest`)
|
|
89
|
+
|
|
90
|
+
- `method`: `GET`
|
|
91
|
+
- `path`: `/api/v2/capabilities`
|
|
92
|
+
- `queryJson`: `{"include_beta":"1"}`
|
|
93
|
+
- `responseMode`: `json`
|
|
94
|
+
|
|
95
|
+
Allowed path prefixes:
|
|
61
96
|
|
|
62
|
-
|
|
97
|
+
- `/api/v1/`
|
|
98
|
+
- `/api/v2/`
|
|
63
99
|
|
|
64
|
-
|
|
100
|
+
## API Contract Notes
|
|
65
101
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
102
|
+
- Inbox replies use `text` in `POST /api/v1/inbox/:threadId/reply`.
|
|
103
|
+
- Campaign planning uses `brief` + `platforms` (optional `postCount`, `startDate`, `endDate`).
|
|
104
|
+
- AI media create uses `provider`, `prompt`, `media_type`, and `parameters`.
|
|
105
|
+
- Bulk CSV validation/import expect raw CSV string in `csvContent`.
|
|
69
106
|
|
|
70
|
-
|
|
107
|
+
## Developer Note: 1.1.0 Endpoint Map Freeze
|
|
108
|
+
|
|
109
|
+
### Typed coverage (locked)
|
|
110
|
+
|
|
111
|
+
- Meta: `/capabilities`, `/requirements`, `/platforms/schema`, `/best-times`, `/webhooks/events-catalog`, `/webhooks/triggers`
|
|
112
|
+
- Publishing/scheduling: `/publish`, `/publish-ai`, `/schedule`, `/scheduled`, `/scheduled/:id`, `/scheduled/:id/trigger`
|
|
113
|
+
- AI/media: `/ai/generate-content`, `/media/upload`, `/ai-media`, `/ai-media/:id`
|
|
114
|
+
- Quality/validation: `/validate`, `/content-score`, `/analytics`
|
|
115
|
+
- Collaboration: `/inbox`, `/inbox/:threadId`, `/inbox/:threadId/reply`, `/inbox/:threadId/status`
|
|
116
|
+
- Listening: `/listening/*` keyword/mention/alert/summary/refresh routes
|
|
117
|
+
- Library: `/library`, `/library/:id`, `/library/categories`, `/library/tags`
|
|
118
|
+
- Approvals: `/approvals`, `/approvals/:postId/approve`, `/approvals/:postId/reject`
|
|
119
|
+
- Bulk: `/bulk-schedule`, `/bulk-schedule/:id`, `/bulk-schedule/validate`, `/bulk-schedule/import`, `/bulk-schedule/template`
|
|
120
|
+
- Connect: `/connect/:platform`, `/connect/token`, `/connect/webhook`
|
|
121
|
+
- Webhook helper: `/webhooks/:id/test`
|
|
122
|
+
|
|
123
|
+
### Advanced coverage (long-tail + v2)
|
|
124
|
+
|
|
125
|
+
Use `advanced.apiRequest` for operations outside typed coverage, including v2 dashboard-heavy surfaces.
|
|
126
|
+
|
|
127
|
+
## Credentials
|
|
128
|
+
|
|
129
|
+
To use this node, you need a SendIt API key:
|
|
130
|
+
|
|
131
|
+
1. Sign in to [SendIt](https://sendit.infiniteappsai.com)
|
|
132
|
+
2. Open your [Dashboard](https://sendit.infiniteappsai.com/dashboard)
|
|
133
|
+
3. Create an API key in **API Keys**
|
|
134
|
+
4. Configure in n8n under **Credentials** -> **SendIt API**
|
|
135
|
+
|
|
136
|
+
API key format:
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
sk_live_<32_character_string>
|
|
140
|
+
```
|
|
71
141
|
|
|
72
142
|
## Resources
|
|
73
143
|
|
|
@@ -17,7 +17,7 @@ class SendItApi {
|
|
|
17
17
|
default: '',
|
|
18
18
|
required: true,
|
|
19
19
|
placeholder: 'sk_live_your_api_key_here',
|
|
20
|
-
description: 'Your SendIt API key. Get it from Dashboard → API Keys → Create New Key. Format: sk_live_...',
|
|
20
|
+
description: 'Your SendIt API key. Get it from Dashboard → API Keys → Create New Key. Format: sk_live_... Restricted-scope keys are supported; operations requiring unavailable scopes will return API errors when executed.',
|
|
21
21
|
},
|
|
22
22
|
];
|
|
23
23
|
this.authenticate = {
|
|
@@ -31,7 +31,10 @@ class SendItApi {
|
|
|
31
31
|
this.test = {
|
|
32
32
|
request: {
|
|
33
33
|
baseURL: 'https://sendit.infiniteappsai.com/api/v1',
|
|
34
|
-
url: '/
|
|
34
|
+
url: '/inbox',
|
|
35
|
+
qs: {
|
|
36
|
+
limit: 1,
|
|
37
|
+
},
|
|
35
38
|
},
|
|
36
39
|
};
|
|
37
40
|
}
|