@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.
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/{network.d.ts → internal/network.d.ts} +5 -3
- package/dist/internal/network.d.ts.map +1 -0
- package/dist/{network.js → internal/network.js} +29 -10
- package/dist/internal/network.js.map +1 -0
- package/dist/internal/promise.d.ts.map +1 -0
- package/dist/internal/promise.js.map +1 -0
- package/dist/internal/tenancy.d.ts.map +1 -0
- package/dist/internal/tenancy.js.map +1 -0
- package/dist/logger/index.d.ts +3 -1
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +8 -3
- package/dist/logger/index.js.map +1 -1
- package/dist/passkey/authentication/authentication.d.ts +118 -0
- package/dist/passkey/authentication/authentication.d.ts.map +1 -0
- package/dist/passkey/authentication/{micro.js → authentication.js} +98 -33
- package/dist/passkey/authentication/authentication.js.map +1 -0
- package/dist/passkey/authentication/authentication.test.d.ts +2 -0
- package/dist/passkey/authentication/authentication.test.d.ts.map +1 -0
- package/dist/passkey/authentication/authentication.test.js +157 -0
- package/dist/passkey/authentication/authentication.test.js.map +1 -0
- package/dist/passkey/authentication/index.d.ts +3 -3
- package/dist/passkey/authentication/index.d.ts.map +1 -1
- package/dist/passkey/authentication/index.js +5 -5
- package/dist/passkey/authentication/index.js.map +1 -1
- package/dist/passkey/{shared.d.ts → errors.d.ts} +5 -4
- package/dist/passkey/errors.d.ts.map +1 -0
- package/dist/passkey/{shared.js → errors.js} +4 -4
- package/dist/passkey/errors.js.map +1 -0
- package/dist/passkey/index.d.ts +5 -6
- package/dist/passkey/index.d.ts.map +1 -1
- package/dist/passkey/index.js +5 -4
- package/dist/passkey/index.js.map +1 -1
- package/dist/passkey/registration/index.d.ts +3 -3
- package/dist/passkey/registration/index.d.ts.map +1 -1
- package/dist/passkey/registration/index.js +5 -5
- package/dist/passkey/registration/index.js.map +1 -1
- package/dist/passkey/registration/{micro.d.ts → registration.d.ts} +45 -10
- package/dist/passkey/registration/registration.d.ts.map +1 -0
- package/dist/passkey/registration/{micro.js → registration.js} +63 -42
- package/dist/passkey/registration/registration.js.map +1 -0
- package/dist/passkey/registration/registration.test.d.ts +2 -0
- package/dist/passkey/registration/registration.test.d.ts.map +1 -0
- package/dist/passkey/registration/registration.test.js +161 -0
- package/dist/passkey/registration/registration.test.js.map +1 -0
- package/dist/passkey/signals/index.d.ts +9 -0
- package/dist/passkey/signals/index.d.ts.map +1 -0
- package/dist/passkey/signals/index.js +19 -0
- package/dist/passkey/signals/index.js.map +1 -0
- package/dist/passkey/signals/signals.d.ts +45 -0
- package/dist/passkey/signals/signals.d.ts.map +1 -0
- package/dist/passkey/signals/signals.js +156 -0
- package/dist/passkey/signals/signals.js.map +1 -0
- package/dist/passkey/support.d.ts.map +1 -1
- package/dist/passkey/support.js +1 -1
- package/dist/passkey/support.js.map +1 -1
- package/dist/passkey/types.d.ts.map +1 -1
- package/dist/shared.d.ts.map +1 -1
- package/package.json +22 -25
- package/dist/network.d.ts.map +0 -1
- package/dist/network.js.map +0 -1
- package/dist/passkey/authentication/micro.d.ts +0 -71
- package/dist/passkey/authentication/micro.d.ts.map +0 -1
- package/dist/passkey/authentication/micro.js.map +0 -1
- package/dist/passkey/registration/micro.d.ts.map +0 -1
- package/dist/passkey/registration/micro.js.map +0 -1
- package/dist/passkey/shared.d.ts.map +0 -1
- package/dist/passkey/shared.js.map +0 -1
- package/dist/promise.d.ts.map +0 -1
- package/dist/promise.js.map +0 -1
- package/dist/tenancy.d.ts.map +0 -1
- package/dist/tenancy.js.map +0 -1
- /package/dist/{promise.d.ts → internal/promise.d.ts} +0 -0
- /package/dist/{promise.js → internal/promise.js} +0 -0
- /package/dist/{tenancy.d.ts → internal/tenancy.d.ts} +0 -0
- /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 {
|
|
2
|
+
export { isUnexpectedError, UnexpectedError } from "./internal/network";
|
|
3
|
+
export * from "./logger/index";
|
|
4
|
+
export * from "./passkey/index";
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
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
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
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: <
|
|
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
|
|
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<
|
|
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"
|
|
66
|
+
try: () => fetch(url, { body, headers, method: "post" }),
|
|
63
67
|
catch: () => networkError,
|
|
64
68
|
});
|
|
65
|
-
|
|
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
|
-
|
|
71
|
-
|
|
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
|
-
|
|
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"}
|
package/dist/logger/index.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/logger/index.js
CHANGED
|
@@ -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
|
-
|
|
12
|
-
console.
|
|
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
|
package/dist/logger/index.js.map
CHANGED
|
@@ -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,
|
|
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
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { buildEndpoint, Endpoint, makeRequest
|
|
5
|
-
import {
|
|
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
|
|
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
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
149
|
+
const micro = Micro.gen(function* () {
|
|
101
150
|
const { sessionToken, optionsJSON } = yield* fetchOptions(options);
|
|
102
|
-
const
|
|
103
|
-
|
|
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(
|
|
170
|
+
return pipe(micro, Micro.provideService(TenancyId, options), Micro.provideService(Endpoint, endpoint));
|
|
106
171
|
};
|
|
107
|
-
//# sourceMappingURL=
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"authentication.test.d.ts","sourceRoot":"","sources":["../../../src/passkey/authentication/authentication.test.ts"],"names":[],"mappings":""}
|