@bitgo/public-types 7.0.0 → 7.1.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/dist/src/schema/safe/requests.d.ts +13 -2
- package/dist/src/schema/safe/requests.js +12 -2
- package/dist/src/schema/safe/requests.js.map +1 -1
- package/dist/src/schema/safe/rootKeys.d.ts +5 -0
- package/dist/src/schema/safe/rootKeys.js +5 -1
- package/dist/src/schema/safe/rootKeys.js.map +1 -1
- package/dist/src/schema/safe/safe.d.ts +5 -0
- package/dist/src/schema/safe/safe.js +2 -0
- package/dist/src/schema/safe/safe.js.map +1 -1
- package/package.json +1 -1
- package/src/schema/safe/requests.ts +23 -5
- package/src/schema/safe/rootKeys.ts +16 -0
- package/src/schema/safe/safe.ts +3 -1
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import * as t from "io-ts";
|
|
2
|
-
export declare const InitializeSafeBody: t.TypeC<{
|
|
2
|
+
export declare const InitializeSafeBody: t.IntersectionC<[t.TypeC<{
|
|
3
3
|
label: t.StringC;
|
|
4
|
-
}
|
|
4
|
+
}>, t.PartialC<{
|
|
5
|
+
externalBackupSlots: t.ArrayC<t.KeyofC<{
|
|
6
|
+
secp256k1Multisig: null;
|
|
7
|
+
ed25519Multisig: null;
|
|
8
|
+
}>>;
|
|
9
|
+
backupKeyProvider: t.StringC;
|
|
10
|
+
}>]>;
|
|
5
11
|
export type InitializeSafeBody = t.TypeOf<typeof InitializeSafeBody>;
|
|
6
12
|
export declare const UpdateSafeBody: t.TypeC<{
|
|
7
13
|
label: t.StringC;
|
|
@@ -17,6 +23,11 @@ export declare const InitializeSafeResponse: t.IntersectionC<[t.TypeC<{
|
|
|
17
23
|
eddsaMpc: null;
|
|
18
24
|
ed25519Multisig: null;
|
|
19
25
|
}>>;
|
|
26
|
+
externalBackupSlots: t.ArrayC<t.KeyofC<{
|
|
27
|
+
secp256k1Multisig: null;
|
|
28
|
+
ed25519Multisig: null;
|
|
29
|
+
}>>;
|
|
30
|
+
backupKeyProvider: t.StringC;
|
|
20
31
|
}>]>;
|
|
21
32
|
export type InitializeSafeResponse = t.TypeOf<typeof InitializeSafeResponse>;
|
|
22
33
|
export declare const FinalizeSafeBody: t.TypeC<{
|
|
@@ -27,11 +27,21 @@ exports.FreezeSafeBody = exports.FinalizeSafeBody = exports.InitializeSafeRespon
|
|
|
27
27
|
const t = __importStar(require("io-ts"));
|
|
28
28
|
const io_ts_types_1 = require("io-ts-types");
|
|
29
29
|
const rootKeys_1 = require("./rootKeys");
|
|
30
|
-
exports.InitializeSafeBody = t.
|
|
30
|
+
exports.InitializeSafeBody = t.intersection([
|
|
31
|
+
t.type({ label: t.string }),
|
|
32
|
+
t.partial({
|
|
33
|
+
externalBackupSlots: t.array(rootKeys_1.MultisigRootKeyType),
|
|
34
|
+
backupKeyProvider: t.string,
|
|
35
|
+
}),
|
|
36
|
+
], "InitializeSafeBody");
|
|
31
37
|
exports.UpdateSafeBody = t.type({ label: t.string }, "UpdateSafeBody");
|
|
32
38
|
exports.InitializeSafeResponse = t.intersection([
|
|
33
39
|
t.type({ id: t.string, status: t.literal("initializing") }),
|
|
34
|
-
t.partial({
|
|
40
|
+
t.partial({
|
|
41
|
+
enabledRootSlots: t.array(rootKeys_1.RootKeyType),
|
|
42
|
+
externalBackupSlots: t.array(rootKeys_1.MultisigRootKeyType),
|
|
43
|
+
backupKeyProvider: t.string,
|
|
44
|
+
}),
|
|
35
45
|
], "InitializeSafeResponse");
|
|
36
46
|
exports.FinalizeSafeBody = t.type({ rootKeys: rootKeys_1.SafeRootKeys }, "FinalizeSafeBody");
|
|
37
47
|
exports.FreezeSafeBody = t.partial({ expires: io_ts_types_1.DateFromISOString, reason: t.string }, "FreezeSafeBody");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requests.js","sourceRoot":"","sources":["../../../../src/schema/safe/requests.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA2B;AAC3B,6CAAgD;AAChD,
|
|
1
|
+
{"version":3,"file":"requests.js","sourceRoot":"","sources":["../../../../src/schema/safe/requests.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA2B;AAC3B,6CAAgD;AAChD,yCAA4E;AAU/D,QAAA,kBAAkB,GAAG,CAAC,CAAC,YAAY,CAC9C;IACE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC,CAAC,OAAO,CAAC;QACR,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,8BAAmB,CAAC;QACjD,iBAAiB,EAAE,CAAC,CAAC,MAAM;KAC5B,CAAC;CACH,EACD,oBAAoB,CACrB,CAAC;AAKW,QAAA,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAkB/D,QAAA,sBAAsB,GAAG,CAAC,CAAC,YAAY,CAClD;IACE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;IAC3D,CAAC,CAAC,OAAO,CAAC;QACR,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAW,CAAC;QACtC,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,8BAAmB,CAAC;QACjD,iBAAiB,EAAE,CAAC,CAAC,MAAM;KAC5B,CAAC;CACH,EACD,wBAAwB,CACzB,CAAC;AAQW,QAAA,gBAAgB,GAAG,CAAC,CAAC,IAAI,CACpC,EAAE,QAAQ,EAAE,uBAAY,EAAE,EAC1B,kBAAkB,CACnB,CAAC;AAQW,QAAA,cAAc,GAAG,CAAC,CAAC,OAAO,CACrC,EAAE,OAAO,EAAE,+BAAiB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAChD,gBAAgB,CACjB,CAAC"}
|
|
@@ -6,6 +6,11 @@ export declare const RootKeyType: t.KeyofC<{
|
|
|
6
6
|
ed25519Multisig: null;
|
|
7
7
|
}>;
|
|
8
8
|
export type RootKeyType = t.TypeOf<typeof RootKeyType>;
|
|
9
|
+
export declare const MultisigRootKeyType: t.KeyofC<{
|
|
10
|
+
secp256k1Multisig: null;
|
|
11
|
+
ed25519Multisig: null;
|
|
12
|
+
}>;
|
|
13
|
+
export type MultisigRootKeyType = t.TypeOf<typeof MultisigRootKeyType>;
|
|
9
14
|
export declare const RootKeyTriplet: t.TupleC<[t.StringC, t.StringC, t.StringC]>;
|
|
10
15
|
export type RootKeyTriplet = t.TypeOf<typeof RootKeyTriplet>;
|
|
11
16
|
export declare const RootKeysByType: t.PartialC<{
|
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.SafeRootKeys = exports.SafeCustodyType = exports.RootKeysByType = exports.RootKeyTriplet = exports.RootKeyType = void 0;
|
|
26
|
+
exports.SafeRootKeys = exports.SafeCustodyType = exports.RootKeysByType = exports.RootKeyTriplet = exports.MultisigRootKeyType = exports.RootKeyType = void 0;
|
|
27
27
|
const t = __importStar(require("io-ts"));
|
|
28
28
|
exports.RootKeyType = t.keyof({
|
|
29
29
|
secp256k1Multisig: null,
|
|
@@ -31,6 +31,10 @@ exports.RootKeyType = t.keyof({
|
|
|
31
31
|
eddsaMpc: null,
|
|
32
32
|
ed25519Multisig: null,
|
|
33
33
|
}, "RootKeyType");
|
|
34
|
+
exports.MultisigRootKeyType = t.keyof({
|
|
35
|
+
secp256k1Multisig: null,
|
|
36
|
+
ed25519Multisig: null,
|
|
37
|
+
}, "MultisigRootKeyType");
|
|
34
38
|
exports.RootKeyTriplet = t.tuple([t.string, t.string, t.string], "RootKeyTriplet");
|
|
35
39
|
exports.RootKeysByType = t.partial({
|
|
36
40
|
secp256k1Multisig: exports.RootKeyTriplet,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rootKeys.js","sourceRoot":"","sources":["../../../../src/schema/safe/rootKeys.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA2B;AAUd,QAAA,WAAW,GAAG,CAAC,CAAC,KAAK,CAChC;IACE,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,eAAe,EAAE,IAAI;CACtB,EACD,aAAa,CACd,CAAC;AAQW,QAAA,cAAc,GAAG,CAAC,CAAC,KAAK,CACnC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAC9B,gBAAgB,CACjB,CAAC;AAUW,QAAA,cAAc,GAAG,CAAC,CAAC,OAAO,CACrC;IACE,iBAAiB,EAAE,sBAAc;IACjC,QAAQ,EAAE,sBAAc;IACxB,QAAQ,EAAE,sBAAc;IACxB,eAAe,EAAE,sBAAc;CAChC,EACD,gBAAgB,CACjB,CAAC;AASW,QAAA,eAAe,GAAG,CAAC,CAAC,KAAK,CACpC;IACE,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,IAAI;IACV,SAAS,EAAE,IAAI;CAChB,EACD,iBAAiB,CAClB,CAAC;AAQW,QAAA,YAAY,GAAG,CAAC,CAAC,IAAI,CAChC;IACE,GAAG,EAAE,sBAAc;CACpB,EACD,cAAc,CACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"rootKeys.js","sourceRoot":"","sources":["../../../../src/schema/safe/rootKeys.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA2B;AAUd,QAAA,WAAW,GAAG,CAAC,CAAC,KAAK,CAChC;IACE,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,eAAe,EAAE,IAAI;CACtB,EACD,aAAa,CACd,CAAC;AAUW,QAAA,mBAAmB,GAAG,CAAC,CAAC,KAAK,CACxC;IACE,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,IAAI;CACtB,EACD,qBAAqB,CACtB,CAAC;AAQW,QAAA,cAAc,GAAG,CAAC,CAAC,KAAK,CACnC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAC9B,gBAAgB,CACjB,CAAC;AAUW,QAAA,cAAc,GAAG,CAAC,CAAC,OAAO,CACrC;IACE,iBAAiB,EAAE,sBAAc;IACjC,QAAQ,EAAE,sBAAc;IACxB,QAAQ,EAAE,sBAAc;IACxB,eAAe,EAAE,sBAAc;CAChC,EACD,gBAAgB,CACjB,CAAC;AASW,QAAA,eAAe,GAAG,CAAC,CAAC,KAAK,CACpC;IACE,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,IAAI;IACV,SAAS,EAAE,IAAI;CAChB,EACD,iBAAiB,CAClB,CAAC;AAQW,QAAA,YAAY,GAAG,CAAC,CAAC,IAAI,CAChC;IACE,GAAG,EAAE,sBAAc;CACpB,EACD,cAAc,CACf,CAAC"}
|
|
@@ -87,6 +87,11 @@ export declare const SafeData: t.IntersectionC<[t.TypeC<{
|
|
|
87
87
|
ed25519Multisig: t.TupleC<[t.StringC, t.StringC, t.StringC]>;
|
|
88
88
|
}>;
|
|
89
89
|
}>;
|
|
90
|
+
externalBackupSlots: t.ArrayC<t.KeyofC<{
|
|
91
|
+
secp256k1Multisig: null;
|
|
92
|
+
ed25519Multisig: null;
|
|
93
|
+
}>>;
|
|
94
|
+
backupKeyProvider: t.StringC;
|
|
90
95
|
archivedAt: import("io-ts-types").DateFromISOStringC;
|
|
91
96
|
}>]>;
|
|
92
97
|
export type SafeData = t.TypeOf<typeof SafeData>;
|
|
@@ -71,6 +71,8 @@ exports.SafeData = t.intersection([
|
|
|
71
71
|
safeShareRequests: t.array(exports.SafeShareRequest),
|
|
72
72
|
freeze: exports.SafeFreeze,
|
|
73
73
|
rootKeys: rootKeys_1.SafeRootKeys,
|
|
74
|
+
externalBackupSlots: t.array(rootKeys_1.MultisigRootKeyType),
|
|
75
|
+
backupKeyProvider: t.string,
|
|
74
76
|
archivedAt: io_ts_types_1.DateFromISOString,
|
|
75
77
|
}),
|
|
76
78
|
], "SafeData");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe.js","sourceRoot":"","sources":["../../../../src/schema/safe/safe.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA2B;AAC3B,6CAA+D;AAC/D,
|
|
1
|
+
{"version":3,"file":"safe.js","sourceRoot":"","sources":["../../../../src/schema/safe/safe.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA2B;AAC3B,6CAA+D;AAC/D,yCAA+D;AAGlD,QAAA,cAAc,GAAG,CAAC,CAAC,KAAK,CACnC;IACE,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;CACX,EACD,gBAAgB,CACjB,CAAC;AASW,QAAA,UAAU,GAAG,CAAC,CAAC,KAAK,CAC/B;IACE,YAAY,EAAE,IAAI;IAClB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;CACf,EACD,YAAY,CACb,CAAC;AAKW,QAAA,kBAAkB,GAAG,CAAC,CAAC,YAAY,CAC9C;IACE,CAAC,CAAC,IAAI,CAAC;QACL,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,WAAW,EAAE,IAAA,2BAAa,EAAC,sBAAc,CAAC;KAC3C,CAAC;IACF,CAAC,CAAC,OAAO,CAAC;QACR,aAAa,EAAE,CAAC,CAAC,OAAO;KACzB,CAAC;CACH,EACD,oBAAoB,CACrB,CAAC;AAQW,QAAA,gBAAgB,GAAG,CAAC,CAAC,IAAI,CACpC;IACE,MAAM,EAAE,CAAC,CAAC,MAAM;IAChB,WAAW,EAAE,IAAA,2BAAa,EAAC,sBAAc,CAAC;IAC1C,SAAS,EAAE,+BAAiB;CAC7B,EACD,kBAAkB,CACnB,CAAC;AAKW,QAAA,UAAU,GAAG,CAAC,CAAC,OAAO,CACjC;IACE,IAAI,EAAE,+BAAiB;IACvB,OAAO,EAAE,+BAAiB;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM;CACjB,EACD,YAAY,CACb,CAAC;AAKW,QAAA,QAAQ,GAAG,CAAC,CAAC,YAAY,CACpC;IACE,CAAC,CAAC,IAAI,CAAC;QACL,EAAE,EAAE,CAAC,CAAC,MAAM;QACZ,YAAY,EAAE,CAAC,CAAC,MAAM;QACtB,KAAK,EAAE,CAAC,CAAC,MAAM;QACf,MAAM,EAAE,kBAAU;QAClB,OAAO,EAAE,CAAC,CAAC,MAAM;QACjB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,0BAAkB,CAAC;QAClC,SAAS,EAAE,+BAAiB;KAC7B,CAAC;IACF,CAAC,CAAC,OAAO,CAAC;QACR,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAgB,CAAC;QAC5C,MAAM,EAAE,kBAAU;QAClB,QAAQ,EAAE,uBAAY;QACtB,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,8BAAmB,CAAC;QACjD,iBAAiB,EAAE,CAAC,CAAC,MAAM;QAC3B,UAAU,EAAE,+BAAiB;KAC9B,CAAC;CACH,EACD,UAAU,CACX,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
import * as t from "io-ts";
|
|
2
2
|
import { DateFromISOString } from "io-ts-types";
|
|
3
|
-
import { RootKeyType, SafeRootKeys } from "./rootKeys";
|
|
3
|
+
import { MultisigRootKeyType, RootKeyType, SafeRootKeys } from "./rootKeys";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* POST /enterprise/:eId/safes — Phase 1 carries no key material
|
|
6
|
+
* POST /enterprise/:eId/safes — Phase 1 carries no key material, optionally with
|
|
7
|
+
* `externalBackupSlots`: the multisig slots whose backup root is external, i.e. not generated and
|
|
8
|
+
* encrypted by the client. Slots left out keep a local backup root. MPC slot names fail to decode.
|
|
9
|
+
* `backupKeyProvider` is the single KRS provider for the whole safe: when set, every declared slot
|
|
10
|
+
* is KRS-held by that provider; when absent they are all caller-supplied public keys (BYOK).
|
|
7
11
|
* @experimental
|
|
8
12
|
*/
|
|
9
|
-
export const InitializeSafeBody = t.
|
|
10
|
-
|
|
13
|
+
export const InitializeSafeBody = t.intersection(
|
|
14
|
+
[
|
|
15
|
+
t.type({ label: t.string }),
|
|
16
|
+
t.partial({
|
|
17
|
+
externalBackupSlots: t.array(MultisigRootKeyType),
|
|
18
|
+
backupKeyProvider: t.string,
|
|
19
|
+
}),
|
|
20
|
+
],
|
|
11
21
|
"InitializeSafeBody",
|
|
12
22
|
);
|
|
13
23
|
/** @experimental */
|
|
@@ -26,12 +36,20 @@ export type UpdateSafeBody = t.TypeOf<typeof UpdateSafeBody>;
|
|
|
26
36
|
* ceremonies for exactly these slots and finalize with exactly these triplets; a slot omitted
|
|
27
37
|
* from the list is gated off for this safe. When ABSENT (older servers that predate the gating
|
|
28
38
|
* feature), the client MUST fall back to generating all four slots — hence the field is optional.
|
|
39
|
+
* `externalBackupSlots` and `backupKeyProvider` echo the request: the multisig slots whose backup
|
|
40
|
+
* root is external, and the KRS provider holding them (absent for caller-supplied keys). The
|
|
41
|
+
* client MUST add a pub-only backup key for exactly these slots, allocated by the provider when
|
|
42
|
+
* `backupKeyProvider` is set.
|
|
29
43
|
* @experimental
|
|
30
44
|
*/
|
|
31
45
|
export const InitializeSafeResponse = t.intersection(
|
|
32
46
|
[
|
|
33
47
|
t.type({ id: t.string, status: t.literal("initializing") }),
|
|
34
|
-
t.partial({
|
|
48
|
+
t.partial({
|
|
49
|
+
enabledRootSlots: t.array(RootKeyType),
|
|
50
|
+
externalBackupSlots: t.array(MultisigRootKeyType),
|
|
51
|
+
backupKeyProvider: t.string,
|
|
52
|
+
}),
|
|
35
53
|
],
|
|
36
54
|
"InitializeSafeResponse",
|
|
37
55
|
);
|
|
@@ -20,6 +20,22 @@ export const RootKeyType = t.keyof(
|
|
|
20
20
|
/** @experimental */
|
|
21
21
|
export type RootKeyType = t.TypeOf<typeof RootKeyType>;
|
|
22
22
|
|
|
23
|
+
/**
|
|
24
|
+
* The multisig subset of `RootKeyType`: the only slots whose backup root can be a caller-supplied
|
|
25
|
+
* public key (BYOK), the way `backupXpub` works for a regular multisig wallet. MPC slots are
|
|
26
|
+
* excluded.
|
|
27
|
+
* @experimental
|
|
28
|
+
*/
|
|
29
|
+
export const MultisigRootKeyType = t.keyof(
|
|
30
|
+
{
|
|
31
|
+
secp256k1Multisig: null,
|
|
32
|
+
ed25519Multisig: null,
|
|
33
|
+
},
|
|
34
|
+
"MultisigRootKeyType",
|
|
35
|
+
);
|
|
36
|
+
/** @experimental */
|
|
37
|
+
export type MultisigRootKeyType = t.TypeOf<typeof MultisigRootKeyType>;
|
|
38
|
+
|
|
23
39
|
/**
|
|
24
40
|
* An ordered [userKeyId, backupKeyId, bitgoKeyId] triplet — same shape/order as wallet.keys[].
|
|
25
41
|
* @experimental
|
package/src/schema/safe/safe.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as t from "io-ts";
|
|
2
2
|
import { DateFromISOString, nonEmptyArray } from "io-ts-types";
|
|
3
|
-
import { SafeRootKeys } from "./rootKeys";
|
|
3
|
+
import { MultisigRootKeyType, SafeRootKeys } from "./rootKeys";
|
|
4
4
|
|
|
5
5
|
/** @experimental */
|
|
6
6
|
export const SafePermission = t.keyof(
|
|
@@ -90,6 +90,8 @@ export const SafeData = t.intersection(
|
|
|
90
90
|
safeShareRequests: t.array(SafeShareRequest),
|
|
91
91
|
freeze: SafeFreeze,
|
|
92
92
|
rootKeys: SafeRootKeys,
|
|
93
|
+
externalBackupSlots: t.array(MultisigRootKeyType),
|
|
94
|
+
backupKeyProvider: t.string,
|
|
93
95
|
archivedAt: DateFromISOString,
|
|
94
96
|
}),
|
|
95
97
|
],
|