@passlock/client 2.0.0-beta.2 → 2.0.0-beta.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 (78) 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/index.d.ts +2 -2
  18. package/dist/passkey/authentication/index.d.ts.map +1 -1
  19. package/dist/passkey/authentication/index.js +4 -4
  20. package/dist/passkey/authentication/index.js.map +1 -1
  21. package/dist/passkey/authentication/micro.d.ts +54 -7
  22. package/dist/passkey/authentication/micro.d.ts.map +1 -1
  23. package/dist/passkey/authentication/micro.it.test.d.ts +2 -0
  24. package/dist/passkey/authentication/micro.it.test.d.ts.map +1 -0
  25. package/dist/passkey/authentication/micro.it.test.js +74 -0
  26. package/dist/passkey/authentication/micro.it.test.js.map +1 -0
  27. package/dist/passkey/authentication/micro.js +98 -31
  28. package/dist/passkey/authentication/micro.js.map +1 -1
  29. package/dist/passkey/authentication/micro.test.d.ts +2 -0
  30. package/dist/passkey/authentication/micro.test.d.ts.map +1 -0
  31. package/dist/passkey/authentication/micro.test.js +157 -0
  32. package/dist/passkey/authentication/micro.test.js.map +1 -0
  33. package/dist/passkey/{shared.d.ts → errors.d.ts} +3 -3
  34. package/dist/passkey/errors.d.ts.map +1 -0
  35. package/dist/passkey/{shared.js → errors.js} +3 -3
  36. package/dist/passkey/errors.js.map +1 -0
  37. package/dist/passkey/index.d.ts +4 -6
  38. package/dist/passkey/index.d.ts.map +1 -1
  39. package/dist/passkey/index.js +4 -4
  40. package/dist/passkey/index.js.map +1 -1
  41. package/dist/passkey/registration/index.d.ts +2 -2
  42. package/dist/passkey/registration/index.d.ts.map +1 -1
  43. package/dist/passkey/registration/index.js +4 -4
  44. package/dist/passkey/registration/index.js.map +1 -1
  45. package/dist/passkey/registration/micro.d.ts +43 -8
  46. package/dist/passkey/registration/micro.d.ts.map +1 -1
  47. package/dist/passkey/registration/micro.it.test.d.ts +2 -0
  48. package/dist/passkey/registration/micro.it.test.d.ts.map +1 -0
  49. package/dist/passkey/registration/micro.it.test.js +33 -0
  50. package/dist/passkey/registration/micro.it.test.js.map +1 -0
  51. package/dist/passkey/registration/micro.js +61 -40
  52. package/dist/passkey/registration/micro.js.map +1 -1
  53. package/dist/passkey/registration/micro.test.d.ts +2 -0
  54. package/dist/passkey/registration/micro.test.d.ts.map +1 -0
  55. package/dist/passkey/registration/micro.test.js +161 -0
  56. package/dist/passkey/registration/micro.test.js.map +1 -0
  57. package/dist/passkey/signals/micro.d.ts +12 -0
  58. package/dist/passkey/signals/micro.d.ts.map +1 -0
  59. package/dist/passkey/signals/micro.js +22 -0
  60. package/dist/passkey/signals/micro.js.map +1 -0
  61. package/dist/passkey/support.d.ts.map +1 -1
  62. package/dist/passkey/support.js +1 -1
  63. package/dist/passkey/support.js.map +1 -1
  64. package/dist/passkey/types.d.ts.map +1 -1
  65. package/dist/shared.d.ts.map +1 -1
  66. package/package.json +21 -25
  67. package/dist/network.d.ts.map +0 -1
  68. package/dist/network.js.map +0 -1
  69. package/dist/passkey/shared.d.ts.map +0 -1
  70. package/dist/passkey/shared.js.map +0 -1
  71. package/dist/promise.d.ts.map +0 -1
  72. package/dist/promise.js.map +0 -1
  73. package/dist/tenancy.d.ts.map +0 -1
  74. package/dist/tenancy.js.map +0 -1
  75. /package/dist/{promise.d.ts → internal/promise.d.ts} +0 -0
  76. /package/dist/{promise.js → internal/promise.js} +0 -0
  77. /package/dist/{tenancy.d.ts → internal/tenancy.d.ts} +0 -0
  78. /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"}
@@ -1,5 +1,5 @@
1
- import { type AuthenticationError, type AuthenticationOptions, type AuthenticationSuccess } from "./micro";
2
1
  import { Logger } from "../../logger";
