@ledgerhq/vault-common 2.3.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +14 -14
- package/CHANGELOG.md +6 -0
- package/lib/{chunk-PT5KX3QU.js → chunk-SDWFPIQ3.js} +8 -3
- package/lib/chunk-SDWFPIQ3.js.map +1 -0
- package/lib/createHSMBridge.d.ts +3 -1
- package/lib/createHSMBridge.js +2 -2
- package/lib/index.js +2 -2
- package/package.json +1 -1
- package/lib/chunk-PT5KX3QU.js.map +0 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @ledgerhq/vault-common@2.
|
|
2
|
+
> @ledgerhq/vault-common@2.4.0 build /home/runner/work/vault-ts/vault-ts/packages/common
|
|
3
3
|
> tsup
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: src/createHSMBridge.ts, src/index.ts, src/recipeManifest.ts, src/reviewAPIRequest.ts, src/utils.ts, src/crypto/utils.ts, src/types/index.ts
|
|
@@ -9,40 +9,40 @@
|
|
|
9
9
|
[34mCLI[39m Target: es2022
|
|
10
10
|
[34mCLI[39m Cleaning output folder
|
|
11
11
|
[34mCJS[39m Build start
|
|
12
|
-
[34mDTS[39m Build start
|
|
13
12
|
[32mCJS[39m [1mlib/createHSMBridge.js [22m[32m331.00 B[39m
|
|
14
13
|
[32mCJS[39m [1mlib/crypto/utils.js [22m[32m335.00 B[39m
|
|
15
14
|
[32mCJS[39m [1mlib/types/index.js [22m[32m329.00 B[39m
|
|
16
|
-
[32mCJS[39m [1mlib/chunk-PT5KX3QU.js [22m[32m3.52 KB[39m
|
|
17
|
-
[32mCJS[39m [1mlib/recipeManifest.js [22m[32m349.00 B[39m
|
|
18
15
|
[32mCJS[39m [1mlib/index.js [22m[32m121.00 KB[39m
|
|
19
|
-
[32mCJS[39m [1mlib/
|
|
16
|
+
[32mCJS[39m [1mlib/chunk-SDWFPIQ3.js [22m[32m3.59 KB[39m
|
|
17
|
+
[32mCJS[39m [1mlib/recipeManifest.js [22m[32m349.00 B[39m
|
|
20
18
|
[32mCJS[39m [1mlib/chunk-K34PJKKU.js [22m[32m17.80 KB[39m
|
|
19
|
+
[32mCJS[39m [1mlib/reviewAPIRequest.js [22m[32m365.00 B[39m
|
|
21
20
|
[32mCJS[39m [1mlib/chunk-KFDJBREO.js [22m[32m37.63 KB[39m
|
|
22
21
|
[32mCJS[39m [1mlib/chunk-ZRIXMEBK.js [22m[32m3.39 KB[39m
|
|
23
22
|
[32mCJS[39m [1mlib/utils.js [22m[32m1.20 KB[39m
|
|
24
23
|
[32mCJS[39m [1mlib/chunk-3TPBAEKC.js [22m[32m29.83 KB[39m
|
|
24
|
+
[32mCJS[39m [1mlib/chunk-3L2XDBZ2.js [22m[32m8.65 KB[39m
|
|
25
25
|
[32mCJS[39m [1mlib/chunk-66ODLOZL.js [22m[32m396.00 B[39m
|
|
26
26
|
[32mCJS[39m [1mlib/chunk-PZ5AY32C.js [22m[32m314.00 B[39m
|
|
27
|
-
[32mCJS[39m [1mlib/chunk-3L2XDBZ2.js [22m[32m8.65 KB[39m
|
|
28
27
|
[32mCJS[39m [1mlib/createHSMBridge.js.map [22m[32m293.00 B[39m
|
|
29
|
-
[32mCJS[39m [1mlib/types/index.js.map [22m[32m269.00 B[39m
|
|
30
|
-
[32mCJS[39m [1mlib/chunk-PT5KX3QU.js.map [22m[32m6.86 KB[39m
|
|
31
|
-
[32mCJS[39m [1mlib/recipeManifest.js.map [22m[32m288.00 B[39m
|
|
32
28
|
[32mCJS[39m [1mlib/crypto/utils.js.map [22m[32m281.00 B[39m
|
|
29
|
+
[32mCJS[39m [1mlib/types/index.js.map [22m[32m269.00 B[39m
|
|
33
30
|
[32mCJS[39m [1mlib/index.js.map [22m[32m179.10 KB[39m
|
|
34
|
-
[32mCJS[39m [1mlib/
|
|
31
|
+
[32mCJS[39m [1mlib/chunk-SDWFPIQ3.js.map [22m[32m7.09 KB[39m
|
|
32
|
+
[32mCJS[39m [1mlib/recipeManifest.js.map [22m[32m288.00 B[39m
|
|
35
33
|
[32mCJS[39m [1mlib/chunk-K34PJKKU.js.map [22m[32m36.53 KB[39m
|
|
34
|
+
[32mCJS[39m [1mlib/reviewAPIRequest.js.map [22m[32m308.00 B[39m
|
|
36
35
|
[32mCJS[39m [1mlib/chunk-KFDJBREO.js.map [22m[32m71.66 KB[39m
|
|
37
36
|
[32mCJS[39m [1mlib/chunk-ZRIXMEBK.js.map [22m[32m5.19 KB[39m
|
|
38
37
|
[32mCJS[39m [1mlib/utils.js.map [22m[32m398.00 B[39m
|
|
39
38
|
[32mCJS[39m [1mlib/chunk-3TPBAEKC.js.map [22m[32m55.74 KB[39m
|
|
39
|
+
[32mCJS[39m [1mlib/chunk-3L2XDBZ2.js.map [22m[32m20.30 KB[39m
|
|
40
40
|
[32mCJS[39m [1mlib/chunk-66ODLOZL.js.map [22m[32m52.52 KB[39m
|
|
41
41
|
[32mCJS[39m [1mlib/chunk-PZ5AY32C.js.map [22m[32m479.00 B[39m
|
|
42
|
-
[32mCJS[39m
|
|
43
|
-
[
|
|
44
|
-
[32mDTS[39m ⚡️ Build success in
|
|
45
|
-
[32mDTS[39m [1mlib/createHSMBridge.d.ts [22m[
|
|
42
|
+
[32mCJS[39m ⚡️ Build success in 836ms
|
|
43
|
+
[34mDTS[39m Build start
|
|
44
|
+
[32mDTS[39m ⚡️ Build success in 11284ms
|
|
45
|
+
[32mDTS[39m [1mlib/createHSMBridge.d.ts [22m[32m984.00 B[39m
|
|
46
46
|
[32mDTS[39m [1mlib/index.d.ts [22m[32m12.96 KB[39m
|
|
47
47
|
[32mDTS[39m [1mlib/reviewAPIRequest.d.ts [22m[32m836.00 B[39m
|
|
48
48
|
[32mDTS[39m [1mlib/utils.d.ts [22m[32m1.96 KB[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -37,8 +37,13 @@ function createHSMBridge(options) {
|
|
|
37
37
|
await raw.put(`/compartments/${cid}/counters`, Buffer.from(data.counters, "hex"));
|
|
38
38
|
logger.success("Successfully restored compartment");
|
|
39
39
|
},
|
|
40
|
-
initCompartment: async ({
|
|
41
|
-
|
|
40
|
+
initCompartment: async ({
|
|
41
|
+
logger = _vaultutils.SILENT_LOGGER,
|
|
42
|
+
cid
|
|
43
|
+
} = {}) => {
|
|
44
|
+
const res = await hsmNetwork("POST", "/compartments", {
|
|
45
|
+
...cid !== void 0 ? { id: cid } : {}
|
|
46
|
+
});
|
|
42
47
|
logger.info(`Created compartment ${res.id}`);
|
|
43
48
|
return res.id;
|
|
44
49
|
},
|
|
@@ -80,4 +85,4 @@ var createHSMBridge_default = createHSMBridge;
|
|
|
80
85
|
|
|
81
86
|
|
|
82
87
|
exports.createHSMBridge_default = createHSMBridge_default;
|
|
83
|
-
//# sourceMappingURL=chunk-
|
|
88
|
+
//# sourceMappingURL=chunk-SDWFPIQ3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/vault-ts/vault-ts/packages/common/lib/chunk-SDWFPIQ3.js","../src/createHSMBridge.ts"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACA;ACJA,mDAA8B;AAC9B,4EAAkB;AAClB,4EAAkB;AAmClB,SAAS,eAAA,CAAgB,OAAA,EAA4C;AACnE,EAAA,MAAM,EAAE,qBAAA,EAAuB,eAAe,EAAA,EAAI,OAAA;AAElD,EAAA,MAAM,WAAA,EAAa,IAAI,eAAA,CAAM,KAAA,CAAM;AAAA,IACjC,IAAA,EAAM,OAAA,CAAQ,OAAA;AAAA,IACd,GAAA,EAAK,OAAA,CAAQ;AAAA,EACf,CAAC,CAAA;AAGD,EAAA,MAAM,YAAA,EAAc,OAAA,CAAQ,WAAA,CAAY,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AAE9D,EAAA,MAAM,kBAAA,EAAoB;AAAA,IACxB,OAAA,EAAS,WAAA;AAAA,IACT;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,EAAa,4CAAA,iBAA+B,CAAA;AAClD,EAAA,MAAM,IAAA,EAAM,eAAA,CAAM,MAAA,CAAO,EAAE,OAAA,EAAS,WAAA,EAAa,WAAW,CAAC,CAAA;AAE7D,EAAA,OAAO;AAAA,IACL,iBAAA,EAAmB,MAAA,CAAO,GAAA,EAAA,GAA+C;AACvE,MAAA,MAAM,CAAC,UAAA,EAAY,QAAQ,EAAA,EAAI,MAAM,OAAA,CAAQ,GAAA,CAAI;AAAA,QAC/C,GAAA,CAAI,GAAA,CAAY,CAAA,cAAA,EAAiB,GAAG,CAAA,WAAA,CAAA,EAAe,EAAE,YAAA,EAAc,cAAc,CAAC,CAAA;AAAA,QAClF,GAAA,CAAI,GAAA,CAAY,CAAA,cAAA,EAAiB,GAAG,CAAA,SAAA,CAAA,EAAa,EAAE,YAAA,EAAc,cAAc,CAAC;AAAA,MAClF,CAAC,CAAA;AACD,MAAA,OAAO;AAAA,QACL,UAAA,EAAY,UAAA,CAAW,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA;AAAA,QAC1C,QAAA,EAAU,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,KAAK;AAAA,MACxC,CAAA;AAAA,IACF,CAAA;AAAA,IACA,kBAAA,EAAoB,MAAA,CAClB,GAAA,EACA,IAAA,EACA,EAAE,OAAA,EAAS,0BAAc,EAAA,EAAqB,CAAC,CAAA,EAAA,GAC7B;AAClB,MAAA,MAAA,CAAO,IAAA,CAAK,yBAAyB,CAAA;AACrC,MAAA,MAAM,GAAA,CAAI,GAAA,CAAI,CAAA,cAAA,EAAiB,GAAG,CAAA,WAAA,CAAA,EAAe,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,KAAK,CAAC,CAAA;AACpF,MAAA,MAAA,CAAO,IAAA,CAAK,uBAAuB,CAAA;AACnC,MAAA,MAAM,GAAA,CAAI,GAAA,CAAI,CAAA,cAAA,EAAiB,GAAG,CAAA,SAAA,CAAA,EAAa,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,KAAK,CAAC,CAAA;AAChF,MAAA,MAAA,CAAO,OAAA,CAAQ,mCAAmC,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,eAAA,EAAiB,MAAA,CAAO;AAAA,MACtB,OAAA,EAAS,yBAAA;AAAA,MACT;AAAA,IACF,EAAA,EAAwC,CAAC,CAAA,EAAA,GAAM;AAC7C,MAAA,MAAM,IAAA,EAAO,MAAM,UAAA,CAAW,MAAA,EAAQ,eAAA,EAAiB;AAAA,QACrD,GAAI,IAAA,IAAQ,KAAA,EAAA,EAAY,EAAE,EAAA,EAAI,IAAI,EAAA,EAAI,CAAC;AAAA,MACzC,CAAC,CAAA;AACD,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,oBAAA,EAAuB,GAAA,CAAI,EAAE,CAAA,CAAA;AAC9B,MAAA;AACb,IAAA;AAGI,IAAA;AAEE,MAAA;AACyB,QAAA;AACQ,QAAA;AACvB,MAAA;AAGA,QAAA;AAEA,QAAA;AACd,MAAA;AACI,MAAA;AAC+C,QAAA;AACV,QAAA;AACF,QAAA;AACJ,UAAA;AAEJ,UAAA;AACU,UAAA;AACA,UAAA;AACvC,QAAA;AACY,MAAA;AAGA,QAAA;AAEA,QAAA;AACd,MAAA;AACoC,MAAA;AACT,MAAA;AACA,QAAA;AAC3B,MAAA;AACoB,MAAA;AACsB,QAAA;AAC1C,MAAA;AAC0C,MAAA;AACP,MAAA;AACrC,IAAA;AACF,EAAA;AACF;AAEe;ADjDiC;AACA;AACA;AACA","file":"/home/runner/work/vault-ts/vault-ts/packages/common/lib/chunk-SDWFPIQ3.js","sourcesContent":[null,"import { SILENT_LOGGER } from \"@ledgerhq/vault-utils\";\nimport axios from \"axios\";\nimport https from \"https\";\n\nimport createNetwork from \"./createNetwork\";\nimport { RunnableOptions } from \"./types\";\n\ntype HSMBridge = {\n backupCompartment: (cid: number) => Promise<HSMCompartmentBackup>;\n restoreCompartment: (\n cid: number,\n data: HSMCompartmentBackup,\n options?: RunnableOptions,\n ) => Promise<void>;\n initCompartment: (options?: RunnableOptions & { cid?: number }) => Promise<number>;\n resetCompartment: (compartmentID: number, options: RunnableOptions) => Promise<void>;\n};\n\ntype HSMSlot = {\n id: number;\n userId: number;\n lastUsed: string;\n};\n\ntype CreateHSMBridgeOptions = {\n hsmEndpoint: string;\n hsmCert: Buffer;\n hsmCertKey: Buffer;\n monotonicCountersSize?: number;\n fileSystemSize?: number;\n};\n\ntype HSMCompartmentBackup = {\n internalfs: string;\n counters: string;\n};\n\nfunction createHSMBridge(options: CreateHSMBridgeOptions): HSMBridge {\n const { monotonicCountersSize, fileSystemSize } = options;\n\n const httpsAgent = new https.Agent({\n cert: options.hsmCert,\n key: options.hsmCertKey,\n });\n\n // cf hsmaas code\n const hsmEndpoint = options.hsmEndpoint.replace(\"/process\", \"\");\n\n const hsmNetworkOptions = {\n baseURL: hsmEndpoint,\n httpsAgent,\n };\n\n const hsmNetwork = createNetwork(hsmNetworkOptions);\n const raw = axios.create({ baseURL: hsmEndpoint, httpsAgent });\n\n return {\n backupCompartment: async (cid: number): Promise<HSMCompartmentBackup> => {\n const [internalfs, counters] = await Promise.all([\n raw.get<Buffer>(`/compartments/${cid}/internalfs`, { responseType: \"arraybuffer\" }),\n raw.get<Buffer>(`/compartments/${cid}/counters`, { responseType: \"arraybuffer\" }),\n ]);\n return {\n internalfs: internalfs.data.toString(\"hex\"),\n counters: counters.data.toString(\"hex\"),\n };\n },\n restoreCompartment: async (\n cid: number,\n data: HSMCompartmentBackup,\n { logger = SILENT_LOGGER }: RunnableOptions = {},\n ): Promise<void> => {\n logger.info(\"Restoring internalfs...\");\n await raw.put(`/compartments/${cid}/internalfs`, Buffer.from(data.internalfs, \"hex\"));\n logger.info(\"Restoring counters...\");\n await raw.put(`/compartments/${cid}/counters`, Buffer.from(data.counters, \"hex\"));\n logger.success(\"Successfully restored compartment\");\n },\n initCompartment: async ({\n logger = SILENT_LOGGER,\n cid,\n }: RunnableOptions & { cid?: number } = {}) => {\n const res = (await hsmNetwork(\"POST\", \"/compartments\", {\n ...(cid !== undefined ? { id: cid } : {}),\n })) as { id: number };\n logger.info(`Created compartment ${res.id}`);\n return res.id;\n },\n resetCompartment: async (\n compartmentID: number,\n { logger = SILENT_LOGGER }: RunnableOptions,\n ) => {\n try {\n await hsmNetwork(\"DELETE\", `/compartments/${compartmentID}`);\n logger.info(`Removed compartment ${compartmentID}`);\n } catch (err) {\n /* istanbul ignore next */\n // @ts-expect-error\n logger.info(`Arf! Problem deleting compartment apparently: ${err.toString()}`);\n /* istanbul ignore next */\n logger.info(\"But let's pretend we don't care and let's continue\");\n }\n try {\n const slots: HSMSlot[] = await hsmNetwork(\"GET\", \"/slots\");\n const compartmentSlots = slots.filter((slot) => slot.userId === compartmentID);\n for (let i = 0; i < compartmentSlots.length; i++) {\n const slot = compartmentSlots[i];\n /* istanbul ignore if */\n if (!slot) throw new Error(\"Invalid slot\");\n await hsmNetwork(\"DELETE\", `/slots/${slot.id}`);\n logger.info(`Removed slot ${slot.id}`);\n }\n } catch (err) {\n /* istanbul ignore next */\n // @ts-expect-error\n logger.info(`Ouch! Little error there: ${err.toString()}`);\n /* istanbul ignore next */\n logger.info(\"There was a problem getting slots, but let's continue anyway, i mean.\");\n }\n const payload = { id: compartmentID };\n if (monotonicCountersSize) {\n Object.assign(payload, { monotonicCountersSize });\n }\n if (fileSystemSize) {\n Object.assign(payload, { fileSystemSize });\n }\n await hsmNetwork(\"POST\", \"/compartments\", payload);\n logger.info(`Created compartment ${compartmentID}`);\n },\n };\n}\n\nexport default createHSMBridge;\n"]}
|
package/lib/createHSMBridge.d.ts
CHANGED
|
@@ -8,7 +8,9 @@ import 'socket.io-client';
|
|
|
8
8
|
type HSMBridge = {
|
|
9
9
|
backupCompartment: (cid: number) => Promise<HSMCompartmentBackup>;
|
|
10
10
|
restoreCompartment: (cid: number, data: HSMCompartmentBackup, options?: RunnableOptions) => Promise<void>;
|
|
11
|
-
initCompartment: (options?: RunnableOptions
|
|
11
|
+
initCompartment: (options?: RunnableOptions & {
|
|
12
|
+
cid?: number;
|
|
13
|
+
}) => Promise<number>;
|
|
12
14
|
resetCompartment: (compartmentID: number, options: RunnableOptions) => Promise<void>;
|
|
13
15
|
};
|
|
14
16
|
type CreateHSMBridgeOptions = {
|
package/lib/createHSMBridge.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkSDWFPIQ3js = require('./chunk-SDWFPIQ3.js');
|
|
4
4
|
require('./chunk-ZRIXMEBK.js');
|
|
5
5
|
require('./chunk-3TPBAEKC.js');
|
|
6
6
|
require('./chunk-PZ5AY32C.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
exports.default =
|
|
9
|
+
exports.default = _chunkSDWFPIQ3js.createHSMBridge_default;
|
|
10
10
|
//# sourceMappingURL=createHSMBridge.js.map
|
package/lib/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkSDWFPIQ3js = require('./chunk-SDWFPIQ3.js');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
var _chunkK34PJKKUjs = require('./chunk-K34PJKKU.js');
|
|
@@ -3209,7 +3209,7 @@ async function wipeBackend(wipeOpts, runnableOpts = {}) {
|
|
|
3209
3209
|
}
|
|
3210
3210
|
}
|
|
3211
3211
|
logger.step("Resetting HSM compartment");
|
|
3212
|
-
const hsmBridge =
|
|
3212
|
+
const hsmBridge = _chunkSDWFPIQ3js.createHSMBridge_default.call(void 0, wipeOpts);
|
|
3213
3213
|
await hsmBridge.resetCompartment(wipeOpts.hsmCompartmentID, runnableOpts);
|
|
3214
3214
|
logger.success("Wiped backend data");
|
|
3215
3215
|
}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/vault-ts/vault-ts/packages/common/lib/chunk-PT5KX3QU.js","../src/createHSMBridge.ts"],"names":[],"mappings":"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","file":"/home/runner/work/vault-ts/vault-ts/packages/common/lib/chunk-PT5KX3QU.js","sourcesContent":[null,"import { SILENT_LOGGER } from \"@ledgerhq/vault-utils\";\nimport axios from \"axios\";\nimport https from \"https\";\n\nimport createNetwork from \"./createNetwork\";\nimport { RunnableOptions } from \"./types\";\n\ntype HSMBridge = {\n backupCompartment: (cid: number) => Promise<HSMCompartmentBackup>;\n restoreCompartment: (\n cid: number,\n data: HSMCompartmentBackup,\n options?: RunnableOptions,\n ) => Promise<void>;\n initCompartment: (options?: RunnableOptions) => Promise<number>;\n resetCompartment: (compartmentID: number, options: RunnableOptions) => Promise<void>;\n};\n\ntype HSMSlot = {\n id: number;\n userId: number;\n lastUsed: string;\n};\n\ntype CreateHSMBridgeOptions = {\n hsmEndpoint: string;\n hsmCert: Buffer;\n hsmCertKey: Buffer;\n monotonicCountersSize?: number;\n fileSystemSize?: number;\n};\n\ntype HSMCompartmentBackup = {\n internalfs: string;\n counters: string;\n};\n\nfunction createHSMBridge(options: CreateHSMBridgeOptions): HSMBridge {\n const { monotonicCountersSize, fileSystemSize } = options;\n\n const httpsAgent = new https.Agent({\n cert: options.hsmCert,\n key: options.hsmCertKey,\n });\n\n // cf hsmaas code\n const hsmEndpoint = options.hsmEndpoint.replace(\"/process\", \"\");\n\n const hsmNetworkOptions = {\n baseURL: hsmEndpoint,\n httpsAgent,\n };\n\n const hsmNetwork = createNetwork(hsmNetworkOptions);\n const raw = axios.create({ baseURL: hsmEndpoint, httpsAgent });\n\n return {\n backupCompartment: async (cid: number): Promise<HSMCompartmentBackup> => {\n const [internalfs, counters] = await Promise.all([\n raw.get<Buffer>(`/compartments/${cid}/internalfs`, { responseType: \"arraybuffer\" }),\n raw.get<Buffer>(`/compartments/${cid}/counters`, { responseType: \"arraybuffer\" }),\n ]);\n return {\n internalfs: internalfs.data.toString(\"hex\"),\n counters: counters.data.toString(\"hex\"),\n };\n },\n restoreCompartment: async (\n cid: number,\n data: HSMCompartmentBackup,\n { logger = SILENT_LOGGER }: RunnableOptions = {},\n ): Promise<void> => {\n logger.info(\"Restoring internalfs...\");\n await raw.put(`/compartments/${cid}/internalfs`, Buffer.from(data.internalfs, \"hex\"));\n logger.info(\"Restoring counters...\");\n await raw.put(`/compartments/${cid}/counters`, Buffer.from(data.counters, \"hex\"));\n logger.success(\"Successfully restored compartment\");\n },\n initCompartment: async ({ logger = SILENT_LOGGER }: RunnableOptions = {}) => {\n const res = (await hsmNetwork(\"POST\", \"/compartments\", {})) as { id: number };\n logger.info(`Created compartment ${res.id}`);\n return res.id;\n },\n resetCompartment: async (\n compartmentID: number,\n { logger = SILENT_LOGGER }: RunnableOptions,\n ) => {\n try {\n await hsmNetwork(\"DELETE\", `/compartments/${compartmentID}`);\n logger.info(`Removed compartment ${compartmentID}`);\n } catch (err) {\n /* istanbul ignore next */\n // @ts-expect-error\n logger.info(`Arf! Problem deleting compartment apparently: ${err.toString()}`);\n /* istanbul ignore next */\n logger.info(\"But let's pretend we don't care and let's continue\");\n }\n try {\n const slots: HSMSlot[] = await hsmNetwork(\"GET\", \"/slots\");\n const compartmentSlots = slots.filter((slot) => slot.userId === compartmentID);\n for (let i = 0; i < compartmentSlots.length; i++) {\n const slot = compartmentSlots[i];\n /* istanbul ignore if */\n if (!slot) throw new Error(\"Invalid slot\");\n await hsmNetwork(\"DELETE\", `/slots/${slot.id}`);\n logger.info(`Removed slot ${slot.id}`);\n }\n } catch (err) {\n /* istanbul ignore next */\n // @ts-expect-error\n logger.info(`Ouch! Little error there: ${err.toString()}`);\n /* istanbul ignore next */\n logger.info(\"There was a problem getting slots, but let's continue anyway, i mean.\");\n }\n const payload = { id: compartmentID };\n if (monotonicCountersSize) {\n Object.assign(payload, { monotonicCountersSize });\n }\n if (fileSystemSize) {\n Object.assign(payload, { fileSystemSize });\n }\n await hsmNetwork(\"POST\", \"/compartments\", payload);\n logger.info(`Created compartment ${compartmentID}`);\n },\n };\n}\n\nexport default createHSMBridge;\n"]}
|