n8n-nodes-sqlaccounting 1.0.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 +163 -0
- package/dist/credentials/SqlAccountingApi.credentials.d.ts +10 -0
- package/dist/credentials/SqlAccountingApi.credentials.d.ts.map +1 -0
- package/dist/credentials/SqlAccountingApi.credentials.js +94 -0
- package/dist/nodes/SqlAccounting/SqlAccounting.node.d.ts +6 -0
- package/dist/nodes/SqlAccounting/SqlAccounting.node.d.ts.map +1 -0
- package/dist/nodes/SqlAccounting/SqlAccounting.node.js +351 -0
- package/dist/nodes/SqlAccounting/operations.d.ts +34 -0
- package/dist/nodes/SqlAccounting/operations.d.ts.map +1 -0
- package/dist/nodes/SqlAccounting/operations.js +177 -0
- package/dist/nodes/SqlAccounting/sqlaccounting.svg +7 -0
- package/package.json +58 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Yew Choong Hau
|
|
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,163 @@
|
|
|
1
|
+
# n8n-nodes-sqlaccounting
|
|
2
|
+
|
|
3
|
+
An [n8n](https://n8n.io) community node for the [SQL Accounting](https://www.sql.com.my) REST API (Malaysia).
|
|
4
|
+
|
|
5
|
+
Connects SQL Accounting to any automation via the SQL Accounting n8n Node platform — a credit-based service that handles SigV4 signing, rate limiting, and usage tracking.
|
|
6
|
+
|
|
7
|
+
[](https://www.npmjs.com/package/n8n-nodes-sqlaccounting)
|
|
8
|
+
[](LICENSE)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Features
|
|
13
|
+
|
|
14
|
+
- **81 endpoints** — Sales, Purchase, AR, AP, GL, Stock, Manufacturing, and Reports
|
|
15
|
+
- **Zero runtime dependencies** — uses only Node.js built-ins (required for n8n Cloud)
|
|
16
|
+
- **Auto-pagination** — Return All toggle loops through pages automatically
|
|
17
|
+
- **Guided fields** for master data, raw JSON body editor for transactional documents
|
|
18
|
+
- **Credit-based billing** — buy credits at the portal, spend per API call
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Prerequisites
|
|
23
|
+
|
|
24
|
+
1. A running SQL Accounting installation with the REST API enabled
|
|
25
|
+
2. A SQL Accounting API access key and secret key (from SQL Account → Tools → API Settings)
|
|
26
|
+
3. A platform API key from the SQL Accounting n8n Node portal (`sqlnode_...`)
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Installation
|
|
31
|
+
|
|
32
|
+
### In n8n (recommended)
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Settings → Community Nodes → Install → n8n-nodes-sqlaccounting
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Self-hosted via CLI
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm install n8n-nodes-sqlaccounting
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Credentials
|
|
47
|
+
|
|
48
|
+
Configure a **SQL Accounting API** credential with these five fields:
|
|
49
|
+
|
|
50
|
+
| Field | Description | Default |
|
|
51
|
+
|-------|-------------|---------|
|
|
52
|
+
| Platform API Key | Your `sqlnode_...` key from the portal | — |
|
|
53
|
+
| SQL Access Key | From SQL Account API settings | — |
|
|
54
|
+
| SQL Secret Key | From SQL Account API settings (encrypted by n8n) | — |
|
|
55
|
+
| Service | SigV4 service name | `sqlaccount` |
|
|
56
|
+
| Region | SigV4 region | `ap-southeast-5` |
|
|
57
|
+
|
|
58
|
+
Use the **Test credential** button to verify all five values are correct. This sends a `GET /profile` request (costs 1 credit).
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Credit Costs
|
|
63
|
+
|
|
64
|
+
| Operation type | Credits per call |
|
|
65
|
+
|----------------|-----------------|
|
|
66
|
+
| List / Get / Report | 1 |
|
|
67
|
+
| Create | 3 |
|
|
68
|
+
| Update (auto GET + PUT) | 4 total |
|
|
69
|
+
| Delete | 5 |
|
|
70
|
+
|
|
71
|
+
Return All loops through pages — each page costs 1 credit.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Operations
|
|
76
|
+
|
|
77
|
+
### Master Data (guided fields for Create/Update)
|
|
78
|
+
|
|
79
|
+
`account` `agent` `area` `assetdisposal` `assetgroup` `assetitem` `batch`
|
|
80
|
+
`companycategory` `location` `memberpoint` `pmmethod` `pricetag` `project`
|
|
81
|
+
`shipper` `stockcategory` `stockgroup` `tariff` `tax` `terms` `whtax`
|
|
82
|
+
|
|
83
|
+
### Transactional — Sales
|
|
84
|
+
|
|
85
|
+
`salesinvoice` `salesorder` `salesquotation` `salescreditnote` `salesdebitnote`
|
|
86
|
+
`salescancellednote` `cashsales` `deliveryorder` `extradeliveryorder`
|
|
87
|
+
|
|
88
|
+
### Transactional — Purchase
|
|
89
|
+
|
|
90
|
+
`purchaseinvoice` `purchaseorder` `purchaserequest` `purchasereturned`
|
|
91
|
+
`purchasedebitnote` `purchasecancellednote` `cashpurchase` `goodsreceived`
|
|
92
|
+
`extragoodsreceived`
|
|
93
|
+
|
|
94
|
+
### Transactional — Accounts Receivable
|
|
95
|
+
|
|
96
|
+
`customer` `customerinvoice` `customercreditnote` `customerdebitnote`
|
|
97
|
+
`customerpayment` `customerdeposit` `customerrefund` `customercontra`
|
|
98
|
+
|
|
99
|
+
### Transactional — Accounts Payable
|
|
100
|
+
|
|
101
|
+
`supplier` `supplierinvoice` `suppliercreditnote` `supplierdebitnote`
|
|
102
|
+
`supplierpayment` `supplierdeposit` `supplierrefund` `suppliercontra`
|
|
103
|
+
|
|
104
|
+
### Transactional — GL / Stock / Manufacturing
|
|
105
|
+
|
|
106
|
+
`journalentry` `paymentvoucher` `receiptvoucher` `bankadjustment` `stockitem`
|
|
107
|
+
`stockadjustment` `stockissue` `stockreceived` `stocktransfer` `assembly`
|
|
108
|
+
`disassembly` `joborder` `itemtemplate` `currency`
|
|
109
|
+
|
|
110
|
+
### Reports (read-only)
|
|
111
|
+
|
|
112
|
+
`profile` `version` `stockaging` `stockanalysis` `stockbalanceinquiry`
|
|
113
|
+
`stockbatchexpiry` `stockcard` `stockcardqty` `stockmonthendbalance`
|
|
114
|
+
`stockphysicalworksheet` `stockreorderadvice` `stockserialnumberconflict`
|
|
115
|
+
`stockserialnumberoutstanding`
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## JSON Body Example — Sales Invoice
|
|
120
|
+
|
|
121
|
+
Use this as a starting point for the **Request Body (JSON)** field:
|
|
122
|
+
|
|
123
|
+
```json
|
|
124
|
+
{
|
|
125
|
+
"docno": "IV-00001",
|
|
126
|
+
"docdate": "2026-01-15",
|
|
127
|
+
"code": "CUSTOMER001",
|
|
128
|
+
"description": "Monthly consulting services",
|
|
129
|
+
"currencycode": "MYR",
|
|
130
|
+
"currencyrate": 1,
|
|
131
|
+
"docamt": 1060.00,
|
|
132
|
+
"sdsdocdetail": [
|
|
133
|
+
{
|
|
134
|
+
"itemcode": "SVC001",
|
|
135
|
+
"description": "Consulting service",
|
|
136
|
+
"qty": 1,
|
|
137
|
+
"uom": "UNIT",
|
|
138
|
+
"unitprice": 1000.00,
|
|
139
|
+
"disc": 0,
|
|
140
|
+
"tax": "SR6",
|
|
141
|
+
"taxamt": 60.00,
|
|
142
|
+
"localamt": 1000.00
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Error Reference
|
|
151
|
+
|
|
152
|
+
| Error | Cause | Fix |
|
|
153
|
+
|-------|-------|-----|
|
|
154
|
+
| Authentication failed | Invalid platform API key | Check the Platform API Key in your credential |
|
|
155
|
+
| Insufficient credits | Balance is zero | Top up at the portal |
|
|
156
|
+
| 4xx from SQL Accounting | Bad request data | Check your JSON body or Record ID |
|
|
157
|
+
| 5xx from SQL Accounting | SQL Accounting server error | No credit charged — retry later |
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## License
|
|
162
|
+
|
|
163
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class SqlAccountingApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
documentationUrl: string;
|
|
6
|
+
authenticate: IAuthenticateGeneric;
|
|
7
|
+
test: ICredentialTestRequest;
|
|
8
|
+
properties: INodeProperties[];
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=SqlAccountingApi.credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqlAccountingApi.credentials.d.ts","sourceRoot":"","sources":["../../credentials/SqlAccountingApi.credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,MAAM,cAAc,CAAC;AAKtB,qBAAa,gBAAiB,YAAW,eAAe;IACvD,IAAI,SAAsB;IAC1B,WAAW,SAAwB;IACnC,gBAAgB,SACyC;IAKzD,YAAY,EAAE,oBAAoB,CAOhC;IAKF,IAAI,EAAE,sBAAsB,CAkB1B;IAEF,UAAU,EAAE,eAAe,EAAE,CAkD3B;CACF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SqlAccountingApi = void 0;
|
|
4
|
+
// ── IMPORTANT: Update this URL if your Supabase project changes ──────────────
|
|
5
|
+
const EDGE_FUNCTION_BASE = 'https://cqcxkvptxgslpneeobhv.supabase.co/functions/v1';
|
|
6
|
+
class SqlAccountingApi {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.name = 'sqlAccountingApi';
|
|
9
|
+
this.displayName = 'SQL Accounting API';
|
|
10
|
+
this.documentationUrl = 'https://github.com/laurentyew/n8n-nodes-sqlaccounting';
|
|
11
|
+
// ── Tells n8n how to inject the platform API key as Bearer token ──────────
|
|
12
|
+
// This is what allows httpRequestWithAuthentication() to work correctly
|
|
13
|
+
// and satisfies the no-http-request-with-manual-auth linter rule.
|
|
14
|
+
this.authenticate = {
|
|
15
|
+
type: 'generic',
|
|
16
|
+
properties: {
|
|
17
|
+
headers: {
|
|
18
|
+
Authorization: '=Bearer {{$credentials.platformApiKey}}',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
// ── Powers the "Test credential" button in the n8n UI ────────────────────
|
|
23
|
+
// Calls profile.get (1 credit) to verify both the platform key AND
|
|
24
|
+
// the SQL Accounting credentials are valid.
|
|
25
|
+
this.test = {
|
|
26
|
+
request: {
|
|
27
|
+
baseURL: EDGE_FUNCTION_BASE,
|
|
28
|
+
url: '/sqlaccount',
|
|
29
|
+
method: 'POST',
|
|
30
|
+
body: {
|
|
31
|
+
access_key: '={{$credentials.sqlAccessKey}}',
|
|
32
|
+
secret_key: '={{$credentials.sqlSecretKey}}',
|
|
33
|
+
service: '={{$credentials.service}}',
|
|
34
|
+
region: '={{$credentials.region}}',
|
|
35
|
+
operation: 'profile.get',
|
|
36
|
+
method: 'GET',
|
|
37
|
+
path: '/profile',
|
|
38
|
+
query: '',
|
|
39
|
+
body: '',
|
|
40
|
+
},
|
|
41
|
+
json: true,
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
this.properties = [
|
|
45
|
+
{
|
|
46
|
+
displayName: 'Platform API Key',
|
|
47
|
+
name: 'platformApiKey',
|
|
48
|
+
type: 'string',
|
|
49
|
+
typeOptions: { password: true },
|
|
50
|
+
default: '',
|
|
51
|
+
required: true,
|
|
52
|
+
description: 'Your licence key from the SQL Accounting n8n Node portal. Starts with sqlnode_.',
|
|
53
|
+
placeholder: 'sqlnode_...',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
displayName: 'SQL Access Key',
|
|
57
|
+
name: 'sqlAccessKey',
|
|
58
|
+
type: 'string',
|
|
59
|
+
typeOptions: { password: true },
|
|
60
|
+
default: '',
|
|
61
|
+
required: true,
|
|
62
|
+
description: 'Your SQL Accounting API access key from the SQL Account API settings page',
|
|
63
|
+
placeholder: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.sql.my/ACCOUNTAPI',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
displayName: 'SQL Secret Key',
|
|
67
|
+
name: 'sqlSecretKey',
|
|
68
|
+
type: 'string',
|
|
69
|
+
typeOptions: { password: true },
|
|
70
|
+
default: '',
|
|
71
|
+
required: true,
|
|
72
|
+
description: 'Your SQL Accounting API secret key. Encrypted by n8n and never stored on our servers.',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
displayName: 'Service',
|
|
76
|
+
name: 'service',
|
|
77
|
+
type: 'string',
|
|
78
|
+
default: 'sqlaccount',
|
|
79
|
+
required: true,
|
|
80
|
+
description: 'SigV4 service name. Default is sqlaccount. Only change if instructed by SQL Accounting support.',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
displayName: 'Region',
|
|
84
|
+
name: 'region',
|
|
85
|
+
type: 'string',
|
|
86
|
+
default: 'ap-southeast-5',
|
|
87
|
+
required: true,
|
|
88
|
+
description: 'SigV4 region. Default is ap-southeast-5. Only change if instructed by SQL Accounting support.',
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.SqlAccountingApi = SqlAccountingApi;
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FsQWNjb3VudGluZ0FwaS5jcmVkZW50aWFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2NyZWRlbnRpYWxzL1NxbEFjY291bnRpbmdBcGkuY3JlZGVudGlhbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0EsZ0ZBQWdGO0FBQ2hGLE1BQU0sa0JBQWtCLEdBQUcsdURBQXVELENBQUM7QUFFbkYsTUFBYSxnQkFBZ0I7SUFBN0I7UUFDQyxTQUFJLEdBQUcsa0JBQWtCLENBQUM7UUFDMUIsZ0JBQVcsR0FBRyxvQkFBb0IsQ0FBQztRQUNuQyxxQkFBZ0IsR0FDZix1REFBdUQsQ0FBQztRQUV6RCw2RUFBNkU7UUFDN0Usd0VBQXdFO1FBQ3hFLGtFQUFrRTtRQUNsRSxpQkFBWSxHQUF5QjtZQUNwQyxJQUFJLEVBQUUsU0FBUztZQUNmLFVBQVUsRUFBRTtnQkFDWCxPQUFPLEVBQUU7b0JBQ1IsYUFBYSxFQUFFLHlDQUF5QztpQkFDeEQ7YUFDRDtTQUNELENBQUM7UUFFRiw0RUFBNEU7UUFDNUUsbUVBQW1FO1FBQ25FLDRDQUE0QztRQUM1QyxTQUFJLEdBQTJCO1lBQzlCLE9BQU8sRUFBRTtnQkFDUixPQUFPLEVBQUUsa0JBQWtCO2dCQUMzQixHQUFHLEVBQUUsYUFBYTtnQkFDbEIsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsSUFBSSxFQUFFO29CQUNMLFVBQVUsRUFBRSxnQ0FBZ0M7b0JBQzVDLFVBQVUsRUFBRSxnQ0FBZ0M7b0JBQzVDLE9BQU8sRUFBRSwyQkFBMkI7b0JBQ3BDLE1BQU0sRUFBRSwwQkFBMEI7b0JBQ2xDLFNBQVMsRUFBRSxhQUFhO29CQUN4QixNQUFNLEVBQUUsS0FBSztvQkFDYixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsS0FBSyxFQUFFLEVBQUU7b0JBQ1QsSUFBSSxFQUFFLEVBQUU7aUJBQ1I7Z0JBQ0QsSUFBSSxFQUFFLElBQUk7YUFDVjtTQUNELENBQUM7UUFFRixlQUFVLEdBQXNCO1lBQy9CO2dCQUNDLFdBQVcsRUFBRSxrQkFBa0I7Z0JBQy9CLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQy9CLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFdBQVcsRUFDVixpRkFBaUY7Z0JBQ2xGLFdBQVcsRUFBRSxhQUFhO2FBQzFCO1lBQ0Q7Z0JBQ0MsV0FBVyxFQUFFLGdCQUFnQjtnQkFDN0IsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQy9CLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFdBQVcsRUFBRSwyRUFBMkU7Z0JBQ3hGLFdBQVcsRUFBRSxvREFBb0Q7YUFDakU7WUFDRDtnQkFDQyxXQUFXLEVBQUUsZ0JBQWdCO2dCQUM3QixJQUFJLEVBQUUsY0FBYztnQkFDcEIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDL0IsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsV0FBVyxFQUNWLHVGQUF1RjthQUN4RjtZQUNEO2dCQUNDLFdBQVcsRUFBRSxTQUFTO2dCQUN0QixJQUFJLEVBQUUsU0FBUztnQkFDZixJQUFJLEVBQUUsUUFBUTtnQkFDZCxPQUFPLEVBQUUsWUFBWTtnQkFDckIsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsV0FBVyxFQUNWLGlHQUFpRzthQUNsRztZQUNEO2dCQUNDLFdBQVcsRUFBRSxRQUFRO2dCQUNyQixJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxPQUFPLEVBQUUsZ0JBQWdCO2dCQUN6QixRQUFRLEVBQUUsSUFBSTtnQkFDZCxXQUFXLEVBQ1YsK0ZBQStGO2FBQ2hHO1NBQ0QsQ0FBQztJQUNILENBQUM7Q0FBQTtBQTVGRCw0Q0E0RkMifQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
|
|
2
|
+
export declare class SqlAccounting implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=SqlAccounting.node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqlAccounting.node.d.ts","sourceRoot":"","sources":["../../../nodes/SqlAccounting/SqlAccounting.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EAGpB,MAAM,cAAc,CAAC;AAiBtB,qBAAa,aAAc,YAAW,SAAS;IAC9C,WAAW,EAAE,oBAAoB,CAqK/B;IAGI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAoLvE"}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SqlAccounting = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const operations_1 = require("./operations");
|
|
6
|
+
// ── Update this if your Supabase project changes ──────────────────────────────
|
|
7
|
+
const EDGE_FUNCTION_URL = 'https://cqcxkvptxgslpneeobhv.supabase.co/functions/v1/sqlaccount';
|
|
8
|
+
class SqlAccounting {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.description = {
|
|
11
|
+
displayName: 'SQL Accounting',
|
|
12
|
+
name: 'sqlAccounting',
|
|
13
|
+
icon: 'file:sqlaccounting.svg',
|
|
14
|
+
group: ['transform'],
|
|
15
|
+
version: 1,
|
|
16
|
+
subtitle: '={{$parameter["resource"] + ": " + $parameter["operation"]}}',
|
|
17
|
+
description: 'Interact with the SQL Accounting REST API via the SQL Accounting n8n Node platform.',
|
|
18
|
+
defaults: { name: 'SQL Accounting' },
|
|
19
|
+
inputs: ['main'],
|
|
20
|
+
outputs: ['main'],
|
|
21
|
+
credentials: [
|
|
22
|
+
{
|
|
23
|
+
name: 'sqlAccountingApi',
|
|
24
|
+
required: true,
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
properties: [
|
|
28
|
+
// ── Resource dropdown ────────────────────────────────────────────────
|
|
29
|
+
{
|
|
30
|
+
displayName: 'Resource',
|
|
31
|
+
name: 'resource',
|
|
32
|
+
type: 'options',
|
|
33
|
+
noDataExpression: true,
|
|
34
|
+
options: operations_1.RESOURCES.map((r) => ({
|
|
35
|
+
name: r.name,
|
|
36
|
+
value: r.value,
|
|
37
|
+
})),
|
|
38
|
+
default: 'profile',
|
|
39
|
+
required: true,
|
|
40
|
+
},
|
|
41
|
+
// ── Operation dropdown — one per resource ────────────────────────────
|
|
42
|
+
...operations_1.RESOURCES.map((resource) => {
|
|
43
|
+
var _a, _b;
|
|
44
|
+
return ({
|
|
45
|
+
displayName: 'Operation',
|
|
46
|
+
name: 'operation',
|
|
47
|
+
type: 'options',
|
|
48
|
+
noDataExpression: true,
|
|
49
|
+
displayOptions: { show: { resource: [resource.value] } },
|
|
50
|
+
options: resource.operations.map((op) => ({
|
|
51
|
+
name: op.name,
|
|
52
|
+
value: op.key,
|
|
53
|
+
description: op.description,
|
|
54
|
+
action: op.description,
|
|
55
|
+
})),
|
|
56
|
+
default: (_b = (_a = resource.operations[0]) === null || _a === void 0 ? void 0 : _a.key) !== null && _b !== void 0 ? _b : '',
|
|
57
|
+
});
|
|
58
|
+
}),
|
|
59
|
+
// ── Record ID — shown for Get / Update / Delete ──────────────────────
|
|
60
|
+
{
|
|
61
|
+
displayName: 'Record ID',
|
|
62
|
+
name: 'pathParam',
|
|
63
|
+
type: 'string',
|
|
64
|
+
default: '',
|
|
65
|
+
required: true,
|
|
66
|
+
description: 'The CODE, DocKey, or AutoKey of the record to get, update, or delete',
|
|
67
|
+
displayOptions: { show: { operation: operations_1.OPS_WITH_PATH_PARAM } },
|
|
68
|
+
},
|
|
69
|
+
// ── Offset — shown for List operations ───────────────────────────────
|
|
70
|
+
{
|
|
71
|
+
displayName: 'Offset',
|
|
72
|
+
name: 'offset',
|
|
73
|
+
type: 'number',
|
|
74
|
+
default: 0,
|
|
75
|
+
description: 'Pagination offset. Each page returns up to 100 records. Increment by 100 for the next page.',
|
|
76
|
+
displayOptions: { show: { operation: operations_1.OPS_GET_NO_PARAM } },
|
|
77
|
+
},
|
|
78
|
+
// ── Return All — shown for List (not reports) ────────────────────────
|
|
79
|
+
{
|
|
80
|
+
displayName: 'Return All',
|
|
81
|
+
name: 'returnAll',
|
|
82
|
+
type: 'boolean',
|
|
83
|
+
default: false,
|
|
84
|
+
description: 'Whether to return all results or only up to a given limit',
|
|
85
|
+
displayOptions: { show: { operation: operations_1.OPS_LIST } },
|
|
86
|
+
},
|
|
87
|
+
// ── Filters — optional query params for List operations ──────────────
|
|
88
|
+
{
|
|
89
|
+
displayName: 'Filters',
|
|
90
|
+
name: 'filters',
|
|
91
|
+
type: 'fixedCollection',
|
|
92
|
+
typeOptions: { multipleValues: true },
|
|
93
|
+
default: {},
|
|
94
|
+
placeholder: 'Add Filter',
|
|
95
|
+
description: 'Optional query filters. See the SQL Accounting API docs for available filter fields per resource.',
|
|
96
|
+
displayOptions: { show: { operation: operations_1.OPS_GET_NO_PARAM } },
|
|
97
|
+
options: [
|
|
98
|
+
{
|
|
99
|
+
name: 'filter',
|
|
100
|
+
displayName: 'Filter',
|
|
101
|
+
values: [
|
|
102
|
+
{
|
|
103
|
+
displayName: 'Field',
|
|
104
|
+
name: 'field',
|
|
105
|
+
type: 'string',
|
|
106
|
+
default: '',
|
|
107
|
+
placeholder: 'e.g. code, description, isactive',
|
|
108
|
+
description: 'The filter field name',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
displayName: 'Value',
|
|
112
|
+
name: 'value',
|
|
113
|
+
type: 'string',
|
|
114
|
+
default: '',
|
|
115
|
+
description: 'The filter value',
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
// ── Raw JSON Body — shown for transactional Create / Update ──────────
|
|
122
|
+
{
|
|
123
|
+
displayName: 'Request Body (JSON)',
|
|
124
|
+
name: 'rawBody',
|
|
125
|
+
type: 'json',
|
|
126
|
+
default: '{}',
|
|
127
|
+
required: true,
|
|
128
|
+
description: 'Full JSON body for this document. Include the sdsdocdetail array for line items. See the README for schema examples per document type.',
|
|
129
|
+
displayOptions: { show: { operation: operations_1.OPS_RAW_JSON } },
|
|
130
|
+
},
|
|
131
|
+
// ── Guided Fields — shown for master data Create / Update ────────────
|
|
132
|
+
{
|
|
133
|
+
displayName: 'Fields',
|
|
134
|
+
name: 'guidedFields',
|
|
135
|
+
type: 'fixedCollection',
|
|
136
|
+
typeOptions: { multipleValues: true },
|
|
137
|
+
default: {},
|
|
138
|
+
placeholder: 'Add Field',
|
|
139
|
+
description: 'Fields to set on this record. See the SQL Accounting API docs for available fields per resource.',
|
|
140
|
+
displayOptions: { show: { operation: operations_1.OPS_GUIDED } },
|
|
141
|
+
options: [
|
|
142
|
+
{
|
|
143
|
+
name: 'field',
|
|
144
|
+
displayName: 'Field',
|
|
145
|
+
values: [
|
|
146
|
+
{
|
|
147
|
+
displayName: 'Field Name',
|
|
148
|
+
name: 'name',
|
|
149
|
+
type: 'string',
|
|
150
|
+
default: '',
|
|
151
|
+
placeholder: 'e.g. code, description, isactive',
|
|
152
|
+
description: 'The field name as defined in the SQL Accounting API',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
displayName: 'Value',
|
|
156
|
+
name: 'value',
|
|
157
|
+
type: 'string',
|
|
158
|
+
default: '',
|
|
159
|
+
description: 'The value to set for this field',
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
},
|
|
163
|
+
],
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
// ── execute() ─────────────────────────────────────────────────────────────
|
|
169
|
+
async execute() {
|
|
170
|
+
var _a, _b, _c;
|
|
171
|
+
const items = this.getInputData();
|
|
172
|
+
const returnData = [];
|
|
173
|
+
// Get credentials (used only to build the request body — auth header is
|
|
174
|
+
// injected automatically by httpRequestWithAuthentication via authenticate{})
|
|
175
|
+
const credentials = await this.getCredentials('sqlAccountingApi');
|
|
176
|
+
const sqlAccessKey = credentials.sqlAccessKey;
|
|
177
|
+
const sqlSecretKey = credentials.sqlSecretKey;
|
|
178
|
+
const service = credentials.service || 'sqlaccount';
|
|
179
|
+
const region = credentials.region || 'ap-southeast-5';
|
|
180
|
+
for (let i = 0; i < items.length; i++) {
|
|
181
|
+
try {
|
|
182
|
+
const resource = this.getNodeParameter('resource', i);
|
|
183
|
+
const operationKey = this.getNodeParameter('operation', i);
|
|
184
|
+
const opDef = operations_1.OPERATION_MAP[operationKey];
|
|
185
|
+
if (!opDef) {
|
|
186
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Unknown operation: ${operationKey}`, { itemIndex: i });
|
|
187
|
+
}
|
|
188
|
+
// ── Build path (inject path param for Get/Update/Delete) ─────────
|
|
189
|
+
let resolvedPath = opDef.path;
|
|
190
|
+
if (opDef.pathParam !== null) {
|
|
191
|
+
const paramValue = this.getNodeParameter('pathParam', i);
|
|
192
|
+
if (!(paramValue === null || paramValue === void 0 ? void 0 : paramValue.trim())) {
|
|
193
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Record ID is required for the ${opDef.name} operation.`, { itemIndex: i });
|
|
194
|
+
}
|
|
195
|
+
resolvedPath = `${opDef.path}/${encodeURIComponent(paramValue.trim())}`;
|
|
196
|
+
}
|
|
197
|
+
// ── Build query string (List / Report operations) ────────────────
|
|
198
|
+
let queryString = '';
|
|
199
|
+
if (opDef.pathParam === null && opDef.method === 'GET') {
|
|
200
|
+
const queryParts = [];
|
|
201
|
+
const offset = this.getNodeParameter('offset', i, 0);
|
|
202
|
+
queryParts.push(`offset=${offset}`);
|
|
203
|
+
const filtersData = this.getNodeParameter('filters', i, {});
|
|
204
|
+
const filterItems = (_a = filtersData.filter) !== null && _a !== void 0 ? _a : [];
|
|
205
|
+
for (const f of filterItems) {
|
|
206
|
+
const fieldName = (_b = f.field) === null || _b === void 0 ? void 0 : _b.trim();
|
|
207
|
+
const fieldValue = f.value;
|
|
208
|
+
if (fieldName && fieldValue !== undefined && fieldValue !== '') {
|
|
209
|
+
queryParts.push(`${encodeURIComponent(fieldName)}=${encodeURIComponent(fieldValue)}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
queryString = queryParts.join('&');
|
|
213
|
+
}
|
|
214
|
+
// ── Build request body ───────────────────────────────────────────
|
|
215
|
+
let bodyString = '';
|
|
216
|
+
if (opDef.bodyMode === 'raw_json') {
|
|
217
|
+
const rawBody = this.getNodeParameter('rawBody', i);
|
|
218
|
+
bodyString =
|
|
219
|
+
typeof rawBody === 'string' ? rawBody : JSON.stringify(rawBody);
|
|
220
|
+
}
|
|
221
|
+
else if (opDef.bodyMode === 'guided') {
|
|
222
|
+
const guidedData = this.getNodeParameter('guidedFields', i, {});
|
|
223
|
+
const fieldItems = (_c = guidedData.field) !== null && _c !== void 0 ? _c : [];
|
|
224
|
+
const bodyObj = {};
|
|
225
|
+
for (const f of fieldItems) {
|
|
226
|
+
if (f.name)
|
|
227
|
+
bodyObj[f.name] = f.value;
|
|
228
|
+
}
|
|
229
|
+
bodyString = JSON.stringify(bodyObj);
|
|
230
|
+
}
|
|
231
|
+
// ── Handle Return All (auto-paginate) ────────────────────────────
|
|
232
|
+
const isListOp = opDef.pathParam === null &&
|
|
233
|
+
opDef.method === 'GET' &&
|
|
234
|
+
opDef.docType !== 'report';
|
|
235
|
+
const returnAll = isListOp
|
|
236
|
+
? this.getNodeParameter('returnAll', i, false)
|
|
237
|
+
: false;
|
|
238
|
+
if (returnAll) {
|
|
239
|
+
const allResults = [];
|
|
240
|
+
let currentOffset = 0;
|
|
241
|
+
let hasMore = true;
|
|
242
|
+
while (hasMore) {
|
|
243
|
+
const pageQuery = queryString
|
|
244
|
+
? queryString.replace(/offset=\d+/, `offset=${currentOffset}`)
|
|
245
|
+
: `offset=${currentOffset}`;
|
|
246
|
+
const pageResult = await callEdge(this, sqlAccessKey, sqlSecretKey, service, region, operationKey, opDef.method, resolvedPath, pageQuery, '');
|
|
247
|
+
const pageData = Array.isArray(pageResult)
|
|
248
|
+
? pageResult
|
|
249
|
+
: [pageResult];
|
|
250
|
+
if (pageData.length === 0) {
|
|
251
|
+
hasMore = false;
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
allResults.push(...pageData);
|
|
255
|
+
currentOffset += 100;
|
|
256
|
+
// Safety cap — prevent infinite loops on bad responses
|
|
257
|
+
if (currentOffset > 100000)
|
|
258
|
+
hasMore = false;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
for (const record of allResults) {
|
|
262
|
+
returnData.push({
|
|
263
|
+
json: record,
|
|
264
|
+
pairedItem: { item: i },
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
// ── Single call ────────────────────────────────────────────
|
|
270
|
+
const result = await callEdge(this, sqlAccessKey, sqlSecretKey, service, region, operationKey, opDef.method, resolvedPath, queryString, bodyString);
|
|
271
|
+
if (Array.isArray(result)) {
|
|
272
|
+
for (const record of result) {
|
|
273
|
+
returnData.push({
|
|
274
|
+
json: record,
|
|
275
|
+
pairedItem: { item: i },
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
returnData.push({
|
|
281
|
+
json: result,
|
|
282
|
+
pairedItem: { item: i },
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
// continueOnFail support — required by n8n linter
|
|
289
|
+
if (this.continueOnFail()) {
|
|
290
|
+
returnData.push({
|
|
291
|
+
json: { error: error.message },
|
|
292
|
+
pairedItem: { item: i },
|
|
293
|
+
});
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
throw error;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return [returnData];
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
exports.SqlAccounting = SqlAccounting;
|
|
303
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
304
|
+
// Edge Function caller
|
|
305
|
+
//
|
|
306
|
+
// Uses this.helpers.httpRequestWithAuthentication() — the n8n-approved method
|
|
307
|
+
// that satisfies the no-http-request-with-manual-auth linter rule.
|
|
308
|
+
// The Authorization: Bearer <platformApiKey> header is injected automatically
|
|
309
|
+
// from the credential's authenticate{} property. We never touch it here.
|
|
310
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
311
|
+
async function callEdge(ctx, accessKey, secretKey, service, region, operation, method, path, query, body) {
|
|
312
|
+
var _a;
|
|
313
|
+
const options = {
|
|
314
|
+
method: 'POST',
|
|
315
|
+
url: EDGE_FUNCTION_URL,
|
|
316
|
+
headers: {
|
|
317
|
+
'Content-Type': 'application/json',
|
|
318
|
+
},
|
|
319
|
+
body: {
|
|
320
|
+
access_key: accessKey,
|
|
321
|
+
secret_key: secretKey,
|
|
322
|
+
service,
|
|
323
|
+
region,
|
|
324
|
+
operation,
|
|
325
|
+
method,
|
|
326
|
+
path,
|
|
327
|
+
query,
|
|
328
|
+
body,
|
|
329
|
+
},
|
|
330
|
+
json: true,
|
|
331
|
+
};
|
|
332
|
+
let response;
|
|
333
|
+
try {
|
|
334
|
+
// httpRequestWithAuthentication auto-injects the Bearer token from
|
|
335
|
+
// the credential's authenticate{} definition — no manual header needed.
|
|
336
|
+
response = (await ctx.helpers.httpRequestWithAuthentication.call(ctx, 'sqlAccountingApi', options));
|
|
337
|
+
}
|
|
338
|
+
catch (error) {
|
|
339
|
+
// Parse n8n's wrapped HTTP error to give the user a clear message
|
|
340
|
+
const msg = (_a = error.message) !== null && _a !== void 0 ? _a : '';
|
|
341
|
+
if (msg.includes('401') || msg.includes('invalid_api_key')) {
|
|
342
|
+
throw new n8n_workflow_1.NodeOperationError(ctx.getNode(), 'Authentication failed. Check your Platform API Key in the credential.');
|
|
343
|
+
}
|
|
344
|
+
if (msg.includes('402') || msg.includes('insufficient_credits')) {
|
|
345
|
+
throw new n8n_workflow_1.NodeOperationError(ctx.getNode(), 'Insufficient credits. Top up your balance at the portal before retrying.');
|
|
346
|
+
}
|
|
347
|
+
throw error;
|
|
348
|
+
}
|
|
349
|
+
return response;
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FsQWNjb3VudGluZy5ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZXMvU3FsQWNjb3VudGluZy9TcWxBY2NvdW50aW5nLm5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBUUEsK0NBQWtEO0FBRWxELDZDQVFzQjtBQUV0QixpRkFBaUY7QUFDakYsTUFBTSxpQkFBaUIsR0FDdEIsa0VBQWtFLENBQUM7QUFFcEUsTUFBYSxhQUFhO0lBQTFCO1FBQ0MsZ0JBQVcsR0FBeUI7WUFDbkMsV0FBVyxFQUFFLGdCQUFnQjtZQUM3QixJQUFJLEVBQUUsZUFBZTtZQUNyQixJQUFJLEVBQUUsd0JBQXdCO1lBQzlCLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQztZQUNwQixPQUFPLEVBQUUsQ0FBQztZQUNWLFFBQVEsRUFBRSw4REFBOEQ7WUFDeEUsV0FBVyxFQUNWLHFGQUFxRjtZQUN0RixRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDcEMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2hCLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUU7Z0JBQ1o7b0JBQ0MsSUFBSSxFQUFFLGtCQUFrQjtvQkFDeEIsUUFBUSxFQUFFLElBQUk7aUJBQ2Q7YUFDRDtZQUNELFVBQVUsRUFBRTtnQkFDWCx3RUFBd0U7Z0JBQ3hFO29CQUNDLFdBQVcsRUFBRSxVQUFVO29CQUN2QixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtvQkFDdEIsT0FBTyxFQUFFLHNCQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUM5QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7d0JBQ1osS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO3FCQUNkLENBQUMsQ0FBQztvQkFDSCxPQUFPLEVBQUUsU0FB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
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* operations.ts
|
|
3
|
+
* Static operation definitions for all 81 SQL Accounting endpoints.
|
|
4
|
+
* Maps exactly to the operations table seeded in Supabase.
|
|
5
|
+
*
|
|
6
|
+
* body_mode:
|
|
7
|
+
* 'none' → GET / DELETE (no body, no guided fields)
|
|
8
|
+
* 'guided' → master data writes (flat guided fields shown in UI)
|
|
9
|
+
* 'raw_json' → transactional writes (raw JSON body editor)
|
|
10
|
+
*/
|
|
11
|
+
export interface OperationDef {
|
|
12
|
+
key: string;
|
|
13
|
+
name: string;
|
|
14
|
+
value: string;
|
|
15
|
+
description: string;
|
|
16
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
17
|
+
path: string;
|
|
18
|
+
pathParam: 'CODE' | 'DOCKEY' | 'AUTOKEY' | null;
|
|
19
|
+
bodyMode: 'none' | 'guided' | 'raw_json';
|
|
20
|
+
docType: 'master' | 'transactional' | 'report';
|
|
21
|
+
}
|
|
22
|
+
export interface ResourceDef {
|
|
23
|
+
name: string;
|
|
24
|
+
value: string;
|
|
25
|
+
operations: OperationDef[];
|
|
26
|
+
}
|
|
27
|
+
export declare const RESOURCES: ResourceDef[];
|
|
28
|
+
export declare const OPERATION_MAP: Record<string, OperationDef>;
|
|
29
|
+
export declare const OPS_WITH_PATH_PARAM: string[];
|
|
30
|
+
export declare const OPS_LIST: string[];
|
|
31
|
+
export declare const OPS_GET_NO_PARAM: string[];
|
|
32
|
+
export declare const OPS_RAW_JSON: string[];
|
|
33
|
+
export declare const OPS_GUIDED: string[];
|
|
34
|
+
//# sourceMappingURL=operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../../nodes/SqlAccounting/operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;IAChD,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IACzC,OAAO,EAAE,QAAQ,GAAG,eAAe,GAAG,QAAQ,CAAC;CAC/C;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,YAAY,EAAE,CAAC;CAC3B;AAiED,eAAO,MAAM,SAAS,EAAE,WAAW,EA+FlC,CAAC;AAGF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAM,CAAC;AAQ9D,eAAO,MAAM,mBAAmB,UAEX,CAAC;AAGtB,eAAO,MAAM,QAAQ,UAEA,CAAC;AAGtB,eAAO,MAAM,gBAAgB,UAER,CAAC;AAGtB,eAAO,MAAM,YAAY,UAEJ,CAAC;AAGtB,eAAO,MAAM,UAAU,UAEF,CAAC"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* operations.ts
|
|
4
|
+
* Static operation definitions for all 81 SQL Accounting endpoints.
|
|
5
|
+
* Maps exactly to the operations table seeded in Supabase.
|
|
6
|
+
*
|
|
7
|
+
* body_mode:
|
|
8
|
+
* 'none' → GET / DELETE (no body, no guided fields)
|
|
9
|
+
* 'guided' → master data writes (flat guided fields shown in UI)
|
|
10
|
+
* 'raw_json' → transactional writes (raw JSON body editor)
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.OPS_GUIDED = exports.OPS_RAW_JSON = exports.OPS_GET_NO_PARAM = exports.OPS_LIST = exports.OPS_WITH_PATH_PARAM = exports.OPERATION_MAP = exports.RESOURCES = void 0;
|
|
14
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
15
|
+
// HELPERS
|
|
16
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
17
|
+
function masterOps(resource, path, pathParam = 'CODE') {
|
|
18
|
+
return [
|
|
19
|
+
{ key: `${resource}.list`, name: 'List', value: `${resource}.list`, description: `List ${resource} records`, method: 'GET', path, pathParam: null, bodyMode: 'none', docType: 'master' },
|
|
20
|
+
{ key: `${resource}.get`, name: 'Get', value: `${resource}.get`, description: `Get a single ${resource} by ${pathParam}`, method: 'GET', path, pathParam, bodyMode: 'none', docType: 'master' },
|
|
21
|
+
{ key: `${resource}.create`, name: 'Create', value: `${resource}.create`, description: `Create a new ${resource}`, method: 'POST', path, pathParam: null, bodyMode: 'guided', docType: 'master' },
|
|
22
|
+
{ key: `${resource}.update`, name: 'Update', value: `${resource}.update`, description: `Update an existing ${resource}`, method: 'PUT', path, pathParam, bodyMode: 'guided', docType: 'master' },
|
|
23
|
+
{ key: `${resource}.delete`, name: 'Delete', value: `${resource}.delete`, description: `Delete a ${resource} record`, method: 'DELETE', path, pathParam, bodyMode: 'none', docType: 'master' },
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
function masterOpsNoGet(resource, path, pathParam = 'CODE') {
|
|
27
|
+
return [
|
|
28
|
+
{ key: `${resource}.list`, name: 'List', value: `${resource}.list`, description: `List ${resource} records`, method: 'GET', path, pathParam: null, bodyMode: 'none', docType: 'master' },
|
|
29
|
+
{ key: `${resource}.create`, name: 'Create', value: `${resource}.create`, description: `Create a new ${resource}`, method: 'POST', path, pathParam: null, bodyMode: 'guided', docType: 'master' },
|
|
30
|
+
{ key: `${resource}.update`, name: 'Update', value: `${resource}.update`, description: `Update a ${resource}`, method: 'PUT', path, pathParam, bodyMode: 'guided', docType: 'master' },
|
|
31
|
+
{ key: `${resource}.delete`, name: 'Delete', value: `${resource}.delete`, description: `Delete a ${resource} record`, method: 'DELETE', path, pathParam, bodyMode: 'none', docType: 'master' },
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
function txOps(resource, path, pathParam = 'DOCKEY') {
|
|
35
|
+
return [
|
|
36
|
+
{ key: `${resource}.list`, name: 'List', value: `${resource}.list`, description: `List ${resource} documents`, method: 'GET', path, pathParam: null, bodyMode: 'none', docType: 'transactional' },
|
|
37
|
+
{ key: `${resource}.get`, name: 'Get', value: `${resource}.get`, description: `Get a single ${resource}`, method: 'GET', path, pathParam, bodyMode: 'none', docType: 'transactional' },
|
|
38
|
+
{ key: `${resource}.create`, name: 'Create', value: `${resource}.create`, description: `Create a ${resource} document`, method: 'POST', path, pathParam: null, bodyMode: 'raw_json', docType: 'transactional' },
|
|
39
|
+
{ key: `${resource}.update`, name: 'Update', value: `${resource}.update`, description: `Update a ${resource} document`, method: 'PUT', path, pathParam, bodyMode: 'raw_json', docType: 'transactional' },
|
|
40
|
+
{ key: `${resource}.delete`, name: 'Delete', value: `${resource}.delete`, description: `Delete a ${resource} document`, method: 'DELETE', path, pathParam, bodyMode: 'none', docType: 'transactional' },
|
|
41
|
+
];
|
|
42
|
+
}
|
|
43
|
+
function hybridOps(resource, path) {
|
|
44
|
+
return [
|
|
45
|
+
{ key: `${resource}.list`, name: 'List', value: `${resource}.list`, description: `List ${resource} records`, method: 'GET', path, pathParam: null, bodyMode: 'none', docType: 'transactional' },
|
|
46
|
+
{ key: `${resource}.get`, name: 'Get', value: `${resource}.get`, description: `Get a single ${resource}`, method: 'GET', path, pathParam: 'CODE', bodyMode: 'none', docType: 'transactional' },
|
|
47
|
+
{ key: `${resource}.create`, name: 'Create', value: `${resource}.create`, description: `Create a ${resource}`, method: 'POST', path, pathParam: null, bodyMode: 'guided', docType: 'transactional' },
|
|
48
|
+
{ key: `${resource}.update`, name: 'Update', value: `${resource}.update`, description: `Update a ${resource}`, method: 'PUT', path, pathParam: 'CODE', bodyMode: 'guided', docType: 'transactional' },
|
|
49
|
+
{ key: `${resource}.delete`, name: 'Delete', value: `${resource}.delete`, description: `Delete a ${resource}`, method: 'DELETE', path, pathParam: 'CODE', bodyMode: 'none', docType: 'transactional' },
|
|
50
|
+
];
|
|
51
|
+
}
|
|
52
|
+
function reportOp(resource, path) {
|
|
53
|
+
return [
|
|
54
|
+
{ key: `${resource}.get`, name: 'Get', value: `${resource}.get`, description: `Get ${resource} report data`, method: 'GET', path, pathParam: null, bodyMode: 'none', docType: 'report' },
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
58
|
+
// ALL 81 ENDPOINTS
|
|
59
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
60
|
+
exports.RESOURCES = [
|
|
61
|
+
// ── MASTER DATA (20) ──────────────────────────────────────────────────────
|
|
62
|
+
{ name: 'Account', value: 'account', operations: masterOps('account', '/account') },
|
|
63
|
+
{ name: 'Agent', value: 'agent', operations: masterOps('agent', '/agent') },
|
|
64
|
+
{ name: 'Area', value: 'area', operations: masterOps('area', '/area') },
|
|
65
|
+
{ name: 'Asset Disposal', value: 'assetdisposal', operations: masterOps('assetdisposal', '/assetdisposal') },
|
|
66
|
+
{ name: 'Asset Group', value: 'assetgroup', operations: masterOps('assetgroup', '/assetgroup') },
|
|
67
|
+
{ name: 'Asset Item', value: 'assetitem', operations: masterOps('assetitem', '/assetitem') },
|
|
68
|
+
{ name: 'Stock Batch', value: 'batch', operations: masterOps('batch', '/batch', 'AUTOKEY') },
|
|
69
|
+
{ name: 'Company Category', value: 'companycategory', operations: masterOpsNoGet('companycategory', '/companycategory') },
|
|
70
|
+
{ name: 'Location', value: 'location', operations: masterOps('location', '/location') },
|
|
71
|
+
{ name: 'Member Point', value: 'memberpoint', operations: masterOps('memberpoint', '/memberpoint') },
|
|
72
|
+
{ name: 'Payment Method', value: 'pmmethod', operations: masterOps('pmmethod', '/pmmethod') },
|
|
73
|
+
{ name: 'Price Tag', value: 'pricetag', operations: masterOps('pricetag', '/pricetag') },
|
|
74
|
+
{ name: 'Project', value: 'project', operations: masterOps('project', '/project') },
|
|
75
|
+
{ name: 'Shipper', value: 'shipper', operations: masterOps('shipper', '/shipper') },
|
|
76
|
+
{ name: 'Stock Category', value: 'stockcategory', operations: masterOpsNoGet('stockcategory', '/stockcategory') },
|
|
77
|
+
{ name: 'Stock Group', value: 'stockgroup', operations: masterOpsNoGet('stockgroup', '/stockgroup') },
|
|
78
|
+
{ name: 'Tariff', value: 'tariff', operations: masterOpsNoGet('tariff', '/tariff', 'AUTOKEY') },
|
|
79
|
+
{ name: 'Tax', value: 'tax', operations: masterOpsNoGet('tax', '/tax', 'AUTOKEY') },
|
|
80
|
+
{ name: 'Terms', value: 'terms', operations: masterOpsNoGet('terms', '/terms') },
|
|
81
|
+
{ name: 'Withholding Tax', value: 'whtax', operations: masterOpsNoGet('whtax', '/whtax', 'AUTOKEY') },
|
|
82
|
+
// ── SALES (9) ─────────────────────────────────────────────────────────────
|
|
83
|
+
{ name: 'Sales Invoice', value: 'salesinvoice', operations: txOps('salesinvoice', '/salesinvoice') },
|
|
84
|
+
{ name: 'Sales Order', value: 'salesorder', operations: txOps('salesorder', '/salesorder') },
|
|
85
|
+
{ name: 'Sales Quotation', value: 'salesquotation', operations: txOps('salesquotation', '/salesquotation') },
|
|
86
|
+
{ name: 'Sales Credit Note', value: 'salescreditnote', operations: txOps('salescreditnote', '/salescreditnote') },
|
|
87
|
+
{ name: 'Sales Debit Note', value: 'salesdebitnote', operations: txOps('salesdebitnote', '/salesdebitnote') },
|
|
88
|
+
{ name: 'Sales Cancelled Note', value: 'salescancellednote', operations: txOps('salescancellednote', '/salescancellednote') },
|
|
89
|
+
{ name: 'Cash Sales', value: 'cashsales', operations: txOps('cashsales', '/cashsales') },
|
|
90
|
+
{ name: 'Delivery Order', value: 'deliveryorder', operations: txOps('deliveryorder', '/deliveryorder') },
|
|
91
|
+
{ name: 'Extra Delivery Order', value: 'extradeliveryorder', operations: txOps('extradeliveryorder', '/extradeliveryorder') },
|
|
92
|
+
// ── PURCHASE (9) ──────────────────────────────────────────────────────────
|
|
93
|
+
{ name: 'Purchase Invoice', value: 'purchaseinvoice', operations: txOps('purchaseinvoice', '/purchaseinvoice') },
|
|
94
|
+
{ name: 'Purchase Order', value: 'purchaseorder', operations: txOps('purchaseorder', '/purchaseorder') },
|
|
95
|
+
{ name: 'Purchase Request', value: 'purchaserequest', operations: txOps('purchaserequest', '/purchaserequest') },
|
|
96
|
+
{ name: 'Purchase Return', value: 'purchasereturned', operations: txOps('purchasereturned', '/purchasereturned') },
|
|
97
|
+
{ name: 'Purchase Debit Note', value: 'purchasedebitnote', operations: txOps('purchasedebitnote', '/purchasedebitnote') },
|
|
98
|
+
{ name: 'Purchase Cancelled Note', value: 'purchasecancellednote', operations: txOps('purchasecancellednote', '/purchasecancellednote') },
|
|
99
|
+
{ name: 'Cash Purchase', value: 'cashpurchase', operations: txOps('cashpurchase', '/cashpurchase') },
|
|
100
|
+
{ name: 'Goods Received', value: 'goodsreceived', operations: txOps('goodsreceived', '/goodsreceived') },
|
|
101
|
+
{ name: 'Extra Goods Received', value: 'extragoodsreceived', operations: txOps('extragoodsreceived', '/extragoodsreceived') },
|
|
102
|
+
// ── AR (8) ────────────────────────────────────────────────────────────────
|
|
103
|
+
{ name: 'Customer', value: 'customer', operations: hybridOps('customer', '/customer') },
|
|
104
|
+
{ name: 'Customer Invoice', value: 'customerinvoice', operations: txOps('customerinvoice', '/customerinvoice') },
|
|
105
|
+
{ name: 'Customer Credit Note', value: 'customercreditnote', operations: txOps('customercreditnote', '/customercreditnote') },
|
|
106
|
+
{ name: 'Customer Debit Note', value: 'customerdebitnote', operations: txOps('customerdebitnote', '/customerdebitnote') },
|
|
107
|
+
{ name: 'Customer Payment', value: 'customerpayment', operations: txOps('customerpayment', '/customerpayment') },
|
|
108
|
+
{ name: 'Customer Deposit', value: 'customerdeposit', operations: txOps('customerdeposit', '/customerdeposit') },
|
|
109
|
+
{ name: 'Customer Refund', value: 'customerrefund', operations: txOps('customerrefund', '/customerrefund') },
|
|
110
|
+
{ name: 'Customer Contra', value: 'customercontra', operations: txOps('customercontra', '/customercontra') },
|
|
111
|
+
// ── AP (8) ────────────────────────────────────────────────────────────────
|
|
112
|
+
{ name: 'Supplier', value: 'supplier', operations: hybridOps('supplier', '/supplier') },
|
|
113
|
+
{ name: 'Supplier Invoice', value: 'supplierinvoice', operations: txOps('supplierinvoice', '/supplierinvoice') },
|
|
114
|
+
{ name: 'Supplier Credit Note', value: 'suppliercreditnote', operations: txOps('suppliercreditnote', '/suppliercreditnote') },
|
|
115
|
+
{ name: 'Supplier Debit Note', value: 'supplierdebitnote', operations: txOps('supplierdebitnote', '/supplierdebitnote') },
|
|
116
|
+
{ name: 'Supplier Payment', value: 'supplierpayment', operations: txOps('supplierpayment', '/supplierpayment') },
|
|
117
|
+
{ name: 'Supplier Deposit', value: 'supplierdeposit', operations: txOps('supplierdeposit', '/supplierdeposit') },
|
|
118
|
+
{ name: 'Supplier Refund', value: 'supplierrefund', operations: txOps('supplierrefund', '/supplierrefund') },
|
|
119
|
+
{ name: 'Supplier Contra', value: 'suppliercontra', operations: txOps('suppliercontra', '/suppliercontra') },
|
|
120
|
+
// ── GL / STOCK / MFG (14) ─────────────────────────────────────────────────
|
|
121
|
+
{ name: 'Journal Entry', value: 'journalentry', operations: txOps('journalentry', '/journalentry') },
|
|
122
|
+
{ name: 'Payment Voucher', value: 'paymentvoucher', operations: txOps('paymentvoucher', '/paymentvoucher') },
|
|
123
|
+
{ name: 'Receipt Voucher', value: 'receiptvoucher', operations: txOps('receiptvoucher', '/receiptvoucher') },
|
|
124
|
+
{ name: 'Bank Adjustment', value: 'bankadjustment', operations: txOps('bankadjustment', '/bankadjustment') },
|
|
125
|
+
{ name: 'Stock Item', value: 'stockitem', operations: txOps('stockitem', '/stockitem') },
|
|
126
|
+
{ name: 'Stock Adjustment', value: 'stockadjustment', operations: txOps('stockadjustment', '/stockadjustment') },
|
|
127
|
+
{ name: 'Stock Issue', value: 'stockissue', operations: txOps('stockissue', '/stockissue') },
|
|
128
|
+
{ name: 'Stock Received', value: 'stockreceived', operations: txOps('stockreceived', '/stockreceived') },
|
|
129
|
+
{ name: 'Stock Transfer', value: 'stocktransfer', operations: txOps('stocktransfer', '/stocktransfer') },
|
|
130
|
+
{ name: 'Assembly', value: 'assembly', operations: txOps('assembly', '/assembly') },
|
|
131
|
+
{ name: 'Disassembly', value: 'disassembly', operations: txOps('disassembly', '/disassembly') },
|
|
132
|
+
{ name: 'Job Order', value: 'joborder', operations: txOps('joborder', '/joborder') },
|
|
133
|
+
{ name: 'Item Template', value: 'itemtemplate', operations: txOps('itemtemplate', '/itemtemplate') },
|
|
134
|
+
{ name: 'Currency', value: 'currency', operations: hybridOps('currency', '/currency') },
|
|
135
|
+
// ── REPORTS (13) ─────────────────────────────────────────────────────────
|
|
136
|
+
{ name: 'Company Profile', value: 'profile', operations: reportOp('profile', '/profile') },
|
|
137
|
+
{ name: 'App Version', value: 'version', operations: reportOp('version', '/version') },
|
|
138
|
+
{ name: 'Stock Aging', value: 'stockaging', operations: reportOp('stockaging', '/stockaging') },
|
|
139
|
+
{ name: 'Stock Analysis', value: 'stockanalysis', operations: reportOp('stockanalysis', '/stockanalysis') },
|
|
140
|
+
{ name: 'Stock Balance Inquiry', value: 'stockbalanceinquiry', operations: reportOp('stockbalanceinquiry', '/stockbalanceinquiry') },
|
|
141
|
+
{ name: 'Stock Batch Expiry', value: 'stockbatchexpiry', operations: reportOp('stockbatchexpiry', '/stockbatchexpiry') },
|
|
142
|
+
{ name: 'Stock Card', value: 'stockcard', operations: reportOp('stockcard', '/stockcard') },
|
|
143
|
+
{ name: 'Stock Card Qty', value: 'stockcardqty', operations: reportOp('stockcardqty', '/stockcardqty') },
|
|
144
|
+
{ name: 'Stock Month End Balance', value: 'stockmonthendbalance', operations: reportOp('stockmonthendbalance', '/stockmonthendbalance') },
|
|
145
|
+
{ name: 'Stock Physical Worksheet', value: 'stockphysicalworksheet', operations: reportOp('stockphysicalworksheet', '/stockphysicalworksheet') },
|
|
146
|
+
{ name: 'Stock Reorder Advice', value: 'stockreorderadvice', operations: reportOp('stockreorderadvice', '/stockreorderadvice') },
|
|
147
|
+
{ name: 'Stock Serial No Conflict', value: 'stockserialnumberconflict', operations: reportOp('stockserialnumberconflict', '/stockserialnumberconflict') },
|
|
148
|
+
{ name: 'Stock Serial No Outstanding', value: 'stockserialnumberoutstanding', operations: reportOp('stockserialnumberoutstanding', '/stockserialnumberoutstanding') },
|
|
149
|
+
];
|
|
150
|
+
// Flat lookup map: operation_key → OperationDef
|
|
151
|
+
exports.OPERATION_MAP = {};
|
|
152
|
+
for (const resource of exports.RESOURCES) {
|
|
153
|
+
for (const op of resource.operations) {
|
|
154
|
+
exports.OPERATION_MAP[op.key] = op;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Keys for operations that need a path param (used for displayOptions)
|
|
158
|
+
exports.OPS_WITH_PATH_PARAM = Object.values(exports.OPERATION_MAP)
|
|
159
|
+
.filter((op) => op.pathParam !== null)
|
|
160
|
+
.map((op) => op.key);
|
|
161
|
+
// Keys for list operations (GET, no path param, not report)
|
|
162
|
+
exports.OPS_LIST = Object.values(exports.OPERATION_MAP)
|
|
163
|
+
.filter((op) => op.pathParam === null && op.method === 'GET' && op.docType !== 'report')
|
|
164
|
+
.map((op) => op.key);
|
|
165
|
+
// Keys for all GET operations with no path param (list + reports)
|
|
166
|
+
exports.OPS_GET_NO_PARAM = Object.values(exports.OPERATION_MAP)
|
|
167
|
+
.filter((op) => op.pathParam === null && op.method === 'GET')
|
|
168
|
+
.map((op) => op.key);
|
|
169
|
+
// Keys for raw_json body operations
|
|
170
|
+
exports.OPS_RAW_JSON = Object.values(exports.OPERATION_MAP)
|
|
171
|
+
.filter((op) => op.bodyMode === 'raw_json')
|
|
172
|
+
.map((op) => op.key);
|
|
173
|
+
// Keys for guided body operations
|
|
174
|
+
exports.OPS_GUIDED = Object.values(exports.OPERATION_MAP)
|
|
175
|
+
.filter((op) => op.bodyMode === 'guided')
|
|
176
|
+
.map((op) => op.key);
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVzL1NxbEFjY291bnRpbmcvb3BlcmF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7OztHQVNHOzs7QUFvQkgsZ0ZBQWdGO0FBQ2hGLFVBQVU7QUFDVixnRkFBZ0Y7QUFDaEYsU0FBUyxTQUFTLENBQ2pCLFFBQWdCLEVBQ2hCLElBQVksRUFDWixZQUFnQyxNQUFNO0lBRXRDLE9BQU87UUFDTixFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVEsT0FBTyxFQUFJLElBQUksRUFBRSxNQUFNLEVBQUksS0FBSyxFQUFFLEdBQUcsUUFBUSxPQUFPLEVBQUksV0FBVyxFQUFFLFFBQVEsUUFBUSxVQUFVLEVBQWdCLE1BQU0sRUFBRSxLQUFLLEVBQUssSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBSSxPQUFPLEVBQUUsUUFBUSxFQUFFO1FBQ2pOLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxNQUFNLEVBQUssSUFBSSxFQUFFLEtBQUssRUFBSyxLQUFLLEVBQUUsR0FBRyxRQUFRLE1BQU0sRUFBSyxXQUFXLEVBQUUsZ0JBQWdCLFFBQVEsT0FBTyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFLLElBQUksRUFBRSxTQUFTLEVBQU8sUUFBUSxFQUFFLE1BQU0sRUFBSSxPQUFPLEVBQUUsUUFBUSxFQUFFO1FBQ2xOLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxRQUFRLFNBQVMsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLFFBQVEsRUFBRSxFQUFnQixNQUFNLEVBQUUsTUFBTSxFQUFJLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtRQUNqTixFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVEsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsUUFBUSxTQUFTLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixRQUFRLEVBQUUsRUFBVSxNQUFNLEVBQUUsS0FBSyxFQUFLLElBQUksRUFBRSxTQUFTLEVBQU8sUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO1FBQ2hOLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxRQUFRLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxRQUFRLFNBQVMsRUFBYSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQU8sUUFBUSxFQUFFLE1BQU0sRUFBSSxPQUFPLEVBQUUsUUFBUSxFQUFFO0tBQ2hOLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQ3RCLFFBQWdCLEVBQ2hCLElBQVksRUFDWixZQUFnQyxNQUFNO0lBRXRDLE9BQU87UUFDTixFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVEsT0FBTyxFQUFJLElBQUksRUFBRSxNQUFNLEVBQUksS0FBSyxFQUFFLEdBQUcsUUFBUSxPQUFPLEVBQUksV0FBVyxFQUFFLFFBQVEsUUFBUSxVQUFVLEVBQUksTUFBTSxFQUFFLEtBQUssRUFBSyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUU7UUFDck0sRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLFFBQVEsU0FBUyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsUUFBUSxFQUFFLEVBQUksTUFBTSxFQUFFLE1BQU0sRUFBSSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7UUFDck0sRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLFFBQVEsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLFFBQVEsRUFBRSxFQUFRLE1BQU0sRUFBRSxLQUFLLEVBQUssSUFBSSxFQUFFLFNBQVMsRUFBTyxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7UUFDcE0sRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLFFBQVEsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLFFBQVEsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBTSxRQUFRLEVBQUUsTUFBTSxFQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUU7S0FDcE0sQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLEtBQUssQ0FDYixRQUFnQixFQUNoQixJQUFZLEVBQ1osWUFBK0IsUUFBUTtJQUV2QyxPQUFPO1FBQ04sRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLE9BQU8sRUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFJLEtBQUssRUFBRSxHQUFHLFFBQVEsT0FBTyxFQUFJLFdBQVcsRUFBRSxRQUFRLFFBQVEsWUFBWSxFQUFPLE1BQU0sRUFBRSxLQUFLLEVBQUssSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBTSxPQUFPLEVBQUUsZUFBZSxFQUFFO1FBQ25OLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxNQUFNLEVBQUssSUFBSSxFQUFFLEtBQUssRUFBSyxLQUFLLEVBQUUsR0FBRyxRQUFRLE1BQU0sRUFBSyxXQUFXLEVBQUUsZ0JBQWdCLFFBQVEsRUFBRSxFQUFTLE1BQU0sRUFBRSxLQUFLLEVBQUssSUFBSSxFQUFFLFNBQVMsRUFBTyxRQUFRLEVBQUUsTUFBTSxFQUFNLE9BQU8sRUFBRSxlQUFlLEVBQUU7UUFDbE4sRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLFFBQVEsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLFFBQVEsV0FBVyxFQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUksSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFO1FBQ25OLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxRQUFRLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxRQUFRLFdBQVcsRUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFLLElBQUksRUFBRSxTQUFTLEVBQU8sUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFO1FBQ2xOLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxRQUFRLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxRQUFRLFdBQVcsRUFBRyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQU8sUUFBUSxFQUFFLE1BQU0sRUFBTSxPQUFPLEVBQUUsZUFBZSxFQUFFO0tBQ2pOLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsUUFBZ0IsRUFBRSxJQUFZO0lBQ2hELE9BQU87UUFDTixFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVEsT0FBTyxFQUFJLElBQUksRUFBRSxNQUFNLEVBQUksS0FBSyxFQUFFLEdBQUcsUUFBUSxPQUFPLEVBQUksV0FBVyxFQUFFLFFBQVEsUUFBUSxVQUFVLEVBQUssTUFBTSxFQUFFLEtBQUssRUFBSyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBSSxRQUFRLEVBQUUsTUFBTSxFQUFJLE9BQU8sRUFBRSxlQUFlLEVBQUU7UUFDL00sRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLE1BQU0sRUFBSyxJQUFJLEVBQUUsS0FBSyxFQUFLLEtBQUssRUFBRSxHQUFHLFFBQVEsTUFBTSxFQUFLLFdBQVcsRUFBRSxnQkFBZ0IsUUFBUSxFQUFFLEVBQUksTUFBTSxFQUFFLEtBQUssRUFBSyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFJLE9BQU8sRUFBRSxlQUFlLEVBQUU7UUFDOU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLFFBQVEsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLFFBQVEsRUFBRSxFQUFPLE1BQU0sRUFBRSxNQUFNLEVBQUksSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUksUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFO1FBQzdNLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxRQUFRLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxRQUFRLEVBQUUsRUFBTyxNQUFNLEVBQUUsS0FBSyxFQUFLLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRTtRQUM3TSxFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVEsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsUUFBUSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksUUFBUSxFQUFFLEVBQU8sTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFJLE9BQU8sRUFBRSxlQUFlLEVBQUU7S0FDN00sQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxRQUFnQixFQUFFLElBQVk7SUFDL0MsT0FBTztRQUNOLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxRQUFRLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxRQUFRLGNBQWMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtLQUN4TCxDQUFDO0FBQ0gsQ0FBQztBQUVELGdGQUFnRjtBQUNoRixtQkFBbUI7QUFDbkIsZ0ZBQWdGO0FBQ25FLFFBQUEsU0FBUyxHQUFrQjtJQUN2Qyw2RUFBNkU7SUFDN0UsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFXLEtBQUssRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUU7SUFDcEcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFhLEtBQUssRUFBRSxPQUFPLEVBQVksVUFBVSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUU7SUFDaEcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFjLEtBQUssRUFBRSxNQUFNLEVBQWEsVUFBVSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUU7SUFDOUYsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUksS0FBSyxFQUFFLGVBQWUsRUFBSSxVQUFVLEVBQUUsU0FBUyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFO0lBQ2hILEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBTyxLQUFLLEVBQUUsWUFBWSxFQUFPLFVBQVUsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxFQUFFO0lBQzFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBUSxLQUFLLEVBQUUsV0FBVyxFQUFRLFVBQVUsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxFQUFFO0lBQ3hHLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBTyxLQUFLLEVBQUUsT0FBTyxFQUFZLFVBQVUsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtJQUMzRyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFO0lBQ3pILEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBVSxLQUFLLEVBQUUsVUFBVSxFQUFTLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxFQUFFO0lBQ3RHLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBTSxLQUFLLEVBQUUsYUFBYSxFQUFNLFVBQVUsRUFBRSxTQUFTLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxFQUFFO0lBQzVHLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFJLEtBQUssRUFBRSxVQUFVLEVBQVMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQUU7SUFDdEcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFTLEtBQUssRUFBRSxVQUFVLEVBQVMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQUU7SUFDdEcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFXLEtBQUssRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUU7SUFDcEcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFXLEtBQUssRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUU7SUFDcEcsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUksS0FBSyxFQUFFLGVBQWUsRUFBSSxVQUFVLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFO0lBQ3JILEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBTyxLQUFLLEVBQUUsWUFBWSxFQUFPLFVBQVUsRUFBRSxjQUFjLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxFQUFFO0lBQy9HLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBWSxLQUFLLEVBQUUsUUFBUSxFQUFXLFVBQVUsRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRTtJQUNsSCxFQUFFLElBQUksRUFBRSxLQUFLLEVBQWUsS0FBSyxFQUFFLEtBQUssRUFBYyxVQUFVLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7SUFDNUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFhLEtBQUssRUFBRSxPQUFPLEVBQVksVUFBVSxFQUFFLGNBQWMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUU7SUFDckcsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUcsS0FBSyxFQUFFLE9BQU8sRUFBWSxVQUFVLEVBQUUsY0FBYyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7SUFFaEgsNkVBQTZFO0lBQzdFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBUyxLQUFLLEVBQUUsY0FBYyxFQUFRLFVBQVUsRUFBRSxLQUFLLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQyxFQUFFO0lBQ2pILEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBVyxLQUFLLEVBQUUsWUFBWSxFQUFVLFVBQVUsRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxFQUFFO0lBQzdHLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBTSxVQUFVLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLEVBQUU7SUFDckgsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUssS0FBSyxFQUFFLGlCQUFpQixFQUFLLFVBQVUsRUFBRSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsRUFBRTtJQUN2SCxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBTSxLQUFLLEVBQUUsZ0JBQWdCLEVBQU0sVUFBVSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFO0lBQ3JILEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixFQUFFLHFCQUFxQixDQUFDLEVBQUU7SUFDN0gsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBRSxXQUFXLEVBQVcsVUFBVSxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLEVBQUU7SUFDM0csRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQVEsS0FBSyxFQUFFLGVBQWUsRUFBTyxVQUFVLEVBQUUsS0FBSyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFO0lBQ25ILEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixFQUFFLHFCQUFxQixDQUFDLEVBQUU7SUFFN0gsNkVBQTZFO0lBQzdFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFVLEtBQUssRUFBRSxpQkFBaUIsRUFBUSxVQUFVLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLEVBQUU7SUFDOUgsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQVksS0FBSyxFQUFFLGVBQWUsRUFBVSxVQUFVLEVBQUUsS0FBSyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFO0lBQzFILEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFVLEtBQUssRUFBRSxpQkFBaUIsRUFBUSxVQUFVLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLEVBQUU7SUFDOUgsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQVcsS0FBSyxFQUFFLGtCQUFrQixFQUFPLFVBQVUsRUFBRSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsbUJBQW1CLENBQUMsRUFBRTtJQUNoSSxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQU0sVUFBVSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO0lBQ2xJLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFHLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLHVCQUF1QixFQUFFLHdCQUF3QixDQUFDLEVBQUU7SUFDMUksRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFhLEtBQUssRUFBRSxjQUFjLEVBQVcsVUFBVSxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLEVBQUU7SUFDeEgsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQVksS0FBSyxFQUFFLGVBQWUsRUFBVSxVQUFVLEVBQUUsS0FBSyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFO0lBQzFILEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFNLEtBQUssRUFBRSxvQkFBb0IsRUFBSyxVQUFVLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixFQUFFLHFCQUFxQixDQUFDLEVBQUU7SUFFcEksNkVBQTZFO0lBQzdFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBYyxLQUFLLEVBQUUsVUFBVSxFQUFXLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxFQUFFO0lBQzVHLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFNLEtBQUssRUFBRSxpQkFBaUIsRUFBSSxVQUFVLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLEVBQUU7SUFDdEgsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsb0JBQW9CLEVBQUUscUJBQXFCLENBQUMsRUFBRTtJQUM1SCxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO0lBQzFILEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFNLEtBQUssRUFBRSxpQkFBaUIsRUFBSSxVQUFVLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLEVBQUU7SUFDdEgsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQU0sS0FBSyxFQUFFLGlCQUFpQixFQUFJLFVBQVUsRUFBRSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsRUFBRTtJQUN0SCxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUssVUFBVSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFO0lBQ3BILEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBSyxVQUFVLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLEVBQUU7SUFFcEgsNkVBQTZFO0lBQzdFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBYyxLQUFLLEVBQUUsVUFBVSxFQUFXLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxFQUFFO0lBQzVHLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFNLEtBQUssRUFBRSxpQkFBaUIsRUFBSSxVQUFVLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLEVBQUU7SUFDdEgsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsb0JBQW9CLEVBQUUscUJBQXFCLENBQUMsRUFBRTtJQUM1SCxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO0lBQzFILEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFNLEtBQUssRUFBRSxpQkFBaUIsRUFBSSxVQUFVLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLEVBQUU7SUFDdEgsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQU0sS0FBSyxFQUFFLGlCQUFpQixFQUFJLFVBQVUsRUFBRSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsRUFBRTtJQUN0SCxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUssVUFBVSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFO0lBQ3BILEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBSyxVQUFVLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLEVBQUU7SUFFcEgsNkVBQTZFO0lBQzdFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBSyxLQUFLLEVBQUUsY0FBYyxFQUFLLFVBQVUsRUFBRSxLQUFLLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQyxFQUFFO0lBQzFHLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFHLEtBQUssRUFBRSxnQkFBZ0IsRUFBRyxVQUFVLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLEVBQUU7SUFDOUcsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUcsS0FBSyxFQUFFLGdCQUFnQixFQUFHLFVBQVUsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUMsRUFBRTtJQUM5RyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUcsVUFBVSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFO0lBQzlHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBUSxLQUFLLEVBQUUsV0FBVyxFQUFRLFVBQVUsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxFQUFFO0lBQ3BHLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLEVBQUU7SUFDaEgsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFPLEtBQUssRUFBRSxZQUFZLEVBQU8sVUFBVSxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLEVBQUU7SUFDdEcsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUksS0FBSyxFQUFFLGVBQWUsRUFBSSxVQUFVLEVBQUUsS0FBSyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFO0lBQzVHLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFJLEtBQUssRUFBRSxlQUFlLEVBQUksVUFBVSxFQUFFLEtBQUssQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsRUFBRTtJQUM1RyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQVUsS0FBSyxFQUFFLFVBQVUsRUFBUyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsRUFBRTtJQUNsRyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQU8sS0FBSyxFQUFFLGFBQWEsRUFBTSxVQUFVLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsRUFBRTtJQUN4RyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQVMsS0FBSyxFQUFFLFVBQVUsRUFBUyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsRUFBRTtJQUNsRyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUssS0FBSyxFQUFFLGNBQWMsRUFBSyxVQUFVLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxlQUFlLENBQUMsRUFBRTtJQUMxRyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQVUsS0FBSyxFQUFFLFVBQVUsRUFBUyxVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsRUFBRTtJQUV0Ryw0RUFBNEU7SUFDNUUsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQWMsS0FBSyxFQUFFLFNBQVMsRUFBc0IsVUFBVSxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUU7SUFDMUgsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFrQixLQUFLLEVBQUUsU0FBUyxFQUFzQixVQUFVLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRTtJQUMxSCxFQUFFLElBQUksRUFBRSxhQUFhLEVBQWtCLEtBQUssRUFBRSxZQUFZLEVBQW1CLFVBQVUsRUFBRSxRQUFRLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxFQUFFO0lBQ2hJLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFlLEtBQUssRUFBRSxlQUFlLEVBQWdCLFVBQVUsRUFBRSxRQUFRLENBQUMsZUFBZSxFQUFFLGdCQUFnQixDQUFDLEVBQUU7SUFDdEksRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQVEsS0FBSyxFQUFFLHFCQUFxQixFQUFVLFVBQVUsRUFBRSxRQUFRLENBQUMscUJBQXFCLEVBQUUsc0JBQXNCLENBQUMsRUFBRTtJQUNsSixFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBVyxLQUFLLEVBQUUsa0JBQWtCLEVBQWEsVUFBVSxFQUFFLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFO0lBQzVJLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBbUIsS0FBSyxFQUFFLFdBQVcsRUFBb0IsVUFBVSxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLEVBQUU7SUFDOUgsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQWUsS0FBSyxFQUFFLGNBQWMsRUFBaUIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLEVBQUU7SUFDcEksRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQU0sS0FBSyxFQUFFLHNCQUFzQixFQUFTLFVBQVUsRUFBRSxRQUFRLENBQUMsc0JBQXNCLEVBQUUsdUJBQXVCLENBQUMsRUFBRTtJQUNwSixFQUFFLElBQUksRUFBRSwwQkFBMEIsRUFBSyxLQUFLLEVBQUUsd0JBQXdCLEVBQU8sVUFBVSxFQUFFLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSx5QkFBeUIsQ0FBQyxFQUFFO0lBQ3hKLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFTLEtBQUssRUFBRSxvQkFBb0IsRUFBVyxVQUFVLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixFQUFFLHFCQUFxQixDQUFDLEVBQUU7SUFDaEosRUFBRSxJQUFJLEVBQUUsMEJBQTBCLEVBQUssS0FBSyxFQUFFLDJCQUEyQixFQUFJLFVBQVUsRUFBRSxRQUFRLENBQUMsMkJBQTJCLEVBQUUsNEJBQTRCLENBQUMsRUFBRTtJQUM5SixFQUFFLElBQUksRUFBRSw2QkFBNkIsRUFBRSxLQUFLLEVBQUUsOEJBQThCLEVBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSwrQkFBK0IsQ0FBQyxFQUFFO0NBQ3BLLENBQUM7QUFFRixnREFBZ0Q7QUFDbkMsUUFBQSxhQUFhLEdBQWlDLEVBQUUsQ0FBQztBQUM5RCxLQUFLLE1BQU0sUUFBUSxJQUFJLGlCQUFTLEVBQUUsQ0FBQztJQUNsQyxLQUFLLE1BQU0sRUFBRSxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QyxxQkFBYSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztBQUNGLENBQUM7QUFFRCx1RUFBdUU7QUFDMUQsUUFBQSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFhLENBQUM7S0FDN0QsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQztLQUNyQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUV0Qiw0REFBNEQ7QUFDL0MsUUFBQSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBYSxDQUFDO0tBQ2xELE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUM7S0FDdkYsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFdEIsa0VBQWtFO0FBQ3JELFFBQUEsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBYSxDQUFDO0tBQzFELE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUM7S0FDNUQsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFdEIsb0NBQW9DO0FBQ3ZCLFFBQUEsWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQWEsQ0FBQztLQUN0RCxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDO0tBQzFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRXRCLGtDQUFrQztBQUNyQixRQUFBLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFhLENBQUM7S0FDcEQsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQztLQUN4QyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60">
|
|
2
|
+
<rect width="60" height="60" rx="10" fill="#1a1a2e"/>
|
|
3
|
+
<text x="50%" y="36" font-family="Arial,sans-serif" font-size="13" font-weight="bold"
|
|
4
|
+
fill="#4fc3f7" text-anchor="middle">SQL</text>
|
|
5
|
+
<rect x="8" y="40" width="44" height="3" rx="1.5" fill="#4fc3f7" opacity="0.6"/>
|
|
6
|
+
<rect x="8" y="46" width="30" height="3" rx="1.5" fill="#4fc3f7" opacity="0.3"/>
|
|
7
|
+
</svg>
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "n8n-nodes-sqlaccounting",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "n8n community node for SQL Accounting REST API (Malaysia). Credit-based usage via the SQL Accounting n8n Node platform.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"n8n-community-node-package",
|
|
7
|
+
"sql-accounting",
|
|
8
|
+
"malaysia",
|
|
9
|
+
"accounting",
|
|
10
|
+
"erp",
|
|
11
|
+
"automation"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"homepage": "https://github.com/laurentyew/n8n-nodes-sqlaccounting",
|
|
15
|
+
"author": {
|
|
16
|
+
"name": "Your Name",
|
|
17
|
+
"email": "your@email.com"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "https://github.com/laurentyew/n8n-nodes-sqlaccounting.git"
|
|
22
|
+
},
|
|
23
|
+
"main": "index.js",
|
|
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 && npm run lint"
|
|
31
|
+
},
|
|
32
|
+
"files": [
|
|
33
|
+
"dist"
|
|
34
|
+
],
|
|
35
|
+
"n8n": {
|
|
36
|
+
"n8nNodesApiVersion": 1,
|
|
37
|
+
"credentials": [
|
|
38
|
+
"dist/credentials/SqlAccountingApi.credentials.js"
|
|
39
|
+
],
|
|
40
|
+
"nodes": [
|
|
41
|
+
"dist/nodes/SqlAccounting/SqlAccounting.node.js"
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/node": "^18.16.16",
|
|
46
|
+
"@typescript-eslint/parser": "^6.0.0",
|
|
47
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
48
|
+
"eslint": "^8.0.0",
|
|
49
|
+
"eslint-plugin-n8n-nodes-base": "^1.16.1",
|
|
50
|
+
"gulp": "^4.0.2",
|
|
51
|
+
"prettier": "^3.0.0",
|
|
52
|
+
"typescript": "^5.1.3"
|
|
53
|
+
},
|
|
54
|
+
"peerDependencies": {
|
|
55
|
+
"n8n-workflow": "*"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {}
|
|
58
|
+
}
|