@sneat/auth-core 0.1.3 → 0.1.6
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.js +8 -0
- package/esm2022/index.js.map +1 -0
- package/esm2022/lib/login-required-service.service.js +20 -0
- package/esm2022/lib/login-required-service.service.js.map +1 -0
- package/esm2022/lib/private-token-store.service.js +36 -0
- package/esm2022/lib/private-token-store.service.js.map +1 -0
- package/esm2022/lib/sneat-auth-guard.js +79 -0
- package/esm2022/lib/sneat-auth-guard.js.map +1 -0
- package/esm2022/lib/sneat-auth-state-service.js +267 -0
- package/esm2022/lib/sneat-auth-state-service.js.map +1 -0
- package/{src/lib/sneat-auth.interface.ts → esm2022/lib/sneat-auth.interface.js} +1 -5
- package/esm2022/lib/sneat-auth.interface.js.map +1 -0
- package/esm2022/lib/telegram-auth.service.js +39 -0
- package/esm2022/lib/telegram-auth.service.js.map +1 -0
- package/esm2022/lib/user/index.js +3 -0
- package/esm2022/lib/user/index.js.map +1 -0
- package/esm2022/lib/user/sneat-user.service.js +171 -0
- package/esm2022/lib/user/sneat-user.service.js.map +1 -0
- package/esm2022/lib/user/user-record.service.js +30 -0
- package/esm2022/lib/user/user-record.service.js.map +1 -0
- package/esm2022/sneat-auth-core.js +5 -0
- package/esm2022/sneat-auth-core.js.map +1 -0
- package/lib/login-required-service.service.d.ts +6 -0
- package/lib/private-token-store.service.d.ts +8 -0
- package/lib/sneat-auth-guard.d.ts +26 -0
- package/lib/sneat-auth-state-service.d.ts +51 -0
- package/lib/sneat-auth.interface.d.ts +5 -0
- package/lib/telegram-auth.service.d.ts +9 -0
- package/lib/user/sneat-user.service.d.ts +34 -0
- package/lib/user/user-record.service.d.ts +25 -0
- package/package.json +14 -2
- package/sneat-auth-core.d.ts +5 -0
- package/tsconfig.lib.prod.tsbuildinfo +1 -0
- package/eslint.config.js +0 -7
- package/ng-package.json +0 -7
- package/project.json +0 -38
- package/src/lib/login-required-service.service.spec.ts +0 -39
- package/src/lib/login-required-service.service.ts +0 -14
- package/src/lib/private-token-store.service.spec.ts +0 -75
- package/src/lib/private-token-store.service.ts +0 -36
- package/src/lib/sneat-auth-guard.spec.ts +0 -124
- package/src/lib/sneat-auth-guard.ts +0 -107
- package/src/lib/sneat-auth-state-service.spec.ts +0 -332
- package/src/lib/sneat-auth-state-service.ts +0 -387
- package/src/lib/sneat-auth.interface.spec.ts +0 -39
- package/src/lib/telegram-auth.service.spec.ts +0 -186
- package/src/lib/telegram-auth.service.ts +0 -49
- package/src/lib/user/sneat-user.service.spec.ts +0 -151
- package/src/lib/user/sneat-user.service.ts +0 -266
- package/src/lib/user/user-record.service.spec.ts +0 -145
- package/src/lib/user/user-record.service.ts +0 -38
- package/src/test-setup.ts +0 -3
- package/tsconfig.json +0 -13
- package/tsconfig.lib.json +0 -19
- package/tsconfig.lib.prod.json +0 -7
- package/tsconfig.spec.json +0 -31
- package/vite.config.mts +0 -10
- /package/{src/index.ts → index.d.ts} +0 -0
- /package/{src/lib/user/index.ts → lib/user/index.d.ts} +0 -0
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { TestBed } from '@angular/core/testing';
|
|
2
|
-
import { SneatApiService } from '@sneat/api';
|
|
3
|
-
import { UserRecordService } from './user-record.service';
|
|
4
|
-
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
5
|
-
import { of, firstValueFrom } from 'rxjs';
|
|
6
|
-
import { IUserDbo } from '@sneat/dto';
|
|
7
|
-
|
|
8
|
-
describe('UserRecordService', () => {
|
|
9
|
-
let service: UserRecordService;
|
|
10
|
-
let sneatApiServiceMock: { post: ReturnType<typeof vi.fn> };
|
|
11
|
-
|
|
12
|
-
beforeEach(() => {
|
|
13
|
-
sneatApiServiceMock = {
|
|
14
|
-
post: vi.fn(),
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
TestBed.configureTestingModule({
|
|
18
|
-
providers: [
|
|
19
|
-
UserRecordService,
|
|
20
|
-
{
|
|
21
|
-
provide: SneatApiService,
|
|
22
|
-
useValue: sneatApiServiceMock,
|
|
23
|
-
},
|
|
24
|
-
],
|
|
25
|
-
});
|
|
26
|
-
service = TestBed.inject(UserRecordService);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('should be created', () => {
|
|
30
|
-
expect(service).toBeTruthy();
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it('should initialize user record with provided request', async () => {
|
|
34
|
-
const request = {
|
|
35
|
-
authProvider: 'google.com',
|
|
36
|
-
email: 'test@example.com',
|
|
37
|
-
emailIsVerified: true,
|
|
38
|
-
names: { fullName: 'Test User' },
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
const mockResponse: IUserDbo = {
|
|
42
|
-
id: 'user123',
|
|
43
|
-
title: 'Test User',
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
sneatApiServiceMock.post.mockReturnValue(of(mockResponse));
|
|
47
|
-
|
|
48
|
-
const result = await firstValueFrom(service.initUserRecord(request));
|
|
49
|
-
|
|
50
|
-
expect(result).toEqual(mockResponse);
|
|
51
|
-
expect(sneatApiServiceMock.post).toHaveBeenCalledWith(
|
|
52
|
-
'users/init_user_record',
|
|
53
|
-
expect.objectContaining({
|
|
54
|
-
authProvider: 'google.com',
|
|
55
|
-
email: 'test@example.com',
|
|
56
|
-
emailIsVerified: true,
|
|
57
|
-
names: { fullName: 'Test User' },
|
|
58
|
-
ianaTimezone: expect.any(String),
|
|
59
|
-
}),
|
|
60
|
-
);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it('should add ianaTimezone if not provided', async () => {
|
|
64
|
-
const request = {
|
|
65
|
-
email: 'test@example.com',
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
const mockResponse: IUserDbo = {
|
|
69
|
-
id: 'user123',
|
|
70
|
-
title: 'Test User',
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
sneatApiServiceMock.post.mockReturnValue(of(mockResponse));
|
|
74
|
-
|
|
75
|
-
await firstValueFrom(service.initUserRecord(request));
|
|
76
|
-
|
|
77
|
-
const callArgs = sneatApiServiceMock.post.mock.calls[0][1];
|
|
78
|
-
expect(callArgs.ianaTimezone).toBeDefined();
|
|
79
|
-
expect(typeof callArgs.ianaTimezone).toBe('string');
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it('should preserve provided ianaTimezone', async () => {
|
|
83
|
-
const request = {
|
|
84
|
-
email: 'test@example.com',
|
|
85
|
-
ianaTimezone: 'America/New_York',
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
const mockResponse: IUserDbo = {
|
|
89
|
-
id: 'user123',
|
|
90
|
-
title: 'Test User',
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
sneatApiServiceMock.post.mockReturnValue(of(mockResponse));
|
|
94
|
-
|
|
95
|
-
await firstValueFrom(service.initUserRecord(request));
|
|
96
|
-
|
|
97
|
-
expect(sneatApiServiceMock.post).toHaveBeenCalledWith(
|
|
98
|
-
'users/init_user_record',
|
|
99
|
-
expect.objectContaining({
|
|
100
|
-
ianaTimezone: 'America/New_York',
|
|
101
|
-
}),
|
|
102
|
-
);
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it('should exclude undefined values from request', async () => {
|
|
106
|
-
const request = {
|
|
107
|
-
email: 'test@example.com',
|
|
108
|
-
gender: undefined,
|
|
109
|
-
ageGroup: undefined,
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
const mockResponse: IUserDbo = {
|
|
113
|
-
id: 'user123',
|
|
114
|
-
title: 'Test User',
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
sneatApiServiceMock.post.mockReturnValue(of(mockResponse));
|
|
118
|
-
|
|
119
|
-
await firstValueFrom(service.initUserRecord(request));
|
|
120
|
-
|
|
121
|
-
const callArgs = sneatApiServiceMock.post.mock.calls[0][1];
|
|
122
|
-
expect(callArgs.gender).toBeUndefined();
|
|
123
|
-
expect(callArgs.ageGroup).toBeUndefined();
|
|
124
|
-
expect(callArgs.email).toBe('test@example.com');
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
it('should share the observable for multiple subscribers', async () => {
|
|
128
|
-
const request = {
|
|
129
|
-
email: 'test@example.com',
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
const mockResponse: IUserDbo = {
|
|
133
|
-
id: 'user123',
|
|
134
|
-
title: 'Test User',
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
sneatApiServiceMock.post.mockReturnValue(of(mockResponse));
|
|
138
|
-
|
|
139
|
-
const obs = service.initUserRecord(request);
|
|
140
|
-
|
|
141
|
-
await Promise.all([firstValueFrom(obs), firstValueFrom(obs)]);
|
|
142
|
-
|
|
143
|
-
expect(sneatApiServiceMock.post).toHaveBeenCalledTimes(1);
|
|
144
|
-
});
|
|
145
|
-
});
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Injectable, inject } from '@angular/core';
|
|
2
|
-
import { SneatApiService } from '@sneat/api';
|
|
3
|
-
import { IPersonNames } from '@sneat/auth-models';
|
|
4
|
-
import { AgeGroupID, excludeUndefined, Gender, SpaceType } from '@sneat/core';
|
|
5
|
-
import { IUserDbo } from '@sneat/dto';
|
|
6
|
-
import { Observable, share } from 'rxjs';
|
|
7
|
-
|
|
8
|
-
@Injectable({ providedIn: 'root' })
|
|
9
|
-
export class UserRecordService {
|
|
10
|
-
private readonly sneatApiService = inject(SneatApiService);
|
|
11
|
-
|
|
12
|
-
private initUserRecord$?: Observable<IUserDbo>;
|
|
13
|
-
|
|
14
|
-
public initUserRecord(request: IInitUserRecordRequest): Observable<IUserDbo> {
|
|
15
|
-
if (!request.ianaTimezone) {
|
|
16
|
-
request = {
|
|
17
|
-
...request,
|
|
18
|
-
ianaTimezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
request = excludeUndefined(request);
|
|
22
|
-
this.initUserRecord$ = this.sneatApiService
|
|
23
|
-
.post<IUserDbo>('users/init_user_record', request)
|
|
24
|
-
.pipe(share());
|
|
25
|
-
return this.initUserRecord$;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface IInitUserRecordRequest {
|
|
30
|
-
readonly authProvider?: string;
|
|
31
|
-
readonly gender?: Gender;
|
|
32
|
-
readonly ageGroup?: AgeGroupID;
|
|
33
|
-
readonly names?: IPersonNames;
|
|
34
|
-
readonly email?: string;
|
|
35
|
-
readonly emailIsVerified?: boolean;
|
|
36
|
-
readonly ianaTimezone?: string;
|
|
37
|
-
readonly space?: { type: SpaceType; title: string };
|
|
38
|
-
}
|
package/src/test-setup.ts
DELETED
package/tsconfig.json
DELETED
package/tsconfig.lib.json
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../../tsconfig.lib.base.json",
|
|
3
|
-
"exclude": [
|
|
4
|
-
"vite.config.ts",
|
|
5
|
-
"vite.config.mts",
|
|
6
|
-
"vitest.config.ts",
|
|
7
|
-
"vitest.config.mts",
|
|
8
|
-
"src/**/*.test.ts",
|
|
9
|
-
"src/**/*.spec.ts",
|
|
10
|
-
"src/**/*.test.tsx",
|
|
11
|
-
"src/**/*.spec.tsx",
|
|
12
|
-
"src/**/*.test.js",
|
|
13
|
-
"src/**/*.spec.js",
|
|
14
|
-
"src/**/*.test.jsx",
|
|
15
|
-
"src/**/*.spec.jsx",
|
|
16
|
-
"src/test-setup.ts",
|
|
17
|
-
"src/lib/testing/**/*"
|
|
18
|
-
]
|
|
19
|
-
}
|
package/tsconfig.lib.prod.json
DELETED
package/tsconfig.spec.json
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./tsconfig.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"outDir": "../../../dist/out-tsc",
|
|
5
|
-
"types": [
|
|
6
|
-
"vitest/globals",
|
|
7
|
-
"vitest/importMeta",
|
|
8
|
-
"vite/client",
|
|
9
|
-
"node",
|
|
10
|
-
"vitest"
|
|
11
|
-
]
|
|
12
|
-
},
|
|
13
|
-
"include": [
|
|
14
|
-
"vite.config.ts",
|
|
15
|
-
"vite.config.mts",
|
|
16
|
-
"vitest.config.ts",
|
|
17
|
-
"vitest.config.mts",
|
|
18
|
-
"src/**/*.test.ts",
|
|
19
|
-
"src/**/*.spec.ts",
|
|
20
|
-
"src/**/*.test.tsx",
|
|
21
|
-
"src/**/*.spec.tsx",
|
|
22
|
-
"src/**/*.test.js",
|
|
23
|
-
"src/**/*.spec.js",
|
|
24
|
-
"src/**/*.test.jsx",
|
|
25
|
-
"src/**/*.spec.jsx",
|
|
26
|
-
"src/**/*.d.ts"
|
|
27
|
-
],
|
|
28
|
-
"files": [
|
|
29
|
-
"src/test-setup.ts"
|
|
30
|
-
]
|
|
31
|
-
}
|
package/vite.config.mts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/// <reference types='vitest' />
|
|
2
|
-
import { defineConfig } from 'vitest/config';
|
|
3
|
-
import { createBaseViteConfig } from '../../../vite.config.base';
|
|
4
|
-
|
|
5
|
-
export default defineConfig(() =>
|
|
6
|
-
createBaseViteConfig({
|
|
7
|
-
dirname: __dirname,
|
|
8
|
-
name: 'auth-core',
|
|
9
|
-
}),
|
|
10
|
-
);
|
|
File without changes
|
|
File without changes
|