webs-sdk 0.3.4 → 0.3.5
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 +398 -398
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/libraries/auth.d.ts +17 -5
- package/dist/libraries/auth.d.ts.map +1 -1
- package/dist/libraries/auth.js +54 -2
- package/dist/libraries/auth.js.map +1 -1
- package/dist/libraries/index.d.ts +0 -2
- package/dist/libraries/index.d.ts.map +1 -1
- package/dist/libraries/index.js +1 -3
- package/dist/libraries/index.js.map +1 -1
- package/dist/libraries/networking.d.ts +37 -37
- package/dist/libraries/networking.js +293 -293
- package/dist/libraries/storage.d.ts +22 -22
- package/dist/libraries/storage.js +247 -247
- package/dist/libraries/utils.d.ts +34 -34
- package/dist/libraries/utils.js +256 -256
- package/index.js +1 -1
- package/package.json +37 -37
- package/types/index.d.ts +301 -350
- package/dist/libraries/corp_auth.d.ts +0 -45
- package/dist/libraries/corp_auth.d.ts.map +0 -1
- package/dist/libraries/corp_auth.js +0 -273
- package/dist/libraries/corp_auth.js.map +0 -1
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
interface UserData {
|
|
2
|
-
id: string;
|
|
3
|
-
email: string;
|
|
4
|
-
name: string;
|
|
5
|
-
role: string;
|
|
6
|
-
local_validation?: boolean;
|
|
7
|
-
}
|
|
8
|
-
interface CorporateAuthConfig {
|
|
9
|
-
authDomain: string;
|
|
10
|
-
authValidateUrl: string;
|
|
11
|
-
authLogoutUrl: string;
|
|
12
|
-
authLoginUrl: string;
|
|
13
|
-
appDomain: string;
|
|
14
|
-
authCookieDuration: number;
|
|
15
|
-
authRevalidationInterval: number;
|
|
16
|
-
jwtSecret: string;
|
|
17
|
-
authJwtIssuer: string;
|
|
18
|
-
}
|
|
19
|
-
export declare class CorporateAuthManager {
|
|
20
|
-
private config;
|
|
21
|
-
private storage;
|
|
22
|
-
private lastValidation;
|
|
23
|
-
constructor();
|
|
24
|
-
private init;
|
|
25
|
-
configure(customConfig: Partial<CorporateAuthConfig>): void;
|
|
26
|
-
private getAuthToken;
|
|
27
|
-
private setAuthToken;
|
|
28
|
-
private clearAuthToken;
|
|
29
|
-
private validateTokenWithAuthService;
|
|
30
|
-
private validateTokenLocally;
|
|
31
|
-
validateUser(autoRedirect?: boolean): Promise<UserData | null>;
|
|
32
|
-
checkAuthStatus(): Promise<{
|
|
33
|
-
authenticated: boolean;
|
|
34
|
-
user?: UserData;
|
|
35
|
-
}>;
|
|
36
|
-
login(returnTo?: string): void;
|
|
37
|
-
logout(redirectTo?: string): Promise<void>;
|
|
38
|
-
isAdmin(userData?: UserData): Promise<boolean>;
|
|
39
|
-
getCurrentUser(): Promise<UserData | null>;
|
|
40
|
-
hasActiveSession(): Promise<boolean>;
|
|
41
|
-
handleAuthCallback(): Promise<boolean>;
|
|
42
|
-
forceRevalidation(): Promise<UserData | null>;
|
|
43
|
-
}
|
|
44
|
-
export default CorporateAuthManager;
|
|
45
|
-
//# sourceMappingURL=corp_auth.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"corp_auth.d.ts","sourceRoot":"","sources":["../../src/libraries/corp_auth.ts"],"names":[],"mappings":"AAGA,UAAU,QAAQ;IACd,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAiBD,UAAU,mBAAmB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,wBAAwB,EAAE,MAAM,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,cAAc,CAAa;;YAoBrB,IAAI;IAaX,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;IASlE,OAAO,CAAC,YAAY;IA4BpB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,cAAc;YAeR,4BAA4B;IA6C1C,OAAO,CAAC,oBAAoB;IA2Cf,YAAY,CAAC,YAAY,GAAE,OAAe,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAiDrE,eAAe,IAAI,OAAO,CAAC;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAC;IAiB7E,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAcxB,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0C1C,OAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB9C,cAAc,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAO1C,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IASpC,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAsCtC,iBAAiB,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAI7D;AAED,eAAe,oBAAoB,CAAC"}
|
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.CorporateAuthManager = void 0;
|
|
7
|
-
const storage_1 = __importDefault(require("./storage"));
|
|
8
|
-
class CorporateAuthManager {
|
|
9
|
-
constructor() {
|
|
10
|
-
this.lastValidation = 0;
|
|
11
|
-
this.config = {
|
|
12
|
-
authDomain: 'https://auth.telecoming.com',
|
|
13
|
-
authValidateUrl: 'https://auth.telecoming.com/auth/api/validate',
|
|
14
|
-
authLogoutUrl: 'https://auth.telecoming.com/auth/logout',
|
|
15
|
-
authLoginUrl: 'https://auth.telecoming.com',
|
|
16
|
-
appDomain: typeof window !== 'undefined' ? window.location.origin : '',
|
|
17
|
-
authCookieDuration: 86400,
|
|
18
|
-
authRevalidationInterval: 300,
|
|
19
|
-
jwtSecret: 'telecoming_shared_secret_2024',
|
|
20
|
-
authJwtIssuer: 'auth.telecoming.com'
|
|
21
|
-
};
|
|
22
|
-
this.storage = new storage_1.default();
|
|
23
|
-
this.init();
|
|
24
|
-
}
|
|
25
|
-
async init() {
|
|
26
|
-
console.debug("CorporateAuthManager init");
|
|
27
|
-
const customConfig = await this.storage.getData('CORP_AUTH_CONFIG');
|
|
28
|
-
if (customConfig) {
|
|
29
|
-
this.config = Object.assign(Object.assign({}, this.config), customConfig);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
configure(customConfig) {
|
|
33
|
-
this.config = Object.assign(Object.assign({}, this.config), customConfig);
|
|
34
|
-
this.storage.storeData('CORP_AUTH_CONFIG', this.config);
|
|
35
|
-
console.debug("Corporate auth configured:", this.config);
|
|
36
|
-
}
|
|
37
|
-
getAuthToken() {
|
|
38
|
-
if (typeof window !== 'undefined') {
|
|
39
|
-
const urlParams = new URLSearchParams(window.location.search);
|
|
40
|
-
const tokenFromUrl = urlParams.get('auth_token');
|
|
41
|
-
if (tokenFromUrl) {
|
|
42
|
-
return tokenFromUrl;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
if (typeof document !== 'undefined') {
|
|
46
|
-
const cookies = document.cookie.split(';');
|
|
47
|
-
for (const cookie of cookies) {
|
|
48
|
-
const [name, value] = cookie.trim().split('=');
|
|
49
|
-
if (name === 'auth_token') {
|
|
50
|
-
return value;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return this.storage.get('corp_auth_token');
|
|
55
|
-
}
|
|
56
|
-
setAuthToken(token) {
|
|
57
|
-
if (typeof document !== 'undefined') {
|
|
58
|
-
const isSecure = window.location.protocol === 'https:';
|
|
59
|
-
const cookieString = [
|
|
60
|
-
`auth_token=${token}`,
|
|
61
|
-
`max-age=${this.config.authCookieDuration}`,
|
|
62
|
-
'path=/',
|
|
63
|
-
'SameSite=Lax',
|
|
64
|
-
isSecure ? 'Secure' : ''
|
|
65
|
-
].filter(Boolean).join('; ');
|
|
66
|
-
document.cookie = cookieString;
|
|
67
|
-
}
|
|
68
|
-
this.storage.set('corp_auth_token', token);
|
|
69
|
-
}
|
|
70
|
-
clearAuthToken() {
|
|
71
|
-
if (typeof document !== 'undefined') {
|
|
72
|
-
document.cookie = 'auth_token=; max-age=0; path=/;';
|
|
73
|
-
}
|
|
74
|
-
this.storage.remove('corp_auth_token');
|
|
75
|
-
this.storage.removeData('corp_user_data');
|
|
76
|
-
this.storage.removeData('corp_auth_validated');
|
|
77
|
-
}
|
|
78
|
-
async validateTokenWithAuthService(token) {
|
|
79
|
-
try {
|
|
80
|
-
console.debug("Validating token with central auth service");
|
|
81
|
-
const response = await fetch(this.config.authValidateUrl, {
|
|
82
|
-
method: 'POST',
|
|
83
|
-
headers: {
|
|
84
|
-
'Content-Type': 'application/json',
|
|
85
|
-
'Authorization': `Bearer ${token}`
|
|
86
|
-
},
|
|
87
|
-
body: JSON.stringify({ token }),
|
|
88
|
-
credentials: 'include'
|
|
89
|
-
});
|
|
90
|
-
if (!response.ok) {
|
|
91
|
-
console.warn(`Auth service returned ${response.status}`);
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
const result = await response.json();
|
|
95
|
-
if (result.authenticated && result.user) {
|
|
96
|
-
console.debug("Token validated successfully:", result.user.email);
|
|
97
|
-
if (result.token && result.token !== token) {
|
|
98
|
-
this.setAuthToken(result.token);
|
|
99
|
-
}
|
|
100
|
-
return result.user;
|
|
101
|
-
}
|
|
102
|
-
console.warn("Token validation failed:", result.error);
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
catch (error) {
|
|
106
|
-
console.error("Error validating token with auth service:", error);
|
|
107
|
-
return this.validateTokenLocally(token);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
validateTokenLocally(token) {
|
|
111
|
-
try {
|
|
112
|
-
console.debug("Using local JWT validation as fallback");
|
|
113
|
-
const tokenParts = token.split('.');
|
|
114
|
-
if (tokenParts.length !== 3) {
|
|
115
|
-
return null;
|
|
116
|
-
}
|
|
117
|
-
const payload = JSON.parse(atob(tokenParts[1]));
|
|
118
|
-
if (payload.exp && Date.now() / 1000 > payload.exp) {
|
|
119
|
-
console.warn("Token expired locally");
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
if (payload.iss && payload.iss !== this.config.authJwtIssuer) {
|
|
123
|
-
console.warn("Invalid token issuer");
|
|
124
|
-
return null;
|
|
125
|
-
}
|
|
126
|
-
return {
|
|
127
|
-
id: payload.sub || payload.user_id,
|
|
128
|
-
email: payload.email,
|
|
129
|
-
name: payload.name,
|
|
130
|
-
role: payload.role || 'user',
|
|
131
|
-
local_validation: true
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
catch (error) {
|
|
135
|
-
console.error("Local JWT validation failed:", error);
|
|
136
|
-
return null;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
async validateUser(autoRedirect = false) {
|
|
140
|
-
const now = Date.now();
|
|
141
|
-
const timeSinceLastValidation = (now - this.lastValidation) / 1000;
|
|
142
|
-
if (timeSinceLastValidation < this.config.authRevalidationInterval) {
|
|
143
|
-
const cachedUser = await this.storage.getData('corp_user_data');
|
|
144
|
-
if (cachedUser) {
|
|
145
|
-
console.debug("Using cached user data");
|
|
146
|
-
return cachedUser;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
const token = this.getAuthToken();
|
|
150
|
-
if (!token) {
|
|
151
|
-
console.debug("No auth token found");
|
|
152
|
-
if (autoRedirect) {
|
|
153
|
-
this.login();
|
|
154
|
-
}
|
|
155
|
-
return null;
|
|
156
|
-
}
|
|
157
|
-
const userData = await this.validateTokenWithAuthService(token);
|
|
158
|
-
if (userData) {
|
|
159
|
-
await this.storage.storeData('corp_user_data', userData);
|
|
160
|
-
await this.storage.storeData('corp_auth_validated', true);
|
|
161
|
-
this.lastValidation = now;
|
|
162
|
-
console.debug("User validated:", userData.email);
|
|
163
|
-
return userData;
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
this.clearAuthToken();
|
|
167
|
-
if (autoRedirect) {
|
|
168
|
-
this.login();
|
|
169
|
-
}
|
|
170
|
-
return null;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
async checkAuthStatus() {
|
|
174
|
-
const cachedUser = await this.storage.getData('corp_user_data');
|
|
175
|
-
const token = this.getAuthToken();
|
|
176
|
-
if (cachedUser && token) {
|
|
177
|
-
return {
|
|
178
|
-
authenticated: true,
|
|
179
|
-
user: cachedUser
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
return { authenticated: false };
|
|
183
|
-
}
|
|
184
|
-
login(returnTo) {
|
|
185
|
-
const destination = returnTo || (typeof window !== 'undefined' ? window.location.href : this.config.appDomain);
|
|
186
|
-
const loginUrl = `${this.config.authLoginUrl}?return_to=${encodeURIComponent(destination)}`;
|
|
187
|
-
console.debug("Redirecting to login:", loginUrl);
|
|
188
|
-
if (typeof window !== 'undefined') {
|
|
189
|
-
window.location.href = loginUrl;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
async logout(redirectTo) {
|
|
193
|
-
const token = this.getAuthToken();
|
|
194
|
-
const destination = redirectTo || this.config.appDomain;
|
|
195
|
-
try {
|
|
196
|
-
if (token) {
|
|
197
|
-
const response = await fetch(this.config.authLogoutUrl, {
|
|
198
|
-
method: 'POST',
|
|
199
|
-
headers: {
|
|
200
|
-
'Content-Type': 'application/json',
|
|
201
|
-
'Authorization': `Bearer ${token}`
|
|
202
|
-
},
|
|
203
|
-
body: JSON.stringify({
|
|
204
|
-
token,
|
|
205
|
-
redirect_to: destination
|
|
206
|
-
}),
|
|
207
|
-
credentials: 'include'
|
|
208
|
-
});
|
|
209
|
-
if (response.ok) {
|
|
210
|
-
const result = await response.json();
|
|
211
|
-
console.debug("Logout successful:", result.message);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
catch (error) {
|
|
216
|
-
console.error("Error during logout:", error);
|
|
217
|
-
}
|
|
218
|
-
finally {
|
|
219
|
-
this.clearAuthToken();
|
|
220
|
-
if (typeof window !== 'undefined') {
|
|
221
|
-
const logoutUrl = `${this.config.authLogoutUrl}?redirect_to=${encodeURIComponent(destination)}`;
|
|
222
|
-
window.location.href = logoutUrl;
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
async isAdmin(userData) {
|
|
227
|
-
let user = userData;
|
|
228
|
-
if (!user) {
|
|
229
|
-
user = await this.storage.getData('corp_user_data');
|
|
230
|
-
}
|
|
231
|
-
if (!user) {
|
|
232
|
-
return false;
|
|
233
|
-
}
|
|
234
|
-
return user.role === 'admin';
|
|
235
|
-
}
|
|
236
|
-
async getCurrentUser() {
|
|
237
|
-
return await this.storage.getData('corp_user_data');
|
|
238
|
-
}
|
|
239
|
-
async hasActiveSession() {
|
|
240
|
-
const token = this.getAuthToken();
|
|
241
|
-
const validated = await this.storage.getData('corp_auth_validated');
|
|
242
|
-
return !!(token && validated);
|
|
243
|
-
}
|
|
244
|
-
async handleAuthCallback() {
|
|
245
|
-
if (typeof window === 'undefined') {
|
|
246
|
-
return false;
|
|
247
|
-
}
|
|
248
|
-
const urlParams = new URLSearchParams(window.location.search);
|
|
249
|
-
const token = urlParams.get('auth_token');
|
|
250
|
-
const returnTo = urlParams.get('return_to');
|
|
251
|
-
if (token) {
|
|
252
|
-
console.debug("Processing auth callback with token");
|
|
253
|
-
this.setAuthToken(token);
|
|
254
|
-
const userData = await this.validateUser(false);
|
|
255
|
-
if (userData) {
|
|
256
|
-
const cleanUrl = window.location.pathname + window.location.hash;
|
|
257
|
-
window.history.replaceState({}, document.title, cleanUrl);
|
|
258
|
-
if (returnTo) {
|
|
259
|
-
window.location.href = decodeURIComponent(returnTo);
|
|
260
|
-
}
|
|
261
|
-
return true;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
return false;
|
|
265
|
-
}
|
|
266
|
-
async forceRevalidation() {
|
|
267
|
-
this.lastValidation = 0;
|
|
268
|
-
return await this.validateUser(false);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
exports.CorporateAuthManager = CorporateAuthManager;
|
|
272
|
-
exports.default = CorporateAuthManager;
|
|
273
|
-
//# sourceMappingURL=corp_auth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"corp_auth.js","sourceRoot":"","sources":["../../src/libraries/corp_auth.ts"],"names":[],"mappings":"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"}
|