@structured-id/ui-core 2.0.0 → 3.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 +22 -10
- package/package.json +25 -43
- package/src/components/SidStatusBadge.vue +1 -5
- package/src/composables/useAccountTransport.test.ts +2 -1
- package/src/composables/useGrpc.test.ts +17 -14
- package/src/composables/useGrpc.ts +4 -2
- package/src/index.ts +2 -120
- package/src/profile/components/ConsentManager.vue +5 -1
- package/src/profile/components/ProfileEditor.vue +1 -1
- package/src/profile/components/SecuritySettings.vue +5 -1
- package/src/profile/components/SessionList.vue +2 -1
- package/src/profile/components/SidRegistrationForm.test.ts +173 -1
- package/src/profile/components/SidRegistrationForm.vue +88 -32
- package/src/profile/components/index.ts +1 -4
- package/src/profile/composables/index.ts +1 -0
- package/src/profile/composables/operationPlan.test.ts +155 -0
- package/src/profile/composables/operationPlan.ts +218 -0
- package/src/profile/composables/useAccountApi.ts +4 -4
- package/src/profile/composables/useAuth.test.ts +312 -31
- package/src/profile/composables/useAuth.ts +176 -30
- package/src/profile/composables/useAuthApi.opaque.test.ts +13 -6
- package/src/profile/composables/useAuthApi.ts +40 -18
- package/src/profile/composables/useCurrentPasswordRequirement.test.ts +196 -0
- package/src/profile/composables/useCurrentPasswordRequirement.ts +95 -0
- package/src/profile/composables/useEnrollmentApi.test.ts +7 -3
- package/src/profile/composables/useEnrollmentApi.ts +3 -5
- package/src/profile/composables/useIdentityApi.ts +4 -4
- package/src/profile/composables/useSecurityLevel.test.ts +1 -1
- package/src/profile/composables/useSecurityLevel.ts +1 -1
- package/src/quasar/SidPasswordCeremony.test.ts +253 -0
- package/src/quasar/SidPasswordCeremony.vue +456 -0
- package/src/quasar/index.ts +2 -0
- package/src/utils/rpcRefusal.test.ts +4 -4
- package/src/utils/rpcRefusal.ts +8 -4
- package/dist/browser-vp/index.cjs +0 -349
- package/dist/browser-vp/index.d.cts +0 -276
- package/dist/browser-vp/index.d.ts +0 -276
- package/dist/browser-vp/index.js +0 -349
- package/dist/chunk-C3Q766CY.cjs +0 -125
- package/dist/chunk-J5YXRXB5.js +0 -125
- package/dist/index.cjs +0 -23581
- package/dist/index.d.cts +0 -11539
- package/dist/index.d.ts +0 -11539
- package/dist/index.js +0 -23581
- package/dist/storage-4CB2JTLW.cjs +0 -22
- package/dist/storage-THRWREZP.js +0 -22
- package/src/browser-vp/crypto.ts +0 -253
- package/src/browser-vp/index.test.ts +0 -10
- package/src/browser-vp/index.ts +0 -116
- package/src/browser-vp/prf.ts +0 -179
- package/src/browser-vp/storage.test.ts +0 -9
- package/src/browser-vp/storage.ts +0 -163
- package/src/browser-vp/types.ts +0 -95
- package/src/browser-vp/vp.test.ts +0 -43
- package/src/browser-vp/vp.ts +0 -111
- package/src/generated/google/api/http.ts +0 -687
- package/src/generated/google/api/httpbody.ts +0 -159
- package/src/generated/google/protobuf/any.ts +0 -326
- package/src/generated/google/protobuf/descriptor.ts +0 -4865
- package/src/generated/google/protobuf/duration.ts +0 -230
- package/src/generated/google/protobuf/empty.ts +0 -94
- package/src/generated/google/protobuf/struct.ts +0 -484
- package/src/generated/google/protobuf/timestamp.ts +0 -287
- package/src/generated/google/rpc/error_details.ts +0 -1386
- package/src/generated/google/rpc/status.ts +0 -127
- package/src/generated/sid/v1/account/account.client.ts +0 -527
- package/src/generated/sid/v1/account/account.ts +0 -3261
- package/src/generated/sid/v1/admin/admin.client.ts +0 -139
- package/src/generated/sid/v1/admin/admin.ts +0 -781
- package/src/generated/sid/v1/admin/admin_roles.client.ts +0 -181
- package/src/generated/sid/v1/admin/admin_roles.ts +0 -1606
- package/src/generated/sid/v1/admin/analytics.client.ts +0 -106
- package/src/generated/sid/v1/admin/analytics.ts +0 -1017
- package/src/generated/sid/v1/admin/branding.client.ts +0 -166
- package/src/generated/sid/v1/admin/branding.ts +0 -1906
- package/src/generated/sid/v1/admin/enrollment.client.ts +0 -177
- package/src/generated/sid/v1/admin/enrollment.ts +0 -1766
- package/src/generated/sid/v1/admin/events.client.ts +0 -195
- package/src/generated/sid/v1/admin/events.ts +0 -1900
- package/src/generated/sid/v1/admin/flow.client.ts +0 -183
- package/src/generated/sid/v1/admin/flow.ts +0 -1552
- package/src/generated/sid/v1/admin/keys.client.ts +0 -107
- package/src/generated/sid/v1/admin/keys.ts +0 -931
- package/src/generated/sid/v1/admin/login_experience.client.ts +0 -160
- package/src/generated/sid/v1/admin/login_experience.ts +0 -1061
- package/src/generated/sid/v1/admin/migration.client.ts +0 -127
- package/src/generated/sid/v1/admin/migration.ts +0 -1948
- package/src/generated/sid/v1/admin/notifications.client.ts +0 -134
- package/src/generated/sid/v1/admin/notifications.ts +0 -1273
- package/src/generated/sid/v1/admin/operations.client.ts +0 -241
- package/src/generated/sid/v1/admin/operations.ts +0 -2633
- package/src/generated/sid/v1/admin/organizations.client.ts +0 -57
- package/src/generated/sid/v1/admin/organizations.ts +0 -332
- package/src/generated/sid/v1/admin/provisioning.client.ts +0 -232
- package/src/generated/sid/v1/admin/provisioning.ts +0 -1383
- package/src/generated/sid/v1/admin/scopes.client.ts +0 -171
- package/src/generated/sid/v1/admin/scopes.ts +0 -1324
- package/src/generated/sid/v1/admin/security.client.ts +0 -410
- package/src/generated/sid/v1/admin/security.ts +0 -4077
- package/src/generated/sid/v1/admin/sessions.client.ts +0 -114
- package/src/generated/sid/v1/admin/sessions.ts +0 -923
- package/src/generated/sid/v1/admin/settings.client.ts +0 -351
- package/src/generated/sid/v1/admin/settings.ts +0 -2458
- package/src/generated/sid/v1/admin/user_profile.client.ts +0 -57
- package/src/generated/sid/v1/admin/user_profile.ts +0 -730
- package/src/generated/sid/v1/admin/webhooks.client.ts +0 -269
- package/src/generated/sid/v1/admin/webhooks.ts +0 -2804
- package/src/generated/sid/v1/attestation/attestation.client.ts +0 -115
- package/src/generated/sid/v1/attestation/attestation.ts +0 -813
- package/src/generated/sid/v1/authn/auth.client.ts +0 -943
- package/src/generated/sid/v1/authn/auth.ts +0 -9719
- package/src/generated/sid/v1/authn/flows.client.ts +0 -413
- package/src/generated/sid/v1/authn/flows.ts +0 -3205
- package/src/generated/sid/v1/authn/issuer.client.ts +0 -489
- package/src/generated/sid/v1/authn/issuer.ts +0 -1600
- package/src/generated/sid/v1/authn/password_history.client.ts +0 -57
- package/src/generated/sid/v1/authn/password_history.ts +0 -578
- package/src/generated/sid/v1/authn/system_integration.client.ts +0 -73
- package/src/generated/sid/v1/authn/system_integration.ts +0 -218
- package/src/generated/sid/v1/authz/authz.client.ts +0 -459
- package/src/generated/sid/v1/authz/authz.ts +0 -6524
- package/src/generated/sid/v1/authz/forward_auth.client.ts +0 -97
- package/src/generated/sid/v1/authz/forward_auth.ts +0 -79
- package/src/generated/sid/v1/authz/governance.client.ts +0 -102
- package/src/generated/sid/v1/authz/governance.ts +0 -875
- package/src/generated/sid/v1/common/errors.ts +0 -710
- package/src/generated/sid/v1/common/pagination.ts +0 -152
- package/src/generated/sid/v1/common/transport.ts +0 -227
- package/src/generated/sid/v1/common/types.ts +0 -151
- package/src/generated/sid/v1/events/event_stream.client.ts +0 -67
- package/src/generated/sid/v1/events/event_stream.ts +0 -375
- package/src/generated/sid/v1/federation/upstream.client.ts +0 -142
- package/src/generated/sid/v1/federation/upstream.ts +0 -1736
- package/src/generated/sid/v1/identity/identity.client.ts +0 -467
- package/src/generated/sid/v1/identity/identity.ts +0 -5676
- package/src/generated/sid/v1/ids/ids.ts +0 -395
- package/src/generated/sid/v1/machine/machine_user.client.ts +0 -219
- package/src/generated/sid/v1/machine/machine_user.ts +0 -2364
- package/src/generated/sid/v1/machine/pat.client.ts +0 -130
- package/src/generated/sid/v1/machine/pat.ts +0 -1083
- package/src/generated/sid/v1/projects/projects.client.ts +0 -404
- package/src/generated/sid/v1/projects/projects.ts +0 -4446
- package/src/generated/sid/v1/scim/scim.client.ts +0 -520
- package/src/generated/sid/v1/scim/scim.ts +0 -3182
- package/src/generated/sid/v1/test/test.client.ts +0 -232
- package/src/generated/sid/v1/test/test.ts +0 -1136
- package/src/transport/adaptive.test.ts +0 -728
- package/src/transport/adaptive.ts +0 -308
- package/src/transport/framing.test.ts +0 -227
- package/src/transport/framing.ts +0 -98
- package/src/transport/webtransport.test.ts +0 -728
- package/src/transport/webtransport.ts +0 -323
package/dist/chunk-C3Q766CY.cjs
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// src/browser-vp/storage.ts
|
|
2
|
-
var DB_NAME = "sid-browser-vp";
|
|
3
|
-
var DB_VERSION = 1;
|
|
4
|
-
var STORE_BINDINGS = "bindings";
|
|
5
|
-
var STORE_PROFILE = "profile-state";
|
|
6
|
-
function openDb() {
|
|
7
|
-
return new Promise((resolve, reject) => {
|
|
8
|
-
const request = indexedDB.open(DB_NAME, DB_VERSION);
|
|
9
|
-
request.onupgradeneeded = () => {
|
|
10
|
-
const db = request.result;
|
|
11
|
-
if (!db.objectStoreNames.contains(STORE_BINDINGS)) {
|
|
12
|
-
db.createObjectStore(STORE_BINDINGS, { keyPath: "serviceSector" });
|
|
13
|
-
}
|
|
14
|
-
if (!db.objectStoreNames.contains(STORE_PROFILE)) {
|
|
15
|
-
db.createObjectStore(STORE_PROFILE, { keyPath: "profileId" });
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
request.onsuccess = () => resolve(request.result);
|
|
19
|
-
request.onerror = () => reject(request.error);
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
async function saveProfileState(profileId, state) {
|
|
23
|
-
const db = await openDb();
|
|
24
|
-
return new Promise((resolve, reject) => {
|
|
25
|
-
const tx = db.transaction(STORE_PROFILE, "readwrite");
|
|
26
|
-
tx.objectStore(STORE_PROFILE).put({ profileId, ...state });
|
|
27
|
-
tx.oncomplete = () => resolve();
|
|
28
|
-
tx.onerror = () => reject(tx.error);
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
async function loadProfileState(profileId) {
|
|
32
|
-
const db = await openDb();
|
|
33
|
-
return new Promise((resolve, reject) => {
|
|
34
|
-
const tx = db.transaction(STORE_PROFILE, "readonly");
|
|
35
|
-
const request = tx.objectStore(STORE_PROFILE).get(profileId);
|
|
36
|
-
request.onsuccess = () => {
|
|
37
|
-
const result = request.result;
|
|
38
|
-
if (!result) {
|
|
39
|
-
resolve(null);
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
const { profileId: _profileId, ...state } = result;
|
|
43
|
-
resolve(state);
|
|
44
|
-
};
|
|
45
|
-
request.onerror = () => reject(request.error);
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
async function deleteProfileState(profileId) {
|
|
49
|
-
const db = await openDb();
|
|
50
|
-
return new Promise((resolve, reject) => {
|
|
51
|
-
const tx = db.transaction(STORE_PROFILE, "readwrite");
|
|
52
|
-
tx.objectStore(STORE_PROFILE).delete(profileId);
|
|
53
|
-
tx.oncomplete = () => resolve();
|
|
54
|
-
tx.onerror = () => reject(tx.error);
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
async function saveBinding(serviceSector, entry) {
|
|
58
|
-
const db = await openDb();
|
|
59
|
-
return new Promise((resolve, reject) => {
|
|
60
|
-
const tx = db.transaction(STORE_BINDINGS, "readwrite");
|
|
61
|
-
tx.objectStore(STORE_BINDINGS).put({ serviceSector, ...entry });
|
|
62
|
-
tx.oncomplete = () => resolve();
|
|
63
|
-
tx.onerror = () => reject(tx.error);
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
async function loadBinding(serviceSector) {
|
|
67
|
-
const db = await openDb();
|
|
68
|
-
return new Promise((resolve, reject) => {
|
|
69
|
-
const tx = db.transaction(STORE_BINDINGS, "readonly");
|
|
70
|
-
const request = tx.objectStore(STORE_BINDINGS).get(serviceSector);
|
|
71
|
-
request.onsuccess = () => {
|
|
72
|
-
const result = request.result;
|
|
73
|
-
if (!result) {
|
|
74
|
-
resolve(null);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
const { serviceSector: _serviceSector, ...entry } = result;
|
|
78
|
-
resolve(entry);
|
|
79
|
-
};
|
|
80
|
-
request.onerror = () => reject(request.error);
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
async function listBindings() {
|
|
84
|
-
const db = await openDb();
|
|
85
|
-
return new Promise((resolve, reject) => {
|
|
86
|
-
const tx = db.transaction(STORE_BINDINGS, "readonly");
|
|
87
|
-
const request = tx.objectStore(STORE_BINDINGS).getAll();
|
|
88
|
-
request.onsuccess = () => resolve(_nullishCoalesce(request.result, () => ( [])));
|
|
89
|
-
request.onerror = () => reject(request.error);
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
async function deleteBinding(serviceSector) {
|
|
93
|
-
const db = await openDb();
|
|
94
|
-
return new Promise((resolve, reject) => {
|
|
95
|
-
const tx = db.transaction(STORE_BINDINGS, "readwrite");
|
|
96
|
-
tx.objectStore(STORE_BINDINGS).delete(serviceSector);
|
|
97
|
-
tx.oncomplete = () => resolve();
|
|
98
|
-
tx.onerror = () => reject(tx.error);
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
async function clearAll() {
|
|
102
|
-
const db = await openDb();
|
|
103
|
-
return new Promise((resolve, reject) => {
|
|
104
|
-
const tx = db.transaction([STORE_PROFILE, STORE_BINDINGS], "readwrite");
|
|
105
|
-
tx.objectStore(STORE_PROFILE).clear();
|
|
106
|
-
tx.objectStore(STORE_BINDINGS).clear();
|
|
107
|
-
tx.oncomplete = () => resolve();
|
|
108
|
-
tx.onerror = () => reject(tx.error);
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
function isIndexedDbAvailable() {
|
|
112
|
-
return typeof indexedDB !== "undefined";
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
exports.saveProfileState = saveProfileState; exports.loadProfileState = loadProfileState; exports.deleteProfileState = deleteProfileState; exports.saveBinding = saveBinding; exports.loadBinding = loadBinding; exports.listBindings = listBindings; exports.deleteBinding = deleteBinding; exports.clearAll = clearAll; exports.isIndexedDbAvailable = isIndexedDbAvailable;
|
package/dist/chunk-J5YXRXB5.js
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
// src/browser-vp/storage.ts
|
|
2
|
-
var DB_NAME = "sid-browser-vp";
|
|
3
|
-
var DB_VERSION = 1;
|
|
4
|
-
var STORE_BINDINGS = "bindings";
|
|
5
|
-
var STORE_PROFILE = "profile-state";
|
|
6
|
-
function openDb() {
|
|
7
|
-
return new Promise((resolve, reject) => {
|
|
8
|
-
const request = indexedDB.open(DB_NAME, DB_VERSION);
|
|
9
|
-
request.onupgradeneeded = () => {
|
|
10
|
-
const db = request.result;
|
|
11
|
-
if (!db.objectStoreNames.contains(STORE_BINDINGS)) {
|
|
12
|
-
db.createObjectStore(STORE_BINDINGS, { keyPath: "serviceSector" });
|
|
13
|
-
}
|
|
14
|
-
if (!db.objectStoreNames.contains(STORE_PROFILE)) {
|
|
15
|
-
db.createObjectStore(STORE_PROFILE, { keyPath: "profileId" });
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
request.onsuccess = () => resolve(request.result);
|
|
19
|
-
request.onerror = () => reject(request.error);
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
async function saveProfileState(profileId, state) {
|
|
23
|
-
const db = await openDb();
|
|
24
|
-
return new Promise((resolve, reject) => {
|
|
25
|
-
const tx = db.transaction(STORE_PROFILE, "readwrite");
|
|
26
|
-
tx.objectStore(STORE_PROFILE).put({ profileId, ...state });
|
|
27
|
-
tx.oncomplete = () => resolve();
|
|
28
|
-
tx.onerror = () => reject(tx.error);
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
async function loadProfileState(profileId) {
|
|
32
|
-
const db = await openDb();
|
|
33
|
-
return new Promise((resolve, reject) => {
|
|
34
|
-
const tx = db.transaction(STORE_PROFILE, "readonly");
|
|
35
|
-
const request = tx.objectStore(STORE_PROFILE).get(profileId);
|
|
36
|
-
request.onsuccess = () => {
|
|
37
|
-
const result = request.result;
|
|
38
|
-
if (!result) {
|
|
39
|
-
resolve(null);
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
const { profileId: _profileId, ...state } = result;
|
|
43
|
-
resolve(state);
|
|
44
|
-
};
|
|
45
|
-
request.onerror = () => reject(request.error);
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
async function deleteProfileState(profileId) {
|
|
49
|
-
const db = await openDb();
|
|
50
|
-
return new Promise((resolve, reject) => {
|
|
51
|
-
const tx = db.transaction(STORE_PROFILE, "readwrite");
|
|
52
|
-
tx.objectStore(STORE_PROFILE).delete(profileId);
|
|
53
|
-
tx.oncomplete = () => resolve();
|
|
54
|
-
tx.onerror = () => reject(tx.error);
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
async function saveBinding(serviceSector, entry) {
|
|
58
|
-
const db = await openDb();
|
|
59
|
-
return new Promise((resolve, reject) => {
|
|
60
|
-
const tx = db.transaction(STORE_BINDINGS, "readwrite");
|
|
61
|
-
tx.objectStore(STORE_BINDINGS).put({ serviceSector, ...entry });
|
|
62
|
-
tx.oncomplete = () => resolve();
|
|
63
|
-
tx.onerror = () => reject(tx.error);
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
async function loadBinding(serviceSector) {
|
|
67
|
-
const db = await openDb();
|
|
68
|
-
return new Promise((resolve, reject) => {
|
|
69
|
-
const tx = db.transaction(STORE_BINDINGS, "readonly");
|
|
70
|
-
const request = tx.objectStore(STORE_BINDINGS).get(serviceSector);
|
|
71
|
-
request.onsuccess = () => {
|
|
72
|
-
const result = request.result;
|
|
73
|
-
if (!result) {
|
|
74
|
-
resolve(null);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
const { serviceSector: _serviceSector, ...entry } = result;
|
|
78
|
-
resolve(entry);
|
|
79
|
-
};
|
|
80
|
-
request.onerror = () => reject(request.error);
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
async function listBindings() {
|
|
84
|
-
const db = await openDb();
|
|
85
|
-
return new Promise((resolve, reject) => {
|
|
86
|
-
const tx = db.transaction(STORE_BINDINGS, "readonly");
|
|
87
|
-
const request = tx.objectStore(STORE_BINDINGS).getAll();
|
|
88
|
-
request.onsuccess = () => resolve(request.result ?? []);
|
|
89
|
-
request.onerror = () => reject(request.error);
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
async function deleteBinding(serviceSector) {
|
|
93
|
-
const db = await openDb();
|
|
94
|
-
return new Promise((resolve, reject) => {
|
|
95
|
-
const tx = db.transaction(STORE_BINDINGS, "readwrite");
|
|
96
|
-
tx.objectStore(STORE_BINDINGS).delete(serviceSector);
|
|
97
|
-
tx.oncomplete = () => resolve();
|
|
98
|
-
tx.onerror = () => reject(tx.error);
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
async function clearAll() {
|
|
102
|
-
const db = await openDb();
|
|
103
|
-
return new Promise((resolve, reject) => {
|
|
104
|
-
const tx = db.transaction([STORE_PROFILE, STORE_BINDINGS], "readwrite");
|
|
105
|
-
tx.objectStore(STORE_PROFILE).clear();
|
|
106
|
-
tx.objectStore(STORE_BINDINGS).clear();
|
|
107
|
-
tx.oncomplete = () => resolve();
|
|
108
|
-
tx.onerror = () => reject(tx.error);
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
function isIndexedDbAvailable() {
|
|
112
|
-
return typeof indexedDB !== "undefined";
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export {
|
|
116
|
-
saveProfileState,
|
|
117
|
-
loadProfileState,
|
|
118
|
-
deleteProfileState,
|
|
119
|
-
saveBinding,
|
|
120
|
-
loadBinding,
|
|
121
|
-
listBindings,
|
|
122
|
-
deleteBinding,
|
|
123
|
-
clearAll,
|
|
124
|
-
isIndexedDbAvailable
|
|
125
|
-
};
|