@bitgo-beta/sdk-hmac 1.0.0-alpha.237 → 1.0.0-alpha.239
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/src/browser.d.ts +4 -0
- package/dist/src/browser.d.ts.map +1 -0
- package/dist/src/browser.js +20 -0
- package/dist/src/defaultStrategy.d.ts +11 -0
- package/dist/src/defaultStrategy.d.ts.map +1 -0
- package/dist/src/defaultStrategy.js +21 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/indexedDbTokenStore.d.ts +12 -0
- package/dist/src/indexedDbTokenStore.d.ts.map +1 -0
- package/dist/src/indexedDbTokenStore.js +79 -0
- package/dist/src/types.d.ts +54 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +1 -1
- package/dist/src/webCryptoStrategy.d.ts +75 -0
- package/dist/src/webCryptoStrategy.d.ts.map +1 -0
- package/dist/src/webCryptoStrategy.js +189 -0
- package/package.json +20 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./index"), exports);
|
|
18
|
+
__exportStar(require("./indexedDbTokenStore"), exports);
|
|
19
|
+
__exportStar(require("./webCryptoStrategy"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9icm93c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBd0I7QUFDeEIsd0RBQXNDO0FBQ3RDLHNEQUFvQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmRleGVkRGJUb2tlblN0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vd2ViQ3J5cHRvU3RyYXRlZ3knO1xuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IHmacAuthStrategy, CalculateRequestHeadersOptions, RequestHeaders, VerifyResponseOptions, VerifyResponseInfo } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Default HMAC auth strategy that wraps the existing synchronous Node.js crypto
|
|
4
|
+
* functions. This is used when no custom strategy is provided to BitGoAPI.
|
|
5
|
+
*/
|
|
6
|
+
export declare class DefaultHmacAuthStrategy implements IHmacAuthStrategy {
|
|
7
|
+
calculateRequestHeaders(params: CalculateRequestHeadersOptions): Promise<RequestHeaders>;
|
|
8
|
+
verifyResponse(params: VerifyResponseOptions): Promise<VerifyResponseInfo>;
|
|
9
|
+
calculateHMAC(key: string, message: string): Promise<string>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=defaultStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultStrategy.d.ts","sourceRoot":"","sources":["../../src/defaultStrategy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,8BAA8B,EAC9B,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IACzD,uBAAuB,CAAC,MAAM,EAAE,8BAA8B,GAAG,OAAO,CAAC,cAAc,CAAC;IAIxF,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAI1E,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAGnE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DefaultHmacAuthStrategy = void 0;
|
|
4
|
+
const hmac_1 = require("./hmac");
|
|
5
|
+
/**
|
|
6
|
+
* Default HMAC auth strategy that wraps the existing synchronous Node.js crypto
|
|
7
|
+
* functions. This is used when no custom strategy is provided to BitGoAPI.
|
|
8
|
+
*/
|
|
9
|
+
class DefaultHmacAuthStrategy {
|
|
10
|
+
async calculateRequestHeaders(params) {
|
|
11
|
+
return (0, hmac_1.calculateRequestHeaders)(params);
|
|
12
|
+
}
|
|
13
|
+
async verifyResponse(params) {
|
|
14
|
+
return (0, hmac_1.verifyResponse)(params);
|
|
15
|
+
}
|
|
16
|
+
async calculateHMAC(key, message) {
|
|
17
|
+
return (0, hmac_1.calculateHMAC)(key, message);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.DefaultHmacAuthStrategy = DefaultHmacAuthStrategy;
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdFN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RlZmF1bHRTdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBZ0Y7QUFTaEY7OztHQUdHO0FBQ0gsTUFBYSx1QkFBdUI7SUFDbEMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLE1BQXNDO1FBQ2xFLE9BQU8sSUFBQSw4QkFBdUIsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUE2QjtRQUNoRCxPQUFPLElBQUEscUJBQWMsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFXLEVBQUUsT0FBZTtRQUM5QyxPQUFPLElBQUEsb0JBQWEsRUFBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBWkQsMERBWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjYWxjdWxhdGVSZXF1ZXN0SGVhZGVycywgY2FsY3VsYXRlSE1BQywgdmVyaWZ5UmVzcG9uc2UgfSBmcm9tICcuL2htYWMnO1xuaW1wb3J0IHR5cGUge1xuICBJSG1hY0F1dGhTdHJhdGVneSxcbiAgQ2FsY3VsYXRlUmVxdWVzdEhlYWRlcnNPcHRpb25zLFxuICBSZXF1ZXN0SGVhZGVycyxcbiAgVmVyaWZ5UmVzcG9uc2VPcHRpb25zLFxuICBWZXJpZnlSZXNwb25zZUluZm8sXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIERlZmF1bHQgSE1BQyBhdXRoIHN0cmF0ZWd5IHRoYXQgd3JhcHMgdGhlIGV4aXN0aW5nIHN5bmNocm9ub3VzIE5vZGUuanMgY3J5cHRvXG4gKiBmdW5jdGlvbnMuIFRoaXMgaXMgdXNlZCB3aGVuIG5vIGN1c3RvbSBzdHJhdGVneSBpcyBwcm92aWRlZCB0byBCaXRHb0FQSS5cbiAqL1xuZXhwb3J0IGNsYXNzIERlZmF1bHRIbWFjQXV0aFN0cmF0ZWd5IGltcGxlbWVudHMgSUhtYWNBdXRoU3RyYXRlZ3kge1xuICBhc3luYyBjYWxjdWxhdGVSZXF1ZXN0SGVhZGVycyhwYXJhbXM6IENhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzT3B0aW9ucyk6IFByb21pc2U8UmVxdWVzdEhlYWRlcnM+IHtcbiAgICByZXR1cm4gY2FsY3VsYXRlUmVxdWVzdEhlYWRlcnMocGFyYW1zKTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVJlc3BvbnNlKHBhcmFtczogVmVyaWZ5UmVzcG9uc2VPcHRpb25zKTogUHJvbWlzZTxWZXJpZnlSZXNwb25zZUluZm8+IHtcbiAgICByZXR1cm4gdmVyaWZ5UmVzcG9uc2UocGFyYW1zKTtcbiAgfVxuXG4gIGFzeW5jIGNhbGN1bGF0ZUhNQUMoa2V5OiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGNhbGN1bGF0ZUhNQUMoa2V5LCBtZXNzYWdlKTtcbiAgfVxufVxuIl19
|
package/dist/src/index.d.ts
CHANGED
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -18,4 +18,5 @@ __exportStar(require("./hmac"), exports);
|
|
|
18
18
|
__exportStar(require("./hmacv4"), exports);
|
|
19
19
|
__exportStar(require("./util"), exports);
|
|
20
20
|
__exportStar(require("./types"), exports);
|
|
21
|
-
|
|
21
|
+
__exportStar(require("./defaultStrategy"), exports);
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUF1QjtBQUN2QiwyQ0FBeUI7QUFDekIseUNBQXVCO0FBQ3ZCLDBDQUF3QjtBQUN4QixvREFBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2htYWMnO1xuZXhwb3J0ICogZnJvbSAnLi9obWFjdjQnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWZhdWx0U3RyYXRlZ3knO1xuIl19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CryptoSigning, ITokenStore } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Persists {@link CryptoSigning} material in the browser's IndexedDB.
|
|
4
|
+
* The raw bearer token is never stored — only the non-extractable CryptoKey
|
|
5
|
+
* and the SHA-256 token hash are persisted via the structured clone algorithm.
|
|
6
|
+
*/
|
|
7
|
+
export declare class IndexedDbTokenStore implements ITokenStore {
|
|
8
|
+
save(signing: CryptoSigning): Promise<void>;
|
|
9
|
+
load(): Promise<CryptoSigning | null>;
|
|
10
|
+
remove(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=indexedDbTokenStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexedDbTokenStore.d.ts","sourceRoot":"","sources":["../../src/indexedDbTokenStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAwE1D;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IAC/C,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,IAAI,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAIrC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAG9B"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IndexedDbTokenStore = void 0;
|
|
4
|
+
const CRYPTO_DB_NAME = 'bitgo-auth';
|
|
5
|
+
const CRYPTO_STORE_NAME = 'crypto-signing';
|
|
6
|
+
const CRYPTO_RECORD_KEY = 'current';
|
|
7
|
+
function hasIndexedDB() {
|
|
8
|
+
return typeof indexedDB !== 'undefined';
|
|
9
|
+
}
|
|
10
|
+
function openCryptoDb() {
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
const request = indexedDB.open(CRYPTO_DB_NAME, 1);
|
|
13
|
+
request.onupgradeneeded = () => {
|
|
14
|
+
const db = request.result;
|
|
15
|
+
if (!db.objectStoreNames.contains(CRYPTO_STORE_NAME)) {
|
|
16
|
+
db.createObjectStore(CRYPTO_STORE_NAME);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
request.onsuccess = () => resolve(request.result);
|
|
20
|
+
request.onerror = () => reject(request.error);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
async function withDb(fn) {
|
|
24
|
+
const db = await openCryptoDb();
|
|
25
|
+
try {
|
|
26
|
+
return await fn(db);
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
db.close();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function persistCryptoSigning(signing) {
|
|
33
|
+
if (!hasIndexedDB())
|
|
34
|
+
return;
|
|
35
|
+
await withDb((db) => new Promise((resolve, reject) => {
|
|
36
|
+
const tx = db.transaction(CRYPTO_STORE_NAME, 'readwrite');
|
|
37
|
+
tx.objectStore(CRYPTO_STORE_NAME).put(signing, CRYPTO_RECORD_KEY);
|
|
38
|
+
tx.oncomplete = () => resolve();
|
|
39
|
+
tx.onerror = () => reject(tx.error);
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
async function loadCryptoSigning() {
|
|
43
|
+
if (!hasIndexedDB())
|
|
44
|
+
return null;
|
|
45
|
+
return withDb((db) => new Promise((resolve, reject) => {
|
|
46
|
+
const tx = db.transaction(CRYPTO_STORE_NAME, 'readonly');
|
|
47
|
+
const request = tx.objectStore(CRYPTO_STORE_NAME).get(CRYPTO_RECORD_KEY);
|
|
48
|
+
request.onsuccess = () => resolve(request.result ?? null);
|
|
49
|
+
request.onerror = () => reject(request.error);
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
async function removeCryptoSigning() {
|
|
53
|
+
if (!hasIndexedDB())
|
|
54
|
+
return;
|
|
55
|
+
await withDb((db) => new Promise((resolve, reject) => {
|
|
56
|
+
const tx = db.transaction(CRYPTO_STORE_NAME, 'readwrite');
|
|
57
|
+
tx.objectStore(CRYPTO_STORE_NAME).delete(CRYPTO_RECORD_KEY);
|
|
58
|
+
tx.oncomplete = () => resolve();
|
|
59
|
+
tx.onerror = () => reject(tx.error);
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Persists {@link CryptoSigning} material in the browser's IndexedDB.
|
|
64
|
+
* The raw bearer token is never stored — only the non-extractable CryptoKey
|
|
65
|
+
* and the SHA-256 token hash are persisted via the structured clone algorithm.
|
|
66
|
+
*/
|
|
67
|
+
class IndexedDbTokenStore {
|
|
68
|
+
async save(signing) {
|
|
69
|
+
await persistCryptoSigning(signing);
|
|
70
|
+
}
|
|
71
|
+
async load() {
|
|
72
|
+
return loadCryptoSigning();
|
|
73
|
+
}
|
|
74
|
+
async remove() {
|
|
75
|
+
await removeCryptoSigning();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.IndexedDbTokenStore = IndexedDbTokenStore;
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhlZERiVG9rZW5TdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleGVkRGJUb2tlblN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQztBQUNwQyxNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO0FBQzNDLE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDO0FBRXBDLFNBQVMsWUFBWTtJQUNuQixPQUFPLE9BQU8sU0FBUyxLQUFLLFdBQVcsQ0FBQztBQUMxQyxDQUFDO0FBRUQsU0FBUyxZQUFZO0lBQ25CLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEQsT0FBTyxDQUFDLGVBQWUsR0FBRyxHQUFHLEVBQUU7WUFDN0IsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUMxQixJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDLENBQUM7UUFDRixPQUFPLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsT0FBTyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELEtBQUssVUFBVSxNQUFNLENBQUksRUFBbUM7SUFDMUQsTUFBTSxFQUFFLEdBQUcsTUFBTSxZQUFZLEVBQUUs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O0NBQ0Y7QUFaRCxrREFZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ3J5cHRvU2lnbmluZywgSVRva2VuU3RvcmUgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQ1JZUFRPX0RCX05BTUUgPSAnYml0Z28tYXV0aCc7XG5jb25zdCBDUllQVE9fU1RPUkVfTkFNRSA9ICdjcnlwdG8tc2lnbmluZyc7XG5jb25zdCBDUllQVE9fUkVDT1JEX0tFWSA9ICdjdXJyZW50JztcblxuZnVuY3Rpb24gaGFzSW5kZXhlZERCKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIGluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCc7XG59XG5cbmZ1bmN0aW9uIG9wZW5DcnlwdG9EYigpOiBQcm9taXNlPElEQkRhdGFiYXNlPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKENSWVBUT19EQl9OQU1FLCAxKTtcbiAgICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGRiID0gcmVxdWVzdC5yZXN1bHQ7XG4gICAgICBpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoQ1JZUFRPX1NUT1JFX05BTUUpKSB7XG4gICAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKENSWVBUT19TVE9SRV9OQU1FKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdCk7XG4gICAgcmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2l0aERiPFQ+KGZuOiAoZGI6IElEQkRhdGFiYXNlKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGRiID0gYXdhaXQgb3BlbkNyeXB0b0RiKCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKGRiKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBkYi5jbG9zZSgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBlcnNpc3RDcnlwdG9TaWduaW5nKHNpZ25pbmc6IENyeXB0b1NpZ25pbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFoYXNJbmRleGVkREIoKSkgcmV0dXJuO1xuICBhd2FpdCB3aXRoRGIoXG4gICAgKGRiKSA9PlxuICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKENSWVBUT19TVE9SRV9OQU1FLCAncmVhZHdyaXRlJyk7XG4gICAgICAgIHR4Lm9iamVjdFN0b3JlKENSWVBUT19TVE9SRV9OQU1FKS5wdXQoc2lnbmluZywgQ1JZUFRPX1JFQ09SRF9LRVkpO1xuICAgICAgICB0eC5vbmNvbXBsZXRlID0gKCkgPT4gcmVzb2x2ZSgpO1xuICAgICAgICB0eC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHR4LmVycm9yKTtcbiAgICAgIH0pXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRDcnlwdG9TaWduaW5nKCk6IFByb21pc2U8Q3J5cHRvU2lnbmluZyB8IG51bGw+IHtcbiAgaWYgKCFoYXNJbmRleGVkREIoKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB3aXRoRGIoXG4gICAgKGRiKSA9PlxuICAgICAgbmV3IFByb21pc2U8Q3J5cHRvU2lnbmluZyB8IG51bGw+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgdHggPSBkYi50cmFuc2FjdGlvbihDUllQVE9fU1RPUkVfTkFNRSwgJ3JlYWRvbmx5Jyk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0eC5vYmplY3RTdG9yZShDUllQVE9fU1RPUkVfTkFNRSkuZ2V0KENSWVBUT19SRUNPUkRfS0VZKTtcbiAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKHJlcXVlc3QucmVzdWx0ID8/IG51bGwpO1xuICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7XG4gICAgICB9KVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZW1vdmVDcnlwdG9TaWduaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWhhc0luZGV4ZWREQigpKSByZXR1cm47XG4gIGF3YWl0IHdpdGhEYihcbiAgICAoZGIpID0+XG4gICAgICBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oQ1JZUFRPX1NUT1JFX05BTUUsICdyZWFkd3JpdGUnKTtcbiAgICAgICAgdHgub2JqZWN0U3RvcmUoQ1JZUFRPX1NUT1JFX05BTUUpLmRlbGV0ZShDUllQVE9fUkVDT1JEX0tFWSk7XG4gICAgICAgIHR4Lm9uY29tcGxldGUgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgICAgIHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QodHguZXJyb3IpO1xuICAgICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBQZXJzaXN0cyB7QGxpbmsgQ3J5cHRvU2lnbmluZ30gbWF0ZXJpYWwgaW4gdGhlIGJyb3dzZXIncyBJbmRleGVkREIuXG4gKiBUaGUgcmF3IGJlYXJlciB0b2tlbiBpcyBuZXZlciBzdG9yZWQg4oCUIG9ubHkgdGhlIG5vbi1leHRyYWN0YWJsZSBDcnlwdG9LZXlcbiAqIGFuZCB0aGUgU0hBLTI1NiB0b2tlbiBoYXNoIGFyZSBwZXJzaXN0ZWQgdmlhIHRoZSBzdHJ1Y3R1cmVkIGNsb25lIGFsZ29yaXRobS5cbiAqL1xuZXhwb3J0IGNsYXNzIEluZGV4ZWREYlRva2VuU3RvcmUgaW1wbGVtZW50cyBJVG9rZW5TdG9yZSB7XG4gIGFzeW5jIHNhdmUoc2lnbmluZzogQ3J5cHRvU2lnbmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHBlcnNpc3RDcnlwdG9TaWduaW5nKHNpZ25pbmcpO1xuICB9XG5cbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPENyeXB0b1NpZ25pbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIGxvYWRDcnlwdG9TaWduaW5nKCk7XG4gIH1cblxuICBhc3luYyByZW1vdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgcmVtb3ZlQ3J5cHRvU2lnbmluZygpO1xuICB9XG59XG4iXX0=
|
package/dist/src/types.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export interface CalculateRequestHeadersOptions<T extends string | Buffer = stri
|
|
|
23
23
|
method: (typeof supportedRequestMethods)[number];
|
|
24
24
|
authVersion: AuthVersion;
|
|
25
25
|
}
|
|
26
|
+
export type CalculateRequestHeadersWebCryptoOptions<T extends string | Buffer = string> = Omit<CalculateRequestHeadersOptions<T>, 'token'>;
|
|
26
27
|
export interface RequestHeaders {
|
|
27
28
|
hmac: string;
|
|
28
29
|
timestamp: number;
|
|
@@ -94,4 +95,57 @@ export interface VerifyV4ResponseInfo {
|
|
|
94
95
|
isInResponseValidityWindow: boolean;
|
|
95
96
|
verificationTime: number;
|
|
96
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Strategy interface for pluggable HMAC authentication.
|
|
100
|
+
*
|
|
101
|
+
* Implementations handle request signing, response verification, and general HMAC
|
|
102
|
+
* computation. All methods are async to support browser WebCrypto (crypto.subtle).
|
|
103
|
+
*
|
|
104
|
+
* The `token` field in params is provided for implementations that use it directly
|
|
105
|
+
* (e.g. DefaultHmacAuthStrategy). Implementations that manage their own key material
|
|
106
|
+
* (e.g. WebCryptoHmacStrategy with a CryptoKey) may ignore it.
|
|
107
|
+
*/
|
|
108
|
+
export interface IHmacAuthStrategy {
|
|
109
|
+
calculateRequestHeaders(params: CalculateRequestHeadersOptions): Promise<RequestHeaders>;
|
|
110
|
+
verifyResponse(params: VerifyResponseOptions): Promise<VerifyResponseInfo>;
|
|
111
|
+
calculateHMAC(key: string, message: string): Promise<string>;
|
|
112
|
+
/**
|
|
113
|
+
* Optional. Returns true if the strategy has its own signing material
|
|
114
|
+
* (e.g. a CryptoKey restored from IndexedDB) and can sign requests
|
|
115
|
+
* independently of BitGoAPI._token.
|
|
116
|
+
*
|
|
117
|
+
* When this returns true, BitGoAPI.requestPatch will delegate signing
|
|
118
|
+
* to the strategy even if no raw token string is available.
|
|
119
|
+
*/
|
|
120
|
+
isAuthenticated?(): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Optional token initialization & destruction methods.
|
|
123
|
+
*
|
|
124
|
+
* Strategies that read the token directly from request params
|
|
125
|
+
* (e.g. DefaultHmacAuthStrategy) may leave this unimplemented.
|
|
126
|
+
*
|
|
127
|
+
* Must be awaited — implementations may perform async key derivation.
|
|
128
|
+
*/
|
|
129
|
+
setToken?(token: string): Promise<void>;
|
|
130
|
+
clearToken?(): Promise<void>;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Opaque signing material derived from a bearer token.
|
|
134
|
+
* Stored in IndexedDB (CryptoKey is preserved via structured clone).
|
|
135
|
+
* The raw token is never persisted — only the non-extractable key and the hash.
|
|
136
|
+
*/
|
|
137
|
+
export type CryptoSigning = {
|
|
138
|
+
cryptoKey: CryptoKey;
|
|
139
|
+
tokenHash: string;
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* Pluggable persistence interface for {@link CryptoSigning} material.
|
|
143
|
+
* Allows different storage backends (IndexedDB, in-memory for tests) for
|
|
144
|
+
* persisting signing keys across page refreshes or app restarts.
|
|
145
|
+
*/
|
|
146
|
+
export interface ITokenStore {
|
|
147
|
+
save(signing: CryptoSigning): Promise<void>;
|
|
148
|
+
load(): Promise<CryptoSigning | null>;
|
|
149
|
+
remove(): Promise<void>;
|
|
150
|
+
}
|
|
97
151
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,sEAAuE,CAAC;AAE5G,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;AAEhC,MAAM,WAAW,2BAA2B,CAAC,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,2BAA2B,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;IACjD,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,8BAA8B,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM;IAChF,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;IACjD,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,8BAA8B,CAAC,CAAC,CAAC;IAClH,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM;IACpE,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,CAAC,CAAC;IACpB,0BAA0B,EAAE,OAAO,CAAC;IACpC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,6BAA8B,SAAQ,0BAA0B;IAC/E,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAE3C,MAAM,WAAW,gCAAgC;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B,EAAE,OAAO,CAAC;IACpC,gBAAgB,EAAE,MAAM,CAAC;CAC1B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.supportedRequestMethods = void 0;
|
|
4
4
|
exports.supportedRequestMethods = ['get', 'post', 'put', 'del', 'patch', 'options', 'delete'];
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSx1QkFBdUIsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHN1cHBvcnRlZFJlcXVlc3RNZXRob2RzID0gWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsJywgJ3BhdGNoJywgJ29wdGlvbnMnLCAnZGVsZXRlJ10gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEF1dGhWZXJzaW9uID0gMiB8IDM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsY3VsYXRlSG1hY1N1YmplY3RPcHRpb25zPFQ+IHtcbiAgdXJsUGF0aDogc3RyaW5nO1xuICB0ZXh0OiBUO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgbWV0aG9kOiAodHlwZW9mIHN1cHBvcnRlZFJlcXVlc3RNZXRob2RzKVtudW1iZXJdO1xuICBzdGF0dXNDb2RlPzogbnVtYmVyO1xuICBhdXRoVmVyc2lvbjogQXV0aFZlcnNpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsY3VsYXRlUmVxdWVzdEhtYWNPcHRpb25zPFQgZXh0ZW5kcyBzdHJpbmcgfCBCdWZmZXIgPSBzdHJpbmc+
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSx1QkFBdUIsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHN1cHBvcnRlZFJlcXVlc3RNZXRob2RzID0gWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsJywgJ3BhdGNoJywgJ29wdGlvbnMnLCAnZGVsZXRlJ10gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEF1dGhWZXJzaW9uID0gMiB8IDM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsY3VsYXRlSG1hY1N1YmplY3RPcHRpb25zPFQ+IHtcbiAgdXJsUGF0aDogc3RyaW5nO1xuICB0ZXh0OiBUO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgbWV0aG9kOiAodHlwZW9mIHN1cHBvcnRlZFJlcXVlc3RNZXRob2RzKVtudW1iZXJdO1xuICBzdGF0dXNDb2RlPzogbnVtYmVyO1xuICBhdXRoVmVyc2lvbjogQXV0aFZlcnNpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsY3VsYXRlUmVxdWVzdEhtYWNPcHRpb25zPFQgZXh0ZW5kcyBzdHJpbmcgfCBCdWZmZXIgPSBzdHJpbmc+IHtcbiAgdXJsOiBzdHJpbmc7XG4gIHRleHQ6IFQ7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICB0b2tlbjogc3RyaW5nO1xuICBtZXRob2Q6ICh0eXBlb2Ygc3VwcG9ydGVkUmVxdWVzdE1ldGhvZHMpW251bWJlcl07XG4gIGF1dGhWZXJzaW9uOiBBdXRoVmVyc2lvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxjdWxhdGVSZXF1ZXN0SGVhZGVyc09wdGlvbnM8VCBleHRlbmRzIHN0cmluZyB8IEJ1ZmZlciA9IHN0cmluZz4ge1xuICB1cmw6IHN0cmluZztcbiAgdGV4dDogVDtcbiAgdG9rZW46IHN0cmluZztcbiAgbWV0aG9kOiAodHlwZW9mIHN1cHBvcnRlZFJlcXVlc3RNZXRob2RzKVtudW1iZXJdO1xuICBhdXRoVmVyc2lvbjogQXV0aFZlcnNpb247XG59XG5cbmV4cG9ydCB0eXBlIENhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzV2ViQ3J5cHRvT3B0aW9uczxUIGV4dGVuZHMgc3RyaW5nIHwgQnVmZmVyID0gc3RyaW5nPiA9IE9taXQ8XG4gIENhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzT3B0aW9uczxUPixcbiAgJ3Rva2VuJ1xuPjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0SGVhZGVycyB7XG4gIGhtYWM6IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIHRva2VuSGFzaDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVJlc3BvbnNlT3B0aW9uczxUIGV4dGVuZHMgc3RyaW5nIHwgQnVmZmVyID0gc3RyaW5nPiBleHRlbmRzIENhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzT3B0aW9uczxUPiB7XG4gIGhtYWM6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIHRleHQ6IFQ7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBtZXRob2Q6ICh0eXBlb2Ygc3VwcG9ydGVkUmVxdWVzdE1ldGhvZHMpW251bWJlcl07XG4gIHN0YXR1c0NvZGU/OiBudW1iZXI7XG4gIGF1dGhWZXJzaW9uOiBBdXRoVmVyc2lvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlSZXNwb25zZUluZm88VCBleHRlbmRzIHN0cmluZyB8IEJ1ZmZlciA9IHN0cmluZz4ge1xuICBpc1ZhbGlkOiBib29sZWFuO1xuICBleHBlY3RlZEhtYWM6IHN0cmluZztcbiAgc2lnbmF0dXJlU3ViamVjdDogVDtcbiAgaXNJblJlc3BvbnNlVmFsaWRpdHlXaW5kb3c6IGJvb2xlYW47XG4gIHZlcmlmaWNhdGlvblRpbWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxjdWxhdGVWNFByZWltYWdlT3B0aW9ucyB7XG4gIHRpbWVzdGFtcFNlYzogbnVtYmVyO1xuICBtZXRob2Q6IHN0cmluZztcbiAgcGF0aFdpdGhRdWVyeTogc3RyaW5nO1xuICBib2R5SGFzaEhleDogc3RyaW5nO1xuICBhdXRoUmVxdWVzdElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsY3VsYXRlVjRSZXF1ZXN0SG1hY09wdGlvbnMgZXh0ZW5kcyBDYWxjdWxhdGVWNFByZWltYWdlT3B0aW9ucyB7XG4gIHJhd1Rva2VuOiBzdHJpbmc7XG59XG5cbmltcG9ydCB0eXBlIHsgSGFzaGFibGVEYXRhIH0gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBDYWxjdWxhdGVWNFJlcXVlc3RIZWFkZXJzT3B0aW9ucyB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBwYXRoV2l0aFF1ZXJ5OiBzdHJpbmc7XG4gIHJhd0JvZHk6IEhhc2hhYmxlRGF0YTtcbiAgcmF3VG9rZW46IHN0cmluZztcbiAgYXV0aFJlcXVlc3RJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhlYWRlcnMgZ2VuZXJhdGVkIGZvciBWNCBhdXRoZW50aWNhdGVkIHJlcXVlc3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFY0UmVxdWVzdEhlYWRlcnMge1xuICBobWFjOiBzdHJpbmc7XG4gIHRpbWVzdGFtcFNlYzogbnVtYmVyO1xuICBib2R5SGFzaEhleDogc3RyaW5nO1xuICBhdXRoUmVxdWVzdElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdmVyaWZ5aW5nIFY0IHJlc3BvbnNlIEhNQUMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5VjRSZXNwb25zZU9wdGlvbnMge1xuICBobWFjOiBzdHJpbmc7XG4gIHRpbWVzdGFtcFNlYzogbnVtYmVyO1xuICBtZXRob2Q6IHN0cmluZztcbiAgcGF0aFdpdGhRdWVyeTogc3RyaW5nO1xuICBib2R5SGFzaEhleDogc3RyaW5nO1xuICBhdXRoUmVxdWVzdElkOiBzdHJpbmc7XG4gIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgcmF3VG9rZW46IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgVjQgcmVzcG9uc2UgSE1BQyB2ZXJpZmljYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5VjRSZXNwb25zZUluZm8ge1xuICBpc1ZhbGlkOiBib29sZWFuO1xuICBleHBlY3RlZEhtYWM6IHN0cmluZztcbiAgcHJlaW1hZ2U6IHN0cmluZztcbiAgaXNJblJlc3BvbnNlVmFsaWRpdHlXaW5kb3c6IGJvb2xlYW47XG4gIHZlcmlmaWNhdGlvblRpbWU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBTdHJhdGVneSBpbnRlcmZhY2UgZm9yIHBsdWdnYWJsZSBITUFDIGF1dGhlbnRpY2F0aW9uLlxuICpcbiAqIEltcGxlbWVudGF0aW9ucyBoYW5kbGUgcmVxdWVzdCBzaWduaW5nLCByZXNwb25zZSB2ZXJpZmljYXRpb24sIGFuZCBnZW5lcmFsIEhNQUNcbiAqIGNvbXB1dGF0aW9uLiBBbGwgbWV0aG9kcyBhcmUgYXN5bmMgdG8gc3VwcG9ydCBicm93c2VyIFdlYkNyeXB0byAoY3J5cHRvLnN1YnRsZSkuXG4gKlxuICogVGhlIGB0b2tlbmAgZmllbGQgaW4gcGFyYW1zIGlzIHByb3ZpZGVkIGZvciBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgaXQgZGlyZWN0bHlcbiAqIChlLmcuIERlZmF1bHRIbWFjQXV0aFN0cmF0ZWd5KS4gSW1wbGVtZW50YXRpb25zIHRoYXQgbWFuYWdlIHRoZWlyIG93biBrZXkgbWF0ZXJpYWxcbiAqIChlLmcuIFdlYkNyeXB0b0htYWNTdHJhdGVneSB3aXRoIGEgQ3J5cHRvS2V5KSBtYXkgaWdub3JlIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElIbWFjQXV0aFN0cmF0ZWd5IHtcbiAgY2FsY3VsYXRlUmVxdWVzdEhlYWRlcnMocGFyYW1zOiBDYWxjdWxhdGVSZXF1ZXN0SGVhZGVyc09wdGlvbnMpOiBQcm9taXNlPFJlcXVlc3RIZWFkZXJzPjtcblxuICB2ZXJpZnlSZXNwb25zZShwYXJhbXM6IFZlcmlmeVJlc3BvbnNlT3B0aW9ucyk6IFByb21pc2U8VmVyaWZ5UmVzcG9uc2VJbmZvPjtcblxuICBjYWxjdWxhdGVITUFDKGtleTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsLiBSZXR1cm5zIHRydWUgaWYgdGhlIHN0cmF0ZWd5IGhhcyBpdHMgb3duIHNpZ25pbmcgbWF0ZXJpYWxcbiAgICogKGUuZy4gYSBDcnlwdG9LZXkgcmVzdG9yZWQgZnJvbSBJbmRleGVkREIpIGFuZCBjYW4gc2lnbiByZXF1ZXN0c1xuICAgKiBpbmRlcGVuZGVudGx5IG9mIEJpdEdvQVBJLl90b2tlbi5cbiAgICpcbiAgICogV2hlbiB0aGlzIHJldHVybnMgdHJ1ZSwgQml0R29BUEkucmVxdWVzdFBhdGNoIHdpbGwgZGVsZWdhdGUgc2lnbmluZ1xuICAgKiB0byB0aGUgc3RyYXRlZ3kgZXZlbiBpZiBubyByYXcgdG9rZW4gc3RyaW5nIGlzIGF2YWlsYWJsZS5cbiAgICovXG4gIGlzQXV0aGVudGljYXRlZD8oKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgdG9rZW4gaW5pdGlhbGl6YXRpb24gJiBkZXN0cnVjdGlvbiBtZXRob2RzLlxuICAgKlxuICAgKiBTdHJhdGVnaWVzIHRoYXQgcmVhZCB0aGUgdG9rZW4gZGlyZWN0bHkgZnJvbSByZXF1ZXN0IHBhcmFtc1xuICAgKiAoZS5nLiBEZWZhdWx0SG1hY0F1dGhTdHJhdGVneSkgbWF5IGxlYXZlIHRoaXMgdW5pbXBsZW1lbnRlZC5cbiAgICpcbiAgICogTXVzdCBiZSBhd2FpdGVkIOKAlCBpbXBsZW1lbnRhdGlvbnMgbWF5IHBlcmZvcm0gYXN5bmMga2V5IGRlcml2YXRpb24uXG4gICAqL1xuICBzZXRUb2tlbj8odG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gIGNsZWFyVG9rZW4/KCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogT3BhcXVlIHNpZ25pbmcgbWF0ZXJpYWwgZGVyaXZlZCBmcm9tIGEgYmVhcmVyIHRva2VuLlxuICogU3RvcmVkIGluIEluZGV4ZWREQiAoQ3J5cHRvS2V5IGlzIHByZXNlcnZlZCB2aWEgc3RydWN0dXJlZCBjbG9uZSkuXG4gKiBUaGUgcmF3IHRva2VuIGlzIG5ldmVyIHBlcnNpc3RlZCDigJQgb25seSB0aGUgbm9uLWV4dHJhY3RhYmxlIGtleSBhbmQgdGhlIGhhc2guXG4gKi9cbmV4cG9ydCB0eXBlIENyeXB0b1NpZ25pbmcgPSB7XG4gIGNyeXB0b0tleTogQ3J5cHRvS2V5O1xuICB0b2tlbkhhc2g6IHN0cmluZztcbn07XG5cbi8qKlxuICogUGx1Z2dhYmxlIHBlcnNpc3RlbmNlIGludGVyZmFjZSBmb3Ige0BsaW5rIENyeXB0b1NpZ25pbmd9IG1hdGVyaWFsLlxuICogQWxsb3dzIGRpZmZlcmVudCBzdG9yYWdlIGJhY2tlbmRzIChJbmRleGVkREIsIGluLW1lbW9yeSBmb3IgdGVzdHMpIGZvclxuICogcGVyc2lzdGluZyBzaWduaW5nIGtleXMgYWNyb3NzIHBhZ2UgcmVmcmVzaGVzIG9yIGFwcCByZXN0YXJ0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVG9rZW5TdG9yZSB7XG4gIHNhdmUoc2lnbmluZzogQ3J5cHRvU2lnbmluZyk6IFByb21pc2U8dm9pZD47XG4gIGxvYWQoKTogUHJvbWlzZTxDcnlwdG9TaWduaW5nIHwgbnVsbD47XG4gIHJlbW92ZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIl19
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-native HMAC auth strategy using the Web Crypto API.
|
|
3
|
+
*
|
|
4
|
+
* All browser API usage (crypto.subtle) is inside method bodies,
|
|
5
|
+
* so the module can be safely imported in any environment -- it only requires
|
|
6
|
+
* browser globals when methods are actually called.
|
|
7
|
+
*/
|
|
8
|
+
import type { AuthVersion, IHmacAuthStrategy, ITokenStore, CalculateRequestHeadersWebCryptoOptions, RequestHeaders, VerifyResponseOptions, VerifyResponseInfo } from './types';
|
|
9
|
+
export interface WebCryptoHmacStrategyOptions {
|
|
10
|
+
tokenStore?: ITokenStore;
|
|
11
|
+
authVersion?: AuthVersion;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* HMAC auth strategy using the browser's Web Crypto API (crypto.subtle).
|
|
15
|
+
*
|
|
16
|
+
* Usable both as an `IHmacAuthStrategy` for BitGoAPI and as a standalone
|
|
17
|
+
* utility for signing/verifying requests made with the browser `fetch()` API.
|
|
18
|
+
*
|
|
19
|
+
* Token lifecycle:
|
|
20
|
+
* - Call `setToken(rawToken)` after authentication to import the token as a
|
|
21
|
+
* non-extractable CryptoKey and persist it to the configured ITokenStore.
|
|
22
|
+
* - Call `restoreToken()` on page load to recover a previously stored token.
|
|
23
|
+
* - Call `clearToken()` on logout.
|
|
24
|
+
*/
|
|
25
|
+
export declare class WebCryptoHmacStrategy implements IHmacAuthStrategy {
|
|
26
|
+
private cryptoKey;
|
|
27
|
+
private tokenHashHex;
|
|
28
|
+
private tokenStore;
|
|
29
|
+
private authVersion;
|
|
30
|
+
constructor(options?: WebCryptoHmacStrategyOptions);
|
|
31
|
+
/**
|
|
32
|
+
* Import a raw bearer token: derives a non-extractable CryptoKey for HMAC
|
|
33
|
+
* signing, computes the SHA-256 token hash, and persists the
|
|
34
|
+
* {@link CryptoSigning} material (NOT the raw token) to the token store.
|
|
35
|
+
*/
|
|
36
|
+
setToken(rawToken: string): Promise<void>;
|
|
37
|
+
clearToken(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Attempt to restore signing material from the token store (e.g. IndexedDB).
|
|
40
|
+
* The stored {@link CryptoSigning} already contains the non-extractable
|
|
41
|
+
* CryptoKey and token hash — no raw token is involved.
|
|
42
|
+
* Returns true if signing material was successfully restored.
|
|
43
|
+
*/
|
|
44
|
+
restoreToken(): Promise<boolean>;
|
|
45
|
+
hasToken(): boolean;
|
|
46
|
+
isAuthenticated(): boolean;
|
|
47
|
+
calculateRequestHeaders(params: CalculateRequestHeadersWebCryptoOptions): Promise<RequestHeaders>;
|
|
48
|
+
verifyResponse(params: VerifyResponseOptions): Promise<VerifyResponseInfo>;
|
|
49
|
+
calculateHMAC(key: string, message: string): Promise<string>;
|
|
50
|
+
/**
|
|
51
|
+
* Returns a flat headers dict ready to spread into a `fetch()` init object.
|
|
52
|
+
*
|
|
53
|
+
* Example:
|
|
54
|
+
* ```
|
|
55
|
+
* const headers = await strategy.getAuthHeaders({ url, method: 'GET' });
|
|
56
|
+
* const response = await fetch(url, { headers });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
getAuthHeaders(params: {
|
|
60
|
+
url: string;
|
|
61
|
+
method: string;
|
|
62
|
+
body?: string;
|
|
63
|
+
}): Promise<Record<string, string>>;
|
|
64
|
+
/**
|
|
65
|
+
* Verify a browser Fetch `Response` object's HMAC.
|
|
66
|
+
*
|
|
67
|
+
* Clones the response to read the body text without consuming it.
|
|
68
|
+
*/
|
|
69
|
+
verifyFetchResponse(params: {
|
|
70
|
+
url: string;
|
|
71
|
+
method: string;
|
|
72
|
+
response: Response;
|
|
73
|
+
}): Promise<VerifyResponseInfo>;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=webCryptoStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webCryptoStrategy.d.ts","sourceRoot":"","sources":["../../src/webCryptoStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,uCAAuC,EACvC,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAiDjB,MAAM,WAAW,4BAA4B;IAC3C,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IAC7D,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,WAAW,CAAc;gBAErB,OAAO,CAAC,EAAE,4BAA4B;IAOlD;;;;OAIG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAUtC,QAAQ,IAAI,OAAO;IAInB,eAAe,IAAI,OAAO;IAMpB,uBAAuB,CAAC,MAAM,EAAE,uCAAuC,GAAG,OAAO,CAAC,cAAc,CAAC;IAgBjG,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8B1E,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOlE;;;;;;;;OAQG;IACG,cAAc,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAe7G;;;;OAIG;IACG,mBAAmB,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAcpH"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebCryptoHmacStrategy = void 0;
|
|
4
|
+
const hmac_1 = require("./hmac");
|
|
5
|
+
const indexedDbTokenStore_1 = require("./indexedDbTokenStore");
|
|
6
|
+
function arrayBufToHex(buffer) {
|
|
7
|
+
const bytes = new Uint8Array(buffer);
|
|
8
|
+
const hexParts = new Array(bytes.length);
|
|
9
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
10
|
+
hexParts[i] = bytes[i].toString(16).padStart(2, '0');
|
|
11
|
+
}
|
|
12
|
+
return hexParts.join('');
|
|
13
|
+
}
|
|
14
|
+
async function webCryptoHmacSign(key, data) {
|
|
15
|
+
const encoded = new TextEncoder().encode(data);
|
|
16
|
+
const sig = await crypto.subtle.sign('HMAC', key, encoded);
|
|
17
|
+
return arrayBufToHex(sig);
|
|
18
|
+
}
|
|
19
|
+
async function webCryptoImportHmacKey(rawKey) {
|
|
20
|
+
const encoded = new TextEncoder().encode(rawKey);
|
|
21
|
+
return crypto.subtle.importKey('raw', encoded, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Constant-time string comparison to prevent timing side-channel attacks.
|
|
25
|
+
* Browser-compatible polyfill for Node's `crypto.timingSafeEqual`.
|
|
26
|
+
*/
|
|
27
|
+
function timingSafeStringEqual(a, b) {
|
|
28
|
+
const aBytes = new TextEncoder().encode(a);
|
|
29
|
+
const bBytes = new TextEncoder().encode(b);
|
|
30
|
+
if (aBytes.length !== bBytes.length)
|
|
31
|
+
return false;
|
|
32
|
+
let result = 0;
|
|
33
|
+
for (let i = 0; i < aBytes.length; i++) {
|
|
34
|
+
result |= aBytes[i] ^ bBytes[i];
|
|
35
|
+
}
|
|
36
|
+
return result === 0;
|
|
37
|
+
}
|
|
38
|
+
async function webCryptoSha256Hex(data) {
|
|
39
|
+
const encoded = new TextEncoder().encode(data);
|
|
40
|
+
const hash = await crypto.subtle.digest('SHA-256', encoded);
|
|
41
|
+
return arrayBufToHex(hash);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* HMAC auth strategy using the browser's Web Crypto API (crypto.subtle).
|
|
45
|
+
*
|
|
46
|
+
* Usable both as an `IHmacAuthStrategy` for BitGoAPI and as a standalone
|
|
47
|
+
* utility for signing/verifying requests made with the browser `fetch()` API.
|
|
48
|
+
*
|
|
49
|
+
* Token lifecycle:
|
|
50
|
+
* - Call `setToken(rawToken)` after authentication to import the token as a
|
|
51
|
+
* non-extractable CryptoKey and persist it to the configured ITokenStore.
|
|
52
|
+
* - Call `restoreToken()` on page load to recover a previously stored token.
|
|
53
|
+
* - Call `clearToken()` on logout.
|
|
54
|
+
*/
|
|
55
|
+
class WebCryptoHmacStrategy {
|
|
56
|
+
constructor(options) {
|
|
57
|
+
this.cryptoKey = null;
|
|
58
|
+
this.tokenHashHex = null;
|
|
59
|
+
this.tokenStore = options?.tokenStore ?? new indexedDbTokenStore_1.IndexedDbTokenStore();
|
|
60
|
+
this.authVersion = options?.authVersion ?? 2;
|
|
61
|
+
}
|
|
62
|
+
// --- Token lifecycle ---------------------------------------------------
|
|
63
|
+
/**
|
|
64
|
+
* Import a raw bearer token: derives a non-extractable CryptoKey for HMAC
|
|
65
|
+
* signing, computes the SHA-256 token hash, and persists the
|
|
66
|
+
* {@link CryptoSigning} material (NOT the raw token) to the token store.
|
|
67
|
+
*/
|
|
68
|
+
async setToken(rawToken) {
|
|
69
|
+
this.cryptoKey = await webCryptoImportHmacKey(rawToken);
|
|
70
|
+
this.tokenHashHex = await webCryptoSha256Hex(rawToken);
|
|
71
|
+
await this.tokenStore.save({ cryptoKey: this.cryptoKey, tokenHash: this.tokenHashHex });
|
|
72
|
+
}
|
|
73
|
+
async clearToken() {
|
|
74
|
+
this.cryptoKey = null;
|
|
75
|
+
this.tokenHashHex = null;
|
|
76
|
+
await this.tokenStore.remove();
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Attempt to restore signing material from the token store (e.g. IndexedDB).
|
|
80
|
+
* The stored {@link CryptoSigning} already contains the non-extractable
|
|
81
|
+
* CryptoKey and token hash — no raw token is involved.
|
|
82
|
+
* Returns true if signing material was successfully restored.
|
|
83
|
+
*/
|
|
84
|
+
async restoreToken() {
|
|
85
|
+
const signing = await this.tokenStore.load();
|
|
86
|
+
if (signing) {
|
|
87
|
+
this.cryptoKey = signing.cryptoKey;
|
|
88
|
+
this.tokenHashHex = signing.tokenHash;
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
hasToken() {
|
|
94
|
+
return this.cryptoKey !== null && this.tokenHashHex !== null;
|
|
95
|
+
}
|
|
96
|
+
isAuthenticated() {
|
|
97
|
+
return this.hasToken();
|
|
98
|
+
}
|
|
99
|
+
// --- IHmacAuthStrategy implementation -----------------------------------
|
|
100
|
+
async calculateRequestHeaders(params) {
|
|
101
|
+
if (!this.cryptoKey || !this.tokenHashHex) {
|
|
102
|
+
throw new Error('No token available. Call setToken() or restoreToken() first.');
|
|
103
|
+
}
|
|
104
|
+
const timestamp = Date.now();
|
|
105
|
+
const subject = (0, hmac_1.calculateHMACSubject)({
|
|
106
|
+
urlPath: params.url,
|
|
107
|
+
text: params.text,
|
|
108
|
+
timestamp,
|
|
109
|
+
method: params.method,
|
|
110
|
+
authVersion: params.authVersion,
|
|
111
|
+
});
|
|
112
|
+
const hmac = await webCryptoHmacSign(this.cryptoKey, subject);
|
|
113
|
+
return { hmac, timestamp, tokenHash: this.tokenHashHex };
|
|
114
|
+
}
|
|
115
|
+
async verifyResponse(params) {
|
|
116
|
+
if (!this.cryptoKey) {
|
|
117
|
+
throw new Error('No token available. Call setToken() or restoreToken() first.');
|
|
118
|
+
}
|
|
119
|
+
const subject = (0, hmac_1.calculateHMACSubject)({
|
|
120
|
+
urlPath: params.url,
|
|
121
|
+
text: params.text,
|
|
122
|
+
timestamp: params.timestamp,
|
|
123
|
+
method: params.method,
|
|
124
|
+
statusCode: params.statusCode,
|
|
125
|
+
authVersion: params.authVersion,
|
|
126
|
+
});
|
|
127
|
+
const expectedHmac = await webCryptoHmacSign(this.cryptoKey, subject);
|
|
128
|
+
const now = Date.now();
|
|
129
|
+
const backwardValidityWindow = 1000 * 60 * 5;
|
|
130
|
+
const forwardValidityWindow = 1000 * 60;
|
|
131
|
+
const isInResponseValidityWindow = params.timestamp >= now - backwardValidityWindow && params.timestamp <= now + forwardValidityWindow;
|
|
132
|
+
return {
|
|
133
|
+
isValid: timingSafeStringEqual(expectedHmac, params.hmac),
|
|
134
|
+
expectedHmac,
|
|
135
|
+
signatureSubject: subject,
|
|
136
|
+
isInResponseValidityWindow,
|
|
137
|
+
verificationTime: now,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
async calculateHMAC(key, message) {
|
|
141
|
+
const cryptoKey = await webCryptoImportHmacKey(key);
|
|
142
|
+
return webCryptoHmacSign(cryptoKey, message);
|
|
143
|
+
}
|
|
144
|
+
// --- Convenience methods for standalone fetch() usage -------------------
|
|
145
|
+
/**
|
|
146
|
+
* Returns a flat headers dict ready to spread into a `fetch()` init object.
|
|
147
|
+
*
|
|
148
|
+
* Example:
|
|
149
|
+
* ```
|
|
150
|
+
* const headers = await strategy.getAuthHeaders({ url, method: 'GET' });
|
|
151
|
+
* const response = await fetch(url, { headers });
|
|
152
|
+
* ```
|
|
153
|
+
*/
|
|
154
|
+
async getAuthHeaders(params) {
|
|
155
|
+
const requestHeaders = await this.calculateRequestHeaders({
|
|
156
|
+
url: params.url,
|
|
157
|
+
method: params.method,
|
|
158
|
+
text: params.body ?? '',
|
|
159
|
+
authVersion: this.authVersion,
|
|
160
|
+
});
|
|
161
|
+
return {
|
|
162
|
+
'Auth-Timestamp': requestHeaders.timestamp.toString(),
|
|
163
|
+
Authorization: 'Bearer ' + requestHeaders.tokenHash,
|
|
164
|
+
HMAC: requestHeaders.hmac,
|
|
165
|
+
'BitGo-Auth-Version': this.authVersion === 3 ? '3.0' : '2.0',
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Verify a browser Fetch `Response` object's HMAC.
|
|
170
|
+
*
|
|
171
|
+
* Clones the response to read the body text without consuming it.
|
|
172
|
+
*/
|
|
173
|
+
async verifyFetchResponse(params) {
|
|
174
|
+
const cloned = params.response.clone();
|
|
175
|
+
const text = await cloned.text();
|
|
176
|
+
return this.verifyResponse({
|
|
177
|
+
url: params.url,
|
|
178
|
+
token: '',
|
|
179
|
+
method: params.method,
|
|
180
|
+
text,
|
|
181
|
+
hmac: params.response.headers.get('hmac') ?? '',
|
|
182
|
+
statusCode: params.response.status,
|
|
183
|
+
timestamp: parseInt(params.response.headers.get('timestamp') ?? '0', 10),
|
|
184
|
+
authVersion: this.authVersion,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
exports.WebCryptoHmacStrategy = WebCryptoHmacStrategy;
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViQ3J5cHRvU3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2ViQ3J5cHRvU3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZ0JBLGlDQUE4QztBQUM5QywrREFBNEQ7QUFFNUQsU0FBUyxhQUFhLENBQUMsTUFBbUI7SUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsTUFBTSxRQUFRLEdBQWEsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFFRCxLQUFLLFVBQVUsaUJBQWlCLENBQUMsR0FBYyxFQUFFLElBQVk7SUFDM0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNELE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCxLQUFLLFVBQVUsc0JBQXNCLENBQUMsTUFBYztJQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENB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LEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDeEUsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXhKRCxzREF3SkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJyb3dzZXItbmF0aXZlIEhNQUMgYXV0aCBzdHJhdGVneSB1c2luZyB0aGUgV2ViIENyeXB0byBBUEkuXG4gKlxuICogQWxsIGJyb3dzZXIgQVBJIHVzYWdlIChjcnlwdG8uc3VidGxlKSBpcyBpbnNpZGUgbWV0aG9kIGJvZGllcyxcbiAqIHNvIHRoZSBtb2R1bGUgY2FuIGJlIHNhZmVseSBpbXBvcnRlZCBpbiBhbnkgZW52aXJvbm1lbnQgLS0gaXQgb25seSByZXF1aXJlc1xuICogYnJvd3NlciBnbG9iYWxzIHdoZW4gbWV0aG9kcyBhcmUgYWN0dWFsbHkgY2FsbGVkLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIEF1dGhWZXJzaW9uLFxuICBJSG1hY0F1dGhTdHJhdGVneSxcbiAgSVRva2VuU3RvcmUsXG4gIENhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzV2ViQ3J5cHRvT3B0aW9ucyxcbiAgUmVxdWVzdEhlYWRlcnMsXG4gIFZlcmlmeVJlc3BvbnNlT3B0aW9ucyxcbiAgVmVyaWZ5UmVzcG9uc2VJbmZvLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGNhbGN1bGF0ZUhNQUNTdWJqZWN0IH0gZnJvbSAnLi9obWFjJztcbmltcG9ydCB7IEluZGV4ZWREYlRva2VuU3RvcmUgfSBmcm9tICcuL2luZGV4ZWREYlRva2VuU3RvcmUnO1xuXG5mdW5jdGlvbiBhcnJheUJ1ZlRvSGV4KGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xuICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gIGNvbnN0IGhleFBhcnRzOiBzdHJpbmdbXSA9IG5ldyBBcnJheShieXRlcy5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaGV4UGFydHNbaV0gPSBieXRlc1tpXS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKTtcbiAgfVxuICByZXR1cm4gaGV4UGFydHMuam9pbignJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdlYkNyeXB0b0htYWNTaWduKGtleTogQ3J5cHRvS2V5LCBkYXRhOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBlbmNvZGVkID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGRhdGEpO1xuICBjb25zdCBzaWcgPSBhd2FpdCBjcnlwdG8uc3VidGxlLnNpZ24oJ0hNQUMnLCBrZXksIGVuY29kZWQpO1xuICByZXR1cm4gYXJyYXlCdWZUb0hleChzaWcpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3ZWJDcnlwdG9JbXBvcnRIbWFjS2V5KHJhd0tleTogc3RyaW5nKTogUHJvbWlzZTxDcnlwdG9LZXk+IHtcbiAgY29uc3QgZW5jb2RlZCA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShyYXdLZXkpO1xuICByZXR1cm4gY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoJ3JhdycsIGVuY29kZWQsIHsgbmFtZTogJ0hNQUMnLCBoYXNoOiAnU0hBLTI1NicgfSwgZmFsc2UsIFsnc2lnbiddKTtcbn1cblxuLyoqXG4gKiBDb25zdGFudC10aW1lIHN0cmluZyBjb21wYXJpc29uIHRvIHByZXZlbnQgdGltaW5nIHNpZGUtY2hhbm5lbCBhdHRhY2tzLlxuICogQnJvd3Nlci1jb21wYXRpYmxlIHBvbHlmaWxsIGZvciBOb2RlJ3MgYGNyeXB0by50aW1pbmdTYWZlRXF1YWxgLlxuICovXG5mdW5jdGlvbiB0aW1pbmdTYWZlU3RyaW5nRXF1YWwoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgYUJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGEpO1xuICBjb25zdCBiQnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoYik7XG4gIGlmIChhQnl0ZXMubGVuZ3RoICE9PSBiQnl0ZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIGxldCByZXN1bHQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFCeXRlcy5sZW5ndGg7IGkrKykge1xuICAgIHJlc3VsdCB8PSBhQnl0ZXNbaV0gXiBiQnl0ZXNbaV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdCA9PT0gMDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2ViQ3J5cHRvU2hhMjU2SGV4KGRhdGE6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVuY29kZWQgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZGF0YSk7XG4gIGNvbnN0IGhhc2ggPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIGVuY29kZWQpO1xuICByZXR1cm4gYXJyYXlCdWZUb0hleChoYXNoKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBXZWJDcnlwdG8gSE1BQyBTdHJhdGVneVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQ3J5cHRvSG1hY1N0cmF0ZWd5T3B0aW9ucyB7XG4gIHRva2VuU3RvcmU/OiBJVG9rZW5TdG9yZTtcbiAgYXV0aFZlcnNpb24/OiBBdXRoVmVyc2lvbjtcbn1cblxuLyoqXG4gKiBITUFDIGF1dGggc3RyYXRlZ3kgdXNpbmcgdGhlIGJyb3dzZXIncyBXZWIgQ3J5cHRvIEFQSSAoY3J5cHRvLnN1YnRsZSkuXG4gKlxuICogVXNhYmxlIGJvdGggYXMgYW4gYElIbWFjQXV0aFN0cmF0ZWd5YCBmb3IgQml0R29BUEkgYW5kIGFzIGEgc3RhbmRhbG9uZVxuICogdXRpbGl0eSBmb3Igc2lnbmluZy92ZXJpZnlpbmcgcmVxdWVzdHMgbWFkZSB3aXRoIHRoZSBicm93c2VyIGBmZXRjaCgpYCBBUEkuXG4gKlxuICogVG9rZW4gbGlmZWN5Y2xlOlxuICogIC0gQ2FsbCBgc2V0VG9rZW4ocmF3VG9rZW4pYCBhZnRlciBhdXRoZW50aWNhdGlvbiB0byBpbXBvcnQgdGhlIHRva2VuIGFzIGFcbiAqICAgIG5vbi1leHRyYWN0YWJsZSBDcnlwdG9LZXkgYW5kIHBlcnNpc3QgaXQgdG8gdGhlIGNvbmZpZ3VyZWQgSVRva2VuU3RvcmUuXG4gKiAgLSBDYWxsIGByZXN0b3JlVG9rZW4oKWAgb24gcGFnZSBsb2FkIHRvIHJlY292ZXIgYSBwcmV2aW91c2x5IHN0b3JlZCB0b2tlbi5cbiAqICAtIENhbGwgYGNsZWFyVG9rZW4oKWAgb24gbG9nb3V0LlxuICovXG5leHBvcnQgY2xhc3MgV2ViQ3J5cHRvSG1hY1N0cmF0ZWd5IGltcGxlbWVudHMgSUhtYWNBdXRoU3RyYXRlZ3kge1xuICBwcml2YXRlIGNyeXB0b0tleTogQ3J5cHRvS2V5IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdG9rZW5IYXNoSGV4OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0b2tlblN0b3JlOiBJVG9rZW5TdG9yZTtcbiAgcHJpdmF0ZSBhdXRoVmVyc2lvbjogQXV0aFZlcnNpb247XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IFdlYkNyeXB0b0htYWNTdHJhdGVneU9wdGlvbnMpIHtcbiAgICB0aGlzLnRva2VuU3RvcmUgPSBvcHRpb25zPy50b2tlblN0b3JlID8/IG5ldyBJbmRleGVkRGJUb2tlblN0b3JlKCk7XG4gICAgdGhpcy5hdXRoVmVyc2lvbiA9IG9wdGlvbnM/LmF1dGhWZXJzaW9uID8/IDI7XG4gIH1cblxuICAvLyAtLS0gVG9rZW4gbGlmZWN5Y2xlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSByYXcgYmVhcmVyIHRva2VuOiBkZXJpdmVzIGEgbm9uLWV4dHJhY3RhYmxlIENyeXB0b0tleSBmb3IgSE1BQ1xuICAgKiBzaWduaW5nLCBjb21wdXRlcyB0aGUgU0hBLTI1NiB0b2tlbiBoYXNoLCBhbmQgcGVyc2lzdHMgdGhlXG4gICAqIHtAbGluayBDcnlwdG9TaWduaW5nfSBtYXRlcmlhbCAoTk9UIHRoZSByYXcgdG9rZW4pIHRvIHRoZSB0b2tlbiBzdG9yZS5cbiAgICovXG4gIGFzeW5jIHNldFRva2VuKHJhd1Rva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNyeXB0b0tleSA9IGF3YWl0IHdlYkNyeXB0b0ltcG9ydEhtYWNLZXkocmF3VG9rZW4pO1xuICAgIHRoaXMudG9rZW5IYXNoSGV4ID0gYXdhaXQgd2ViQ3J5cHRvU2hhMjU2SGV4KHJhd1Rva2VuKTtcbiAgICBhd2FpdCB0aGlzLnRva2VuU3RvcmUuc2F2ZSh7IGNyeXB0b0tleTogdGhpcy5jcnlwdG9LZXksIHRva2VuSGFzaDogdGhpcy50b2tlbkhhc2hIZXggfSk7XG4gIH1cblxuICBhc3luYyBjbGVhclRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY3J5cHRvS2V5ID0gbnVsbDtcbiAgICB0aGlzLnRva2VuSGFzaEhleCA9IG51bGw7XG4gICAgYXdhaXQgdGhpcy50b2tlblN0b3JlLnJlbW92ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gcmVzdG9yZSBzaWduaW5nIG1hdGVyaWFsIGZyb20gdGhlIHRva2VuIHN0b3JlIChlLmcuIEluZGV4ZWREQikuXG4gICAqIFRoZSBzdG9yZWQge0BsaW5rIENyeXB0b1NpZ25pbmd9IGFscmVhZHkgY29udGFpbnMgdGhlIG5vbi1leHRyYWN0YWJsZVxuICAgKiBDcnlwdG9LZXkgYW5kIHRva2VuIGhhc2gg4oCUIG5vIHJhdyB0b2tlbiBpcyBpbnZvbHZlZC5cbiAgICogUmV0dXJucyB0cnVlIGlmIHNpZ25pbmcgbWF0ZXJpYWwgd2FzIHN1Y2Nlc3NmdWxseSByZXN0b3JlZC5cbiAgICovXG4gIGFzeW5jIHJlc3RvcmVUb2tlbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBzaWduaW5nID0gYXdhaXQgdGhpcy50b2tlblN0b3JlLmxvYWQoKTtcbiAgICBpZiAoc2lnbmluZykge1xuICAgICAgdGhpcy5jcnlwdG9LZXkgPSBzaWduaW5nLmNyeXB0b0tleTtcbiAgICAgIHRoaXMudG9rZW5IYXNoSGV4ID0gc2lnbmluZy50b2tlbkhhc2g7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaGFzVG9rZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3J5cHRvS2V5ICE9PSBudWxsICYmIHRoaXMudG9rZW5IYXNoSGV4ICE9PSBudWxsO1xuICB9XG5cbiAgaXNBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc1Rva2VuKCk7XG4gIH1cblxuICAvLyAtLS0gSUhtYWNBdXRoU3RyYXRlZ3kgaW1wbGVtZW50YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBhc3luYyBjYWxjdWxhdGVSZXF1ZXN0SGVhZGVycyhwYXJhbXM6IENhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzV2ViQ3J5cHRvT3B0aW9ucyk6IFByb21pc2U8UmVxdWVzdEhlYWRlcnM+IHtcbiAgICBpZiAoIXRoaXMuY3J5cHRvS2V5IHx8ICF0aGlzLnRva2VuSGFzaEhleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB0b2tlbiBhdmFpbGFibGUuIENhbGwgc2V0VG9rZW4oKSBvciByZXN0b3JlVG9rZW4oKSBmaXJzdC4nKTtcbiAgICB9XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJqZWN0ID0gY2FsY3VsYXRlSE1BQ1N1YmplY3Qoe1xuICAgICAgdXJsUGF0aDogcGFyYW1zLnVybCxcbiAgICAgIHRleHQ6IHBhcmFtcy50ZXh0LFxuICAgICAgdGltZXN0YW1wLFxuICAgICAgbWV0aG9kOiBwYXJhbXMubWV0aG9kLFxuICAgICAgYXV0aFZlcnNpb246IHBhcmFtcy5hdXRoVmVyc2lvbixcbiAgICB9KTtcbiAgICBjb25zdCBobWFjID0gYXdhaXQgd2ViQ3J5cHRvSG1hY1NpZ24odGhpcy5jcnlwdG9LZXksIHN1YmplY3QpO1xuICAgIHJldHVybiB7IGhtYWMsIHRpbWVzdGFtcCwgdG9rZW5IYXNoOiB0aGlzLnRva2VuSGFzaEhleCB9O1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5UmVzcG9uc2UocGFyYW1zOiBWZXJpZnlSZXNwb25zZU9wdGlvbnMpOiBQcm9taXNlPFZlcmlmeVJlc3BvbnNlSW5mbz4ge1xuICAgIGlmICghdGhpcy5jcnlwdG9LZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdG9rZW4gYXZhaWxhYmxlLiBDYWxsIHNldFRva2VuKCkgb3IgcmVzdG9yZVRva2VuKCkgZmlyc3QuJyk7XG4gICAgfVxuICAgIGNvbnN0IHN1YmplY3QgPSBjYWxjdWxhdGVITUFDU3ViamVjdCh7XG4gICAgICB1cmxQYXRoOiBwYXJhbXMudXJsLFxuICAgICAgdGV4dDogcGFyYW1zLnRleHQsXG4gICAgICB0aW1lc3RhbXA6IHBhcmFtcy50aW1lc3RhbXAsXG4gICAgICBtZXRob2Q6IHBhcmFtcy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBwYXJhbXMuc3RhdHVzQ29kZSxcbiAgICAgIGF1dGhWZXJzaW9uOiBwYXJhbXMuYXV0aFZlcnNpb24sXG4gICAgfSk7XG5cbiAgICBjb25zdCBleHBlY3RlZEhtYWMgPSBhd2FpdCB3ZWJDcnlwdG9IbWFjU2lnbih0aGlzLmNyeXB0b0tleSwgc3ViamVjdCk7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGJhY2t3YXJkVmFsaWRpdHlXaW5kb3cgPSAxMDAwICogNjAgKiA1O1xuICAgIGNvbnN0IGZvcndhcmRWYWxpZGl0eVdpbmRvdyA9IDEwMDAgKiA2MDtcbiAgICBjb25zdCBpc0luUmVzcG9uc2VWYWxpZGl0eVdpbmRvdyA9XG4gICAgICBwYXJhbXMudGltZXN0YW1wID49IG5vdyAtIGJhY2t3YXJkVmFsaWRpdHlXaW5kb3cgJiYgcGFyYW1zLnRpbWVzdGFtcCA8PSBub3cgKyBmb3J3YXJkVmFsaWRpdHlXaW5kb3c7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogdGltaW5nU2FmZVN0cmluZ0VxdWFsKGV4cGVjdGVkSG1hYywgcGFyYW1zLmhtYWMpLFxuICAgICAgZXhwZWN0ZWRIbWFjLFxuICAgICAgc2lnbmF0dXJlU3ViamVjdDogc3ViamVjdCBhcyBWZXJpZnlSZXNwb25zZUluZm9bJ3NpZ25hdHVyZVN1YmplY3QnXSxcbiAgICAgIGlzSW5SZXNwb25zZVZhbGlkaXR5V2luZG93LFxuICAgICAgdmVyaWZpY2F0aW9uVGltZTogbm93LFxuICAgIH07XG4gIH1cblxuICBhc3luYyBjYWxjdWxhdGVITUFDKGtleTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGNyeXB0b0tleSA9IGF3YWl0IHdlYkNyeXB0b0ltcG9ydEhtYWNLZXkoa2V5KTtcbiAgICByZXR1cm4gd2ViQ3J5cHRvSG1hY1NpZ24oY3J5cHRvS2V5LCBtZXNzYWdlKTtcbiAgfVxuXG4gIC8vIC0tLSBDb252ZW5pZW5jZSBtZXRob2RzIGZvciBzdGFuZGFsb25lIGZldGNoKCkgdXNhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZmxhdCBoZWFkZXJzIGRpY3QgcmVhZHkgdG8gc3ByZWFkIGludG8gYSBgZmV0Y2goKWAgaW5pdCBvYmplY3QuXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYFxuICAgKiBjb25zdCBoZWFkZXJzID0gYXdhaXQgc3RyYXRlZ3kuZ2V0QXV0aEhlYWRlcnMoeyB1cmwsIG1ldGhvZDogJ0dFVCcgfSk7XG4gICAqIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnMgfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2V0QXV0aEhlYWRlcnMocGFyYW1zOiB7IHVybDogc3RyaW5nOyBtZXRob2Q6IHN0cmluZzsgYm9keT86IHN0cmluZyB9KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBhd2FpdCB0aGlzLmNhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzKHtcbiAgICAgIHVybDogcGFyYW1zLnVybCxcbiAgICAgIG1ldGhvZDogcGFyYW1zLm1ldGhvZCBhcyBDYWxjdWxhdGVSZXF1ZXN0SGVhZGVyc1dlYkNyeXB0b09wdGlvbnNbJ21ldGhvZCddLFxuICAgICAgdGV4dDogcGFyYW1zLmJvZHkgPz8gJycsXG4gICAgICBhdXRoVmVyc2lvbjogdGhpcy5hdXRoVmVyc2lvbixcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgJ0F1dGgtVGltZXN0YW1wJzogcmVxdWVzdEhlYWRlcnMudGltZXN0YW1wLnRvU3RyaW5nKCksXG4gICAgICBBdXRob3JpemF0aW9uOiAnQmVhcmVyICcgKyByZXF1ZXN0SGVhZGVycy50b2tlbkhhc2gsXG4gICAgICBITUFDOiByZXF1ZXN0SGVhZGVycy5obWFjLFxuICAgICAgJ0JpdEdvLUF1dGgtVmVyc2lvbic6IHRoaXMuYXV0aFZlcnNpb24gPT09IDMgPyAnMy4wJyA6ICcyLjAnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IGEgYnJvd3NlciBGZXRjaCBgUmVzcG9uc2VgIG9iamVjdCdzIEhNQUMuXG4gICAqXG4gICAqIENsb25lcyB0aGUgcmVzcG9uc2UgdG8gcmVhZCB0aGUgYm9keSB0ZXh0IHdpdGhvdXQgY29uc3VtaW5nIGl0LlxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5RmV0Y2hSZXNwb25zZShwYXJhbXM6IHsgdXJsOiBzdHJpbmc7IG1ldGhvZDogc3RyaW5nOyByZXNwb25zZTogUmVzcG9uc2UgfSk6IFByb21pc2U8VmVyaWZ5UmVzcG9uc2VJbmZvPiB7XG4gICAgY29uc3QgY2xvbmVkID0gcGFyYW1zLnJlc3BvbnNlLmNsb25lKCk7XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IGNsb25lZC50ZXh0KCk7XG4gICAgcmV0dXJuIHRoaXMudmVyaWZ5UmVzcG9uc2Uoe1xuICAgICAgdXJsOiBwYXJhbXMudXJsLFxuICAgICAgdG9rZW46ICcnLFxuICAgICAgbWV0aG9kOiBwYXJhbXMubWV0aG9kIGFzIFZlcmlmeVJlc3BvbnNlT3B0aW9uc1snbWV0aG9kJ10sXG4gICAgICB0ZXh0LFxuICAgICAgaG1hYzogcGFyYW1zLnJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdobWFjJykgPz8gJycsXG4gICAgICBzdGF0dXNDb2RlOiBwYXJhbXMucmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgdGltZXN0YW1wOiBwYXJzZUludChwYXJhbXMucmVzcG9uc2UuaGVhZGVycy5nZXQoJ3RpbWVzdGFtcCcpID8/ICcwJywgMTApLFxuICAgICAgYXV0aFZlcnNpb246IHRoaXMuYXV0aFZlcnNpb24sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,9 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo-beta/sdk-hmac",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.239",
|
|
4
4
|
"description": "HMAC module for the BitGo SDK",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/src/index.d.ts",
|
|
10
|
+
"default": "./dist/src/index.js"
|
|
11
|
+
},
|
|
12
|
+
"./browser": {
|
|
13
|
+
"types": "./dist/src/browser.d.ts",
|
|
14
|
+
"default": "./dist/src/browser.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"typesVersions": {
|
|
18
|
+
"*": {
|
|
19
|
+
"browser": [
|
|
20
|
+
"./dist/src/browser.d.ts"
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
},
|
|
7
24
|
"scripts": {
|
|
8
25
|
"build": "yarn tsc --build --incremental --verbose .",
|
|
9
26
|
"fmt": "prettier --write .",
|
|
@@ -16,7 +33,7 @@
|
|
|
16
33
|
"prepare": "npm run build"
|
|
17
34
|
},
|
|
18
35
|
"dependencies": {
|
|
19
|
-
"@bitgo-beta/sjcl": "1.0.1-alpha.
|
|
36
|
+
"@bitgo-beta/sjcl": "1.0.1-alpha.436"
|
|
20
37
|
},
|
|
21
38
|
"devDependencies": {
|
|
22
39
|
"chai": "^4.3.6",
|
|
@@ -46,5 +63,5 @@
|
|
|
46
63
|
".ts"
|
|
47
64
|
]
|
|
48
65
|
},
|
|
49
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "c1dd8f6c0c46e94c24ceca32c4646808c13adfe3"
|
|
50
67
|
}
|