@ideem/zsm-client-sdk 2.6.0 → 2.6.2
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 +24 -5
- package/EventCoordinator.js +28 -1
- package/FIDO2ClientBase.js +1 -1
- package/README.md +2 -2
- package/UMFAClientBase.js +1 -0
- package/WebAuthnClientBase.js +40 -42
- package/package.json +68 -70
package/CHANGELOG.md
CHANGED
|
@@ -1,19 +1,38 @@
|
|
|
1
|
-
ZSM Client SDK for Browser Apps
|
|
2
|
-
Latest version: v2.5.0
|
|
3
|
-
Latest release date: Aug 29, 2025
|
|
1
|
+
# ZSM Client SDK for Browser Apps
|
|
4
2
|
|
|
5
3
|
The ZSM Client SDK for Browser Apps provides the resources needed to integrate Ideem's FIDO2 Authenticator
|
|
6
4
|
and Universal MFA into a browser application.
|
|
7
5
|
|
|
8
6
|
## Resources:
|
|
7
|
+
- Documentation: https://docs.useideem.com/pkp
|
|
9
8
|
- Support: support@useideem.com
|
|
10
9
|
|
|
11
10
|
## Known Issues
|
|
12
|
-
-
|
|
11
|
+
- None at this time.
|
|
13
12
|
|
|
14
13
|
----
|
|
14
|
+
## Release 2.6.2 - December 19, 2025 [ NPM PACKAGE RELEASE ] **[ LATEST ]**
|
|
15
|
+
- Hotfix release to address an issue with the Passkeys+ plugin integration.
|
|
15
16
|
|
|
16
|
-
## Release 2.
|
|
17
|
+
## Release 2.6.1 - December 16, 2025 [ NPM PACKAGE RELEASE ]
|
|
18
|
+
- Minor bug fixes and improvements
|
|
19
|
+
- Minor alteration to initialization process to remove the need to provide a `userIdentifier` when initializing (all method calls now provide the update).
|
|
20
|
+
- Improvements to EventCoordinator:
|
|
21
|
+
- Streamlined onReset to ensure that all events are set to "PENDING" state.
|
|
22
|
+
- Improved onReady handling to ensure accurate state representation.
|
|
23
|
+
- Enhanced error handling and reporting mechanisms.
|
|
24
|
+
- Improvements to NPM packaging and distribution process for use with additional package managers and build tools.
|
|
25
|
+
- Reduced complexity of `zsm_app_config.json` file by:
|
|
26
|
+
- Removing _necessity_ of `use_passkeys` and `use_origin` properties (now auto-detected based on environment and browser capabilities).
|
|
27
|
+
- Simplifying host URL configuration down to a `region` property; host URLs are now auto-generated based on region although previous syntax is still supported for backward compatibility.
|
|
28
|
+
|
|
29
|
+
## Release 2.6.0 - November 26, 2025 [ NPM PACKAGE RELEASE ]
|
|
30
|
+
- Support of updated Passkeys plugin that provides migration scenarios for ZSM to Passkeys+ and boostrapping of new device using existing passkey.
|
|
31
|
+
|
|
32
|
+
## Release 2.5.1 - October 6, 2025 [ NPM PACKAGE RELEASE ]
|
|
33
|
+
- Minor improvements
|
|
34
|
+
|
|
35
|
+
## Release 2.5.0 - Aug 29, 2025 [ NPM PACKAGE RELEASE ]
|
|
17
36
|
- Significant re-architecture of the SDK to improve performance and maintainability (non-breaking, but may alter existing implementations, if plugins are used)
|
|
18
37
|
- Introduction of a new plugin system for easier integration of additional Ideem services
|
|
19
38
|
- Plugin system allows for dynamic loading and unloading of features
|
package/EventCoordinator.js
CHANGED
|
@@ -52,6 +52,13 @@ class EventCoordinator {
|
|
|
52
52
|
set coreReady(value) { this.coreSDKClass.ready = !!value; }
|
|
53
53
|
set coreErrs(value) { this.coreSDKClass.containsErrors = !!value; }
|
|
54
54
|
|
|
55
|
+
/**
|
|
56
|
+
* @name setCoreSDKClass
|
|
57
|
+
* @description Sets the core SDK class reference on the EventCoordinator instance, and defines its "finished" method.
|
|
58
|
+
* @param {string} classDesc The name of the client class being initialized (UMFAClient or FIDO2Client).
|
|
59
|
+
* @param {Object} classRef The reference to the core SDK class being initialized.
|
|
60
|
+
* @returns {void}
|
|
61
|
+
*/
|
|
55
62
|
setCoreSDKClass(classDesc, classRef) {
|
|
56
63
|
const core = (this.coreSDKClass = classRef); // Set a reference to the core class on the singleton instance, then...
|
|
57
64
|
core.ready = false; // ... set its default ready state to false
|
|
@@ -63,6 +70,12 @@ class EventCoordinator {
|
|
|
63
70
|
this.specifyClient(classDesc); // ... finally, specify the client class that is being initialized.
|
|
64
71
|
}
|
|
65
72
|
|
|
73
|
+
/**
|
|
74
|
+
* @name specifyClient
|
|
75
|
+
* @description Specifies the active client class (UMFAClient or FIDO2Client) being initialized.
|
|
76
|
+
* @param {string} selectedClient The name of the client class being initialized (UMFAClient or FIDO2Client).
|
|
77
|
+
* @returns {void}
|
|
78
|
+
*/
|
|
66
79
|
specifyClient(selectedClient) {
|
|
67
80
|
if (!selectedClient || typeof selectedClient !== 'string' || !selectedClient.length)
|
|
68
81
|
throw new TypeError(`[ZSM EventCoordinator] :: specifyClient :: Invalid 'selectedClient' value: "${selectedClient}". 'selectedClient' is required and expects a String.`);
|
|
@@ -74,6 +87,12 @@ class EventCoordinator {
|
|
|
74
87
|
}
|
|
75
88
|
}
|
|
76
89
|
|
|
90
|
+
/**
|
|
91
|
+
* @name summarizeEventStack
|
|
92
|
+
* @description Logs a summary of the current event stack to the console.
|
|
93
|
+
* @param {...any} triggerData Additional data to include in the log (e.g., the event that triggered the update).
|
|
94
|
+
* @returns {void}
|
|
95
|
+
*/
|
|
77
96
|
summarizeEventStack (...triggerData) {
|
|
78
97
|
let summaryObject = this.object,
|
|
79
98
|
{ client, containsErrors, done } = this;
|
|
@@ -102,6 +121,14 @@ class EventCoordinator {
|
|
|
102
121
|
GLOBAL.dispatchEvent(new CustomEvent(eventName, { detail: eventDetail }));
|
|
103
122
|
}
|
|
104
123
|
|
|
124
|
+
/**
|
|
125
|
+
* @name update
|
|
126
|
+
* @description Updates the status of a specific event in the event stack.
|
|
127
|
+
* @param {string} classDesc The name of the event to update.
|
|
128
|
+
* @param {string} eventStatus The new status for the event (accepts: UNREGISTERED, PENDING, READY, ERROR).
|
|
129
|
+
* @throws {TypeError} If the classDesc is invalid or eventStatus is not one of the allowed values.
|
|
130
|
+
* @returns {Object} Returns the updated event stack object.
|
|
131
|
+
*/
|
|
105
132
|
update (classDesc, eventStatus="PENDING") {
|
|
106
133
|
if (!classDesc || typeof classDesc !== 'string' || !classDesc.length)
|
|
107
134
|
throw new TypeError(`[ZSM EventCoordinator] :: update :: Invalid 'classDesc' value: "${classDesc}". 'classDesc' is required and expects a String.`);
|
|
@@ -175,7 +202,7 @@ class EventCoordinator {
|
|
|
175
202
|
* @returns {Object} Returns the reset event stack object.
|
|
176
203
|
*/
|
|
177
204
|
reset() {
|
|
178
|
-
this._eventStack
|
|
205
|
+
this._eventStack.keys().forEach(key=>this._eventStack.set(key,'PENDING'));
|
|
179
206
|
if(window && window?.queueMicrotask) {
|
|
180
207
|
queueMicrotask(() => this.dispatchEvent('ZSMClientEventStackReset', { stack: this.object }));
|
|
181
208
|
} else this.dispatchEvent('ZSMClientEventStackReset', { stack: this.object });
|
package/FIDO2ClientBase.js
CHANGED
|
@@ -8,7 +8,7 @@ class FIDO2ClientBase {
|
|
|
8
8
|
* @param {Object} config - The configuration for the FIDO2Client
|
|
9
9
|
*/
|
|
10
10
|
constructor(config) {
|
|
11
|
-
|
|
11
|
+
eventCoordinator.reset();
|
|
12
12
|
eventCoordinator.update('FIDO2ClientBase');
|
|
13
13
|
this.config = config;
|
|
14
14
|
const WebAuthnClient = zsmPluginManager.classes('WEBAUTHNCLIENT');
|
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ TypeScript. These resources include documentation and example applications.
|
|
|
19
19
|
Ideem support, <a href="mailto:support@useideem.com">support@useideem.com</a>, to obtain a unique Application ID.
|
|
20
20
|
|
|
21
21
|
### Documentation
|
|
22
|
-
Documentation for this SDK can be found at: https://docs.useideem.com/
|
|
22
|
+
Documentation for this SDK can be found at: https://docs.useideem.com/pkp. The documentation covers interfaces provided for FIDO2 Authenticator and Universal MFA integrations.
|
|
23
23
|
|
|
24
24
|
### Demos
|
|
25
25
|
You can view demos of the FIDO2 Authenticator and Universal MFA Capabilities online at <a href="https://demo.useideem.com">https://demo.useideem.com</a>.
|
|
@@ -34,4 +34,4 @@ You can receive support and get your questions answered by emailing <a href="mai
|
|
|
34
34
|
Please refer to the LICENSE file in this directory for the license governing the use of this SDK.
|
|
35
35
|
|
|
36
36
|
### Release Notes
|
|
37
|
-
Please refer to the
|
|
37
|
+
Please refer to the CHANGELOG.md file in this directory for the release notes of this SDK.
|
package/UMFAClientBase.js
CHANGED
|
@@ -8,6 +8,7 @@ class UMFAClientBase {
|
|
|
8
8
|
* @param {Object} config - The configuration for ZSM initialization (ref: ./zsm_app_config.json)
|
|
9
9
|
*/
|
|
10
10
|
constructor(config) {
|
|
11
|
+
eventCoordinator.reset();
|
|
11
12
|
eventCoordinator.update('UMFAClientBase');
|
|
12
13
|
this.config = config;
|
|
13
14
|
const WebAuthnClient = zsmPluginManager.classes('WEBAUTHNCLIENT');
|
package/WebAuthnClientBase.js
CHANGED
|
@@ -22,7 +22,12 @@ class WebAuthnClientBase {
|
|
|
22
22
|
// Helper function to standardize URL format (ensuring it's parsable and ends with a '/')
|
|
23
23
|
const cleanURL = (url) => URL.canParse(url) ? new URL(url).origin + '/' : false;
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
if(config?.region){
|
|
26
|
+
config.authenticator_host_url ||= config.authenticator_host = `https://zsm-authenticator-${config.region}.useideem.com/`;
|
|
27
|
+
config.zsm_host_url ||= config.zsm_host = `https://zsm-${config.region}.useideem.com/`;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const baseConfig = {
|
|
26
31
|
"application_id" : "",
|
|
27
32
|
"api_key" : "",
|
|
28
33
|
"host_url" : "https://zsm-authenticator-demo.useideem.com/",
|
|
@@ -30,9 +35,15 @@ class WebAuthnClientBase {
|
|
|
30
35
|
"log_level" : 'Debug',
|
|
31
36
|
"request_timeout_ms" : 300000,
|
|
32
37
|
"retry_count" : 0,
|
|
33
|
-
"consumer_id" : ""
|
|
38
|
+
"consumer_id" : "",
|
|
39
|
+
"use_passkeys" : true
|
|
34
40
|
};
|
|
35
41
|
|
|
42
|
+
if(config?.use_passkeys===false || config?.use_origin===false){
|
|
43
|
+
delete config.use_passkeys;
|
|
44
|
+
delete config.use_origin;
|
|
45
|
+
}
|
|
46
|
+
|
|
36
47
|
this.zsmApi = undefined; // The ZSM API instance (read: WASM-driven Crypto Module)
|
|
37
48
|
this.relyingParty = undefined; // The Relying Party instance (read: ZSM Authenticator API)
|
|
38
49
|
this.status = undefined; // The status of the WebAuthnClientBase
|
|
@@ -108,7 +119,6 @@ class WebAuthnClientBase {
|
|
|
108
119
|
*/
|
|
109
120
|
async initializeZsm () {
|
|
110
121
|
if(GLOBAL.mpcConfig.consumer_id !== this.MPCConfig.consumer_id) {
|
|
111
|
-
// console.log('GLOBAL.mpcConfig :', Object.assign({},GLOBAL.mpcConfig));
|
|
112
122
|
await this.zsmApi.configure(GLOBAL.mpcConfig);
|
|
113
123
|
this.MPCConfig = await Object.assign({}, GLOBAL.mpcConfig);
|
|
114
124
|
await uid2iid(this.config.consumer_id, this.MPCConfig.consumer_id);
|
|
@@ -127,7 +137,10 @@ class WebAuthnClientBase {
|
|
|
127
137
|
*/
|
|
128
138
|
|
|
129
139
|
async checkIdentity (userIdentifier, primeEnroll=false) {
|
|
130
|
-
|
|
140
|
+
if(userIdentifier == null
|
|
141
|
+
|| userIdentifier === '') return new Error(`[WebAuthnClient] :: checkIdentity :: A userIdentifier String is required! Received: ${userIdentifier}.`);
|
|
142
|
+
if(userIdentifier && typeof userIdentifier === 'string') this.userIdentifier = userIdentifier;
|
|
143
|
+
|
|
131
144
|
try {
|
|
132
145
|
const resultOfCheck = await this.relyingParty.checkServerSideIdentity(primeEnroll);
|
|
133
146
|
|
|
@@ -156,6 +169,9 @@ class WebAuthnClientBase {
|
|
|
156
169
|
* @throws {Error} Throws a COUNTED error if unable to verify the credential with the Relying Party Server.
|
|
157
170
|
*/
|
|
158
171
|
async webauthnCreate (userIdentifier) {
|
|
172
|
+
if(userIdentifier == null
|
|
173
|
+
|| userIdentifier === '') return new Error(`[WebAuthnClient] :: webauthnCreate :: A userIdentifier String is required! Received: ${userIdentifier}.`);
|
|
174
|
+
if(userIdentifier && typeof userIdentifier === 'string') this.userIdentifier = userIdentifier;
|
|
159
175
|
|
|
160
176
|
await this.initializeZsm('webauthnCreate');
|
|
161
177
|
|
|
@@ -200,22 +216,25 @@ class WebAuthnClientBase {
|
|
|
200
216
|
* @throws {Error} Throws an error if the user ID or token is missing from the response body.
|
|
201
217
|
*/
|
|
202
218
|
async webauthnCreateMpcThenFinish (userIdentifier, publicKey, pairing_token) {
|
|
219
|
+
if(userIdentifier == null
|
|
220
|
+
|| userIdentifier === '') return new Error(`[WebAuthnClient] :: webauthnCreateMpcThenFinish :: A userIdentifier String is required! Received: ${userIdentifier}.`);
|
|
221
|
+
if(userIdentifier && typeof userIdentifier === 'string') this.userIdentifier = userIdentifier;
|
|
203
222
|
this.status = 'ENROLLMENT_STARTING';
|
|
204
|
-
await this.initializeZsm('
|
|
223
|
+
await this.initializeZsm('webauthnCreateMpcThenFinish');
|
|
205
224
|
|
|
206
225
|
let createResponse = await this.zsmApi.webauthn_create(publicKey, pairing_token, userIdentifier, tracePrimer());
|
|
207
|
-
if(!createResponse) throw new Error('[WebAuthnClient - mpc_round] ::
|
|
226
|
+
if(!createResponse) throw new Error('[WebAuthnClient - mpc_round] :: webauthnCreateMpcThenFinish :: Unable to obtain response from Crypto Server!');
|
|
208
227
|
|
|
209
228
|
createResponse = toObject(createResponse);
|
|
210
229
|
GLOBAL.dispatchEvent(new CustomEvent("MPCResponse", {bubbles: true, cancelable: false, detail: createResponse }));
|
|
211
230
|
|
|
212
|
-
if(!createResponse?.result) throw new Error('[WebAuthnClient - mpc_round] ::
|
|
213
|
-
if(!createResponse?.result?.response) throw new Error('[WebAuthnClient - mpc_round] ::
|
|
231
|
+
if(!createResponse?.result) throw new Error('[WebAuthnClient - mpc_round] :: webauthnCreateMpcThenFinish :: Unable to obtain credential from Crypto Server!');
|
|
232
|
+
if(!createResponse?.result?.response) throw new Error('[WebAuthnClient - mpc_round] :: webauthnCreateMpcThenFinish :: Unable to acquire attestation object!');
|
|
214
233
|
|
|
215
234
|
const credential = createResponse.result;
|
|
216
235
|
|
|
217
236
|
const registrationResult = await this.relyingParty.registrationFinish(credential);
|
|
218
|
-
if (!registrationResult) throw new Error('[WebAuthnClient] ::
|
|
237
|
+
if (!registrationResult) throw new Error('[WebAuthnClient] :: webauthnCreateMpcThenFinish :: Unable to verify credential Relying Party Server!');
|
|
219
238
|
|
|
220
239
|
return registrationResult.credential;
|
|
221
240
|
};
|
|
@@ -233,6 +252,9 @@ class WebAuthnClientBase {
|
|
|
233
252
|
* @throws {Error} Throws an error if the user ID or token is missing from the response body.
|
|
234
253
|
*/
|
|
235
254
|
async webauthnGet (userIdentifier) {
|
|
255
|
+
if(userIdentifier == null
|
|
256
|
+
|| userIdentifier === '') return new Error(`[WebAuthnClient] :: webauthnGet :: A userIdentifier String is required! Received: ${userIdentifier}.`);
|
|
257
|
+
if(userIdentifier && typeof userIdentifier === 'string') this.userIdentifier = userIdentifier;
|
|
236
258
|
|
|
237
259
|
await this.initializeZsm('webauthnGet');
|
|
238
260
|
const credentialId = await this.webauthnRetrieve(userIdentifier, true);
|
|
@@ -296,6 +318,9 @@ class WebAuthnClientBase {
|
|
|
296
318
|
* @throws {Error} Throws an error if an uncaught/unhandled error occurs while retrieving the credential.
|
|
297
319
|
*/
|
|
298
320
|
async webauthnRetrieve (userIdentifier) {
|
|
321
|
+
if(userIdentifier == null
|
|
322
|
+
|| userIdentifier === '') return new Error(`[WebAuthnClient] :: webauthnRetrieve :: A userIdentifier String is required! Received: ${userIdentifier}.`);
|
|
323
|
+
if(userIdentifier && typeof userIdentifier === 'string') this.userIdentifier = userIdentifier;
|
|
299
324
|
this.credentialID = null;
|
|
300
325
|
|
|
301
326
|
this.initializeZsm('webauthnRetrieve');
|
|
@@ -311,39 +336,6 @@ class WebAuthnClientBase {
|
|
|
311
336
|
this.credentialID = response?.result['zsm_credential_id']??null;
|
|
312
337
|
return this.credentialID || false;
|
|
313
338
|
};
|
|
314
|
-
// async webauthnRetrieve (userIdentifier, targetData='id') {
|
|
315
|
-
// this.credentialID = null;
|
|
316
|
-
//
|
|
317
|
-
// this.initializeZsm('webauthnRetrieve');
|
|
318
|
-
// let credentialIdentifier = await iid4uid(userIdentifier),
|
|
319
|
-
// requestedData = {};
|
|
320
|
-
// GLOBAL.mpcConfig.consumer_id = credentialIdentifier;
|
|
321
|
-
//
|
|
322
|
-
// let response = await this.zsmApi.webauthn_retrieve(userIdentifier);
|
|
323
|
-
// response = toObject(response);
|
|
324
|
-
//
|
|
325
|
-
// if (response?.error || !response?.result) return false;
|
|
326
|
-
//
|
|
327
|
-
// this.credentialID = response?.result['zsm_credential_id']??null;
|
|
328
|
-
//
|
|
329
|
-
// if([undefined,true,false,null,'','id'].includes(targetData)) {
|
|
330
|
-
// return this.credentialID;
|
|
331
|
-
// }
|
|
332
|
-
// let pkpCred = await iid4uid(`pk:${userIdentifier}`);
|
|
333
|
-
// if(pkpCred === `pk:${userIdentifier}`) pkpCred = undefined;
|
|
334
|
-
// requestedData = {
|
|
335
|
-
// userIdentifier,
|
|
336
|
-
// zsmCredID : this.credentialID,
|
|
337
|
-
// hasZSMCred : (this.credentialID != null),
|
|
338
|
-
// pkpCredID : pkpCred,
|
|
339
|
-
// hasLocalPasskey : (typeof pkpCred === 'string' && pkpCred !== ''),
|
|
340
|
-
// hasRemotePasskey : (typeof pkpCred === 'object')
|
|
341
|
-
// };
|
|
342
|
-
// if (targetData === "all") {
|
|
343
|
-
// return requestedData;
|
|
344
|
-
// }
|
|
345
|
-
// return response?.[targetData] ?? response?.result?.[targetData] ?? requestedData?.[targetData] ?? null;
|
|
346
|
-
// };
|
|
347
339
|
|
|
348
340
|
/**
|
|
349
341
|
* @name webauthnPartialGet
|
|
@@ -357,6 +349,9 @@ class WebAuthnClientBase {
|
|
|
357
349
|
* @emits {CustomEvent} Emits a "MPCResponse" event with the mpcResponse data.
|
|
358
350
|
*/
|
|
359
351
|
async webauthnPartialGet (userIdentifier) {
|
|
352
|
+
if(userIdentifier == null
|
|
353
|
+
|| userIdentifier === '') return new Error(`[WebAuthnClient] :: webauthnPartialGet :: A userIdentifier String is required! Received: ${userIdentifier}.`);
|
|
354
|
+
if(userIdentifier && typeof userIdentifier === 'string') this.userIdentifier = userIdentifier;
|
|
360
355
|
this.status = 'AUTHENTICATION_STARTING';
|
|
361
356
|
await this.initializeZsm('webauthnPartialGet');
|
|
362
357
|
|
|
@@ -399,6 +394,9 @@ class WebAuthnClientBase {
|
|
|
399
394
|
* @throws {Error<UnenrollError>} Throws an UnenrollError if a credential matching userIdentifier IS stored on the device, but was unable to be removed.
|
|
400
395
|
*/
|
|
401
396
|
async unbindFromDevice (userIdentifier) {
|
|
397
|
+
if(userIdentifier == null
|
|
398
|
+
|| userIdentifier === '') return new Error(`[WebAuthnClient] :: unbindFromDevice :: A userIdentifier String is required! Received: ${userIdentifier}.`);
|
|
399
|
+
if(userIdentifier && typeof userIdentifier === 'string') this.userIdentifier = userIdentifier;
|
|
402
400
|
this.status = 'UNENROLL_STARTING';
|
|
403
401
|
if(userIdentifier !== this.userIdentifier) return false;
|
|
404
402
|
await this.initializeZsm('unbindFromDevice');
|
package/package.json
CHANGED
|
@@ -1,72 +1,70 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "@ideem/zsm-client-sdk",
|
|
3
|
-
"version": "2.6.
|
|
4
|
-
"description": "ZSM makes 2FA easy and invisible for everyone, all the time, using advanced cryptography like MPC to establish cryptographic proof of the origin of any transaction or login attempt, while eliminating opportunities for social engineering. ZSM has no reliance on specific hardware. Our cryptographic module has completed FIPS 140-3 NIST approved lab testing, is FIDO2-ready, and is on the Modules In Progress (MIP) list. Superior Usability. no opt-in, no codes, no downloads, no authenticator apps. Better Security.",
|
|
5
|
-
"author": "
|
|
6
|
-
"keywords": [
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
],
|
|
71
|
-
"sideEffects": false
|
|
2
|
+
"name" : "@ideem/zsm-client-sdk",
|
|
3
|
+
"version" : "2.6.2",
|
|
4
|
+
"description" : "ZSM makes 2FA easy and invisible for everyone, all the time, using advanced cryptography like MPC to establish cryptographic proof of the origin of any transaction or login attempt, while eliminating opportunities for social engineering. ZSM has no reliance on specific hardware. Our cryptographic module has completed FIPS 140-3 NIST approved lab testing, is FIDO2-ready, and is on the Modules In Progress (MIP) list. Superior Usability. no opt-in, no codes, no downloads, no authenticator apps. Better Security.",
|
|
5
|
+
"author" : "Jason Jurusz <jj@useideem.com>",
|
|
6
|
+
"keywords" : [ "ideem", "zsm", "zsm-client-sdk", "umfaclient", "fido2client", "library", "umfa", "fido", "fido2", "client", "javascript", "multifactor", "multi-factor", "webauthn", "authentication", "security", "cryptography", "mpc", "fips", "nist", "mip", "passkeys" ],
|
|
7
|
+
"type" : "module",
|
|
8
|
+
"main" : "./ZSMClientSDK.js",
|
|
9
|
+
"exports" : {
|
|
10
|
+
"." : "./ZSMClientSDK.js",
|
|
11
|
+
"./*" : "./*.js",
|
|
12
|
+
"./*.js" : "./*.js"
|
|
13
|
+
},
|
|
14
|
+
|
|
15
|
+
"scripts" : {
|
|
16
|
+
"start" : "echo 'This is the Ideem SDK library, not a freestanding application. There is no start script defined. To use, import the library into a browser application.' 1>&2",
|
|
17
|
+
"showVersion" : "echo \"$(npm pkg get name | tr -d \\\") current version: $(npm pkg get version | tr -d \\\")\""
|
|
18
|
+
},
|
|
19
|
+
"collaborators" : [
|
|
20
|
+
"Joel Teply <joel@useideem.com>",
|
|
21
|
+
"Todd Decker <todd@useideem.com>",
|
|
22
|
+
"Brian Koziel <brian@useideem.com>"
|
|
23
|
+
],
|
|
24
|
+
"license" : "LicenseRef-Ideem",
|
|
25
|
+
"repository" : {
|
|
26
|
+
"type" : "git",
|
|
27
|
+
"url" : "git+https://github.com/useideem/vHSM.git"
|
|
28
|
+
},
|
|
29
|
+
"homepage" : "https://useideem.com",
|
|
30
|
+
"bugs" : "https://github.com/useideem/vHSM/issues",
|
|
31
|
+
"files" : [
|
|
32
|
+
"./shims/",
|
|
33
|
+
"./ErrorHandler.js",
|
|
34
|
+
"./EventCoordinator.js",
|
|
35
|
+
"./FIDO2Client.js",
|
|
36
|
+
"./FIDO2ClientBase.js",
|
|
37
|
+
"./GlobalScoping.js",
|
|
38
|
+
"./IdentityIndexing.js",
|
|
39
|
+
"./PluginManager.js",
|
|
40
|
+
"./RelyingParty.js",
|
|
41
|
+
"./RelyingPartyBase.js",
|
|
42
|
+
"./UMFAClient.js",
|
|
43
|
+
"./UMFAClientBase.js",
|
|
44
|
+
"./Utils.js",
|
|
45
|
+
"./WASMRustInterface.js",
|
|
46
|
+
"./WebAuthnClient.js",
|
|
47
|
+
"./WebAuthnClientBase.js",
|
|
48
|
+
"./ZSMClientSDK.js",
|
|
49
|
+
"./CHANGELOG.md",
|
|
50
|
+
"./LICENSE",
|
|
51
|
+
"./README.md"
|
|
52
|
+
],
|
|
53
|
+
"sideEffects" : [
|
|
54
|
+
"./EventCoordinator.js",
|
|
55
|
+
"./FIDO2Client.js",
|
|
56
|
+
"./FIDO2ClientBase.js",
|
|
57
|
+
"./GlobalScoping.js",
|
|
58
|
+
"./IdentityIndexing.js",
|
|
59
|
+
"./PluginManager.js",
|
|
60
|
+
"./RelyingParty.js",
|
|
61
|
+
"./RelyingPartyBase.js",
|
|
62
|
+
"./UMFAClient.js",
|
|
63
|
+
"./UMFAClientBase.js",
|
|
64
|
+
"./Utils.js",
|
|
65
|
+
"./WASMRustInterface.js",
|
|
66
|
+
"./WebAuthnClient.js",
|
|
67
|
+
"./WebAuthnClientBase.js",
|
|
68
|
+
"./ZSMClientSDK.js"
|
|
69
|
+
]
|
|
72
70
|
}
|