@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.
Files changed (99) hide show
  1. package/README.md +2 -2
  2. package/README.template.md +2 -2
  3. package/dist/errors.d.ts +4 -0
  4. package/dist/errors.d.ts.map +1 -0
  5. package/dist/errors.js +14 -0
  6. package/dist/errors.js.map +1 -0
  7. package/dist/index.d.ts +236 -31
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +236 -34
  10. package/dist/index.js.map +1 -1
  11. package/dist/internal/index.d.ts +4 -0
  12. package/dist/internal/index.d.ts.map +1 -0
  13. package/dist/internal/index.js +4 -0
  14. package/dist/internal/index.js.map +1 -0
  15. package/dist/{shared → internal}/network.d.ts +19 -16
  16. package/dist/internal/network.d.ts.map +1 -0
  17. package/dist/{shared → internal}/network.js +40 -25
  18. package/dist/internal/network.js.map +1 -0
  19. package/dist/{shared → internal}/promise.d.ts +2 -2
  20. package/dist/internal/promise.d.ts.map +1 -0
  21. package/dist/{shared → internal}/promise.js +2 -2
  22. package/dist/internal/promise.js.map +1 -0
  23. package/dist/internal/tenancy.d.ts.map +1 -0
  24. package/dist/internal/tenancy.js.map +1 -0
  25. package/dist/{logger/index.d.ts → logger.d.ts} +19 -4
  26. package/dist/logger.d.ts.map +1 -0
  27. package/dist/{logger/index.js → logger.js} +19 -4
  28. package/dist/logger.js.map +1 -0
  29. package/dist/{shared/options.d.ts → options.d.ts} +4 -0
  30. package/dist/options.d.ts.map +1 -0
  31. package/dist/{shared/options.js.map → options.js.map} +1 -1
  32. package/dist/passkey/authentication/authentication.d.ts +134 -0
  33. package/dist/passkey/authentication/authentication.d.ts.map +1 -0
  34. package/dist/passkey/{authentication.js → authentication/authentication.js} +68 -50
  35. package/dist/passkey/authentication/authentication.js.map +1 -0
  36. package/dist/passkey/errors.d.ts +158 -16
  37. package/dist/passkey/errors.d.ts.map +1 -1
  38. package/dist/passkey/errors.js +214 -6
  39. package/dist/passkey/errors.js.map +1 -1
  40. package/dist/passkey/registration/registration.d.ts +145 -0
  41. package/dist/passkey/registration/registration.d.ts.map +1 -0
  42. package/dist/passkey/{registration.js → registration/registration.js} +43 -36
  43. package/dist/passkey/registration/registration.js.map +1 -0
  44. package/dist/passkey/shared.d.ts +8 -2
  45. package/dist/passkey/shared.d.ts.map +1 -1
  46. package/dist/passkey/signals/signals.d.ts +103 -0
  47. package/dist/passkey/signals/signals.d.ts.map +1 -0
  48. package/dist/passkey/{signals.js → signals/signals.js} +69 -71
  49. package/dist/passkey/signals/signals.js.map +1 -0
  50. package/dist/passkey/support.d.ts +15 -0
  51. package/dist/passkey/support.d.ts.map +1 -1
  52. package/dist/passkey/support.js +16 -1
  53. package/dist/passkey/support.js.map +1 -1
  54. package/dist/principal.d.ts +16 -0
  55. package/dist/principal.d.ts.map +1 -0
  56. package/dist/principal.js +2 -0
  57. package/dist/principal.js.map +1 -0
  58. package/dist/safe.d.ts +247 -0
  59. package/dist/safe.d.ts.map +1 -0
  60. package/dist/safe.js +254 -0
  61. package/dist/safe.js.map +1 -0
  62. package/package.json +21 -19
  63. package/dist/logger/index.d.ts.map +0 -1
  64. package/dist/logger/index.js.map +0 -1
  65. package/dist/passkey/authentication.d.ts +0 -118
  66. package/dist/passkey/authentication.d.ts.map +0 -1
  67. package/dist/passkey/authentication.js.map +0 -1
  68. package/dist/passkey/authentication.test.d.ts +0 -2
  69. package/dist/passkey/authentication.test.d.ts.map +0 -1
  70. package/dist/passkey/authentication.test.js +0 -157
  71. package/dist/passkey/authentication.test.js.map +0 -1
  72. package/dist/passkey/registration.d.ts +0 -136
  73. package/dist/passkey/registration.d.ts.map +0 -1
  74. package/dist/passkey/registration.js.map +0 -1
  75. package/dist/passkey/registration.test.d.ts +0 -2
  76. package/dist/passkey/registration.test.d.ts.map +0 -1
  77. package/dist/passkey/registration.test.js +0 -161
  78. package/dist/passkey/registration.test.js.map +0 -1
  79. package/dist/passkey/signals.d.ts +0 -113
  80. package/dist/passkey/signals.d.ts.map +0 -1
  81. package/dist/passkey/signals.js.map +0 -1
  82. package/dist/shared/network.d.ts.map +0 -1
  83. package/dist/shared/network.js.map +0 -1
  84. package/dist/shared/options.d.ts.map +0 -1
  85. package/dist/shared/promise.d.ts.map +0 -1
  86. package/dist/shared/promise.js.map +0 -1
  87. package/dist/shared/tenancy.d.ts.map +0 -1
  88. package/dist/shared/tenancy.js.map +0 -1
  89. package/dist/surface.test.d.ts +0 -2
  90. package/dist/surface.test.d.ts.map +0 -1
  91. package/dist/surface.test.js +0 -38
  92. package/dist/surface.test.js.map +0 -1
  93. package/dist/unsafe.d.ts +0 -41
  94. package/dist/unsafe.d.ts.map +0 -1
  95. package/dist/unsafe.js +0 -52
  96. package/dist/unsafe.js.map +0 -1
  97. /package/dist/{shared → internal}/tenancy.d.ts +0 -0
  98. /package/dist/{shared → internal}/tenancy.js +0 -0
  99. /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 { Logger } from "../logger";
