@cubist-labs/cubesigner-sdk 0.2.28 → 0.3.1
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/README.md +30 -28
- package/dist/cjs/package.json +41 -0
- package/dist/cjs/spec/env/beta.json +9 -0
- package/dist/cjs/spec/env/gamma.json +9 -0
- package/dist/cjs/spec/env/prod.json +9 -0
- package/dist/cjs/src/api.d.ts +634 -0
- package/dist/cjs/src/api.js +1309 -0
- package/dist/cjs/src/client.d.ts +575 -0
- package/dist/cjs/src/client.js +378 -0
- package/dist/cjs/src/env.d.ts +15 -0
- package/dist/cjs/src/env.js +35 -0
- package/dist/cjs/src/error.d.ts +29 -0
- package/dist/cjs/src/error.js +36 -0
- package/dist/cjs/src/events.d.ts +84 -0
- package/dist/cjs/src/events.js +195 -0
- package/dist/cjs/src/index.d.ts +203 -0
- package/dist/cjs/src/index.js +298 -0
- package/dist/cjs/src/key.d.ts +152 -0
- package/dist/cjs/src/key.js +242 -0
- package/dist/{src/fido.d.ts → cjs/src/mfa.d.ts} +33 -15
- package/dist/cjs/src/mfa.js +169 -0
- package/dist/cjs/src/org.d.ts +99 -0
- package/dist/cjs/src/org.js +95 -0
- package/dist/cjs/src/paginator.d.ts +76 -0
- package/dist/cjs/src/paginator.js +99 -0
- package/dist/cjs/src/response.d.ts +101 -0
- package/dist/cjs/src/response.js +164 -0
- package/dist/cjs/src/role.d.ts +283 -0
- package/dist/cjs/src/role.js +253 -0
- package/dist/cjs/src/schema.d.ts +6209 -0
- package/dist/cjs/src/schema.js +7 -0
- package/dist/cjs/src/schema_types.d.ts +113 -0
- package/dist/cjs/src/schema_types.js +3 -0
- package/dist/cjs/src/session/session_storage.d.ts +27 -0
- package/dist/cjs/src/session/session_storage.js +47 -0
- package/dist/cjs/src/session/signer_session_manager.d.ts +125 -0
- package/dist/cjs/src/session/signer_session_manager.js +239 -0
- package/dist/cjs/src/signer_session.d.ts +41 -0
- package/dist/cjs/src/signer_session.js +77 -0
- package/dist/cjs/src/user_export.d.ts +52 -0
- package/dist/cjs/src/user_export.js +129 -0
- package/dist/cjs/src/util.d.ts +56 -0
- package/dist/cjs/src/util.js +86 -0
- package/dist/esm/package.json +41 -0
- package/dist/esm/spec/env/beta.json +9 -0
- package/dist/esm/spec/env/gamma.json +9 -0
- package/dist/esm/spec/env/prod.json +9 -0
- package/dist/esm/src/api.d.ts +634 -0
- package/dist/esm/src/api.js +1299 -0
- package/dist/esm/src/client.d.ts +575 -0
- package/dist/esm/src/client.js +374 -0
- package/dist/esm/src/env.d.ts +15 -0
- package/dist/esm/src/env.js +9 -0
- package/dist/esm/src/error.d.ts +29 -0
- package/dist/esm/src/error.js +31 -0
- package/dist/esm/src/events.d.ts +84 -0
- package/dist/esm/src/events.js +189 -0
- package/dist/esm/src/index.d.ts +203 -0
- package/dist/esm/src/index.js +276 -0
- package/dist/esm/src/key.d.ts +152 -0
- package/dist/esm/src/key.js +236 -0
- package/dist/esm/src/mfa.d.ts +94 -0
- package/dist/esm/src/mfa.js +163 -0
- package/dist/esm/src/org.d.ts +99 -0
- package/dist/esm/src/org.js +91 -0
- package/dist/esm/src/paginator.d.ts +76 -0
- package/dist/esm/src/paginator.js +94 -0
- package/dist/esm/src/response.d.ts +101 -0
- package/dist/esm/src/response.js +159 -0
- package/dist/esm/src/role.d.ts +283 -0
- package/dist/esm/src/role.js +248 -0
- package/dist/esm/src/schema.d.ts +6209 -0
- package/dist/esm/src/schema.js +6 -0
- package/dist/esm/src/schema_types.d.ts +113 -0
- package/dist/esm/src/schema_types.js +2 -0
- package/dist/esm/src/session/session_storage.d.ts +27 -0
- package/dist/esm/src/session/session_storage.js +43 -0
- package/dist/esm/src/session/signer_session_manager.d.ts +125 -0
- package/dist/esm/src/session/signer_session_manager.js +235 -0
- package/dist/esm/src/signer_session.d.ts +41 -0
- package/dist/esm/src/signer_session.js +72 -0
- package/dist/esm/src/user_export.d.ts +52 -0
- package/dist/esm/src/user_export.js +99 -0
- package/dist/esm/src/util.d.ts +56 -0
- package/dist/esm/src/util.js +76 -0
- package/dist/package.json +13 -45
- package/dist/src/api.d.ts +29 -1
- package/dist/src/api.js +66 -1
- package/dist/src/client.d.ts +35 -14
- package/dist/src/client.js +12 -8
- package/dist/src/events.js +1 -1
- package/dist/src/index.d.ts +6 -11
- package/dist/src/index.js +9 -25
- package/dist/src/key.d.ts +18 -7
- package/dist/src/key.js +52 -19
- package/dist/src/role.d.ts +46 -3
- package/dist/src/role.js +60 -8
- package/dist/src/schema.d.ts +206 -72
- package/dist/src/schema.js +1 -1
- package/dist/src/schema_types.d.ts +3 -0
- package/dist/src/schema_types.js +1 -1
- package/dist/src/session/signer_session_manager.d.ts +38 -14
- package/dist/src/session/signer_session_manager.js +93 -33
- package/dist/src/util.d.ts +14 -0
- package/dist/src/util.js +24 -27
- package/package.json +19 -46
- package/src/api.ts +79 -0
- package/src/client.ts +12 -8
- package/src/events.ts +2 -0
- package/src/index.ts +10 -24
- package/src/key.ts +36 -18
- package/src/role.ts +78 -7
- package/src/schema.ts +269 -110
- package/src/schema_types.ts +3 -0
- package/src/session/session_storage.ts +0 -32
- package/src/session/signer_session_manager.ts +124 -36
- package/src/util.ts +19 -10
- package/tsconfig.json +1 -21
- package/LICENSE-APACHE +0 -177
- package/LICENSE-MIT +0 -25
- package/NOTICE +0 -13
- package/dist/examples/ethers.d.ts +0 -1
- package/dist/examples/ethers.js +0 -142
- package/dist/src/ethers/index.d.ts +0 -95
- package/dist/src/ethers/index.js +0 -215
- package/dist/src/fido.js +0 -148
- package/dist/src/session/cognito_manager.d.ts +0 -71
- package/dist/src/session/cognito_manager.js +0 -129
- package/dist/src/session/generic.d.ts +0 -47
- package/dist/src/session/generic.js +0 -3
- package/dist/src/session/management_session_manager.d.ts +0 -59
- package/dist/src/session/management_session_manager.js +0 -111
- package/dist/src/session/oidc_session_manager.d.ts +0 -78
- package/dist/src/session/oidc_session_manager.js +0 -142
- package/dist/src/session/session_manager.d.ts +0 -99
- package/dist/src/session/session_manager.js +0 -136
- package/dist/src/sign.d.ts +0 -114
- package/dist/src/sign.js +0 -248
- package/dist/test/sessions.d.ts +0 -35
- package/dist/test/sessions.js +0 -56
- package/src/ethers/index.ts +0 -253
- package/src/session/cognito_manager.ts +0 -161
- package/src/session/session_manager.ts +0 -165
package/dist/src/sign.js
DELETED
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
-
};
|
|
7
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
8
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
9
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
10
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
11
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
|
-
};
|
|
13
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
-
};
|
|
16
|
-
var _SignResponse_cs, _SignResponse_orgId, _SignResponse_roleId, _SignResponse_signFn, _SignResponse_resp, _Sign_orgId, _Sign_ss;
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.Sign = exports.SignResponse = void 0;
|
|
19
|
-
const assert_1 = __importDefault(require("assert"));
|
|
20
|
-
const _1 = require(".");
|
|
21
|
-
const env_1 = require("./env");
|
|
22
|
-
/**
|
|
23
|
-
* A response of a signing request.
|
|
24
|
-
*/
|
|
25
|
-
class SignResponse {
|
|
26
|
-
/** @return {boolean} True if this signing request requires an MFA approval */
|
|
27
|
-
requiresMfa() {
|
|
28
|
-
return __classPrivateFieldGet(this, _SignResponse_resp, "f").accepted?.MfaRequired !== undefined;
|
|
29
|
-
}
|
|
30
|
-
/** @return {U} The signed data */
|
|
31
|
-
data() {
|
|
32
|
-
return __classPrivateFieldGet(this, _SignResponse_resp, "f");
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Approves the MFA request.
|
|
36
|
-
*
|
|
37
|
-
* Note: This only works for MFA requests that require a single approval.
|
|
38
|
-
*
|
|
39
|
-
* @return {SignResponse<U>} The result of signing with the approval
|
|
40
|
-
*/
|
|
41
|
-
async approve() {
|
|
42
|
-
const mfaRequired = __classPrivateFieldGet(this, _SignResponse_resp, "f").accepted?.MfaRequired;
|
|
43
|
-
if (!mfaRequired) {
|
|
44
|
-
throw new Error("Request does not require MFA approval");
|
|
45
|
-
}
|
|
46
|
-
const mfaId = mfaRequired.id;
|
|
47
|
-
const mfaApproval = await _1.Role.mfaApprove(__classPrivateFieldGet(this, _SignResponse_cs, "f"), __classPrivateFieldGet(this, _SignResponse_orgId, "f"), __classPrivateFieldGet(this, _SignResponse_roleId, "f"), mfaId);
|
|
48
|
-
(0, assert_1.default)(mfaApproval.id === mfaId);
|
|
49
|
-
(0, assert_1.default)(mfaApproval.receipt);
|
|
50
|
-
const mfaConf = mfaApproval.receipt?.confirmation;
|
|
51
|
-
if (!mfaConf) {
|
|
52
|
-
throw new Error("MfaRequest has not been approved yet");
|
|
53
|
-
}
|
|
54
|
-
const headers = {
|
|
55
|
-
"x-cubist-mfa-id": mfaId,
|
|
56
|
-
"x-cubist-mfa-confirmation": mfaConf,
|
|
57
|
-
};
|
|
58
|
-
return new SignResponse(__classPrivateFieldGet(this, _SignResponse_cs, "f"), __classPrivateFieldGet(this, _SignResponse_orgId, "f"), __classPrivateFieldGet(this, _SignResponse_roleId, "f"), __classPrivateFieldGet(this, _SignResponse_signFn, "f"), await __classPrivateFieldGet(this, _SignResponse_signFn, "f").call(this, headers));
|
|
59
|
-
}
|
|
60
|
-
// --------------------------------------------------------------------------
|
|
61
|
-
// -- INTERNAL --------------------------------------------------------------
|
|
62
|
-
// --------------------------------------------------------------------------
|
|
63
|
-
/**
|
|
64
|
-
* Constructor.
|
|
65
|
-
*
|
|
66
|
-
* @param {CubeSigner} cs The CubeSigner instance to use for requests
|
|
67
|
-
* @param {string} orgId The org id of the corresponding signing request
|
|
68
|
-
* @param {string} roleId The role id of the corresponding signing request
|
|
69
|
-
* @param {SignFn} signFn The signing function that this response is from.
|
|
70
|
-
* This argument is used to resend requests with
|
|
71
|
-
* different headers if needed.
|
|
72
|
-
* @param {U | AcceptedResponse} resp The response as returned by the OpenAPI
|
|
73
|
-
* client.
|
|
74
|
-
*/
|
|
75
|
-
constructor(cs, orgId, roleId, signFn, resp) {
|
|
76
|
-
_SignResponse_cs.set(this, void 0);
|
|
77
|
-
_SignResponse_orgId.set(this, void 0);
|
|
78
|
-
_SignResponse_roleId.set(this, void 0);
|
|
79
|
-
_SignResponse_signFn.set(this, void 0);
|
|
80
|
-
_SignResponse_resp.set(this, void 0);
|
|
81
|
-
__classPrivateFieldSet(this, _SignResponse_cs, cs, "f");
|
|
82
|
-
__classPrivateFieldSet(this, _SignResponse_orgId, orgId, "f");
|
|
83
|
-
__classPrivateFieldSet(this, _SignResponse_roleId, roleId, "f");
|
|
84
|
-
__classPrivateFieldSet(this, _SignResponse_signFn, signFn, "f");
|
|
85
|
-
__classPrivateFieldSet(this, _SignResponse_resp, resp, "f");
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
exports.SignResponse = SignResponse;
|
|
89
|
-
_SignResponse_cs = new WeakMap(), _SignResponse_orgId = new WeakMap(), _SignResponse_roleId = new WeakMap(), _SignResponse_signFn = new WeakMap(), _SignResponse_resp = new WeakMap();
|
|
90
|
-
/**
|
|
91
|
-
* Wrapper around sign operations.
|
|
92
|
-
*/
|
|
93
|
-
class Sign {
|
|
94
|
-
/**
|
|
95
|
-
* Submit an 'eth1' sign request.
|
|
96
|
-
* @param {Key | string} key The key to sign with (either {@link Key} or its material ID).
|
|
97
|
-
* @param {Eth1SignRequest} req What to sign.
|
|
98
|
-
* @return {Promise<Eth1SignResponse | AcceptedResponse>} Signature
|
|
99
|
-
*/
|
|
100
|
-
async eth1(key, req) {
|
|
101
|
-
const pubkey = typeof key === "string" ? key : key.materialId;
|
|
102
|
-
const sign = async (headers) => {
|
|
103
|
-
const resp = await (await __classPrivateFieldGet(this, _Sign_ss, "f").client()).post("/v1/org/{org_id}/eth1/sign/{pubkey}", {
|
|
104
|
-
params: { path: { org_id: __classPrivateFieldGet(this, _Sign_orgId, "f"), pubkey } },
|
|
105
|
-
body: req,
|
|
106
|
-
headers: headers,
|
|
107
|
-
parseAs: "json",
|
|
108
|
-
});
|
|
109
|
-
return (0, env_1.assertOk)(resp);
|
|
110
|
-
};
|
|
111
|
-
return new SignResponse(__classPrivateFieldGet(this, _Sign_ss, "f").cs, __classPrivateFieldGet(this, _Sign_orgId, "f"), __classPrivateFieldGet(this, _Sign_ss, "f").roleId, sign, await sign());
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Submit an 'eth2' sign request.
|
|
115
|
-
* @param {Key | string} key The key to sign with (either {@link Key} or its material ID).
|
|
116
|
-
* @param {Eth2SignRequest} req What to sign.
|
|
117
|
-
* @return {Promise<Eth2SignResponse | AcceptedResponse>} Signature
|
|
118
|
-
*/
|
|
119
|
-
async eth2(key, req) {
|
|
120
|
-
const pubkey = typeof key === "string" ? key : key.materialId;
|
|
121
|
-
const sign = async (headers) => {
|
|
122
|
-
const resp = await (await __classPrivateFieldGet(this, _Sign_ss, "f").client()).post("/v1/org/{org_id}/eth2/sign/{pubkey}", {
|
|
123
|
-
params: { path: { org_id: __classPrivateFieldGet(this, _Sign_orgId, "f"), pubkey } },
|
|
124
|
-
body: req,
|
|
125
|
-
headers: headers,
|
|
126
|
-
parseAs: "json",
|
|
127
|
-
});
|
|
128
|
-
return (0, env_1.assertOk)(resp);
|
|
129
|
-
};
|
|
130
|
-
return new SignResponse(__classPrivateFieldGet(this, _Sign_ss, "f").cs, __classPrivateFieldGet(this, _Sign_orgId, "f"), __classPrivateFieldGet(this, _Sign_ss, "f").roleId, sign, await sign());
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Sign a stake request.
|
|
134
|
-
* @param {Eth2StakeRequest} req The request to sign.
|
|
135
|
-
* @return {Promise<Eth2StakeResponse | AcceptedResponse>} The response.
|
|
136
|
-
*/
|
|
137
|
-
async stake(req) {
|
|
138
|
-
const sign = async (headers) => {
|
|
139
|
-
const resp = await (await __classPrivateFieldGet(this, _Sign_ss, "f").client()).post("/v1/org/{org_id}/eth2/stake", {
|
|
140
|
-
params: { path: { org_id: __classPrivateFieldGet(this, _Sign_orgId, "f") } },
|
|
141
|
-
body: req,
|
|
142
|
-
headers: headers,
|
|
143
|
-
parseAs: "json",
|
|
144
|
-
});
|
|
145
|
-
return (0, env_1.assertOk)(resp);
|
|
146
|
-
};
|
|
147
|
-
return new SignResponse(__classPrivateFieldGet(this, _Sign_ss, "f").cs, __classPrivateFieldGet(this, _Sign_orgId, "f"), __classPrivateFieldGet(this, _Sign_ss, "f").roleId, sign, await sign());
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Sign an unstake request.
|
|
151
|
-
* @param {Key | string} key The key to sign with (either {@link Key} or its material ID).
|
|
152
|
-
* @param {Eth2UnstakeRequest} req The request to sign.
|
|
153
|
-
* @return {Promise<Eth2UnstakeResponse | AcceptedResponse>} The response.
|
|
154
|
-
*/
|
|
155
|
-
async unstake(key, req) {
|
|
156
|
-
const pubkey = typeof key === "string" ? key : key.materialId;
|
|
157
|
-
const sign = async (headers) => {
|
|
158
|
-
const resp = await (await __classPrivateFieldGet(this, _Sign_ss, "f").client()).post("/v1/org/{org_id}/eth2/unstake/{pubkey}", {
|
|
159
|
-
params: { path: { org_id: __classPrivateFieldGet(this, _Sign_orgId, "f"), pubkey } },
|
|
160
|
-
body: req,
|
|
161
|
-
headers: headers,
|
|
162
|
-
parseAs: "json",
|
|
163
|
-
});
|
|
164
|
-
return (0, env_1.assertOk)(resp);
|
|
165
|
-
};
|
|
166
|
-
return new SignResponse(__classPrivateFieldGet(this, _Sign_ss, "f").cs, __classPrivateFieldGet(this, _Sign_orgId, "f"), __classPrivateFieldGet(this, _Sign_ss, "f").roleId, sign, await sign());
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Sign a raw blob.
|
|
170
|
-
* @param {Key | string} key The key to sign with (either {@link Key} or its ID).
|
|
171
|
-
* @param {BlobSignRequest} req What to sign
|
|
172
|
-
* @return {Promise<BlobSignResponse | AcceptedResponse>} The response.
|
|
173
|
-
*/
|
|
174
|
-
async blob(key, req) {
|
|
175
|
-
const key_id = typeof key === "string" ? key : key.id;
|
|
176
|
-
const sign = async (headers) => {
|
|
177
|
-
const resp = await (await __classPrivateFieldGet(this, _Sign_ss, "f").client()).post("/v1/org/{org_id}/blob/sign/{key_id}", {
|
|
178
|
-
params: {
|
|
179
|
-
path: { org_id: __classPrivateFieldGet(this, _Sign_orgId, "f"), key_id },
|
|
180
|
-
},
|
|
181
|
-
body: req,
|
|
182
|
-
headers: headers,
|
|
183
|
-
parseAs: "json",
|
|
184
|
-
});
|
|
185
|
-
return (0, env_1.assertOk)(resp);
|
|
186
|
-
};
|
|
187
|
-
return new SignResponse(__classPrivateFieldGet(this, _Sign_ss, "f").cs, __classPrivateFieldGet(this, _Sign_orgId, "f"), __classPrivateFieldGet(this, _Sign_ss, "f").roleId, sign, await sign());
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Sign a bitcoin message.
|
|
191
|
-
* @param {Key | string} key The key to sign with (either {@link Key} or its material ID).
|
|
192
|
-
* @param {BtcSignRequest} req What to sign
|
|
193
|
-
* @return {Promise<BtcSignResponse | AcceptedResponse>} The response.
|
|
194
|
-
*/
|
|
195
|
-
async btc(key, req) {
|
|
196
|
-
const pubkey = typeof key === "string" ? key : key.materialId;
|
|
197
|
-
const sign = async (headers) => {
|
|
198
|
-
const resp = await (await __classPrivateFieldGet(this, _Sign_ss, "f").client()).post("/v0/org/{org_id}/btc/sign/{pubkey}", {
|
|
199
|
-
params: {
|
|
200
|
-
path: { org_id: __classPrivateFieldGet(this, _Sign_orgId, "f"), pubkey },
|
|
201
|
-
},
|
|
202
|
-
body: req,
|
|
203
|
-
headers: headers,
|
|
204
|
-
parseAs: "json",
|
|
205
|
-
});
|
|
206
|
-
return (0, env_1.assertOk)(resp);
|
|
207
|
-
};
|
|
208
|
-
return new SignResponse(__classPrivateFieldGet(this, _Sign_ss, "f").cs, __classPrivateFieldGet(this, _Sign_orgId, "f"), __classPrivateFieldGet(this, _Sign_ss, "f").roleId, sign, await sign());
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Sign a solana message.
|
|
212
|
-
* @param {Key | string} key The key to sign with (either {@link Key} or its material ID).
|
|
213
|
-
* @param {SolanaSignRequest} req What to sign
|
|
214
|
-
* @return {Promise<SolanaSignResponse | AcceptedResponse>} The response.
|
|
215
|
-
*/
|
|
216
|
-
async solana(key, req) {
|
|
217
|
-
const pubkey = typeof key === "string" ? key : key.materialId;
|
|
218
|
-
const sign = async (headers) => {
|
|
219
|
-
const resp = await (await __classPrivateFieldGet(this, _Sign_ss, "f").client()).post("/v1/org/{org_id}/solana/sign/{pubkey}", {
|
|
220
|
-
params: { path: { org_id: __classPrivateFieldGet(this, _Sign_orgId, "f"), pubkey } },
|
|
221
|
-
body: req,
|
|
222
|
-
headers: headers,
|
|
223
|
-
parseAs: "json",
|
|
224
|
-
});
|
|
225
|
-
return (0, env_1.assertOk)(resp);
|
|
226
|
-
};
|
|
227
|
-
return new SignResponse(__classPrivateFieldGet(this, _Sign_ss, "f").cs, __classPrivateFieldGet(this, _Sign_orgId, "f"), __classPrivateFieldGet(this, _Sign_ss, "f").roleId, sign, await sign());
|
|
228
|
-
}
|
|
229
|
-
// --------------------------------------------------------------------------
|
|
230
|
-
// -- INTERNAL --------------------------------------------------------------
|
|
231
|
-
// --------------------------------------------------------------------------
|
|
232
|
-
/* eslint-disable require-jsdoc */
|
|
233
|
-
/**
|
|
234
|
-
* Constructor.
|
|
235
|
-
*
|
|
236
|
-
* @param {string} orgId Organization ID
|
|
237
|
-
* @param {SignerSession} ss The signer session to use for signing requests
|
|
238
|
-
*/
|
|
239
|
-
constructor(orgId, ss) {
|
|
240
|
-
_Sign_orgId.set(this, void 0);
|
|
241
|
-
_Sign_ss.set(this, void 0);
|
|
242
|
-
__classPrivateFieldSet(this, _Sign_orgId, orgId, "f");
|
|
243
|
-
__classPrivateFieldSet(this, _Sign_ss, ss, "f");
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
exports.Sign = Sign;
|
|
247
|
-
_Sign_orgId = new WeakMap(), _Sign_ss = new WeakMap();
|
|
248
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaWduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qix3QkFBeUQ7QUFFekQsK0JBQWlDO0FBMENqQzs7R0FFRztBQUNILE1BQWEsWUFBWTtJQU92Qiw4RUFBOEU7SUFDOUUsV0FBVztRQUNULE9BQVEsdUJBQUEsSUFBSSwwQkFBMkIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxLQUFLLFNBQVMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLElBQUk7UUFDRixPQUFPLHVCQUFBLElBQUksMEJBQVcsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLFdBQVcsR0FBSSx1QkFBQSxJQUFJLDBCQUEyQixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUM7UUFDM0UsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7U0FDMUQ7UUFFRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQzdCLE1BQU0sV0FBVyxHQUFHLE1BQU0sT0FBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBQSxJQUFJLHdCQUFJLEVBQUUsdUJBQUEsSUFBSSwyQkFBTyxFQUFFLHVCQUFBLElBQUksNEJBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0RixJQUFBLGdCQUFNLEVBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFBLGdCQUFNLEVBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTVCLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFz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Ozs7OztPQUtHO0lBQ0gsWUFBWSxLQUFhLEVBQUUsRUFBaUI7UUFqTG5DLDhCQUFlO1FBQ2YsMkJBQW1CO1FBaUwxQix1QkFBQSxJQUFJLGVBQVUsS0FBSyxNQUFBLENBQUM7UUFDcEIsdUJBQUEsSUFBSSxZQUFPLEVBQUUsTUFBQSxDQUFDO0lBQ2hCLENBQUM7Q0FDRjtBQXRMRCxvQkFzTEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IEN1YmVTaWduZXIsIEtleSwgUm9sZSwgU2lnbmVyU2Vzc2lvbiB9IGZyb20gXCIuXCI7XG5pbXBvcnQgeyBjb21wb25lbnRzLCBwYXRocyB9IGZyb20gXCIuL2NsaWVudFwiO1xuaW1wb3J0IHsgYXNzZXJ0T2sgfSBmcm9tIFwiLi9lbnZcIjtcblxuLyogZXNsaW50LWRpc2FibGUgKi9cbmV4cG9ydCB0eXBlIEV0aDFTaWduUmVxdWVzdCA9XG4gIHBhdGhzW1wiL3YxL29yZy97b3JnX2lkfS9ldGgxL3NpZ24ve3B1YmtleX1cIl1bXCJwb3N0XCJdW1wicmVxdWVzdEJvZHlcIl1bXCJjb250ZW50XCJdW1wiYXBwbGljYXRpb24vanNvblwiXTtcbmV4cG9ydCB0eXBlIEV0aDJTaWduUmVxdWVzdCA9XG4gIHBhdGhzW1wiL3YxL29yZy97b3JnX2lkfS9ldGgyL3NpZ24ve3B1YmtleX1cIl1bXCJwb3N0XCJdW1wicmVxdWVzdEJvZHlcIl1bXCJjb250ZW50XCJdW1wiYXBwbGljYXRpb24vanNvblwiXTtcbmV4cG9ydCB0eXBlIEV0aDJTdGFrZVJlcXVlc3QgPVxuICBwYXRoc1tcIi92MS9vcmcve29yZ19pZH0vZXRoMi9zdGFrZVwiXVtcInBvc3RcIl1bXCJyZXF1ZXN0Qm9keVwiXVtcImNvbnRlbnRcIl1bXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuZXhwb3J0IHR5cGUgRXRoMlVuc3Rha2VSZXF1ZXN0ID1cbiAgcGF0aHNbXCIvdjEvb3JnL3tvcmdfaWR9L2V0aDIvdW5zdGFrZS97cHVia2V5fVwiXVtcInBvc3RcIl1bXCJyZXF1ZXN0Qm9keVwiXVtcImNvbnRlbnRcIl1bXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuZXhwb3J0IHR5cGUgQmxvYlNpZ25SZXF1ZXN0ID1cbiAgcGF0aHNbXCIvdjEvb3JnL3tvcmdfaWR9L2Jsb2Ivc2lnbi97a2V5X2lkfVwiXVtcInBvc3RcIl1bXCJyZXF1ZXN0Qm9keVwiXVtcImNvbnRlbnRcIl1bXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuZXhwb3J0IHR5cGUgQnRjU2lnblJlcXVlc3QgPVxuICBwYXRoc1tcIi92MC9vcmcve29yZ19pZH0vYnRjL3NpZ24ve3B1YmtleX1cIl1bXCJwb3N0XCJdW1wicmVxdWVzdEJvZHlcIl1bXCJjb250ZW50XCJdW1wiYXBwbGljYXRpb24vanNvblwiXTtcbmV4cG9ydCB0eXBlIFNvbGFuYVNpZ25SZXF1ZXN0ID1cbiAgcGF0aHNbXCIvdjEvb3JnL3tvcmdfaWR9L3NvbGFuYS9zaWduL3twdWJrZXl9XCJdW1wicG9zdFwiXVtcInJlcXVlc3RCb2R5XCJdW1wiY29udGVudFwiXVtcImFwcGxpY2F0aW9uL2pzb25cIl07XG5cbmV4cG9ydCB0eXBlIEV0aDFTaWduUmVzcG9uc2UgPVxuICBjb21wb25lbnRzW1wicmVzcG9uc2VzXCJdW1wiRXRoMVNpZ25SZXNwb25zZVwiXVtcImNvbnRlbnRcIl1bXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuZXhwb3J0IHR5cGUgRXRoMlNpZ25SZXNwb25zZSA9XG4gIGNvbXBvbmVudHNbXCJyZXNwb25zZXNcIl1bXCJFdGgyU2lnblJlc3BvbnNlXCJdW1wiY29udGVudFwiXVtcImFwcGxpY2F0aW9uL2pzb25cIl07XG5leHBvcnQgdHlwZSBFdGgyU3Rha2VSZXNwb25zZSA9XG4gIGNvbXBvbmVudHNbXCJyZXNwb25zZXNcIl1bXCJTdGFrZVJlc3BvbnNlXCJdW1wiY29udGVudFwiXVtcImFwcGxpY2F0aW9uL2pzb25cIl07XG5leHBvcnQgdHlwZSBFdGgyVW5zdGFrZVJlc3BvbnNlID1cbiAgY29tcG9uZW50c1tcInJlc3BvbnNlc1wiXVtcIlVuc3Rha2VSZXNwb25zZVwiXVtcImNvbnRlbnRcIl1bXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuZXhwb3J0IHR5cGUgQmxvYlNpZ25SZXNwb25zZSA9XG4gIGNvbXBvbmVudHNbXCJyZXNwb25zZXNcIl1bXCJCbG9iU2lnblJlc3BvbnNlXCJdW1wiY29udGVudFwiXVtcImFwcGxpY2F0aW9uL2pzb25cIl07XG5leHBvcnQgdHlwZSBCdGNTaWduUmVzcG9uc2UgPVxuICBjb21wb25lbnRzW1wicmVzcG9uc2VzXCJdW1wiQnRjU2lnblJlc3BvbnNlXCJdW1wiY29udGVudFwiXVtcImFwcGxpY2F0aW9uL2pzb25cIl07XG5leHBvcnQgdHlwZSBTb2xhbmFTaWduUmVzcG9uc2UgPVxuICBjb21wb25lbnRzW1wicmVzcG9uc2VzXCJdW1wiU29sYW5hU2lnblJlc3BvbnNlXCJdW1wiY29udGVudFwiXVtcImFwcGxpY2F0aW9uL2pzb25cIl07XG5leHBvcnQgdHlwZSBNZmFSZXF1ZXN0SW5mbyA9XG4gIGNvbXBvbmVudHNbXCJyZXNwb25zZXNcIl1bXCJNZmFSZXF1ZXN0SW5mb1wiXVtcImNvbnRlbnRcIl1bXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuXG5leHBvcnQgdHlwZSBBY2NlcHRlZFJlc3BvbnNlID0gY29tcG9uZW50c1tcInNjaGVtYXNcIl1bXCJBY2NlcHRlZFJlc3BvbnNlXCJdO1xuZXhwb3J0IHR5cGUgRXJyb3JSZXNwb25zZSA9IGNvbXBvbmVudHNbXCJzY2hlbWFzXCJdW1wiRXJyb3JSZXNwb25zZVwiXTtcbmV4cG9ydCB0eXBlIEJ0Y1NpZ25hdHVyZUtpbmQgPSBjb21wb25lbnRzW1wic2NoZW1hc1wiXVtcIkJ0Y1NpZ25hdHVyZUtpbmRcIl07XG4vKiBlc2xpbnQtZW5hYmxlICovXG5cbnR5cGUgU2lnbkZuPFU+ID0gKGhlYWRlcnM/OiBIZWFkZXJzSW5pdCkgPT4gUHJvbWlzZTxVIHwgQWNjZXB0ZWRSZXNwb25zZT47XG5cbi8qKlxuICogQSByZXNwb25zZSBvZiBhIHNpZ25pbmcgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNpZ25SZXNwb25zZTxVPiB7XG4gIHJlYWRvbmx5ICNjczogQ3ViZVNpZ25lcjtcbiAgcmVhZG9ubHkgI29yZ0lkOiBzdHJpbmc7XG4gIHJlYWRvbmx5ICNyb2xlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgI3NpZ25GbjogU2lnbkZuPFU+O1xuICByZWFkb25seSAjcmVzcDogVSB8IEFjY2VwdGVkUmVzcG9uc2U7XG5cbiAgLyoqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhpcyBzaWduaW5nIHJlcXVlc3QgcmVxdWlyZXMgYW4gTUZBIGFwcHJvdmFsICovXG4gIHJlcXVpcmVzTWZhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy4jcmVzcCBhcyBBY2NlcHRlZFJlc3BvbnNlKS5hY2NlcHRlZD8uTWZhUmVxdWlyZWQgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBAcmV0dXJuIHtVfSBUaGUgc2lnbmVkIGRhdGEgKi9cbiAgZGF0YSgpOiBVIHtcbiAgICByZXR1cm4gdGhpcy4jcmVzcCBhcyBVO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcHJvdmVzIHRoZSBNRkEgcmVxdWVzdC5cbiAgICpcbiAgICogTm90ZTogVGhpcyBvbmx5IHdvcmtzIGZvciBNRkEgcmVxdWVzdHMgdGhhdCByZXF1aXJlIGEgc2luZ2xlIGFwcHJvdmFsLlxuICAgKlxuICAgKiBAcmV0dXJuIHtTaWduUmVzcG9uc2U8VT59IFRoZSByZXN1bHQgb2Ygc2lnbmluZyB3aXRoIHRoZSBhcHByb3ZhbFxuICAgKi9cbiAgYXN5bmMgYXBwcm92ZSgpOiBQcm9taXNlPFNpZ25SZXNwb25zZTxVPj4ge1xuICAgIGNvbnN0IG1mYVJlcXVpcmVkID0gKHRoaXMuI3Jlc3AgYXMgQWNjZXB0ZWRSZXNwb25zZSkuYWNjZXB0ZWQ/Lk1mYVJlcXVpcmVkO1xuICAgIGlmICghbWZhUmVxdWlyZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlcXVlc3QgZG9lcyBub3QgcmVxdWlyZSBNRkEgYXBwcm92YWxcIik7XG4gICAgfVxuXG4gICAgY29uc3QgbWZhSWQgPSBtZmFSZXF1aXJlZC5pZDtcbiAgICBjb25zdCBtZmFBcHByb3ZhbCA9IGF3YWl0IFJvbGUubWZhQXBwcm92ZSh0aGlzLiNjcywgdGhpcy4jb3JnSWQsIHRoaXMuI3JvbGVJZCwgbWZhSWQpO1xuICAgIGFzc2VydChtZmFBcHByb3ZhbC5pZCA9PT0gbWZhSWQpO1xuICAgIGFzc2VydChtZmFBcHByb3ZhbC5yZWNlaXB0KTtcblxuICAgIGNvbnN0IG1mYUNvbmYgPSBtZmFBcHByb3ZhbC5yZWNlaXB0Py5jb25maXJtYXRpb247XG4gICAgaWYgKCFtZmFDb25mKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZmFSZXF1ZXN0IGhhcyBub3QgYmVlbiBhcHByb3ZlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgIFwieC1jdWJpc3QtbWZhLWlkXCI6IG1mYUlkLFxuICAgICAgXCJ4LWN1YmlzdC1tZmEtY29uZmlybWF0aW9uXCI6IG1mYUNvbmYsXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFNpZ25SZXNwb25zZShcbiAgICAgIHRoaXMuI2NzLFxuICAgICAgdGhpcy4jb3JnSWQsXG4gICAgICB0aGlzLiNyb2xlSWQsXG4gICAgICB0aGlzLiNzaWduRm4sXG4gICAgICBhd2FpdCB0aGlzLiNzaWduRm4oaGVhZGVycyksXG4gICAgKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tIElOVEVSTkFMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1YmVTaWduZXJ9IGNzIFRoZSBDdWJlU2lnbmVyIGluc3RhbmNlIHRvIHVzZSBmb3IgcmVxdWVzdHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9yZ0lkIFRoZSBvcmcgaWQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2lnbmluZyByZXF1ZXN0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb2xlSWQgVGhlIHJvbGUgaWQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2lnbmluZyByZXF1ZXN0XG4gICAqIEBwYXJhbSB7U2lnbkZufSBzaWduRm4gVGhlIHNpZ25pbmcgZnVuY3Rpb24gdGhhdCB0aGlzIHJlc3BvbnNlIGlzIGZyb20uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmd1bWVudCBpcyB1c2VkIHRvIHJlc2VuZCByZXF1ZXN0cyB3aXRoXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IGhlYWRlcnMgaWYgbmVlZGVkLlxuICAgKiBAcGFyYW0ge1UgfCBBY2NlcHRlZFJlc3BvbnNlfSByZXNwIFRoZSByZXNwb25zZSBhcyByZXR1cm5lZCBieSB0aGUgT3BlbkFQSVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNzOiBDdWJlU2lnbmVyLFxuICAgIG9yZ0lkOiBzdHJpbmcsXG4gICAgcm9sZUlkOiBzdHJpbmcsXG4gICAgc2lnbkZuOiBTaWduRm48VT4sXG4gICAgcmVzcDogVSB8IEFjY2VwdGVkUmVzcG9uc2UsXG4gICkge1xuICAgIHRoaXMuI2NzID0gY3M7XG4gICAgdGhpcy4jb3JnSWQgPSBvcmdJZDtcbiAgICB0aGlzLiNyb2xlSWQgPSByb2xlSWQ7XG4gICAgdGhpcy4jc2lnbkZuID0gc2lnbkZuO1xuICAgIHRoaXMuI3Jlc3AgPSByZXNwO1xuICB9XG59XG5cbi8qKlxuICogV3JhcHBlciBhcm91bmQgc2lnbiBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgU2lnbiB7XG4gIHJlYWRvbmx5ICNvcmdJZDogc3RyaW5nO1xuICByZWFkb25seSAjc3M6IFNpZ25lclNlc3Npb247XG5cbiAgLyoqXG4gICAqIFN1Ym1pdCBhbiAnZXRoMScgc2lnbiByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge0tleSB8IHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gc2lnbiB3aXRoIChlaXRoZXIge0BsaW5rIEtleX0gb3IgaXRzIG1hdGVyaWFsIElEKS5cbiAgICogQHBhcmFtIHtFdGgxU2lnblJlcXVlc3R9IHJlcSBXaGF0IHRvIHNpZ24uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8RXRoMVNpZ25SZXNwb25zZSB8IEFjY2VwdGVkUmVzcG9uc2U+fSBTaWduYXR1cmVcbiAgICovXG4gIGFzeW5jIGV0aDEoa2V5OiBLZXkgfCBzdHJpbmcsIHJlcTogRXRoMVNpZ25SZXF1ZXN0KTogUHJvbWlzZTxTaWduUmVzcG9uc2U8RXRoMVNpZ25SZXNwb25zZT4+IHtcbiAgICBjb25zdCBwdWJrZXkgPSB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiID8gKGtleSBhcyBzdHJpbmcpIDoga2V5Lm1hdGVyaWFsSWQ7XG4gICAgY29uc3Qgc2lnbiA9IGFzeW5jIChoZWFkZXJzPzogSGVhZGVyc0luaXQpID0+IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCAoXG4gICAgICAgIGF3YWl0IHRoaXMuI3NzLmNsaWVudCgpXG4gICAgICApLnBvc3QoXCIvdjEvb3JnL3tvcmdfaWR9L2V0aDEvc2lnbi97cHVia2V5fVwiLCB7XG4gICAgICAgIHBhcmFtczogeyBwYXRoOiB7IG9yZ19pZDogdGhpcy4jb3JnSWQsIHB1YmtleSB9IH0sXG4gICAgICAgIGJvZHk6IHJlcSxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgcGFyc2VBczogXCJqc29uXCIsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhc3NlcnRPayhyZXNwKTtcbiAgICB9O1xuICAgIHJldHVybiBuZXcgU2lnblJlc3BvbnNlKHRoaXMuI3NzLmNzLCB0aGlzLiNvcmdJZCwgdGhpcy4jc3Mucm9sZUlkLCBzaWduLCBhd2FpdCBzaWduKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdCBhbiAnZXRoMicgc2lnbiByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge0tleSB8IHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gc2lnbiB3aXRoIChlaXRoZXIge0BsaW5rIEtleX0gb3IgaXRzIG1hdGVyaWFsIElEKS5cbiAgICogQHBhcmFtIHtFdGgyU2lnblJlcXVlc3R9IHJlcSBXaGF0IHRvIHNpZ24uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8RXRoMlNpZ25SZXNwb25zZSB8IEFjY2VwdGVkUmVzcG9uc2U+fSBTaWduYXR1cmVcbiAgICovXG4gIGFzeW5jIGV0aDIoa2V5OiBLZXkgfCBzdHJpbmcsIHJlcTogRXRoMlNpZ25SZXF1ZXN0KTogUHJvbWlzZTxTaWduUmVzcG9uc2U8RXRoMlNpZ25SZXNwb25zZT4+IHtcbiAgICBjb25zdCBwdWJrZXkgPSB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiID8gKGtleSBhcyBzdHJpbmcpIDoga2V5Lm1hdGVyaWFsSWQ7XG4gICAgY29uc3Qgc2lnbiA9IGFzeW5jIChoZWFkZXJzPzogSGVhZGVyc0luaXQpID0+IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCAoXG4gICAgICAgIGF3YWl0IHRoaXMuI3NzLmNsaWVudCgpXG4gICAgICApLnBvc3QoXCIvdjEvb3JnL3tvcmdfaWR9L2V0aDIvc2lnbi97cHVia2V5fVwiLCB7XG4gICAgICAgIHBhcmFtczogeyBwYXRoOiB7IG9yZ19pZDogdGhpcy4jb3JnSWQsIHB1YmtleSB9IH0sXG4gICAgICAgIGJvZHk6IHJlcSxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgcGFyc2VBczogXCJqc29uXCIsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhc3NlcnRPayhyZXNwKTtcbiAgICB9O1xuICAgIHJldHVybiBuZXcgU2lnblJlc3BvbnNlKHRoaXMuI3NzLmNzLCB0aGlzLiNvcmdJZCwgdGhpcy4jc3Mucm9sZUlkLCBzaWduLCBhd2FpdCBzaWduKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gYSBzdGFrZSByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge0V0aDJTdGFrZVJlcXVlc3R9IHJlcSBUaGUgcmVxdWVzdCB0byBzaWduLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEV0aDJTdGFrZVJlc3BvbnNlIHwgQWNjZXB0ZWRSZXNwb25zZT59IFRoZSByZXNwb25zZS5cbiAgICovXG4gIGFzeW5jIHN0YWtlKHJlcTogRXRoMlN0YWtlUmVxdWVzdCk6IFByb21pc2U8U2lnblJlc3BvbnNlPEV0aDJTdGFrZVJlc3BvbnNlPj4ge1xuICAgIGNvbnN0IHNpZ24gPSBhc3luYyAoaGVhZGVycz86IEhlYWRlcnNJbml0KSA9PiB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgKFxuICAgICAgICBhd2FpdCB0aGlzLiNzcy5jbGllbnQoKVxuICAgICAgKS5wb3N0KFwiL3YxL29yZy97b3JnX2lkfS9ldGgyL3N0YWtlXCIsIHtcbiAgICAgICAgcGFyYW1zOiB7IHBhdGg6IHsgb3JnX2lkOiB0aGlzLiNvcmdJZCB9IH0sXG4gICAgICAgIGJvZHk6IHJlcSxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgcGFyc2VBczogXCJqc29uXCIsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhc3NlcnRPayhyZXNwKTtcbiAgICB9O1xuICAgIHJldHVybiBuZXcgU2lnblJlc3BvbnNlKHRoaXMuI3NzLmNzLCB0aGlzLiNvcmdJZCwgdGhpcy4jc3Mucm9sZUlkLCBzaWduLCBhd2FpdCBzaWduKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gYW4gdW5zdGFrZSByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge0tleSB8IHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gc2lnbiB3aXRoIChlaXRoZXIge0BsaW5rIEtleX0gb3IgaXRzIG1hdGVyaWFsIElEKS5cbiAgICogQHBhcmFtIHtFdGgyVW5zdGFrZVJlcXVlc3R9IHJlcSBUaGUgcmVxdWVzdCB0byBzaWduLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEV0aDJVbnN0YWtlUmVzcG9uc2UgfCBBY2NlcHRlZFJlc3BvbnNlPn0gVGhlIHJlc3BvbnNlLlxuICAgKi9cbiAgYXN5bmMgdW5zdGFrZShcbiAgICBrZXk6IEtleSB8IHN0cmluZyxcbiAgICByZXE6IEV0aDJVbnN0YWtlUmVxdWVzdCxcbiAgKTogUHJvbWlzZTxTaWduUmVzcG9uc2U8RXRoMlVuc3Rha2VSZXNwb25zZT4+IHtcbiAgICBjb25zdCBwdWJrZXkgPSB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiID8gKGtleSBhcyBzdHJpbmcpIDoga2V5Lm1hdGVyaWFsSWQ7XG4gICAgY29uc3Qgc2lnbiA9IGFzeW5jIChoZWFkZXJzPzogSGVhZGVyc0luaXQpID0+IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCAoXG4gICAgICAgIGF3YWl0IHRoaXMuI3NzLmNsaWVudCgpXG4gICAgICApLnBvc3QoXCIvdjEvb3JnL3tvcmdfaWR9L2V0aDIvdW5zdGFrZS97cHVia2V5fVwiLCB7XG4gICAgICAgIHBhcmFtczogeyBwYXRoOiB7IG9yZ19pZDogdGhpcy4jb3JnSWQsIHB1YmtleSB9IH0sXG4gICAgICAgIGJvZHk6IHJlcSxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgcGFyc2VBczogXCJqc29uXCIsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhc3NlcnRPayhyZXNwKTtcbiAgICB9O1xuICAgIHJldHVybiBuZXcgU2lnblJlc3BvbnNlKHRoaXMuI3NzLmNzLCB0aGlzLiNvcmdJZCwgdGhpcy4jc3Mucm9sZUlkLCBzaWduLCBhd2FpdCBzaWduKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gYSByYXcgYmxvYi5cbiAgICogQHBhcmFtIHtLZXkgfCBzdHJpbmd9IGtleSBUaGUga2V5IHRvIHNpZ24gd2l0aCAoZWl0aGVyIHtAbGluayBLZXl9IG9yIGl0cyBJRCkuXG4gICAqIEBwYXJhbSB7QmxvYlNpZ25SZXF1ZXN0fSByZXEgV2hhdCB0byBzaWduXG4gICAqIEByZXR1cm4ge1Byb21pc2U8QmxvYlNpZ25SZXNwb25zZSB8IEFjY2VwdGVkUmVzcG9uc2U+fSBUaGUgcmVzcG9uc2UuXG4gICAqL1xuICBhc3luYyBibG9iKGtleTogS2V5IHwgc3RyaW5nLCByZXE6IEJsb2JTaWduUmVxdWVzdCk6IFByb21pc2U8U2lnblJlc3BvbnNlPEJsb2JTaWduUmVzcG9uc2U+PiB7XG4gICAgY29uc3Qga2V5X2lkID0gdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiA/IChrZXkgYXMgc3RyaW5nKSA6IGtleS5pZDtcbiAgICBjb25zdCBzaWduID0gYXN5bmMgKGhlYWRlcnM/OiBIZWFkZXJzSW5pdCkgPT4ge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IChcbiAgICAgICAgYXdhaXQgdGhpcy4jc3MuY2xpZW50KClcbiAgICAgICkucG9zdChcIi92MS9vcmcve29yZ19pZH0vYmxvYi9zaWduL3trZXlfaWR9XCIsIHtcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgcGF0aDogeyBvcmdfaWQ6IHRoaXMuI29yZ0lkLCBrZXlfaWQgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogcmVxLFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICBwYXJzZUFzOiBcImpzb25cIixcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFzc2VydE9rKHJlc3ApO1xuICAgIH07XG4gICAgcmV0dXJuIG5ldyBTaWduUmVzcG9uc2UodGhpcy4jc3MuY3MsIHRoaXMuI29yZ0lkLCB0aGlzLiNzcy5yb2xlSWQsIHNpZ24sIGF3YWl0IHNpZ24oKSk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhIGJpdGNvaW4gbWVzc2FnZS5cbiAgICogQHBhcmFtIHtLZXkgfCBzdHJpbmd9IGtleSBUaGUga2V5IHRvIHNpZ24gd2l0aCAoZWl0aGVyIHtAbGluayBLZXl9IG9yIGl0cyBtYXRlcmlhbCBJRCkuXG4gICAqIEBwYXJhbSB7QnRjU2lnblJlcXVlc3R9IHJlcSBXaGF0IHRvIHNpZ25cbiAgICogQHJldHVybiB7UHJvbWlzZTxCdGNTaWduUmVzcG9uc2UgfCBBY2NlcHRlZFJlc3BvbnNlPn0gVGhlIHJlc3BvbnNlLlxuICAgKi9cbiAgYXN5bmMgYnRjKGtleTogS2V5IHwgc3RyaW5nLCByZXE6IEJ0Y1NpZ25SZXF1ZXN0KTogUHJvbWlzZTxTaWduUmVzcG9uc2U8QnRjU2lnblJlc3BvbnNlPj4ge1xuICAgIGNvbnN0IHB1YmtleSA9IHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgPyAoa2V5IGFzIHN0cmluZykgOiBrZXkubWF0ZXJpYWxJZDtcbiAgICBjb25zdCBzaWduID0gYXN5bmMgKGhlYWRlcnM/OiBIZWFkZXJzSW5pdCkgPT4ge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IChcbiAgICAgICAgYXdhaXQgdGhpcy4jc3MuY2xpZW50KClcbiAgICAgICkucG9zdChcIi92MC9vcmcve29yZ19pZH0vYnRjL3NpZ24ve3B1YmtleX1cIiwge1xuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBwYXRoOiB7IG9yZ19pZDogdGhpcy4jb3JnSWQsIHB1YmtleSB9LFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiByZXEsXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgIHBhcnNlQXM6IFwianNvblwiLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYXNzZXJ0T2socmVzcCk7XG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFNpZ25SZXNwb25zZSh0aGlzLiNzcy5jcywgdGhpcy4jb3JnSWQsIHRoaXMuI3NzLnJvbGVJZCwgc2lnbiwgYXdhaXQgc2lnbigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgc29sYW5hIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7S2V5IHwgc3RyaW5nfSBrZXkgVGhlIGtleSB0byBzaWduIHdpdGggKGVpdGhlciB7QGxpbmsgS2V5fSBvciBpdHMgbWF0ZXJpYWwgSUQpLlxuICAgKiBAcGFyYW0ge1NvbGFuYVNpZ25SZXF1ZXN0fSByZXEgV2hhdCB0byBzaWduXG4gICAqIEByZXR1cm4ge1Byb21pc2U8U29sYW5hU2lnblJlc3BvbnNlIHwgQWNjZXB0ZWRSZXNwb25zZT59IFRoZSByZXNwb25zZS5cbiAgICovXG4gIGFzeW5jIHNvbGFuYShcbiAgICBrZXk6IEtleSB8IHN0cmluZyxcbiAgICByZXE6IFNvbGFuYVNpZ25SZXF1ZXN0LFxuICApOiBQcm9taXNlPFNpZ25SZXNwb25zZTxTb2xhbmFTaWduUmVzcG9uc2U+PiB7XG4gICAgY29uc3QgcHVia2V5ID0gdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiA/IChrZXkgYXMgc3RyaW5nKSA6IGtleS5tYXRlcmlhbElkO1xuICAgIGNvbnN0IHNpZ24gPSBhc3luYyAoaGVhZGVycz86IEhlYWRlcnNJbml0KSA9PiB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgKFxuICAgICAgICBhd2FpdCB0aGlzLiNzcy5jbGllbnQoKVxuICAgICAgKS5wb3N0KFwiL3YxL29yZy97b3JnX2lkfS9zb2xhbmEvc2lnbi97cHVia2V5fVwiLCB7XG4gICAgICAgIHBhcmFtczogeyBwYXRoOiB7IG9yZ19pZDogdGhpcy4jb3JnSWQsIHB1YmtleSB9IH0sXG4gICAgICAgIGJvZHk6IHJlcSxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgcGFyc2VBczogXCJqc29uXCIsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhc3NlcnRPayhyZXNwKTtcbiAgICB9O1xuICAgIHJldHVybiBuZXcgU2lnblJlc3BvbnNlKHRoaXMuI3NzLmNzLCB0aGlzLiNvcmdJZCwgdGhpcy4jc3Mucm9sZUlkLCBzaWduLCBhd2FpdCBzaWduKCkpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0gSU5URVJOQUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSByZXF1aXJlLWpzZG9jICovXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3JnSWQgT3JnYW5pemF0aW9uIElEXG4gICAqIEBwYXJhbSB7U2lnbmVyU2Vzc2lvbn0gc3MgVGhlIHNpZ25lciBzZXNzaW9uIHRvIHVzZSBmb3Igc2lnbmluZyByZXF1ZXN0c1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3JnSWQ6IHN0cmluZywgc3M6IFNpZ25lclNlc3Npb24pIHtcbiAgICB0aGlzLiNvcmdJZCA9IG9yZ0lkO1xuICAgIHRoaXMuI3NzID0gc3M7XG4gIH1cbn1cbiJdfQ==
|
package/dist/test/sessions.d.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { EnvInterface } from "../src/env";
|
|
2
|
-
/**
|
|
3
|
-
* Defaults.
|
|
4
|
-
*/
|
|
5
|
-
export declare class CubeSignerDefaults {
|
|
6
|
-
/** Default signer-session.json file path
|
|
7
|
-
* @return {string} Default signer-session.json file path
|
|
8
|
-
*/
|
|
9
|
-
static signerSessionFile(): string;
|
|
10
|
-
/** Default management-session.json file path
|
|
11
|
-
* @return {string} Default management-session.json file path
|
|
12
|
-
*/
|
|
13
|
-
static managementSessionFile(): string;
|
|
14
|
-
}
|
|
15
|
-
/** JSON representation of our "management session" file format */
|
|
16
|
-
export interface ManagementSession {
|
|
17
|
-
email: string;
|
|
18
|
-
id_token: string;
|
|
19
|
-
access_token: string;
|
|
20
|
-
refresh_token: string;
|
|
21
|
-
expiration: string;
|
|
22
|
-
env: {
|
|
23
|
-
["Dev-CubeSignerStack"]: EnvInterface;
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
/** JSON representation of our "signer session" file format */
|
|
27
|
-
export interface SignerSession {
|
|
28
|
-
org_id: string;
|
|
29
|
-
role_id: string;
|
|
30
|
-
purpose: string;
|
|
31
|
-
token: string;
|
|
32
|
-
env: {
|
|
33
|
-
["Dev-CubeSignerStack"]: EnvInterface;
|
|
34
|
-
};
|
|
35
|
-
}
|
package/dist/test/sessions.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.CubeSignerDefaults = void 0;
|
|
27
|
-
const path = __importStar(require("path"));
|
|
28
|
-
/**
|
|
29
|
-
* Directory where CubeSigner stores config files.
|
|
30
|
-
* @return {string} Config dir
|
|
31
|
-
*/
|
|
32
|
-
function configDir() {
|
|
33
|
-
const configDir = process.platform === "darwin"
|
|
34
|
-
? `${process.env.HOME}/Library/Application Support`
|
|
35
|
-
: `${process.env.HOME}/.config`;
|
|
36
|
-
return path.join(configDir, "cubesigner");
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Defaults.
|
|
40
|
-
*/
|
|
41
|
-
class CubeSignerDefaults {
|
|
42
|
-
/** Default signer-session.json file path
|
|
43
|
-
* @return {string} Default signer-session.json file path
|
|
44
|
-
*/
|
|
45
|
-
static signerSessionFile() {
|
|
46
|
-
return path.join(configDir(), "signer-session.json");
|
|
47
|
-
}
|
|
48
|
-
/** Default management-session.json file path
|
|
49
|
-
* @return {string} Default management-session.json file path
|
|
50
|
-
*/
|
|
51
|
-
static managementSessionFile() {
|
|
52
|
-
return path.join(configDir(), "management-session.json");
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
exports.CubeSignerDefaults = CubeSignerDefaults;
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0L3Nlc3Npb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBRzdCOzs7R0FHRztBQUNILFNBQVMsU0FBUztJQUNoQixNQUFNLFNBQVMsR0FDYixPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVE7UUFDM0IsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLDhCQUE4QjtRQUNuRCxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDO0lBQ3BDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxrQkFBa0I7SUFDN0I7O09BRUc7SUFDSCxNQUFNLENBQUMsaUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxxQkFBcUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLHlCQUF5QixDQUFDLENBQUM7SUFDM0QsQ0FBQztDQUNGO0FBZEQsZ0RBY0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBFbnZJbnRlcmZhY2UgfSBmcm9tIFwiLi4vc3JjL2VudlwiO1xuXG4vKipcbiAqIERpcmVjdG9yeSB3aGVyZSBDdWJlU2lnbmVyIHN0b3JlcyBjb25maWcgZmlsZXMuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IENvbmZpZyBkaXJcbiAqL1xuZnVuY3Rpb24gY29uZmlnRGlyKCk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbmZpZ0RpciA9XG4gICAgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIlxuICAgICAgPyBgJHtwcm9jZXNzLmVudi5IT01FfS9MaWJyYXJ5L0FwcGxpY2F0aW9uIFN1cHBvcnRgXG4gICAgICA6IGAke3Byb2Nlc3MuZW52LkhPTUV9Ly5jb25maWdgO1xuICByZXR1cm4gcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJjdWJlc2lnbmVyXCIpO1xufVxuXG4vKipcbiAqIERlZmF1bHRzLlxuICovXG5leHBvcnQgY2xhc3MgQ3ViZVNpZ25lckRlZmF1bHRzIHtcbiAgLyoqIERlZmF1bHQgc2lnbmVyLXNlc3Npb24uanNvbiBmaWxlIHBhdGhcbiAgICogQHJldHVybiB7c3RyaW5nfSBEZWZhdWx0IHNpZ25lci1zZXNzaW9uLmpzb24gZmlsZSBwYXRoXG4gICAqL1xuICBzdGF0aWMgc2lnbmVyU2Vzc2lvbkZpbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKGNvbmZpZ0RpcigpLCBcInNpZ25lci1zZXNzaW9uLmpzb25cIik7XG4gIH1cblxuICAvKiogRGVmYXVsdCBtYW5hZ2VtZW50LXNlc3Npb24uanNvbiBmaWxlIHBhdGhcbiAgICogQHJldHVybiB7c3RyaW5nfSBEZWZhdWx0IG1hbmFnZW1lbnQtc2Vzc2lvbi5qc29uIGZpbGUgcGF0aFxuICAgKi9cbiAgc3RhdGljIG1hbmFnZW1lbnRTZXNzaW9uRmlsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXRoLmpvaW4oY29uZmlnRGlyKCksIFwibWFuYWdlbWVudC1zZXNzaW9uLmpzb25cIik7XG4gIH1cbn1cblxuLyoqIEpTT04gcmVwcmVzZW50YXRpb24gb2Ygb3VyIFwibWFuYWdlbWVudCBzZXNzaW9uXCIgZmlsZSBmb3JtYXQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlbWVudFNlc3Npb24ge1xuICBlbWFpbDogc3RyaW5nO1xuICBpZF90b2tlbjogc3RyaW5nO1xuICBhY2Nlc3NfdG9rZW46IHN0cmluZztcbiAgcmVmcmVzaF90b2tlbjogc3RyaW5nO1xuICBleHBpcmF0aW9uOiBzdHJpbmc7XG4gIGVudjoge1xuICAgIFtcIkRldi1DdWJlU2lnbmVyU3RhY2tcIl06IEVudkludGVyZmFjZTtcbiAgfTtcbn1cblxuLyoqIEpTT04gcmVwcmVzZW50YXRpb24gb2Ygb3VyIFwic2lnbmVyIHNlc3Npb25cIiBmaWxlIGZvcm1hdCAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduZXJTZXNzaW9uIHtcbiAgb3JnX2lkOiBzdHJpbmc7XG4gIHJvbGVfaWQ6IHN0cmluZztcbiAgcHVycG9zZTogc3RyaW5nO1xuICB0b2tlbjogc3RyaW5nO1xuICBlbnY6IHtcbiAgICBbXCJEZXYtQ3ViZVNpZ25lclN0YWNrXCJdOiBFbnZJbnRlcmZhY2U7XG4gIH07XG59XG4iXX0=
|
package/src/ethers/index.ts
DELETED
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
JsonRpcApiProvider,
|
|
3
|
-
TypedDataDomain,
|
|
4
|
-
TypedDataEncoder,
|
|
5
|
-
TypedDataField,
|
|
6
|
-
ethers,
|
|
7
|
-
getBytes,
|
|
8
|
-
toBeHex,
|
|
9
|
-
} from "ethers";
|
|
10
|
-
import { SignerSession } from "../signer_session";
|
|
11
|
-
import { CubeSignerResponse } from "../response";
|
|
12
|
-
import { BlobSignRequest, EvmSignRequest, MfaRequestInfo } from "../schema_types";
|
|
13
|
-
import { KeyInfo } from "../key";
|
|
14
|
-
import assert from "assert";
|
|
15
|
-
|
|
16
|
-
/** Options for the signer */
|
|
17
|
-
interface SignerOptions {
|
|
18
|
-
/** Optional provider to use */
|
|
19
|
-
provider?: null | ethers.Provider;
|
|
20
|
-
/**
|
|
21
|
-
* The function to call when MFA information is retrieved. If this callback
|
|
22
|
-
* throws, no transaction is broadcast.
|
|
23
|
-
*/
|
|
24
|
-
onMfaPoll?: (arg0: MfaRequestInfo) => void;
|
|
25
|
-
/**
|
|
26
|
-
* The amount of time (in milliseconds) to wait between checks for MFA
|
|
27
|
-
* updates. Default is 1000ms
|
|
28
|
-
*/
|
|
29
|
-
mfaPollIntervalMs?: number;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* A ethers.js Signer using CubeSigner
|
|
34
|
-
*/
|
|
35
|
-
export class Signer extends ethers.AbstractSigner {
|
|
36
|
-
/** The address of the account */
|
|
37
|
-
readonly #address: string;
|
|
38
|
-
|
|
39
|
-
/** The key to use for signing */
|
|
40
|
-
#key?: KeyInfo;
|
|
41
|
-
|
|
42
|
-
/** The underlying session */
|
|
43
|
-
readonly #signerSession: SignerSession;
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* The function to call when MFA information is retrieved. If this callback
|
|
47
|
-
* throws, no transaction is broadcast.
|
|
48
|
-
*/
|
|
49
|
-
readonly #onMfaPoll: (arg0: MfaRequestInfo) => void;
|
|
50
|
-
|
|
51
|
-
/** The amount of time to wait between checks for MFA updates */
|
|
52
|
-
readonly #mfaPollIntervalMs: number;
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Create new Signer instance
|
|
56
|
-
* @param {KeyInfo | string} address The key or the eth address of the account to use.
|
|
57
|
-
* @param {SignerSession} signerSession The underlying Signer session.
|
|
58
|
-
* @param {SignerOptions} options The options to use for the Signer instance
|
|
59
|
-
*/
|
|
60
|
-
constructor(address: KeyInfo | string, signerSession: SignerSession, options?: SignerOptions) {
|
|
61
|
-
super(options?.provider);
|
|
62
|
-
if (typeof address === "string") {
|
|
63
|
-
this.#address = address;
|
|
64
|
-
} else {
|
|
65
|
-
this.#address = address.materialId;
|
|
66
|
-
this.#key = address as KeyInfo;
|
|
67
|
-
}
|
|
68
|
-
this.#signerSession = signerSession;
|
|
69
|
-
this.#onMfaPoll = options?.onMfaPoll ?? ((/* _mfaInfo: MfaRequestInfo */) => {}); // eslint-disable-line @typescript-eslint/no-empty-function
|
|
70
|
-
this.#mfaPollIntervalMs = options?.mfaPollIntervalMs ?? 1000;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/** Resolves to the signer address. */
|
|
74
|
-
async getAddress(): Promise<string> {
|
|
75
|
-
return this.#address;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Returns the signer connected to %%provider%%.
|
|
80
|
-
* @param {null | ethers.Provider} provider The optional provider instance to use.
|
|
81
|
-
* @return {Signer} The signer connected to signer.
|
|
82
|
-
*/
|
|
83
|
-
connect(provider: null | ethers.Provider): Signer {
|
|
84
|
-
return new Signer(this.#address, this.#signerSession, { provider });
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Construct a signing request from a transaction. This populates the transaction
|
|
89
|
-
* type to `0x02` (EIP-1559) unless set.
|
|
90
|
-
*
|
|
91
|
-
* @param {ethers.TransactionRequest} tx The transaction
|
|
92
|
-
* @return {EvmSignRequest} The EVM sign request to be sent to CubeSigner
|
|
93
|
-
*/
|
|
94
|
-
async evmSignRequestFromTx(tx: ethers.TransactionRequest): Promise<EvmSignRequest> {
|
|
95
|
-
// get the chain id from the network or tx
|
|
96
|
-
let chainId = tx.chainId;
|
|
97
|
-
if (chainId === undefined) {
|
|
98
|
-
const network = await this.provider?.getNetwork();
|
|
99
|
-
chainId = network?.chainId?.toString() ?? "1";
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Convert the transaction into a JSON-RPC transaction
|
|
103
|
-
const rpcTx =
|
|
104
|
-
this.provider instanceof JsonRpcApiProvider
|
|
105
|
-
? this.provider.getRpcTransaction(tx)
|
|
106
|
-
: // We can just call the getRpcTransaction with a
|
|
107
|
-
// null receiver since it doesn't actually use it
|
|
108
|
-
// (and really should be declared static).
|
|
109
|
-
JsonRpcApiProvider.prototype.getRpcTransaction.call(null, tx);
|
|
110
|
-
rpcTx.type = toBeHex(tx.type ?? 0x02, 1); // we expect 0x0[0-2]
|
|
111
|
-
|
|
112
|
-
return <EvmSignRequest>{
|
|
113
|
-
chain_id: Number(chainId),
|
|
114
|
-
tx: rpcTx,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Sign a transaction. This method will block if the key requires MFA approval.
|
|
120
|
-
* @param {ethers.TransactionRequest} tx The transaction to sign.
|
|
121
|
-
* @return {Promise<string>} Hex-encoded RLP encoding of the transaction and its signature.
|
|
122
|
-
*/
|
|
123
|
-
async signTransaction(tx: ethers.TransactionRequest): Promise<string> {
|
|
124
|
-
const req = await this.evmSignRequestFromTx(tx);
|
|
125
|
-
const res = await this.#signerSession.signEvm(this.#address, req);
|
|
126
|
-
const data = await this.#handleMfa(res);
|
|
127
|
-
return data.rlp_signed_tx;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Signs arbitrary messages. This uses ethers.js's [hashMessage](https://docs.ethers.org/v6/api/hashing/#hashMessage)
|
|
132
|
-
* to compute the EIP-191 digest and signs this digest using {@link Key#signBlob}.
|
|
133
|
-
* The key (for this session) must have the `"AllowRawBlobSigning"` policy attached.
|
|
134
|
-
* @param {string | Uint8Array} message The message to sign.
|
|
135
|
-
* @return {Promise<string>} The signature.
|
|
136
|
-
*/
|
|
137
|
-
async signMessage(message: string | Uint8Array): Promise<string> {
|
|
138
|
-
const digest = ethers.hashMessage(message);
|
|
139
|
-
return this.signBlob(digest);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Signs EIP-712 typed data. This uses ethers.js's
|
|
144
|
-
* [TypedDataEncoder.hash](https://docs.ethers.org/v6/api/hashing/#TypedDataEncoder_hash)
|
|
145
|
-
* to compute the EIP-712 digest and signs this digest using {@link Key#signBlob}.
|
|
146
|
-
* The key (for this session) must have the `"AllowRawBlobSigning"` policy attached.
|
|
147
|
-
* @param {TypedDataDomain} domain The domain of the typed data.
|
|
148
|
-
* @param {Record<string, Array<TypedDataField>>} types The types of the typed data.
|
|
149
|
-
* @param {Record<string, any>} value The value of the typed data.
|
|
150
|
-
* @return {Promise<string>} The signature.
|
|
151
|
-
*/
|
|
152
|
-
async signTypedData(
|
|
153
|
-
domain: TypedDataDomain,
|
|
154
|
-
types: Record<string, Array<TypedDataField>>,
|
|
155
|
-
value: Record<string, any>, // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
156
|
-
): Promise<string> {
|
|
157
|
-
const digest = TypedDataEncoder.hash(domain, types, value);
|
|
158
|
-
return this.signBlob(digest);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Sign arbitrary digest. This uses {@link Key#signBlob}.
|
|
163
|
-
* @param {string} digest The digest to sign.
|
|
164
|
-
* @return {Promise<string>} The signature.
|
|
165
|
-
*/
|
|
166
|
-
private async signBlob(digest: string): Promise<string> {
|
|
167
|
-
const blobReq = <BlobSignRequest>{
|
|
168
|
-
message_base64: Buffer.from(getBytes(digest)).toString("base64"),
|
|
169
|
-
};
|
|
170
|
-
// Get the key corresponding to this address
|
|
171
|
-
if (this.#key === undefined) {
|
|
172
|
-
const key = (await this.#signerSession.keys()).find((k) => k.material_id === this.#address);
|
|
173
|
-
if (key === undefined) {
|
|
174
|
-
throw new Error(`Cannot access key '${this.#address}'`);
|
|
175
|
-
}
|
|
176
|
-
this.#key = key;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
const res = await this.#signerSession.signBlob(this.#key.key_id, blobReq);
|
|
180
|
-
const data = await this.#handleMfa(res);
|
|
181
|
-
|
|
182
|
-
const signature = data.signature;
|
|
183
|
-
assert(signature.startsWith("0x"));
|
|
184
|
-
assert(signature.length == 132);
|
|
185
|
-
const vAdj = (parseInt(signature.slice(130), 16) + 27).toString(16);
|
|
186
|
-
return signature.slice(0, 130) + vAdj;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Initialize the signing a message using MFA approvals. This method populates
|
|
191
|
-
* missing fields. If the signing does not require MFA, this method throws.
|
|
192
|
-
* @param {ethers.TransactionRequest} tx The transaction to send.
|
|
193
|
-
* @return {string} The MFA id associated with the signing request.
|
|
194
|
-
*/
|
|
195
|
-
async sendTransactionMfaInit(tx: ethers.TransactionRequest): Promise<string> {
|
|
196
|
-
const popTx = await this.populateTransaction(tx);
|
|
197
|
-
const req = await this.evmSignRequestFromTx(popTx);
|
|
198
|
-
const res = await this.#signerSession.signEvm(this.#address, req);
|
|
199
|
-
return res.mfaId();
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Send a transaction from an approved MFA request. The MFA request contains
|
|
204
|
-
* information about the approved signing request, which this method will
|
|
205
|
-
* execute.
|
|
206
|
-
* @param {MfaRequestInfo} mfaInfo The approved MFA request.
|
|
207
|
-
* @return {ethers.TransactionResponse} The result of submitting the transaction
|
|
208
|
-
*/
|
|
209
|
-
async sendTransactionMfaApproved(mfaInfo: MfaRequestInfo): Promise<ethers.TransactionResponse> {
|
|
210
|
-
if (!mfaInfo.request.path.includes("/eth1/sign/")) {
|
|
211
|
-
throw new Error(`Expected EVM transaction signing request, got ${mfaInfo.request.path}`);
|
|
212
|
-
}
|
|
213
|
-
if (!mfaInfo.request.path.includes(this.#address)) {
|
|
214
|
-
throw new Error(
|
|
215
|
-
`Expected signing request for ${this.#address} but got ${mfaInfo.request.path}`,
|
|
216
|
-
);
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
const signedTx = await this.#signerSession.signEvm(
|
|
220
|
-
this.#address,
|
|
221
|
-
mfaInfo.request.body as EvmSignRequest,
|
|
222
|
-
{
|
|
223
|
-
mfaId: mfaInfo.id,
|
|
224
|
-
mfaOrgId: this.#signerSession.orgId,
|
|
225
|
-
mfaConf: mfaInfo.receipt!.confirmation,
|
|
226
|
-
},
|
|
227
|
-
);
|
|
228
|
-
return await this.provider!.broadcastTransaction(signedTx.data().rlp_signed_tx);
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* If the sign request requires MFA, this method waits for approvals
|
|
233
|
-
* @param {CubeSignerResponse<U>} res The response of a sign request
|
|
234
|
-
* @return {Promise<U>} The sign data after MFA approvals
|
|
235
|
-
*/
|
|
236
|
-
async #handleMfa<U>(res: CubeSignerResponse<U>): Promise<U> {
|
|
237
|
-
while (res.requiresMfa()) {
|
|
238
|
-
await new Promise((resolve) => setTimeout(resolve, this.#mfaPollIntervalMs));
|
|
239
|
-
|
|
240
|
-
const mfaId = res.mfaId();
|
|
241
|
-
const mfaInfo = await this.#signerSession.getMfaInfo(mfaId);
|
|
242
|
-
this.#onMfaPoll(mfaInfo);
|
|
243
|
-
if (mfaInfo.receipt) {
|
|
244
|
-
res = await res.signWithMfaApproval({
|
|
245
|
-
mfaId,
|
|
246
|
-
mfaOrgId: this.#signerSession.orgId,
|
|
247
|
-
mfaConf: mfaInfo.receipt.confirmation,
|
|
248
|
-
});
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
return res.data();
|
|
252
|
-
}
|
|
253
|
-
}
|