Skip to content

Commit 73f4b8a

Browse files
Add admin actions
1 parent b4aa781 commit 73f4b8a

14 files changed

Lines changed: 334 additions & 3 deletions

nodes/LinkedApi/LinkedApi.node.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,22 @@ import {
4646
AdminGetSubscriptionStatus,
4747
AdminGetSeats,
4848
AdminSetSeats,
49+
AdminGetSubscriptionPricing,
50+
AdminGetBillingLink,
51+
AdminCancelSubscription,
4952
AdminGetAccounts,
53+
AdminReparseAccountInfo,
54+
AdminCreateReconnectionSession,
5055
AdminConnectAccount,
56+
AdminGetConnectionSession,
57+
AdminCancelConnectionSession,
5158
AdminDisconnectAccount,
5259
AdminRegenerateToken,
60+
AdminGetLimitsDefaults,
61+
AdminGetLimits,
5362
AdminGetLimitsUsage,
5463
AdminSetLimits,
64+
AdminDeleteLimits,
5565
AdminResetLimits,
5666
} from './operations';
5767
import { LinkedApiOperation } from './shared/LinkedApiOperation';
@@ -91,12 +101,22 @@ const operations: Record<string, LinkedApiOperation> = {
91101
adminGetSubscriptionStatus: new AdminGetSubscriptionStatus(),
92102
adminGetSeats: new AdminGetSeats(),
93103
adminSetSeats: new AdminSetSeats(),
104+
adminGetSubscriptionPricing: new AdminGetSubscriptionPricing(),
105+
adminGetBillingLink: new AdminGetBillingLink(),
106+
adminCancelSubscription: new AdminCancelSubscription(),
94107
adminGetAccounts: new AdminGetAccounts(),
108+
adminReparseAccountInfo: new AdminReparseAccountInfo(),
109+
adminCreateReconnectionSession: new AdminCreateReconnectionSession(),
95110
adminConnectAccount: new AdminConnectAccount(),
111+
adminGetConnectionSession: new AdminGetConnectionSession(),
112+
adminCancelConnectionSession: new AdminCancelConnectionSession(),
96113
adminDisconnectAccount: new AdminDisconnectAccount(),
97114
adminRegenerateToken: new AdminRegenerateToken(),
115+
adminGetLimitsDefaults: new AdminGetLimitsDefaults(),
116+
adminGetLimits: new AdminGetLimits(),
98117
adminGetLimitsUsage: new AdminGetLimitsUsage(),
99118
adminSetLimits: new AdminSetLimits(),
119+
adminDeleteLimits: new AdminDeleteLimits(),
100120
adminResetLimits: new AdminResetLimits(),
101121
};
102122