2
+ import { type AuthenticationError, type AuthenticationOptions, type AuthenticationSuccess } from "./micro";
3
3
  /**
4
4
  * Trigger local passkey authentication then verify the passkey in the Passlock vault.
5
5
  * Returns a code and id_token that can be exchanged/decoded in your backend.
@@ -16,6 +16,6 @@ export declare const authenticatePasskeyUnsafe: (options: AuthenticationOptions,
16
16
  * @returns
17
17
  */
18
18
  export declare const authenticatePasskey: (options: AuthenticationOptions, logger?: typeof Logger.Service) => Promise<AuthenticationSuccess | AuthenticationError>;
19
- export type { AuthenticationSuccess, AuthenticationError } from "./micro";
19
+ export type { AuthenticationError, AuthenticationOptions, AuthenticationSuccess } from "./micro";
20
20
  export { isAuthenticationSuccess } from "./micro";
21
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/passkey/authentication/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC3B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAe,MAAM,EAAE,MAAM,cAAc,CAAC;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,GACpC,SAAS,qBAAqB,EAC9B,SAAQ,OAAO,MAAM,CAAC,OAAqB,KAC1C,OAAO,CAAC,qBAAqB,CAK7B,CAAC;AAEJ;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,SAAS,qBAAqB,EAC9B,SAAQ,OAAO,MAAM,CAAC,OAAqB,KAC1C,OAAO,CAAC,qBAAqB,GAAG,mBAAmB,CAKnD,CAAC;AAEJ,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/passkey/authentication/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,MAAM,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EACL,KAAK,mBAAmB,EAExB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAE3B,MAAM,SAAS,CAAA;AAEhB;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,GACpC,SAAS,qBAAqB,EAC9B,SAAQ,OAAO,MAAM,CAAC,OAAqB,KAC1C,OAAO,CAAC,qBAAqB,CAM7B,CAAA;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,SAAS,qBAAqB,EAC9B,SAAQ,OAAO,MAAM,CAAC,OAAqB,KAC1C,OAAO,CAAC,qBAAqB,GAAG,mBAAmB,CAMnD,CAAA;AAEH,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAChG,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { Micro, pipe } from "effect";
2
- import { runToPromise, runToPromiseUnsafe } from "../../promise";
3
- import { authenticatePasskey as authenticatePasskeyM, } from "./micro";
2
+ import { runToPromise, runToPromiseUnsafe } from "../../internal/promise";
4
3
  import { EventLogger, Logger } from "../../logger";
4
+ import { AuthenticationHelper, authenticatePasskey as authenticatePasskeyM, } from "./micro";
5
5
  /**
6
6
  * Trigger local passkey authentication then verify the passkey in the Passlock vault.
7
7
  * Returns a code and id_token that can be exchanged/decoded in your backend.
@@ -9,7 +9,7 @@ import { EventLogger, Logger } from "../../logger";
9
9
  * @param options
10
10
  * @returns
11
11
  */
12
- export const authenticatePasskeyUnsafe = (options, logger = EventLogger) => pipe(authenticatePasskeyM(options), Micro.provideService(Logger, logger), runToPromiseUnsafe);
12
+ export const authenticatePasskeyUnsafe = (options, logger = EventLogger) => pipe(authenticatePasskeyM(options), Micro.provideService(Logger, logger), Micro.provideService(AuthenticationHelper, AuthenticationHelper.Default), runToPromiseUnsafe);
13
13
  /**
14
14
  * Trigger local passkey authentication then verify the passkey in the Passlock vault.
15
15
  * Returns a code and id_token that can be exchanged/decoded in your backend.
@@ -17,6 +17,6 @@ export const authenticatePasskeyUnsafe = (options, logger = EventLogger) => pipe
17
17
  * @param options
18
18
  * @returns
19
19
  */
20
- export const authenticatePasskey = (options, logger = EventLogger) => pipe(authenticatePasskeyM(options), Micro.provideService(Logger, logger), runToPromise);
20
+ export const authenticatePasskey = (options, logger = EventLogger) => pipe(authenticatePasskeyM(options), Micro.provideService(Logger, logger), Micro.provideService(AuthenticationHelper, AuthenticationHelper.Default), runToPromise);
21
21
  export { isAuthenticationSuccess } from "./micro";
