@lineman-io/n8n-nodes-lineman 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/LICENSE +21 -0
- package/README.md +74 -0
- package/dist/credentials/LinemanApi.credentials.d.ts +9 -0
- package/dist/credentials/LinemanApi.credentials.js +45 -0
- package/dist/credentials/LinemanApi.credentials.js.map +1 -0
- package/dist/nodes/Lineman/Lineman.node.d.ts +4 -0
- package/dist/nodes/Lineman/Lineman.node.js +618 -0
- package/dist/nodes/Lineman/Lineman.node.js.map +1 -0
- package/dist/nodes/Lineman/LinemanTrigger.node.d.ts +5 -0
- package/dist/nodes/Lineman/LinemanTrigger.node.js +69 -0
- package/dist/nodes/Lineman/LinemanTrigger.node.js.map +1 -0
- package/dist/nodes/Lineman/lineman.dark.svg +33 -0
- package/dist/nodes/Lineman/lineman.svg +33 -0
- package/package.json +62 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Goo Holdings Ltd (trading as Lineman)
|
|
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
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# n8n-nodes-lineman
|
|
2
|
+
|
|
3
|
+
An [n8n](https://n8n.io) community node for **[Lineman](https://lineman.io)** — read
|
|
4
|
+
your AI-coding cost, savings, allowance and alerts in a workflow, and drive Lineman
|
|
5
|
+
admin settings, with **zero** Split-Out / Set / Code nodes.
|
|
6
|
+
|
|
7
|
+
Lineman is an AI-powered code assistant that saves cloud-LLM tokens on data-heavy
|
|
8
|
+
tasks. This node talks to the Lineman **`/v1` partner API**, whose responses are
|
|
9
|
+
already flat, `snake_case`, dual-unit money (`*_micro` + `*_usd`, never cents),
|
|
10
|
+
ISO-8601 time, and top-level arrays — so a workflow author maps them straight to
|
|
11
|
+
items.
|
|
12
|
+
|
|
13
|
+
## Credentials
|
|
14
|
+
|
|
15
|
+
Create a **Lineman API** credential:
|
|
16
|
+
|
|
17
|
+
- **API Key** — a durable key from **Dashboard → Keys** (a `fa_live_` key). **Do
|
|
18
|
+
not** paste the token the Lineman CLI/plugin uses — it rotates every ~15 minutes
|
|
19
|
+
and would 401 mid-workflow. Minting a key needs MFA step-up; each user may hold
|
|
20
|
+
up to 10 active keys.
|
|
21
|
+
- **Base URL** — defaults to `https://n8n.lineman.io/v1`. Override for staging
|
|
22
|
+
(`https://n8n.staging.lineman.io/v1`) or a self-hosted control-api.
|
|
23
|
+
|
|
24
|
+
The credential test hits `GET /v1/me`.
|
|
25
|
+
|
|
26
|
+
## Nodes
|
|
27
|
+
|
|
28
|
+
### Lineman (action)
|
|
29
|
+
|
|
30
|
+
| Resource | Operations |
|
|
31
|
+
|---|---|
|
|
32
|
+
| **Account** | Get Identity |
|
|
33
|
+
| **Spend** | Get Summary, Get Breakdown, Get Top Spenders, Get Over Time, Get Recent Activity, Get Ledger |
|
|
34
|
+
| **Savings** | Get Allowance, Get Savings Summary, Get Savings By Task |
|
|
35
|
+
| **Cost Centre** | List, Get Allocation Report, Create, Update, Delete, Reorder |
|
|
36
|
+
| **Member** | List, Set Budget |
|
|
37
|
+
| **Repo** | List |
|
|
38
|
+
| **Company** | Get Summary |
|
|
39
|
+
| **Alert** | Get Company Alerts, Dismiss, Authorise Repo |
|
|
40
|
+
| **Subscription** | Get Mix |
|
|
41
|
+
|
|
42
|
+
Company-wide reads (spend, alerts, company, members, repos, subscription) want a
|
|
43
|
+
manager (administrator/auditor) key; spend reads **silently degrade** to your own
|
|
44
|
+
data (`scope:"self"`) for a non-manager rather than erroring. Every **write** is
|
|
45
|
+
administrator-only and takes flat inputs (dollar amounts, comma-separated lists).
|
|
46
|
+
The **Ledger** supports Return-All offset pagination + a `since_ts` keyset cursor.
|
|
47
|
+
|
|
48
|
+
### Lineman Trigger (polling)
|
|
49
|
+
|
|
50
|
+
**On New Company Alert** — polls `GET /v1/alerts?status=active` and fires once per
|
|
51
|
+
newly-active company alert (manager keys only). For the lowest latency, prefer the
|
|
52
|
+
real-time **alert-webhook push** instead: point Lineman's alert webhook at an n8n
|
|
53
|
+
**Webhook** node (Dashboard → Cost Controls).
|
|
54
|
+
|
|
55
|
+
## Go-live checklist (for the Lineman operator)
|
|
56
|
+
|
|
57
|
+
This package is code-complete and reserved as a git submodule in the Lineman
|
|
58
|
+
monorepo. To publish it:
|
|
59
|
+
|
|
60
|
+
1. **Deploy `/v1` to the live host.** Apply the TFC `n8n.lineman.io` domain mapping
|
|
61
|
+
+ `LINEMAN_N8N_HOST` (LIN-3397) so `https://n8n.lineman.io/v1/me` answers.
|
|
62
|
+
2. **Create the public GitHub repo** `lineman-io/n8n-nodes-lineman` and push this
|
|
63
|
+
working copy to it (the submodule's `origin` is already set to it).
|
|
64
|
+
3. **Verify + publish:** `npm install && npm run build && npm run lint`, then publish
|
|
65
|
+
via a GitHub Actions workflow with **npm provenance** (mandatory since
|
|
66
|
+
2026-05-01) to keep the verified-community-node track open.
|
|
67
|
+
4. Submit for n8n Cloud verification (zero runtime deps ✓, MIT ✓, public repo ✓).
|
|
68
|
+
|
|
69
|
+
The `/v1` contract this node consumes is documented in the monorepo at
|
|
70
|
+
`docs/runbooks/v1-partner-api.md`.
|
|
71
|
+
|
|
72
|
+
## License
|
|
73
|
+
|
|
74
|
+
[MIT](LICENSE) © Goo Holdings Ltd (trading as Lineman)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class LinemanApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
documentationUrl: string;
|
|
6
|
+
properties: INodeProperties[];
|
|
7
|
+
authenticate: IAuthenticateGeneric;
|
|
8
|
+
test: ICredentialTestRequest;
|
|
9
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LinemanApi = void 0;
|
|
4
|
+
class LinemanApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'linemanApi';
|
|
7
|
+
this.displayName = 'Lineman API';
|
|
8
|
+
this.documentationUrl = 'https://docs.lineman.io/integrations/n8n';
|
|
9
|
+
this.properties = [
|
|
10
|
+
{
|
|
11
|
+
displayName: 'API Key',
|
|
12
|
+
name: 'apiKey',
|
|
13
|
+
type: 'string',
|
|
14
|
+
typeOptions: { password: true },
|
|
15
|
+
default: '',
|
|
16
|
+
required: true,
|
|
17
|
+
description: 'A durable key from Dashboard → Keys (a fa_live_ key). Do NOT paste the token the Lineman CLI/plugin uses — it rotates every ~15 minutes and would break polling.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
displayName: 'Base URL',
|
|
21
|
+
name: 'baseUrl',
|
|
22
|
+
type: 'string',
|
|
23
|
+
default: 'https://n8n.lineman.io/v1',
|
|
24
|
+
description: 'The /v1 base URL. Override for staging (https://n8n.staging.lineman.io/v1) or a self-hosted control-api.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
this.authenticate = {
|
|
28
|
+
type: 'generic',
|
|
29
|
+
properties: {
|
|
30
|
+
headers: {
|
|
31
|
+
Authorization: '=Bearer {{$credentials.apiKey}}',
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
this.test = {
|
|
36
|
+
request: {
|
|
37
|
+
baseURL: '={{$credentials.baseUrl}}',
|
|
38
|
+
url: '/me',
|
|
39
|
+
method: 'GET',
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.LinemanApi = LinemanApi;
|
|
45
|
+
//# sourceMappingURL=LinemanApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinemanApi.credentials.js","sourceRoot":"","sources":["../../credentials/LinemanApi.credentials.ts"],"names":[],"mappings":";;;AAiBA,MAAa,UAAU;IAAvB;QACC,SAAI,GAAG,YAAY,CAAC;QAEpB,gBAAW,GAAG,aAAa,CAAC;QAE5B,qBAAgB,GAAG,0CAA0C,CAAC;QAE9D,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,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EACV,kKAAkK;aACnK;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,2BAA2B;gBACpC,WAAW,EACV,0GAA0G;aAC3G;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,iCAAiC;iBAChD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,2BAA2B;gBACpC,GAAG,EAAE,KAAK;gBACV,MAAM,EAAE,KAAK;aACb;SACD,CAAC;IACH,CAAC;CAAA;AA5CD,gCA4CC"}
|
|
@@ -0,0 +1,618 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Lineman = void 0;
|
|
4
|
+
const readOptions = {
|
|
5
|
+
displayName: 'Options',
|
|
6
|
+
name: 'options',
|
|
7
|
+
type: 'collection',
|
|
8
|
+
placeholder: 'Add Option',
|
|
9
|
+
default: {},
|
|
10
|
+
displayOptions: {
|
|
11
|
+
show: {
|
|
12
|
+
resource: ['spend', 'savings', 'costCentre'],
|
|
13
|
+
operation: [
|
|
14
|
+
'summary',
|
|
15
|
+
'breakdown',
|
|
16
|
+
'topSpenders',
|
|
17
|
+
'overTime',
|
|
18
|
+
'recent',
|
|
19
|
+
'ledger',
|
|
20
|
+
'savingsSummary',
|
|
21
|
+
'byTask',
|
|
22
|
+
'allocation',
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
options: [
|
|
27
|
+
{
|
|
28
|
+
displayName: 'Days',
|
|
29
|
+
name: 'days',
|
|
30
|
+
type: 'number',
|
|
31
|
+
typeOptions: { minValue: 1, maxValue: 92 },
|
|
32
|
+
default: 7,
|
|
33
|
+
description: 'Lookback in days (1–92). Ignored if From is set.',
|
|
34
|
+
routing: { send: { type: 'query', property: 'days', value: '={{$value || undefined}}' } },
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
displayName: 'Developer',
|
|
38
|
+
name: 'developer',
|
|
39
|
+
type: 'string',
|
|
40
|
+
default: '',
|
|
41
|
+
description: 'Comma-separated developer (user ID) filter — narrows within your allowed set',
|
|
42
|
+
routing: { send: { type: 'query', property: 'developer', value: '={{$value || undefined}}' } },
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
displayName: 'From',
|
|
46
|
+
name: 'from',
|
|
47
|
+
type: 'dateTime',
|
|
48
|
+
default: '',
|
|
49
|
+
description: 'Window start (ISO-8601). Overrides Days.',
|
|
50
|
+
routing: { send: { type: 'query', property: 'from', value: '={{$value || undefined}}' } },
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
displayName: 'Interval',
|
|
54
|
+
name: 'interval',
|
|
55
|
+
type: 'options',
|
|
56
|
+
default: '1d',
|
|
57
|
+
options: [
|
|
58
|
+
{ name: '15 Minutes', value: '15m' },
|
|
59
|
+
{ name: '1 Hour', value: '1h' },
|
|
60
|
+
{ name: '1 Day', value: '1d' },
|
|
61
|
+
],
|
|
62
|
+
description: 'Bucket size for Over Time / Summary',
|
|
63
|
+
routing: { send: { type: 'query', property: 'interval', value: '={{$value || undefined}}' } },
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
displayName: 'Model',
|
|
67
|
+
name: 'model',
|
|
68
|
+
type: 'string',
|
|
69
|
+
default: '',
|
|
70
|
+
description: 'Comma-separated model filter',
|
|
71
|
+
routing: { send: { type: 'query', property: 'model', value: '={{$value || undefined}}' } },
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
displayName: 'Month',
|
|
75
|
+
name: 'month',
|
|
76
|
+
type: 'string',
|
|
77
|
+
default: '',
|
|
78
|
+
placeholder: 'YYYY-MM',
|
|
79
|
+
description: 'Savings reads only: the calendar month (alternative to From/To)',
|
|
80
|
+
routing: { send: { type: 'query', property: 'month', value: '={{$value || undefined}}' } },
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
displayName: 'Repo',
|
|
84
|
+
name: 'repo',
|
|
85
|
+
type: 'string',
|
|
86
|
+
default: '',
|
|
87
|
+
description: 'Comma-separated repo filter',
|
|
88
|
+
routing: { send: { type: 'query', property: 'repo', value: '={{$value || undefined}}' } },
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
displayName: 'To',
|
|
92
|
+
name: 'to',
|
|
93
|
+
type: 'dateTime',
|
|
94
|
+
default: '',
|
|
95
|
+
description: 'Window end (ISO-8601). Defaults to now.',
|
|
96
|
+
routing: { send: { type: 'query', property: 'to', value: '={{$value || undefined}}' } },
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
};
|
|
100
|
+
const groupByField = {
|
|
101
|
+
displayName: 'Group By',
|
|
102
|
+
name: 'groupBy',
|
|
103
|
+
type: 'options',
|
|
104
|
+
default: 'developer',
|
|
105
|
+
options: [
|
|
106
|
+
{ name: 'Developer', value: 'developer' },
|
|
107
|
+
{ name: 'Repo', value: 'repo' },
|
|
108
|
+
{ name: 'Branch', value: 'branch' },
|
|
109
|
+
{ name: 'Model', value: 'model' },
|
|
110
|
+
{ name: 'Ticket', value: 'ticket' },
|
|
111
|
+
{ name: 'Plan', value: 'plan' },
|
|
112
|
+
{ name: 'Billing Mode', value: 'billing_mode' },
|
|
113
|
+
{ name: 'Session', value: 'session' },
|
|
114
|
+
],
|
|
115
|
+
displayOptions: { show: { resource: ['spend'], operation: ['breakdown', 'topSpenders', 'overTime'] } },
|
|
116
|
+
routing: { send: { type: 'query', property: 'groupBy', value: '={{$value}}' } },
|
|
117
|
+
};
|
|
118
|
+
class Lineman {
|
|
119
|
+
constructor() {
|
|
120
|
+
this.description = {
|
|
121
|
+
displayName: 'Lineman',
|
|
122
|
+
name: 'lineman',
|
|
123
|
+
icon: { light: 'file:lineman.svg', dark: 'file:lineman.dark.svg' },
|
|
124
|
+
group: ['transform'],
|
|
125
|
+
version: 1,
|
|
126
|
+
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
127
|
+
description: 'Read AI-coding cost, savings, allowance and alerts, and drive Lineman admin settings',
|
|
128
|
+
defaults: { name: 'Lineman' },
|
|
129
|
+
inputs: ['main'],
|
|
130
|
+
outputs: ['main'],
|
|
131
|
+
credentials: [{ name: 'linemanApi', required: true }],
|
|
132
|
+
requestDefaults: {
|
|
133
|
+
baseURL: '={{$credentials.baseUrl}}',
|
|
134
|
+
headers: { Accept: 'application/json' },
|
|
135
|
+
},
|
|
136
|
+
properties: [
|
|
137
|
+
{
|
|
138
|
+
displayName: 'Resource',
|
|
139
|
+
name: 'resource',
|
|
140
|
+
type: 'options',
|
|
141
|
+
noDataExpression: true,
|
|
142
|
+
default: 'spend',
|
|
143
|
+
options: [
|
|
144
|
+
{ name: 'Account', value: 'account' },
|
|
145
|
+
{ name: 'Alert', value: 'alert' },
|
|
146
|
+
{ name: 'Company', value: 'company' },
|
|
147
|
+
{ name: 'Cost Centre', value: 'costCentre' },
|
|
148
|
+
{ name: 'Member', value: 'member' },
|
|
149
|
+
{ name: 'Repo', value: 'repo' },
|
|
150
|
+
{ name: 'Saving', value: 'savings' },
|
|
151
|
+
{ name: 'Spend', value: 'spend' },
|
|
152
|
+
{ name: 'Subscription', value: 'subscription' },
|
|
153
|
+
],
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
displayName: 'Operation',
|
|
157
|
+
name: 'operation',
|
|
158
|
+
type: 'options',
|
|
159
|
+
noDataExpression: true,
|
|
160
|
+
displayOptions: { show: { resource: ['account'] } },
|
|
161
|
+
default: 'get',
|
|
162
|
+
options: [
|
|
163
|
+
{
|
|
164
|
+
name: 'Get Identity',
|
|
165
|
+
value: 'get',
|
|
166
|
+
action: 'Get the caller identity role and scope',
|
|
167
|
+
routing: { request: { method: 'GET', url: '/me' } },
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
displayName: 'Operation',
|
|
173
|
+
name: 'operation',
|
|
174
|
+
type: 'options',
|
|
175
|
+
noDataExpression: true,
|
|
176
|
+
displayOptions: { show: { resource: ['spend'] } },
|
|
177
|
+
default: 'summary',
|
|
178
|
+
options: [
|
|
179
|
+
{
|
|
180
|
+
name: 'Get Summary',
|
|
181
|
+
value: 'summary',
|
|
182
|
+
action: 'Headline spend metrics for a window',
|
|
183
|
+
routing: { request: { method: 'GET', url: '/spend/summary' } },
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
name: 'Get Breakdown',
|
|
187
|
+
value: 'breakdown',
|
|
188
|
+
action: 'Spend grouped by one dimension',
|
|
189
|
+
routing: { request: { method: 'GET', url: '/spend/breakdown' } },
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
name: 'Get Top Spenders',
|
|
193
|
+
value: 'topSpenders',
|
|
194
|
+
action: 'The top n entities with deltas',
|
|
195
|
+
routing: { request: { method: 'GET', url: '/spend/top-spenders' } },
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
name: 'Get Over Time',
|
|
199
|
+
value: 'overTime',
|
|
200
|
+
action: 'Spend as a long form time series',
|
|
201
|
+
routing: { request: { method: 'GET', url: '/spend/over-time' } },
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
name: 'Get Recent Activity',
|
|
205
|
+
value: 'recent',
|
|
206
|
+
action: 'The most recent attributed rows',
|
|
207
|
+
routing: { request: { method: 'GET', url: '/spend/recent' } },
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
name: 'Get Ledger',
|
|
211
|
+
value: 'ledger',
|
|
212
|
+
action: 'The paginated raw ledger rows',
|
|
213
|
+
routing: { request: { method: 'GET', url: '/spend/ledger' } },
|
|
214
|
+
},
|
|
215
|
+
],
|
|
216
|
+
},
|
|
217
|
+
groupByField,
|
|
218
|
+
{
|
|
219
|
+
displayName: 'Limit',
|
|
220
|
+
name: 'topLimit',
|
|
221
|
+
type: 'number',
|
|
222
|
+
typeOptions: { minValue: 1, maxValue: 50 },
|
|
223
|
+
default: 10,
|
|
224
|
+
displayOptions: { show: { resource: ['spend'], operation: ['topSpenders'] } },
|
|
225
|
+
routing: { send: { type: 'query', property: 'limit', value: '={{$value}}' } },
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
displayName: 'Return All',
|
|
229
|
+
name: 'returnAll',
|
|
230
|
+
type: 'boolean',
|
|
231
|
+
default: false,
|
|
232
|
+
displayOptions: { show: { resource: ['spend'], operation: ['ledger'] } },
|
|
233
|
+
description: 'Whether to return all results or only up to a given limit',
|
|
234
|
+
routing: { send: { paginate: '={{$value}}' } },
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
displayName: 'Limit',
|
|
238
|
+
name: 'ledgerLimit',
|
|
239
|
+
type: 'number',
|
|
240
|
+
typeOptions: { minValue: 1, maxValue: 2000 },
|
|
241
|
+
default: 50,
|
|
242
|
+
displayOptions: {
|
|
243
|
+
show: { resource: ['spend'], operation: ['ledger'], returnAll: [false] },
|
|
244
|
+
},
|
|
245
|
+
description: 'Max ledger rows to return',
|
|
246
|
+
routing: {
|
|
247
|
+
send: { type: 'query', property: 'limit', value: '={{$value}}' },
|
|
248
|
+
output: { maxResults: '={{$value}}' },
|
|
249
|
+
},
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
displayName: 'Ledger Options',
|
|
253
|
+
name: 'ledgerOptions',
|
|
254
|
+
type: 'collection',
|
|
255
|
+
placeholder: 'Add Option',
|
|
256
|
+
default: {},
|
|
257
|
+
displayOptions: { show: { resource: ['spend'], operation: ['ledger'] } },
|
|
258
|
+
options: [
|
|
259
|
+
{
|
|
260
|
+
displayName: 'Sort',
|
|
261
|
+
name: 'sort',
|
|
262
|
+
type: 'options',
|
|
263
|
+
default: 'ts',
|
|
264
|
+
options: [
|
|
265
|
+
{ name: 'Time (Bucket)', value: 'ts' },
|
|
266
|
+
{ name: 'Received At (Insertion)', value: 'receivedAt' },
|
|
267
|
+
{ name: 'Cost', value: 'cost' },
|
|
268
|
+
{ name: 'Saved', value: 'saved' },
|
|
269
|
+
{ name: 'Model', value: 'model' },
|
|
270
|
+
{ name: 'Repo', value: 'repo' },
|
|
271
|
+
{ name: 'Email', value: 'email' },
|
|
272
|
+
],
|
|
273
|
+
routing: { send: { type: 'query', property: 'sort', value: '={{$value}}' } },
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
displayName: 'Direction',
|
|
277
|
+
name: 'dir',
|
|
278
|
+
type: 'options',
|
|
279
|
+
default: 'desc',
|
|
280
|
+
options: [
|
|
281
|
+
{ name: 'Descending', value: 'desc' },
|
|
282
|
+
{ name: 'Ascending', value: 'asc' },
|
|
283
|
+
],
|
|
284
|
+
routing: { send: { type: 'query', property: 'dir', value: '={{$value}}' } },
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
displayName: 'Since (Received At)',
|
|
288
|
+
name: 'since_ts',
|
|
289
|
+
type: 'dateTime',
|
|
290
|
+
default: '',
|
|
291
|
+
description: 'Keyset cursor — only rows ingested after this instant. Pair with Sort = Received At, Direction = Ascending for a gap-free "new activity" pull.',
|
|
292
|
+
routing: { send: { type: 'query', property: 'since_ts', value: '={{$value || undefined}}' } },
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
displayName: 'Filter',
|
|
296
|
+
name: 'filter',
|
|
297
|
+
type: 'string',
|
|
298
|
+
default: '',
|
|
299
|
+
placeholder: 'cost:topPct:5',
|
|
300
|
+
description: 'Advanced column filter, "<column>:<op>:<value>". Exposed only on the ledger.',
|
|
301
|
+
routing: { send: { type: 'query', property: 'filter', value: '={{$value || undefined}}' } },
|
|
302
|
+
},
|
|
303
|
+
],
|
|
304
|
+
},
|
|
305
|
+
readOptions,
|
|
306
|
+
{
|
|
307
|
+
displayName: 'Operation',
|
|
308
|
+
name: 'operation',
|
|
309
|
+
type: 'options',
|
|
310
|
+
noDataExpression: true,
|
|
311
|
+
displayOptions: { show: { resource: ['savings'] } },
|
|
312
|
+
default: 'savingsSummary',
|
|
313
|
+
options: [
|
|
314
|
+
{
|
|
315
|
+
name: 'Get Allowance',
|
|
316
|
+
value: 'allowance',
|
|
317
|
+
action: 'Your current token allowance',
|
|
318
|
+
routing: { request: { method: 'GET', url: '/allowance' } },
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
name: 'Get Savings Summary',
|
|
322
|
+
value: 'savingsSummary',
|
|
323
|
+
action: 'Tokens saved over a window',
|
|
324
|
+
routing: { request: { method: 'GET', url: '/savings/summary' } },
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
name: 'Get Savings By Task',
|
|
328
|
+
value: 'byTask',
|
|
329
|
+
action: 'Savings broken down by task type',
|
|
330
|
+
routing: { request: { method: 'GET', url: '/savings/by-task' } },
|
|
331
|
+
},
|
|
332
|
+
],
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
displayName: 'Operation',
|
|
336
|
+
name: 'operation',
|
|
337
|
+
type: 'options',
|
|
338
|
+
noDataExpression: true,
|
|
339
|
+
displayOptions: { show: { resource: ['company'] } },
|
|
340
|
+
default: 'get',
|
|
341
|
+
options: [
|
|
342
|
+
{
|
|
343
|
+
name: 'Get Summary',
|
|
344
|
+
value: 'get',
|
|
345
|
+
action: 'The company rollup manager only',
|
|
346
|
+
routing: { request: { method: 'GET', url: '/company' } },
|
|
347
|
+
},
|
|
348
|
+
],
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
displayName: 'Operation',
|
|
352
|
+
name: 'operation',
|
|
353
|
+
type: 'options',
|
|
354
|
+
noDataExpression: true,
|
|
355
|
+
displayOptions: { show: { resource: ['repo'] } },
|
|
356
|
+
default: 'list',
|
|
357
|
+
options: [
|
|
358
|
+
{
|
|
359
|
+
name: 'List',
|
|
360
|
+
value: 'list',
|
|
361
|
+
action: 'Distinct repos seen manager only',
|
|
362
|
+
routing: { request: { method: 'GET', url: '/repos' } },
|
|
363
|
+
},
|
|
364
|
+
],
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
displayName: 'Operation',
|
|
368
|
+
name: 'operation',
|
|
369
|
+
type: 'options',
|
|
370
|
+
noDataExpression: true,
|
|
371
|
+
displayOptions: { show: { resource: ['subscription'] } },
|
|
372
|
+
default: 'mix',
|
|
373
|
+
options: [
|
|
374
|
+
{
|
|
375
|
+
name: 'Get Mix',
|
|
376
|
+
value: 'mix',
|
|
377
|
+
action: 'Spend split by billing mode mrr manager only',
|
|
378
|
+
routing: { request: { method: 'GET', url: '/subscription/mix' } },
|
|
379
|
+
},
|
|
380
|
+
],
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
displayName: 'Operation',
|
|
384
|
+
name: 'operation',
|
|
385
|
+
type: 'options',
|
|
386
|
+
noDataExpression: true,
|
|
387
|
+
displayOptions: { show: { resource: ['member'] } },
|
|
388
|
+
default: 'list',
|
|
389
|
+
options: [
|
|
390
|
+
{
|
|
391
|
+
name: 'List',
|
|
392
|
+
value: 'list',
|
|
393
|
+
action: 'The company member roster manager only',
|
|
394
|
+
routing: { request: { method: 'GET', url: '/members' } },
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
name: 'Set Budget',
|
|
398
|
+
value: 'setBudget',
|
|
399
|
+
action: 'Set a member budget administrator only',
|
|
400
|
+
routing: { request: { method: 'PATCH', url: '=/members/{{$parameter.userId}}' } },
|
|
401
|
+
},
|
|
402
|
+
],
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
displayName: 'User ID',
|
|
406
|
+
name: 'userId',
|
|
407
|
+
type: 'string',
|
|
408
|
+
required: true,
|
|
409
|
+
default: '',
|
|
410
|
+
displayOptions: { show: { resource: ['member'], operation: ['setBudget'] } },
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
displayName: 'Fields',
|
|
414
|
+
name: 'memberFields',
|
|
415
|
+
type: 'collection',
|
|
416
|
+
placeholder: 'Add Field',
|
|
417
|
+
default: {},
|
|
418
|
+
displayOptions: { show: { resource: ['member'], operation: ['setBudget'] } },
|
|
419
|
+
options: [
|
|
420
|
+
{
|
|
421
|
+
displayName: 'Daily Budget (USD)',
|
|
422
|
+
name: 'budget_day_usd',
|
|
423
|
+
type: 'string',
|
|
424
|
+
default: '',
|
|
425
|
+
description: 'Dollar amount, or empty to leave unchanged. Send "null" to clear.',
|
|
426
|
+
routing: { send: { type: 'body', property: 'budget_day_usd', value: '={{$value || undefined}}' } },
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
displayName: 'Weekly Budget (USD)',
|
|
430
|
+
name: 'budget_week_usd',
|
|
431
|
+
type: 'string',
|
|
432
|
+
default: '',
|
|
433
|
+
routing: { send: { type: 'body', property: 'budget_week_usd', value: '={{$value || undefined}}' } },
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
displayName: 'Monthly Budget (USD)',
|
|
437
|
+
name: 'budget_month_usd',
|
|
438
|
+
type: 'string',
|
|
439
|
+
default: '',
|
|
440
|
+
routing: { send: { type: 'body', property: 'budget_month_usd', value: '={{$value || undefined}}' } },
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
displayName: 'Timezone',
|
|
444
|
+
name: 'timezone',
|
|
445
|
+
type: 'string',
|
|
446
|
+
default: '',
|
|
447
|
+
routing: { send: { type: 'body', property: 'timezone', value: '={{$value || undefined}}' } },
|
|
448
|
+
},
|
|
449
|
+
],
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
displayName: 'Operation',
|
|
453
|
+
name: 'operation',
|
|
454
|
+
type: 'options',
|
|
455
|
+
noDataExpression: true,
|
|
456
|
+
displayOptions: { show: { resource: ['costCentre'] } },
|
|
457
|
+
default: 'list',
|
|
458
|
+
options: [
|
|
459
|
+
{
|
|
460
|
+
name: 'List',
|
|
461
|
+
value: 'list',
|
|
462
|
+
action: 'List cost centre definitions manager only',
|
|
463
|
+
routing: { request: { method: 'GET', url: '/cost-centres' } },
|
|
464
|
+
},
|
|
465
|
+
{
|
|
466
|
+
name: 'Get Allocation Report',
|
|
467
|
+
value: 'allocation',
|
|
468
|
+
action: 'Spend allocated to cost centres',
|
|
469
|
+
routing: { request: { method: 'GET', url: '/cost-centres/allocation' } },
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
name: 'Create',
|
|
473
|
+
value: 'create',
|
|
474
|
+
action: 'Create a cost centre administrator only',
|
|
475
|
+
routing: { request: { method: 'POST', url: '/cost-centres' } },
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
name: 'Update',
|
|
479
|
+
value: 'update',
|
|
480
|
+
action: 'Update a cost centre administrator only',
|
|
481
|
+
routing: { request: { method: 'PATCH', url: '=/cost-centres/{{$parameter.costCentreId}}' } },
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
name: 'Delete',
|
|
485
|
+
value: 'delete',
|
|
486
|
+
action: 'Delete a cost centre administrator only',
|
|
487
|
+
routing: { request: { method: 'DELETE', url: '=/cost-centres/{{$parameter.costCentreId}}' } },
|
|
488
|
+
},
|
|
489
|
+
{
|
|
490
|
+
name: 'Reorder',
|
|
491
|
+
value: 'reorder',
|
|
492
|
+
action: 'Set cost centre precedence administrator only',
|
|
493
|
+
routing: { request: { method: 'POST', url: '/cost-centres/reorder' } },
|
|
494
|
+
},
|
|
495
|
+
],
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
displayName: 'Cost Centre ID',
|
|
499
|
+
name: 'costCentreId',
|
|
500
|
+
type: 'string',
|
|
501
|
+
required: true,
|
|
502
|
+
default: '',
|
|
503
|
+
displayOptions: { show: { resource: ['costCentre'], operation: ['update', 'delete'] } },
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
displayName: 'Name',
|
|
507
|
+
name: 'ccName',
|
|
508
|
+
type: 'string',
|
|
509
|
+
default: '',
|
|
510
|
+
displayOptions: { show: { resource: ['costCentre'], operation: ['create', 'update'] } },
|
|
511
|
+
routing: { send: { type: 'body', property: 'name', value: '={{$value || undefined}}' } },
|
|
512
|
+
},
|
|
513
|
+
{
|
|
514
|
+
displayName: 'Match Developer',
|
|
515
|
+
name: 'ccMatchDeveloper',
|
|
516
|
+
type: 'string',
|
|
517
|
+
default: '',
|
|
518
|
+
description: 'Comma-separated developer (user ID) list',
|
|
519
|
+
displayOptions: { show: { resource: ['costCentre'], operation: ['create', 'update'] } },
|
|
520
|
+
routing: { send: { type: 'body', property: 'match_developer', value: '={{$value || undefined}}' } },
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
displayName: 'Match Repo',
|
|
524
|
+
name: 'ccMatchRepo',
|
|
525
|
+
type: 'string',
|
|
526
|
+
default: '',
|
|
527
|
+
description: 'Comma-separated repo list',
|
|
528
|
+
displayOptions: { show: { resource: ['costCentre'], operation: ['create', 'update'] } },
|
|
529
|
+
routing: { send: { type: 'body', property: 'match_repo', value: '={{$value || undefined}}' } },
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
displayName: 'Ordered IDs',
|
|
533
|
+
name: 'orderedIds',
|
|
534
|
+
type: 'string',
|
|
535
|
+
default: '',
|
|
536
|
+
description: 'Comma-separated cost-centre IDs in the desired precedence order',
|
|
537
|
+
displayOptions: { show: { resource: ['costCentre'], operation: ['reorder'] } },
|
|
538
|
+
routing: { send: { type: 'body', property: 'order', value: '={{$value}}' } },
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
displayName: 'Operation',
|
|
542
|
+
name: 'operation',
|
|
543
|
+
type: 'options',
|
|
544
|
+
noDataExpression: true,
|
|
545
|
+
displayOptions: { show: { resource: ['alert'] } },
|
|
546
|
+
default: 'list',
|
|
547
|
+
options: [
|
|
548
|
+
{
|
|
549
|
+
name: 'Get Company Alerts',
|
|
550
|
+
value: 'list',
|
|
551
|
+
action: 'The company cost alerts manager only',
|
|
552
|
+
routing: { request: { method: 'GET', url: '/alerts' } },
|
|
553
|
+
},
|
|
554
|
+
{
|
|
555
|
+
name: 'Dismiss',
|
|
556
|
+
value: 'dismiss',
|
|
557
|
+
action: 'Dismiss an alert administrator only',
|
|
558
|
+
routing: { request: { method: 'POST', url: '=/alerts/{{$parameter.alertId}}/dismiss' } },
|
|
559
|
+
},
|
|
560
|
+
{
|
|
561
|
+
name: 'Authorise Repo',
|
|
562
|
+
value: 'authorizeRepo',
|
|
563
|
+
action: 'Authorise the alert repo and clear it administrator only',
|
|
564
|
+
routing: { request: { method: 'POST', url: '=/alerts/{{$parameter.alertId}}/authorize-repo' } },
|
|
565
|
+
},
|
|
566
|
+
],
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
displayName: 'Status',
|
|
570
|
+
name: 'alertStatus',
|
|
571
|
+
type: 'options',
|
|
572
|
+
default: 'active',
|
|
573
|
+
displayOptions: { show: { resource: ['alert'], operation: ['list'] } },
|
|
574
|
+
options: [
|
|
575
|
+
{ name: 'Active', value: 'active' },
|
|
576
|
+
{ name: 'Dismissed', value: 'dismissed' },
|
|
577
|
+
{ name: 'False Positive', value: 'false_positive' },
|
|
578
|
+
{ name: 'All', value: 'all' },
|
|
579
|
+
],
|
|
580
|
+
routing: { send: { type: 'query', property: 'status', value: '={{$value}}' } },
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
displayName: 'Alert ID',
|
|
584
|
+
name: 'alertId',
|
|
585
|
+
type: 'string',
|
|
586
|
+
required: true,
|
|
587
|
+
default: '',
|
|
588
|
+
displayOptions: { show: { resource: ['alert'], operation: ['dismiss', 'authorizeRepo'] } },
|
|
589
|
+
},
|
|
590
|
+
{
|
|
591
|
+
displayName: 'Dismiss As',
|
|
592
|
+
name: 'dismissStatus',
|
|
593
|
+
type: 'options',
|
|
594
|
+
default: 'dismissed',
|
|
595
|
+
displayOptions: { show: { resource: ['alert'], operation: ['dismiss'] } },
|
|
596
|
+
options: [
|
|
597
|
+
{ name: 'Dismissed', value: 'dismissed' },
|
|
598
|
+
{ name: 'False Positive', value: 'false_positive' },
|
|
599
|
+
],
|
|
600
|
+
routing: { send: { type: 'body', property: 'status', value: '={{$value}}' } },
|
|
601
|
+
},
|
|
602
|
+
],
|
|
603
|
+
requestOperations: {
|
|
604
|
+
pagination: {
|
|
605
|
+
type: 'offset',
|
|
606
|
+
properties: {
|
|
607
|
+
limitParameter: 'limit',
|
|
608
|
+
offsetParameter: 'offset',
|
|
609
|
+
pageSize: 2000,
|
|
610
|
+
type: 'query',
|
|
611
|
+
},
|
|
612
|
+
},
|
|
613
|
+
},
|
|
614
|
+
};
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
exports.Lineman = Lineman;
|
|
618
|
+
//# sourceMappingURL=Lineman.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Lineman.node.js","sourceRoot":"","sources":["../../../nodes/Lineman/Lineman.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IPollFunctions, INodeType, INodeTypeDescription, INodeExecutionData } from 'n8n-workflow';
|
|
2
|
+
export declare class LinemanTrigger implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
poll(this: IPollFunctions): Promise<INodeExecutionData[][] | null>;
|
|
5
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LinemanTrigger = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
class LinemanTrigger {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.description = {
|
|
8
|
+
displayName: 'Lineman Trigger',
|
|
9
|
+
name: 'linemanTrigger',
|
|
10
|
+
icon: { light: 'file:lineman.svg', dark: 'file:lineman.dark.svg' },
|
|
11
|
+
group: ['trigger'],
|
|
12
|
+
version: 1,
|
|
13
|
+
subtitle: '={{"On new company alert"}}',
|
|
14
|
+
description: 'Starts the workflow when a new Lineman company cost alert fires',
|
|
15
|
+
defaults: { name: 'Lineman Trigger' },
|
|
16
|
+
polling: true,
|
|
17
|
+
inputs: [],
|
|
18
|
+
outputs: ['main'],
|
|
19
|
+
credentials: [{ name: 'linemanApi', required: true }],
|
|
20
|
+
properties: [
|
|
21
|
+
{
|
|
22
|
+
displayName: 'Event',
|
|
23
|
+
name: 'event',
|
|
24
|
+
type: 'options',
|
|
25
|
+
noDataExpression: true,
|
|
26
|
+
default: 'newCompanyAlert',
|
|
27
|
+
options: [
|
|
28
|
+
{
|
|
29
|
+
name: 'On New Company Alert',
|
|
30
|
+
value: 'newCompanyAlert',
|
|
31
|
+
description: 'Triggers for each newly-active company cost alert',
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
async poll() {
|
|
39
|
+
var _a;
|
|
40
|
+
const credentials = await this.getCredentials('linemanApi');
|
|
41
|
+
const baseUrl = (credentials.baseUrl || 'https://n8n.lineman.io/v1').replace(/\/$/, '');
|
|
42
|
+
let alerts;
|
|
43
|
+
try {
|
|
44
|
+
alerts = (await this.helpers.httpRequestWithAuthentication.call(this, 'linemanApi', {
|
|
45
|
+
method: 'GET',
|
|
46
|
+
url: `${baseUrl}/alerts`,
|
|
47
|
+
qs: { status: 'active' },
|
|
48
|
+
json: true,
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
|
|
53
|
+
}
|
|
54
|
+
if (this.getMode() === 'manual') {
|
|
55
|
+
if (alerts.length === 0)
|
|
56
|
+
return null;
|
|
57
|
+
return [this.helpers.returnJsonArray([alerts[0]])];
|
|
58
|
+
}
|
|
59
|
+
const staticData = this.getWorkflowStaticData('node');
|
|
60
|
+
const seen = new Set((_a = staticData.seenIds) !== null && _a !== void 0 ? _a : []);
|
|
61
|
+
const fresh = alerts.filter((a) => !seen.has(a.id));
|
|
62
|
+
staticData.seenIds = alerts.map((a) => a.id);
|
|
63
|
+
if (fresh.length === 0)
|
|
64
|
+
return null;
|
|
65
|
+
return [this.helpers.returnJsonArray(fresh)];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.LinemanTrigger = LinemanTrigger;
|
|
69
|
+
//# sourceMappingURL=LinemanTrigger.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinemanTrigger.node.js","sourceRoot":"","sources":["../../../nodes/Lineman/LinemanTrigger.node.ts"],"names":[],"mappings":";;;AAQA,+CAA4C;AAmB5C,MAAa,cAAc;IAA3B;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,iBAAiB;YAC9B,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,uBAAuB,EAAE;YAClE,KAAK,EAAE,CAAC,SAAS,CAAC;YAClB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,6BAA6B;YACvC,WAAW,EAAE,iEAAiE;YAC9E,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;YACrC,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACrD,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,OAAO;oBACpB,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE,iBAAiB;oBAC1B,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,sBAAsB;4BAC5B,KAAK,EAAE,iBAAiB;4BACxB,WAAW,EAAE,mDAAmD;yBAChE;qBACD;iBACD;aACD;SACD,CAAC;IAuCH,CAAC;IArCA,KAAK,CAAC,IAAI;;QACT,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,CAAE,WAAW,CAAC,OAAkB,IAAI,2BAA2B,CAAC,CAAC,OAAO,CACvF,KAAK,EACL,EAAE,CACF,CAAC;QAEF,IAAI,MAAsB,CAAC;QAC3B,IAAI,CAAC;YACJ,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE;gBACnF,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,GAAG,OAAO,SAAS;gBACxB,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;gBACxB,IAAI,EAAE,IAAI;aACV,CAAC,CAAmB,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,2BAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAmB,CAAC,CAAC;QAC7D,CAAC;QAGD,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAC,UAAU,CAAC,OAAgC,mCAAI,EAAE,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAKpD,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAE7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;CACD;AArED,wCAqEC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 266.4 55.2">
|
|
3
|
+
<defs>
|
|
4
|
+
<style>
|
|
5
|
+
.cls-1 {
|
|
6
|
+
fill: none;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.cls-2 {
|
|
10
|
+
fill: url(#linear-gradient);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.cls-3 {
|
|
14
|
+
fill: #fff;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.cls-4 {
|
|
18
|
+
clip-path: url(#clippath);
|
|
19
|
+
}
|
|
20
|
+
</style>
|
|
21
|
+
<clipPath id="clippath">
|
|
22
|
+
<rect class="cls-1" x="222.01" y="29.25" width="28.75" height="30"/>
|
|
23
|
+
</clipPath>
|
|
24
|
+
<linearGradient id="linear-gradient" x1="222.23" y1="79.01" x2="250.99" y2="79.01" gradientTransform="translate(.14 123.26) scale(1 -1)" gradientUnits="userSpaceOnUse">
|
|
25
|
+
<stop offset="0" stop-color="#52bf9b"/>
|
|
26
|
+
<stop offset="1" stop-color="#aad150"/>
|
|
27
|
+
</linearGradient>
|
|
28
|
+
</defs>
|
|
29
|
+
<path class="cls-3" d="M2.89,49.25V4.45h8.19v44.8H2.89ZM20.03,13.41c-1.45,0-2.71-.51-3.78-1.54-1.02-1.07-1.54-2.33-1.54-3.78s.51-2.75,1.54-3.78c1.07-1.02,2.33-1.54,3.78-1.54s2.75.51,3.78,1.54c1.02,1.02,1.54,2.28,1.54,3.78s-.51,2.71-1.54,3.78c-1.02,1.02-2.28,1.54-3.78,1.54ZM15.93,49.25v-31.74h8.19v31.74h-8.19ZM28.83,49.25v-31.74h8.13v3.71c1.11-1.49,2.58-2.6,4.42-3.33,1.88-.77,3.75-1.15,5.63-1.15,3.67,0,6.68,1.19,9.02,3.58,2.35,2.35,3.52,5.76,3.52,10.24v18.69h-8.13v-17.6c0-2.39-.62-4.31-1.86-5.76-1.19-1.49-2.97-2.24-5.31-2.24s-4.16.75-5.44,2.24c-1.24,1.45-1.86,3.37-1.86,5.76v17.6h-8.13ZM78.66,50.02c-3.33,0-6.21-.73-8.64-2.18-2.39-1.45-4.25-3.43-5.57-5.95s-1.98-5.35-1.98-8.51c0-3.37.68-6.29,2.05-8.77,1.37-2.47,3.26-4.39,5.7-5.76,2.43-1.41,5.25-2.11,8.45-2.11s5.91.68,8.26,2.05c2.39,1.37,4.25,3.24,5.57,5.63,1.37,2.39,2.05,5.14,2.05,8.26,0,.55-.02,1.11-.06,1.66-.04.51-.11,1-.19,1.47h-23.55c.13,1.49.51,2.82,1.15,3.97.68,1.11,1.58,1.98,2.69,2.62,1.15.6,2.45.9,3.9.9s2.77-.32,3.84-.96c1.11-.64,1.98-1.62,2.62-2.94h8.77c-.6,1.88-1.56,3.63-2.88,5.25-1.32,1.62-3.01,2.92-5.06,3.9-2.01.98-4.37,1.47-7.1,1.47ZM70.78,30.37h15.3c-.04-2.13-.83-3.82-2.37-5.06-1.49-1.24-3.26-1.86-5.31-1.86-1.75,0-3.37.55-4.86,1.66-1.49,1.07-2.41,2.82-2.75,5.25ZM97.58,49.25v-31.74h8.13v3.65c1.07-1.49,2.43-2.6,4.1-3.33,1.66-.73,3.41-1.09,5.25-1.09,2.39,0,4.61.51,6.66,1.54,2.09.98,3.71,2.54,4.86,4.67,1.07-1.96,2.54-3.48,4.42-4.54,1.92-1.11,4.01-1.66,6.27-1.66,2.43,0,4.63.51,6.59,1.54,2.01.98,3.59,2.5,4.74,4.54,1.15,2.05,1.73,4.61,1.73,7.68v18.75h-8.13v-17.6c0-2.39-.58-4.29-1.73-5.7-1.15-1.41-2.92-2.11-5.31-2.11s-4.12.7-5.31,2.11c-1.19,1.41-1.79,3.31-1.79,5.7v17.6h-8.13v-17.6c0-2.43-.62-4.33-1.86-5.7-1.19-1.41-2.92-2.11-5.18-2.11-1.92,0-3.6.62-5.06,1.86-1.41,1.19-2.11,3.18-2.11,5.95v17.6h-8.13ZM164.03,50.02c-1.88,0-3.63-.38-5.25-1.15-1.62-.77-2.94-1.86-3.97-3.26-.98-1.45-1.47-3.16-1.47-5.12,0-2.35.58-4.27,1.73-5.76,1.15-1.49,2.73-2.6,4.74-3.33,2.05-.73,4.33-1.09,6.85-1.09h7.55c0-1.45-.24-2.67-.7-3.65-.43-.98-1.09-1.73-1.98-2.24-.85-.55-1.92-.83-3.2-.83-1.49,0-2.84.34-4.03,1.02-1.15.64-1.86,1.73-2.11,3.26h-8.19c.21-2.3,1-4.29,2.37-5.95,1.36-1.66,3.11-2.94,5.25-3.84,2.13-.9,4.42-1.34,6.85-1.34,2.99,0,5.5.55,7.55,1.66,2.09,1.11,3.69,2.69,4.8,4.74,1.11,2.01,1.66,4.39,1.66,7.17v9.66c.08.94.43,1.58,1.02,1.92.6.34,1.39.51,2.37.51v6.85c-2.01,0-3.69-.19-5.06-.58-1.32-.38-2.41-.94-3.26-1.66-.85-.77-1.58-1.73-2.18-2.88-.98,1.66-2.52,3.07-4.61,4.22-2.05,1.11-4.29,1.66-6.72,1.66ZM166.4,43.42c1.41,0,2.69-.32,3.84-.96,1.19-.64,2.15-1.54,2.88-2.69.73-1.15,1.09-2.47,1.09-3.97v-.26h-7.04c-.94,0-1.83.15-2.69.45-.85.26-1.54.68-2.05,1.28-.51.55-.77,1.32-.77,2.3,0,1.32.45,2.3,1.34,2.94.94.6,2.07.9,3.39.9ZM188.52,49.25v-31.74h8.13v3.71c1.11-1.49,2.58-2.6,4.42-3.33,1.88-.77,3.75-1.15,5.63-1.15,3.67,0,6.68,1.19,9.02,3.58,2.35,2.35,3.52,5.76,3.52,10.24v18.69h-8.13v-17.6c0-2.39-.62-4.31-1.86-5.76-1.19-1.49-2.97-2.24-5.31-2.24s-4.16.75-5.44,2.24c-1.24,1.45-1.86,3.37-1.86,5.76v17.6h-8.13Z"/>
|
|
30
|
+
<g class="cls-4">
|
|
31
|
+
<rect class="cls-2" x="222.37" y="39.25" width="28.75" height="10"/>
|
|
32
|
+
</g>
|
|
33
|
+
</svg>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 266.4 55.2">
|
|
3
|
+
<defs>
|
|
4
|
+
<style>
|
|
5
|
+
.cls-1 {
|
|
6
|
+
fill: none;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.cls-2 {
|
|
10
|
+
fill: url(#linear-gradient);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.cls-3 {
|
|
14
|
+
fill: #1f2126;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.cls-4 {
|
|
18
|
+
clip-path: url(#clippath);
|
|
19
|
+
}
|
|
20
|
+
</style>
|
|
21
|
+
<clipPath id="clippath">
|
|
22
|
+
<rect class="cls-1" x="222.01" y="29.25" width="30.24" height="30"/>
|
|
23
|
+
</clipPath>
|
|
24
|
+
<linearGradient id="linear-gradient" x1="222.25" y1="287.01" x2="252.49" y2="287.01" gradientTransform="translate(.14 331.26) scale(1 -1)" gradientUnits="userSpaceOnUse">
|
|
25
|
+
<stop offset="0" stop-color="#52bf9b"/>
|
|
26
|
+
<stop offset="1" stop-color="#aad150"/>
|
|
27
|
+
</linearGradient>
|
|
28
|
+
</defs>
|
|
29
|
+
<path class="cls-3" d="M2.89,49.25V4.45h8.19v44.8H2.89ZM20.03,13.41c-1.45,0-2.71-.51-3.78-1.54-1.02-1.07-1.54-2.33-1.54-3.78s.51-2.75,1.54-3.78c1.07-1.02,2.33-1.54,3.78-1.54s2.75.51,3.78,1.54c1.02,1.02,1.54,2.28,1.54,3.78s-.51,2.71-1.54,3.78c-1.02,1.02-2.28,1.54-3.78,1.54ZM15.93,49.25v-31.74h8.19v31.74h-8.19ZM28.83,49.25v-31.74h8.13v3.71c1.11-1.49,2.58-2.6,4.42-3.33,1.88-.77,3.75-1.15,5.63-1.15,3.67,0,6.68,1.19,9.02,3.58,2.35,2.35,3.52,5.76,3.52,10.24v18.69h-8.13v-17.6c0-2.39-.62-4.31-1.86-5.76-1.19-1.49-2.97-2.24-5.31-2.24s-4.16.75-5.44,2.24c-1.24,1.45-1.86,3.37-1.86,5.76v17.6h-8.13ZM78.66,50.02c-3.33,0-6.21-.73-8.64-2.18-2.39-1.45-4.25-3.43-5.57-5.95s-1.98-5.35-1.98-8.51c0-3.37.68-6.29,2.05-8.77,1.37-2.47,3.26-4.39,5.7-5.76,2.43-1.41,5.25-2.11,8.45-2.11s5.91.68,8.26,2.05c2.39,1.37,4.25,3.24,5.57,5.63,1.37,2.39,2.05,5.14,2.05,8.26,0,.55-.02,1.11-.06,1.66-.04.51-.11,1-.19,1.47h-23.55c.13,1.49.51,2.82,1.15,3.97.68,1.11,1.58,1.98,2.69,2.62,1.15.6,2.45.9,3.9.9s2.77-.32,3.84-.96c1.11-.64,1.98-1.62,2.62-2.94h8.77c-.6,1.88-1.56,3.63-2.88,5.25-1.32,1.62-3.01,2.92-5.06,3.9-2.01.98-4.37,1.47-7.1,1.47ZM70.78,30.37h15.3c-.04-2.13-.83-3.82-2.37-5.06-1.49-1.24-3.26-1.86-5.31-1.86-1.75,0-3.37.55-4.86,1.66-1.49,1.07-2.41,2.82-2.75,5.25ZM97.58,49.25v-31.74h8.13v3.65c1.07-1.49,2.43-2.6,4.1-3.33,1.66-.73,3.41-1.09,5.25-1.09,2.39,0,4.61.51,6.66,1.54,2.09.98,3.71,2.54,4.86,4.67,1.07-1.96,2.54-3.48,4.42-4.54,1.92-1.11,4.01-1.66,6.27-1.66,2.43,0,4.63.51,6.59,1.54,2.01.98,3.59,2.5,4.74,4.54,1.15,2.05,1.73,4.61,1.73,7.68v18.75h-8.13v-17.6c0-2.39-.58-4.29-1.73-5.7-1.15-1.41-2.92-2.11-5.31-2.11s-4.12.7-5.31,2.11c-1.19,1.41-1.79,3.31-1.79,5.7v17.6h-8.13v-17.6c0-2.43-.62-4.33-1.86-5.7-1.19-1.41-2.92-2.11-5.18-2.11-1.92,0-3.6.62-5.06,1.86-1.41,1.19-2.11,3.18-2.11,5.95v17.6h-8.13ZM164.03,50.02c-1.88,0-3.63-.38-5.25-1.15-1.62-.77-2.94-1.86-3.97-3.26-.98-1.45-1.47-3.16-1.47-5.12,0-2.35.58-4.27,1.73-5.76,1.15-1.49,2.73-2.6,4.74-3.33,2.05-.73,4.33-1.09,6.85-1.09h7.55c0-1.45-.24-2.67-.7-3.65-.43-.98-1.09-1.73-1.98-2.24-.85-.55-1.92-.83-3.2-.83-1.49,0-2.84.34-4.03,1.02-1.15.64-1.86,1.73-2.11,3.26h-8.19c.21-2.3,1-4.29,2.37-5.95,1.36-1.66,3.11-2.94,5.25-3.84,2.13-.9,4.42-1.34,6.85-1.34,2.99,0,5.5.55,7.55,1.66,2.09,1.11,3.69,2.69,4.8,4.74,1.11,2.01,1.66,4.39,1.66,7.17v9.66c.08.94.43,1.58,1.02,1.92.6.34,1.39.51,2.37.51v6.85c-2.01,0-3.69-.19-5.06-.58-1.32-.38-2.41-.94-3.26-1.66-.85-.77-1.58-1.73-2.18-2.88-.98,1.66-2.52,3.07-4.61,4.22-2.05,1.11-4.29,1.66-6.72,1.66ZM166.4,43.42c1.41,0,2.69-.32,3.84-.96,1.19-.64,2.15-1.54,2.88-2.69.73-1.15,1.09-2.47,1.09-3.97v-.26h-7.04c-.94,0-1.83.15-2.69.45-.85.26-1.54.68-2.05,1.28-.51.55-.77,1.32-.77,2.3,0,1.32.45,2.3,1.34,2.94.94.6,2.07.9,3.39.9ZM188.52,49.25v-31.74h8.13v3.71c1.11-1.49,2.58-2.6,4.42-3.33,1.88-.77,3.75-1.15,5.63-1.15,3.67,0,6.68,1.19,9.02,3.58,2.35,2.35,3.52,5.76,3.52,10.24v18.69h-8.13v-17.6c0-2.39-.62-4.31-1.86-5.76-1.19-1.49-2.97-2.24-5.31-2.24s-4.16.75-5.44,2.24c-1.24,1.45-1.86,3.37-1.86,5.76v17.6h-8.13Z"/>
|
|
30
|
+
<g class="cls-4">
|
|
31
|
+
<rect class="cls-2" x="222.39" y="39.25" width="30.24" height="10"/>
|
|
32
|
+
</g>
|
|
33
|
+
</svg>
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lineman-io/n8n-nodes-lineman",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "n8n community node for Lineman — read AI-coding cost, savings, allowance and alerts in your workflows, and drive Lineman admin settings.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"n8n-community-node-package",
|
|
7
|
+
"lineman",
|
|
8
|
+
"finops",
|
|
9
|
+
"ai-cost"
|
|
10
|
+
],
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"homepage": "https://lineman.io",
|
|
13
|
+
"author": {
|
|
14
|
+
"name": "Goo Holdings Ltd",
|
|
15
|
+
"email": "support@lineman.io"
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/lineman-io/n8n-nodes-lineman.git"
|
|
20
|
+
},
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=20.15"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc && gulp build:icons",
|
|
26
|
+
"dev": "tsc --watch",
|
|
27
|
+
"format": "prettier nodes credentials --write",
|
|
28
|
+
"lint": "eslint \"nodes/**/*.ts\" \"credentials/**/*.ts\"",
|
|
29
|
+
"lintfix": "eslint \"nodes/**/*.ts\" \"credentials/**/*.ts\" --fix",
|
|
30
|
+
"prepublishOnly": "npm run build"
|
|
31
|
+
},
|
|
32
|
+
"files": [
|
|
33
|
+
"dist"
|
|
34
|
+
],
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public",
|
|
37
|
+
"provenance": true
|
|
38
|
+
},
|
|
39
|
+
"n8n": {
|
|
40
|
+
"n8nNodesApiVersion": 1,
|
|
41
|
+
"credentials": [
|
|
42
|
+
"dist/credentials/LinemanApi.credentials.js"
|
|
43
|
+
],
|
|
44
|
+
"nodes": [
|
|
45
|
+
"dist/nodes/Lineman/Lineman.node.js",
|
|
46
|
+
"dist/nodes/Lineman/LinemanTrigger.node.js"
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
"peerDependencies": {
|
|
50
|
+
"n8n-workflow": "*"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@typescript-eslint/parser": "^7.15.0",
|
|
54
|
+
"eslint": "^8.57.0",
|
|
55
|
+
"eslint-plugin-n8n-nodes-base": "^1.16.1",
|
|
56
|
+
"gulp": "^5.0.0",
|
|
57
|
+
"n8n-workflow": "*",
|
|
58
|
+
"prettier": "^3.3.2",
|
|
59
|
+
"typescript": "^5.5.3"
|
|
60
|
+
},
|
|
61
|
+
"comment": "ZERO runtime `dependencies` is a hard n8n-verification requirement (the node is pure declarative routing). Publish is via GitHub Actions with npm provenance (mandatory since 2026-05-01). See README for the go-live checklist. The /v1 contract this node consumes is documented in the Lineman monorepo at docs/runbooks/v1-partner-api.md."
|
|
62
|
+
}
|