@@ -128,7 +148,7 @@ export class LinkedApi implements INodeType {
128148
location: 'outputPane',
129149
whenToDisplay: 'beforeExecution',
130150
displayCondition:
131-
'={{ !["getWorkflowResult", "cancelWorkflow", "pollConversations", "actionsUsageStatistics", "adminGetSubscriptionStatus", "adminGetSeats", "adminSetSeats", "adminGetAccounts", "adminConnectAccount", "adminDisconnectAccount", "adminRegenerateToken", "adminGetLimitsUsage", "adminSetLimits", "adminResetLimits"].includes($parameter["operation"]) }}',
151+
'={{ !["getWorkflowResult", "cancelWorkflow", "pollConversations", "actionsUsageStatistics", "adminGetSubscriptionStatus", "adminGetSeats", "adminSetSeats", "adminGetSubscriptionPricing", "adminGetBillingLink", "adminCancelSubscription", "adminGetAccounts", "adminReparseAccountInfo", "adminCreateReconnectionSession", "adminConnectAccount", "adminGetConnectionSession", "adminCancelConnectionSession", "adminDisconnectAccount", "adminRegenerateToken", "adminGetLimitsDefaults", "adminGetLimits", "adminGetLimitsUsage", "adminSetLimits", "adminDeleteLimits", "adminResetLimits"].includes($parameter["operation"]) }}',
132152
},
133153
],
134154
credentials: [
@@ -181,12 +201,22 @@ export class LinkedApi implements INodeType {
181201
...operations.adminGetSubscriptionStatus.operationFields,
182202
...operations.adminGetSeats.operationFields,
183203
...operations.adminSetSeats.operationFields,
204+
...operations.adminGetSubscriptionPricing.operationFields,
205+
...operations.adminGetBillingLink.operationFields,
206+
...operations.adminCancelSubscription.operationFields,
184207
...operations.adminGetAccounts.operationFields,
208+
...operations.adminReparseAccountInfo.operationFields,
209+
...operations.adminCreateReconnectionSession.operationFields,
185210
...operations.adminConnectAccount.operationFields,
211+
...operations.adminGetConnectionSession.operationFields,
212+
...operations.adminCancelConnectionSession.operationFields,
186213
...operations.adminDisconnectAccount.operationFields,
187214
...operations.adminRegenerateToken.operationFields,
215+
...operations.adminGetLimitsDefaults.operationFields,
216+
...operations.adminGetLimits.operationFields,
188217
...operations.adminGetLimitsUsage.operationFields,
189218
...operations.adminSetLimits.operationFields,
219+
...operations.adminDeleteLimits.operationFields,
190220
...operations.adminResetLimits.operationFields,
191221
],
192222
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { IExecuteFunctions, INodeProperties } from 'n8n-workflow';
2+
import { createParameterWithDisplayOptions } from '../../shared/SharedParameters';
3+
import { AdminLinkedApiOperation } from '../../shared/AdminOperation';
4+
import { AVAILABLE_ACTION } from '../../shared/AvailableActions';
5+
6+
export class AdminCancelConnectionSession extends AdminLinkedApiOperation {
7+
operationName = AVAILABLE_ACTION.adminCancelConnectionSession;
8+
endpoint = 'accounts.cancelConnectionSession';
9+
fields: INodeProperties[] = [
10+
createParameterWithDisplayOptions(
11+
{
12+
displayName: 'Session ID',
13+
name: 'sessionId',
14+
type: 'string',
15+
required: true,
16+
default: '',
17+
description: 'Connection or reconnection session UUID',
18+
},
19+
this.show,
20+
),
21+
];
22+
requestBody = (context: IExecuteFunctions): Record<string, any> => ({
23+
sessionId: this.stringParameter(context, 'sessionId'),
24+
});
25+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { IExecuteFunctions, INodeProperties } from 'n8n-workflow';
2+
import { AdminLinkedApiOperation } from '../../shared/AdminOperation';
3+
import { AVAILABLE_ACTION } from '../../shared/AvailableActions';
4+
5+
export class AdminCancelSubscription extends AdminLinkedApiOperation {
6+
operationName = AVAILABLE_ACTION.adminCancelSubscription;
7+
endpoint = 'subscription.cancel';
8+
fields: INodeProperties[] = [];
9+
requestBody = (_: IExecuteFunctions): Record<string, any> | undefined => undefined;
10+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { IExecuteFunctions, INodeProperties } from 'n8n-workflow';
2+
import { createParameterWithDisplayOptions } from '../../shared/SharedParameters';
3+
import { AdminLinkedApiOperation } from '../../shared/AdminOperation';
4+
import { AVAILABLE_ACTION } from '../../shared/AvailableActions';
5+
6+
export class AdminCreateReconnectionSession extends AdminLinkedApiOperation {
7+
operationName = AVAILABLE_ACTION.adminCreateReconnectionSession;
8+
endpoint = 'accounts.createReconnectionSession';
9+
fields: INodeProperties[] = [
10+
createParameterWithDisplayOptions(
11+
{
12+
displayName: 'Account ID',
13+
name: 'accountId',
14+
type: 'string',
15+
required: true,
16+
default: '',
17+
description: 'UUID of the account to reconnect',
18+
},
19+
this.show,
20+
),
21+
];
22+
requestBody = (context: IExecuteFunctions): Record<string, any> => ({
23+
accountId: this.stringParameter(context, 'accountId'),
24+
});
25+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { IExecuteFunctions, INodeProperties, NodeOperationError } from 'n8n-workflow';
2+
import { createParameterWithDisplayOptions } from '../../shared/SharedParameters';
3+
import { AdminLinkedApiOperation } from '../../shared/AdminOperation';
4+
import { AVAILABLE_ACTION } from '../../shared/AvailableActions';
5+
6+
export class AdminDeleteLimits extends AdminLinkedApiOperation {
7+
operationName = AVAILABLE_ACTION.adminDeleteLimits;
8+
endpoint = 'limits.delete';
9+
fields: INodeProperties[] = [
10+
createParameterWithDisplayOptions(
11+
{
12+
displayName: 'Account ID',
13+
name: 'accountId',
14+
type: 'string',
15+
required: true,
16+
default: '',
17+
description: 'UUID of the account',
18+
},
19+
this.show,
20+
),
21+
createParameterWithDisplayOptions(
22+
{
23+
displayName: 'Limits',
24+
name: 'limits',
25+
type: 'json',
26+
required: true,
27+
default: '[{"category": "stMessages", "period": "daily"}]',
28+
description:
29+
'JSON array of limit keys to delete. Each entry: { category, period (daily/weekly/monthly) }.',
30+
},
31+
this.show,
32+
),
33+
];
34+
requestBody = (context: IExecuteFunctions): Record<string, any> => {
35+
const limitsString = this.stringParameter(context, 'limits');
36+
let limits: unknown;
37+
try {
38+
limits = JSON.parse(limitsString);
39+
} catch {
40+
throw new NodeOperationError(
41+
context.getNode(),
42+
`Invalid JSON format for limits: ${limitsString}`,
43+
{ itemIndex: this.itemIndex },
44+
);
45+
}
46+
if (!Array.isArray(limits)) {
47+
throw new NodeOperationError(context.getNode(), 'Limits must be a JSON array', {
48+
itemIndex: this.itemIndex,
49+
});
50+
}
51+
return {
52+
accountId: this.stringParameter(context, 'accountId'),
53+
limits,
54+
};
55+
};
56+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { IExecuteFunctions, INodeProperties } from 'n8n-workflow';
2+
import { AdminLinkedApiOperation } from '../../shared/AdminOperation';
3+
import { AVAILABLE_ACTION } from '../../shared/AvailableActions';
4+
5+
export class AdminGetBillingLink extends AdminLinkedApiOperation {
6+
operationName = AVAILABLE_ACTION.adminGetBillingLink;
7+
endpoint = 'subscription.getBillingLink';
8+
fields: INodeProperties[] = [];
9+
requestBody = (_: IExecuteFunctions): Record<string, any> | undefined => undefined;
10+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { IExecuteFunctions, INodeProperties } from 'n8n-workflow';
2+
import { createParameterWithDisplayOptions } from '../../shared/SharedParameters';
3+
import { AdminLinkedApiOperation } from '../../shared/AdminOperation';
4+
import { AVAILABLE_ACTION } from '../../shared/AvailableActions';
5+
6+
export class AdminGetConnectionSession extends AdminLinkedApiOperation {
7+
operationName = AVAILABLE_ACTION.adminGetConnectionSession;
8+
endpoint = 'accounts.getConnectionSession';
9+
fields: INodeProperties[] = [
10+
createParameterWithDisplayOptions(
11+
{
12+
displayName: 'Session ID',
13+
name: 'sessionId',
14+
type: 'string',
15+
required: true,
16+
default: '',
17+
description: 'Connection or reconnection session UUID',
18+
},
19+
this.show,
20+
),
21+
];
22+
requestBody = (context: IExecuteFunctions): Record<string, any> => ({
23+
sessionId: this.stringParameter(context, 'sessionId'),
24+
});
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { IExecuteFunctions, INodeProperties } from 'n8n-workflow';
2+
import { createParameterWithDisplayOptions } from '../../shared/SharedParameters';
3+
import { AdminLinkedApiOperation } from '../../shared/AdminOperation';
4+
import { AVAILABLE_ACTION } from '../../shared/AvailableActions';
5+
6+
export class AdminGetLimits extends AdminLinkedApiOperation {
7+
operationName = AVAILABLE_ACTION.adminGetLimits;
8+
endpoint = 'limits.get';
9+
fields: INodeProperties[] = [
10+
createParameterWithDisplayOptions(
11+
{
12+
displayName: 'Account ID',
13+
name: 'accountId',
14+
type: 'string',
15+
required: true,
16+
default: '',
17+
description: 'UUID of the account',
18+
},
19+
this.show,
20+
),
21+
];
22+
requestBody = (context: IExecuteFunctions): Record<string, any> => ({
23+
accountId: this.stringParameter(context, 'accountId'),
24+
});
25+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { IExecuteFunctions, INodeProperties } from 'n8n-workflow';
2+
import { AdminLinkedApiOperation } from '../../shared/AdminOperation';
3+
import { AVAILABLE_ACTION } from '../../shared/AvailableActions';
4+
5+
export class AdminGetLimitsDefaults extends AdminLinkedApiOperation {
6+
operationName = AVAILABLE_ACTION.adminGetLimitsDefaults;
7+
endpoint = 'limits.getDefaults';
8+
fields: INodeProperties[] = [];
9+
requestBody = (_: IExecuteFunctions): Record<string, any> | undefined => undefined;
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { IExecuteFunctions, INodeProperties } from 'n8n-workflow';
2+
import { AdminLinkedApiOperation } from '../../shared/AdminOperation';
3+
import { AVAILABLE_ACTION } from '../../shared/AvailableActions';
4+
5+
export class AdminGetSubscriptionPricing extends AdminLinkedApiOperation {
6+
operationName = AVAILABLE_ACTION.adminGetSubscriptionPricing;
7+
endpoint = 'subscription.getPricing';
8+
fields: INodeProperties[] = [];
9+
requestBody = (_: IExecuteFunctions): Record<string, any> | undefined => undefined;
10+
}

0 commit comments

Comments
 (0)