@strivacity/sdk-core 3.0.2 → 4.0.0-beta.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/CHANGELOG.md +11 -0
- package/README.md +1873 -340
- package/dist/assets/oidc.cjs +2 -0
- package/dist/assets/oidc.cjs.map +1 -0
- package/dist/assets/oidc.mjs +2 -0
- package/dist/assets/oidc.mjs.map +1 -0
- package/dist/assets/server.cjs +2 -0
- package/dist/assets/server.cjs.map +1 -0
- package/dist/assets/server.mjs +2 -0
- package/dist/assets/server.mjs.map +1 -0
- package/dist/flows/base.cjs +2 -0
- package/dist/flows/base.cjs.map +1 -0
- package/dist/flows/base.d.ts +26 -0
- package/dist/flows/base.mjs +2 -0
- package/dist/flows/base.mjs.map +1 -0
- package/dist/flows/embedded.cjs +2 -0
- package/dist/flows/embedded.cjs.map +1 -0
- package/dist/flows/embedded.d.ts +9 -0
- package/dist/flows/embedded.mjs +2 -0
- package/dist/flows/embedded.mjs.map +1 -0
- package/dist/flows/index.cjs +1 -0
- package/dist/flows/index.d.ts +5 -0
- package/dist/flows/index.mjs +1 -0
- package/dist/flows/native.cjs +2 -0
- package/dist/flows/native.cjs.map +1 -0
- package/dist/flows/native.d.ts +9 -0
- package/dist/flows/native.mjs +2 -0
- package/dist/flows/native.mjs.map +1 -0
- package/dist/flows/popup.cjs +2 -0
- package/dist/flows/popup.cjs.map +1 -0
- package/dist/flows/popup.d.ts +9 -0
- package/dist/flows/popup.mjs +2 -0
- package/dist/flows/popup.mjs.map +1 -0
- package/dist/flows/redirect.cjs +2 -0
- package/dist/flows/redirect.cjs.map +1 -0
- package/dist/flows/redirect.d.ts +9 -0
- package/dist/flows/redirect.mjs +2 -0
- package/dist/flows/redirect.mjs.map +1 -0
- package/dist/handlers/embedded.cjs +2 -0
- package/dist/handlers/embedded.cjs.map +1 -0
- package/dist/handlers/embedded.d.ts +37 -0
- package/dist/handlers/embedded.mjs +2 -0
- package/dist/handlers/embedded.mjs.map +1 -0
- package/dist/handlers/index.cjs +1 -0
- package/dist/handlers/index.d.ts +2 -0
- package/dist/handlers/index.mjs +1 -0
- package/dist/handlers/native.cjs +2 -0
- package/dist/handlers/native.cjs.map +1 -0
- package/dist/handlers/native.d.ts +56 -0
- package/dist/handlers/native.mjs +2 -0
- package/dist/handlers/native.mjs.map +1 -0
- package/dist/handlers/popup.cjs +2 -0
- package/dist/handlers/popup.cjs.map +1 -0
- package/dist/handlers/popup.d.ts +21 -0
- package/dist/handlers/popup.mjs +2 -0
- package/dist/handlers/popup.mjs.map +1 -0
- package/dist/handlers/redirect.cjs +2 -0
- package/dist/handlers/redirect.cjs.map +1 -0
- package/dist/handlers/redirect.d.ts +18 -0
- package/dist/handlers/redirect.mjs +2 -0
- package/dist/handlers/redirect.mjs.map +1 -0
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +16 -21
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/server/base.cjs +2 -0
- package/dist/server/base.cjs.map +1 -0
- package/dist/server/base.d.ts +15 -0
- package/dist/server/base.mjs +2 -0
- package/dist/server/base.mjs.map +1 -0
- package/dist/server/index.cjs +1 -0
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.mjs +1 -0
- package/dist/storages/cache.cjs +2 -0
- package/dist/storages/cache.cjs.map +1 -0
- package/dist/storages/cache.d.ts +11 -0
- package/dist/storages/cache.mjs +2 -0
- package/dist/storages/cache.mjs.map +1 -0
- package/dist/storages/index.cjs +1 -0
- package/dist/storages/index.d.ts +7 -0
- package/dist/storages/index.mjs +1 -0
- package/dist/storages/indexeddb.cjs +2 -0
- package/dist/storages/indexeddb.cjs.map +1 -0
- package/dist/storages/indexeddb.d.ts +10 -0
- package/dist/storages/indexeddb.mjs +2 -0
- package/dist/storages/indexeddb.mjs.map +1 -0
- package/dist/storages/local.cjs +2 -0
- package/dist/storages/local.cjs.map +1 -0
- package/dist/storages/local.d.ts +7 -0
- package/dist/storages/local.mjs +2 -0
- package/dist/storages/local.mjs.map +1 -0
- package/dist/storages/memory.cjs +2 -0
- package/dist/storages/memory.cjs.map +1 -0
- package/dist/storages/memory.d.ts +8 -0
- package/dist/storages/memory.mjs +2 -0
- package/dist/storages/memory.mjs.map +1 -0
- package/dist/storages/server.cjs +1 -0
- package/dist/storages/server.d.ts +39 -0
- package/dist/storages/server.mjs +1 -0
- package/dist/storages/session.cjs +2 -0
- package/dist/storages/session.cjs.map +1 -0
- package/dist/storages/session.d.ts +7 -0
- package/dist/storages/session.mjs +2 -0
- package/dist/storages/session.mjs.map +1 -0
- package/dist/storages/worker.cjs +2 -0
- package/dist/storages/worker.cjs.map +1 -0
- package/dist/storages/worker.d.ts +46 -0
- package/dist/storages/worker.mjs +2 -0
- package/dist/storages/worker.mjs.map +1 -0
- package/dist/types/common.cjs +0 -0
- package/dist/types/common.d.ts +145 -0
- package/dist/types/common.mjs +0 -0
- package/dist/types/embedded.cjs +0 -0
- package/dist/types/embedded.d.ts +103 -0
- package/dist/types/embedded.mjs +0 -0
- package/dist/types/index.cjs +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.mjs +1 -0
- package/dist/types/native.cjs +0 -0
- package/dist/types/native.d.ts +385 -0
- package/dist/types/native.mjs +0 -0
- package/dist/types/oidc.cjs +2 -0
- package/dist/types/oidc.cjs.map +1 -0
- package/dist/types/oidc.d.ts +768 -0
- package/dist/types/oidc.mjs +2 -0
- package/dist/types/oidc.mjs.map +1 -0
- package/dist/types/popup.cjs +0 -0
- package/dist/types/popup.d.ts +69 -0
- package/dist/types/popup.mjs +0 -0
- package/dist/types/redirect.cjs +0 -0
- package/dist/types/redirect.d.ts +21 -0
- package/dist/types/redirect.mjs +0 -0
- package/dist/types/server.cjs +0 -0
- package/dist/types/server.d.ts +200 -0
- package/dist/types/server.mjs +0 -0
- package/dist/utils/base64url.cjs +2 -0
- package/dist/utils/base64url.cjs.map +1 -0
- package/dist/utils/base64url.d.ts +14 -0
- package/dist/utils/base64url.mjs +2 -0
- package/dist/utils/base64url.mjs.map +1 -0
- package/dist/utils/common.cjs +2 -0
- package/dist/utils/common.cjs.map +1 -0
- package/dist/utils/common.d.ts +23 -0
- package/dist/utils/common.mjs +2 -0
- package/dist/utils/common.mjs.map +1 -0
- package/dist/utils/credentials.cjs +2 -2
- package/dist/utils/credentials.cjs.map +1 -1
- package/dist/utils/credentials.d.ts +19 -3
- package/dist/utils/credentials.mjs +2 -2
- package/dist/utils/credentials.mjs.map +1 -1
- package/dist/utils/crypto.cjs +2 -2
- package/dist/utils/crypto.cjs.map +1 -1
- package/dist/utils/crypto.d.ts +16 -26
- package/dist/utils/crypto.mjs +2 -2
- package/dist/utils/crypto.mjs.map +1 -1
- package/dist/utils/dom.cjs +2 -0
- package/dist/utils/dom.cjs.map +1 -0
- package/dist/utils/dom.d.ts +7 -0
- package/dist/utils/dom.mjs +2 -0
- package/dist/utils/dom.mjs.map +1 -0
- package/dist/utils/errors.cjs +2 -2
- package/dist/utils/errors.cjs.map +1 -1
- package/dist/utils/errors.d.ts +62 -1
- package/dist/utils/errors.mjs +2 -2
- package/dist/utils/errors.mjs.map +1 -1
- package/dist/utils/httpClient.cjs +2 -0
- package/dist/utils/httpClient.cjs.map +1 -0
- package/dist/utils/httpClient.d.ts +2 -0
- package/dist/utils/httpClient.mjs +2 -0
- package/dist/utils/httpClient.mjs.map +1 -0
- package/dist/utils/index.cjs +1 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.mjs +1 -0
- package/dist/utils/logging.cjs +2 -0
- package/dist/utils/logging.cjs.map +1 -0
- package/dist/utils/logging.d.ts +2 -0
- package/dist/utils/logging.mjs +2 -0
- package/dist/utils/logging.mjs.map +1 -0
- package/dist/utils/oidc.cjs +1 -0
- package/dist/utils/oidc.d.ts +264 -0
- package/dist/utils/oidc.mjs +1 -0
- package/dist/utils/server.cjs +1 -0
- package/dist/utils/server.d.ts +72 -0
- package/dist/utils/server.mjs +1 -0
- package/dist/utils/session.cjs +2 -0
- package/dist/utils/session.cjs.map +1 -0
- package/dist/utils/session.d.ts +29 -0
- package/dist/utils/session.mjs +2 -0
- package/dist/utils/session.mjs.map +1 -0
- package/dist/utils/state.cjs +1 -0
- package/dist/utils/state.d.ts +23 -0
- package/dist/utils/state.mjs +1 -0
- package/package.json +53 -1
- package/testing/tests/flows/base.spec.ts +1030 -0
- package/testing/tests/flows/embedded.spec.ts +443 -0
- package/testing/tests/flows/index.spec.ts +8 -0
- package/testing/tests/flows/native.spec.ts +487 -0
- package/testing/tests/flows/popup.spec.ts +400 -0
- package/testing/tests/flows/redirect.spec.ts +369 -0
- package/testing/tests/handlers/embedded.spec.ts +199 -0
- package/testing/tests/handlers/index.spec.ts +8 -0
- package/testing/tests/handlers/native.spec.ts +283 -0
- package/testing/tests/handlers/popup.spec.ts +206 -0
- package/testing/tests/handlers/redirect.spec.ts +70 -0
- package/testing/tests/index.spec.ts +78 -0
- package/testing/tests/server/base.spec.ts +846 -0
- package/testing/tests/server/index.spec.ts +15 -0
- package/testing/tests/storages/cache.spec.ts +107 -0
- package/testing/tests/storages/index.spec.ts +22 -0
- package/testing/tests/storages/indexeddb.spec.ts +113 -0
- package/testing/tests/storages/local.spec.ts +46 -0
- package/testing/tests/storages/memory.spec.ts +51 -0
- package/testing/tests/storages/server.spec.ts +435 -0
- package/testing/tests/storages/session.spec.ts +46 -0
- package/testing/tests/storages/worker.spec.ts +106 -0
- package/testing/tests/utils/common.spec.ts +77 -0
- package/testing/tests/utils/credentials.spec.ts +195 -0
- package/testing/tests/utils/dom.spec.ts +37 -0
- package/testing/tests/utils/index.spec.ts +71 -0
- package/testing/tests/utils/logging.spec.ts +82 -0
- package/testing/tests/utils/oidc.spec.ts +744 -0
- package/testing/tests/utils/server.spec.ts +235 -0
- package/dist/flows/BaseFlow.cjs +0 -2
- package/dist/flows/BaseFlow.cjs.map +0 -1
- package/dist/flows/BaseFlow.d.ts +0 -191
- package/dist/flows/BaseFlow.mjs +0 -2
- package/dist/flows/BaseFlow.mjs.map +0 -1
- package/dist/flows/EmbeddedFlow.cjs +0 -2
- package/dist/flows/EmbeddedFlow.cjs.map +0 -1
- package/dist/flows/EmbeddedFlow.d.ts +0 -26
- package/dist/flows/EmbeddedFlow.mjs +0 -2
- package/dist/flows/EmbeddedFlow.mjs.map +0 -1
- package/dist/flows/NativeFlow.cjs +0 -2
- package/dist/flows/NativeFlow.cjs.map +0 -1
- package/dist/flows/NativeFlow.d.ts +0 -34
- package/dist/flows/NativeFlow.mjs +0 -2
- package/dist/flows/NativeFlow.mjs.map +0 -1
- package/dist/flows/PopupFlow.cjs +0 -2
- package/dist/flows/PopupFlow.cjs.map +0 -1
- package/dist/flows/PopupFlow.d.ts +0 -36
- package/dist/flows/PopupFlow.mjs +0 -2
- package/dist/flows/PopupFlow.mjs.map +0 -1
- package/dist/flows/RedirectFlow.cjs +0 -2
- package/dist/flows/RedirectFlow.cjs.map +0 -1
- package/dist/flows/RedirectFlow.d.ts +0 -38
- package/dist/flows/RedirectFlow.mjs +0 -2
- package/dist/flows/RedirectFlow.mjs.map +0 -1
- package/dist/handlers/BaseFlowHandler.cjs +0 -2
- package/dist/handlers/BaseFlowHandler.cjs.map +0 -1
- package/dist/handlers/BaseFlowHandler.d.ts +0 -61
- package/dist/handlers/BaseFlowHandler.mjs +0 -2
- package/dist/handlers/BaseFlowHandler.mjs.map +0 -1
- package/dist/handlers/EmbeddedFlowHandler.cjs +0 -2
- package/dist/handlers/EmbeddedFlowHandler.cjs.map +0 -1
- package/dist/handlers/EmbeddedFlowHandler.d.ts +0 -28
- package/dist/handlers/EmbeddedFlowHandler.mjs +0 -2
- package/dist/handlers/EmbeddedFlowHandler.mjs.map +0 -1
- package/dist/handlers/NativeFlowHandler.cjs +0 -2
- package/dist/handlers/NativeFlowHandler.cjs.map +0 -1
- package/dist/handlers/NativeFlowHandler.d.ts +0 -31
- package/dist/handlers/NativeFlowHandler.mjs +0 -2
- package/dist/handlers/NativeFlowHandler.mjs.map +0 -1
- package/dist/storages/LocalStorage.cjs +0 -2
- package/dist/storages/LocalStorage.cjs.map +0 -1
- package/dist/storages/LocalStorage.d.ts +0 -23
- package/dist/storages/LocalStorage.mjs +0 -2
- package/dist/storages/LocalStorage.mjs.map +0 -1
- package/dist/storages/SessionStorage.cjs +0 -2
- package/dist/storages/SessionStorage.cjs.map +0 -1
- package/dist/storages/SessionStorage.d.ts +0 -23
- package/dist/storages/SessionStorage.mjs +0 -2
- package/dist/storages/SessionStorage.mjs.map +0 -1
- package/dist/types.cjs +0 -2
- package/dist/types.cjs.map +0 -1
- package/dist/types.d.ts +0 -1263
- package/dist/types.mjs +0 -2
- package/dist/types.mjs.map +0 -1
- package/dist/utils/HttpClient.cjs +0 -2
- package/dist/utils/HttpClient.cjs.map +0 -1
- package/dist/utils/HttpClient.d.ts +0 -4
- package/dist/utils/HttpClient.mjs +0 -2
- package/dist/utils/HttpClient.mjs.map +0 -1
- package/dist/utils/Logging.cjs +0 -2
- package/dist/utils/Logging.cjs.map +0 -1
- package/dist/utils/Logging.d.ts +0 -8
- package/dist/utils/Logging.mjs +0 -2
- package/dist/utils/Logging.mjs.map +0 -1
- package/dist/utils/Metadata.cjs +0 -2
- package/dist/utils/Metadata.cjs.map +0 -1
- package/dist/utils/Metadata.d.ts +0 -98
- package/dist/utils/Metadata.mjs +0 -2
- package/dist/utils/Metadata.mjs.map +0 -1
- package/dist/utils/Session.cjs +0 -2
- package/dist/utils/Session.cjs.map +0 -1
- package/dist/utils/Session.d.ts +0 -82
- package/dist/utils/Session.mjs +0 -2
- package/dist/utils/Session.mjs.map +0 -1
- package/dist/utils/State.cjs +0 -2
- package/dist/utils/State.cjs.map +0 -1
- package/dist/utils/State.d.ts +0 -43
- package/dist/utils/State.mjs +0 -2
- package/dist/utils/State.mjs.map +0 -1
- package/dist/utils/base64Url.cjs +0 -2
- package/dist/utils/base64Url.cjs.map +0 -1
- package/dist/utils/base64Url.d.ts +0 -27
- package/dist/utils/base64Url.mjs +0 -2
- package/dist/utils/base64Url.mjs.map +0 -1
- package/dist/utils/date.cjs +0 -2
- package/dist/utils/date.cjs.map +0 -1
- package/dist/utils/date.d.ts +0 -6
- package/dist/utils/date.mjs +0 -2
- package/dist/utils/date.mjs.map +0 -1
- package/dist/utils/handlers.cjs +0 -2
- package/dist/utils/handlers.cjs.map +0 -1
- package/dist/utils/handlers.d.ts +0 -35
- package/dist/utils/handlers.mjs +0 -2
- package/dist/utils/handlers.mjs.map +0 -1
- package/dist/utils/jwt.cjs +0 -2
- package/dist/utils/jwt.cjs.map +0 -1
- package/dist/utils/jwt.d.ts +0 -34
- package/dist/utils/jwt.mjs +0 -2
- package/dist/utils/jwt.mjs.map +0 -1
- package/dist/utils/object.cjs +0 -2
- package/dist/utils/object.cjs.map +0 -1
- package/dist/utils/object.d.ts +0 -1
- package/dist/utils/object.mjs +0 -2
- package/dist/utils/object.mjs.map +0 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { test, expect } from 'vitest';
|
|
2
|
+
import * as index from '../../../src/server';
|
|
3
|
+
|
|
4
|
+
test('should export the correct things', () => {
|
|
5
|
+
const expectedExports = [
|
|
6
|
+
'COOKIE_CONTEXT',
|
|
7
|
+
'COOKIE_CHUNK_SIZE',
|
|
8
|
+
'DISALLOWED_PROXY_HEADERS',
|
|
9
|
+
'RETURN_TO_COOKIE',
|
|
10
|
+
'BACKCHANNEL_LOGOUT_TOKEN_MAX_AGE_SECONDS',
|
|
11
|
+
'createBaseServerSDK',
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
expect(Object.keys(index)).toEqual(expectedExports);
|
|
15
|
+
});
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { describe, beforeEach, test, expect } from 'vitest';
|
|
2
|
+
import { createCacheAPIStorage } from '../../../src/storages';
|
|
3
|
+
|
|
4
|
+
function toCacheKey(url: RequestInfo): string {
|
|
5
|
+
return typeof url === 'string' ? url : url.url;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
class MockCache implements Partial<Cache> {
|
|
9
|
+
private readonly store = new Map<string, Response>();
|
|
10
|
+
|
|
11
|
+
match(url: RequestInfo): Promise<Response | undefined> {
|
|
12
|
+
const response = this.store.get(toCacheKey(url));
|
|
13
|
+
|
|
14
|
+
return Promise.resolve(response?.clone());
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
put(url: RequestInfo, response: Response): Promise<void> {
|
|
18
|
+
this.store.set(toCacheKey(url), response);
|
|
19
|
+
|
|
20
|
+
return Promise.resolve();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
delete(url: RequestInfo): Promise<boolean> {
|
|
24
|
+
return Promise.resolve(this.store.delete(toCacheKey(url)));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
class MockCacheStorage implements Partial<CacheStorage> {
|
|
29
|
+
private readonly caches = new Map<string, MockCache>();
|
|
30
|
+
|
|
31
|
+
open(cacheName: string): Promise<Cache> {
|
|
32
|
+
if (!this.caches.has(cacheName)) {
|
|
33
|
+
this.caches.set(cacheName, new MockCache());
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return Promise.resolve(this.caches.get(cacheName) as unknown as Cache);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
keys(): Promise<string[]> {
|
|
40
|
+
return Promise.resolve([...this.caches.keys()]);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
has(cacheName: string): Promise<boolean> {
|
|
44
|
+
return Promise.resolve(this.caches.has(cacheName));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
describe('createCacheAPIStorage', () => {
|
|
49
|
+
beforeEach(() => {
|
|
50
|
+
globalThis.caches = new MockCacheStorage() as unknown as CacheStorage;
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test('should return null when the key does not exist', async () => {
|
|
54
|
+
const storage = createCacheAPIStorage();
|
|
55
|
+
|
|
56
|
+
await expect(storage.get('missing')).resolves.toBeNull();
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test('should store and retrieve a value', async () => {
|
|
60
|
+
const storage = createCacheAPIStorage();
|
|
61
|
+
|
|
62
|
+
await storage.set('key', 'value');
|
|
63
|
+
|
|
64
|
+
await expect(storage.get('key')).resolves.toBe('value');
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test('should overwrite an existing value', async () => {
|
|
68
|
+
const storage = createCacheAPIStorage();
|
|
69
|
+
|
|
70
|
+
await storage.set('key', 'value');
|
|
71
|
+
await storage.set('key', 'new-value');
|
|
72
|
+
|
|
73
|
+
await expect(storage.get('key')).resolves.toBe('new-value');
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test('should delete a stored value', async () => {
|
|
77
|
+
const storage = createCacheAPIStorage();
|
|
78
|
+
|
|
79
|
+
await storage.set('key', 'value');
|
|
80
|
+
await storage.delete('key');
|
|
81
|
+
|
|
82
|
+
await expect(storage.get('key')).resolves.toBeNull();
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
test('should not throw when deleting a non-existent key', async () => {
|
|
86
|
+
const storage = createCacheAPIStorage();
|
|
87
|
+
|
|
88
|
+
await expect(storage.delete('missing')).resolves.toBeUndefined();
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
test('should use a custom cache name when provided', async () => {
|
|
92
|
+
const storage = createCacheAPIStorage('custom-cache');
|
|
93
|
+
|
|
94
|
+
await storage.set('key', 'value');
|
|
95
|
+
|
|
96
|
+
await expect(globalThis.caches.has('custom-cache')).resolves.toBe(true);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
test('should isolate values stored under different cache names', async () => {
|
|
100
|
+
const storageA = createCacheAPIStorage('cache-a');
|
|
101
|
+
const storageB = createCacheAPIStorage('cache-b');
|
|
102
|
+
|
|
103
|
+
await storageA.set('key', 'value-a');
|
|
104
|
+
|
|
105
|
+
await expect(storageB.get('key')).resolves.toBeNull();
|
|
106
|
+
});
|
|
107
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { test, expect } from 'vitest';
|
|
2
|
+
import * as index from '../../../src/storages';
|
|
3
|
+
|
|
4
|
+
test('should export the correct things', () => {
|
|
5
|
+
const expectedExports = [
|
|
6
|
+
'createCacheAPIStorage',
|
|
7
|
+
'createIndexedDBStorage',
|
|
8
|
+
'createLocalStorage',
|
|
9
|
+
'createMemoryStorage',
|
|
10
|
+
'COOKIE_CONTEXT',
|
|
11
|
+
'COOKIE_CHUNK_SIZE',
|
|
12
|
+
'createServerStateStorage',
|
|
13
|
+
'createServerMemoryStorage',
|
|
14
|
+
'createSessionIdCookieStorage',
|
|
15
|
+
'createEncryptedCookieStorage',
|
|
16
|
+
'createSessionStorage',
|
|
17
|
+
'createWorkerStorage',
|
|
18
|
+
'handleWorkerStorageRequests',
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
expect(Object.keys(index)).toEqual(expectedExports);
|
|
22
|
+
});
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import 'fake-indexeddb/auto';
|
|
2
|
+
import { describe, test, expect, vi } from 'vitest';
|
|
3
|
+
import { createIndexedDBStorage } from '../../../src/storages';
|
|
4
|
+
|
|
5
|
+
type FakeIDBRequest = { onsuccess: ((event: unknown) => void) | null; onerror: ((event: unknown) => void) | null; error: Error };
|
|
6
|
+
|
|
7
|
+
let dbIndex = 0;
|
|
8
|
+
|
|
9
|
+
function uniqueDbName(): string {
|
|
10
|
+
return `test-db-${++dbIndex}`;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function createFailingRequest(error: Error): FakeIDBRequest {
|
|
14
|
+
const request: FakeIDBRequest = { onsuccess: null, onerror: null, error };
|
|
15
|
+
|
|
16
|
+
queueMicrotask(() => request.onerror?.({ target: request }));
|
|
17
|
+
|
|
18
|
+
return request;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
describe('createIndexedDBStorage', () => {
|
|
22
|
+
test('should return null when the key does not exist', async () => {
|
|
23
|
+
const storage = createIndexedDBStorage(uniqueDbName());
|
|
24
|
+
|
|
25
|
+
await expect(storage.get('missing')).resolves.toBeNull();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('should store and retrieve a value', async () => {
|
|
29
|
+
const storage = createIndexedDBStorage(uniqueDbName());
|
|
30
|
+
|
|
31
|
+
await storage.set('key', 'value');
|
|
32
|
+
|
|
33
|
+
await expect(storage.get('key')).resolves.toBe('value');
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test('should overwrite an existing value', async () => {
|
|
37
|
+
const storage = createIndexedDBStorage(uniqueDbName());
|
|
38
|
+
|
|
39
|
+
await storage.set('key', 'value');
|
|
40
|
+
await storage.set('key', 'new-value');
|
|
41
|
+
|
|
42
|
+
await expect(storage.get('key')).resolves.toBe('new-value');
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
test('should delete a stored value', async () => {
|
|
46
|
+
const storage = createIndexedDBStorage(uniqueDbName());
|
|
47
|
+
|
|
48
|
+
await storage.set('key', 'value');
|
|
49
|
+
await storage.delete('key');
|
|
50
|
+
|
|
51
|
+
await expect(storage.get('key')).resolves.toBeNull();
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test('should not throw when deleting a non-existent key', async () => {
|
|
55
|
+
const storage = createIndexedDBStorage(uniqueDbName());
|
|
56
|
+
|
|
57
|
+
await expect(storage.delete('missing')).resolves.toBeUndefined();
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test('should use a custom database and store name when provided', async () => {
|
|
61
|
+
const storage = createIndexedDBStorage(uniqueDbName(), 'custom-store');
|
|
62
|
+
|
|
63
|
+
await storage.set('key', 'value');
|
|
64
|
+
|
|
65
|
+
await expect(storage.get('key')).resolves.toBe('value');
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('should reuse the same database connection across calls', async () => {
|
|
69
|
+
const storage = createIndexedDBStorage(uniqueDbName());
|
|
70
|
+
|
|
71
|
+
await storage.set('key-1', 'value-1');
|
|
72
|
+
await storage.set('key-2', 'value-2');
|
|
73
|
+
|
|
74
|
+
await expect(storage.get('key-1')).resolves.toBe('value-1');
|
|
75
|
+
await expect(storage.get('key-2')).resolves.toBe('value-2');
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
test('should reject when opening the database fails', async () => {
|
|
79
|
+
const error = new Error('open failed');
|
|
80
|
+
vi.spyOn(indexedDB, 'open').mockImplementation(() => createFailingRequest(error) as unknown as IDBOpenDBRequest);
|
|
81
|
+
|
|
82
|
+
const storage = createIndexedDBStorage(uniqueDbName());
|
|
83
|
+
|
|
84
|
+
await expect(storage.get('key')).rejects.toBe(error);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test('should reject when reading a value fails', async () => {
|
|
88
|
+
const storage = createIndexedDBStorage(uniqueDbName());
|
|
89
|
+
const error = new Error('get failed');
|
|
90
|
+
|
|
91
|
+
vi.spyOn(IDBObjectStore.prototype, 'get').mockImplementation(() => createFailingRequest(error) as unknown as IDBRequest);
|
|
92
|
+
|
|
93
|
+
await expect(storage.get('key')).rejects.toBe(error);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
test('should reject when writing a value fails', async () => {
|
|
97
|
+
const storage = createIndexedDBStorage(uniqueDbName());
|
|
98
|
+
const error = new Error('put failed');
|
|
99
|
+
|
|
100
|
+
vi.spyOn(IDBObjectStore.prototype, 'put').mockImplementation(() => createFailingRequest(error) as unknown as IDBRequest);
|
|
101
|
+
|
|
102
|
+
await expect(storage.set('key', 'value')).rejects.toBe(error);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
test('should reject when deleting a value fails', async () => {
|
|
106
|
+
const storage = createIndexedDBStorage(uniqueDbName());
|
|
107
|
+
const error = new Error('delete failed');
|
|
108
|
+
|
|
109
|
+
vi.spyOn(IDBObjectStore.prototype, 'delete').mockImplementation(() => createFailingRequest(error) as unknown as IDBRequest);
|
|
110
|
+
|
|
111
|
+
await expect(storage.delete('key')).rejects.toBe(error);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { describe, beforeEach, test, expect } from 'vitest';
|
|
2
|
+
import { createLocalStorage } from '../../../src/storages';
|
|
3
|
+
|
|
4
|
+
describe('createLocalStorage', () => {
|
|
5
|
+
beforeEach(() => {
|
|
6
|
+
globalThis.localStorage?.clear();
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
test('should return null when the key does not exist', async () => {
|
|
10
|
+
const storage = createLocalStorage();
|
|
11
|
+
|
|
12
|
+
await expect(storage.get('missing')).resolves.toBeNull();
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test('should store and retrieve a value', async () => {
|
|
16
|
+
const storage = createLocalStorage();
|
|
17
|
+
|
|
18
|
+
await storage.set('key', 'value');
|
|
19
|
+
|
|
20
|
+
await expect(storage.get('key')).resolves.toBe('value');
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
test('should overwrite an existing value', async () => {
|
|
24
|
+
const storage = createLocalStorage();
|
|
25
|
+
|
|
26
|
+
await storage.set('key', 'value');
|
|
27
|
+
await storage.set('key', 'new-value');
|
|
28
|
+
|
|
29
|
+
await expect(storage.get('key')).resolves.toBe('new-value');
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test('should delete a stored value', async () => {
|
|
33
|
+
const storage = createLocalStorage();
|
|
34
|
+
|
|
35
|
+
await storage.set('key', 'value');
|
|
36
|
+
await storage.delete('key');
|
|
37
|
+
|
|
38
|
+
await expect(storage.get('key')).resolves.toBeNull();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test('should not throw when deleting a non-existent key', async () => {
|
|
42
|
+
const storage = createLocalStorage();
|
|
43
|
+
|
|
44
|
+
await expect(storage.delete('missing')).resolves.toBeUndefined();
|
|
45
|
+
});
|
|
46
|
+
});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { describe, test, expect } from 'vitest';
|
|
2
|
+
import { createMemoryStorage } from '../../../src/storages';
|
|
3
|
+
|
|
4
|
+
describe('createMemoryStorage', () => {
|
|
5
|
+
test('should return null when the key does not exist', async () => {
|
|
6
|
+
const storage = createMemoryStorage();
|
|
7
|
+
|
|
8
|
+
await expect(storage.get('missing')).resolves.toBeNull();
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test('should store and retrieve a value', async () => {
|
|
12
|
+
const storage = createMemoryStorage();
|
|
13
|
+
|
|
14
|
+
await storage.set('key', 'value');
|
|
15
|
+
|
|
16
|
+
await expect(storage.get('key')).resolves.toBe('value');
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test('should overwrite an existing value', async () => {
|
|
20
|
+
const storage = createMemoryStorage();
|
|
21
|
+
|
|
22
|
+
await storage.set('key', 'value');
|
|
23
|
+
await storage.set('key', 'new-value');
|
|
24
|
+
|
|
25
|
+
await expect(storage.get('key')).resolves.toBe('new-value');
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('should delete a stored value', async () => {
|
|
29
|
+
const storage = createMemoryStorage();
|
|
30
|
+
|
|
31
|
+
await storage.set('key', 'value');
|
|
32
|
+
await storage.delete('key');
|
|
33
|
+
|
|
34
|
+
await expect(storage.get('key')).resolves.toBeNull();
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('should not throw when deleting a non-existent key', async () => {
|
|
38
|
+
const storage = createMemoryStorage();
|
|
39
|
+
|
|
40
|
+
await expect(storage.delete('missing')).resolves.toBeUndefined();
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test('should isolate state between separate instances', async () => {
|
|
44
|
+
const storageA = createMemoryStorage();
|
|
45
|
+
const storageB = createMemoryStorage();
|
|
46
|
+
|
|
47
|
+
await storageA.set('key', 'value');
|
|
48
|
+
|
|
49
|
+
await expect(storageB.get('key')).resolves.toBeNull();
|
|
50
|
+
});
|
|
51
|
+
});
|