@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.
@@ -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.type({ label: t.string }, "InitializeSafeBody");
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({ enabledRootSlots: t.array(rootKeys_1.RootKeyType) }),
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,yCAAuD;AAM1C,QAAA,kBAAkB,GAAG,CAAC,CAAC,IAAI,CACtC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EACnB,oBAAoB,CACrB,CAAC;AAKW,QAAA,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAc/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,EAAE,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAW,CAAC,EAAE,CAAC;CACtD,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"}
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,yCAA0C;AAG7B,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,UAAU,EAAE,+BAAiB;KAC9B,CAAC;CACH,EACD,UAAU,CACX,CAAC"}
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo/public-types",
3
- "version": "7.0.0",
3
+ "version": "7.1.0",
4
4
  "description": "Collection of types exposed externally as part of the BitGo public API",
5
5
  "license": "UNLICENSED",
6
6
  "author": "",
@@ -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.type(
10
- { label: t.string },
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({ enabledRootSlots: t.array(RootKeyType) }),
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
@@ -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
  ],