@passlock/client 0.9.0

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 (147) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +42 -0
  3. package/dist/authentication/authenticate.d.ts +22 -0
  4. package/dist/authentication/authenticate.d.ts.map +1 -0
  5. package/dist/authentication/authenticate.fixture.d.ts +36 -0
  6. package/dist/authentication/authenticate.fixture.d.ts.map +1 -0
  7. package/dist/authentication/authenticate.fixture.js +52 -0
  8. package/dist/authentication/authenticate.fixture.js.map +1 -0
  9. package/dist/authentication/authenticate.js +69 -0
  10. package/dist/authentication/authenticate.js.map +1 -0
  11. package/dist/authentication/authenticate.test.d.ts +2 -0
  12. package/dist/authentication/authenticate.test.d.ts.map +1 -0
  13. package/dist/authentication/authenticate.test.js +111 -0
  14. package/dist/authentication/authenticate.test.js.map +1 -0
  15. package/dist/capabilities/capabilities.d.ts +18 -0
  16. package/dist/capabilities/capabilities.d.ts.map +1 -0
  17. package/dist/capabilities/capabilities.js +35 -0
  18. package/dist/capabilities/capabilities.js.map +1 -0
  19. package/dist/config.d.ts +22 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +20 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/connection/connection.d.ts +9 -0
  24. package/dist/connection/connection.d.ts.map +1 -0
  25. package/dist/connection/connection.fixture.d.ts +12 -0
  26. package/dist/connection/connection.fixture.d.ts.map +1 -0
  27. package/dist/connection/connection.fixture.js +20 -0
  28. package/dist/connection/connection.fixture.js.map +1 -0
  29. package/dist/connection/connection.js +21 -0
  30. package/dist/connection/connection.js.map +1 -0
  31. package/dist/connection/connection.test.d.ts +2 -0
  32. package/dist/connection/connection.test.d.ts.map +1 -0
  33. package/dist/connection/connection.test.js +34 -0
  34. package/dist/connection/connection.test.js.map +1 -0
  35. package/dist/effect.d.ts +33 -0
  36. package/dist/effect.d.ts.map +1 -0
  37. package/dist/effect.js +62 -0
  38. package/dist/effect.js.map +1 -0
  39. package/dist/email/email.d.ts +37 -0
  40. package/dist/email/email.d.ts.map +1 -0
  41. package/dist/email/email.fixture.d.ts +33 -0
  42. package/dist/email/email.fixture.d.ts.map +1 -0
  43. package/dist/email/email.fixture.js +30 -0
  44. package/dist/email/email.fixture.js.map +1 -0
  45. package/dist/email/email.js +78 -0
  46. package/dist/email/email.js.map +1 -0
  47. package/dist/email/email.test.d.ts +2 -0
  48. package/dist/email/email.test.d.ts.map +1 -0
  49. package/dist/email/email.test.js +101 -0
  50. package/dist/email/email.test.js.map +1 -0
  51. package/dist/event/event.d.ts +9 -0
  52. package/dist/event/event.d.ts.map +1 -0
  53. package/dist/event/event.js +23 -0
  54. package/dist/event/event.js.map +1 -0
  55. package/dist/event/event.node.test.d.ts +2 -0
  56. package/dist/event/event.node.test.d.ts.map +1 -0
  57. package/dist/event/event.node.test.js +14 -0
  58. package/dist/event/event.node.test.js.map +1 -0
  59. package/dist/event/event.test.d.ts +2 -0
  60. package/dist/event/event.test.d.ts.map +1 -0
  61. package/dist/event/event.test.js +30 -0
  62. package/dist/event/event.test.js.map +1 -0
  63. package/dist/exit.d.ts +64 -0
  64. package/dist/exit.d.ts.map +1 -0
  65. package/dist/exit.js +106 -0
  66. package/dist/exit.js.map +1 -0
  67. package/dist/index.d.ts +110 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +108 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/logging/eventLogger.d.ts +18 -0
  72. package/dist/logging/eventLogger.d.ts.map +1 -0
  73. package/dist/logging/eventLogger.js +32 -0
  74. package/dist/logging/eventLogger.js.map +1 -0
  75. package/dist/logging/eventLogger.test.d.ts +2 -0
  76. package/dist/logging/eventLogger.test.d.ts.map +1 -0
  77. package/dist/logging/eventLogger.test.js +74 -0
  78. package/dist/logging/eventLogger.test.js.map +1 -0
  79. package/dist/registration/register.d.ts +29 -0
  80. package/dist/registration/register.d.ts.map +1 -0
  81. package/dist/registration/register.fixture.d.ts +40 -0
  82. package/dist/registration/register.fixture.d.ts.map +1 -0
  83. package/dist/registration/register.fixture.js +65 -0
  84. package/dist/registration/register.fixture.js.map +1 -0
  85. package/dist/registration/register.js +84 -0
  86. package/dist/registration/register.js.map +1 -0
  87. package/dist/registration/register.test.d.ts +2 -0
  88. package/dist/registration/register.test.d.ts.map +1 -0
  89. package/dist/registration/register.test.js +122 -0
  90. package/dist/registration/register.test.js.map +1 -0
  91. package/dist/storage/storage.d.ts +53 -0
  92. package/dist/storage/storage.d.ts.map +1 -0
  93. package/dist/storage/storage.fixture.d.ts +6 -0
  94. package/dist/storage/storage.fixture.d.ts.map +1 -0
  95. package/dist/storage/storage.fixture.js +26 -0
  96. package/dist/storage/storage.fixture.js.map +1 -0
  97. package/dist/storage/storage.js +102 -0
  98. package/dist/storage/storage.js.map +1 -0
  99. package/dist/storage/storage.test.d.ts +2 -0
  100. package/dist/storage/storage.test.d.ts.map +1 -0
  101. package/dist/storage/storage.test.js +122 -0
  102. package/dist/storage/storage.test.js.map +1 -0
  103. package/dist/test/fixtures.d.ts +14 -0
  104. package/dist/test/fixtures.d.ts.map +1 -0
  105. package/dist/test/fixtures.js +39 -0
  106. package/dist/test/fixtures.js.map +1 -0
  107. package/dist/user/user.d.ts +18 -0
  108. package/dist/user/user.d.ts.map +1 -0
  109. package/dist/user/user.fixture.d.ts +8 -0
  110. package/dist/user/user.fixture.d.ts.map +1 -0
  111. package/dist/user/user.fixture.js +17 -0
  112. package/dist/user/user.fixture.js.map +1 -0
  113. package/dist/user/user.js +23 -0
  114. package/dist/user/user.js.map +1 -0
  115. package/dist/user/user.test.d.ts +2 -0
  116. package/dist/user/user.test.d.ts.map +1 -0
  117. package/dist/user/user.test.js +37 -0
  118. package/dist/user/user.test.js.map +1 -0
  119. package/package.json +87 -0
  120. package/src/authentication/authenticate.fixture.ts +72 -0
  121. package/src/authentication/authenticate.test.ts +207 -0
  122. package/src/authentication/authenticate.ts +147 -0
  123. package/src/capabilities/capabilities.ts +81 -0
  124. package/src/config.ts +43 -0
  125. package/src/connection/connection.fixture.ts +27 -0
  126. package/src/connection/connection.test.ts +61 -0
  127. package/src/connection/connection.ts +51 -0
  128. package/src/effect.ts +278 -0
  129. package/src/email/email.fixture.ts +49 -0
  130. package/src/email/email.test.ts +186 -0
  131. package/src/email/email.ts +139 -0
  132. package/src/event/event.node.test.ts +20 -0
  133. package/src/event/event.test.ts +37 -0
  134. package/src/event/event.ts +25 -0
  135. package/src/index.ts +275 -0
  136. package/src/logging/eventLogger.test.ts +102 -0
  137. package/src/logging/eventLogger.ts +35 -0
  138. package/src/registration/register.fixture.ts +94 -0
  139. package/src/registration/register.test.ts +247 -0
  140. package/src/registration/register.ts +178 -0
  141. package/src/storage/storage.fixture.ts +33 -0
  142. package/src/storage/storage.test.ts +196 -0
  143. package/src/storage/storage.ts +165 -0
  144. package/src/test/fixtures.ts +51 -0
  145. package/src/user/user.fixture.ts +23 -0
  146. package/src/user/user.test.ts +53 -0
  147. package/src/user/user.ts +50 -0
