n8n-nodes-orbitpage 0.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/CHANGELOG.md +11 -0
- package/LICENSE.md +21 -0
- package/README.md +229 -0
- package/dist/credentials/OrbitPageApi.credentials.d.ts +10 -0
- package/dist/credentials/OrbitPageApi.credentials.js +67 -0
- package/dist/credentials/OrbitPageApi.credentials.js.map +1 -0
- package/dist/icons/orbitpage.dark.svg +16 -0
- package/dist/icons/orbitpage.svg +16 -0
- package/dist/nodes/OrbitPage/OrbitPage.node.d.ts +7 -0
- package/dist/nodes/OrbitPage/OrbitPage.node.js +344 -0
- package/dist/nodes/OrbitPage/OrbitPage.node.js.map +1 -0
- package/dist/nodes/OrbitPage/description.d.ts +2 -0
- package/dist/nodes/OrbitPage/description.js +342 -0
- package/dist/nodes/OrbitPage/description.js.map +1 -0
- package/dist/nodes/OrbitPage/operations.d.ts +29 -0
- package/dist/nodes/OrbitPage/operations.js +139 -0
- package/dist/nodes/OrbitPage/operations.js.map +1 -0
- package/dist/nodes/OrbitPage/transport.d.ts +13 -0
- package/dist/nodes/OrbitPage/transport.js +58 -0
- package/dist/nodes/OrbitPage/transport.js.map +1 -0
- package/dist/nodes/OrbitPageTrigger/OrbitPageTrigger.node.d.ts +5 -0
- package/dist/nodes/OrbitPageTrigger/OrbitPageTrigger.node.js +140 -0
- package/dist/nodes/OrbitPageTrigger/OrbitPageTrigger.node.js.map +1 -0
- package/dist/package.json +77 -0
- package/docs/OPERATIONS.md +184 -0
- package/examples/read-workspace.json +41 -0
- package/examples/watch-publication.json +29 -0
- package/package.json +77 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.orbitPageApiRequest = orbitPageApiRequest;
|
|
4
|
+
exports.fullResponse = fullResponse;
|
|
5
|
+
exports.responseRevision = responseRevision;
|
|
6
|
+
function credentialBaseUrl(baseUrl) {
|
|
7
|
+
const normalized = String(baseUrl || 'https://orbitpage.com').trim().replace(/\/+$/, '');
|
|
8
|
+
const parsed = new URL(normalized);
|
|
9
|
+
const localDevelopment = ['localhost', '127.0.0.1', '::1'].includes(parsed.hostname);
|
|
10
|
+
if (parsed.protocol !== 'https:' && !(parsed.protocol === 'http:' && localDevelopment)) {
|
|
11
|
+
throw new Error('OrbitPage Base URL must use HTTPS. HTTP is allowed only for local development.');
|
|
12
|
+
}
|
|
13
|
+
return parsed;
|
|
14
|
+
}
|
|
15
|
+
async function orbitPageApiRequest(context, request) {
|
|
16
|
+
const credentials = await context.getCredentials('orbitPageApi');
|
|
17
|
+
const baseUrl = credentialBaseUrl(credentials.baseUrl);
|
|
18
|
+
if (!request.path.startsWith('/') || request.path.startsWith('//')) {
|
|
19
|
+
throw new Error('OrbitPage API paths must be relative paths beginning with one slash.');
|
|
20
|
+
}
|
|
21
|
+
const options = {
|
|
22
|
+
method: request.method,
|
|
23
|
+
url: `${baseUrl.toString().replace(/\/$/, '')}/api/v1${request.path}`,
|
|
24
|
+
qs: request.qs,
|
|
25
|
+
headers: request.headers,
|
|
26
|
+
body: request.body,
|
|
27
|
+
json: true,
|
|
28
|
+
returnFullResponse: request.returnFullResponse,
|
|
29
|
+
sendCredentialsOnCrossOriginRedirect: false,
|
|
30
|
+
allowedDomains: baseUrl.hostname,
|
|
31
|
+
};
|
|
32
|
+
return await context.helpers.httpRequestWithAuthentication.call(context, 'orbitPageApi', options);
|
|
33
|
+
}
|
|
34
|
+
function fullResponse(value) {
|
|
35
|
+
if (!value || typeof value !== 'object' || !('headers' in value) || !('statusCode' in value)) {
|
|
36
|
+
throw new Error('OrbitPage did not return the expected HTTP response metadata.');
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
function responseRevision(response) {
|
|
41
|
+
var _a, _b;
|
|
42
|
+
const etag = (_a = response.headers.etag) !== null && _a !== void 0 ? _a : response.headers.ETag;
|
|
43
|
+
if (typeof etag === 'string' && etag.trim())
|
|
44
|
+
return etag;
|
|
45
|
+
const revisionHeader = (_b = response.headers['x-orbitpage-revision']) !== null && _b !== void 0 ? _b : response.headers['X-OrbitPage-Revision'];
|
|
46
|
+
if (typeof revisionHeader === 'string' && revisionHeader.trim())
|
|
47
|
+
return revisionHeader;
|
|
48
|
+
if (response.body &&
|
|
49
|
+
typeof response.body === 'object' &&
|
|
50
|
+
!Array.isArray(response.body) &&
|
|
51
|
+
'revision' in response.body) {
|
|
52
|
+
const revision = response.body.revision;
|
|
53
|
+
if (typeof revision === 'number' || typeof revision === 'string')
|
|
54
|
+
return String(revision);
|
|
55
|
+
}
|
|
56
|
+
throw new Error('The revision preflight response did not include an ETag or revision.');
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../nodes/OrbitPage/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { INodeExecutionData, INodeType, INodeTypeDescription, IPollFunctions } from 'n8n-workflow';
|
|
2
|
+
export declare class OrbitPageTrigger implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
poll(this: IPollFunctions): Promise<INodeExecutionData[][] | null>;
|
|
5
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrbitPageTrigger = void 0;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
6
|
+
const transport_1 = require("../OrbitPage/transport");
|
|
7
|
+
const eventPaths = {
|
|
8
|
+
workspaceRevisionChanged: '/workspace',
|
|
9
|
+
publicationChanged: '/publication',
|
|
10
|
+
domainChanged: '/domains',
|
|
11
|
+
shopChanged: '/shop',
|
|
12
|
+
};
|
|
13
|
+
function stableValue(value) {
|
|
14
|
+
if (Array.isArray(value))
|
|
15
|
+
return value.map(stableValue);
|
|
16
|
+
if (value && typeof value === 'object') {
|
|
17
|
+
return Object.fromEntries(Object.entries(value)
|
|
18
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
19
|
+
.map(([key, nested]) => [key, stableValue(nested)]));
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
function observedValue(event, response) {
|
|
24
|
+
if (event === 'workspaceRevisionChanged' &&
|
|
25
|
+
response &&
|
|
26
|
+
typeof response === 'object' &&
|
|
27
|
+
!Array.isArray(response)) {
|
|
28
|
+
const workspace = response;
|
|
29
|
+
return { revision: workspace.revision };
|
|
30
|
+
}
|
|
31
|
+
return response;
|
|
32
|
+
}
|
|
33
|
+
function fingerprint(value) {
|
|
34
|
+
return (0, node_crypto_1.createHash)('sha256').update(JSON.stringify(stableValue(value))).digest('hex');
|
|
35
|
+
}
|
|
36
|
+
function outputValue(value) {
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
class OrbitPageTrigger {
|
|
40
|
+
constructor() {
|
|
41
|
+
this.description = {
|
|
42
|
+
displayName: 'OrbitPage Trigger',
|
|
43
|
+
name: 'orbitPageTrigger',
|
|
44
|
+
icon: {
|
|
45
|
+
light: 'file:../../icons/orbitpage.svg',
|
|
46
|
+
dark: 'file:../../icons/orbitpage.dark.svg',
|
|
47
|
+
},
|
|
48
|
+
group: ['trigger'],
|
|
49
|
+
version: 1,
|
|
50
|
+
subtitle: '={{$parameter["event"]}}',
|
|
51
|
+
description: 'Starts a workflow when selected OrbitPage state changes',
|
|
52
|
+
defaults: { name: 'OrbitPage Trigger' },
|
|
53
|
+
usableAsTool: true,
|
|
54
|
+
inputs: [],
|
|
55
|
+
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
56
|
+
credentials: [{ name: 'orbitPageApi', required: true }],
|
|
57
|
+
polling: true,
|
|
58
|
+
properties: [
|
|
59
|
+
{
|
|
60
|
+
displayName: 'Poll Times',
|
|
61
|
+
name: 'pollTimes',
|
|
62
|
+
type: 'fixedCollection',
|
|
63
|
+
typeOptions: { multipleValues: true, multipleValueButtonText: 'Add Poll Time' },
|
|
64
|
+
default: { item: [{ mode: 'everyMinute' }] },
|
|
65
|
+
description: 'Time at which polling should occur',
|
|
66
|
+
placeholder: 'Add Poll Time',
|
|
67
|
+
options: n8n_workflow_1.cronNodeOptions,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
displayName: 'Event',
|
|
71
|
+
name: 'event',
|
|
72
|
+
type: 'options',
|
|
73
|
+
options: [
|
|
74
|
+
{
|
|
75
|
+
name: 'Custom Domain Changed',
|
|
76
|
+
value: 'domainChanged',
|
|
77
|
+
description: 'DNS requirements, verification or active domain changed',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'Publication State Changed',
|
|
81
|
+
value: 'publicationChanged',
|
|
82
|
+
description: 'Draft revision, published revision, status or public URL changed',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: 'Shop State Changed',
|
|
86
|
+
value: 'shopChanged',
|
|
87
|
+
description: 'Products, commerce connection, appearance or publication state changed',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: 'Workspace Revision Changed',
|
|
91
|
+
value: 'workspaceRevisionChanged',
|
|
92
|
+
description: 'The editable workspace revision changed',
|
|
93
|
+
},
|
|
94
|
+
],
|
|
95
|
+
default: 'workspaceRevisionChanged',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
displayName: 'Emit Initial State',
|
|
99
|
+
name: 'emitInitialState',
|
|
100
|
+
type: 'boolean',
|
|
101
|
+
default: false,
|
|
102
|
+
description: 'Whether the first production poll should emit the current state. Manual tests always return the current state.',
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
async poll() {
|
|
108
|
+
const event = String(this.getNodeParameter('event'));
|
|
109
|
+
const path = eventPaths[event];
|
|
110
|
+
if (!path) {
|
|
111
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Unsupported OrbitPage trigger event: ${event}`);
|
|
112
|
+
}
|
|
113
|
+
const current = await (0, transport_1.orbitPageApiRequest)(this, { method: 'GET', path });
|
|
114
|
+
const signature = fingerprint(observedValue(event, current));
|
|
115
|
+
const staticData = this.getWorkflowStaticData('node');
|
|
116
|
+
const previousSignature = typeof staticData.signature === 'string' ? staticData.signature : null;
|
|
117
|
+
const manual = this.getMode() === 'manual';
|
|
118
|
+
const emitInitialState = this.getNodeParameter('emitInitialState', false) === true;
|
|
119
|
+
if (!manual)
|
|
120
|
+
staticData.signature = signature;
|
|
121
|
+
if (!manual && previousSignature === null && !emitInitialState)
|
|
122
|
+
return null;
|
|
123
|
+
if (!manual && previousSignature === signature)
|
|
124
|
+
return null;
|
|
125
|
+
return [
|
|
126
|
+
this.helpers.returnJsonArray([
|
|
127
|
+
{
|
|
128
|
+
event,
|
|
129
|
+
initial: previousSignature === null,
|
|
130
|
+
previousSignature,
|
|
131
|
+
currentSignature: signature,
|
|
132
|
+
observedAt: new Date().toISOString(),
|
|
133
|
+
data: outputValue(current),
|
|
134
|
+
},
|
|
135
|
+
]),
|
|
136
|
+
];
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
exports.OrbitPageTrigger = OrbitPageTrigger;
|
|
140
|
+
//# sourceMappingURL=OrbitPageTrigger.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrbitPageTrigger.node.js","sourceRoot":"","sources":["../../../nodes/OrbitPageTrigger/OrbitPageTrigger.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "n8n-nodes-orbitpage",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "n8n community nodes for the complete OrbitPage Automation REST API",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"homepage": "https://orbitpage.com/en-US/docs/api-tokens",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"n8n-community-node-package",
|
|
9
|
+
"n8n",
|
|
10
|
+
"orbitpage",
|
|
11
|
+
"automation",
|
|
12
|
+
"website-builder",
|
|
13
|
+
"link-in-bio"
|
|
14
|
+
],
|
|
15
|
+
"author": {
|
|
16
|
+
"name": "Paolo Ronco",
|
|
17
|
+
"email": "paolo.ronco2000@gmail.com"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "https://github.com/paoloronco/n8n-nodes-orbitpage.git"
|
|
22
|
+
},
|
|
23
|
+
"bugs": {
|
|
24
|
+
"url": "https://github.com/paoloronco/n8n-nodes-orbitpage/issues"
|
|
25
|
+
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=22.0.0"
|
|
28
|
+
},
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "n8n-node build",
|
|
31
|
+
"build:watch": "tsc --watch",
|
|
32
|
+
"dev": "n8n-node dev",
|
|
33
|
+
"lint": "n8n-node lint",
|
|
34
|
+
"lint:fix": "n8n-node lint --fix",
|
|
35
|
+
"test": "vitest run test",
|
|
36
|
+
"docs:generate": "node scripts/generate-operation-docs.cjs",
|
|
37
|
+
"docs:check": "node scripts/generate-operation-docs.cjs --check",
|
|
38
|
+
"check": "npm run lint && npm run build && npm run docs:check && npm run test",
|
|
39
|
+
"release": "n8n-node release",
|
|
40
|
+
"prepublishOnly": "n8n-node prerelease"
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"dist",
|
|
44
|
+
"docs",
|
|
45
|
+
"examples",
|
|
46
|
+
"README.md",
|
|
47
|
+
"CHANGELOG.md",
|
|
48
|
+
"LICENSE.md"
|
|
49
|
+
],
|
|
50
|
+
"n8n": {
|
|
51
|
+
"n8nNodesApiVersion": 1,
|
|
52
|
+
"strict": true,
|
|
53
|
+
"credentials": [
|
|
54
|
+
"dist/credentials/OrbitPageApi.credentials.js"
|
|
55
|
+
],
|
|
56
|
+
"nodes": [
|
|
57
|
+
"dist/nodes/OrbitPage/OrbitPage.node.js",
|
|
58
|
+
"dist/nodes/OrbitPageTrigger/OrbitPageTrigger.node.js"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
"publishConfig": {
|
|
62
|
+
"access": "public",
|
|
63
|
+
"provenance": true
|
|
64
|
+
},
|
|
65
|
+
"devDependencies": {
|
|
66
|
+
"@n8n/node-cli": "0.42.0",
|
|
67
|
+
"eslint": "9.39.4",
|
|
68
|
+
"n8n-workflow": "2.16.0",
|
|
69
|
+
"prettier": "3.8.3",
|
|
70
|
+
"release-it": "20.2.0",
|
|
71
|
+
"typescript": "5.9.3",
|
|
72
|
+
"vitest": "4.1.4"
|
|
73
|
+
},
|
|
74
|
+
"peerDependencies": {
|
|
75
|
+
"n8n-workflow": "*"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# OrbitPage operation matrix
|
|
2
|
+
|
|
3
|
+
This file is generated from the typed n8n operation catalog. It covers every operation in the OrbitPage OpenAPI 3.1 contract at `https://orbitpage.com/api/openapi.json`.
|
|
4
|
+
|
|
5
|
+
All paths below are relative to `/api/v1`. Guided operations authenticate with the selected **OrbitPage API** credential. Operations marked with a revision source automatically read that endpoint and send its latest `ETag` or revision as `If-Match`.
|
|
6
|
+
|
|
7
|
+
## AI
|
|
8
|
+
|
|
9
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
10
|
+
| --- | --- | --- | --- | --- | --- |
|
|
11
|
+
| Get Allowance | GET | `/ai/allowance` | `ai:read` | none | — |
|
|
12
|
+
| Plan Changes | POST | `/ai/plan` | `ai:write` | required | — |
|
|
13
|
+
| Commit Changes | POST | `/ai/commit` | `ai:write` | required | — |
|
|
14
|
+
|
|
15
|
+
## Analytics
|
|
16
|
+
|
|
17
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
18
|
+
| --- | --- | --- | --- | --- | --- |
|
|
19
|
+
| Get Analytics | GET | `/analytics` | `analytics:read` | none | — |
|
|
20
|
+
|
|
21
|
+
## Backup and Version
|
|
22
|
+
|
|
23
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
24
|
+
| --- | --- | --- | --- | --- | --- |
|
|
25
|
+
| Get Many Versions | GET | `/versions` | `backup:read` | none | — |
|
|
26
|
+
| Restore Version | POST | `/versions/{revision}/restore` | `backup:write` | none | `/draft` |
|
|
27
|
+
| Export Backup | GET | `/backup` | `backup:read` | none | — |
|
|
28
|
+
| Restore Backup | POST | `/backup/restore` | `backup:write` | required | `/draft` |
|
|
29
|
+
|
|
30
|
+
## Billing
|
|
31
|
+
|
|
32
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
33
|
+
| --- | --- | --- | --- | --- | --- |
|
|
34
|
+
| Get Billing | GET | `/billing` | `billing:read` | none | — |
|
|
35
|
+
| Create Checkout | POST | `/billing/checkout` | `billing:write` | required | — |
|
|
36
|
+
| Create Portal Session | POST | `/billing/portal` | `billing:write` | optional | — |
|
|
37
|
+
| Redeem Promotion Code | POST | `/billing/promotion-code` | `billing:write` | required | — |
|
|
38
|
+
|
|
39
|
+
## Block
|
|
40
|
+
|
|
41
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
42
|
+
| --- | --- | --- | --- | --- | --- |
|
|
43
|
+
| Get Many Blocks | GET | `/links` | `links:read` | none | — |
|
|
44
|
+
| Replace Blocks | PUT | `/links` | `links:write` | required | `/links` |
|
|
45
|
+
| Update Block | PATCH | `/links/{linkId}` | `links:write` | required | `/links` |
|
|
46
|
+
|
|
47
|
+
## Custom Domain
|
|
48
|
+
|
|
49
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
50
|
+
| --- | --- | --- | --- | --- | --- |
|
|
51
|
+
| Get Domain | GET | `/domains` | `domains:read` | none | — |
|
|
52
|
+
| Connect Domain | POST | `/domains` | `domains:write` | required | — |
|
|
53
|
+
| Refresh Domain | POST | `/domains/refresh` | `domains:write` | none | — |
|
|
54
|
+
| Disconnect Domain | DELETE | `/domains` | `domains:write` | none | — |
|
|
55
|
+
|
|
56
|
+
## Media
|
|
57
|
+
|
|
58
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
59
|
+
| --- | --- | --- | --- | --- | --- |
|
|
60
|
+
| Get Many Media Items | GET | `/media` | `media:read` | none | — |
|
|
61
|
+
| Clean Up Media | POST | `/media/cleanup` | `media:write` | optional | — |
|
|
62
|
+
| Reserve Video Upload | POST | `/media/uploads/reserve` | `media:write` | required | — |
|
|
63
|
+
| Finalize Video Upload | POST | `/media/uploads/finalize` | `media:write` | required | — |
|
|
64
|
+
| Abort Video Upload | DELETE | `/media/uploads` | `media:write` | required | — |
|
|
65
|
+
|
|
66
|
+
## Newsletter
|
|
67
|
+
|
|
68
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
69
|
+
| --- | --- | --- | --- | --- | --- |
|
|
70
|
+
| Get Newsletter | GET | `/newsletter` | `newsletter:read` | none | — |
|
|
71
|
+
| Update SMTP Settings | PUT | `/newsletter/settings` | `newsletter:write` | required | — |
|
|
72
|
+
| Test SMTP Settings | POST | `/newsletter/settings/test` | `newsletter:write` | required | — |
|
|
73
|
+
| Add Subscriber | POST | `/newsletter/subscribers` | `newsletter:write` | required | — |
|
|
74
|
+
| Remove Subscriber | DELETE | `/newsletter/subscribers/{subscriberId}` | `newsletter:write` | none | — |
|
|
75
|
+
| Save Campaign | POST | `/newsletter/campaigns` | `newsletter:write` | required | — |
|
|
76
|
+
| Delete Campaign | DELETE | `/newsletter/campaigns/{campaignId}` | `newsletter:write` | none | — |
|
|
77
|
+
| Send or Schedule Campaign | POST | `/newsletter/campaigns/{campaignId}/send` | `newsletter:write` | optional | — |
|
|
78
|
+
| Cancel Campaign | DELETE | `/newsletter/campaigns/{campaignId}/send` | `newsletter:write` | none | — |
|
|
79
|
+
|
|
80
|
+
## Operator
|
|
81
|
+
|
|
82
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
83
|
+
| --- | --- | --- | --- | --- | --- |
|
|
84
|
+
| Get Overview | GET | `/operator/overview` | `operator:read` | none | — |
|
|
85
|
+
| Get Many CRM Prospects | GET | `/operator/crm` | `operator:read` | none | — |
|
|
86
|
+
| Create CRM Prospect | POST | `/operator/crm` | `operator:write` | required | — |
|
|
87
|
+
| Get CRM Prospect | GET | `/operator/crm/{prospectId}` | `operator:read` | none | — |
|
|
88
|
+
| Update CRM Prospect | PATCH | `/operator/crm/{prospectId}` | `operator:write` | required | — |
|
|
89
|
+
| Save CRM Note | POST | `/operator/crm/{prospectId}/notes` | `operator:write` | required | — |
|
|
90
|
+
| Save CRM Message | POST | `/operator/crm/{prospectId}/messages` | `operator:write` | required | — |
|
|
91
|
+
| Update CRM Activity | PATCH | `/operator/crm/{prospectId}/activities/{activityId}` | `operator:write` | required | — |
|
|
92
|
+
| Link CRM Workspace | POST | `/operator/crm/{prospectId}/link` | `operator:write` | required | — |
|
|
93
|
+
| Onboard CRM Prospect | POST | `/operator/crm/{prospectId}/onboard` | `operator:write` | required | — |
|
|
94
|
+
| Preview Account Email | GET | `/operator/crm/{prospectId}/account-email` | `operator:read` | none | — |
|
|
95
|
+
| Send Account Email | POST | `/operator/crm/{prospectId}/account-email` | `operator:write` | required | — |
|
|
96
|
+
| Get Many Promotion Codes | GET | `/operator/promotion-codes` | `operator:read` | none | — |
|
|
97
|
+
| Create Promotion Code | POST | `/operator/promotion-codes` | `operator:write` | required | — |
|
|
98
|
+
| Update Promotion Code | PATCH | `/operator/promotion-codes/{promotionCodeId}` | `operator:write` | required | — |
|
|
99
|
+
| Moderate Tenant | POST | `/operator/tenants/{tenantId}/moderation` | `operator:write` | required | — |
|
|
100
|
+
| Change Tenant Plan | POST | `/operator/tenants/{tenantId}/plan` | `operator:write` | required | — |
|
|
101
|
+
| Create Demo Access | POST | `/operator/tenants/{tenantId}/demo-access` | `operator:write` | required | — |
|
|
102
|
+
| Revoke Demo Access | DELETE | `/operator/tenants/{tenantId}/demo-access` | `operator:write` | required | — |
|
|
103
|
+
| Delete Tenant | DELETE | `/operator/tenants/{tenantId}` | `operator:write` | required | — |
|
|
104
|
+
|
|
105
|
+
## Page
|
|
106
|
+
|
|
107
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
108
|
+
| --- | --- | --- | --- | --- | --- |
|
|
109
|
+
| Get Many Pages | GET | `/pages` | `pages:read` | none | — |
|
|
110
|
+
| Replace Pages | PUT | `/pages` | `pages:write` | required | `/pages` |
|
|
111
|
+
|
|
112
|
+
## Profile
|
|
113
|
+
|
|
114
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
115
|
+
| --- | --- | --- | --- | --- | --- |
|
|
116
|
+
| Get Profile | GET | `/profile` | `profile:read` | none | — |
|
|
117
|
+
| Update Profile | PATCH | `/profile` | `profile:write` | required | `/profile` |
|
|
118
|
+
|
|
119
|
+
## Publication
|
|
120
|
+
|
|
121
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
122
|
+
| --- | --- | --- | --- | --- | --- |
|
|
123
|
+
| Get Publication Status | GET | `/publication` | `publication:read` | none | — |
|
|
124
|
+
| Publish Page | POST | `/publication` | `publication:write` | none | — |
|
|
125
|
+
|
|
126
|
+
## Settings
|
|
127
|
+
|
|
128
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
129
|
+
| --- | --- | --- | --- | --- | --- |
|
|
130
|
+
| Get Settings | GET | `/settings` | `settings:read` | none | — |
|
|
131
|
+
| Update Menu | PUT | `/settings/menu` | `settings:write` | required | `/settings` |
|
|
132
|
+
| Update Privacy | PUT | `/settings/privacy` | `settings:write` | required | `/settings` |
|
|
133
|
+
| Create Text File | POST | `/settings/text-files` | `settings:write` | required | `/settings` |
|
|
134
|
+
| Update Text File | PUT | `/settings/text-files/{key}` | `settings:write` | required | `/settings` |
|
|
135
|
+
| Delete Text File | DELETE | `/settings/text-files/{key}` | `settings:write` | none | `/settings` |
|
|
136
|
+
| Generate Sitemap | POST | `/settings/sitemap` | `settings:write` | none | `/settings` |
|
|
137
|
+
|
|
138
|
+
## Shop
|
|
139
|
+
|
|
140
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
141
|
+
| --- | --- | --- | --- | --- | --- |
|
|
142
|
+
| Get Shop | GET | `/shop` | `shop:read` | none | — |
|
|
143
|
+
| Connect Shop | POST | `/shop/connect` | `shop:write` | optional | — |
|
|
144
|
+
| Save Product | POST | `/shop/products` | `shop:write` | required | — |
|
|
145
|
+
| Delete Product | DELETE | `/shop/products/{productId}` | `shop:write` | none | — |
|
|
146
|
+
| Update Appearance | PUT | `/shop/appearance` | `shop:write` | required | — |
|
|
147
|
+
| Publish Shop | POST | `/shop/publish` | `shop:write` | none | — |
|
|
148
|
+
| Unpublish Shop | POST | `/shop/unpublish` | `shop:write` | none | — |
|
|
149
|
+
| Reserve File Upload | POST | `/shop/uploads/reserve` | `shop:write` | required | — |
|
|
150
|
+
| Finalize File Upload | POST | `/shop/uploads/finalize` | `shop:write` | required | — |
|
|
151
|
+
|
|
152
|
+
## Team
|
|
153
|
+
|
|
154
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
155
|
+
| --- | --- | --- | --- | --- | --- |
|
|
156
|
+
| Get Team | GET | `/team` | `team:read` | none | — |
|
|
157
|
+
| Invite Member | POST | `/team/invitations` | `team:write` | required | — |
|
|
158
|
+
| Update Member | PATCH | `/team/members/{memberUid}` | `team:write` | required | — |
|
|
159
|
+
| Remove Member | DELETE | `/team/members/{memberUid}` | `team:write` | none | — |
|
|
160
|
+
| Revoke Invitation | DELETE | `/team/invitations/{invitationId}` | `team:write` | none | — |
|
|
161
|
+
|
|
162
|
+
## Theme
|
|
163
|
+
|
|
164
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
165
|
+
| --- | --- | --- | --- | --- | --- |
|
|
166
|
+
| Get Theme | GET | `/theme` | `theme:read` | none | — |
|
|
167
|
+
| Replace Theme | PUT | `/theme` | `theme:write` | required | `/theme` |
|
|
168
|
+
|
|
169
|
+
## Workspace
|
|
170
|
+
|
|
171
|
+
| Operation | Method | Path | Required scope | Body | Revision source |
|
|
172
|
+
| --- | --- | --- | --- | --- | --- |
|
|
173
|
+
| Get Workspace | GET | `/workspace` | `workspace:read` | none | — |
|
|
174
|
+
| Get Complete Draft | GET | `/draft` | `workspace:read` | none | — |
|
|
175
|
+
|
|
176
|
+
## n8n convenience operations
|
|
177
|
+
|
|
178
|
+
| Operation | Resource | Behavior |
|
|
179
|
+
| --- | --- | --- |
|
|
180
|
+
| Upload Video Binary | media | Reserve, upload and finalize an n8n MP4 or WebM binary in one operation |
|
|
181
|
+
| Upload Product File Binary | shop | Reserve, upload and finalize an n8n binary for a digital product in one operation |
|
|
182
|
+
| Custom API Request | advanced | Call a relative OrbitPage API v1 path while keeping authentication in the credential |
|
|
183
|
+
|
|
184
|
+
API operations: **84**. n8n convenience operations: **3**.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "OrbitPage - Read workspace",
|
|
3
|
+
"nodes": [
|
|
4
|
+
{
|
|
5
|
+
"parameters": {},
|
|
6
|
+
"id": "28f851c6-18d0-49d5-a1bd-38135ef09030",
|
|
7
|
+
"name": "When clicking Execute Workflow",
|
|
8
|
+
"type": "n8n-nodes-base.manualTrigger",
|
|
9
|
+
"typeVersion": 1,
|
|
10
|
+
"position": [260, 300]
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"parameters": {
|
|
14
|
+
"resource": "workspace",
|
|
15
|
+
"operation": "getWorkspace",
|
|
16
|
+
"options": {}
|
|
17
|
+
},
|
|
18
|
+
"id": "023da1b6-7a94-4870-93c4-8c0211cfad65",
|
|
19
|
+
"name": "Get OrbitPage Workspace",
|
|
20
|
+
"type": "n8n-nodes-orbitpage.orbitPage",
|
|
21
|
+
"typeVersion": 1,
|
|
22
|
+
"position": [500, 300],
|
|
23
|
+
"credentials": {
|
|
24
|
+
"orbitPageApi": {
|
|
25
|
+
"id": "REPLACE_WITH_YOUR_CREDENTIAL_ID",
|
|
26
|
+
"name": "OrbitPage API account"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"connections": {
|
|
32
|
+
"When clicking Execute Workflow": {
|
|
33
|
+
"main": [[{ "node": "Get OrbitPage Workspace", "type": "main", "index": 0 }]]
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"active": false,
|
|
37
|
+
"settings": {},
|
|
38
|
+
"versionId": "3c82ccb4-bd33-4266-9d40-a0c4685e917c",
|
|
39
|
+
"meta": { "templateCredsSetupCompleted": false },
|
|
40
|
+
"tags": []
|
|
41
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "OrbitPage - Watch publication",
|
|
3
|
+
"nodes": [
|
|
4
|
+
{
|
|
5
|
+
"parameters": {
|
|
6
|
+
"pollTimes": { "item": [{ "mode": "everyMinute" }] },
|
|
7
|
+
"event": "publicationChanged",
|
|
8
|
+
"emitInitialState": false
|
|
9
|
+
},
|
|
10
|
+
"id": "df1b8386-a861-45dd-b7bd-10b6b292aab5",
|
|
11
|
+
"name": "When OrbitPage Publication Changes",
|
|
12
|
+
"type": "n8n-nodes-orbitpage.orbitPageTrigger",
|
|
13
|
+
"typeVersion": 1,
|
|
14
|
+
"position": [300, 300],
|
|
15
|
+
"credentials": {
|
|
16
|
+
"orbitPageApi": {
|
|
17
|
+
"id": "REPLACE_WITH_YOUR_CREDENTIAL_ID",
|
|
18
|
+
"name": "OrbitPage API account"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"connections": {},
|
|
24
|
+
"active": false,
|
|
25
|
+
"settings": {},
|
|
26
|
+
"versionId": "6ba2c023-7054-4ec9-8cb2-34ef8bd57fb1",
|
|
27
|
+
"meta": { "templateCredsSetupCompleted": false },
|
|
28
|
+
"tags": []
|
|
29
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "n8n-nodes-orbitpage",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "n8n community nodes for the complete OrbitPage Automation REST API",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"homepage": "https://orbitpage.com/en-US/docs/api-tokens",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"n8n-community-node-package",
|
|
9
|
+
"n8n",
|
|
10
|
+
"orbitpage",
|
|
11
|
+
"automation",
|
|
12
|
+
"website-builder",
|
|
13
|
+
"link-in-bio"
|
|
14
|
+
],
|
|
15
|
+
"author": {
|
|
16
|
+
"name": "Paolo Ronco",
|
|
17
|
+
"email": "paolo.ronco2000@gmail.com"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "https://github.com/paoloronco/n8n-nodes-orbitpage.git"
|
|
22
|
+
},
|
|
23
|
+
"bugs": {
|
|
24
|
+
"url": "https://github.com/paoloronco/n8n-nodes-orbitpage/issues"
|
|
25
|
+
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=22.0.0"
|
|
28
|
+
},
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "n8n-node build",
|
|
31
|
+
"build:watch": "tsc --watch",
|
|
32
|
+
"dev": "n8n-node dev",
|
|
33
|
+
"lint": "n8n-node lint",
|
|
34
|
+
"lint:fix": "n8n-node lint --fix",
|
|
35
|
+
"test": "vitest run test",
|
|
36
|
+
"docs:generate": "node scripts/generate-operation-docs.cjs",
|
|
37
|
+
"docs:check": "node scripts/generate-operation-docs.cjs --check",
|
|
38
|
+
"check": "npm run lint && npm run build && npm run docs:check && npm run test",
|
|
39
|
+
"release": "n8n-node release",
|
|
40
|
+
"prepublishOnly": "n8n-node prerelease"
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"dist",
|
|
44
|
+
"docs",
|
|
45
|
+
"examples",
|
|
46
|
+
"README.md",
|
|
47
|
+
"CHANGELOG.md",
|
|
48
|
+
"LICENSE.md"
|
|
49
|
+
],
|
|
50
|
+
"n8n": {
|
|
51
|
+
"n8nNodesApiVersion": 1,
|
|
52
|
+
"strict": true,
|
|
53
|
+
"credentials": [
|
|
54
|
+
"dist/credentials/OrbitPageApi.credentials.js"
|
|
55
|
+
],
|
|
56
|
+
"nodes": [
|
|
57
|
+
"dist/nodes/OrbitPage/OrbitPage.node.js",
|
|
58
|
+
"dist/nodes/OrbitPageTrigger/OrbitPageTrigger.node.js"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
"publishConfig": {
|
|
62
|
+
"access": "public",
|
|
63
|
+
"provenance": true
|
|
64
|
+
},
|
|
65
|
+
"devDependencies": {
|
|
66
|
+
"@n8n/node-cli": "0.42.0",
|
|
67
|
+
"eslint": "9.39.4",
|
|
68
|
+
"n8n-workflow": "2.16.0",
|
|
69
|
+
"prettier": "3.8.3",
|
|
70
|
+
"release-it": "20.2.0",
|
|
71
|
+
"typescript": "5.9.3",
|
|
72
|
+
"vitest": "4.1.4"
|
|
73
|
+
},
|
|
74
|
+
"peerDependencies": {
|
|
75
|
+
"n8n-workflow": "*"
|
|
76
|
+
}
|
|
77
|
+
}
|