22
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/passkey/authentication/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EACL,mBAAmB,IAAI,oBAAoB,GAI5C,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,OAA8B,EAC9B,SAAgC,WAAW,EACX,EAAE,CAClC,IAAI,CACF,oBAAoB,CAAC,OAAO,CAAC,EAC7B,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,kBAAkB,CACnB,CAAC;AAEJ;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,OAA8B,EAC9B,SAAgC,WAAW,EACW,EAAE,CACxD,IAAI,CACF,oBAAoB,CAAC,OAAO,CAAC,EAC7B,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,YAAY,CACb,CAAC;AAGJ,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/passkey/authentication/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAEL,oBAAoB,EAGpB,mBAAmB,IAAI,oBAAoB,GAC5C,MAAM,SAAS,CAAA;AAEhB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,OAA8B,EAC9B,SAAgC,WAAW,EACX,EAAE,CAClC,IAAI,CACF,oBAAoB,CAAC,OAAO,CAAC,EAC7B,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,KAAK,CAAC,cAAc,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,CAAC,EACxE,kBAAkB,CACnB,CAAA;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,OAA8B,EAC9B,SAAgC,WAAW,EACW,EAAE,CACxD,IAAI,CACF,oBAAoB,CAAC,OAAO,CAAC,EAC7B,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,KAAK,CAAC,cAAc,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,CAAC,EACxE,YAAY,CACb,CAAA;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA"}
@@ -1,9 +1,29 @@
1
- import { Micro } from "effect";
2
- import { type UnexpectedError } from "../../network";
3
- import { OtherPasskeyError, PasskeysUnsupportedError } from "../shared";
4
- import { type PasslockOptions } from "../../shared";
5
- import { Logger } from "../../logger";
1
+ import type { PasslockOptions } from "../../shared";
6
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;
7
27
  export interface AuthenticationOptions extends PasslockOptions {
8
28
  /**
9
29
  * Passlock userId. Essentially a shortcut to look up any
@@ -22,8 +42,21 @@ export interface AuthenticationOptions extends PasslockOptions {
22
42
  * @see {@link https://passlock.dev/passkeys/user-verification/|userVerification}
23
43
  */
24
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;
25
57
  timeout?: number | undefined;
26
58
  }
59
+ export declare const fetchOptions: (options: Omit<AuthenticationOptions, keyof PasslockOptions>) => Micro.Micro<OptionsResponse, UnexpectedError, Endpoint | Logger | TenancyId>;
27
60
  declare const AuthenticationSuccessTag: "AuthenticationSuccess";
28
61
  type AuthenticationSuccessTag = typeof AuthenticationSuccessTag;
29
62
  /**
@@ -58,7 +91,21 @@ export interface AuthenticationSuccess {
58
91
  code: string;
59
92
  }
60
93
  export declare const isAuthenticationSuccess: (payload: unknown) => payload is AuthenticationSuccess;
61
- export type AuthenticationError = PasskeysUnsupportedError | OtherPasskeyError | UnexpectedError;
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;
62
109
  /**
63
110
  * Trigger local passkey authentication then verify the passkey in the Passlock vault.
64
111
  * Returns a code and id_token that can be exchanged/decoded in your backend.
@@ -66,6 +113,6 @@ export type AuthenticationError = PasskeysUnsupportedError | OtherPasskeyError |
66
113
  * @param options
67
114
  * @returns
68
115
  */
69
- export declare const authenticatePasskey: (options: AuthenticationOptions) => Micro.Micro<AuthenticationSuccess, AuthenticationError, Logger>;
116
+ export declare const authenticatePasskey: (options: AuthenticationOptions) => Micro.Micro<AuthenticationSuccess, AuthenticationError, Logger | AuthenticationHelper>;
70
117
  export {};
71
118
  //# sourceMappingURL=micro.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"micro.d.ts","sourceRoot":"","sources":["../../../src/passkey/authentication/micro.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,EAAQ,MAAM,QAAQ,CAAC;AAGrC,OAAO,EACL,KAAK,eAAe,EAIrB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAqBjD,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC5D;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7C;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAChD,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAwBD,QAAA,MAAM,wBAAwB,EAAG,uBAAgC,CAAC;AAClE,KAAK,wBAAwB,GAAG,OAAO,wBAAwB,CAAC;AAEhE;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,EAAE;QACT,eAAe,EAAE,MAAM,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,uBAAuB,GAClC,SAAS,OAAO,KACf,OAAO,IAAI,qBASb,CAAC;AA6DF,MAAM,MAAM,mBAAmB,GAC3B,wBAAwB,GACxB,iBAAiB,GACjB,eAAe,CAAC;AAEpB;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,SAAS,qBAAqB,KAC7B,KAAK,CAAC,KAAK,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,CAgBhE,CAAC"}
