@passlock/client 2.0.1 → 2.0.3

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 (95) hide show
  1. package/README.md +2 -2
  2. package/README.template.md +2 -2
  3. package/dist/index.d.ts +235 -31
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +237 -36
  6. package/dist/index.js.map +1 -1
  7. package/dist/internal/index.d.ts +4 -0
  8. package/dist/internal/index.d.ts.map +1 -0
  9. package/dist/internal/index.js +4 -0
  10. package/dist/internal/index.js.map +1 -0
  11. package/dist/{shared → internal}/network.d.ts +19 -16
  12. package/dist/internal/network.d.ts.map +1 -0
  13. package/dist/{shared → internal}/network.js +41 -24
  14. package/dist/internal/network.js.map +1 -0
  15. package/dist/{shared → internal}/promise.d.ts +2 -2
  16. package/dist/internal/promise.d.ts.map +1 -0
  17. package/dist/{shared → internal}/promise.js +2 -2
  18. package/dist/internal/promise.js.map +1 -0
  19. package/dist/internal/tenancy.d.ts.map +1 -0
  20. package/dist/internal/tenancy.js.map +1 -0
  21. package/dist/{logger/index.d.ts → logger.d.ts} +19 -4
  22. package/dist/logger.d.ts.map +1 -0
  23. package/dist/{logger/index.js → logger.js} +23 -8
  24. package/dist/logger.js.map +1 -0
  25. package/dist/{shared/options.d.ts → options.d.ts} +4 -0
  26. package/dist/options.d.ts.map +1 -0
  27. package/dist/{shared/options.js.map → options.js.map} +1 -1
  28. package/dist/passkey/authentication/authentication.d.ts +145 -0
  29. package/dist/passkey/authentication/authentication.d.ts.map +1 -0
  30. package/dist/passkey/{authentication.js → authentication/authentication.js} +70 -52
  31. package/dist/passkey/authentication/authentication.js.map +1 -0
  32. package/dist/passkey/errors.d.ts +150 -15
  33. package/dist/passkey/errors.d.ts.map +1 -1
  34. package/dist/passkey/errors.js +209 -8
  35. package/dist/passkey/errors.js.map +1 -1
  36. package/dist/passkey/registration/registration.d.ts +149 -0
  37. package/dist/passkey/registration/registration.d.ts.map +1 -0
  38. package/dist/passkey/{registration.js → registration/registration.js} +46 -36
  39. package/dist/passkey/registration/registration.js.map +1 -0
  40. package/dist/passkey/shared.d.ts +10 -2
  41. package/dist/passkey/shared.d.ts.map +1 -1
  42. package/dist/passkey/signals/signals.d.ts +160 -0
  43. package/dist/passkey/signals/signals.d.ts.map +1 -0
  44. package/dist/passkey/{signals.js → signals/signals.js} +123 -84
  45. package/dist/passkey/signals/signals.js.map +1 -0
  46. package/dist/passkey/support.d.ts +15 -0
  47. package/dist/passkey/support.d.ts.map +1 -1
  48. package/dist/passkey/support.js +16 -1
  49. package/dist/passkey/support.js.map +1 -1
  50. package/dist/principal.d.ts +19 -0
  51. package/dist/principal.d.ts.map +1 -0
  52. package/dist/principal.js +2 -0
  53. package/dist/principal.js.map +1 -0
  54. package/dist/safe.d.ts +267 -0
  55. package/dist/safe.d.ts.map +1 -0
  56. package/dist/safe.js +275 -0
  57. package/dist/safe.js.map +1 -0
  58. package/package.json +22 -20
  59. package/dist/logger/index.d.ts.map +0 -1
  60. package/dist/logger/index.js.map +0 -1
  61. package/dist/passkey/authentication.d.ts +0 -118
  62. package/dist/passkey/authentication.d.ts.map +0 -1
  63. package/dist/passkey/authentication.js.map +0 -1
  64. package/dist/passkey/authentication.test.d.ts +0 -2
  65. package/dist/passkey/authentication.test.d.ts.map +0 -1
  66. package/dist/passkey/authentication.test.js +0 -157
  67. package/dist/passkey/authentication.test.js.map +0 -1
  68. package/dist/passkey/registration.d.ts +0 -136
  69. package/dist/passkey/registration.d.ts.map +0 -1
  70. package/dist/passkey/registration.js.map +0 -1
  71. package/dist/passkey/registration.test.d.ts +0 -2
  72. package/dist/passkey/registration.test.d.ts.map +0 -1
  73. package/dist/passkey/registration.test.js +0 -161
  74. package/dist/passkey/registration.test.js.map +0 -1
  75. package/dist/passkey/signals.d.ts +0 -113
  76. package/dist/passkey/signals.d.ts.map +0 -1
  77. package/dist/passkey/signals.js.map +0 -1
  78. package/dist/shared/network.d.ts.map +0 -1
  79. package/dist/shared/network.js.map +0 -1
  80. package/dist/shared/options.d.ts.map +0 -1
  81. package/dist/shared/promise.d.ts.map +0 -1
  82. package/dist/shared/promise.js.map +0 -1
  83. package/dist/shared/tenancy.d.ts.map +0 -1
  84. package/dist/shared/tenancy.js.map +0 -1
  85. package/dist/surface.test.d.ts +0 -2
  86. package/dist/surface.test.d.ts.map +0 -1
  87. package/dist/surface.test.js +0 -38
  88. package/dist/surface.test.js.map +0 -1
  89. package/dist/unsafe.d.ts +0 -41
  90. package/dist/unsafe.d.ts.map +0 -1
  91. package/dist/unsafe.js +0 -52
  92. package/dist/unsafe.js.map +0 -1
  93. /package/dist/{shared → internal}/tenancy.d.ts +0 -0
  94. /package/dist/{shared → internal}/tenancy.js +0 -0
  95. /package/dist/{shared/options.js → options.js} +0 -0