4
- import { buildEndpoint } from "../shared/network";
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 isPasskeyDeletionSupport = Micro.sync(() => {
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 syncing
14
+ * Does the current device support local passkey pruning
14
15
  */
15
- export const isPasskeySyncSupport = Micro.sync(() => {
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 } = buildEndpoint(options);
38
+ const { endpoint } = makeEndpoint(options);
53
39
  yield* logger.logInfo("Testing for local passkey removal support");
54
- const canDelete = yield* isPasskeyDeletionSupport;
40
+ const canDelete = yield* isPasskeyDeleteSupport;
55
41
  if (!canDelete)
56
- return yield* new DeletionError({
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 DeletionError({
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 DeletionError({
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 syncPasskeys = (passkeyIds, options) => Micro.gen(function* () {
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 } = buildEndpoint(options);
99
- yield* logger.logInfo("Testing for local passkey sync support");
100
- const canSync = yield* isPasskeySyncSupport;
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 SyncError({
103
- code: "PASSKEY_SYNC_UNSUPPORTED",
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 SyncError({
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 SyncError({
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 updates
132
- * @param options
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 updateUserDetails = (options) => Micro.gen(function* () {
120
+ export const updatePasskey = (options) => Micro.gen(function* () {
136
121
  const { tenancyId } = options;
137
122
  const logger = yield* Micro.service(Logger);
138
- const { endpoint } = buildEndpoint(options);
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
- * @param error
203
- * @returns
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* isPasskeyDeletionSupport;
194
+ const canDelete = yield* isPasskeyDeleteSupport;
209
195
  if (!canDelete)
210
- return yield* new DeletionError({
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 ? err : new Error("Unable to signal credential removal"),
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* isPasskeySyncSupport;
222
+ const canSync = yield* isPasskeyPruningSupport;
229
223
  if (!canSync)
230
- return yield* new SyncError({
231
- code: "PASSKEY_SYNC_UNSUPPORTED",
232
- message: "Passkey sync not supported on this device",
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 ? err : new Error("Unable to signal accepted credentials"),
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 ? err : new Error("Unable to signal credential update"),
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":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAElE;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;IACpD,OAAO,CACL,mBAAmB,EAAE,uBAAuB;QAC5C,OAAO,mBAAmB,CAAC,uBAAuB,KAAK,UAAU,CAClE,CAAA;AACH,CAAC,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;IACrD,OAAO,CACL,mBAAmB,EAAE,4BAA4B;QACjD,OAAO,mBAAmB,CAAC,4BAA4B,KAAK,UAAU,CACvE,CAAA;AACH,CAAC,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;IACpD,OAAO,CACL,mBAAmB,EAAE,wBAAwB;QAC7C,OAAO,mBAAmB,CAAC,wBAAwB,KAAK,UAAU,CACnE,CAAA;AACH,CAAC,CAAC,CAAA;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAiB,EAAE,OAAwB,EAAE,EAAE,CAC3E,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjB,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3C,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IAE1C,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAA;IAClE,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAA;IAC/C,IAAI,CAAC,SAAS;QACZ,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CACtB,IAAI,WAAW,CAAC;YACd,IAAI,EAAE,8BAA8B;YACpC,OAAO,EAAE,+CAA+C;SACzD,CAAC,CACH,CAAA;IAEH,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAA;IAC9D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,SAAS,eAAe,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAA;IACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QACzB,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CACtB,IAAI,WAAW,CAAC;YACd,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,0DAA0D;SACpE,CAAC,CACH,CAAA;IAEH,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAC9D,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;QAClC,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CACtB,IAAI,WAAW,CAAC;YACd,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,+CAA+C;SACzD,CAAC,CACH,CAAA;IAEH,OAAO,KAAK,CAAC,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAA;AACnD,CAAC,CAAC,CAAA;AAEJ;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,UAAyB,EACzB,OAAwB,EACxB,EAAE,CACF,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjB,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3C,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IAE1C,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAA;IAClE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,uBAAuB,CAAA;IAC9C,IAAI,CAAC,OAAO;QACV,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CACtB,IAAI,YAAY,CAAC;YACf,IAAI,EAAE,6BAA6B;YACnC,OAAO,EAAE,+CAA+C;SACzD,CAAC,CACH,CAAA;IAEH,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAA;IAC/D,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAClE,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,GAAG,SAAS,gBAAgB,iBAAiB,EAAE,EAC/C,QAAQ,CACT,CAAA;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QACzB,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CACtB,IAAI,YAAY,CAAC;YACf,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,4DAA4D;SACtE,CAAC,CACH,CAAA;IAEH,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAC/D,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;QACpC,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CACtB,IAAI,YAAY,CAAC;YACf,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,uDAAuD;SACjE,CAAC,CACH,CAAA;IAEH,OAAO,KAAK,CAAC,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAA;AACtD,CAAC,CAAC,CAAA;AAmBJ;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAA6B,EAAE,EAAE,CAC7D,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjB,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3C,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IAE1C,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAA;IACjE,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAA;IAC/C,IAAI,CAAC,SAAS;QACZ,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CACtB,IAAI,WAAW,CAAC;YACd,IAAI,EAAE,4BAA4B;YAClC,OAAO,EAAE,6CAA6C;SACvD,CAAC,CACH,CAAA;IAEH,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAA;IAC9D,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,GAAG,SAAS,eAAe,OAAO,CAAC,SAAS,EAAE,EAC9C,QAAQ,CACT,CAAA;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QACzB,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CACtB,IAAI,WAAW,CAAC;YACd,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,0DAA0D;SACpE,CAAC,CACH,CAAA;IAEH,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAC9D,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;QAClC,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CACtB,IAAI,WAAW,CAAC;YACd,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,+CAA+C;SACzD,CAAC,CACH,CAAA;IAEH,OAAO,KAAK,CAAC,CAAC,wBAAwB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;AAC7D,CAAC,CAAC,CAAA;AAUJ,MAAM,mBAAmB,GAAG,CAC1B,OAAgB,EACc,EAAE;IAChC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC7C,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAElC,IAAI,CAAC,CAAC,cAAc,IAAI,OAAO,CAAC;QAAE,OAAO,KAAK,CAAA;IAC9C,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAE1D,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC;QAAE,OAAO,KAAK,CAAA;IACxC,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAEpD,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC;QAAE,OAAO,KAAK,CAAA;IACtC,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAElD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAQD,MAAM,oBAAoB,GAAG,CAC3B,OAAgB,EACe,EAAE;IACjC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC7C,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAElC,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC;QAAE,OAAO,KAAK,CAAA;IACtC,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAElD,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC;QAAE,OAAO,KAAK,CAAA;IACxC,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAEpD,IAAI,CAAC,CAAC,0BAA0B,IAAI,OAAO,CAAC;QAAE,OAAO,KAAK,CAAA;IAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC;QAAE,OAAO,KAAK,CAAA;IAElE,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAQD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,UAAgD,EACL,EAAE,CAC7C,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAE3C,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAA;IAClE,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAA;IAC/C,IAAI,CAAC,SAAS;QACZ,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CACtB,IAAI,WAAW,CAAC;YACd,IAAI,EAAE,8BAA8B;YACpC,OAAO,EAAE,+CAA+C;SACzD,CAAC,CACH,CAAA;IAEH,yCAAyC;IACzC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAA;IAE7D,KAAK,CAAC,CAAC,IAAI,CACT,KAAK,CAAC,UAAU,CAAC;QACf,GAAG,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,UAAU,CAAC;QAClE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CACb,GAAG,YAAY,KAAK;YAClB,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC;KACvD,CAAC,EACF,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,EAAE,CAC3B,GAAG,YAAY,KAAK;QAClB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAC7B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAC1D,EACD,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EACpD,KAAK,CAAC,UAAU,CACjB,CAAA;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAExC,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA;AAEJ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,WAA+B,EACa,EAAE,CAC9C,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAE3C,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAA;IAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,uBAAuB,CAAA;IAC9C,IAAI,CAAC,OAAO;QACV,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CACtB,IAAI,YAAY,CAAC;YACf,IAAI,EAAE,6BAA6B;YACnC,OAAO,EAAE,8CAA8C;SACxD,CAAC,CACH,CAAA;IAEH,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAA;IAEnE,KAAK,CAAC,CAAC,IAAI,CACT,KAAK,CAAC,UAAU,CAAC;QACf,GAAG,EAAE,GAAG,EAAE,CACR,mBAAmB,CAAC,4BAA4B,CAAC,WAAW,CAAC;QAC/D,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CACb,GAAG,YAAY,KAAK;YAClB,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,IAAI,KAAK,CAAC,uCAAuC,CAAC;KACzD,CAAC,EACF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EACnB,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,EAAE,CAC3B,GAAG,YAAY,KAAK;QAClB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAC7B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAC5D,EACD,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CACrD,CAAA;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAA;IAEvD,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,UAA6B,EAC7B,OAAgD,EAChD,EAAE,CACF,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAE3C,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAA;IACjE,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAA;IAC/C,IAAI,CAAC,SAAS;QACZ,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CACtB,IAAI,WAAW,CAAC;YACd,IAAI,EAAE,4BAA4B;YAClC,OAAO,EAAE,6CAA6C;SACvD,CAAC,CACH,CAAA;IAEH,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAA;IAE7D,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAA;IAC/C,MAAM,iBAAiB,GAAG,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IAE9D,KAAK,CAAC,CAAC,IAAI,CACT,KAAK,CAAC,UAAU,CAAC;QACf,GAAG,EAAE,GAAG,EAAE,CACR,mBAAmB,CAAC,wBAAwB,CAAC,iBAAiB,CAAC;QACjE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CACb,GAAG,YAAY,KAAK;YAClB,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,IAAI,KAAK,CAAC,oCAAoC,CAAC;KACtD,CAAC,EACF,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,EAAE,CAC3B,GAAG,YAAY,KAAK;QAClB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAC7B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CACzD,EACD,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EACpD,KAAK,CAAC,UAAU,CACjB,CAAA;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAExC,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA"}
@@ -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":"AAEA,eAAO,MAAM,gBAAgB,QAAO,OAAoC,CAAA;AAExE,eAAO,MAAM,iBAAiB,QAAO,OAAO,CAAC,OAAO,CAAsC,CAAA"}
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"}
@@ -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,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAA;AAElG,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAY,EAAE,CAAC,uBAAuB,EAAE,CAAA;AAExE,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAqB,EAAE,CAAC,+BAA+B,EAAE,CAAA"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=principal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principal.js","sourceRoot":"","sources":["../src/principal.ts"],"names":[],"mappings":""}