@posiwise/common-services 0.1.76 → 0.1.78
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/esm2022/index.mjs +2 -2
- package/esm2022/lib/auth.service.mjs +33 -22
- package/esm2022/lib/brain.service.mjs +1 -1
- package/esm2022/lib/secure-token-storage.service.mjs +264 -0
- package/esm2022/lib/sentry.service.mjs +2 -2
- package/fesm2022/posiwise-common-services.mjs +315 -79
- package/fesm2022/posiwise-common-services.mjs.map +1 -1
- package/index.d.ts +1 -1
- package/lib/auth.service.d.ts +8 -2
- package/lib/brain.service.d.ts +1 -1
- package/lib/secure-token-storage.service.d.ts +94 -0
- package/package.json +1 -1
- package/esm2022/lib/jquery.service.mjs +0 -35
- package/lib/jquery.service.d.ts +0 -14
package/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export * from './lib/permission.service';
|
|
|
7
7
|
export * from './lib/toast.service';
|
|
8
8
|
export * from './lib/auth.service';
|
|
9
9
|
export * from './lib/local-storage.service';
|
|
10
|
+
export * from './lib/secure-token-storage.service';
|
|
10
11
|
export * from './lib/integrations-api-http.service';
|
|
11
12
|
export * from './lib/link-loader.service';
|
|
12
13
|
export * from './lib/user.service';
|
|
@@ -39,4 +40,3 @@ export * from './lib/logo-caching.service';
|
|
|
39
40
|
export * from './lib/hopscotch.service';
|
|
40
41
|
export * from './lib/brain.service';
|
|
41
42
|
export * from './lib/brain-api-http.service';
|
|
42
|
-
export * from './lib/jquery.service';
|
package/lib/auth.service.d.ts
CHANGED
|
@@ -5,11 +5,13 @@ import { SignUpValues } from './common-services.interface';
|
|
|
5
5
|
import { IntegrationsApiHttpService } from './integrations-api-http.service';
|
|
6
6
|
import { LocalStorage } from './local-storage.service';
|
|
7
7
|
import { MainApiHttpService } from './main-api-http.service';
|
|
8
|
+
import { SecureTokenStorageService } from './secure-token-storage.service';
|
|
8
9
|
import { CustomToastService } from './toast.service';
|
|
9
10
|
import { UserService } from './user.service';
|
|
10
11
|
import * as i0 from "@angular/core";
|
|
11
12
|
export declare class AuthService {
|
|
12
13
|
private readonly localStorage;
|
|
14
|
+
private readonly secureTokenStorage;
|
|
13
15
|
private readonly router;
|
|
14
16
|
private readonly http;
|
|
15
17
|
private readonly userService;
|
|
@@ -24,7 +26,7 @@ export declare class AuthService {
|
|
|
24
26
|
platform: string;
|
|
25
27
|
platform$: import("rxjs").Observable<string>;
|
|
26
28
|
isUserPersonated: boolean;
|
|
27
|
-
constructor(localStorage: LocalStorage, router: Router, http: MainApiHttpService, userService: UserService, toastr: CustomToastService, appConfigService: AppConfigService, integrationsApi: IntegrationsApiHttpService, document: Document);
|
|
29
|
+
constructor(localStorage: LocalStorage, secureTokenStorage: SecureTokenStorageService, router: Router, http: MainApiHttpService, userService: UserService, toastr: CustomToastService, appConfigService: AppConfigService, integrationsApi: IntegrationsApiHttpService, document: Document);
|
|
28
30
|
getToken(): string;
|
|
29
31
|
getImpersonatedToken(): string;
|
|
30
32
|
setHeaderKey(): void;
|
|
@@ -38,9 +40,13 @@ export declare class AuthService {
|
|
|
38
40
|
private getPlatform;
|
|
39
41
|
signInUser(email: string, password: string): import("rxjs").Observable<any>;
|
|
40
42
|
signInUserWith2Fa(email: string, password: string, google_code: any): import("rxjs").Observable<any>;
|
|
41
|
-
storeToken(token: string): import("rxjs").Observable<
|
|
43
|
+
storeToken(token: string): import("rxjs").Observable<boolean>;
|
|
42
44
|
storePlatform(plat: string): import("rxjs").Observable<void>;
|
|
43
45
|
logout(): import("rxjs").Observable<any>;
|
|
46
|
+
/**
|
|
47
|
+
* Clear all authentication tokens
|
|
48
|
+
*/
|
|
49
|
+
clearTokens(): import("rxjs").Observable<boolean>;
|
|
44
50
|
getToken$(): import("rxjs").Observable<string>;
|
|
45
51
|
getNewsletterSubscription(token: string): import("rxjs").Observable<any>;
|
|
46
52
|
unsubscribeNewsletter(token: string): import("rxjs").Observable<any>;
|
package/lib/brain.service.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BrainApiHttpService } from './brain-api-http.service';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export declare class BrainApiService {
|
|
4
|
-
private api;
|
|
4
|
+
private readonly api;
|
|
5
5
|
constructor(api: BrainApiHttpService);
|
|
6
6
|
invokeModel(payload: {
|
|
7
7
|
model_name: 'claude' | 'deepseek';
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Secure Token Storage Service
|
|
5
|
+
*
|
|
6
|
+
* This service provides secure token storage using memory + secure cookies.
|
|
7
|
+
* NO localStorage usage - tokens are stored only in memory and secure cookies.
|
|
8
|
+
*
|
|
9
|
+
* Security Features:
|
|
10
|
+
* - Memory storage (primary) - not persistent across refreshes
|
|
11
|
+
* - Secure cookies (backup) - with SameSite=Strict protection
|
|
12
|
+
* - No localStorage - prevents XSS token theft
|
|
13
|
+
* - Secure flag for HTTPS
|
|
14
|
+
* - CSRF protection via SameSite cookies
|
|
15
|
+
*/
|
|
16
|
+
export declare class SecureTokenStorageService {
|
|
17
|
+
private readonly document;
|
|
18
|
+
private readonly TOKEN_COOKIE_NAME;
|
|
19
|
+
private readonly IMPERSONATED_TOKEN_COOKIE_NAME;
|
|
20
|
+
private readonly PHONEGAP_TOKEN_COOKIE_NAME;
|
|
21
|
+
private readonly memoryStorage;
|
|
22
|
+
private readonly tokenSubject;
|
|
23
|
+
private readonly impersonatedTokenSubject;
|
|
24
|
+
private readonly phonegapTokenSubject;
|
|
25
|
+
constructor(document: Document);
|
|
26
|
+
/**
|
|
27
|
+
* Store authentication token securely
|
|
28
|
+
*/
|
|
29
|
+
storeToken(token: string): Observable<boolean>;
|
|
30
|
+
/**
|
|
31
|
+
* Store impersonated user token
|
|
32
|
+
*/
|
|
33
|
+
storeImpersonatedToken(token: string): Observable<boolean>;
|
|
34
|
+
/**
|
|
35
|
+
* Store phonegap impersonated token
|
|
36
|
+
*/
|
|
37
|
+
storePhonegapToken(token: string): Observable<boolean>;
|
|
38
|
+
/**
|
|
39
|
+
* Get authentication token
|
|
40
|
+
*/
|
|
41
|
+
getToken(): string | null;
|
|
42
|
+
/**
|
|
43
|
+
* Get impersonated token
|
|
44
|
+
*/
|
|
45
|
+
getImpersonatedToken(): string | null;
|
|
46
|
+
/**
|
|
47
|
+
* Get phonegap token
|
|
48
|
+
*/
|
|
49
|
+
getPhonegapToken(): string | null;
|
|
50
|
+
/**
|
|
51
|
+
* Get token as Observable
|
|
52
|
+
*/
|
|
53
|
+
getToken$(): Observable<string | null>;
|
|
54
|
+
/**
|
|
55
|
+
* Get impersonated token as Observable
|
|
56
|
+
*/
|
|
57
|
+
getImpersonatedToken$(): Observable<string | null>;
|
|
58
|
+
/**
|
|
59
|
+
* Get phonegap token as Observable
|
|
60
|
+
*/
|
|
61
|
+
getPhonegapToken$(): Observable<string | null>;
|
|
62
|
+
/**
|
|
63
|
+
* Remove all tokens
|
|
64
|
+
*/
|
|
65
|
+
clearTokens(): Observable<boolean>;
|
|
66
|
+
/**
|
|
67
|
+
* Remove specific token
|
|
68
|
+
*/
|
|
69
|
+
removeToken(): Observable<boolean>;
|
|
70
|
+
/**
|
|
71
|
+
* Remove impersonated tokens
|
|
72
|
+
*/
|
|
73
|
+
removeImpersonatedTokens(): Observable<boolean>;
|
|
74
|
+
/**
|
|
75
|
+
* Set secure cookie
|
|
76
|
+
* Note: HttpOnly cannot be set from client-side JavaScript
|
|
77
|
+
* For maximum security, backend should set httpOnly cookies
|
|
78
|
+
*/
|
|
79
|
+
private setSecureCookie;
|
|
80
|
+
/**
|
|
81
|
+
* Get cookie value
|
|
82
|
+
*/
|
|
83
|
+
private getCookieValue;
|
|
84
|
+
/**
|
|
85
|
+
* Delete cookie
|
|
86
|
+
*/
|
|
87
|
+
private deleteCookie;
|
|
88
|
+
/**
|
|
89
|
+
* Initialize tokens from storage on service startup
|
|
90
|
+
*/
|
|
91
|
+
private initializeTokens;
|
|
92
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SecureTokenStorageService, never>;
|
|
93
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<SecureTokenStorageService>;
|
|
94
|
+
}
|
package/package.json
CHANGED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class JQueryService {
|
|
4
|
-
constructor() {
|
|
5
|
-
this.loadPromise = null;
|
|
6
|
-
}
|
|
7
|
-
ensure() {
|
|
8
|
-
if (!this.loadPromise) {
|
|
9
|
-
this.loadPromise = import('jquery')
|
|
10
|
-
.then((mod) => {
|
|
11
|
-
const $ = (mod.default ?? mod);
|
|
12
|
-
// Only assign if not already set
|
|
13
|
-
if (!window.$) {
|
|
14
|
-
window.$ = $;
|
|
15
|
-
}
|
|
16
|
-
if (!window.jQuery) {
|
|
17
|
-
window.jQuery = $;
|
|
18
|
-
}
|
|
19
|
-
return $;
|
|
20
|
-
})
|
|
21
|
-
.catch(err => {
|
|
22
|
-
console.error('Failed to load jQuery:', err);
|
|
23
|
-
throw err;
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
return this.loadPromise;
|
|
27
|
-
}
|
|
28
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: JQueryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
29
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: JQueryService, providedIn: 'root' }); }
|
|
30
|
-
}
|
|
31
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: JQueryService, decorators: [{
|
|
32
|
-
type: Injectable,
|
|
33
|
-
args: [{ providedIn: 'root' }]
|
|
34
|
-
}] });
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianF1ZXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi1zZXJ2aWNlcy9zcmMvbGliL2pxdWVyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBVTNDLE1BQU0sT0FBTyxhQUFhO0lBRDFCO1FBRVksZ0JBQVcsR0FBaUMsSUFBSSxDQUFDO0tBeUI1RDtJQXZCRyxNQUFNO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7aUJBQzlCLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBZ0IsRUFBRTtnQkFDeEIsTUFBTSxDQUFDLEdBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQWlCLENBQUM7Z0JBRTdELGlDQUFpQztnQkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDWixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakIsQ0FBQztnQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNqQixNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDdEIsQ0FBQztnQkFFRCxPQUFPLENBQUMsQ0FBQztZQUNiLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxHQUFHLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQzsrR0F6QlEsYUFBYTttSEFBYixhQUFhLGNBREEsTUFBTTs7NEZBQ25CLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgICQ7XG4gICAgICAgIGpRdWVyeTogSlF1ZXJ5U3RhdGljO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBKUXVlcnlTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGxvYWRQcm9taXNlOiBQcm9taXNlPEpRdWVyeVN0YXRpYz4gfCBudWxsID0gbnVsbDtcblxuICAgIGVuc3VyZSgpOiBQcm9taXNlPEpRdWVyeVN0YXRpYz4ge1xuICAgICAgICBpZiAoIXRoaXMubG9hZFByb21pc2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFByb21pc2UgPSBpbXBvcnQoJ2pxdWVyeScpXG4gICAgICAgICAgICAgICAgLnRoZW4oKG1vZCk6IEpRdWVyeVN0YXRpYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICQ6IEpRdWVyeVN0YXRpYyA9IChtb2QuZGVmYXVsdCA/PyBtb2QpIGFzIEpRdWVyeVN0YXRpYztcblxuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGFzc2lnbiBpZiBub3QgYWxyZWFkeSBzZXRcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF3aW5kb3cuJCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LiQgPSAkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghd2luZG93LmpRdWVyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmpRdWVyeSA9ICQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBqUXVlcnk6JywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRQcm9taXNlO1xuICAgIH1cbn1cbiJdfQ==
|
package/lib/jquery.service.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/// <reference types="jquery" />
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
declare global {
|
|
4
|
-
interface Window {
|
|
5
|
-
$: any;
|
|
6
|
-
jQuery: JQueryStatic;
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
export declare class JQueryService {
|
|
10
|
-
private loadPromise;
|
|
11
|
-
ensure(): Promise<JQueryStatic>;
|
|
12
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<JQueryService, never>;
|
|
13
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<JQueryService>;
|
|
14
|
-
}
|