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.
@@ -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
- }
@@ -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
- }