ox 0.14.10 → 0.14.11
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/CHANGELOG.md +6 -0
- package/_cjs/version.js +1 -1
- package/_cjs/webauthn/Credential.js +6 -0
- package/_cjs/webauthn/Credential.js.map +1 -1
- package/_esm/version.js +1 -1
- package/_esm/webauthn/Credential.js +9 -0
- package/_esm/webauthn/Credential.js.map +1 -1
- package/_types/version.d.ts +1 -1
- package/_types/webauthn/Credential.d.ts.map +1 -1
- package/package.json +1 -1
- package/version.ts +1 -1
- package/webauthn/Credential.ts +15 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# ox
|
|
2
2
|
|
|
3
|
+
## 0.14.11
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#209](https://github.com/wevm/ox/pull/209) [`52d985e`](https://github.com/wevm/ox/commit/52d985e54ab063e4d835ad467da2bcf07fcbfb33) Thanks [@jxom](https://github.com/jxom)! - Fixed `Credential.serialize` to extract `authenticatorData` from the CBOR-encoded `attestationObject` when the browser/passkey provider doesn't expose it on the response object (e.g. Firefox + 1Password).
|
|
8
|
+
|
|
3
9
|
## 0.14.10
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
package/_cjs/version.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.serialize = serialize;
|
|
4
4
|
exports.deserialize = deserialize;
|
|
5
5
|
const Base64 = require("../core/Base64.js");
|
|
6
|
+
const Cbor = require("../core/Cbor.js");
|
|
6
7
|
const PublicKey = require("../core/PublicKey.js");
|
|
7
8
|
const utils_js_1 = require("./internal/utils.js");
|
|
8
9
|
function serialize(credential) {
|
|
@@ -20,6 +21,11 @@ function serialize(credential) {
|
|
|
20
21
|
if (value instanceof ArrayBuffer)
|
|
21
22
|
response[key] = Base64.fromBytes(new Uint8Array(value), utils_js_1.base64UrlOptions);
|
|
22
23
|
}
|
|
24
|
+
if (!response.authenticatorData) {
|
|
25
|
+
const attestation = Cbor.decode(new Uint8Array(attestationObject));
|
|
26
|
+
if (attestation.authData)
|
|
27
|
+
response.authenticatorData = Base64.fromBytes(attestation.authData, utils_js_1.base64UrlOptions);
|
|
28
|
+
}
|
|
23
29
|
return {
|
|
24
30
|
attestationObject: Base64.fromBytes(new Uint8Array(attestationObject), utils_js_1.base64UrlOptions),
|
|
25
31
|
clientDataJSON: Base64.fromBytes(new Uint8Array(clientDataJSON), utils_js_1.base64UrlOptions),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Credential.js","sourceRoot":"","sources":["../../webauthn/Credential.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"Credential.js","sourceRoot":"","sources":["../../webauthn/Credential.ts"],"names":[],"mappings":"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"}
|
package/_esm/version.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as Base64 from '../core/Base64.js';
|
|
2
|
+
import * as Cbor from '../core/Cbor.js';
|
|
2
3
|
import * as PublicKey from '../core/PublicKey.js';
|
|
3
4
|
import { base64UrlOptions, bufferSourceToBytes, bytesToArrayBuffer, responseKeys, } from './internal/utils.js';
|
|
4
5
|
/**
|
|
@@ -38,6 +39,14 @@ export function serialize(credential) {
|
|
|
38
39
|
if (value instanceof ArrayBuffer)
|
|
39
40
|
response[key] = Base64.fromBytes(new Uint8Array(value), base64UrlOptions);
|
|
40
41
|
}
|
|
42
|
+
// Some browsers/passkey providers (e.g. Firefox + 1Password) don't expose
|
|
43
|
+
// `authenticatorData` on the response object. Fall back to extracting it
|
|
44
|
+
// from the CBOR-encoded `attestationObject` which always contains `authData`.
|
|
45
|
+
if (!response.authenticatorData) {
|
|
46
|
+
const attestation = Cbor.decode(new Uint8Array(attestationObject));
|
|
47
|
+
if (attestation.authData)
|
|
48
|
+
response.authenticatorData = Base64.fromBytes(attestation.authData, base64UrlOptions);
|
|
49
|
+
}
|
|
41
50
|
return {
|
|
42
51
|
attestationObject: Base64.fromBytes(new Uint8Array(attestationObject), base64UrlOptions),
|
|
43
52
|
clientDataJSON: Base64.fromBytes(new Uint8Array(clientDataJSON), base64UrlOptions),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Credential.js","sourceRoot":"","sources":["../../webauthn/Credential.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"Credential.js","sourceRoot":"","sources":["../../webauthn/Credential.ts"],"names":[],"mappings":"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"}
|
package/_types/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Credential.d.ts","sourceRoot":"","sources":["../../webauthn/Credential.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"Credential.d.ts","sourceRoot":"","sources":["../../webauthn/Credential.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,OAAO,KAAK,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,KAAK,GAAG,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AAOjD,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAExC,2CAA2C;AAC3C,MAAM,MAAM,UAAU,CAAC,UAAU,SAAS,OAAO,GAAG,KAAK,IAAI;IAC3D,iBAAiB,EAAE,UAAU,SAAS,IAAI,GAAG,MAAM,GAAG,WAAW,CAAA;IACjE,cAAc,EAAE,UAAU,SAAS,IAAI,GAAG,MAAM,GAAG,WAAW,CAAA;IAC9D,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,UAAU,SAAS,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,SAAS,CAAA;IAClE,GAAG,EAAE,KAAK,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAA;CAC3C,CAAA;AAED,8CAA8C;AAC9C,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC;IACjC,iBAAiB,EAAE,GAAG,CAAC,GAAG,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,wBAAwB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC/C,CAAC,CAAA;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAqDlE;AAED,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,KAAK,SAAS,GACV,MAAM,CAAC,SAAS,CAAC,SAAS,GAC1B,SAAS,CAAC,KAAK,CAAC,SAAS,GACzB,MAAM,CAAC,eAAe,CAAA;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAuBpE;AAED,MAAM,CAAC,OAAO,WAAW,WAAW,CAAC;IACnC,KAAK,SAAS,GACV,MAAM,CAAC,OAAO,CAAC,SAAS,GACxB,SAAS,CAAC,IAAI,CAAC,SAAS,GACxB,MAAM,CAAC,eAAe,CAAA;CAC3B"}
|
package/package.json
CHANGED
package/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** @internal */
|
|
2
|
-
export const version = '0.14.
|
|
2
|
+
export const version = '0.14.11'
|
package/webauthn/Credential.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as Base64 from '../core/Base64.js'
|
|
2
|
+
import * as Cbor from '../core/Cbor.js'
|
|
2
3
|
import type * as Errors from '../core/Errors.js'
|
|
3
4
|
import type * as Hex from '../core/Hex.js'
|
|
4
5
|
import type { Compute } from '../core/internal/types.js'
|
|
@@ -68,6 +69,20 @@ export function serialize(credential: Credential): Credential<true> {
|
|
|
68
69
|
response[key] = Base64.fromBytes(new Uint8Array(value), base64UrlOptions)
|
|
69
70
|
}
|
|
70
71
|
|
|
72
|
+
// Some browsers/passkey providers (e.g. Firefox + 1Password) don't expose
|
|
73
|
+
// `authenticatorData` on the response object. Fall back to extracting it
|
|
74
|
+
// from the CBOR-encoded `attestationObject` which always contains `authData`.
|
|
75
|
+
if (!response.authenticatorData) {
|
|
76
|
+
const attestation = Cbor.decode<{ authData: Uint8Array }>(
|
|
77
|
+
new Uint8Array(attestationObject),
|
|
78
|
+
)
|
|
79
|
+
if (attestation.authData)
|
|
80
|
+
response.authenticatorData = Base64.fromBytes(
|
|
81
|
+
attestation.authData,
|
|
82
|
+
base64UrlOptions,
|
|
83
|
+
)
|
|
84
|
+
}
|
|
85
|
+
|
|
71
86
|
return {
|
|
72
87
|
attestationObject: Base64.fromBytes(
|
|
73
88
|
new Uint8Array(attestationObject),
|