package/dist/exit.d.ts ADDED
@@ -0,0 +1,64 @@
1
+ import { Effect } from 'effect';
2
+ import { Cause, Exit as EX, Runtime } from 'effect';
3
+ declare const AbortError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Cause.YieldableError & {
4
+ readonly _tag: "AbortError";
5
+ } & Readonly<A>;
6
+ export declare class AbortError extends AbortError_base<{
7
+ message: string;
8
+ }> {
9
+ }
10
+ export declare class PasslockError extends Error {
11
+ readonly code: string;
12
+ readonly detail?: unknown;
13
+ constructor(args: {
14
+ code: string;
15
+ message?: string;
16
+ detail?: unknown;
17
+ });
18
+ }
19
+ export declare const isPasslockError: (data: unknown) => data is PasslockError;
20
+ type PasslockRuntime<R> = Runtime.Runtime<R>;
21
+ type Abort = {
22
+ abort?: AbortSignal;
23
+ };
24
+ type EffectFn<I, A, E, R> = (input: I) => Effect.Effect<A, E, R>;
25
+ type UnionFn<I, A> = (input: I & Abort) => Promise<A | PasslockError>;
26
+ type UnsafeFn<I, A> = (input: I & Abort) => Promise<A>;
27
+ /**
28
+ * Poor man's either - transform an Exit into a union of
29
+ * PasslockError | T
30
+ *
31
+ * @param exit
32
+ * @returns
33
+ */
34
+ export declare const transformExit: <A, E>(exit: EX.Exit<A, E>) => PasslockError | A;
35
+ /**
36
+ * Run an effect to generate promise with an error or value
37
+ *
38
+ * @param input Effect
39
+ * @returns
40
+ */
41
+ export declare const runUnion: <A, E, R>(input: Effect.Effect<A, E, R>, runtime: PasslockRuntime<R>, controller?: AbortSignal) => Promise<PasslockError | A>;
42
+ /**
43
+ * Transform a function that returns an effect to one that returns a promise with an error or value
44
+ *
45
+ * @param fn Function that returns an Effect
46
+ * @returns Function that returns a Promise wrapping a union
47
+ */
48
+ export declare const makeUnionFn: <I, A, E, R>(fn: EffectFn<I, A, E, R>, runtime: PasslockRuntime<R>) => UnionFn<I, A>;
49
+ /**
50
+ * Transform an effect into one that potentially throws a PasslockError
51
+ *
52
+ * @param effect Effect
53
+ * @returns Promise that could throw
54
+ */
55
+ export declare const runUnsafe: <A, E, R>(effect: Effect.Effect<A, E, R>, runtime: PasslockRuntime<R>) => Promise<A>;
56
+ /**
57
+ * Transform a function that returns an effect to one that returns a promise that could reject
58
+ *
59
+ * @param fn Function that returns an Effect
60
+ * @returns Function that returns a Promise that could reject
61
+ */
62
+ export declare const makeUnsafeFn: <I, A, E, R>(fn: EffectFn<I, A, E, R>, runtime: PasslockRuntime<R>) => UnsafeFn<I, A>;
63
+ export {};
64
+ //# sourceMappingURL=exit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit.d.ts","sourceRoot":"","sources":["../src/exit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,MAAM,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,OAAO,EAAQ,MAAM,QAAQ,CAAA;;;;AAEzD,qBAAa,UAAW,SAAQ,gBAA+B;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;CAAG;AAEtF,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;gBAEb,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;CAKvE;AAED,eAAO,MAAM,eAAe,SAAU,OAAO,0BAI5C,CAAA;AAED,KAAK,eAAe,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAE5C,KAAK,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,WAAW,CAAA;CAAE,CAAA;AAGpC,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAGhE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,CAAC,GAAG,aAAa,CAAC,CAAA;AAGrE,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AActD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,kDAczB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,qFAGN,WAAW,+BAWzB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,sFAKvB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,SAAS,sFAQrB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,uFAKxB,CAAA"}
package/dist/exit.js ADDED
@@ -0,0 +1,106 @@
1
+ import { Data, Effect } from 'effect';
2
+ import { Cause, Exit as EX, Runtime, flow } from 'effect';
3
+ export class AbortError extends Data.TaggedError('AbortError') {
4
+ }
5
+ export class PasslockError extends Error {
6
+ code;
7
+ detail;
8
+ constructor(args) {
9
+ super(args.message);
10
+ this.code = args.code;
11
+ this.detail = args.detail;
12
+ }
13
+ }
14
+ export const isPasslockError = (data) => {
15
+ if (typeof data !== "object")
16
+ return false;
17
+ if (data === null)
18
+ return false;
19
+ return data instanceof PasslockError;
20
+ };
21
+ const hasTag = (data) => {
22
+ if (typeof data !== "object")
23
+ return false;
24
+ if (data === null)
25
+ return false;
26
+ return '_tag' in data && typeof data._tag === "string";
27
+ };
28
+ const hasMessage = (data) => {
29
+ if (typeof data !== "object")
30
+ return false;
31
+ if (data === null)
32
+ return false;
33
+ return 'message' in data && typeof data.message === "string";
34
+ };
35
+ /**
36
+ * Poor man's either - transform an Exit into a union of
37
+ * PasslockError | T
38
+ *
39
+ * @param exit
40
+ * @returns
41
+ */
42
+ export const transformExit = (exit) => {
43
+ return EX.getOrElse(exit, cause => {
44
+ if (Cause.isFailType(cause) && hasTag(cause.error) && hasMessage(cause.error)) {
45
+ return new PasslockError({ code: cause.error._tag, message: cause.error.message });
46
+ }
47
+ else if (Cause.isFailType(cause) && hasTag(cause.error)) {
48
+ return new PasslockError({ code: cause.error._tag });
49
+ }
50
+ else if (Cause.isDieType(cause)) {
51
+ return new PasslockError({ code: 'UnexpectedError', detail: cause.defect });
52
+ }
53
+ else if (Cause.isInterruptType(cause)) {
54
+ return new PasslockError({ code: 'AbortedError', message: 'Operation aborted' });
55
+ }
56
+ else {
57
+ return new PasslockError({ code: 'UnexpectedError', detail: cause });
58
+ }
59
+ });
60
+ };
61
+ /**
62
+ * Run an effect to generate promise with an error or value
63
+ *
64
+ * @param input Effect
65
+ * @returns
66
+ */
67
+ export const runUnion = (input, runtime, controller) => {
68
+ const abort = Effect.async((resume) => {
69
+ if (controller) {
70
+ controller.onabort = () => resume(Effect.interrupt);
71
+ }
72
+ else
73
+ resume(Effect.never);
74
+ });
75
+ const withInterrupt = Effect.race(input, abort);
76
+ return Runtime.runPromiseExit(runtime)(withInterrupt).then(transformExit);
77
+ };
78
+ /**
79
+ * Transform a function that returns an effect to one that returns a promise with an error or value
80
+ *
81
+ * @param fn Function that returns an Effect
82
+ * @returns Function that returns a Promise wrapping a union
83
+ */
84
+ export const makeUnionFn = (fn, runtime) => {
85
+ return (input) => runUnion(fn(input), runtime, input.abort);
86
+ };
87
+ /**
88
+ * Transform an effect into one that potentially throws a PasslockError
89
+ *
90
+ * @param effect Effect
91
+ * @returns Promise that could throw
92
+ */
93
+ export const runUnsafe = (effect, runtime) => {
94
+ const controller = new AbortController();
95
+ return runUnion(effect, runtime, controller.signal).then(t => isPasslockError(t) ? Promise.reject(t) : Promise.resolve(t));
96
+ };
97
+ /**
98
+ * Transform a function that returns an effect to one that returns a promise that could reject
99
+ *
100
+ * @param fn Function that returns an Effect
101
+ * @returns Function that returns a Promise that could reject
102
+ */
103
+ export const makeUnsafeFn = (fn, runtime) => {
104
+ return flow(fn, e => runUnsafe(e, runtime));
105
+ };
106
+ //# sourceMappingURL=exit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit.js","sourceRoot":"","sources":["../src/exit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAEzD,MAAM,OAAO,UAAW,SAAQ,IAAI,CAAC,WAAW,CAAC,YAAY,CAAsB;CAAG;AAEtF,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,CAAQ;IACZ,MAAM,CAAU;IAEzB,YAAY,IAA0D;QACpE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC3B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAa,EAAyB,EAAE;IACtE,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC1C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC/B,OAAO,IAAI,YAAY,aAAa,CAAA;AACtC,CAAC,CAAA;AAeD,MAAM,MAAM,GAAG,CAAC,IAAa,EAA4B,EAAE;IACzD,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC1C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC/B,OAAO,MAAM,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAA;AACxD,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,IAAa,EAA+B,EAAE;IAChE,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC1C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC/B,OAAO,SAAS,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAA;AAC9D,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAO,IAAmB,EAAqB,EAAE;IAC5E,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;QAChC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9E,OAAO,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QACpF,CAAC;aAAM,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,OAAO,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QACtD,CAAC;aAAM,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;QAC7E,CAAC;aAAM,IAAI,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAA;QAClF,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;QACtE,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,KAA6B,EAC7B,OAA2B,EAC3B,UAAwB,EACI,EAAE;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAQ,CAAC,MAAM,EAAE,EAAE;QAC3C,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACrD,CAAC;;YAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAE/C,OAAO,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AAC3E,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,EAAwB,EACxB,OAA2B,EACZ,EAAE;IACjB,OAAO,CAAC,KAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;AACxE,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,MAA8B,EAC9B,OAA2B,EACf,EAAE;IACd,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,OAAO,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC3D,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAC5D,CAAA;AACH,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,EAAwB,EACxB,OAA2B,EACX,EAAE;IAClB,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;AAC7C,CAAC,CAAA"}
@@ -0,0 +1,110 @@
1
+ import { type AuthenticationRequest } from './authentication/authenticate';
2
+ import { type VerifyRequest } from './email/email';
3
+ import { type RegistrationRequest } from './registration/register';
4
+ import { type AuthType } from './storage/storage';
5
+ import { type Email } from './user/user';
6
+ import { ErrorCode } from '@passlock/shared/dist/error/error';
7
+ export { ErrorCode } from '@passlock/shared/dist/error/error';
8
+ export declare class PasslockError extends Error {
9
+ readonly _tag = "PasslockError";
10
+ readonly code: ErrorCode;
11
+ constructor(message: string, code: ErrorCode);
12
+ static readonly isError: (error: unknown) => error is PasslockError;
13
+ }
14
+ export declare class Passlock {
15
+ private readonly runtime;
16
+ constructor(config: {
17
+ tenancyId: string;
18
+ clientId: string;
19
+ endpoint: string;
20
+ });
21
+ private readonly runPromise;
22
+ preConnect: () => Promise<void>;
23
+ isPasskeySupport: () => Promise<boolean>;
24
+ isExistingPasskey: (email: Email) => Promise<boolean>;
25
+ registerPasskey: (request: RegistrationRequest) => Promise<{
26
+ readonly token: string;
27
+ readonly subject: {
28
+ readonly id: string;
29
+ readonly email: string;
30
+ readonly firstName: string;
31
+ readonly lastName: string;
32
+ readonly emailVerified: boolean;
33
+ };
34
+ readonly authStatement: {
35
+ readonly authType: "email" | "passkey";
36
+ readonly userVerified: boolean;
37
+ readonly authTimestamp: Date;
38
+ };
39
+ readonly expireAt: Date;
40
+ }>;
41
+ authenticatePasskey: (request: AuthenticationRequest) => Promise<{
42
+ readonly token: string;
43
+ readonly subject: {
44
+ readonly id: string;
45
+ readonly email: string;
46
+ readonly firstName: string;
47
+ readonly lastName: string;
48
+ readonly emailVerified: boolean;
49
+ };
50
+ readonly authStatement: {
51
+ readonly authType: "email" | "passkey";
52
+ readonly userVerified: boolean;
53
+ readonly authTimestamp: Date;
54
+ };
55
+ readonly expireAt: Date;
56
+ }>;
57
+ verifyEmailCode: (request: VerifyRequest) => Promise<boolean>;
58
+ verifyEmailLink: () => Promise<boolean>;
59
+ getSessionToken: (authType: AuthType) => import("./storage/storage").StoredToken | undefined;
60
+ clearExpiredTokens: () => Promise<void>;
61
+ }
62
+ export declare class PasslockSafe {
63
+ private readonly runtime;
64
+ constructor(config: {
65
+ tenancyId: string;
66
+ clientId: string;
67
+ endpoint: string;
68
+ });
69
+ private readonly runPromise;
70
+ isPasskeySupport: () => Promise<boolean>;
71
+ preConnect: () => Promise<void | PasslockError>;
72
+ isExistingPasskey: (email: Email) => Promise<boolean | PasslockError>;
73
+ registerPasskey: (request: RegistrationRequest) => Promise<{
74
+ readonly token: string;
75
+ readonly subject: {
76
+ readonly id: string;
77
+ readonly email: string;
78
+ readonly firstName: string;
79
+ readonly lastName: string;
80
+ readonly emailVerified: boolean;
81
+ };
82
+ readonly authStatement: {
83
+ readonly authType: "email" | "passkey";
84
+ readonly userVerified: boolean;
85
+ readonly authTimestamp: Date;
86
+ };
87
+ readonly expireAt: Date;
88
+ } | PasslockError>;
89
+ authenticatePasskey: (request?: AuthenticationRequest) => Promise<{
90
+ readonly token: string;
91
+ readonly subject: {
92
+ readonly id: string;
93
+ readonly email: string;
94
+ readonly firstName: string;
95
+ readonly lastName: string;
96
+ readonly emailVerified: boolean;
97
+ };
98
+ readonly authStatement: {
99
+ readonly authType: "email" | "passkey";
100
+ readonly userVerified: boolean;
101
+ readonly authTimestamp: Date;
102
+ };
103
+ readonly expireAt: Date;
104
+ } | PasslockError>;
105
+ verifyEmailCode: (request: VerifyRequest) => Promise<boolean | PasslockError>;
106
+ verifyEmailLink: () => Promise<boolean | PasslockError>;
107
+ getSessionToken: (authType: AuthType) => import("./storage/storage").StoredToken | undefined;
108
+ clearExpiredTokens: () => Promise<void>;
109
+ }
110
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,qBAAqB,EAAyB,MAAM,+BAA+B,CAAA;AAIjG,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,KAAK,mBAAmB,EAAuB,MAAM,yBAAyB,CAAA;AACvF,OAAO,EAAE,KAAK,QAAQ,EAA2B,MAAM,mBAAmB,CAAA;AAC1E,OAAO,EAAE,KAAK,KAAK,EAAe,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAE7D,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,mBAAkB;IAC/B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;gBAEZ,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAK5C,MAAM,CAAC,QAAQ,CAAC,OAAO,UAAW,OAAO,4BAOxC;CACF;AAqED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;gBAE3C,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAQ7E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAQ1B;IAED,UAAU,sBAKP;IAEH,gBAAgB,yBAKb;IAEH,iBAAiB,UAAW,KAAK,sBAK9B;IAEH,eAAe,YAAa,mBAAmB;;;;;;;;;;;;;;;OAK5C;IAEH,mBAAmB,YAAa,qBAAqB;;;;;;;;;;;;;;;OAKlD;IAEH,eAAe,YAAa,aAAa,sBAKtC;IAEH,eAAe,yBAKZ;IAEH,eAAe,aAAc,QAAQ,yDAMlC;IAEH,kBAAkB,sBAKf;CACJ;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;gBAE3C,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAQ7E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAI1B;IAED,gBAAgB,yBAKb;IAEH,UAAU,sCAKP;IAEH,iBAAiB,UAAW,KAAK,sCAK9B;IAEH,eAAe,YAAa,mBAAmB;;;;;;;;;;;;;;;uBAK5C;IAEH,mBAAmB,aAAa,qBAAqB;;;;;;;;;;;;;;;uBAKlD;IAEH,eAAe,YAAa,aAAa,sCAKtC;IAEH,eAAe,yCAKZ;IAEH,eAAe,aAAc,QAAQ,yDAMlC;IAEH,kBAAkB,sBAKf;CACJ"}
package/dist/index.js ADDED
@@ -0,0 +1,108 @@
1
+ import { RpcConfig } from '@passlock/shared/dist/rpc/rpc';
2
+ import { Effect as E, Layer as L, Layer, Option, Runtime, Scope, pipe } from 'effect';
3
+ import { AuthenticationService } from './authentication/authenticate';
4
+ import { Capabilities } from './capabilities/capabilities';
5
+ import { ConnectionService } from './connection/connection';
6
+ import { allRequirements } from './effect';
7
+ import { EmailService } from './email/email';
8
+ import { RegistrationService } from './registration/register';
9
+ import { Storage, StorageService } from './storage/storage';
10
+ import { UserService } from './user/user';
11
+ import { ErrorCode } from '@passlock/shared/dist/error/error';
12
+ export { ErrorCode } from '@passlock/shared/dist/error/error';
13
+ export class PasslockError extends Error {
14
+ _tag = 'PasslockError';
15
+ code;
16
+ constructor(message, code) {
17
+ super(message);
18
+ this.code = code;
19
+ }
20
+ static isError = (error) => {
21
+ return (typeof error === 'object' &&
22
+ error !== null &&
23
+ '_tag' in error &&
24
+ error['_tag'] === 'PasslockError');
25
+ };
26
+ }
27
+ const hasMessage = (defect) => {
28
+ return (typeof defect === 'object' &&
29
+ defect !== null &&
30
+ 'message' in defect &&
31
+ typeof defect['message'] === 'string');
32
+ };
33
+ const transformErrors = (effect) => {
34
+ const withErrorHandling = E.catchTags(effect, {
35
+ NotSupported: e => E.succeed(new PasslockError(e.message, ErrorCode.NotSupported)),
36
+ BadRequest: e => E.succeed(new PasslockError(e.message, ErrorCode.BadRequest)),
37
+ Duplicate: e => E.succeed(new PasslockError(e.message, ErrorCode.Duplicate)),
38
+ Unauthorized: e => E.succeed(new PasslockError(e.message, ErrorCode.Unauthorized)),
39
+ Forbidden: e => E.succeed(new PasslockError(e.message, ErrorCode.Forbidden)),
40
+ Disabled: e => E.succeed(new PasslockError(e.message, ErrorCode.Disabled)),
41
+ NotFound: e => E.succeed(new PasslockError(e.message, ErrorCode.NotFound)),
42
+ });
43
+ const sandboxed = E.sandbox(withErrorHandling);
44
+ const withSandboxing = E.catchTags(sandboxed, {
45
+ Die: ({ defect }) => {
46
+ return hasMessage(defect)
47
+ ? E.succeed(new PasslockError(defect.message, ErrorCode.InternalServerError))
48
+ : E.succeed(new PasslockError('Sorry, something went wrong', ErrorCode.InternalServerError));
49
+ },
50
+ Interrupt: () => {
51
+ return E.succeed(new PasslockError('Operation aborted', ErrorCode.InternalBrowserError));
52
+ },
53
+ Sequential: errors => {
54
+ console.error(errors);
55
+ return E.succeed(new PasslockError('Sorry, something went wrong', ErrorCode.InternalServerError));
56
+ },
57
+ Parallel: errors => {
58
+ console.error(errors);
59
+ return E.succeed(new PasslockError('Sorry, something went wrong', ErrorCode.InternalServerError));
60
+ },
61
+ });
62
+ return E.unsandbox(withSandboxing);
63
+ };
64
+ export class Passlock {
65
+ runtime;
66
+ constructor(config) {
67
+ const rpcConfig = Layer.succeed(RpcConfig, RpcConfig.of(config));
68
+ const storage = Layer.succeed(Storage, Storage.of(globalThis.localStorage));
69
+ const allLayers = pipe(allRequirements, L.provide(rpcConfig), L.provide(storage));
70
+ const scope = E.runSync(Scope.make());
71
+ this.runtime = E.runSync(Layer.toRuntime(allLayers).pipe(Scope.extend(scope)));
72
+ }
73
+ runPromise = (effect) => {
74
+ return pipe(transformErrors(effect), E.flatMap(result => (PasslockError.isError(result) ? E.fail(result) : E.succeed(result))), effect => Runtime.runPromise(this.runtime)(effect));
75
+ };
76
+ preConnect = () => pipe(ConnectionService, E.flatMap(service => service.preConnect()), effect => Runtime.runPromise(this.runtime)(effect));
77
+ isPasskeySupport = () => pipe(Capabilities, E.flatMap(service => service.isPasskeySupport), effect => Runtime.runPromise(this.runtime)(effect));
78
+ isExistingPasskey = (email) => pipe(UserService, E.flatMap(service => service.isExistingUser(email)), effect => this.runPromise(effect));
79
+ registerPasskey = (request) => pipe(RegistrationService, E.flatMap(service => service.registerPasskey(request)), effect => this.runPromise(effect));
80
+ authenticatePasskey = (request) => pipe(AuthenticationService, E.flatMap(service => service.authenticatePasskey(request)), effect => this.runPromise(effect));
81
+ verifyEmailCode = (request) => pipe(EmailService, E.flatMap(service => service.verifyEmailCode(request)), effect => this.runPromise(effect));
82
+ verifyEmailLink = () => pipe(EmailService, E.flatMap(service => service.verifyEmailLink()), effect => this.runPromise(effect));
83
+ getSessionToken = (authType) => pipe(StorageService, E.flatMap(service => service.getToken(authType).pipe(effect => E.option(effect))), E.map(Option.getOrUndefined), effect => Runtime.runSync(this.runtime)(effect));
84
+ clearExpiredTokens = () => pipe(StorageService, E.flatMap(service => service.clearExpiredTokens), effect => Runtime.runPromise(this.runtime)(effect));
85
+ }
86
+ export class PasslockSafe {
87
+ runtime;
88
+ constructor(config) {
89
+ const rpcConfig = Layer.succeed(RpcConfig, RpcConfig.of(config));
90
+ const storage = Layer.succeed(Storage, Storage.of(globalThis.localStorage));
91
+ const allLayers = pipe(allRequirements, L.provide(rpcConfig), L.provide(storage));
92
+ const scope = E.runSync(Scope.make());
93
+ this.runtime = E.runSync(Layer.toRuntime(allLayers).pipe(Scope.extend(scope)));
94
+ }
95
+ runPromise = (effect) => {
96
+ return pipe(transformErrors(effect), effect => Runtime.runPromise(this.runtime)(effect));
97
+ };
98
+ isPasskeySupport = () => pipe(Capabilities, E.flatMap(service => service.isPasskeySupport), effect => Runtime.runPromise(this.runtime)(effect));
99
+ preConnect = () => pipe(ConnectionService, E.flatMap(service => service.preConnect()), effect => this.runPromise(effect));
100
+ isExistingPasskey = (email) => pipe(UserService, E.flatMap(service => service.isExistingUser(email)), effect => this.runPromise(effect));
101
+ registerPasskey = (request) => pipe(RegistrationService, E.flatMap(service => service.registerPasskey(request)), effect => this.runPromise(effect));
102
+ authenticatePasskey = (request = {}) => pipe(AuthenticationService, E.flatMap(service => service.authenticatePasskey(request)), effect => this.runPromise(effect));
103
+ verifyEmailCode = (request) => pipe(EmailService, E.flatMap(service => service.verifyEmailCode(request)), effect => this.runPromise(effect));
104
+ verifyEmailLink = () => pipe(EmailService, E.flatMap(service => service.verifyEmailLink()), effect => this.runPromise(effect));
105
+ getSessionToken = (authType) => pipe(StorageService, E.flatMap(service => service.getToken(authType).pipe(effect => E.option(effect))), E.map(maybeToken => Option.getOrUndefined(maybeToken)), effect => Runtime.runSync(this.runtime)(effect));
106
+ clearExpiredTokens = () => pipe(StorageService, E.flatMap(service => service.clearExpiredTokens), effect => Runtime.runPromise(this.runtime)(effect));
107
+ }
108
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Logger implementation that also fires DOM events.
3
+ * This is useful to allow external code to plug into the logging
4
+ * mechanism. E.g. the Passlock demo subscribes to events to generate
5
+ * a typewriter style effect
6
+ */
7
+ import { Effect as E } from 'effect';
8
+ /**
9
+ * Some log messages span multiple lines/include json etc which is
10
+ * better output without being formatted by Effect's logging framework
11
+ *
12
+ * @param message
13
+ * @returns
14
+ */
15
+ export declare const logRaw: <T>(message: T) => E.Effect<void, never, never>;
16
+ export declare const DebugMessage = "PasslogDebugMessage";
17
+ export declare const eventLoggerLive: import("effect/Layer").Layer<never, never, never>;
18
+ //# sourceMappingURL=eventLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventLogger.d.ts","sourceRoot":"","sources":["../../src/logging/eventLogger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC,EAAoB,MAAM,QAAQ,CAAA;AAEtD;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,eAAgB,CAAC,iCAInC,CAAA;AAED,eAAO,MAAM,YAAY,wBAAwB,CAAA;AAEjD,eAAO,MAAM,eAAe,mDAW3B,CAAA"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Logger implementation that also fires DOM events.
3
+ * This is useful to allow external code to plug into the logging
4
+ * mechanism. E.g. the Passlock demo subscribes to events to generate
5
+ * a typewriter style effect
6
+ */
7
+ import { Effect as E, LogLevel, Logger } from 'effect';
8
+ /**
9
+ * Some log messages span multiple lines/include json etc which is
10
+ * better output without being formatted by Effect's logging framework
11
+ *
12
+ * @param message
13
+ * @returns
14
+ */
15
+ export const logRaw = (message) => {
16
+ return E.sync(() => {
17
+ console.log(message);
18
+ });
19
+ };
20
+ export const DebugMessage = 'PasslogDebugMessage';
21
+ export const eventLoggerLive = Logger.add(Logger.make(options => {
22
+ if (typeof options.message === 'string' && options.logLevel !== LogLevel.Debug) {
23
+ try {
24
+ const evt = new CustomEvent(DebugMessage, { detail: options.message });
25
+ globalThis.dispatchEvent(evt);
26
+ }
27
+ catch (e) {
28
+ globalThis.console.log('Unable to fire custom event');
29
+ }
30
+ }
31
+ }));
32
+ //# sourceMappingURL=eventLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventLogger.js","sourceRoot":"","sources":["../../src/logging/eventLogger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEtD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,OAAU,EAAE,EAAE;IACtC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACtB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,qBAAqB,CAAA;AAEjD,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CACvC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;IACpB,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC/E,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;YACtE,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QAC/B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CACH,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=eventLogger.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventLogger.test.d.ts","sourceRoot":"","sources":["../../src/logging/eventLogger.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ import { Effect as E, LogLevel, Logger } from 'effect';
2
+ import { describe, expect, test, vi } from 'vitest';
3
+ import { eventLoggerLive, logRaw } from './eventLogger';
4
+ /**
5
+ * Although the core log functionality is tested alongside the logger in the @passlock/shared
6
+ * package, those tests deliberately exclude the event dispatch elements as the package
7
+ * is intended to be agnostic to the runtime environment. This client package however is
8
+ * intented to be run in the browser, so we can plugin a real event dispatcher and ensure
9
+ * it's working as expected.
10
+ */
11
+ describe('log', () => {
12
+ test('log DEBUG to the console', () => {
13
+ const logStatement = E.logDebug('hello world');
14
+ const logSpy = vi.spyOn(globalThis.console, 'log').mockImplementation(() => undefined);
15
+ const withLogLevel = logStatement.pipe(Logger.withMinimumLogLevel(LogLevel.Debug));
16
+ const effect = E.provide(withLogLevel, eventLoggerLive);
17
+ E.runSync(effect);
18
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('hello world'));
19
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('DEBUG'));
20
+ });
21
+ test('log INFO to the console', () => {
22
+ const logStatement = E.logInfo('hello world');
23
+ const logSpy = vi.spyOn(globalThis.console, 'log').mockImplementation(() => undefined);
24
+ const withLogLevel = logStatement.pipe(Logger.withMinimumLogLevel(LogLevel.Info));
25
+ const effect = E.provide(withLogLevel, eventLoggerLive);
26
+ E.runSync(effect);
27
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('hello world'));
28
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('INFO'));
29
+ });
30
+ test('log WARN to the console', () => {
31
+ const logStatement = E.logWarning('hello world');
32
+ const logSpy = vi.spyOn(globalThis.console, 'log').mockImplementation(() => undefined);
33
+ const withLogLevel = logStatement.pipe(Logger.withMinimumLogLevel(LogLevel.Warning));
34
+ const effect = E.provide(withLogLevel, eventLoggerLive);
35
+ E.runSync(effect);
36
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('hello world'));
37
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('WARN'));
38
+ });
39
+ test('log ERROR to the console', () => {
40
+ const logStatement = E.logError('hello world');
41
+ const logSpy = vi.spyOn(globalThis.console, 'log').mockImplementation(() => undefined);
42
+ const withLogLevel = logStatement.pipe(Logger.withMinimumLogLevel(LogLevel.Error));
43
+ const effect = E.provide(withLogLevel, eventLoggerLive);
44
+ E.runSync(effect);
45
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('hello world'));
46
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('ERROR'));
47
+ });
48
+ test('log raw data to the console', () => {
49
+ const logStatement = logRaw('hello world');
50
+ const logSpy = vi.spyOn(globalThis.console, 'log').mockImplementation(() => undefined);
51
+ E.runSync(logStatement);
52
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('hello world'));
53
+ });
54
+ test('fire a custom log event', () => {
55
+ const logStatement = E.logWarning('hello world');
56
+ const eventSpy = vi.spyOn(globalThis, 'dispatchEvent').mockImplementation(() => false);
57
+ const withLogLevel = logStatement.pipe(Logger.withMinimumLogLevel(LogLevel.Warning));
58
+ const effect = E.provide(withLogLevel, eventLoggerLive);
59
+ E.runSync(effect);
60
+ const expectedEvent = new CustomEvent('PasslogDebugMessage', {
61
+ detail: 'hello world',
62
+ });
63
+ expect(eventSpy).toHaveBeenCalledWith(expectedEvent);
64
+ });
65
+ test('not fire a log event for a debug message', () => {
66
+ const logStatement = E.logDebug('hello world');
67
+ const eventSpy = vi.spyOn(globalThis, 'dispatchEvent').mockImplementation(() => false);
68
+ const withDebugLevel = logStatement.pipe(Logger.withMinimumLogLevel(LogLevel.Debug));
69
+ const effect = E.provide(withDebugLevel, eventLoggerLive);
70
+ E.runSync(effect);
71
+ expect(eventSpy).not.toHaveBeenCalled();
72
+ });
73
+ });
74
+ //# sourceMappingURL=eventLogger.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventLogger.test.js","sourceRoot":"","sources":["../../src/logging/eventLogger.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { NotSupported } from '@passlock/shared/dist/error/error';
2
+ import { Duplicate, InternalBrowserError } from '@passlock/shared/dist/error/error';
3
+ import type { OptionsErrors, VerificationErrors } from '@passlock/shared/dist/rpc/registration';
4
+ import { RpcClient } from '@passlock/shared/dist/rpc/rpc';
5
+ import type { Principal, RegistrationCredential, UserVerification, VerifyEmail } from '@passlock/shared/dist/schema/schema';
6
+ import { Context, Effect as E, Layer } from 'effect';
7
+ import { Capabilities } from '../capabilities/capabilities';
8
+ import { StorageService } from '../storage/storage';
9
+ import { UserService } from '../user/user';
10
+ export type RegistrationRequest = {
11
+ email: string;
12
+ firstName: string;
13
+ lastName: string;
14
+ userVerification?: UserVerification;
15
+ verifyEmail?: VerifyEmail;
16
+ redirectUrl?: string;
17
+ };
18
+ export type CreateCredential = (options: CredentialCreationOptions) => E.Effect<RegistrationCredential, InternalBrowserError | Duplicate>;
19
+ export declare const CreateCredential: Context.Tag<CreateCredential, CreateCredential>;
20
+ export type RegistrationErrors = NotSupported | OptionsErrors | VerificationErrors;
21
+ export type RegistrationService = {
22
+ registerPasskey: (request: RegistrationRequest) => E.Effect<Principal, RegistrationErrors>;
23
+ };
24
+ export declare const RegistrationService: Context.Tag<RegistrationService, RegistrationService>;
25
+ type Dependencies = Capabilities | CreateCredential | StorageService | UserService | RpcClient;
26
+ export declare const registerPasskey: (request: RegistrationRequest) => E.Effect<Principal, RegistrationErrors, Dependencies>;
27
+ export declare const RegistrationServiceLive: Layer.Layer<RegistrationService, never, Capabilities | StorageService | RpcClient | UserService | CreateCredential>;
28
+ export {};
29
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/registration/register.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AACnF,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAAC,MAAM,wCAAwC,CAAC;AAKpE,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AACzD,OAAO,KAAK,EACV,SAAS,EACT,sBAAsB,EACtB,gBAAgB,EAChB,WAAW,EACZ,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,EAAc,MAAM,QAAQ,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAI1C,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAID,MAAM,MAAM,gBAAgB,GAAG,CAC7B,OAAO,EAAE,yBAAyB,KAC/B,CAAC,CAAC,MAAM,CAAC,sBAAsB,EAAE,oBAAoB,GAAG,SAAS,CAAC,CAAA;AACvE,eAAO,MAAM,gBAAgB,iDAA2D,CAAA;AAIxF,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,aAAa,GAAG,kBAAkB,CAAA;AAIlF,MAAM,MAAM,mBAAmB,GAAG;IAChC,eAAe,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;CAC3F,CAAA;AAED,eAAO,MAAM,mBAAmB,uDAE/B,CAAA;AAyDD,KAAK,YAAY,GAAG,YAAY,GAAG,gBAAgB,GAAG,cAAc,GAAG,WAAW,GAAG,SAAS,CAAA;AAE9F,eAAO,MAAM,eAAe,YACjB,mBAAmB,KAC3B,EAAE,MAAM,CAAC,SAAS,EAAE,kBAAkB,EAAE,YAAY,CAyCtD,CAAA;AAKD,eAAO,MAAM,uBAAuB,qHAWnC,CAAA"}