@passlock/client 2.0.0-beta.2 → 2.0.0-beta.5

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 (79) hide show
  1. package/dist/index.d.ts +3 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/{network.d.ts → internal/network.d.ts} +5 -3
  6. package/dist/internal/network.d.ts.map +1 -0
  7. package/dist/{network.js → internal/network.js} +29 -10
  8. package/dist/internal/network.js.map +1 -0
  9. package/dist/internal/promise.d.ts.map +1 -0
  10. package/dist/internal/promise.js.map +1 -0
  11. package/dist/internal/tenancy.d.ts.map +1 -0
  12. package/dist/internal/tenancy.js.map +1 -0
  13. package/dist/logger/index.d.ts +3 -1
  14. package/dist/logger/index.d.ts.map +1 -1
  15. package/dist/logger/index.js +8 -3
  16. package/dist/logger/index.js.map +1 -1
  17. package/dist/passkey/authentication/authentication.d.ts +118 -0
  18. package/dist/passkey/authentication/authentication.d.ts.map +1 -0
  19. package/dist/passkey/authentication/{micro.js → authentication.js} +98 -33
  20. package/dist/passkey/authentication/authentication.js.map +1 -0
  21. package/dist/passkey/authentication/authentication.test.d.ts +2 -0
  22. package/dist/passkey/authentication/authentication.test.d.ts.map +1 -0
  23. package/dist/passkey/authentication/authentication.test.js +157 -0
  24. package/dist/passkey/authentication/authentication.test.js.map +1 -0
  25. package/dist/passkey/authentication/index.d.ts +3 -3
  26. package/dist/passkey/authentication/index.d.ts.map +1 -1
  27. package/dist/passkey/authentication/index.js +5 -5
  28. package/dist/passkey/authentication/index.js.map +1 -1
  29. package/dist/passkey/{shared.d.ts → errors.d.ts} +5 -4
  30. package/dist/passkey/errors.d.ts.map +1 -0
  31. package/dist/passkey/{shared.js → errors.js} +4 -4
  32. package/dist/passkey/errors.js.map +1 -0
  33. package/dist/passkey/index.d.ts +5 -6
  34. package/dist/passkey/index.d.ts.map +1 -1
  35. package/dist/passkey/index.js +5 -4
  36. package/dist/passkey/index.js.map +1 -1
  37. package/dist/passkey/registration/index.d.ts +3 -3
  38. package/dist/passkey/registration/index.d.ts.map +1 -1
  39. package/dist/passkey/registration/index.js +5 -5
  40. package/dist/passkey/registration/index.js.map +1 -1
  41. package/dist/passkey/registration/{micro.d.ts → registration.d.ts} +45 -10
  42. package/dist/passkey/registration/registration.d.ts.map +1 -0
  43. package/dist/passkey/registration/{micro.js → registration.js} +63 -42
  44. package/dist/passkey/registration/registration.js.map +1 -0
  45. package/dist/passkey/registration/registration.test.d.ts +2 -0
  46. package/dist/passkey/registration/registration.test.d.ts.map +1 -0
  47. package/dist/passkey/registration/registration.test.js +161 -0
  48. package/dist/passkey/registration/registration.test.js.map +1 -0
  49. package/dist/passkey/signals/index.d.ts +9 -0
  50. package/dist/passkey/signals/index.d.ts.map +1 -0
  51. package/dist/passkey/signals/index.js +19 -0
  52. package/dist/passkey/signals/index.js.map +1 -0
  53. package/dist/passkey/signals/signals.d.ts +45 -0
  54. package/dist/passkey/signals/signals.d.ts.map +1 -0
  55. package/dist/passkey/signals/signals.js +156 -0
  56. package/dist/passkey/signals/signals.js.map +1 -0
  57. package/dist/passkey/support.d.ts.map +1 -1
  58. package/dist/passkey/support.js +1 -1
  59. package/dist/passkey/support.js.map +1 -1
  60. package/dist/passkey/types.d.ts.map +1 -1
  61. package/dist/shared.d.ts.map +1 -1
  62. package/package.json +22 -25
  63. package/dist/network.d.ts.map +0 -1
  64. package/dist/network.js.map +0 -1
  65. package/dist/passkey/authentication/micro.d.ts +0 -71
  66. package/dist/passkey/authentication/micro.d.ts.map +0 -1
  67. package/dist/passkey/authentication/micro.js.map +0 -1
  68. package/dist/passkey/registration/micro.d.ts.map +0 -1
  69. package/dist/passkey/registration/micro.js.map +0 -1
  70. package/dist/passkey/shared.d.ts.map +0 -1
  71. package/dist/passkey/shared.js.map +0 -1
  72. package/dist/promise.d.ts.map +0 -1
  73. package/dist/promise.js.map +0 -1
  74. package/dist/tenancy.d.ts.map +0 -1
  75. package/dist/tenancy.js.map +0 -1
  76. /package/dist/{promise.d.ts → internal/promise.d.ts} +0 -0
  77. /package/dist/{promise.js → internal/promise.js} +0 -0
  78. /package/dist/{tenancy.d.ts → internal/tenancy.d.ts} +0 -0
  79. /package/dist/{tenancy.js → internal/tenancy.js} +0 -0
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- export * from "./passkey/index";
2
1
  export type { PasslockOptions } from "./shared";
