@cubist-labs/cubesigner-sdk 0.1.77 → 0.2.15
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/package.json +68 -0
- package/dist/src/api.d.ts +493 -0
- package/dist/src/api.js +1166 -0
- package/dist/src/client.d.ts +534 -10
- package/dist/src/client.js +355 -19
- package/dist/src/ethers/index.d.ts +34 -9
- package/dist/src/ethers/index.js +63 -19
- package/dist/src/index.d.ts +51 -70
- package/dist/src/index.js +83 -237
- package/dist/src/key.d.ts +35 -64
- package/dist/src/key.js +32 -96
- package/dist/src/mfa.d.ts +85 -14
- package/dist/src/mfa.js +146 -40
- package/dist/src/org.d.ts +42 -194
- package/dist/src/org.js +52 -336
- package/dist/src/paginator.js +1 -1
- package/dist/src/response.d.ts +101 -0
- package/dist/src/response.js +164 -0
- package/dist/src/role.d.ts +87 -83
- package/dist/src/role.js +79 -136
- package/dist/src/schema.d.ts +936 -28
- package/dist/src/schema.js +1 -1
- package/dist/src/schema_types.d.ts +109 -0
- package/dist/src/schema_types.js +3 -0
- package/dist/src/session/cognito_manager.d.ts +15 -3
- package/dist/src/session/cognito_manager.js +23 -5
- package/dist/src/session/session_manager.d.ts +1 -1
- package/dist/src/session/session_manager.js +3 -11
- package/dist/src/session/session_storage.js +1 -1
- package/dist/src/session/signer_session_manager.d.ts +10 -29
- package/dist/src/session/signer_session_manager.js +21 -80
- package/dist/src/signer_session.d.ts +15 -252
- package/dist/src/signer_session.js +25 -424
- package/dist/src/user_export.d.ts +52 -0
- package/dist/src/user_export.js +129 -0
- package/dist/src/util.d.ts +15 -0
- package/dist/src/util.js +33 -11
- package/package.json +13 -11
- package/src/api.ts +1395 -0
- package/src/client.ts +413 -12
- package/src/ethers/index.ts +74 -28
- package/src/index.ts +96 -273
- package/src/key.ts +36 -131
- package/src/{fido.ts → mfa.ts} +62 -38
- package/src/org.ts +54 -405
- package/src/response.ts +196 -0
- package/src/role.ts +113 -184
- package/src/schema.ts +936 -28
- package/src/schema_types.ts +110 -0
- package/src/session/cognito_manager.ts +33 -6
- package/src/session/session_manager.ts +2 -8
- package/src/session/signer_session_manager.ts +29 -110
- package/src/signer_session.ts +22 -597
- package/src/user_export.ts +116 -0
- package/src/util.ts +29 -10
package/dist/src/mfa.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
3
|
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
4
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
5
|
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");
|
|
@@ -10,54 +11,159 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
10
11
|
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
12
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
13
|
};
|
|
13
|
-
var
|
|
14
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
-
};
|
|
16
|
-
var _Mfa_sign, _Mfa_role;
|
|
14
|
+
var _TotpChallenge_api, _TotpChallenge_totpInfo, _AddFidoChallenge_api, _MfaFidoChallenge_api;
|
|
17
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.
|
|
19
|
-
const
|
|
16
|
+
exports.MfaFidoChallenge = exports.AddFidoChallenge = exports.TotpChallenge = void 0;
|
|
17
|
+
const util_1 = require("./util");
|
|
18
|
+
/** TOTP challenge that must be answered before user's TOTP is updated */
|
|
19
|
+
class TotpChallenge {
|
|
20
|
+
/** The id of the challenge */
|
|
21
|
+
get totpId() {
|
|
22
|
+
return __classPrivateFieldGet(this, _TotpChallenge_totpInfo, "f").totp_id;
|
|
23
|
+
}
|
|
24
|
+
/** The new TOTP configuration */
|
|
25
|
+
get totpUrl() {
|
|
26
|
+
return __classPrivateFieldGet(this, _TotpChallenge_totpInfo, "f").totp_url;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* @param {CubeSignerApi} api Used when answering the challenge.
|
|
30
|
+
* @param {TotpInfo} totpInfo TOTP challenge information.
|
|
31
|
+
*/
|
|
32
|
+
constructor(api, totpInfo) {
|
|
33
|
+
_TotpChallenge_api.set(this, void 0);
|
|
34
|
+
_TotpChallenge_totpInfo.set(this, void 0);
|
|
35
|
+
__classPrivateFieldSet(this, _TotpChallenge_api, api, "f");
|
|
36
|
+
__classPrivateFieldSet(this, _TotpChallenge_totpInfo, totpInfo, "f");
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Answer the challenge with the code that corresponds to `this.totpUrl`.
|
|
40
|
+
* @param {string} code 6-digit code that corresponds to `this.totpUrl`.
|
|
41
|
+
*/
|
|
42
|
+
async answer(code) {
|
|
43
|
+
if (!/^\d{1,6}$/.test(code)) {
|
|
44
|
+
throw new Error(`Invalid TOTP code: ${code}; it must be a 6-digit string`);
|
|
45
|
+
}
|
|
46
|
+
await __classPrivateFieldGet(this, _TotpChallenge_api, "f").userResetTotpComplete(this.totpId, code);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.TotpChallenge = TotpChallenge;
|
|
50
|
+
_TotpChallenge_api = new WeakMap(), _TotpChallenge_totpInfo = new WeakMap();
|
|
20
51
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
52
|
+
* Returned after creating a request to add a new FIDO device.
|
|
53
|
+
* Provides some helper methods for answering this challenge.
|
|
23
54
|
*/
|
|
24
|
-
class
|
|
25
|
-
/* eslint-disable valid-jsdoc */
|
|
55
|
+
class AddFidoChallenge {
|
|
26
56
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* @param
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
(0,
|
|
42
|
-
const mfa = new Mfa(__classPrivateFieldGet(this, _Mfa_sign, "f").withMfaApproval(approval), __classPrivateFieldGet(this, _Mfa_role, "f"));
|
|
43
|
-
return await mfa.autoApprove(signFn, ...args);
|
|
57
|
+
* Constructor
|
|
58
|
+
* @param {CubeSignerApi} api The API client used to request to add a FIDO device
|
|
59
|
+
* @param {ApiAddFidoChallenge} challenge The challenge returned by the remote end.
|
|
60
|
+
*/
|
|
61
|
+
constructor(api, challenge) {
|
|
62
|
+
_AddFidoChallenge_api.set(this, void 0);
|
|
63
|
+
__classPrivateFieldSet(this, _AddFidoChallenge_api, api, "f");
|
|
64
|
+
this.challengeId = challenge.challenge_id;
|
|
65
|
+
// fix options returned from the server: rename fields and decode base64 fields to uint8[]
|
|
66
|
+
this.options = {
|
|
67
|
+
...challenge.options,
|
|
68
|
+
challenge: (0, util_1.decodeBase64Url)(challenge.options.challenge),
|
|
69
|
+
};
|
|
70
|
+
if (challenge.options.user) {
|
|
71
|
+
this.options.user.id = (0, util_1.decodeBase64Url)(challenge.options.user.id);
|
|
44
72
|
}
|
|
45
|
-
|
|
46
|
-
|
|
73
|
+
for (const credential of this.options.excludeCredentials ?? []) {
|
|
74
|
+
credential.id = (0, util_1.decodeBase64Url)(credential.id);
|
|
47
75
|
}
|
|
48
76
|
}
|
|
49
77
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
|
|
78
|
+
* Answers this challenge by using the `CredentialsContainer` API to create a credential
|
|
79
|
+
* based on the the public key credential creation options from this challenge.
|
|
80
|
+
*/
|
|
81
|
+
async createCredentialAndAnswer() {
|
|
82
|
+
const cred = await navigator.credentials.create({ publicKey: this.options });
|
|
83
|
+
await this.answer(cred);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Answers this challenge using a given credential `cred`;
|
|
87
|
+
* the credential should be obtained by calling
|
|
88
|
+
*
|
|
89
|
+
* ```
|
|
90
|
+
* const cred = await navigator.credentials.create({ publicKey: this.options });
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* @param {any} cred Credential created by calling the `CredentialContainer`'s `create` method
|
|
94
|
+
* based on the public key creation options from this challenge.
|
|
95
|
+
*/
|
|
96
|
+
async answer(cred) {
|
|
97
|
+
const answer = {
|
|
98
|
+
id: cred.id,
|
|
99
|
+
response: {
|
|
100
|
+
clientDataJSON: (0, util_1.encodeToBase64Url)(cred.response.clientDataJSON),
|
|
101
|
+
attestationObject: (0, util_1.encodeToBase64Url)(cred.response.attestationObject),
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
await __classPrivateFieldGet(this, _AddFidoChallenge_api, "f").userRegisterFidoComplete(this.challengeId, answer);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.AddFidoChallenge = AddFidoChallenge;
|
|
108
|
+
_AddFidoChallenge_api = new WeakMap();
|
|
109
|
+
/**
|
|
110
|
+
* Returned after initiating MFA approval using FIDO.
|
|
111
|
+
* Provides some helper methods for answering this challenge.
|
|
112
|
+
*/
|
|
113
|
+
class MfaFidoChallenge {
|
|
114
|
+
/**
|
|
115
|
+
* @param {CubeSignerApi} api The API client used to initiate MFA approval using FIDO
|
|
116
|
+
* @param {string} mfaId The MFA request id.
|
|
117
|
+
* @param {ApiMfaFidoChallenge} challenge The challenge returned by the remote end
|
|
118
|
+
*/
|
|
119
|
+
constructor(api, mfaId, challenge) {
|
|
120
|
+
_MfaFidoChallenge_api.set(this, void 0);
|
|
121
|
+
__classPrivateFieldSet(this, _MfaFidoChallenge_api, api, "f");
|
|
122
|
+
this.mfaId = mfaId;
|
|
123
|
+
this.challengeId = challenge.challenge_id;
|
|
124
|
+
// fix options returned from the server: rename fields and decode base64 fields into uint8[]
|
|
125
|
+
this.options = {
|
|
126
|
+
...challenge.options,
|
|
127
|
+
challenge: (0, util_1.decodeBase64Url)(challenge.options.challenge),
|
|
128
|
+
};
|
|
129
|
+
for (const credential of this.options.allowCredentials ?? []) {
|
|
130
|
+
credential.id = (0, util_1.decodeBase64Url)(credential.id);
|
|
131
|
+
if (credential.transports === null) {
|
|
132
|
+
delete credential.transports;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Answers this challenge by using the `CredentialsContainer` API to get a credential
|
|
138
|
+
* based on the the public key credential request options from this challenge.
|
|
139
|
+
*/
|
|
140
|
+
async createCredentialAndAnswer() {
|
|
141
|
+
const cred = await navigator.credentials.get({ publicKey: this.options });
|
|
142
|
+
return await this.answer(cred);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Answers this challenge using a given credential `cred`.
|
|
146
|
+
* To obtain this credential, for example, call
|
|
147
|
+
*
|
|
148
|
+
* ```
|
|
149
|
+
* const cred = await navigator.credentials.get({ publicKey: this.options });
|
|
150
|
+
* ```
|
|
151
|
+
*
|
|
152
|
+
* @param {any} cred Credential created by calling the `CredentialContainer`'s `get` method
|
|
153
|
+
* based on the public key credential request options from this challenge.
|
|
53
154
|
*/
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
155
|
+
async answer(cred) {
|
|
156
|
+
const answer = {
|
|
157
|
+
id: cred.id,
|
|
158
|
+
response: {
|
|
159
|
+
clientDataJSON: (0, util_1.encodeToBase64Url)(cred.response.clientDataJSON),
|
|
160
|
+
authenticatorData: (0, util_1.encodeToBase64Url)(cred.response.authenticatorData),
|
|
161
|
+
signature: (0, util_1.encodeToBase64Url)(cred.response.signature),
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
return await __classPrivateFieldGet(this, _MfaFidoChallenge_api, "f").mfaApproveFidoComplete(this.mfaId, this.challengeId, answer);
|
|
59
165
|
}
|
|
60
166
|
}
|
|
61
|
-
exports.
|
|
62
|
-
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWZhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21mYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFHNUI7OztHQUdHO0FBQ0gsTUFBYSxHQUFHO0lBSWQsZ0NBQWdDO0lBQ2hDOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQTJCLHlEQUF5RDtJQUNuRywrQkFBK0I7SUFDL0IsTUFBZ0QsRUFDaEQsR0FBRyxJQUFPO1FBRVYsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUFBLElBQUksaUJBQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLE1BQU0sUUFBUSxHQUFHLE1BQU0sdUJBQUEsSUFBSSxpQkFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRCxJQUFBLGdCQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQztZQUM5QixJQUFBLGdCQUFNLEVBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLHVCQUFBLElBQUksaUJBQU0sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsdUJBQUEsSUFBSSxpQkFBTSxDQUFDLENBQUM7WUFDdEUsT0FBTyxNQUFNLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7U0FDL0M7YUFBTTtZQUNMLE9BQU8sSUFBUyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZLElBQVUsRUFBRSxJQUFVO1FBbEN6Qiw0QkFBWTtRQUNaLDRCQUFZO1FBa0NuQix1QkFBQSxJQUFJLGFBQVMsSUFBSSxNQUFBLENBQUM7UUFDbEIsdUJBQUEsSUFBSSxhQUFTLElBQUksTUFBQSxDQUFDO0lBQ3BCLENBQUM7Q0FDRjtBQXZDRCxrQkF1Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IFNpZ24sIFNpZ25SZXNwb25zZSwgUm9sZSB9IGZyb20gXCIuXCI7XG5cbi8qKlxuICogV3JhcHBlciBhcm91bmQgQHR5cGUge1NpZ259IGFuZCBAdHlwZSB7Um9sZX0gdGhhdCBhZGRzIGEgKipzaW5nbGUtYXBwcm92YWwqKlxuICogbXVsdGktZmFjdG9yIGF1dGhvcml6YXRpb24gb24gdG9wIG9mIGFsbCBzaWduIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNZmEge1xuICByZWFkb25seSAjc2lnbjogU2lnbjtcbiAgcmVhZG9ubHkgI3JvbGU6IFJvbGU7XG5cbiAgLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi9cbiAgLyoqXG4gICAqIEF1dG8gYXBwcm92ZSBhIHNpZ24gb3BlcmF0aW9uIHRoYXQgcmVxdWlyZXMgTUZBLlxuICAgKlxuICAgKiBAcGFyYW0gc2lnbkZuIFRoZSBzaWduIG9wZXJhdGlvbiB0byBjYWxsXG4gICAqIEBwYXJhbSB7VH0gYXJncyBBcmd1bWVudHMgdG8gdGhlIHNpZ24gb3BlcmF0aW9uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VT59IFRoZSByZXN1bHQgb2YgdGhlIHNpZ24gb3BlcmF0aW9uLlxuICAgKi9cbiAgYXN5bmMgYXV0b0FwcHJvdmU8VCBleHRlbmRzIEFycmF5PGFueT4sIFU+KCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAvKiBlc2xpbnQtZW5hYmxlIHZhbGlkLWpzZG9jICovXG4gICAgc2lnbkZuOiAoLi4uYXJnczogVCkgPT4gUHJvbWlzZTxTaWduUmVzcG9uc2U8VT4+LFxuICAgIC4uLmFyZ3M6IFRcbiAgKTogUHJvbWlzZTxVPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHNpZ25Gbi5iaW5kKHRoaXMuI3NpZ24pKC4uLmFyZ3MpO1xuICAgIGlmIChkYXRhLnJlcXVpcmVzTWZhKCkpIHtcbiAgICAgIGNvbnN0IG1mYUlkID0gZGF0YS5tZmFJZCgpO1xuICAgICAgY29uc3QgYXBwcm92YWwgPSBhd2FpdCB0aGlzLiNyb2xlLm1mYUFwcHJvdmUobWZhSWQpO1xuICAgICAgYXNzZXJ0KGFwcHJvdmFsLmlkID09PSBtZmFJZCk7XG4gICAgICBhc3NlcnQoYXBwcm92YWwucmVjZWlwdCk7XG4gICAgICBjb25zdCBtZmEgPSBuZXcgTWZhKHRoaXMuI3NpZ24ud2l0aE1mYUFwcHJvdmFsKGFwcHJvdmFsKSwgdGhpcy4jcm9sZSk7XG4gICAgICByZXR1cm4gYXdhaXQgbWZhLmF1dG9BcHByb3ZlKHNpZ25GbiwgLi4uYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkYXRhIGFzIFU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge1NpZ259IHNpZ24gU2lnbiBpbnN0YW5jZSB0byB1c2UgZm9yIHNpZ25pbmdcbiAgICogQHBhcmFtIHtSb2xlfSByb2xlIFJvbGUgaW5zdGFuY2UgdG8gdXNlIGZvciBNRkEgYXBwcm92YWxcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNpZ246IFNpZ24sIHJvbGU6IFJvbGUpIHtcbiAgICB0aGlzLiNzaWduID0gc2lnbjtcbiAgICB0aGlzLiNyb2xlID0gcm9sZTtcbiAgfVxufVxuIl19
|
|
167
|
+
exports.MfaFidoChallenge = MfaFidoChallenge;
|
|
168
|
+
_MfaFidoChallenge_api = new WeakMap();
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWZhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21mYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsdURBQXVEOzs7Ozs7Ozs7Ozs7Ozs7QUFTdkQsaUNBQTREO0FBYTVELHlFQUF5RTtBQUN6RSxNQUFhLGFBQWE7SUFJeEIsOEJBQThCO0lBQzlCLElBQUksTUFBTTtRQUNSLE9BQU8sdUJBQUEsSUFBSSwrQkFBVSxDQUFDLE9BQU8sQ0FBQztJQUNoQyxDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLElBQUksT0FBTztRQUNULE9BQU8sdUJBQUEsSUFBSSwrQkFBVSxDQUFDLFFBQVEsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxHQUFrQixFQUFFLFFBQWtCO1FBakJ6QyxxQ0FBb0I7UUFDcEIsMENBQW9CO1FBaUIzQix1QkFBQSxJQUFJLHNCQUFRLEdBQUcsTUFBQSxDQUFDO1FBQ2hCLHVCQUFBLElBQUksMkJBQWEsUUFBUSxNQUFBLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBWTtRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLElBQUksK0JBQStCLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBRUQsTUFBTSx1QkFBQSxJQUFJLDBCQUFLLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQ0Y7QUFsQ0Qsc0NBa0NDOztBQUVEOzs7R0FHRztBQUNILE1BQWEsZ0JBQWdCO0lBSzNCOzs7O09BSUc7SUFDSCxZQUFZLEdBQWtCLEVBQUUsU0FBOEI7UUFUckQsd0NBQW9CO1FBVTNCLHVCQUFBLElBQUkseUJBQVEsR0FBRyxNQUFBLENBQUM7UUFDaEIsSUFBSSxDQUFDLFdBQVcs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QUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFTO1FBQ3BCLE1BQU0sTUFBTSxHQUF3QjtZQUNsQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxRQUFRLEVBQUU7Z0JBQ1IsY0FBYyxFQUFFLElBQUEsd0JBQWlCLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7Z0JBQy9ELGlCQUFpQixFQUFFLElBQUEsd0JBQWlCLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDckUsU0FBUyxFQUFFLElBQUEsd0JBQWlCLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7YUFDdEQ7U0FDRixDQUFDO1FBQ0YsT0FBTyxNQUFNLHVCQUFBLElBQUksNkJBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEYsQ0FBQztDQUNGO0FBN0RELDRDQTZEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cblxuaW1wb3J0IHtcbiAgQXBpQWRkRmlkb0NoYWxsZW5nZSxcbiAgQXBpTWZhRmlkb0NoYWxsZW5nZSxcbiAgTWZhUmVxdWVzdEluZm8sXG4gIFB1YmxpY0tleUNyZWRlbnRpYWwsXG4gIFRvdHBJbmZvLFxufSBmcm9tIFwiLi9zY2hlbWFfdHlwZXNcIjtcbmltcG9ydCB7IGRlY29kZUJhc2U2NFVybCwgZW5jb2RlVG9CYXNlNjRVcmwgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyBDdWJlU2lnbmVyQXBpIH0gZnJvbSBcIi4vYXBpXCI7XG5cbi8qKiBNRkEgcmVjZWlwdCAqL1xuZXhwb3J0IGludGVyZmFjZSBNZmFSZWNlaXB0IHtcbiAgLyoqIE1GQSByZXF1ZXN0IElEICovXG4gIG1mYUlkOiBzdHJpbmc7XG4gIC8qKiBDb3JyZXNwb25kaW5nIG9yZyBJRCAqL1xuICBtZmFPcmdJZDogc3RyaW5nO1xuICAvKiogTUZBIGNvbmZpcm1hdGlvbiBjb2RlICovXG4gIG1mYUNvbmY6IHN0cmluZztcbn1cblxuLyoqIFRPVFAgY2hhbGxlbmdlIHRoYXQgbXVzdCBiZSBhbnN3ZXJlZCBiZWZvcmUgdXNlcidzIFRPVFAgaXMgdXBkYXRlZCAqL1xuZXhwb3J0IGNsYXNzIFRvdHBDaGFsbGVuZ2Uge1xuICByZWFkb25seSAjYXBpOiBDdWJlU2lnbmVyQXBpO1xuICByZWFkb25seSAjdG90cEluZm86IFRvdHBJbmZvO1xuXG4gIC8qKiBUaGUgaWQgb2YgdGhlIGNoYWxsZW5nZSAqL1xuICBnZXQgdG90cElkKCkge1xuICAgIHJldHVybiB0aGlzLiN0b3RwSW5mby50b3RwX2lkO1xuICB9XG5cbiAgLyoqIFRoZSBuZXcgVE9UUCBjb25maWd1cmF0aW9uICovXG4gIGdldCB0b3RwVXJsKCkge1xuICAgIHJldHVybiB0aGlzLiN0b3RwSW5mby50b3RwX3VybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0N1YmVTaWduZXJBcGl9IGFwaSBVc2VkIHdoZW4gYW5zd2VyaW5nIHRoZSBjaGFsbGVuZ2UuXG4gICAqIEBwYXJhbSB7VG90cEluZm99IHRvdHBJbmZvIFRPVFAgY2hhbGxlbmdlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgY29uc3RydWN0b3IoYXBpOiBDdWJlU2lnbmVyQXBpLCB0b3RwSW5mbzogVG90cEluZm8pIHtcbiAgICB0aGlzLiNhcGkgPSBhcGk7XG4gICAgdGhpcy4jdG90cEluZm8gPSB0b3RwSW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBBbnN3ZXIgdGhlIGNoYWxsZW5nZSB3aXRoIHRoZSBjb2RlIHRoYXQgY29ycmVzcG9uZHMgdG8gYHRoaXMudG90cFVybGAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIDYtZGlnaXQgY29kZSB0aGF0IGNvcnJlc3BvbmRzIHRvIGB0aGlzLnRvdHBVcmxgLlxuICAgKi9cbiAgYXN5bmMgYW5zd2VyKGNvZGU6IHN0cmluZykge1xuICAgIGlmICghL15cXGR7MSw2fSQvLnRlc3QoY29kZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBUT1RQIGNvZGU6ICR7Y29kZX07IGl0IG11c3QgYmUgYSA2LWRpZ2l0IHN0cmluZ2ApO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuI2FwaS51c2VyUmVzZXRUb3RwQ29tcGxldGUodGhpcy50b3RwSWQsIGNvZGUpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuZWQgYWZ0ZXIgY3JlYXRpbmcgYSByZXF1ZXN0IHRvIGFkZCBhIG5ldyBGSURPIGRldmljZS5cbiAqIFByb3ZpZGVzIHNvbWUgaGVscGVyIG1ldGhvZHMgZm9yIGFuc3dlcmluZyB0aGlzIGNoYWxsZW5nZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFkZEZpZG9DaGFsbGVuZ2Uge1xuICByZWFkb25seSAjYXBpOiBDdWJlU2lnbmVyQXBpO1xuICByZWFkb25seSBjaGFsbGVuZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSBvcHRpb25zOiBhbnk7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7Q3ViZVNpZ25lckFwaX0gYXBpIFRoZSBBUEkgY2xpZW50IHVzZWQgdG8gcmVxdWVzdCB0byBhZGQgYSBGSURPIGRldmljZVxuICAgKiBAcGFyYW0ge0FwaUFkZEZpZG9DaGFsbGVuZ2V9IGNoYWxsZW5nZSBUaGUgY2hhbGxlbmdlIHJldHVybmVkIGJ5IHRoZSByZW1vdGUgZW5kLlxuICAgKi9cbiAgY29uc3RydWN0b3IoYXBpOiBDdWJlU2lnbmVyQXBpLCBjaGFsbGVuZ2U6IEFwaUFkZEZpZG9DaGFsbGVuZ2UpIHtcbiAgICB0aGlzLiNhcGkgPSBhcGk7XG4gICAgdGhpcy5jaGFsbGVuZ2VJZCA9IGNoYWxsZW5nZS5jaGFsbGVuZ2VfaWQ7XG5cbiAgICAvLyBmaXggb3B0aW9ucyByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXI6IHJlbmFtZSBmaWVsZHMgYW5kIGRlY29kZSBiYXNlNjQgZmllbGRzIHRvIHVpbnQ4W11cbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAuLi5jaGFsbGVuZ2Uub3B0aW9ucyxcbiAgICAgIGNoYWxsZW5nZTogZGVjb2RlQmFzZTY0VXJsKGNoYWxsZW5nZS5vcHRpb25zLmNoYWxsZW5nZSksXG4gICAgfTtcblxuICAgIGlmIChjaGFsbGVuZ2Uub3B0aW9ucy51c2VyKSB7XG4gICAgICB0aGlzLm9wdGlvbnMudXNlci5pZCA9IGRlY29kZUJhc2U2NFVybChjaGFsbGVuZ2Uub3B0aW9ucy51c2VyLmlkKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNyZWRlbnRpYWwgb2YgdGhpcy5vcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscyA/PyBbXSkge1xuICAgICAgY3JlZGVudGlhbC5pZCA9IGRlY29kZUJhc2U2NFVybChjcmVkZW50aWFsLmlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQW5zd2VycyB0aGlzIGNoYWxsZW5nZSBieSB1c2luZyB0aGUgYENyZWRlbnRpYWxzQ29udGFpbmVyYCBBUEkgdG8gY3JlYXRlIGEgY3JlZGVudGlhbFxuICAgKiBiYXNlZCBvbiB0aGUgdGhlIHB1YmxpYyBrZXkgY3JlZGVudGlhbCBjcmVhdGlvbiBvcHRpb25zIGZyb20gdGhpcyBjaGFsbGVuZ2UuXG4gICAqL1xuICBhc3luYyBjcmVhdGVDcmVkZW50aWFsQW5kQW5zd2VyKCkge1xuICAgIGNvbnN0IGNyZWQgPSBhd2FpdCBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuY3JlYXRlKHsgcHVibGljS2V5OiB0aGlzLm9wdGlvbnMgfSk7XG4gICAgYXdhaXQgdGhpcy5hbnN3ZXIoY3JlZCk7XG4gIH1cblxuICAvKipcbiAgICogQW5zd2VycyB0aGlzIGNoYWxsZW5nZSB1c2luZyBhIGdpdmVuIGNyZWRlbnRpYWwgYGNyZWRgO1xuICAgKiB0aGUgY3JlZGVudGlhbCBzaG91bGQgYmUgb2J0YWluZWQgYnkgY2FsbGluZ1xuICAgKlxuICAgKiBgYGBcbiAgICogY29uc3QgY3JlZCA9IGF3YWl0IG5hdmlnYXRvci5jcmVkZW50aWFscy5jcmVhdGUoeyBwdWJsaWNLZXk6IHRoaXMub3B0aW9ucyB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBjcmVkIENyZWRlbnRpYWwgY3JlYXRlZCBieSBjYWxsaW5nIHRoZSBgQ3JlZGVudGlhbENvbnRhaW5lcmAncyBgY3JlYXRlYCBtZXRob2RcbiAgICogICAgICAgICAgICAgICAgICAgYmFzZWQgb24gdGhlIHB1YmxpYyBrZXkgY3JlYXRpb24gb3B0aW9ucyBmcm9tIHRoaXMgY2hhbGxlbmdlLlxuICAgKi9cbiAgYXN5bmMgYW5zd2VyKGNyZWQ6IGFueSkge1xuICAgIGNvbnN0IGFuc3dlciA9IDxQdWJsaWNLZXlDcmVkZW50aWFsPntcbiAgICAgIGlkOiBjcmVkLmlkLFxuICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgY2xpZW50RGF0YUpTT046IGVuY29kZVRvQmFzZTY0VXJsKGNyZWQucmVzcG9uc2UuY2xpZW50RGF0YUpTT04pLFxuICAgICAgICBhdHRlc3RhdGlvbk9iamVjdDogZW5jb2RlVG9CYXNlNjRVcmwoY3JlZC5yZXNwb25zZS5hdHRlc3RhdGlvbk9iamVjdCksXG4gICAgICB9LFxuICAgIH07XG4gICAgYXdhaXQgdGhpcy4jYXBpLnVzZXJSZWdpc3RlckZpZG9Db21wbGV0ZSh0aGlzLmNoYWxsZW5nZUlkLCBhbnN3ZXIpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuZWQgYWZ0ZXIgaW5pdGlhdGluZyBNRkEgYXBwcm92YWwgdXNpbmcgRklETy5cbiAqIFByb3ZpZGVzIHNvbWUgaGVscGVyIG1ldGhvZHMgZm9yIGFuc3dlcmluZyB0aGlzIGNoYWxsZW5nZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE1mYUZpZG9DaGFsbGVuZ2Uge1xuICByZWFkb25seSAjYXBpOiBDdWJlU2lnbmVyQXBpO1xuICByZWFkb25seSBtZmFJZDogc3RyaW5nO1xuICByZWFkb25seSBjaGFsbGVuZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSBvcHRpb25zOiBhbnk7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Q3ViZVNpZ25lckFwaX0gYXBpIFRoZSBBUEkgY2xpZW50IHVzZWQgdG8gaW5pdGlhdGUgTUZBIGFwcHJvdmFsIHVzaW5nIEZJRE9cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1mYUlkIFRoZSBNRkEgcmVxdWVzdCBpZC5cbiAgICogQHBhcmFtIHtBcGlNZmFGaWRvQ2hhbGxlbmdlfSBjaGFsbGVuZ2UgVGhlIGNoYWxsZW5nZSByZXR1cm5lZCBieSB0aGUgcmVtb3RlIGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3IoYXBpOiBDdWJlU2lnbmVyQXBpLCBtZmFJZDogc3RyaW5nLCBjaGFsbGVuZ2U6IEFwaU1mYUZpZG9DaGFsbGVuZ2UpIHtcbiAgICB0aGlzLiNhcGkgPSBhcGk7XG4gICAgdGhpcy5tZmFJZCA9IG1mYUlkO1xuICAgIHRoaXMuY2hhbGxlbmdlSWQgPSBjaGFsbGVuZ2UuY2hhbGxlbmdlX2lkO1xuXG4gICAgLy8gZml4IG9wdGlvbnMgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyOiByZW5hbWUgZmllbGRzIGFuZCBkZWNvZGUgYmFzZTY0IGZpZWxkcyBpbnRvIHVpbnQ4W11cbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAuLi5jaGFsbGVuZ2Uub3B0aW9ucyxcbiAgICAgIGNoYWxsZW5nZTogZGVjb2RlQmFzZTY0VXJsKGNoYWxsZW5nZS5vcHRpb25zLmNoYWxsZW5nZSksXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgY3JlZGVudGlhbCBvZiB0aGlzLm9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA/PyBbXSkge1xuICAgICAgY3JlZGVudGlhbC5pZCA9IGRlY29kZUJhc2U2NFVybChjcmVkZW50aWFsLmlkKTtcbiAgICAgIGlmIChjcmVkZW50aWFsLnRyYW5zcG9ydHMgPT09IG51bGwpIHtcbiAgICAgICAgZGVsZXRlIGNyZWRlbnRpYWwudHJhbnNwb3J0cztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQW5zd2VycyB0aGlzIGNoYWxsZW5nZSBieSB1c2luZyB0aGUgYENyZWRlbnRpYWxzQ29udGFpbmVyYCBBUEkgdG8gZ2V0IGEgY3JlZGVudGlhbFxuICAgKiBiYXNlZCBvbiB0aGUgdGhlIHB1YmxpYyBrZXkgY3JlZGVudGlhbCByZXF1ZXN0IG9wdGlvbnMgZnJvbSB0aGlzIGNoYWxsZW5nZS5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZUNyZWRlbnRpYWxBbmRBbnN3ZXIoKTogUHJvbWlzZTxNZmFSZXF1ZXN0SW5mbz4ge1xuICAgIGNvbnN0IGNyZWQgPSBhd2FpdCBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuZ2V0KHsgcHVibGljS2V5OiB0aGlzLm9wdGlvbnMgfSk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYW5zd2VyKGNyZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuc3dlcnMgdGhpcyBjaGFsbGVuZ2UgdXNpbmcgYSBnaXZlbiBjcmVkZW50aWFsIGBjcmVkYC5cbiAgICogVG8gb2J0YWluIHRoaXMgY3JlZGVudGlhbCwgZm9yIGV4YW1wbGUsIGNhbGxcbiAgICpcbiAgICogYGBgXG4gICAqIGNvbnN0IGNyZWQgPSBhd2FpdCBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuZ2V0KHsgcHVibGljS2V5OiB0aGlzLm9wdGlvbnMgfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gY3JlZCBDcmVkZW50aWFsIGNyZWF0ZWQgYnkgY2FsbGluZyB0aGUgYENyZWRlbnRpYWxDb250YWluZXJgJ3MgYGdldGAgbWV0aG9kXG4gICAqICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZSBwdWJsaWMga2V5IGNyZWRlbnRpYWwgcmVxdWVzdCBvcHRpb25zIGZyb20gdGhpcyBjaGFsbGVuZ2UuXG4gICAqL1xuICBhc3luYyBhbnN3ZXIoY3JlZDogYW55KTogUHJvbWlzZTxNZmFSZXF1ZXN0SW5mbz4ge1xuICAgIGNvbnN0IGFuc3dlciA9IDxQdWJsaWNLZXlDcmVkZW50aWFsPntcbiAgICAgIGlkOiBjcmVkLmlkLFxuICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgY2xpZW50RGF0YUpTT046IGVuY29kZVRvQmFzZTY0VXJsKGNyZWQucmVzcG9uc2UuY2xpZW50RGF0YUpTT04pLFxuICAgICAgICBhdXRoZW50aWNhdG9yRGF0YTogZW5jb2RlVG9CYXNlNjRVcmwoY3JlZC5yZXNwb25zZS5hdXRoZW50aWNhdG9yRGF0YSksXG4gICAgICAgIHNpZ25hdHVyZTogZW5jb2RlVG9CYXNlNjRVcmwoY3JlZC5yZXNwb25zZS5zaWduYXR1cmUpLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBhd2FpdCB0aGlzLiNhcGkubWZhQXBwcm92ZUZpZG9Db21wbGV0ZSh0aGlzLm1mYUlkLCB0aGlzLmNoYWxsZW5nZUlkLCBhbnN3ZXIpO1xuICB9XG59XG4iXX0=
|
package/dist/src/org.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { KeyType, Key } from "./key";
|
|
4
|
-
import { MfaPolicy, Role } from "./role";
|
|
1
|
+
import { CubeSignerClient } from "./client";
|
|
2
|
+
import { OrgInfo, SignerSessionManager, SignerSessionStorage } from ".";
|
|
5
3
|
/** Organization id */
|
|
6
4
|
export type OrgId = string;
|
|
7
5
|
/** Org-wide policy */
|
|
@@ -34,31 +32,43 @@ export interface SourceIpAllowlistPolicy {
|
|
|
34
32
|
export interface MaxDailyUnstakePolicy {
|
|
35
33
|
MaxDailyUnstake: number;
|
|
36
34
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
export
|
|
43
|
-
/** The role of an OIDC user, default is "Alien" */
|
|
44
|
-
memberRole?: MemberRole;
|
|
45
|
-
/** Optional MFA policy to associate with the user account */
|
|
46
|
-
mfaPolicy?: MfaPolicy;
|
|
47
|
-
}
|
|
48
|
-
/** An organization. */
|
|
49
|
-
export declare class Org {
|
|
50
|
-
#private;
|
|
35
|
+
/**
|
|
36
|
+
* An organization.
|
|
37
|
+
*
|
|
38
|
+
* Extends {@link CubeSignerClient} and provides a few org-specific methods on top.
|
|
39
|
+
*/
|
|
40
|
+
export declare class Org extends CubeSignerClient {
|
|
51
41
|
/**
|
|
52
42
|
* @description The org id
|
|
53
43
|
* @example Org#c3b9379c-4e8c-4216-bd0a-65ace53cf98f
|
|
54
|
-
|
|
44
|
+
*/
|
|
55
45
|
get id(): OrgId;
|
|
46
|
+
/**
|
|
47
|
+
* Obtain information about the current organization.
|
|
48
|
+
*
|
|
49
|
+
* Same as {@link orgGet}.
|
|
50
|
+
*/
|
|
51
|
+
get info(): () => Promise<{
|
|
52
|
+
enabled: boolean;
|
|
53
|
+
key_import_key?: string | null | undefined;
|
|
54
|
+
kwk_id: string;
|
|
55
|
+
last_unstake: string;
|
|
56
|
+
last_unstake_day_count: number;
|
|
57
|
+
name?: string | null | undefined;
|
|
58
|
+
org_id: string;
|
|
59
|
+
policy?: Record<string, never>[] | undefined;
|
|
60
|
+
user_export_delay: number;
|
|
61
|
+
user_export_window: number;
|
|
62
|
+
}>;
|
|
56
63
|
/** Human-readable name for the org */
|
|
57
64
|
name(): Promise<string | undefined>;
|
|
58
|
-
/**
|
|
65
|
+
/** Get all keys in the org. */
|
|
66
|
+
get keys(): (type?: import("./key").KeyType | undefined, page?: import("./paginator").PageOpts | undefined) => Promise<import("./key").Key[]>;
|
|
67
|
+
/**
|
|
68
|
+
* Set the human-readable name for the org.
|
|
59
69
|
* @param {string} name The new human-readable name for the org (must be alphanumeric).
|
|
60
70
|
* @example my_org_name
|
|
61
|
-
|
|
71
|
+
*/
|
|
62
72
|
setName(name: string): Promise<void>;
|
|
63
73
|
/** Is the org enabled? */
|
|
64
74
|
enabled(): Promise<boolean>;
|
|
@@ -68,183 +78,21 @@ export declare class Org {
|
|
|
68
78
|
disable(): Promise<void>;
|
|
69
79
|
/** Get the policy for the org. */
|
|
70
80
|
policy(): Promise<OrgPolicy[]>;
|
|
71
|
-
/** Set the policy for the org.
|
|
72
|
-
* @param {OrgPolicy[]} policy The new policy for the org.
|
|
73
|
-
* */
|
|
74
|
-
setPolicy(policy: OrgPolicy[]): Promise<void>;
|
|
75
|
-
/** Create a new signing key.
|
|
76
|
-
* @param {KeyType} type The type of key to create.
|
|
77
|
-
* @param {string?} ownerId The owner of the key. Defaults to the session's user.
|
|
78
|
-
* @return {Key[]} The new keys.
|
|
79
|
-
* */
|
|
80
|
-
createKey(type: KeyType, ownerId?: string): Promise<Key>;
|
|
81
|
-
/** Create new signing keys.
|
|
82
|
-
* @param {KeyType} type The type of key to create.
|
|
83
|
-
* @param {nummber} count The number of keys to create.
|
|
84
|
-
* @param {string?} ownerId The owner of the keys. Defaults to the session's user.
|
|
85
|
-
* @return {Key[]} The new keys.
|
|
86
|
-
* */
|
|
87
|
-
createKeys(type: KeyType, count: number, ownerId?: string): Promise<Key[]>;
|
|
88
|
-
/**
|
|
89
|
-
* Derives a key of the given type using the given derivation path and mnemonic.
|
|
90
|
-
* The owner of the derived key will be the owner of the mnemonic.
|
|
91
|
-
*
|
|
92
|
-
* @param {KeyType} type Type of key to derive from the mnemonic.
|
|
93
|
-
* @param {string} derivationPath Mnemonic derivation path used to generate new key.
|
|
94
|
-
* @param {string} mnemonicId materialId of mnemonic key used to derive the new key.
|
|
95
|
-
*
|
|
96
|
-
* @return {Key} newly derived key.
|
|
97
|
-
*/
|
|
98
|
-
deriveKey(type: KeyType, derivationPath: string, mnemonicId: string): Promise<Key>;
|
|
99
|
-
/**
|
|
100
|
-
* Derives a set of keys of the given type using the given derivation paths and mnemonic.
|
|
101
|
-
*
|
|
102
|
-
* The owner of the derived keys will be the owner of the mnemonic.
|
|
103
|
-
*
|
|
104
|
-
* @param {KeyType} type Type of key to derive from the mnemonic.
|
|
105
|
-
* @param {string[]} derivationPaths Mnemonic derivation paths used to generate new key.
|
|
106
|
-
* @param {string} mnemonicId materialId of mnemonic key used to derive the new key.
|
|
107
|
-
*
|
|
108
|
-
* @return {Key[]} newly derived keys.
|
|
109
|
-
*/
|
|
110
|
-
deriveKeys(type: KeyType, derivationPaths: string[], mnemonicId: string): Promise<Key[]>;
|
|
111
|
-
/**
|
|
112
|
-
* Create a new user in the organization and sends an invitation to that user
|
|
113
|
-
* @param {string} email Email of the user
|
|
114
|
-
* @param {string} name The full name of the user
|
|
115
|
-
*/
|
|
116
|
-
createUser(email: string, name: string): Promise<void>;
|
|
117
|
-
/**
|
|
118
|
-
* Create a new OIDC user
|
|
119
|
-
* @param {OidcIdentity} identity The identity of the OIDC user
|
|
120
|
-
* @param {string} email Email of the OIDC user
|
|
121
|
-
* @param {CreateOidcUserOptions} opts Additional options for new OIDC users
|
|
122
|
-
* @return {string} User id of the new user
|
|
123
|
-
*/
|
|
124
|
-
createOidcUser(identity: OidcIdentity, email: string, opts?: CreateOidcUserOptions): Promise<string>;
|
|
125
|
-
/**
|
|
126
|
-
* Delete an existing OIDC user
|
|
127
|
-
* @param {OidcIdentity} identity The identity of the OIDC user
|
|
128
|
-
*/
|
|
129
|
-
deleteOidcUser(identity: OidcIdentity): Promise<{
|
|
130
|
-
status: string;
|
|
131
|
-
}>;
|
|
132
|
-
/**
|
|
133
|
-
* Checks if a given proof of OIDC authentication is valid.
|
|
134
|
-
*
|
|
135
|
-
* @param {IdentityProof} proof The proof of authentication.
|
|
136
|
-
*/
|
|
137
|
-
verifyIdentity(proof: IdentityProof): Promise<void>;
|
|
138
|
-
/**
|
|
139
|
-
* List users in the organization
|
|
140
|
-
* @return {UserIdInfo[]} List of users
|
|
141
|
-
*/
|
|
142
|
-
users(): Promise<UserIdInfo[]>;
|
|
143
|
-
/** Get a key by id.
|
|
144
|
-
* @param {string} keyId The id of the key to get.
|
|
145
|
-
* @return {Key} The key.
|
|
146
|
-
* */
|
|
147
|
-
getKey(keyId: string): Promise<Key>;
|
|
148
|
-
/** Get all keys in the org.
|
|
149
|
-
* @param {KeyType?} type Optional key type to filter list for.
|
|
150
|
-
* @param {PageOpts} page Pagination options. Defaults to fetching the entire result set.
|
|
151
|
-
* @return {Key} The key.
|
|
152
|
-
* */
|
|
153
|
-
keys(type?: KeyType, page?: PageOpts): Promise<Key[]>;
|
|
154
|
-
/** Create a new role.
|
|
155
|
-
* @param {string?} name The name of the role.
|
|
156
|
-
* @return {Role} The new role.
|
|
157
|
-
* */
|
|
158
|
-
createRole(name?: string): Promise<Role>;
|
|
159
|
-
/** Get a role by id or name.
|
|
160
|
-
* @param {string} roleId The id or name of the role to get.
|
|
161
|
-
* @return {Role} The role.
|
|
162
|
-
* */
|
|
163
|
-
getRole(roleId: string): Promise<Role>;
|
|
164
|
-
/**
|
|
165
|
-
* List all roles in the org.
|
|
166
|
-
*
|
|
167
|
-
* @param {PageOpts} page Pagination options. Defaults to fetching the entire result set.
|
|
168
|
-
* @return {Role[]} The roles.
|
|
169
|
-
* */
|
|
170
|
-
listRoles(page?: PageOpts): Promise<Role[]>;
|
|
171
|
-
/** List all users in the org.
|
|
172
|
-
* @return {User[]} The users.
|
|
173
|
-
* */
|
|
174
|
-
listUsers(): Promise<UserIdInfo[]>;
|
|
175
|
-
/**
|
|
176
|
-
* Get a pending MFA request by its id.
|
|
177
|
-
* @param {string} mfaId The id of the MFA request.
|
|
178
|
-
* @return {Promise<MfaRequestInfo>} The MFA request.
|
|
179
|
-
*
|
|
180
|
-
* @deprecated Use {@link getMfaInfo()} instead.
|
|
181
|
-
*/
|
|
182
|
-
mfaGet(mfaId: string): Promise<MfaRequestInfo>;
|
|
183
|
-
/**
|
|
184
|
-
* Approve a pending MFA request.
|
|
185
|
-
*
|
|
186
|
-
* @param {string} mfaId The id of the MFA request.
|
|
187
|
-
* @return {Promise<MfaRequestInfo>} The MFA request.
|
|
188
|
-
*
|
|
189
|
-
* @deprecated Use {@link approveMfaRequest()} instead.
|
|
190
|
-
*/
|
|
191
|
-
mfaApprove(mfaId: string): Promise<MfaRequestInfo>;
|
|
192
81
|
/**
|
|
193
|
-
*
|
|
194
|
-
* @param {
|
|
195
|
-
* @return {Promise<MfaRequestInfo>} The MFA request.
|
|
196
|
-
*/
|
|
197
|
-
getMfaInfo(mfaId: string): Promise<MfaRequestInfo>;
|
|
198
|
-
/**
|
|
199
|
-
* List pending MFA requests accessible to the current user.
|
|
200
|
-
* @return {Promise<MfaRequestInfo[]>} The MFA requests.
|
|
82
|
+
* Set the policy for the org.
|
|
83
|
+
* @param {OrgPolicy[]} policy The new policy for the org.
|
|
201
84
|
*/
|
|
202
|
-
|
|
85
|
+
setPolicy(policy: OrgPolicy[]): Promise<void>;
|
|
203
86
|
/**
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
* @
|
|
207
|
-
* @return {Promise<MfaRequestInfo>} The MFA request.
|
|
87
|
+
* Retrieve the org associated with a session.
|
|
88
|
+
* @param {SessionStorage} storage The session
|
|
89
|
+
* @return {Org} An {@link Org} instance for the org associated with this session.
|
|
208
90
|
*/
|
|
209
|
-
|
|
210
|
-
/** Create a new org.
|
|
211
|
-
* @param {CubeSigner} cs The CubeSigner instance.
|
|
212
|
-
* @param {OrgInfo} data The JSON response from the API server.
|
|
213
|
-
* @internal
|
|
214
|
-
* */
|
|
215
|
-
constructor(cs: CubeSigner, data: OrgInfo);
|
|
91
|
+
static retrieveFromStorage(storage: SignerSessionStorage): Promise<Org>;
|
|
216
92
|
/**
|
|
217
|
-
*
|
|
218
|
-
*
|
|
219
|
-
* @param {
|
|
220
|
-
* @param {string} orgId The org id of the MFA request
|
|
221
|
-
* @param {string} mfaId The id of the MFA request
|
|
222
|
-
* @return {Promise<MfaRequestInfo>} The result of the MFA request
|
|
93
|
+
* Constructor.
|
|
94
|
+
* @param {CubeSignerClient | SignerSessionManager} csc The CubeSigner instance.
|
|
95
|
+
* @param {OrgInfo| string} data Either org id or name or {@link OrgInfo}.
|
|
223
96
|
*/
|
|
224
|
-
|
|
225
|
-
/** Fetch org info.
|
|
226
|
-
* @return {OrgInfo} The org info.
|
|
227
|
-
* */
|
|
228
|
-
private fetch;
|
|
229
|
-
/** Update the org.
|
|
230
|
-
* @param {UpdateOrgRequest} request The JSON request to send to the API server.
|
|
231
|
-
* @return {UpdateOrgResponse} The JSON response from the API server.
|
|
232
|
-
* */
|
|
233
|
-
private update;
|
|
234
|
-
/** List roles.
|
|
235
|
-
* @param {CubeSigner} cs The CubeSigner instance to use for signing.
|
|
236
|
-
* @param {string} orgId The id of the organization to which the role belongs.
|
|
237
|
-
* @param {PageOpts} page Pagination options. Defaults to fetching the entire result set.
|
|
238
|
-
* @return {Role[]} Org roles.
|
|
239
|
-
* @internal
|
|
240
|
-
* */
|
|
241
|
-
private static roles;
|
|
242
|
-
/** List users.
|
|
243
|
-
* @param {CubeSigner} cs The CubeSigner instance to use for signing.
|
|
244
|
-
* @param {string} orgId The id of the organization to which the role belongs.
|
|
245
|
-
* @return {User[]} Org users.
|
|
246
|
-
* @internal
|
|
247
|
-
* */
|
|
248
|
-
private static users;
|
|
97
|
+
constructor(csc: CubeSignerClient | SignerSessionManager, data?: OrgInfo | string);
|
|
249
98
|
}
|
|
250
|
-
export {};
|