@teamphnx/sduiapi 0.1.4
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 +674 -0
- package/README.md +248 -0
- package/dist/auth/webUntisAuth.d.ts +3 -0
- package/dist/auth/webUntisAuth.d.ts.map +1 -0
- package/dist/auth/webUntisAuth.js +202 -0
- package/dist/auth/webUntisAuth.js.map +1 -0
- package/dist/client.d.ts +22 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +192 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.d.ts +9 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +10 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors.d.ts +5 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +9 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -0
- package/dist/types.d.ts +42 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/logging.d.ts +3 -0
- package/dist/utils/logging.d.ts.map +1 -0
- package/dist/utils/logging.js +11 -0
- package/dist/utils/logging.js.map +1 -0
- package/dist/utils/parsers.d.ts +4 -0
- package/dist/utils/parsers.d.ts.map +1 -0
- package/dist/utils/parsers.js +20 -0
- package/dist/utils/parsers.js.map +1 -0
- package/dist/utils/url.d.ts +3 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js +13 -0
- package/dist/utils/url.js.map +1 -0
- package/package.json +58 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import axios, {} from 'axios';
|
|
2
|
+
import { authenticateWithWebUntis } from './auth/webUntisAuth.js';
|
|
3
|
+
import { DEFAULT_USER_AGENT, SDUI_API_BASE_URL } from './constants.js';
|
|
4
|
+
export class SduiClient {
|
|
5
|
+
accessToken;
|
|
6
|
+
http;
|
|
7
|
+
constructor(accessToken, http) {
|
|
8
|
+
this.accessToken = accessToken;
|
|
9
|
+
this.http = http;
|
|
10
|
+
}
|
|
11
|
+
static async authenticateWithWebUntis(credentials, options = {}) {
|
|
12
|
+
const { accessToken, http } = await authenticateWithWebUntis(credentials, options);
|
|
13
|
+
return new SduiClient(accessToken, http);
|
|
14
|
+
}
|
|
15
|
+
static fromAccessToken(accessToken, userAgent = DEFAULT_USER_AGENT) {
|
|
16
|
+
const http = axios.create({
|
|
17
|
+
baseURL: SDUI_API_BASE_URL,
|
|
18
|
+
headers: {
|
|
19
|
+
Accept: 'application/json',
|
|
20
|
+
Authorization: `Bearer ${accessToken}`,
|
|
21
|
+
'User-Agent': userAgent,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
return new SduiClient(accessToken, http);
|
|
25
|
+
}
|
|
26
|
+
async request(config) {
|
|
27
|
+
const response = await this.http.request(config);
|
|
28
|
+
return response.data;
|
|
29
|
+
}
|
|
30
|
+
async getCurrentUser() {
|
|
31
|
+
return this.request({
|
|
32
|
+
method: 'GET',
|
|
33
|
+
url: '/v1/users/self',
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
async getUserNews(userId, options = {}) {
|
|
37
|
+
const normalizedUserId = String(userId).trim();
|
|
38
|
+
if (!normalizedUserId) {
|
|
39
|
+
throw new TypeError('userId is required.');
|
|
40
|
+
}
|
|
41
|
+
const page = options.page ?? 1;
|
|
42
|
+
if (!Number.isInteger(page) || page < 1) {
|
|
43
|
+
throw new RangeError('page must be a positive integer.');
|
|
44
|
+
}
|
|
45
|
+
const search = options.search ?? '';
|
|
46
|
+
return this.request({
|
|
47
|
+
method: 'GET',
|
|
48
|
+
url: `/v1/users/${encodeURIComponent(normalizedUserId)}/feed/news`,
|
|
49
|
+
params: {
|
|
50
|
+
page,
|
|
51
|
+
search,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
async getUserChats(userId, options = {}) {
|
|
56
|
+
const normalizedUserId = String(userId).trim();
|
|
57
|
+
if (!normalizedUserId) {
|
|
58
|
+
throw new TypeError('userId is required.');
|
|
59
|
+
}
|
|
60
|
+
const page = options.page ?? 1;
|
|
61
|
+
if (!Number.isInteger(page) || page < 1) {
|
|
62
|
+
throw new RangeError('page must be a positive integer.');
|
|
63
|
+
}
|
|
64
|
+
const limit = options.limit ?? 10;
|
|
65
|
+
if (!Number.isInteger(limit) || limit < 1) {
|
|
66
|
+
throw new RangeError('limit must be a positive integer.');
|
|
67
|
+
}
|
|
68
|
+
const search = options.search ?? '';
|
|
69
|
+
return this.request({
|
|
70
|
+
method: 'GET',
|
|
71
|
+
url: `/v1/users/${encodeURIComponent(normalizedUserId)}/channels/chats`,
|
|
72
|
+
params: {
|
|
73
|
+
page,
|
|
74
|
+
search,
|
|
75
|
+
limit,
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
async getChatMessages(chatId, options = {}) {
|
|
80
|
+
const normalizedChatId = String(chatId).trim();
|
|
81
|
+
if (!normalizedChatId) {
|
|
82
|
+
throw new TypeError('chatId is required.');
|
|
83
|
+
}
|
|
84
|
+
const page = options.page ?? 1;
|
|
85
|
+
if (!Number.isInteger(page) || page < 1) {
|
|
86
|
+
throw new RangeError('page must be a positive integer.');
|
|
87
|
+
}
|
|
88
|
+
return this.request({
|
|
89
|
+
method: 'GET',
|
|
90
|
+
url: `/v1/channels/chats/${encodeURIComponent(normalizedChatId)}/messages`,
|
|
91
|
+
params: {
|
|
92
|
+
page,
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
async getMessageReaders(chatId, messageUuid, options = {}) {
|
|
97
|
+
const normalizedChatId = String(chatId).trim();
|
|
98
|
+
if (!normalizedChatId) {
|
|
99
|
+
throw new TypeError('chatId is required.');
|
|
100
|
+
}
|
|
101
|
+
const normalizedMessageUuid = String(messageUuid).trim();
|
|
102
|
+
if (!normalizedMessageUuid) {
|
|
103
|
+
throw new TypeError('messageUuid is required.');
|
|
104
|
+
}
|
|
105
|
+
const page = options.page ?? 1;
|
|
106
|
+
if (!Number.isInteger(page) || page < 1) {
|
|
107
|
+
throw new RangeError('page must be a positive integer.');
|
|
108
|
+
}
|
|
109
|
+
const search = options.search ?? '';
|
|
110
|
+
return this.request({
|
|
111
|
+
method: 'GET',
|
|
112
|
+
url: `/v1/channels/chats/${encodeURIComponent(normalizedChatId)}/messages/${encodeURIComponent(normalizedMessageUuid)}/readers`,
|
|
113
|
+
params: {
|
|
114
|
+
page,
|
|
115
|
+
search,
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
async markChatAsRead(chatId, payload = {}) {
|
|
120
|
+
const normalizedChatId = String(chatId).trim();
|
|
121
|
+
if (!normalizedChatId) {
|
|
122
|
+
throw new TypeError('chatId is required.');
|
|
123
|
+
}
|
|
124
|
+
return this.request({
|
|
125
|
+
method: 'POST',
|
|
126
|
+
url: `/v1/channels/chats/${encodeURIComponent(normalizedChatId)}/read`,
|
|
127
|
+
data: payload,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
async sendChatMessage(chatId, payload) {
|
|
131
|
+
const normalizedChatId = String(chatId).trim();
|
|
132
|
+
if (!normalizedChatId) {
|
|
133
|
+
throw new TypeError('chatId is required.');
|
|
134
|
+
}
|
|
135
|
+
if (typeof payload?.content !== 'string') {
|
|
136
|
+
throw new TypeError('content must be a string.');
|
|
137
|
+
}
|
|
138
|
+
if (!payload.content.trim()) {
|
|
139
|
+
throw new TypeError('content is required.');
|
|
140
|
+
}
|
|
141
|
+
const formData = new FormData();
|
|
142
|
+
for (const [key, value] of Object.entries(payload)) {
|
|
143
|
+
if (value === undefined || value === null) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
formData.append(key, String(value));
|
|
147
|
+
}
|
|
148
|
+
return this.request({
|
|
149
|
+
method: 'POST',
|
|
150
|
+
url: `/v1/channels/chats/${encodeURIComponent(normalizedChatId)}/messages`,
|
|
151
|
+
data: formData,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
async replyToChatMessage(chatId, replyUuid, payload) {
|
|
155
|
+
const normalizedReplyUuid = String(replyUuid).trim();
|
|
156
|
+
if (!normalizedReplyUuid) {
|
|
157
|
+
throw new TypeError('replyUuid is required.');
|
|
158
|
+
}
|
|
159
|
+
return this.sendChatMessage(chatId, {
|
|
160
|
+
...payload,
|
|
161
|
+
reply_uuid: normalizedReplyUuid,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
async deleteChatMessage(chatId, messageUuid) {
|
|
165
|
+
const normalizedChatId = String(chatId).trim();
|
|
166
|
+
if (!normalizedChatId) {
|
|
167
|
+
throw new TypeError('chatId is required.');
|
|
168
|
+
}
|
|
169
|
+
const normalizedMessageUuid = String(messageUuid).trim();
|
|
170
|
+
if (!normalizedMessageUuid) {
|
|
171
|
+
throw new TypeError('messageUuid is required.');
|
|
172
|
+
}
|
|
173
|
+
return this.request({
|
|
174
|
+
method: 'DELETE',
|
|
175
|
+
url: `/v1/channels/chats/${encodeURIComponent(normalizedChatId)}/messages/${encodeURIComponent(normalizedMessageUuid)}`,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
async getChannelUsers(channelId) {
|
|
179
|
+
const normalizedChannelId = String(channelId).trim();
|
|
180
|
+
if (!normalizedChannelId) {
|
|
181
|
+
throw new TypeError('channelId is required.');
|
|
182
|
+
}
|
|
183
|
+
return this.request({
|
|
184
|
+
method: 'GET',
|
|
185
|
+
url: `/v1/channels/${encodeURIComponent(normalizedChannelId)}/users`,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
getHttpClient() {
|
|
189
|
+
return this.http;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const SDUI_API_BASE_URL = "https://api.sdui.app";
|
|
2
|
+
export declare const SDUI_IDP_RETURN_URL = "https://idp.sdui.app/api/auth/return";
|
|
3
|
+
export declare const DEFAULT_USER_AGENT: string;
|
|
4
|
+
export declare const DEFAULT_REQUEST_HEADERS: {
|
|
5
|
+
readonly Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8";
|
|
6
|
+
readonly 'Accept-Language': "en-US,en;q=0.5";
|
|
7
|
+
};
|
|
8
|
+
export declare const DEFAULT_REDIRECT_HOP_LIMIT = 5;
|
|
9
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,yBAAyB,CAAC;AACxD,eAAO,MAAM,mBAAmB,yCAAyC,CAAC;AAE1E,eAAO,MAAM,kBAAkB,QAEyB,CAAC;AAEzD,eAAO,MAAM,uBAAuB;;;CAG1B,CAAC;AAEX,eAAO,MAAM,0BAA0B,IAAI,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const SDUI_API_BASE_URL = 'https://api.sdui.app';
|
|
2
|
+
export const SDUI_IDP_RETURN_URL = 'https://idp.sdui.app/api/auth/return';
|
|
3
|
+
export const DEFAULT_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ' +
|
|
4
|
+
'(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';
|
|
5
|
+
export const DEFAULT_REQUEST_HEADERS = {
|
|
6
|
+
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
|
|
7
|
+
'Accept-Language': 'en-US,en;q=0.5',
|
|
8
|
+
};
|
|
9
|
+
export const DEFAULT_REDIRECT_HOP_LIMIT = 5;
|
|
10
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;AACxD,MAAM,CAAC,MAAM,mBAAmB,GAAG,sCAAsC,CAAC;AAE1E,MAAM,CAAC,MAAM,kBAAkB,GAC3B,+DAA+D;IAC/D,oDAAoD,CAAC;AAEzD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACnC,MAAM,EAAE,uFAAuF;IAC/F,iBAAiB,EAAE,gBAAgB;CAC7B,CAAC;AAEX,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAc,SAAQ,KAAK;IACpC,SAAgB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;gBAE1C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAKxE"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAc,SAAQ,KAAK;IACpB,OAAO,CAAsC;IAE7D,YAAmB,OAAe,EAAE,OAAiC;QACjE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;CACJ"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { authenticateWithWebUntis } from './auth/webUntisAuth.js';
|
|
2
|
+
export { SduiClient } from './client.js';
|
|
3
|
+
export { SduiAuthError } from './errors.js';
|
|
4
|
+
export type { AuthenticateWithWebUntisOptions, AuthLogEvent, AuthLogger, GetChatMessagesOptions, GetMessageReadersOptions, GetUserChatsOptions, GetUserNewsOptions, MarkChatAsReadPayload, SendChatMessagePayload, SduiAuthResult, WebUntisCredentials, } from './types.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,YAAY,EACR,+BAA+B,EAC/B,YAAY,EACZ,UAAU,EACV,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,mBAAmB,GACtB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAAA,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { AxiosInstance } from 'axios';
|
|
2
|
+
export interface WebUntisCredentials {
|
|
3
|
+
schoolSlink: string;
|
|
4
|
+
username: string;
|
|
5
|
+
password: string;
|
|
6
|
+
}
|
|
7
|
+
export interface AuthLogEvent {
|
|
8
|
+
step: string;
|
|
9
|
+
message: string;
|
|
10
|
+
details?: Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
export type AuthLogger = (event: AuthLogEvent) => void;
|
|
13
|
+
export interface AuthenticateWithWebUntisOptions {
|
|
14
|
+
redirectHopLimit?: number;
|
|
15
|
+
userAgent?: string;
|
|
16
|
+
logger?: AuthLogger;
|
|
17
|
+
}
|
|
18
|
+
export interface GetUserNewsOptions {
|
|
19
|
+
page?: number;
|
|
20
|
+
search?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface GetUserChatsOptions {
|
|
23
|
+
page?: number;
|
|
24
|
+
search?: string;
|
|
25
|
+
limit?: number;
|
|
26
|
+
}
|
|
27
|
+
export interface GetChatMessagesOptions {
|
|
28
|
+
page?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface GetMessageReadersOptions {
|
|
31
|
+
page?: number;
|
|
32
|
+
search?: string;
|
|
33
|
+
}
|
|
34
|
+
export type MarkChatAsReadPayload = Record<string, unknown>;
|
|
35
|
+
export type SendChatMessagePayload = {
|
|
36
|
+
content: string;
|
|
37
|
+
} & Record<string, string | number | boolean | null | undefined>;
|
|
38
|
+
export interface SduiAuthResult {
|
|
39
|
+
accessToken: string;
|
|
40
|
+
http: AxiosInstance;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,MAAM,WAAW,mBAAmB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAEvD,MAAM,WAAW,+BAA+B;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5D,MAAM,MAAM,sBAAsB,GAAG;IACjC,OAAO,EAAE,MAAM,CAAC;CACnB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAEjE,MAAM,WAAW,cAAc;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;CACvB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/utils/logging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D,wBAAgB,OAAO,CACnB,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,IAAI,CAWN"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/utils/logging.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,OAAO,CACnB,MAA8B,EAC9B,IAAY,EACZ,OAAe,EACf,OAAiC;IAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO;IACX,CAAC;IAED,MAAM,KAAK,GAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC9C,IAAI,OAAO,EAAE,CAAC;QACV,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function extractMetaRefreshUrl(html: string): string | null;
|
|
2
|
+
export declare function extractCsrfToken(html: string): string | null;
|
|
3
|
+
export declare function maskSecret(secret: string, visiblePrefixLength?: number): string;
|
|
4
|
+
//# sourceMappingURL=parsers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../src/utils/parsers.ts"],"names":[],"mappings":"AAIA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOjE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,mBAAmB,SAAI,GAAG,MAAM,CAM1E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const META_REFRESH_URL_PATTERN = /<meta[^>]+http-equiv=["']?refresh["']?[^>]*content=["'][^"']*url=([^"'>]+)["']/i;
|
|
2
|
+
const CSRF_TOKEN_PATTERN = /"csrfToken":"([^"]+)"/i;
|
|
3
|
+
export function extractMetaRefreshUrl(html) {
|
|
4
|
+
const match = META_REFRESH_URL_PATTERN.exec(html);
|
|
5
|
+
if (!match?.[1]) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
return match[1].replaceAll('&', '&').trim();
|
|
9
|
+
}
|
|
10
|
+
export function extractCsrfToken(html) {
|
|
11
|
+
const match = CSRF_TOKEN_PATTERN.exec(html);
|
|
12
|
+
return match?.[1] ?? null;
|
|
13
|
+
}
|
|
14
|
+
export function maskSecret(secret, visiblePrefixLength = 5) {
|
|
15
|
+
if (secret.length <= visiblePrefixLength) {
|
|
16
|
+
return `${secret}...`;
|
|
17
|
+
}
|
|
18
|
+
return `${secret.slice(0, visiblePrefixLength)}...`;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=parsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/utils/parsers.ts"],"names":[],"mappings":"AAAA,MAAM,wBAAwB,GAC1B,iFAAiF,CAAC;AACtF,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAEpD,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAC9C,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,mBAAmB,GAAG,CAAC;IAC9D,IAAI,MAAM,CAAC,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACvC,OAAO,GAAG,MAAM,KAAK,CAAC;IAC1B,CAAC;IAED,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GACpB,MAAM,CASR;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5E"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function buildSduiAuthorizeUrl(idpUri, schoolSlink) {
|
|
2
|
+
const redirectUri = `https://sdui.app/sso-verify/${schoolSlink}`;
|
|
3
|
+
const statePayload = {
|
|
4
|
+
branding: 'UNTIS',
|
|
5
|
+
slink: schoolSlink,
|
|
6
|
+
goBackToParentWindow: false,
|
|
7
|
+
};
|
|
8
|
+
return `${idpUri}&redirect_uri=${encodeURIComponent(redirectUri)}&state=${encodeURIComponent(JSON.stringify(statePayload))}`;
|
|
9
|
+
}
|
|
10
|
+
export function resolveRedirectUrl(baseUrl, location) {
|
|
11
|
+
return new URL(location, baseUrl).toString();
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,qBAAqB,CACjC,MAAc,EACd,WAAmB;IAEnB,MAAM,WAAW,GAAG,+BAA+B,WAAW,EAAE,CAAC;IACjE,MAAM,YAAY,GAAG;QACjB,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,WAAW;QAClB,oBAAoB,EAAE,KAAK;KAC9B,CAAC;IAEF,OAAO,GAAG,MAAM,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,UAAU,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;AACjI,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,QAAgB;IAChE,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACjD,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@teamphnx/sduiapi",
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"description": "TypeScript SDUI API client with WebUntis authentication",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"sdui"
|
|
7
|
+
],
|
|
8
|
+
"homepage": "https://github.com/TeamPHNX/SduiAPI#readme",
|
|
9
|
+
"bugs": {
|
|
10
|
+
"url": "https://github.com/TeamPHNX/SduiAPI/issues"
|
|
11
|
+
},
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://github.com/TeamPHNX/SduiAPI.git"
|
|
15
|
+
},
|
|
16
|
+
"license": "GPL-3.0-only",
|
|
17
|
+
"author": "TeamPHNX",
|
|
18
|
+
"type": "module",
|
|
19
|
+
"main": "dist/index.js",
|
|
20
|
+
"types": "dist/index.d.ts",
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"import": "./dist/index.js"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"dist",
|
|
29
|
+
"README.md",
|
|
30
|
+
"LICENSE"
|
|
31
|
+
],
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=18"
|
|
34
|
+
},
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "tsc -p tsconfig.json",
|
|
37
|
+
"check": "tsc --noEmit -p tsconfig.json",
|
|
38
|
+
"dev": "npm run build",
|
|
39
|
+
"test": "vitest run",
|
|
40
|
+
"test:watch": "vitest",
|
|
41
|
+
"test:live": "vitest run --config vitest.live.config.ts"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"axios": "^1.13.1",
|
|
45
|
+
"axios-cookiejar-support": "^6.0.5",
|
|
46
|
+
"tough-cookie": "^5.1.2"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "^25.5.2",
|
|
50
|
+
"dotenv": "^17.2.3",
|
|
51
|
+
"eslint": "^10.1.0",
|
|
52
|
+
"nock": "^14.0.10",
|
|
53
|
+
"prettier": "^3.8.1",
|
|
54
|
+
"ts-node": "^10.9.2",
|
|
55
|
+
"typescript": "^6.0.2",
|
|
56
|
+
"vitest": "^3.2.4"
|
|
57
|
+
}
|
|
58
|
+
}
|