@@ -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,58 +24,58 @@ 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 options Passkey identifier/credential details and Passlock tenancy options.
32
+ * @returns A Micro effect that resolves with a {@link DeleteSuccess} or fails with {@link DeleteError}.
48
33
  */
49
- export const deletePasskey = (passkeyId, options) => Micro.gen(function* () {
50
- const { tenancyId } = options;
34
+ export const deletePasskey = (options) => Micro.gen(function* () {
51
35
  const logger = yield* Micro.service(Logger);
52
- const { endpoint } = buildEndpoint(options);
53
36
  yield* logger.logInfo("Testing for local passkey removal support");
54
- const canDelete = yield* isPasskeyDeletionSupport;
37
+ const canDelete = yield* isPasskeyDeleteSupport;
55
38
  if (!canDelete)
56
- return yield* new DeletionError({
39
+ return yield* Micro.fail(new DeleteError({
57
40
  code: "PASSKEY_DELETION_UNSUPPORTED",
58
41
  message: "Passkey deletion not supported on this device",
59
- });
42
+ }));
43
+ const credential = "rpId" in options ? options : yield* getCredentialMapping(options);
44
+ return yield* signalCredentialRemoval(credential);
45
+ });
46
+ const getCredentialMapping = (options) => Micro.gen(function* () {
47
+ const { tenancyId } = options;
48
+ const logger = yield* Micro.service(Logger);
49
+ const { endpoint } = makeEndpoint(options);
60
50
  yield* logger.logInfo("Fetching passkey credential and rp id");
61
- const url = new URL(`${tenancyId}/credential/${passkeyId}`, endpoint);
51
+ const url = new URL(`${tenancyId}/credential/${options.passkeyId}`, endpoint);
62
52
  const response = yield* Micro.promise(() => fetch(url));
63
53
  if (response.status === 404)
64
- return yield* new DeletionError({
54
+ return yield* Micro.fail(new DeleteError({
65
55
  code: "OTHER_ERROR",
66
56
  message: "Unable to find the metadata associated with this passkey",
67
- });
57
+ }));
68
58
  const credential = yield* Micro.promise(() => response.json());
69
59
  if (!isCredentialMapping(credential))
70
- return yield* new DeletionError({
60
+ return yield* Micro.fail(new DeleteError({
71
61
  code: "OTHER_ERROR",
72
62
  message: "Invalid metadata associated with this passkey",
73
- });
74
- return yield* signalCredentialRemoval(credential);
63
+ }));
64
+ return credential;
75
65
  });
66
+ export const isPruningSuccess = (payload) => {
67
+ if (typeof payload !== "object")
68
+ return false;
69
+ if (payload === null)
70
+ return false;
71
+ if (!("_tag" in payload))
72
+ return false;
73
+ if (typeof payload._tag !== "string")
74
+ return false;
75
+ return payload._tag === "PruningSuccess";
76
+ };
76
77
  /**
77
- * Given a list of passkey ids, instruct the device to remove any redundant passkeys.
78
+ * Given a list of passkey IDs, instruct the device to remove any redundant passkeys.
78
79
  *
79
80
  * Note: this will only remove redundant passkeys (based on the userId).
80
81
  *
@@ -88,76 +89,90 @@ export const deletePasskey = (passkeyId, options) => Micro.gen(function* () {
88
89
  * jdoe@gmail.com account and remove passkey2. However as passkey3 is registered to a
89
90
  * different account, the device will retain it.
90
91
  *
91
- * @param passkeyIds
92
- * @param options
93
- * @returns
92
+ * @param options Passlock tenancy/endpoint options and the passkey IDs to keep.
93
+ * @returns A Micro effect that resolves with a {@link PruningSuccess} or fails with {@link PruningError}.
94
94
  */
95
- export const syncPasskeys = (passkeyIds, options) => Micro.gen(function* () {
95
+ export const prunePasskeys = (options) => Micro.gen(function* () {
96
96
  const { tenancyId } = options;
97
97
  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;
98
+ const { endpoint } = makeEndpoint(options);
99
+ yield* logger.logInfo("Testing for local passkey pruning support");
100
+ const canSync = yield* isPasskeyPruningSupport;
101
101
  if (!canSync)
102
- return yield* new SyncError({
103
- code: "PASSKEY_SYNC_UNSUPPORTED",
102
+ return yield* Micro.fail(new PruningError({
103
+ code: "PASSKEY_PRUNING_UNSUPPORTED",
104
104
  message: "Passkey deletion not supported on this device",
105
- });
105
+ }));
106
106
  yield* logger.logInfo("Fetching passkey credentials and rp id");
107
- const encodedPasskeyIds = encodeUriComponent(passkeyIds.join(","));
107
+ const encodedPasskeyIds = encodeUriComponent(options.allowablePasskeyIds.join(","));
108
108
  const url = new URL(`${tenancyId}/credentials/${encodedPasskeyIds}`, endpoint);
109
109
  const response = yield* Micro.promise(() => fetch(url));
110
110
  if (response.status === 404)
111
- return yield* new SyncError({
111
+ return yield* Micro.fail(new PruningError({
112
112
  code: "OTHER_ERROR",
113
113
  message: "Unable to find the metadata associated with these passkeys",
114
- });
114
+ }));
115
115
  const credentials = yield* Micro.promise(() => response.json());
116
116
  if (!isCredentialMappings(credentials))
117
- return yield* new SyncError({
117
+ return yield* Micro.fail(new PruningError({
118
118
  code: "OTHER_ERROR",
119
119
  message: "Invalid metadata associated with one or more passkeys",
120
- });
120
+ }));
121
121
  return yield* signalAcceptedCredentials(credentials);
122
122
  });
123
+ export const isUpdateSuccess = (payload) => {
124
+ if (typeof payload !== "object")
125
+ return false;
126
+ if (payload === null)
127
+ return false;
128
+ if (!("_tag" in payload))
129
+ return false;
130
+ if (typeof payload._tag !== "string")
131
+ return false;
132
+ return payload._tag === "UpdateSuccess";
133
+ };
123
134
  /**
124
- * Update a passkey e.g. change the username and or display name.
135
+ * Update a passkey e.g. change the username and/or display name.
125
136
  * Note: this is purely informational, it does not change any identifiers.
126
137
  * The typical use case is when a user changes their account email, you would
127
138
  * want to change the username in your backend system and also the user's
128
139
  * device local passkey. Otherwise the passkey associated with your new-name@gmail.com
129
140
  * account would still show up in their password manager as old-name@gmail.com.
130
141
  *
131
- * @param updates
132
- * @param options
133
- * @returns
142
+ * @param options Passkey update options.
143
+ * @returns A Micro effect that resolves with a {@link UpdateSuccess} or fails with {@link UpdateError}.
134
144
  */
135
- export const updateUserDetails = (options) => Micro.gen(function* () {
136
- const { tenancyId } = options;
145
+ export const updatePasskey = (options) => Micro.gen(function* () {
137
146
  const logger = yield* Micro.service(Logger);
138
- const { endpoint } = buildEndpoint(options);
139
147
  yield* logger.logInfo("Testing for local passkey update support");
140
148
  const canUpdate = yield* isPasskeyUpdateSupport;
141
149
  if (!canUpdate)
142
- return yield* new UpdateError({
150
+ return yield* Micro.fail(new UpdateError({
143
151
  code: "PASSKEY_UPDATE_UNSUPPORTED",
144
152
  message: "Passkey update not supported on this device",
145
- });
153
+ }));
154
+ const credential = "rpId" in options ? options : yield* getUserCredentialMapping(options);
155
+ return yield* signalCurrentUserDetails(credential, options);
156
+ });
157
+ const getUserCredentialMapping = (options) => Micro.gen(function* () {
158
+ const { tenancyId } = options;
159
+ const logger = yield* Micro.service(Logger);
160
+ const { endpoint } = makeEndpoint(options);
146
161
  yield* logger.logInfo("Fetching passkey credential and rp id");
147
162
  const url = new URL(`${tenancyId}/credential/${options.passkeyId}`, endpoint);
148
163
  const response = yield* Micro.promise(() => fetch(url));
149
164
  if (response.status === 404)
150
- return yield* new UpdateError({
165
+ return yield* Micro.fail(new UpdateError({
151
166
  code: "OTHER_ERROR",
152
167
  message: "Unable to find the metadata associated with this passkey",
153
- });
168
+ }));
154
169
  const credential = yield* Micro.promise(() => response.json());
155
170
  if (!isCredentialMapping(credential))
156
- return yield* new UpdateError({
171
+ return yield* Micro.fail(new UpdateError({
157
172
  code: "OTHER_ERROR",
158
173
  message: "Invalid metadata associated with this passkey",
159
- });
160
- return yield* signalCurrentUserDetails(credential, options);
174
+ }));
175
+ return credential;
161
176
  });
162
177
  const isCredentialMapping = (payload) => {
163
178
  if (typeof payload !== "object")
@@ -197,69 +212,93 @@ const isCredentialMappings = (payload) => {
197
212
  return false;
198
213
  return true;
199
214
  };
215
+ export const isDeleteSuccess = (payload) => {
216
+ if (typeof payload !== "object")
217
+ return false;
218
+ if (payload === null)
219
+ return false;
220
+ if (!("_tag" in payload))
221
+ return false;
222
+ if (typeof payload._tag !== "string")
223
+ return false;
224
+ return payload._tag === "DeleteSuccess";
225
+ };
200
226
  /**
201
227
  * Tell the client device to remove a given credential
202
- * @param error
203
- * @returns
228
+ *
229
+ * @param credential Credential mapping or missing-passkey payload.
230
+ * @returns A Micro effect that resolves with a {@link DeleteSuccess} or fails with {@link DeleteError}.
204
231
  */
205
232
  export const signalCredentialRemoval = (credential) => Micro.gen(function* () {
206
233
  const logger = yield* Micro.service(Logger);
207
234
  yield* logger.logInfo("Testing for local passkey removal support");
208
- const canDelete = yield* isPasskeyDeletionSupport;
235
+ const canDelete = yield* isPasskeyDeleteSupport;
209
236
  if (!canDelete)
210
- return yield* new DeletionError({
237
+ return yield* Micro.fail(new DeleteError({
211
238
  code: "PASSKEY_DELETION_UNSUPPORTED",
212
239
  message: "Passkey deletion not supported on this device",
213
- });
240
+ }));
214
241
  // might not be defined in older browsers
215
242
  yield* logger.logInfo("Signalling browser to remove passkey");
216
243
  yield* pipe(Micro.tryPromise({
217
244
  try: () => PublicKeyCredential.signalUnknownCredential(credential),
218
- catch: (err) => err instanceof Error ? err : new Error("Unable to signal credential removal"),
245
+ catch: (err) => err instanceof Error
246
+ ? err
247
+ : new Error("Unable to signal credential removal"),
219
248
  }), Micro.catchAllDefect((err) => err instanceof Error
220
249
  ? logger.logWarn(err.message)
221
250
  : logger.logWarn("Unable to signal credential removal")), Micro.catchAll((err) => logger.logWarn(err.message)), Micro.forkDaemon);
222
251
  yield* logger.logInfo("Passkey removed");
223
- return true;
252
+ return { _tag: "DeleteSuccess" };
224
253
  });
254
+ /**
255
+ * Tell the client device which credentials are still accepted for a user.
256
+ *
257
+ * @param credentials Accepted credential mapping for the user.
258
+ * @returns A Micro effect that resolves with a {@link PruningSuccess} or fails with {@link PruningError}.
259
+ */
225
260
  export const signalAcceptedCredentials = (credentials) => Micro.gen(function* () {
226
261
  const logger = yield* Micro.service(Logger);
227
262
  yield* logger.logInfo("Testing for accepted credential signalling support");
228
- const canSync = yield* isPasskeySyncSupport;
263
+ const canSync = yield* isPasskeyPruningSupport;
229
264
  if (!canSync)
230
- return yield* new SyncError({
231
- code: "PASSKEY_SYNC_UNSUPPORTED",
232
- message: "Passkey sync not supported on this device",
233
- });
265
+ return yield* Micro.fail(new PruningError({
266
+ code: "PASSKEY_PRUNING_UNSUPPORTED",
267
+ message: "Passkey pruning not supported on this device",
268
+ }));
234
269
  yield* logger.logInfo("Signalling browser of accepted credentials");
235
270
  yield* pipe(Micro.tryPromise({
236
271
  try: () => PublicKeyCredential.signalAllAcceptedCredentials(credentials),
237
- catch: (err) => err instanceof Error ? err : new Error("Unable to signal accepted credentials"),
272
+ catch: (err) => err instanceof Error
273
+ ? err
274
+ : new Error("Unable to signal accepted credentials"),
238
275
  }), Micro.timeout(1000), Micro.catchAllDefect((err) => err instanceof Error
239
276
  ? logger.logWarn(err.message)
240
277
  : logger.logWarn("Unable to signal accepted credentials")), Micro.catchAll((err) => logger.logWarn(err.message)));
241
278
  yield* logger.logInfo("Accepted credentials signalled");
242
- return true;
279
+ return { _tag: "PruningSuccess" };
243
280
  });
244
281
  export const signalCurrentUserDetails = (credential, updates) => Micro.gen(function* () {
245
282
  const logger = yield* Micro.service(Logger);
246
283
  yield* logger.logInfo("Testing for local passkey update support");
247
284
  const canUpdate = yield* isPasskeyUpdateSupport;
248
285
  if (!canUpdate)
249
- return yield* new UpdateError({
286
+ return yield* Micro.fail(new UpdateError({
250
287
  code: "PASSKEY_UPDATE_UNSUPPORTED",
251
288
  message: "Passkey update not supported on this device",
252
- });
289
+ }));
253
290
  yield* logger.logInfo("Signalling browser to update passkey");
254
- const { username: name, displayName } = updates;
291
+ const { username: name, displayName = updates.username } = updates;
255
292
  const credentialUpdates = { ...credential, name, displayName };
256
293
  yield* pipe(Micro.tryPromise({
257
294
  try: () => PublicKeyCredential.signalCurrentUserDetails(credentialUpdates),
258
- catch: (err) => err instanceof Error ? err : new Error("Unable to signal credential update"),
295
+ catch: (err) => err instanceof Error
296
+ ? err
297
+ : new Error("Unable to signal credential update"),
259
298
  }), Micro.catchAllDefect((err) => err instanceof Error
260
299
  ? logger.logWarn(err.message)
261
300
  : logger.logWarn("Unable to signal credential update")), Micro.catchAll((err) => logger.logWarn(err.message)), Micro.forkDaemon);
262
301
  yield* logger.logInfo("Passkey updated");
263
- return true;
302
+ return { _tag: "UpdateSuccess" };
264
303
  });
265
304
  //# sourceMappingURL=signals.js.map
@@ -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":"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,19 @@
1
+ /**
2
+ * Key identifiers. Not to be confused with the Principal available in backend code,
3
+ * which includes much more data.
4
+ *
5
+ * @category Passkeys (core)
6
+ */
7
+ export type Principal = {
8
+ /**
9
+ * Passkey ID.
10
+ */
11
+ authenticatorId: string;
12
+ /**
13
+ * By default this will mirror the `authenticatorId` however you
14
+ * can use the REST API or @passlock/node package to assign your
15
+ * own internal userId to the passkey.
16
+ */
17
+ userId: string;
18
+ };
19
+ //# sourceMappingURL=principal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principal.d.ts","sourceRoot":"","sources":["../src/principal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;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":""}