auth-vir 4.0.0 → 5.0.0
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 +37 -24
- package/dist/auth-client/backend-auth.client.d.ts +1 -1
- package/dist/auth-client/backend-auth.client.js +40 -20
- package/dist/auth-client/frontend-auth.client.d.ts +8 -9
- package/dist/auth-client/frontend-auth.client.js +5 -21
- package/dist/auth.d.ts +14 -27
- package/dist/auth.js +18 -30
- package/dist/cookie.d.ts +41 -14
- package/dist/cookie.js +73 -31
- package/dist/csrf-token.d.ts +4 -57
- package/dist/csrf-token.js +16 -48
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -2
- package/dist/jwt/jwt.d.ts +14 -2
- package/dist/jwt/jwt.js +10 -1
- package/package.json +1 -2
- package/src/auth-client/backend-auth.client.ts +45 -27
- package/src/auth-client/frontend-auth.client.ts +6 -38
- package/src/auth.ts +25 -57
- package/src/cookie.ts +99 -48
- package/src/csrf-token.ts +19 -90
- package/src/index.ts +0 -2
- package/src/jwt/jwt.ts +15 -3
- package/dist/csrf-token-store.d.ts +0 -21
- package/dist/csrf-token-store.js +0 -35
- package/dist/mock-csrf-token-store.d.ts +0 -64
- package/dist/mock-csrf-token-store.js +0 -107
- package/src/csrf-token-store.ts +0 -54
- package/src/mock-csrf-token-store.ts +0 -141
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Create an empty `accessRecord` object, this is to be used in conjunction with
|
|
3
|
-
* {@link createMockLocalStorage}.
|
|
4
|
-
*
|
|
5
|
-
* @category Mock
|
|
6
|
-
*/
|
|
7
|
-
export function createEmptyMockLocalStorageAccessRecord() {
|
|
8
|
-
return {
|
|
9
|
-
getItem: [],
|
|
10
|
-
removeItem: [],
|
|
11
|
-
setItem: [],
|
|
12
|
-
key: [],
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Create a LocalStorage mock.
|
|
17
|
-
*
|
|
18
|
-
* @category Mock
|
|
19
|
-
*/
|
|
20
|
-
export function createMockLocalStorage(
|
|
21
|
-
/** Set values in here to initialize the mocked localStorage data store contents. */
|
|
22
|
-
init = {}) {
|
|
23
|
-
const store = init;
|
|
24
|
-
const accessRecord = createEmptyMockLocalStorageAccessRecord();
|
|
25
|
-
const mockLocalStorage = {
|
|
26
|
-
clear() {
|
|
27
|
-
Object.keys(store).forEach((key) => {
|
|
28
|
-
delete store[key];
|
|
29
|
-
});
|
|
30
|
-
},
|
|
31
|
-
getItem(key) {
|
|
32
|
-
accessRecord.getItem.push(key);
|
|
33
|
-
return store[key] ?? null;
|
|
34
|
-
},
|
|
35
|
-
get length() {
|
|
36
|
-
return Object.keys(store).length;
|
|
37
|
-
},
|
|
38
|
-
key(index) {
|
|
39
|
-
accessRecord.key.push(index);
|
|
40
|
-
return Object.keys(store)[index] ?? null;
|
|
41
|
-
},
|
|
42
|
-
removeItem(key) {
|
|
43
|
-
accessRecord.removeItem.push(key);
|
|
44
|
-
delete store[key];
|
|
45
|
-
},
|
|
46
|
-
setItem(key, value) {
|
|
47
|
-
accessRecord.setItem.push({
|
|
48
|
-
key,
|
|
49
|
-
value,
|
|
50
|
-
});
|
|
51
|
-
store[key] = value;
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
return {
|
|
55
|
-
localStorage: mockLocalStorage,
|
|
56
|
-
store,
|
|
57
|
-
accessRecord,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Create an empty `accessRecord` object, this is to be used in conjunction with
|
|
62
|
-
* {@link createMockCsrfTokenStore}.
|
|
63
|
-
*
|
|
64
|
-
* @category Mock
|
|
65
|
-
*/
|
|
66
|
-
export function createEmptyMockCsrfTokenStoreAccessRecord() {
|
|
67
|
-
return {
|
|
68
|
-
getCsrfToken: 0,
|
|
69
|
-
setCsrfToken: [],
|
|
70
|
-
deleteCsrfToken: 0,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Create a mock {@link CsrfTokenStore} backed by a simple in-memory object, for use in tests.
|
|
75
|
-
*
|
|
76
|
-
* @category Mock
|
|
77
|
-
*/
|
|
78
|
-
export function createMockCsrfTokenStore(
|
|
79
|
-
/** Set an initial value to initialize the mocked store contents. */
|
|
80
|
-
init) {
|
|
81
|
-
let storedValue = init;
|
|
82
|
-
const accessRecord = createEmptyMockCsrfTokenStoreAccessRecord();
|
|
83
|
-
const csrfTokenStore = {
|
|
84
|
-
getCsrfToken() {
|
|
85
|
-
accessRecord.getCsrfToken++;
|
|
86
|
-
return Promise.resolve(storedValue);
|
|
87
|
-
},
|
|
88
|
-
setCsrfToken(value) {
|
|
89
|
-
accessRecord.setCsrfToken.push(value);
|
|
90
|
-
storedValue = value;
|
|
91
|
-
return Promise.resolve();
|
|
92
|
-
},
|
|
93
|
-
deleteCsrfToken() {
|
|
94
|
-
accessRecord.deleteCsrfToken++;
|
|
95
|
-
storedValue = undefined;
|
|
96
|
-
return Promise.resolve();
|
|
97
|
-
},
|
|
98
|
-
};
|
|
99
|
-
return {
|
|
100
|
-
csrfTokenStore,
|
|
101
|
-
/** The current value held in the mock store. */
|
|
102
|
-
get storedValue() {
|
|
103
|
-
return storedValue;
|
|
104
|
-
},
|
|
105
|
-
accessRecord,
|
|
106
|
-
};
|
|
107
|
-
}
|
package/src/csrf-token-store.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import {LocalDbClient} from 'local-db-client';
|
|
2
|
-
import {defineShape} from 'object-shape-tester';
|
|
3
|
-
|
|
4
|
-
const csrfTokenDbShapes = {
|
|
5
|
-
csrfToken: defineShape(''),
|
|
6
|
-
} as const;
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* The interface used for overriding the default CSRF token store in storage functions.
|
|
10
|
-
*
|
|
11
|
-
* @category Internal
|
|
12
|
-
*/
|
|
13
|
-
export type CsrfTokenStore = {
|
|
14
|
-
/** Retrieves the stored CSRF token, if any. */
|
|
15
|
-
getCsrfToken(): Promise<string | undefined>;
|
|
16
|
-
/** Stores a CSRF token. */
|
|
17
|
-
setCsrfToken(value: string): Promise<void>;
|
|
18
|
-
/** Deletes the stored CSRF token. */
|
|
19
|
-
deleteCsrfToken(): Promise<void>;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
async function createDefaultCsrfTokenStore(): Promise<CsrfTokenStore> {
|
|
23
|
-
const client = await LocalDbClient.createClient(csrfTokenDbShapes, {
|
|
24
|
-
storeName: 'auth-vir-csrf',
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
return {
|
|
28
|
-
async getCsrfToken() {
|
|
29
|
-
return (await client.load.csrfToken()) || undefined;
|
|
30
|
-
},
|
|
31
|
-
async setCsrfToken(value) {
|
|
32
|
-
await client.set.csrfToken(value);
|
|
33
|
-
},
|
|
34
|
-
async deleteCsrfToken() {
|
|
35
|
-
await client.delete.csrfToken();
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* The default {@link LocalDbClient} instance used for storing CSRF tokens. This uses a dedicated
|
|
42
|
-
* store name to avoid collisions with other storage. Lazily initialized to avoid crashes in Node.js
|
|
43
|
-
* environments where IndexedDB is not available.
|
|
44
|
-
*
|
|
45
|
-
* @category Internal
|
|
46
|
-
*/
|
|
47
|
-
export async function getDefaultCsrfTokenStore(): Promise<CsrfTokenStore> {
|
|
48
|
-
if (!cachedStorePromise) {
|
|
49
|
-
cachedStorePromise = createDefaultCsrfTokenStore();
|
|
50
|
-
}
|
|
51
|
-
return cachedStorePromise;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
let cachedStorePromise: Promise<CsrfTokenStore> | undefined;
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import {type CsrfTokenStore} from './csrf-token-store.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* `accessRecord` type for {@link createMockLocalStorage}'s output.
|
|
5
|
-
*
|
|
6
|
-
* @category Internal
|
|
7
|
-
*/
|
|
8
|
-
export type MockLocalStorageAccessRecord = {
|
|
9
|
-
getItem: string[];
|
|
10
|
-
removeItem: string[];
|
|
11
|
-
setItem: {key: string; value: string}[];
|
|
12
|
-
key: number[];
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Create an empty `accessRecord` object, this is to be used in conjunction with
|
|
17
|
-
* {@link createMockLocalStorage}.
|
|
18
|
-
*
|
|
19
|
-
* @category Mock
|
|
20
|
-
*/
|
|
21
|
-
export function createEmptyMockLocalStorageAccessRecord(): MockLocalStorageAccessRecord {
|
|
22
|
-
return {
|
|
23
|
-
getItem: [],
|
|
24
|
-
removeItem: [],
|
|
25
|
-
setItem: [],
|
|
26
|
-
key: [],
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Create a LocalStorage mock.
|
|
32
|
-
*
|
|
33
|
-
* @category Mock
|
|
34
|
-
*/
|
|
35
|
-
export function createMockLocalStorage(
|
|
36
|
-
/** Set values in here to initialize the mocked localStorage data store contents. */
|
|
37
|
-
init: Record<string, string> = {},
|
|
38
|
-
) {
|
|
39
|
-
const store: Record<string, string> = init;
|
|
40
|
-
const accessRecord = createEmptyMockLocalStorageAccessRecord();
|
|
41
|
-
|
|
42
|
-
const mockLocalStorage: Storage = {
|
|
43
|
-
clear() {
|
|
44
|
-
Object.keys(store).forEach((key) => {
|
|
45
|
-
delete store[key];
|
|
46
|
-
});
|
|
47
|
-
},
|
|
48
|
-
getItem(key) {
|
|
49
|
-
accessRecord.getItem.push(key);
|
|
50
|
-
return store[key] ?? null;
|
|
51
|
-
},
|
|
52
|
-
get length() {
|
|
53
|
-
return Object.keys(store).length;
|
|
54
|
-
},
|
|
55
|
-
key(index) {
|
|
56
|
-
accessRecord.key.push(index);
|
|
57
|
-
return Object.keys(store)[index] ?? null;
|
|
58
|
-
},
|
|
59
|
-
removeItem(key) {
|
|
60
|
-
accessRecord.removeItem.push(key);
|
|
61
|
-
delete store[key];
|
|
62
|
-
},
|
|
63
|
-
setItem(key, value) {
|
|
64
|
-
accessRecord.setItem.push({
|
|
65
|
-
key,
|
|
66
|
-
value,
|
|
67
|
-
});
|
|
68
|
-
store[key] = value;
|
|
69
|
-
},
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
return {
|
|
73
|
-
localStorage: mockLocalStorage,
|
|
74
|
-
store,
|
|
75
|
-
accessRecord,
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* `accessRecord` type for {@link createMockCsrfTokenStore}'s output.
|
|
81
|
-
*
|
|
82
|
-
* @category Internal
|
|
83
|
-
*/
|
|
84
|
-
export type MockCsrfTokenStoreAccessRecord = {
|
|
85
|
-
getCsrfToken: number;
|
|
86
|
-
setCsrfToken: string[];
|
|
87
|
-
deleteCsrfToken: number;
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Create an empty `accessRecord` object, this is to be used in conjunction with
|
|
92
|
-
* {@link createMockCsrfTokenStore}.
|
|
93
|
-
*
|
|
94
|
-
* @category Mock
|
|
95
|
-
*/
|
|
96
|
-
export function createEmptyMockCsrfTokenStoreAccessRecord(): MockCsrfTokenStoreAccessRecord {
|
|
97
|
-
return {
|
|
98
|
-
getCsrfToken: 0,
|
|
99
|
-
setCsrfToken: [],
|
|
100
|
-
deleteCsrfToken: 0,
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Create a mock {@link CsrfTokenStore} backed by a simple in-memory object, for use in tests.
|
|
106
|
-
*
|
|
107
|
-
* @category Mock
|
|
108
|
-
*/
|
|
109
|
-
export function createMockCsrfTokenStore(
|
|
110
|
-
/** Set an initial value to initialize the mocked store contents. */
|
|
111
|
-
init?: string | undefined,
|
|
112
|
-
) {
|
|
113
|
-
let storedValue: string | undefined = init;
|
|
114
|
-
const accessRecord = createEmptyMockCsrfTokenStoreAccessRecord();
|
|
115
|
-
|
|
116
|
-
const csrfTokenStore: CsrfTokenStore = {
|
|
117
|
-
getCsrfToken() {
|
|
118
|
-
accessRecord.getCsrfToken++;
|
|
119
|
-
return Promise.resolve(storedValue);
|
|
120
|
-
},
|
|
121
|
-
setCsrfToken(value: string) {
|
|
122
|
-
accessRecord.setCsrfToken.push(value);
|
|
123
|
-
storedValue = value;
|
|
124
|
-
return Promise.resolve();
|
|
125
|
-
},
|
|
126
|
-
deleteCsrfToken() {
|
|
127
|
-
accessRecord.deleteCsrfToken++;
|
|
128
|
-
storedValue = undefined;
|
|
129
|
-
return Promise.resolve();
|
|
130
|
-
},
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
return {
|
|
134
|
-
csrfTokenStore,
|
|
135
|
-
/** The current value held in the mock store. */
|
|
136
|
-
get storedValue() {
|
|
137
|
-
return storedValue;
|
|
138
|
-
},
|
|
139
|
-
accessRecord,
|
|
140
|
-
};
|
|
141
|
-
}
|