3
- export { UnexpectedError, isUnexpectedError } from "./network";
2
+ export { isUnexpectedError, UnexpectedError } from "./internal/network";
3
+ export * from "./logger/index";
4
+ export * from "./passkey/index";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAEhC,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACvE,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ export { isUnexpectedError, UnexpectedError } from "./internal/network";
2
+ export * from "./logger/index";
1
3
  export * from "./passkey/index";
2
- export { UnexpectedError, isUnexpectedError } from "./network";
3
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAIhC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACvE,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA"}
@@ -26,14 +26,16 @@ export declare const buildEndpoint: ({ endpoint, }: {
26
26
  * @param param0
27
27
  * @returns
28
28
  */
29
- export declare const makeRequest: <Res extends object>({ url, payload, responsePredicate, label, }: {
29
+ export declare const makeRequest: <A extends object, E = never>({ url, payload, responsePredicate, errorPredicate, label, }: {
30
30
  url: URL;
31
31
  /** Request payload */
32
32
  payload: object;
33
33
  /** Response type guard */
34
- responsePredicate: (res: unknown) => res is Res;
34
+ responsePredicate: (res: unknown) => res is A;
35
+ /** Error response type guard */
36
+ errorPredicate?: (res: unknown, status: number) => res is E;
35
37
  /** For logging/error reporting */
36
38
  label: string;
37
- }) => Micro.Micro<Res, UnexpectedError>;
39
+ }) => Micro.Micro<A, E | UnexpectedError>;
38
40
  export {};
39
41
  //# sourceMappingURL=network.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/internal/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAevC,eAAO,MAAM,iBAAiB,GAAI,KAAK,OAAO,KAAG,GAAG,IAAI,eACxB,CAAA;;;;AAEhC,qBAAa,eAAgB,SAAQ,qBAA4C;IAC/E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB,CAAC;IACA,MAAM,CAAC,iBAAiB,QAPa,OAAO,KAAG,GAAG,IAAI,eAAe,CAOzB;CAC7C;;uBAKoF,MAAM;;AAH3F;;GAEG;AACH,qBAAa,QAAS,SAAQ,aAAkE;CAAG;AAEnG,eAAO,MAAM,aAAa,GAAI,eAE3B;IACD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,KAAG,QAAQ,CAAC,MAAM,CAA8B,CAAA;AAoBjD;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,KAAK,EAAE,6DAMtD;IACD,GAAG,EAAE,GAAG,CAAA;IACR,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,0BAA0B;IAC1B,iBAAiB,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,GAAG,IAAI,CAAC,CAAA;IAC7C,gCAAgC;IAChC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAA;IAC3D,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;CACd,KAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAmElC,CAAA"}
@@ -40,10 +40,14 @@ const isErrorResponse = (payload) => {
40
40
  * @param param0
41
41
  * @returns
42
42
  */
43
- export const makeRequest = ({ url, payload, responsePredicate, label, }) => Micro.gen(function* () {
43
+ export const makeRequest = ({ url, payload, responsePredicate, errorPredicate = (res) => false, label, }) => Micro.gen(function* () {
44
+ const isUnderTest = typeof process !== "undefined" && process.env.VITEST === "true";
45
+ // when running the test in nodejs there is no browser therefore no
46
+ // origin header is set so we need to fake it
44
47
  const headers = {
45
- "Content-Type": "application/json",
46
48
  Accept: "application/json",
49
+ "Content-Type": "application/json",
50
+ ...(isUnderTest ? { Origin: "http://localhost:3000" } : {}),
47
51
  };
48
52
  const body = JSON.stringify(payload);
49
53
  const networkError = new UnexpectedError({
@@ -59,24 +63,39 @@ export const makeRequest = ({ url, payload, responsePredicate, label, }) => Micr
59
63
  url: String(url),
60
64
  });
61
65
  const fetchResponse = yield* Micro.tryPromise({
62
- try: () => fetch(url, { method: "post", headers, body }),
66
+ try: () => fetch(url, { body, headers, method: "post" }),
63
67
  catch: () => networkError,
64
68
  });
65
- if (!fetchResponse.ok) {
69
+ const contentType = fetchResponse.headers.get("Content-Type");
70
+ const isJsonResponse = contentType === "application/json";
71
+ if (!fetchResponse.ok && isJsonResponse) {
66
72
  const apiError = yield* Micro.tryPromise({
67
- try: () => fetchResponse.json(),
68
73
  catch: () => parseError,
74
+ try: () => fetchResponse.json(),
69
75
  });
70
- return isErrorResponse(apiError)
71
- ? yield* new UnexpectedError({
76
+ if (errorPredicate(apiError, fetchResponse.status)) {
77
+ return yield* Micro.fail(apiError);
78
+ }
79
+ else if (isErrorResponse(apiError)) {
80
+ return yield* new UnexpectedError({
72
81
  ...apiError,
73
82
  url: String(url),
74
- })
75
- : yield* parseError;
83
+ });
84
+ }
85
+ else {
86
+ return yield* parseError;
87
+ }
88
+ }
89
+ else if (!fetchResponse.ok) {
90
+ const message = yield* Micro.promise(() => fetchResponse.text());
91
+ return yield* new UnexpectedError({
92
+ message,
93
+ url: String(url),
94
+ });
76
95
  }
77
96
  const json = yield* Micro.tryPromise({
78
- try: () => fetchResponse.json(),
79
97
  catch: () => parseError,
98
+ try: () => fetchResponse.json(),
80
99
  });
81
100
  return responsePredicate(json) ? json : yield* invalidResponsePayload;
82
101
  });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/internal/network.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../src/internal/promise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,EAAQ,MAAM,QAAQ,CAAA;AAGtD;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAU,CAAC,EAAE,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAOhF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAU,CAAC,EAAE,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAqBlF,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise.js","sourceRoot":"","sources":["../../src/internal/promise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAQ,KAAwB,EAAkB,EAAE;IACnF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;IAEhE,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;QAC1B,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,QAAQ;KAClB,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAQ,KAAwB,EAAc,EAAE;IACrF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;IAE9C,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAA;IAEhD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,KAAK,CAAA;QAClB,CAAC;;YAAM,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;IAClD,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,YAAY,KAAK,EAAE,CAAC;YACvC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;QACzB,CAAC;;YAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IAC7C,CAAC;IAED,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAEpE,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;;QAC7D,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;AAC1C,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenancy.d.ts","sourceRoot":"","sources":["../../src/internal/tenancy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;;wBAIR,MAAM;;AAF9B,qBAAa,SAAU,SAAQ,cAG5B;CAAG"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenancy.js","sourceRoot":"","sources":["../../src/internal/tenancy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEhC,MAAM,OAAO,SAAU,SAAQ,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAGpD;CAAG"}
@@ -2,6 +2,7 @@ import { Context, Micro } from "effect";
2
2
  declare const Logger_base: Context.TagClass<Logger, "Logger", {
3
3
  readonly logDebug: (message: string) => Micro.Micro<void>;
4
4
  readonly logInfo: (message: string) => Micro.Micro<void>;
5
+ readonly logWarn: (message: string) => Micro.Micro<void>;
5
6
  readonly logError: (message: string) => Micro.Micro<void>;
6
7
  }>;
7
8
  export declare class Logger extends Logger_base {
@@ -10,7 +11,8 @@ export declare const ConsoleLogger: typeof Logger.Service;
10
11
  export declare enum LogLevel {
11
12
  DEBUG = "DEBUG",
12
13
  INFO = "INFO",
13
- ERROR = "ERROR"
14
+ ERROR = "ERROR",
15
+ WARN = "WARN"
14
16
  }
15
17
  export declare class LogEvent extends Event {
16
18
  #private;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;;uBAKjB,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;sBACvC,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;uBACrC,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;;AAL7D,qBAAa,MAAO,SAAQ,WAOzB;CAAG;AAEN,eAAO,MAAM,aAAa,EAAE,OAAO,MAAM,CAAC,OAezC,CAAC;AAEF,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,qBAAa,QAAS,SAAQ,KAAK;;IAIjC,MAAM,CAAC,IAAI,SAAsB;gBAErB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ;IAM5C,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,KAAK,IAAI,QAAQ,CAEpB;CACF;AASD,eAAO,MAAM,WAAW,EAAE,OAAO,MAAM,CAAC,OAIvC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;;uBAKhB,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;sBACvC,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;sBACtC,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;uBACrC,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;;AAN7D,qBAAa,MAAO,SAAQ,WAQzB;CAAG;AAEN,eAAO,MAAM,aAAa,EAAE,OAAO,MAAM,CAAC,OAoBzC,CAAA;AAED,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,qBAAa,QAAS,SAAQ,KAAK;;IAIjC,MAAM,CAAC,IAAI,SAAqB;gBAEpB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ;IAM5C,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,KAAK,IAAI,QAAQ,CAEpB;CACF;AASD,eAAO,MAAM,WAAW,EAAE,OAAO,MAAM,CAAC,OAKvC,CAAA"}
@@ -5,11 +5,14 @@ export const ConsoleLogger = {
5
5
  logDebug: (message, ...optionalArgs) => Micro.sync(() => {
6
6
  console.debug(message, optionalArgs);
7
7
  }),
8
+ logError: (message, ...optionalArgs) => Micro.sync(() => {
9
+ console.error(message, optionalArgs);
10
+ }),
8
11
  logInfo: (message, ...optionalArgs) => Micro.sync(() => {
9
12
  console.info(message, optionalArgs);
10
13
  }),
11
- logError: (message, ...optionalArgs) => Micro.sync(() => {
12
- console.error(message, optionalArgs);
14
+ logWarn: (message, ...optionalArgs) => Micro.sync(() => {
15
+ console.warn(message, optionalArgs);
13
16
  }),
14
17
  };
15
18
  export var LogLevel;
@@ -17,6 +20,7 @@ export var LogLevel;
17
20
  LogLevel["DEBUG"] = "DEBUG";
18
21
  LogLevel["INFO"] = "INFO";
19
22
  LogLevel["ERROR"] = "ERROR";
23
+ LogLevel["WARN"] = "WARN";
20
24
  })(LogLevel || (LogLevel = {}));
21
25
  export class LogEvent extends Event {
22
26
  #message;
@@ -41,7 +45,8 @@ const logEvent = (level) => (message) => Micro.sync(() => {
41
45
  });
42
46
  export const EventLogger = {
43
47
  logDebug: logEvent(LogLevel.DEBUG),
44
- logInfo: logEvent(LogLevel.INFO),
45
48
  logError: logEvent(LogLevel.ERROR),
49
+ logInfo: logEvent(LogLevel.INFO),
50
+ logWarn: logEvent(LogLevel.WARN),
46
51
  };
47
52
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,OAAO,MAAO,SAAQ,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAO9C;CAAG;AAEN,MAAM,CAAC,MAAM,aAAa,GAA0B;IAClD,QAAQ,EAAE,CAAC,OAAwB,EAAE,GAAG,YAA4B,EAAE,EAAE,CACtE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACvC,CAAC,CAAC;IAEJ,OAAO,EAAE,CAAC,OAAwB,EAAE,GAAG,YAA4B,EAAE,EAAE,CACrE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;QACd,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACtC,CAAC,CAAC;IAEJ,QAAQ,EAAE,CAAC,OAAwB,EAAE,GAAG,YAA4B,EAAE,EAAE,CACtE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACvC,CAAC,CAAC;CACL,CAAC;AAEF,MAAM,CAAN,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,yBAAa,CAAA;IACb,2BAAe,CAAA;AACjB,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB;AAED,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,QAAQ,CAAS;IACjB,MAAM,CAAW;IAE1B,MAAM,CAAC,IAAI,GAAG,kBAAkB,CAAC;IAEjC,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;;AAGH,MAAM,QAAQ,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC,OAAe,EAAE,EAAE,CACxD,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;IACd,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,WAAW,GAA0B;IAChD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;IAClC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;IAChC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;CACnC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEvC,MAAM,OAAO,MAAO,SAAQ,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAQ9C;CAAG;AAEN,MAAM,CAAC,MAAM,aAAa,GAA0B;IAClD,QAAQ,EAAE,CAAC,OAAwB,EAAE,GAAG,YAA4B,EAAE,EAAE,CACtE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IACtC,CAAC,CAAC;IAEJ,QAAQ,EAAE,CAAC,OAAwB,EAAE,GAAG,YAA4B,EAAE,EAAE,CACtE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IACtC,CAAC,CAAC;IAEJ,OAAO,EAAE,CAAC,OAAwB,EAAE,GAAG,YAA4B,EAAE,EAAE,CACrE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;QACd,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IACrC,CAAC,CAAC;IAEJ,OAAO,EAAE,CAAC,OAAwB,EAAE,GAAG,YAA4B,EAAE,EAAE,CACrE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;QACd,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IACrC,CAAC,CAAC;CACL,CAAA;AAED,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,yBAAa,CAAA;AACf,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAED,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,QAAQ,CAAQ;IAChB,MAAM,CAAU;IAEzB,MAAM,CAAC,IAAI,GAAG,kBAAkB,CAAA;IAEhC,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACpB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;IACrB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;;AAGH,MAAM,QAAQ,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC,OAAe,EAAE,EAAE,CACxD,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;IACd,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IACpD,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,WAAW,GAA0B;IAChD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;IAClC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;IAClC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;IAChC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;CACjC,CAAA"}
@@ -0,0 +1,118 @@
1
+ import type { PasslockOptions } from "../../shared";
2
+ import type { UserVerification } from "../types";
3
+ import * as Helper from "@simplewebauthn/browser";
4
+ import { type AuthenticationResponseJSON, type PublicKeyCredentialRequestOptionsJSON } from "@simplewebauthn/browser";
5
+ import { Context, Micro } from "effect";
6
+ import { Endpoint, type UnexpectedError } from "../../internal/network";
7
+ import { TenancyId } from "../../internal/tenancy";
8
+ import { Logger } from "../../logger";
9
+ import { OtherPasskeyError, PasskeysUnsupportedError } from "../errors";
10
+ interface OptionsResponse {
11
+ sessionToken: string;
12
+ optionsJSON: PublicKeyCredentialRequestOptionsJSON;
13
+ }
14
+ declare const AuthenticationHelper_base: Context.TagClass<AuthenticationHelper, "AuthenticationHelper", {
15
+ browserSupportsWebAuthn: typeof Helper.browserSupportsWebAuthn;
16
+ startAuthentication: typeof Helper.startAuthentication;
17
+ }>;
18
+ export declare class AuthenticationHelper extends AuthenticationHelper_base {
19
+ static Default: {
20
+ browserSupportsWebAuthn: typeof Helper.browserSupportsWebAuthn;
21
+ startAuthentication: typeof Helper.startAuthentication;
22
+ };
23
+ }
24
+ export declare const authenticationEvent: readonly ["optionsRequest", "getCredential", "verifyCredential"];
25
+ export type AuthenticationEvent = (typeof authenticationEvent)[number];
26
+ export type OnEventFn = (event: AuthenticationEvent) => void;
27
+ export interface AuthenticationOptions extends PasslockOptions {
28
+ /**
29
+ * Passlock userId. Essentially a shortcut to look up any
30
+ * registered passkeys (allowCredentials) for a given user.
31
+ */
32
+ userId?: string | undefined;
33
+ /**
34
+ * Restrict the passkey(s) the device presents to the user to a given set
35
+ *
36
+ * @see {@link https://passlock.dev/passkeys/authentication/#allowcredentials|allowCredentials}
37
+ */
38
+ allowCredentials?: Array<string> | undefined;
39
+ /**
40
+ * Whether the device should re-authenticate the user locally before registering the passkey.
41
+ *
42
+ * @see {@link https://passlock.dev/passkeys/user-verification/|userVerification}
43
+ */
44
+ userVerification?: UserVerification | undefined;
45
+ /**
46
+ * Use browser autofill.
47
+ */
48
+ autofill?: boolean;
49
+ /**
50
+ * Receive notifications about key stages in the authentication process.
51
+ * For example, you might use event notifications to toggle loading icons or
52
+ * to disable certain form fields.
53
+ * @param event
54
+ * @returns
55
+ */
56
+ onEvent?: OnEventFn;
57
+ timeout?: number | undefined;
58
+ }
59
+ export declare const fetchOptions: (options: Omit<AuthenticationOptions, keyof PasslockOptions>) => Micro.Micro<OptionsResponse, UnexpectedError, Endpoint | Logger | TenancyId>;
60
+ declare const AuthenticationSuccessTag: "AuthenticationSuccess";
61
+ type AuthenticationSuccessTag = typeof AuthenticationSuccessTag;
62
+ /**
63
+ * Represents the outcome of a successfull passkey authentication.
64
+ * Submit the code and/or id_token to your backend, then either
65
+ * exchange the code with the passlock REST API or decode and
66
+ * verify the id_token (JWT).
67
+ *
68
+ * Note: The @passlock/node library includes utilities to do this
69
+ * for you.
70
+ */
71
+ export interface AuthenticationSuccess {
72
+ _tag: AuthenticationSuccessTag;
73
+ principal: {
74
+ authenticatorId: string;
75
+ userId: string;
76
+ };
77
+ /**
78
+ * A signed JWT representing the newly registered passkey.
79
+ * Decode and verify this in your backend or use one of the @passlock/node
80
+ * helper utilities.
81
+ *
82
+ * @see {@link https://passlock.dev/principal/idtoken-verification/|id_token}
83
+ */
84
+ id_token: string;
85
+ /**
86
+ * Call the Passlock API to exchange this code for details about the newly
87
+ * registered passkey.
88
+ *
89
+ * @see {@link https://passlock.dev/principal/code-exchange//|code exchange}
90
+ */
91
+ code: string;
92
+ }
93
+ export declare const isAuthenticationSuccess: (payload: unknown) => payload is AuthenticationSuccess;
94
+ export interface PasskeyNotFound {
95
+ _tag: "@error/PasskeyNotFound";
96
+ message: string;
97
+ credentialId: string;
98
+ rpId: string;
99
+ }
100
+ export declare const isPasskeyNotFound: (payload: unknown) => payload is PasskeyNotFound;
101
+ export declare const startAuthentication: (optionsJSON: PublicKeyCredentialRequestOptionsJSON, { useBrowserAutofill, onEvent, }: {
102
+ useBrowserAutofill: boolean;
103
+ onEvent?: OnEventFn | undefined;
104
+ }) => Micro.Micro<Helper.AuthenticationResponseJSON, PasskeysUnsupportedError | OtherPasskeyError, Logger | AuthenticationHelper>;
105
+ export declare const verifyCredential: (sessionToken: string, response: AuthenticationResponseJSON, { onEvent }: {
106
+ onEvent?: OnEventFn | undefined;
107
+ }) => Micro.Micro<AuthenticationSuccess, UnexpectedError | PasskeyNotFound, Endpoint | Logger | TenancyId>;
108
+ export type AuthenticationError = PasskeysUnsupportedError | OtherPasskeyError | PasskeyNotFound | UnexpectedError;
109
+ /**
110
+ * Trigger local passkey authentication then verify the passkey in the Passlock vault.
111
+ * Returns a code and id_token that can be exchanged/decoded in your backend.
112
+ *
113
+ * @param options
114
+ * @returns
115
+ */
116
+ export declare const authenticatePasskey: (options: AuthenticationOptions) => Micro.Micro<AuthenticationSuccess, AuthenticationError, Logger | AuthenticationHelper>;
117
+ export {};
118
+ //# sourceMappingURL=authentication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../../src/passkey/authentication/authentication.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,16 @@
1
- import { WebAuthnError, startAuthentication as simpleAuthentication, browserSupportsWebAuthn, } from "@simplewebauthn/browser";
2
- import { Micro, pipe } from "effect";
3
- import { TenancyId } from "../../tenancy";
4
- import { buildEndpoint, Endpoint, makeRequest, } from "../../network";
5
- import { OtherPasskeyError, PasskeysUnsupportedError } from "../shared";
6
- import {} from "../../shared";
1
+ import * as Helper from "@simplewebauthn/browser";
2
+ import { WebAuthnError, } from "@simplewebauthn/browser";
3
+ import { Context, Micro, pipe } from "effect";
4
+ import { buildEndpoint, Endpoint, makeRequest } from "../../internal/network";
5
+ import { TenancyId } from "../../internal/tenancy";
7
6
  import { Logger } from "../../logger";
7
+ import { OtherPasskeyError, PasskeysUnsupportedError } from "../errors";
8
+ export class AuthenticationHelper extends Context.Tag("AuthenticationHelper")() {
9
+ static Default = {
10
+ browserSupportsWebAuthn: Helper.browserSupportsWebAuthn,
11
+ startAuthentication: Helper.startAuthentication,
12
+ };
13
+ }
8
14
  const isOptionsResponse = (payload) => {
9
15
  if (typeof payload !== "object")
10
16
  return false;
@@ -22,17 +28,26 @@ const isOptionsResponse = (payload) => {
22
28
  return false;
23
29
  return true;
24
30
  };
25
- const fetchOptions = ({ userId, userVerification }) => Micro.gen(function* () {
31
+ export const authenticationEvent = ["optionsRequest", "getCredential", "verifyCredential"];
32
+ export const fetchOptions = (options) => Micro.gen(function* () {
26
33
  const logger = yield* Micro.service(Logger);
27
34
  const { endpoint } = yield* Micro.service(Endpoint);
28
35
  const { tenancyId } = yield* Micro.service(TenancyId);
36
+ const { userId, userVerification, allowCredentials, timeout, onEvent } = options;
29
37
  const url = new URL(`${tenancyId}/passkey/authentication/options`, endpoint);
38
+ onEvent?.("optionsRequest");
30
39
  yield* logger.logInfo("Fetching passkey authentication options from Passlock");
40
+ const payload = {
41
+ allowCredentials,
42
+ userId,
43
+ userVerification,
44
+ timeout,
45
+ };
31
46
  return yield* makeRequest({
32
- url,
33
- payload: { userId, userVerification },
34
47
  label: "authentication options",
48
+ payload,
35
49
  responsePredicate: isOptionsResponse,
50
+ url,
36
51
  });
37
52
  });
38
53
  const AuthenticationSuccessTag = "AuthenticationSuccess";
@@ -49,44 +64,78 @@ export const isAuthenticationSuccess = (payload) => {
49
64
  return false;
50
65
  return true;
51
66
  };
52
- const verifyCredential = (sessionToken, response) => Micro.gen(function* () {
53
- const logger = yield* Micro.service(Logger);
54
- const { endpoint } = yield* Micro.service(Endpoint);
55
- const { tenancyId } = yield* Micro.service(TenancyId);
56
- const url = new URL(`${tenancyId}/passkey/authentication/verification`, endpoint);
57
- yield* logger.logInfo("Verifying passkey in Passlock vault");
58
- const authenticationResponse = yield* makeRequest({
59
- url,
60
- payload: { sessionToken, response },
61
- label: "authentication verification",
62
- responsePredicate: isAuthenticationSuccess,
63
- });
64
- yield* logger.logInfo(`Passkey with id ${authenticationResponse.principal.authenticatorId} successfully authenticated`);
65
- return authenticationResponse;
66
- });
67
- const startAuthentication = (optionsJSON) => Micro.gen(function* () {
67
+ export const isPasskeyNotFound = (payload) => {
68
+ if (typeof payload !== "object")
69
+ return false;
70
+ if (payload === null)
71
+ return false;
72
+ if (!("_tag" in payload))
73
+ return false;
74
+ if (typeof payload._tag !== "string")
75
+ return false;
76
+ if (payload._tag !== "@error/PasskeyNotFound")
77
+ return false;
78
+ if (!("message" in payload))
79
+ return false;
80
+ if (typeof payload.message !== "string")
81
+ return false;
82
+ if (!("credentialId" in payload))
83
+ return false;
84
+ if (typeof payload.credentialId !== "string")
85
+ return false;
86
+ if (!("rpId" in payload))
87
+ return false;
88
+ if (typeof payload.rpId !== "string")
89
+ return false;
90
+ return true;
91
+ };
92
+ export const startAuthentication = (optionsJSON, { useBrowserAutofill, onEvent, }) => Micro.gen(function* () {
93
+ onEvent?.("getCredential");
68
94
  const logger = yield* Micro.service(Logger);
69
95
  yield* logger.logInfo("Requesting passkey authentication on device");
70
- const isSupport = browserSupportsWebAuthn();
96
+ const helper = yield* Micro.service(AuthenticationHelper);
97
+ const isSupport = helper.browserSupportsWebAuthn();
71
98
  if (!isSupport)
72
99
  yield* new PasskeysUnsupportedError({
73
100
  message: "Device does not support passkeys",
74
101
  });
75
102
  return yield* Micro.tryPromise({
76
- try: () => simpleAuthentication({ optionsJSON }),
77
103
  catch: (error) => {
78
104
  if (error instanceof WebAuthnError) {
79
105
  return new OtherPasskeyError({
106
+ code: error.code,
80
107
  error: error.cause,
81
108
  message: error.message,
82
- code: error.code,
109
+ cause: error.cause,
83
110
  });
84
111
  }
85
112
  else {
86
113
  return new OtherPasskeyError({ error, message: "Unexpected error" });
87
114
  }
88
115
  },
116
+ try: () => helper.startAuthentication({ optionsJSON, useBrowserAutofill }),
117
+ });
118
+ });
119
+ export const verifyCredential = (sessionToken, response, { onEvent }) => Micro.gen(function* () {
120
+ const logger = yield* Micro.service(Logger);
121
+ const { endpoint } = yield* Micro.service(Endpoint);
122
+ const { tenancyId } = yield* Micro.service(TenancyId);
123
+ const url = new URL(`${tenancyId}/passkey/authentication/verification`, endpoint);
124
+ onEvent?.("verifyCredential");
125
+ yield* logger.logInfo("Verifying passkey in Passlock vault");
126
+ const payload = {
127
+ response,
128
+ sessionToken,
129
+ };
130
+ const authenticationResponse = yield* makeRequest({
131
+ errorPredicate: isPasskeyNotFound,
132
+ label: "authentication verification",
133
+ payload,
134
+ responsePredicate: isAuthenticationSuccess,
135
+ url,
89
136
  });
137
+ yield* logger.logInfo(`Passkey with id ${authenticationResponse.principal.authenticatorId} successfully authenticated`);
138
+ return authenticationResponse;
90
139
  });
91
140
  /**
92
141
  * Trigger local passkey authentication then verify the passkey in the Passlock vault.
@@ -97,11 +146,27 @@ const startAuthentication = (optionsJSON) => Micro.gen(function* () {
97
146
  */
98
147
  export const authenticatePasskey = (options) => {
99
148
  const endpoint = buildEndpoint(options);
100
- const effect = Micro.gen(function* () {
149
+ const micro = Micro.gen(function* () {
101
150
  const { sessionToken, optionsJSON } = yield* fetchOptions(options);
102
- const response = yield* startAuthentication(optionsJSON);
103
- return yield* verifyCredential(sessionToken, response);
151
+ const go = (useBrowserAutofill) => Micro.gen(function* () {
152
+ if (useBrowserAutofill)
153
+ yield* Micro.sleep(100);
154
+ const response = yield* startAuthentication(optionsJSON, {
155
+ onEvent: options.onEvent,
156
+ useBrowserAutofill,
157
+ });
158
+ options.onEvent?.("verifyCredential");
159
+ return yield* verifyCredential(sessionToken, response, {
160
+ onEvent: options.onEvent,
161
+ });
162
+ });
163
+ if (options.autofill === true) {
164
+ return yield* go(options.autofill);
165
+ }
166
+ else {
167
+ return yield* go(false);
168
+ }
104
169
  });
105
- return pipe(effect, Micro.provideService(TenancyId, options), Micro.provideService(Endpoint, endpoint));
170
+ return pipe(micro, Micro.provideService(TenancyId, options), Micro.provideService(Endpoint, endpoint));
106
171
  };
107
- //# sourceMappingURL=micro.js.map
172
+ //# sourceMappingURL=authentication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../../src/passkey/authentication/authentication.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=authentication.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.test.d.ts","sourceRoot":"","sources":["../../../src/passkey/authentication/authentication.test.ts"],"names":[],"mappings":""}