@passlock/client 2.0.1 → 2.0.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/README.md +2 -2
- package/README.template.md +2 -2
- package/dist/errors.d.ts +4 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +14 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +236 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +236 -34
- package/dist/index.js.map +1 -1
- package/dist/internal/index.d.ts +4 -0
- package/dist/internal/index.d.ts.map +1 -0
- package/dist/internal/index.js +4 -0
- package/dist/internal/index.js.map +1 -0
- package/dist/{shared → internal}/network.d.ts +19 -16
- package/dist/internal/network.d.ts.map +1 -0
- package/dist/{shared → internal}/network.js +40 -25
- package/dist/internal/network.js.map +1 -0
- package/dist/{shared → internal}/promise.d.ts +2 -2
- package/dist/internal/promise.d.ts.map +1 -0
- package/dist/{shared → internal}/promise.js +2 -2
- package/dist/internal/promise.js.map +1 -0
- package/dist/internal/tenancy.d.ts.map +1 -0
- package/dist/internal/tenancy.js.map +1 -0
- package/dist/{logger/index.d.ts → logger.d.ts} +19 -4
- package/dist/logger.d.ts.map +1 -0
- package/dist/{logger/index.js → logger.js} +19 -4
- package/dist/logger.js.map +1 -0
- package/dist/{shared/options.d.ts → options.d.ts} +4 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/{shared/options.js.map → options.js.map} +1 -1
- package/dist/passkey/authentication/authentication.d.ts +134 -0
- package/dist/passkey/authentication/authentication.d.ts.map +1 -0
- package/dist/passkey/{authentication.js → authentication/authentication.js} +68 -50
- package/dist/passkey/authentication/authentication.js.map +1 -0
- package/dist/passkey/errors.d.ts +158 -16
- package/dist/passkey/errors.d.ts.map +1 -1
- package/dist/passkey/errors.js +214 -6
- package/dist/passkey/errors.js.map +1 -1
- package/dist/passkey/registration/registration.d.ts +145 -0
- package/dist/passkey/registration/registration.d.ts.map +1 -0
- package/dist/passkey/{registration.js → registration/registration.js} +43 -36
- package/dist/passkey/registration/registration.js.map +1 -0
- package/dist/passkey/shared.d.ts +8 -2
- package/dist/passkey/shared.d.ts.map +1 -1
- package/dist/passkey/signals/signals.d.ts +103 -0
- package/dist/passkey/signals/signals.d.ts.map +1 -0
- package/dist/passkey/{signals.js → signals/signals.js} +69 -71
- package/dist/passkey/signals/signals.js.map +1 -0
- package/dist/passkey/support.d.ts +15 -0
- package/dist/passkey/support.d.ts.map +1 -1
- package/dist/passkey/support.js +16 -1
- package/dist/passkey/support.js.map +1 -1
- package/dist/principal.d.ts +16 -0
- package/dist/principal.d.ts.map +1 -0
- package/dist/principal.js +2 -0
- package/dist/principal.js.map +1 -0
- package/dist/safe.d.ts +247 -0
- package/dist/safe.d.ts.map +1 -0
- package/dist/safe.js +254 -0
- package/dist/safe.js.map +1 -0
- package/package.json +21 -19
- package/dist/logger/index.d.ts.map +0 -1
- package/dist/logger/index.js.map +0 -1
- package/dist/passkey/authentication.d.ts +0 -118
- package/dist/passkey/authentication.d.ts.map +0 -1
- package/dist/passkey/authentication.js.map +0 -1
- package/dist/passkey/authentication.test.d.ts +0 -2
- package/dist/passkey/authentication.test.d.ts.map +0 -1
- package/dist/passkey/authentication.test.js +0 -157
- package/dist/passkey/authentication.test.js.map +0 -1
- package/dist/passkey/registration.d.ts +0 -136
- package/dist/passkey/registration.d.ts.map +0 -1
- package/dist/passkey/registration.js.map +0 -1
- package/dist/passkey/registration.test.d.ts +0 -2
- package/dist/passkey/registration.test.d.ts.map +0 -1
- package/dist/passkey/registration.test.js +0 -161
- package/dist/passkey/registration.test.js.map +0 -1
- package/dist/passkey/signals.d.ts +0 -113
- package/dist/passkey/signals.d.ts.map +0 -1
- package/dist/passkey/signals.js.map +0 -1
- package/dist/shared/network.d.ts.map +0 -1
- package/dist/shared/network.js.map +0 -1
- package/dist/shared/options.d.ts.map +0 -1
- package/dist/shared/promise.d.ts.map +0 -1
- package/dist/shared/promise.js.map +0 -1
- package/dist/shared/tenancy.d.ts.map +0 -1
- package/dist/shared/tenancy.js.map +0 -1
- package/dist/surface.test.d.ts +0 -2
- package/dist/surface.test.d.ts.map +0 -1
- package/dist/surface.test.js +0 -38
- package/dist/surface.test.js.map +0 -1
- package/dist/unsafe.d.ts +0 -41
- package/dist/unsafe.d.ts.map +0 -1
- package/dist/unsafe.js +0 -52
- package/dist/unsafe.js.map +0 -1
- /package/dist/{shared → internal}/tenancy.d.ts +0 -0
- /package/dist/{shared → internal}/tenancy.js +0 -0
- /package/dist/{shared/options.js → options.js} +0 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Micro } from "effect";
|
|
2
|
+
import { Logger } from "../../logger";
|
|
3
|
+
import type { PasslockOptions } from "../../options";
|
|
4
|
+
import { DeleteError, PruningError, UpdateError } from "../errors";
|
|
5
|
+
/**
|
|
6
|
+
* Does the current device support local passkey removal
|
|
7
|
+
*/
|
|
8
|
+
export declare const isPasskeyDeleteSupport: Micro.Micro<boolean, never, never>;
|
|
9
|
+
/**
|
|
10
|
+
* Does the current device support local passkey pruning
|
|
11
|
+
*/
|
|
12
|
+
export declare const isPasskeyPruningSupport: Micro.Micro<boolean, never, never>;
|
|
13
|
+
/**
|
|
14
|
+
* Does the current device support local passkey updates
|
|
15
|
+
*/
|
|
16
|
+
export declare const isPasskeyUpdateSupport: Micro.Micro<boolean, never, never>;
|
|
17
|
+
/**
|
|
18
|
+
* Instruct the device to remove a passkey. E.g. attempt to remove it from
|
|
19
|
+
* Apple Password Manager / iCloud.
|
|
20
|
+
*
|
|
21
|
+
* @param passkeyId Passkey identifier.
|
|
22
|
+
* @param options Passlock tenancy and endpoint options.
|
|
23
|
+
* @returns A Micro effect that resolves with `true` or fails with {@link DeleteError}.
|
|
24
|
+
*/
|
|
25
|
+
export declare const deletePasskey: (passkeyId: string, options: PasslockOptions) => Micro.Micro<boolean, DeleteError, Logger>;
|
|
26
|
+
/**
|
|
27
|
+
* Given a list of passkey ids, instruct the device to remove any redundant passkeys.
|
|
28
|
+
*
|
|
29
|
+
* Note: this will only remove redundant passkeys (based on the userId).
|
|
30
|
+
*
|
|
31
|
+
* For example:
|
|
32
|
+
*
|
|
33
|
+
* The user has two passkeys registered against the jdoe@gmail.com account: passkey1
|
|
34
|
+
* and passkey2. The user has another passkey (passkey3) registered against the
|
|
35
|
+
* jdoe@work.com account.
|
|
36
|
+
*
|
|
37
|
+
* If you pass in the id for passkey1, the device will recognise it's assigned to the
|
|
38
|
+
* jdoe@gmail.com account and remove passkey2. However as passkey3 is registered to a
|
|
39
|
+
* different account, the device will retain it.
|
|
40
|
+
*
|
|
41
|
+
* @param passkeyIds Passkey identifiers to keep.
|
|
42
|
+
* @param options Passlock tenancy and endpoint options.
|
|
43
|
+
* @returns A Micro effect that resolves with `true` or fails with {@link PruningError}.
|
|
44
|
+
*/
|
|
45
|
+
export declare const prunePasskeys: (passkeyIds: Array<string>, options: PasslockOptions) => Micro.Micro<boolean, PruningError, Logger>;
|
|
46
|
+
/**
|
|
47
|
+
* @category Passkeys (core)
|
|
48
|
+
*/
|
|
49
|
+
export interface UpdatePasskeyOptions extends PasslockOptions {
|
|
50
|
+
passkeyId: string;
|
|
51
|
+
/**
|
|
52
|
+
* New username
|
|
53
|
+
*/
|
|
54
|
+
username: string;
|
|
55
|
+
/**
|
|
56
|
+
* New display name
|
|
57
|
+
*/
|
|
58
|
+
displayName: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Update a passkey e.g. change the username and or display name.
|
|
62
|
+
* Note: this is purely informational, it does not change any identifiers.
|
|
63
|
+
* The typical use case is when a user changes their account email, you would
|
|
64
|
+
* want to change the username in your backend system and also the user's
|
|
65
|
+
* device local passkey. Otherwise the passkey associated with your new-name@gmail.com
|
|
66
|
+
* account would still show up in their password manager as old-name@gmail.com.
|
|
67
|
+
*
|
|
68
|
+
* @param options Passkey update options.
|
|
69
|
+
* @returns A Micro effect that resolves with `true` or fails with {@link UpdateError}.
|
|
70
|
+
*/
|
|
71
|
+
export declare const updatePasskey: (options: UpdatePasskeyOptions) => Micro.Micro<boolean, UpdateError, Logger>;
|
|
72
|
+
export type CredentialMapping = {
|
|
73
|
+
credentialId: string;
|
|
74
|
+
userId: string;
|
|
75
|
+
rpId: string;
|
|
76
|
+
};
|
|
77
|
+
export type CredentialMappings = {
|
|
78
|
+
rpId: string;
|
|
79
|
+
userId: string;
|
|
80
|
+
allAcceptedCredentialIds: string[];
|
|
81
|
+
};
|
|
82
|
+
type IPasskeyNotFound = {
|
|
83
|
+
message: string;
|
|
84
|
+
credentialId: string;
|
|
85
|
+
rpId: string;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Tell the client device to remove a given credential
|
|
89
|
+
*
|
|
90
|
+
* @param credential Credential mapping or missing-passkey payload.
|
|
91
|
+
* @returns A Micro effect that resolves with `true` or fails with {@link DeleteError}.
|
|
92
|
+
*/
|
|
93
|
+
export declare const signalCredentialRemoval: (credential: CredentialMapping | IPasskeyNotFound) => Micro.Micro<boolean, DeleteError, Logger>;
|
|
94
|
+
/**
|
|
95
|
+
* Tell the client device which credentials are still accepted for a user.
|
|
96
|
+
*
|
|
97
|
+
* @param credentials Accepted credential mapping for the user.
|
|
98
|
+
* @returns A Micro effect that resolves with `true` or fails with {@link PruningError}.
|
|
99
|
+
*/
|
|
100
|
+
export declare const signalAcceptedCredentials: (credentials: CredentialMappings) => Micro.Micro<boolean, PruningError, Logger>;
|
|
101
|
+
export declare const signalCurrentUserDetails: (credential: CredentialMapping, updates: Omit<UpdatePasskeyOptions, "passkeyId">) => Micro.Micro<boolean, UpdateError, Logger>;
|
|
102
|
+
export {};
|
|
103
|
+
//# sourceMappingURL=signals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../../src/passkey/signals/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAQ,MAAM,QAAQ,CAAA;AAGpC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAElE;;GAEG;AACH,eAAO,MAAM,sBAAsB,oCAKjC,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,oCAKlC,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,oCAKjC,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAI,WAAW,MAAM,EAAE,SAAS,eAAe,8CAqCrE,CAAA;AAEJ;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,GACxB,YAAY,KAAK,CAAC,MAAM,CAAC,EACzB,SAAS,eAAe,+CA0CtB,CAAA;AAEJ;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,SAAS,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,oBAAoB,8CAwCvD,CAAA;AAIJ,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAoBD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,wBAAwB,EAAE,MAAM,EAAE,CAAA;CACnC,CAAA;AAoBD,KAAK,gBAAgB,GAAG;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAClC,YAAY,iBAAiB,GAAG,gBAAgB,KAC/C,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAqCvC,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GACpC,aAAa,kBAAkB,KAC9B,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAqCxC,CAAA;AAEJ,eAAO,MAAM,wBAAwB,GACnC,YAAY,iBAAiB,EAC7B,SAAS,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,8CAyC9C,CAAA"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { Micro, pipe } from "effect";
|
|
2
2
|
import { encodeUriComponent } from "effect/Encoding";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { makeEndpoint } from "../../internal";
|
|
4
|
+
import { Logger } from "../../logger";
|
|
5
|
+
import { DeleteError, PruningError, UpdateError } from "../errors";
|
|
5
6
|
/**
|
|
6
7
|
* Does the current device support local passkey removal
|
|
7
8
|
*/
|
|
8
|
-
export const
|
|
9
|
+
export const isPasskeyDeleteSupport = Micro.sync(() => {
|
|
9
10
|
return (PublicKeyCredential?.signalUnknownCredential &&
|
|
10
11
|
typeof PublicKeyCredential.signalUnknownCredential === "function");
|
|
11
12
|
});
|
|
12
13
|
/**
|
|
13
|
-
* Does the current device support local passkey
|
|
14
|
+
* Does the current device support local passkey pruning
|
|
14
15
|
*/
|
|
15
|
-
export const
|
|
16
|
+
export const isPasskeyPruningSupport = Micro.sync(() => {
|
|
16
17
|
return (PublicKeyCredential?.signalAllAcceptedCredentials &&
|
|
17
18
|
typeof PublicKeyCredential.signalAllAcceptedCredentials === "function");
|
|
18
19
|
});
|
|
@@ -23,54 +24,39 @@ export const isPasskeyUpdateSupport = Micro.sync(() => {
|
|
|
23
24
|
return (PublicKeyCredential?.signalCurrentUserDetails &&
|
|
24
25
|
typeof PublicKeyCredential.signalCurrentUserDetails === "function");
|
|
25
26
|
});
|
|
26
|
-
/* Deletion error */
|
|
27
|
-
export const isDeletionError = (err) => err instanceof DeletionError;
|
|
28
|
-
export class DeletionError extends Micro.TaggedError("@error/DeletionError") {
|
|
29
|
-
static isDeletionError = isDeletionError;
|
|
30
|
-
}
|
|
31
|
-
/* Sync error */
|
|
32
|
-
export const isSyncError = (err) => err instanceof SyncError;
|
|
33
|
-
export class SyncError extends Micro.TaggedError("@error/SyncError") {
|
|
34
|
-
static isSyncError = isSyncError;
|
|
35
|
-
}
|
|
36
|
-
/* Update error */
|
|
37
|
-
export const isUpdateError = (err) => err instanceof UpdateError;
|
|
38
|
-
export class UpdateError extends Micro.TaggedError("@error/UpdateError") {
|
|
39
|
-
static isUpdateError = isUpdateError;
|
|
40
|
-
}
|
|
41
27
|
/**
|
|
42
28
|
* Instruct the device to remove a passkey. E.g. attempt to remove it from
|
|
43
29
|
* Apple Password Manager / iCloud.
|
|
44
30
|
*
|
|
45
|
-
* @param passkeyId
|
|
46
|
-
* @param options
|
|
47
|
-
* @returns
|
|
31
|
+
* @param passkeyId Passkey identifier.
|
|
32
|
+
* @param options Passlock tenancy and endpoint options.
|
|
33
|
+
* @returns A Micro effect that resolves with `true` or fails with {@link DeleteError}.
|
|
48
34
|
*/
|
|
49
35
|
export const deletePasskey = (passkeyId, options) => Micro.gen(function* () {
|
|
50
36
|
const { tenancyId } = options;
|
|
51
37
|
const logger = yield* Micro.service(Logger);
|
|
52
|
-
const { endpoint } =
|
|
38
|
+
const { endpoint } = makeEndpoint(options);
|
|
53
39
|
yield* logger.logInfo("Testing for local passkey removal support");
|
|
54
|
-
const canDelete = yield*
|
|
40
|
+
const canDelete = yield* isPasskeyDeleteSupport;
|
|
55
41
|
if (!canDelete)
|
|
56
|
-
return yield* new
|
|
42
|
+
return yield* Micro.fail(new DeleteError({
|
|
57
43
|
code: "PASSKEY_DELETION_UNSUPPORTED",
|
|
58
44
|
message: "Passkey deletion not supported on this device",
|
|
59
|
-
});
|
|
45
|
+
}));
|
|
60
46
|
yield* logger.logInfo("Fetching passkey credential and rp id");
|
|
61
47
|
const url = new URL(`${tenancyId}/credential/${passkeyId}`, endpoint);
|
|
62
48
|
const response = yield* Micro.promise(() => fetch(url));
|
|
63
49
|
if (response.status === 404)
|
|
64
|
-
return yield* new
|
|
50
|
+
return yield* Micro.fail(new DeleteError({
|
|
65
51
|
code: "OTHER_ERROR",
|
|
66
52
|
message: "Unable to find the metadata associated with this passkey",
|
|
67
|
-
});
|
|
53
|
+
}));
|
|
68
54
|
const credential = yield* Micro.promise(() => response.json());
|
|
69
55
|
if (!isCredentialMapping(credential))
|
|
70
|
-
return yield* new
|
|
56
|
+
return yield* Micro.fail(new DeleteError({
|
|
71
57
|
code: "OTHER_ERROR",
|
|
72
58
|
message: "Invalid metadata associated with this passkey",
|
|
73
|
-
});
|
|
59
|
+
}));
|
|
74
60
|
return yield* signalCredentialRemoval(credential);
|
|
75
61
|
});
|
|
76
62
|
/**
|
|
@@ -88,36 +74,36 @@ export const deletePasskey = (passkeyId, options) => Micro.gen(function* () {
|
|
|
88
74
|
* jdoe@gmail.com account and remove passkey2. However as passkey3 is registered to a
|
|
89
75
|
* different account, the device will retain it.
|
|
90
76
|
*
|
|
91
|
-
* @param passkeyIds
|
|
92
|
-
* @param options
|
|
93
|
-
* @returns
|
|
77
|
+
* @param passkeyIds Passkey identifiers to keep.
|
|
78
|
+
* @param options Passlock tenancy and endpoint options.
|
|
79
|
+
* @returns A Micro effect that resolves with `true` or fails with {@link PruningError}.
|
|
94
80
|
*/
|
|
95
|
-
export const
|
|
81
|
+
export const prunePasskeys = (passkeyIds, options) => Micro.gen(function* () {
|
|
96
82
|
const { tenancyId } = options;
|
|
97
83
|
const logger = yield* Micro.service(Logger);
|
|
98
|
-
const { endpoint } =
|
|
99
|
-
yield* logger.logInfo("Testing for local passkey
|
|
100
|
-
const canSync = yield*
|
|
84
|
+
const { endpoint } = makeEndpoint(options);
|
|
85
|
+
yield* logger.logInfo("Testing for local passkey pruning support");
|
|
86
|
+
const canSync = yield* isPasskeyPruningSupport;
|
|
101
87
|
if (!canSync)
|
|
102
|
-
return yield* new
|
|
103
|
-
code: "
|
|
88
|
+
return yield* Micro.fail(new PruningError({
|
|
89
|
+
code: "PASSKEY_PRUNING_UNSUPPORTED",
|
|
104
90
|
message: "Passkey deletion not supported on this device",
|
|
105
|
-
});
|
|
91
|
+
}));
|
|
106
92
|
yield* logger.logInfo("Fetching passkey credentials and rp id");
|
|
107
93
|
const encodedPasskeyIds = encodeUriComponent(passkeyIds.join(","));
|
|
108
94
|
const url = new URL(`${tenancyId}/credentials/${encodedPasskeyIds}`, endpoint);
|
|
109
95
|
const response = yield* Micro.promise(() => fetch(url));
|
|
110
96
|
if (response.status === 404)
|
|
111
|
-
return yield* new
|
|
97
|
+
return yield* Micro.fail(new PruningError({
|
|
112
98
|
code: "OTHER_ERROR",
|
|
113
99
|
message: "Unable to find the metadata associated with these passkeys",
|
|
114
|
-
});
|
|
100
|
+
}));
|
|
115
101
|
const credentials = yield* Micro.promise(() => response.json());
|
|
116
102
|
if (!isCredentialMappings(credentials))
|
|
117
|
-
return yield* new
|
|
103
|
+
return yield* Micro.fail(new PruningError({
|
|
118
104
|
code: "OTHER_ERROR",
|
|
119
105
|
message: "Invalid metadata associated with one or more passkeys",
|
|
120
|
-
});
|
|
106
|
+
}));
|
|
121
107
|
return yield* signalAcceptedCredentials(credentials);
|
|
122
108
|
});
|
|
123
109
|
/**
|
|
@@ -128,35 +114,34 @@ export const syncPasskeys = (passkeyIds, options) => Micro.gen(function* () {
|
|
|
128
114
|
* device local passkey. Otherwise the passkey associated with your new-name@gmail.com
|
|
129
115
|
* account would still show up in their password manager as old-name@gmail.com.
|
|
130
116
|
*
|
|
131
|
-
* @param
|
|
132
|
-
* @
|
|
133
|
-
* @returns
|
|
117
|
+
* @param options Passkey update options.
|
|
118
|
+
* @returns A Micro effect that resolves with `true` or fails with {@link UpdateError}.
|
|
134
119
|
*/
|
|
135
|
-
export const
|
|
120
|
+
export const updatePasskey = (options) => Micro.gen(function* () {
|
|
136
121
|
const { tenancyId } = options;
|
|
137
122
|
const logger = yield* Micro.service(Logger);
|
|
138
|
-
const { endpoint } =
|
|
123
|
+
const { endpoint } = makeEndpoint(options);
|
|
139
124
|
yield* logger.logInfo("Testing for local passkey update support");
|
|
140
125
|
const canUpdate = yield* isPasskeyUpdateSupport;
|
|
141
126
|
if (!canUpdate)
|
|
142
|
-
return yield* new UpdateError({
|
|
127
|
+
return yield* Micro.fail(new UpdateError({
|
|
143
128
|
code: "PASSKEY_UPDATE_UNSUPPORTED",
|
|
144
129
|
message: "Passkey update not supported on this device",
|
|
145
|
-
});
|
|
130
|
+
}));
|
|
146
131
|
yield* logger.logInfo("Fetching passkey credential and rp id");
|
|
147
132
|
const url = new URL(`${tenancyId}/credential/${options.passkeyId}`, endpoint);
|
|
148
133
|
const response = yield* Micro.promise(() => fetch(url));
|
|
149
134
|
if (response.status === 404)
|
|
150
|
-
return yield* new UpdateError({
|
|
135
|
+
return yield* Micro.fail(new UpdateError({
|
|
151
136
|
code: "OTHER_ERROR",
|
|
152
137
|
message: "Unable to find the metadata associated with this passkey",
|
|
153
|
-
});
|
|
138
|
+
}));
|
|
154
139
|
const credential = yield* Micro.promise(() => response.json());
|
|
155
140
|
if (!isCredentialMapping(credential))
|
|
156
|
-
return yield* new UpdateError({
|
|
141
|
+
return yield* Micro.fail(new UpdateError({
|
|
157
142
|
code: "OTHER_ERROR",
|
|
158
143
|
message: "Invalid metadata associated with this passkey",
|
|
159
|
-
});
|
|
144
|
+
}));
|
|
160
145
|
return yield* signalCurrentUserDetails(credential, options);
|
|
161
146
|
});
|
|
162
147
|
const isCredentialMapping = (payload) => {
|
|
@@ -199,42 +184,53 @@ const isCredentialMappings = (payload) => {
|
|
|
199
184
|
};
|
|
200
185
|
/**
|
|
201
186
|
* Tell the client device to remove a given credential
|
|
202
|
-
*
|
|
203
|
-
* @
|
|
187
|
+
*
|
|
188
|
+
* @param credential Credential mapping or missing-passkey payload.
|
|
189
|
+
* @returns A Micro effect that resolves with `true` or fails with {@link DeleteError}.
|
|
204
190
|
*/
|
|
205
191
|
export const signalCredentialRemoval = (credential) => Micro.gen(function* () {
|
|
206
192
|
const logger = yield* Micro.service(Logger);
|
|
207
193
|
yield* logger.logInfo("Testing for local passkey removal support");
|
|
208
|
-
const canDelete = yield*
|
|
194
|
+
const canDelete = yield* isPasskeyDeleteSupport;
|
|
209
195
|
if (!canDelete)
|
|
210
|
-
return yield* new
|
|
196
|
+
return yield* Micro.fail(new DeleteError({
|
|
211
197
|
code: "PASSKEY_DELETION_UNSUPPORTED",
|
|
212
198
|
message: "Passkey deletion not supported on this device",
|
|
213
|
-
});
|
|
199
|
+
}));
|
|
214
200
|
// might not be defined in older browsers
|
|
215
201
|
yield* logger.logInfo("Signalling browser to remove passkey");
|
|
216
202
|
yield* pipe(Micro.tryPromise({
|
|
217
203
|
try: () => PublicKeyCredential.signalUnknownCredential(credential),
|
|
218
|
-
catch: (err) => err instanceof Error
|
|
204
|
+
catch: (err) => err instanceof Error
|
|
205
|
+
? err
|
|
206
|
+
: new Error("Unable to signal credential removal"),
|
|
219
207
|
}), Micro.catchAllDefect((err) => err instanceof Error
|
|
220
208
|
? logger.logWarn(err.message)
|
|
221
209
|
: logger.logWarn("Unable to signal credential removal")), Micro.catchAll((err) => logger.logWarn(err.message)), Micro.forkDaemon);
|
|
222
210
|
yield* logger.logInfo("Passkey removed");
|
|
223
211
|
return true;
|
|
224
212
|
});
|
|
213
|
+
/**
|
|
214
|
+
* Tell the client device which credentials are still accepted for a user.
|
|
215
|
+
*
|
|
216
|
+
* @param credentials Accepted credential mapping for the user.
|
|
217
|
+
* @returns A Micro effect that resolves with `true` or fails with {@link PruningError}.
|
|
218
|
+
*/
|
|
225
219
|
export const signalAcceptedCredentials = (credentials) => Micro.gen(function* () {
|
|
226
220
|
const logger = yield* Micro.service(Logger);
|
|
227
221
|
yield* logger.logInfo("Testing for accepted credential signalling support");
|
|
228
|
-
const canSync = yield*
|
|
222
|
+
const canSync = yield* isPasskeyPruningSupport;
|
|
229
223
|
if (!canSync)
|
|
230
|
-
return yield* new
|
|
231
|
-
code: "
|
|
232
|
-
message: "Passkey
|
|
233
|
-
});
|
|
224
|
+
return yield* Micro.fail(new PruningError({
|
|
225
|
+
code: "PASSKEY_PRUNING_UNSUPPORTED",
|
|
226
|
+
message: "Passkey pruning not supported on this device",
|
|
227
|
+
}));
|
|
234
228
|
yield* logger.logInfo("Signalling browser of accepted credentials");
|
|
235
229
|
yield* pipe(Micro.tryPromise({
|
|
236
230
|
try: () => PublicKeyCredential.signalAllAcceptedCredentials(credentials),
|
|
237
|
-
catch: (err) => err instanceof Error
|
|
231
|
+
catch: (err) => err instanceof Error
|
|
232
|
+
? err
|
|
233
|
+
: new Error("Unable to signal accepted credentials"),
|
|
238
234
|
}), Micro.timeout(1000), Micro.catchAllDefect((err) => err instanceof Error
|
|
239
235
|
? logger.logWarn(err.message)
|
|
240
236
|
: logger.logWarn("Unable to signal accepted credentials")), Micro.catchAll((err) => logger.logWarn(err.message)));
|
|
@@ -246,16 +242,18 @@ export const signalCurrentUserDetails = (credential, updates) => Micro.gen(funct
|
|
|
246
242
|
yield* logger.logInfo("Testing for local passkey update support");
|
|
247
243
|
const canUpdate = yield* isPasskeyUpdateSupport;
|
|
248
244
|
if (!canUpdate)
|
|
249
|
-
return yield* new UpdateError({
|
|
245
|
+
return yield* Micro.fail(new UpdateError({
|
|
250
246
|
code: "PASSKEY_UPDATE_UNSUPPORTED",
|
|
251
247
|
message: "Passkey update not supported on this device",
|
|
252
|
-
});
|
|
248
|
+
}));
|
|
253
249
|
yield* logger.logInfo("Signalling browser to update passkey");
|
|
254
250
|
const { username: name, displayName } = updates;
|
|
255
251
|
const credentialUpdates = { ...credential, name, displayName };
|
|
256
252
|
yield* pipe(Micro.tryPromise({
|
|
257
253
|
try: () => PublicKeyCredential.signalCurrentUserDetails(credentialUpdates),
|
|
258
|
-
catch: (err) => err instanceof Error
|
|
254
|
+
catch: (err) => err instanceof Error
|
|
255
|
+
? err
|
|
256
|
+
: new Error("Unable to signal credential update"),
|
|
259
257
|
}), Micro.catchAllDefect((err) => err instanceof Error
|
|
260
258
|
? logger.logWarn(err.message)
|
|
261
259
|
: logger.logWarn("Unable to signal credential update")), Micro.catchAll((err) => logger.logWarn(err.message)), Micro.forkDaemon);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signals.js","sourceRoot":"","sources":["../../../src/passkey/signals/signals.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test for passkey support on the device
|
|
3
|
+
*
|
|
4
|
+
* @returns `true` if the current browser supports passkeys.
|
|
5
|
+
*
|
|
6
|
+
* @category Passkeys (other)
|
|
7
|
+
*/
|
|
1
8
|
export declare const isPasskeySupport: () => boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Test for passkey [autofill](https://passlock.dev/passkeys/autofill/) support on the device.
|
|
11
|
+
*
|
|
12
|
+
* @returns A promise that resolves to `true` if passkey autofill is supported.
|
|
13
|
+
*
|
|
14
|
+
* @category Passkeys (other)
|
|
15
|
+
*/
|
|
2
16
|
export declare const isAutofillSupport: () => Promise<boolean>;
|
|
17
|
+
export { isPasskeyDeleteSupport, isPasskeyPruningSupport as isPasskeySyncSupport, isPasskeyUpdateSupport, } from "./signals/signals";
|
|
3
18
|
//# sourceMappingURL=support.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../../src/passkey/support.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../../src/passkey/support.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,QAAO,OAAoC,CAAA;AAExE;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,QAAO,OAAO,CAAC,OAAO,CACjB,CAAA;AAEnC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,IAAI,oBAAoB,EAC/C,sBAAsB,GACvB,MAAM,mBAAmB,CAAA"}
|
package/dist/passkey/support.js
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
|
-
import { browserSupportsWebAuthn, browserSupportsWebAuthnAutofill } from "@simplewebauthn/browser";
|
|
1
|
+
import { browserSupportsWebAuthn, browserSupportsWebAuthnAutofill, } from "@simplewebauthn/browser";
|
|
2
|
+
/**
|
|
3
|
+
* Test for passkey support on the device
|
|
4
|
+
*
|
|
5
|
+
* @returns `true` if the current browser supports passkeys.
|
|
6
|
+
*
|
|
7
|
+
* @category Passkeys (other)
|
|
8
|
+
*/
|
|
2
9
|
export const isPasskeySupport = () => browserSupportsWebAuthn();
|
|
10
|
+
/**
|
|
11
|
+
* Test for passkey [autofill](https://passlock.dev/passkeys/autofill/) support on the device.
|
|
12
|
+
*
|
|
13
|
+
* @returns A promise that resolves to `true` if passkey autofill is supported.
|
|
14
|
+
*
|
|
15
|
+
* @category Passkeys (other)
|
|
16
|
+
*/
|
|
3
17
|
export const isAutofillSupport = () => browserSupportsWebAuthnAutofill();
|
|
18
|
+
export { isPasskeyDeleteSupport, isPasskeyPruningSupport as isPasskeySyncSupport, isPasskeyUpdateSupport, } from "./signals/signals";
|
|
4
19
|
//# sourceMappingURL=support.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"support.js","sourceRoot":"","sources":["../../src/passkey/support.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"support.js","sourceRoot":"","sources":["../../src/passkey/support.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,+BAA+B,GAChC,MAAM,yBAAyB,CAAA;AAEhC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAY,EAAE,CAAC,uBAAuB,EAAE,CAAA;AAExE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAqB,EAAE,CACtD,+BAA+B,EAAE,CAAA;AAEnC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,IAAI,oBAAoB,EAC/C,sBAAsB,GACvB,MAAM,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @category Passkeys (core)
|
|
3
|
+
*/
|
|
4
|
+
export type Principal = {
|
|
5
|
+
/**
|
|
6
|
+
* Passkey ID.
|
|
7
|
+
*/
|
|
8
|
+
authenticatorId: string;
|
|
9
|
+
/**
|
|
10
|
+
* By default this will mirror the `authenticatorId` however you
|
|
11
|
+
* can use the REST API or @passlock/node package to assign your
|
|
12
|
+
* own internal userId to the passkey.
|
|
13
|
+
*/
|
|
14
|
+
userId: string;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=principal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"principal.d.ts","sourceRoot":"","sources":["../src/principal.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAA;IAEvB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAA;CACf,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"principal.js","sourceRoot":"","sources":["../src/principal.ts"],"names":[],"mappings":""}
|