1
+ {"version":3,"file":"micro.d.ts","sourceRoot":"","sources":["../../../src/passkey/authentication/micro.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=micro.it.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"micro.it.test.d.ts","sourceRoot":"","sources":["../../../src/passkey/authentication/micro.it.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ import { Context, Micro, pipe } from "effect";
2
+ import { describe, expect, it } from "vitest";
3
+ import { Endpoint } from "../../internal/network";
4
+ import { TenancyId } from "../../internal/tenancy";
5
+ import { Logger } from "../../logger";
6
+ import { fetchOptions, verifyCredential } from "./micro";
7
+ describe(fetchOptions.name, () => {
8
+ const tenancyId = "itTenancy";
9
+ const loggerTest = {
10
+ logDebug: () => Micro.void,
11
+ logError: () => Micro.void,
12
+ logInfo: () => Micro.void,
13
+ logWarn: () => Micro.void,
14
+ };
15
+ const endpoint = pipe(Micro.sync(() => process.env.PASSLOCK_ENDPOINT ?? "http://localhost:3000"), Micro.map((endpoint) => ({ endpoint })));
16
+ it("should fetch options from the int test env", async () => {
17
+ const { optionsJSON, sessionToken } = await pipe(fetchOptions({}), Micro.provideServiceEffect(Endpoint, endpoint), Micro.provideService(Logger, loggerTest), Micro.provideService(TenancyId, { tenancyId }), Micro.runPromise);
18
+ expect(sessionToken).toEqual(expect.any(String));
19
+ expect(optionsJSON.challenge).toEqual(expect.any(String));
20
+ expect(optionsJSON.userVerification).toEqual("preferred");
21
+ });
22
+ it("should respect userVerification", async () => {
23
+ const userVerification = "required";
24
+ const { optionsJSON, sessionToken } = await pipe(fetchOptions({ userVerification }), Micro.provideServiceEffect(Endpoint, endpoint), Micro.provideService(Logger, loggerTest), Micro.provideService(TenancyId, { tenancyId }), Micro.runPromise);
25
+ expect(sessionToken).toEqual(expect.any(String));
26
+ expect(optionsJSON.challenge).toEqual(expect.any(String));
27
+ expect(optionsJSON.userVerification).toEqual(userVerification);
28
+ });
29
+ });
30
+ describe(verifyCredential.name, () => {
31
+ const tenancyId = "itTenancy";
32
+ const endpoint = "http://localhost:3000";
33
+ const loggerTest = {
34
+ logDebug: () => Micro.void,
35
+ logError: () => Micro.void,
36
+ logInfo: () => Micro.void,
37
+ logWarn: () => Micro.void,
38
+ };
39
+ const ctx = pipe(Context.make(Logger, loggerTest), Context.add(TenancyId, { tenancyId }), Context.add(Endpoint, { endpoint }));
40
+ it("should return an error if the passkey doesnt exist", async () => {
41
+ const { sessionToken } = await pipe(fetchOptions({}), Micro.provideContext(ctx), Micro.runPromise);
42
+ const response = {
43
+ clientExtensionResults: {},
44
+ id: "123456",
45
+ rawId: "123456",
46
+ response: {
47
+ authenticatorData: "",
48
+ clientDataJSON: "",
49
+ signature: "",
50
+ },
51
+ type: "public-key",
52
+ };
53
+ const error = await pipe(verifyCredential(sessionToken, response, {}), Micro.flip, Micro.provideContext(ctx), Micro.runPromise);
54
+ expect(error._tag).toEqual("@error/PasskeyNotFound");
55
+ });
56
+ it("should return an error if the session token is wrong", async () => {
57
+ await pipe(fetchOptions({}), Micro.provideContext(ctx), Micro.runPromise);
58
+ const response = {
59
+ clientExtensionResults: {},
60
+ id: "123456",
61
+ rawId: "123456",
62
+ response: {
63
+ authenticatorData: "",
64
+ clientDataJSON: "",
65
+ signature: "",
66
+ },
67
+ type: "public-key",
68
+ };
69
+ const error = await pipe(verifyCredential("invalidSessionToken", response, {}), Micro.flip, Micro.provideContext(ctx), Micro.runPromise);
70
+ expect(error._tag).toEqual("@error/UnexpectedError");
71
+ expect(error.message).toEqual("Invalid challenge token");
72
+ });
73
+ });
74
+ //# sourceMappingURL=micro.it.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"micro.it.test.js","sourceRoot":"","sources":["../../../src/passkey/authentication/micro.it.test.ts"],"names":[],"mappings":"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"}