n8n-nodes-smartschool 0.1.4 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -1
- package/dist/credentials/SmartschoolPortalApi.credentials.d.ts +8 -0
- package/dist/credentials/SmartschoolPortalApi.credentials.js +54 -0
- package/dist/credentials/SmartschoolPortalApi.credentials.js.map +1 -0
- package/dist/nodes/SmartSchool/GenericFunctions.d.ts +2 -0
- package/dist/nodes/SmartSchool/GenericFunctions.js +17 -1
- package/dist/nodes/SmartSchool/GenericFunctions.js.map +1 -1
- package/dist/nodes/SmartSchool/SmartSchool.node.js +1115 -12
- package/dist/nodes/SmartSchool/SmartSchool.node.js.map +1 -1
- package/dist/nodes/SmartSchool/SmartSchoolPortal.node.d.ts +5 -0
- package/dist/nodes/SmartSchool/SmartSchoolPortal.node.js +1378 -0
- package/dist/nodes/SmartSchool/SmartSchoolPortal.node.js.map +1 -0
- package/dist/nodes/SmartSchool/SmartSchoolPortal.node.json +13 -0
- package/dist/nodes/SmartSchool/portal/safeFetch.d.ts +2 -0
- package/dist/nodes/SmartSchool/portal/safeFetch.js +34 -0
- package/dist/nodes/SmartSchool/portal/safeFetch.js.map +1 -0
- package/dist/nodes/SmartSchool/portal/smscHeadlessLogin.d.ts +15 -0
- package/dist/nodes/SmartSchool/portal/smscHeadlessLogin.js +9 -0
- package/dist/nodes/SmartSchool/portal/smscHeadlessLogin.js.map +1 -0
- package/dist/package.json +8 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -4
package/README.md
CHANGED
|
@@ -34,6 +34,7 @@ All functionality is exposed by a single node named **SmartSchool**. It currentl
|
|
|
34
34
|
| `Absence` | `Get Absents`, `Get Absents with Alias`, `Get Absents by Date`, `Get Absents with Alias by Date`, `Get Absents with Internal Number by Date`, `Get Absents with Username by Date`, `Get Absents by Date and Group` | Pull absence data by student, date, or class/group with optional alias labels. |
|
|
35
35
|
| `Course` | `Get Courses`, `Add Course`, `Add Course Students`, `Add Course Teacher` | List courses or manage course assignments for classes and teachers. |
|
|
36
36
|
| `System` | `Start Skore Sync`, `Check Status`, `Get Student Career`, `Get Deliberation Lines` | Kick off Skore sync jobs, check their status, and read student career history. |
|
|
37
|
+
| `Portal` | `Generate Session`, `Validate Session`, `Fetch Planner`, `Fetch Email Inbox`, `Fetch Email`, `Fetch Results`, `Get Gradebook Templates`, `Get Gradebook Config`, `Get Gradebook Pupil Tree`, `Get Gradebook Categories`, `Get Gradebook Category Grades (Pupil)`, `Get Gradebook Category Grades (Group)`, `Get Presence Config`, `Get Presence Class`, `Get Presence Day (All Classes)` | Uses Smartschool web endpoints via a session cookie to access planner, inbox/sent mail, results, gradebook data, and presences. |
|
|
37
38
|
|
|
38
39
|
Roadmap work (additional API coverage) is tracked in `docs/SMARTSCHOOL-ROADMAP.md`.
|
|
39
40
|
|
|
@@ -44,7 +45,29 @@ Create a credential of type **SmartSchool API** and provide:
|
|
|
44
45
|
1. `API Endpoint` – e.g. `https://myschool.smartschool.be/Webservices/V3` (without `?wsdl`).
|
|
45
46
|
2. `Access Code` – the SmartSchool API access code tied to your tenant.
|
|
46
47
|
|
|
47
|
-
The credential is reused by every resource/operation. If you rotate the access code, update the credential and all workflows keep working.
|
|
48
|
+
The credential is reused by every SOAP resource/operation. If you rotate the access code, update the credential and all workflows keep working.
|
|
49
|
+
|
|
50
|
+
The SOAP API and the Portal endpoints are separate systems with separate credentials. Use the SOAP credential for SOAP resources, and the Portal credential for Portal operations.
|
|
51
|
+
|
|
52
|
+
For **Portal** operations, create a **Smartschool Portal Login** credential with:
|
|
53
|
+
|
|
54
|
+
1. `Smartschool Domain` – e.g. `myschool.smartschool.be` (no `https://`).
|
|
55
|
+
2. `Username`, `Password`, and `Date of Birth` as required.
|
|
56
|
+
3. `TOTP Secret` (optional) for 2FA (base32 seed, no spaces).
|
|
57
|
+
|
|
58
|
+
Presence operations require the portal user ID to fetch a session token, so you will need to provide a `Presence User ID` when calling the presence endpoints.
|
|
59
|
+
|
|
60
|
+
These operations rely on Playwright. Install browser dependencies once with:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npx playwright install
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
To debug MFA flows, run n8n with a visible browser:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
SMARTSCHOOL_HEADLESS=0 n8n start
|
|
70
|
+
```
|
|
48
71
|
|
|
49
72
|
## Compatibility
|
|
50
73
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Icon, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class SmartschoolPortalApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
icon: Icon;
|
|
6
|
+
documentationUrl: string;
|
|
7
|
+
properties: INodeProperties[];
|
|
8
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SmartschoolPortalApi = void 0;
|
|
4
|
+
class SmartschoolPortalApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'smartschoolPortalApi';
|
|
7
|
+
this.displayName = 'Smartschool Portal API';
|
|
8
|
+
this.icon = { light: 'file:../icons/smartschool.logo.svg', dark: 'file:../icons/smartschool.logo.dark.svg' };
|
|
9
|
+
this.documentationUrl = 'https://schoolsync.gitbook.io/smartschool-kit';
|
|
10
|
+
this.properties = [
|
|
11
|
+
{
|
|
12
|
+
displayName: 'Smartschool Domain',
|
|
13
|
+
placeholder: 'school.smartschool.be',
|
|
14
|
+
name: 'domain',
|
|
15
|
+
type: 'string',
|
|
16
|
+
default: '',
|
|
17
|
+
required: true,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
displayName: 'Username',
|
|
21
|
+
name: 'username',
|
|
22
|
+
type: 'string',
|
|
23
|
+
required: true,
|
|
24
|
+
default: '',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
displayName: 'TOTP Secret (2FA)',
|
|
28
|
+
name: 'totpSecret',
|
|
29
|
+
type: 'string',
|
|
30
|
+
typeOptions: { password: true },
|
|
31
|
+
required: false,
|
|
32
|
+
default: '',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
displayName: 'Password',
|
|
36
|
+
name: 'password',
|
|
37
|
+
type: 'string',
|
|
38
|
+
typeOptions: { password: true },
|
|
39
|
+
required: true,
|
|
40
|
+
default: '',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
displayName: 'Date of Birth (YYYY-MM-DD)',
|
|
44
|
+
placeholder: 'YYYY-MM-DD',
|
|
45
|
+
name: 'birthdate',
|
|
46
|
+
type: 'dateTime',
|
|
47
|
+
required: true,
|
|
48
|
+
default: '',
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.SmartschoolPortalApi = SmartschoolPortalApi;
|
|
54
|
+
//# sourceMappingURL=SmartschoolPortalApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartschoolPortalApi.credentials.js","sourceRoot":"","sources":["../../credentials/SmartschoolPortalApi.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAa,oBAAoB;IAAjC;QACC,SAAI,GAAG,sBAAsB,CAAC;QAC9B,gBAAW,GAAG,wBAAwB,CAAC;QACvC,SAAI,GAAS,EAAE,KAAK,EAAE,oCAAoC,EAAE,IAAI,EAAE,yCAAyC,EAAE,CAAC;QAC9G,qBAAgB,GAAG,+CAA+C,CAAC;QACnE,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,oBAAoB;gBACjC,WAAW,EAAE,uBAAuB;gBACpC,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,4BAA4B;gBACzC,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,EAAE;aACX;SACD,CAAC;IACH,CAAC;CAAA;AA9CD,oDA8CC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { IExecuteFunctions } from 'n8n-workflow';
|
|
2
|
+
export declare const parseXmlSimple: (xml: string) => {};
|
|
3
|
+
export declare const plaintextToHtml: (value: string) => string;
|
|
2
4
|
export declare function getSmartSchoolCredentials(this: IExecuteFunctions): Promise<{
|
|
3
5
|
apiEndpoint: string;
|
|
4
6
|
accesscode: string;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.plaintextToHtml = exports.parseXmlSimple = void 0;
|
|
3
4
|
exports.getSmartSchoolCredentials = getSmartSchoolCredentials;
|
|
4
5
|
exports.callSmartschoolSoap = callSmartschoolSoap;
|
|
5
6
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
@@ -9,6 +10,7 @@ const xmlEscape = (value) => value
|
|
|
9
10
|
.replace(/>/g, '>')
|
|
10
11
|
.replace(/"/g, '"')
|
|
11
12
|
.replace(/'/g, ''');
|
|
13
|
+
const htmlEscape = (value) => xmlEscape(value);
|
|
12
14
|
const decodeXmlEntities = (value) => value
|
|
13
15
|
.replace(/</g, '<')
|
|
14
16
|
.replace(/>/g, '>')
|
|
@@ -101,6 +103,7 @@ const parseXmlSimple = (xml) => {
|
|
|
101
103
|
const normalized = normalize(root);
|
|
102
104
|
return (_a = normalized.__root__) !== null && _a !== void 0 ? _a : normalized;
|
|
103
105
|
};
|
|
106
|
+
exports.parseXmlSimple = parseXmlSimple;
|
|
104
107
|
const parseSoapResponse = async (xml) => {
|
|
105
108
|
const faultMatch = xml.match(/<faultstring[^>]*>([\s\S]*?)<\/faultstring>/i);
|
|
106
109
|
if (faultMatch === null || faultMatch === void 0 ? void 0 : faultMatch[1]) {
|
|
@@ -133,10 +136,23 @@ const parseSoapResponse = async (xml) => {
|
|
|
133
136
|
}
|
|
134
137
|
}
|
|
135
138
|
if (normalizedValue.startsWith('<')) {
|
|
136
|
-
return parseXmlSimple(normalizedValue);
|
|
139
|
+
return (0, exports.parseXmlSimple)(normalizedValue);
|
|
137
140
|
}
|
|
138
141
|
return normalizedValue;
|
|
139
142
|
};
|
|
143
|
+
const plaintextToHtml = (value) => {
|
|
144
|
+
const trimmed = value.trim();
|
|
145
|
+
const escaped = htmlEscape(trimmed);
|
|
146
|
+
if (!escaped) {
|
|
147
|
+
return '<html><body></body></html>';
|
|
148
|
+
}
|
|
149
|
+
const paragraphs = escaped
|
|
150
|
+
.split(/\n{2,}/)
|
|
151
|
+
.map((paragraph) => `<p>${paragraph.replace(/\n/g, '<br>')}</p>`)
|
|
152
|
+
.join('');
|
|
153
|
+
return `<html><body>${paragraphs}</body></html>`;
|
|
154
|
+
};
|
|
155
|
+
exports.plaintextToHtml = plaintextToHtml;
|
|
140
156
|
async function getSmartSchoolCredentials() {
|
|
141
157
|
const credentials = (await this.getCredentials('smartSchoolApi'));
|
|
142
158
|
const apiEndpoint = credentials === null || credentials === void 0 ? void 0 : credentials.apiEndpoint;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/SmartSchool/GenericFunctions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/SmartSchool/GenericFunctions.ts"],"names":[],"mappings":"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"}
|