@cubist-labs/cubesigner-sdk 0.1.23
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/LICENSE-APACHE +177 -0
- package/LICENSE-MIT +25 -0
- package/NOTICE +13 -0
- package/README.md +470 -0
- package/dist/examples/ethers.d.ts +1 -0
- package/dist/examples/ethers.js +142 -0
- package/dist/spec/env/beta.json +9 -0
- package/dist/spec/env/gamma.json +9 -0
- package/dist/spec/env/prod.json +9 -0
- package/dist/src/client.d.ts +10 -0
- package/dist/src/client.js +21 -0
- package/dist/src/env.d.ts +15 -0
- package/dist/src/env.js +35 -0
- package/dist/src/ethers/index.d.ts +50 -0
- package/dist/src/ethers/index.js +122 -0
- package/dist/src/index.d.ts +114 -0
- package/dist/src/index.js +205 -0
- package/dist/src/key.d.ts +114 -0
- package/dist/src/key.js +201 -0
- package/dist/src/mfa.d.ts +23 -0
- package/dist/src/mfa.js +63 -0
- package/dist/src/org.d.ts +161 -0
- package/dist/src/org.js +264 -0
- package/dist/src/role.d.ts +224 -0
- package/dist/src/role.js +256 -0
- package/dist/src/schema.d.ts +3049 -0
- package/dist/src/schema.js +7 -0
- package/dist/src/session/generic.d.ts +47 -0
- package/dist/src/session/generic.js +3 -0
- package/dist/src/session/management_session_manager.d.ts +59 -0
- package/dist/src/session/management_session_manager.js +111 -0
- package/dist/src/session/oidc_session_manager.d.ts +78 -0
- package/dist/src/session/oidc_session_manager.js +142 -0
- package/dist/src/session/session_manager.d.ts +74 -0
- package/dist/src/session/session_manager.js +79 -0
- package/dist/src/session/session_storage.d.ts +47 -0
- package/dist/src/session/session_storage.js +76 -0
- package/dist/src/session/signer_session_manager.d.ts +88 -0
- package/dist/src/session/signer_session_manager.js +159 -0
- package/dist/src/sign.d.ts +114 -0
- package/dist/src/sign.js +248 -0
- package/dist/src/signer_session.d.ts +180 -0
- package/dist/src/signer_session.js +369 -0
- package/dist/src/util.d.ts +35 -0
- package/dist/src/util.js +75 -0
- package/dist/test/sessions.d.ts +35 -0
- package/dist/test/sessions.js +56 -0
- package/package.json +61 -0
- package/src/client.ts +12 -0
- package/src/env.ts +25 -0
- package/src/ethers/index.ts +131 -0
- package/src/index.ts +220 -0
- package/src/key.ts +249 -0
- package/src/org.ts +333 -0
- package/src/role.ts +385 -0
- package/src/schema.ts +3054 -0
- package/src/session/management_session_manager.ts +136 -0
- package/src/session/oidc_session_manager.ts +193 -0
- package/src/session/session_manager.ts +114 -0
- package/src/session/session_storage.ts +73 -0
- package/src/session/signer_session_manager.ts +211 -0
- package/src/signer_session.ts +464 -0
- package/src/util.ts +58 -0
- package/tsconfig.json +32 -0
package/dist/src/util.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
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.assertOk = exports.ErrResponse = exports.configDir = 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
|
+
exports.configDir = configDir;
|
|
39
|
+
/**
|
|
40
|
+
* Error response type, thrown on non-successful responses.
|
|
41
|
+
*/
|
|
42
|
+
class ErrResponse extends Error {
|
|
43
|
+
/**
|
|
44
|
+
* Constructor
|
|
45
|
+
* @param {Partial<ErrResponse>} init Initializer
|
|
46
|
+
*/
|
|
47
|
+
constructor(init) {
|
|
48
|
+
super(init.message);
|
|
49
|
+
Object.assign(this, init);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.ErrResponse = ErrResponse;
|
|
53
|
+
/**
|
|
54
|
+
* Throw if on error response. Otherwise, return the response data.
|
|
55
|
+
* @param {ResponseType} resp The response to check
|
|
56
|
+
* @param {string} description Description to include in the thrown error
|
|
57
|
+
* @return {D} The response data.
|
|
58
|
+
* @internal
|
|
59
|
+
*/
|
|
60
|
+
function assertOk(resp, description) {
|
|
61
|
+
if (resp.error) {
|
|
62
|
+
throw new ErrResponse({
|
|
63
|
+
description,
|
|
64
|
+
message: resp.error.message,
|
|
65
|
+
statusText: resp.response?.statusText,
|
|
66
|
+
status: resp.response?.status,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
if (resp.data === undefined) {
|
|
70
|
+
throw new Error("Response data is undefined");
|
|
71
|
+
}
|
|
72
|
+
return resp.data;
|
|
73
|
+
}
|
|
74
|
+
exports.assertOk = assertOk;
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBRTdCOzs7R0FHRztBQUNILFNBQWdCLFNBQVM7SUFDdkIsTUFBTSxTQUFTLEdBQ2IsT0FBTyxDQUFDLFFBQVEsS0FBSyxRQUFRO1FBQzNCLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSw4QkFBOEI7UUFDbkQsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQztJQUNwQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFORCw4QkFNQztBQUlEOztHQUVHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsS0FBSztJQVFwQzs7O09BR0c7SUFDSCxZQUFZLElBQTBCO1FBQ3BDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBaEJELGtDQWdCQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLFFBQVEsQ0FBTyxJQUF3QixFQUFFLFdBQW9CO0lBQzNFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNkLE1BQU0sSUFBSSxXQUFXLENBQUM7WUFDcEIsV0FBVztZQUNYLE9BQU8sRUFBRyxJQUFJLENBQUMsS0FBYSxDQUFDLE9BQU87WUFDcEMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVTtZQUNyQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNO1NBQzlCLENBQUMsQ0FBQztLQUNKO0lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7S0FDL0M7SUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDbkIsQ0FBQztBQWJELDRCQWFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG4vKipcbiAqIERpcmVjdG9yeSB3aGVyZSBDdWJlU2lnbmVyIHN0b3JlcyBjb25maWcgZmlsZXMuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IENvbmZpZyBkaXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ0RpcigpOiBzdHJpbmcge1xuICBjb25zdCBjb25maWdEaXIgPVxuICAgIHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCJcbiAgICAgID8gYCR7cHJvY2Vzcy5lbnYuSE9NRX0vTGlicmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0YFxuICAgICAgOiBgJHtwcm9jZXNzLmVudi5IT01FfS8uY29uZmlnYDtcbiAgcmV0dXJuIHBhdGguam9pbihjb25maWdEaXIsIFwiY3ViZXNpZ25lclwiKTtcbn1cblxudHlwZSBSZXNwb25zZVR5cGU8RCwgVD4gPSB7IGRhdGE/OiBEOyBlcnJvcj86IFQ7IHJlc3BvbnNlPzogUmVzcG9uc2UgfTtcblxuLyoqXG4gKiBFcnJvciByZXNwb25zZSB0eXBlLCB0aHJvd24gb24gbm9uLXN1Y2Nlc3NmdWwgcmVzcG9uc2VzLlxuICovXG5leHBvcnQgY2xhc3MgRXJyUmVzcG9uc2UgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKiBEZXNjcmlwdGlvbiAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIEhUVFAgc3RhdHVzIGNvZGUgdGV4dCAoZGVyaXZlZCBmcm9tIGB0aGlzLnN0YXR1c2ApICovXG4gIHJlYWRvbmx5IHN0YXR1c1RleHQ/OiBzdHJpbmc7XG4gIC8qKiBIVFRQIHN0YXR1cyBjb2RlICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtQYXJ0aWFsPEVyclJlc3BvbnNlPn0gaW5pdCBJbml0aWFsaXplclxuICAgKi9cbiAgY29uc3RydWN0b3IoaW5pdDogUGFydGlhbDxFcnJSZXNwb25zZT4pIHtcbiAgICBzdXBlcihpbml0Lm1lc3NhZ2UpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvdyBpZiBvbiBlcnJvciByZXNwb25zZS4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3BvbnNlIGRhdGEuXG4gKiBAcGFyYW0ge1Jlc3BvbnNlVHlwZX0gcmVzcCBUaGUgcmVzcG9uc2UgdG8gY2hlY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXNjcmlwdGlvbiBEZXNjcmlwdGlvbiB0byBpbmNsdWRlIGluIHRoZSB0aHJvd24gZXJyb3JcbiAqIEByZXR1cm4ge0R9IFRoZSByZXNwb25zZSBkYXRhLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRPazxELCBUPihyZXNwOiBSZXNwb25zZVR5cGU8RCwgVD4sIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogRCB7XG4gIGlmIChyZXNwLmVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVyclJlc3BvbnNlKHtcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgbWVzc2FnZTogKHJlc3AuZXJyb3IgYXMgYW55KS5tZXNzYWdlLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIHN0YXR1c1RleHQ6IHJlc3AucmVzcG9uc2U/LnN0YXR1c1RleHQsXG4gICAgICBzdGF0dXM6IHJlc3AucmVzcG9uc2U/LnN0YXR1cyxcbiAgICB9KTtcbiAgfVxuICBpZiAocmVzcC5kYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXNwb25zZSBkYXRhIGlzIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gcmVzcC5kYXRhO1xufVxuIl19
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
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/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cubist-labs/cubesigner-sdk",
|
|
3
|
+
"author": "Cubist, Inc.",
|
|
4
|
+
"version": "0.1.23",
|
|
5
|
+
"description": "CubeSigner TypeScript SDK",
|
|
6
|
+
"homepage": "https://github.com/cubist-labs/CubeSigner-TypeScript-SDK",
|
|
7
|
+
"bugs": "https://github.com/cubist-labs/CubeSigner-TypeScript-SDK/issues",
|
|
8
|
+
"license": "MIT OR Apache-2.0",
|
|
9
|
+
"files": [
|
|
10
|
+
"tsconfig.json",
|
|
11
|
+
"src/**",
|
|
12
|
+
"dist/**",
|
|
13
|
+
"NOTICE",
|
|
14
|
+
"LICENSE-APACHE",
|
|
15
|
+
"LICENSE-MIT"
|
|
16
|
+
],
|
|
17
|
+
"main": "dist/src/index.js",
|
|
18
|
+
"types": "dist/src/index.d.ts",
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"test": "jest --maxWorkers=1",
|
|
22
|
+
"prepack": "tsc",
|
|
23
|
+
"typedoc": "typedoc",
|
|
24
|
+
"fix": "eslint . --ext .ts --fix",
|
|
25
|
+
"lint": "eslint . --ext .ts",
|
|
26
|
+
"fmt": "prettier --write .",
|
|
27
|
+
"fmt-check": "prettier --check .",
|
|
28
|
+
"gen-schema": "npx openapi-typescript ./spec/openapi.json --output ./src/schema.ts"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"ethers": "^6.7.1",
|
|
32
|
+
"openapi-fetch": "0.6.1"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@types/chai": "^4.3.5",
|
|
36
|
+
"@types/jest": "^29.5.2",
|
|
37
|
+
"@types/node": "^20.3.2",
|
|
38
|
+
"@types/node-fetch": "^2.6.4",
|
|
39
|
+
"@types/tmp": "^0.2.3",
|
|
40
|
+
"@typescript-eslint/eslint-plugin": "^5.60.1",
|
|
41
|
+
"chai": "^4.3.7",
|
|
42
|
+
"eslint": "^8.43.0",
|
|
43
|
+
"eslint-config-google": "^0.14.0",
|
|
44
|
+
"eslint-config-prettier": "^8.8.0",
|
|
45
|
+
"jest": "^29.5.0",
|
|
46
|
+
"openapi-typescript": "^6.2.8",
|
|
47
|
+
"otplib": "^12.0.1",
|
|
48
|
+
"prettier": "3.0.0",
|
|
49
|
+
"tmp": "^0.2.1",
|
|
50
|
+
"ts-jest": "^29.1.0",
|
|
51
|
+
"ts-node": "^10.9.1",
|
|
52
|
+
"typedoc": "^0.24.8",
|
|
53
|
+
"typescript": "^5.1.6"
|
|
54
|
+
},
|
|
55
|
+
"optionalDependencies": {
|
|
56
|
+
"@aws-sdk/client-cognito-identity-provider": "^3.398.0"
|
|
57
|
+
},
|
|
58
|
+
"prettier": {
|
|
59
|
+
"printWidth": 100
|
|
60
|
+
}
|
|
61
|
+
}
|
package/src/client.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import createClient from "openapi-fetch";
|
|
2
|
+
import { paths } from "./schema";
|
|
3
|
+
|
|
4
|
+
/** Type of http client.
|
|
5
|
+
* @internal
|
|
6
|
+
* */
|
|
7
|
+
export type Client = ReturnType<typeof createClient<paths>>;
|
|
8
|
+
|
|
9
|
+
/** Re-export schema.
|
|
10
|
+
* @internal
|
|
11
|
+
* */
|
|
12
|
+
export * from "./schema";
|
package/src/env.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as prodSpec from "../spec/env/prod.json";
|
|
2
|
+
import * as gammaSpec from "../spec/env/gamma.json";
|
|
3
|
+
import * as betaSpec from "../spec/env/beta.json";
|
|
4
|
+
|
|
5
|
+
export type Environment =
|
|
6
|
+
/** Production environment */
|
|
7
|
+
| "prod"
|
|
8
|
+
/** Gamma, staging environment */
|
|
9
|
+
| "gamma"
|
|
10
|
+
/** Beta, development environment */
|
|
11
|
+
| "beta";
|
|
12
|
+
|
|
13
|
+
export interface EnvInterface {
|
|
14
|
+
ClientId: string;
|
|
15
|
+
LongLivedClientId: string;
|
|
16
|
+
Region: string;
|
|
17
|
+
UserPoolId: string;
|
|
18
|
+
SignerApiRoot: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const envs: Record<Environment, EnvInterface> = {
|
|
22
|
+
prod: prodSpec["Dev-CubeSignerStack"],
|
|
23
|
+
gamma: gammaSpec["Dev-CubeSignerStack"],
|
|
24
|
+
beta: betaSpec["Dev-CubeSignerStack"],
|
|
25
|
+
};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import {
|
|
2
|
+
JsonRpcApiProvider,
|
|
3
|
+
TypedDataDomain,
|
|
4
|
+
TypedDataEncoder,
|
|
5
|
+
TypedDataField,
|
|
6
|
+
ethers,
|
|
7
|
+
getBytes,
|
|
8
|
+
toBeHex,
|
|
9
|
+
} from "ethers";
|
|
10
|
+
import { BlobSignRequest, EvmSignRequest, SignerSession } from "../signer_session";
|
|
11
|
+
import { Key } from "../key";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A ethers.js Signer using CubeSigner
|
|
15
|
+
*/
|
|
16
|
+
export class Signer extends ethers.AbstractSigner {
|
|
17
|
+
/** The address of the account */
|
|
18
|
+
readonly #address: string;
|
|
19
|
+
|
|
20
|
+
/** The key to use for signing */
|
|
21
|
+
#key?: Key;
|
|
22
|
+
|
|
23
|
+
/** The underlying session */
|
|
24
|
+
readonly #signerSession: SignerSession;
|
|
25
|
+
|
|
26
|
+
/** Create new Signer instance
|
|
27
|
+
* @param {string} address The address of the account to use.
|
|
28
|
+
* @param {SignerSession} signerSession The underlying Signer session.
|
|
29
|
+
* @param {null | ethers.Provider} provider The optional provider instance to use.
|
|
30
|
+
*/
|
|
31
|
+
constructor(address: string, signerSession: SignerSession, provider?: null | ethers.Provider) {
|
|
32
|
+
super(provider);
|
|
33
|
+
this.#address = address;
|
|
34
|
+
this.#signerSession = signerSession;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Resolves to the signer address. */
|
|
38
|
+
async getAddress(): Promise<string> {
|
|
39
|
+
return this.#address;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Returns the signer connected to %%provider%%.
|
|
44
|
+
* @param {null | ethers.Provider} provider The optional provider instance to use.
|
|
45
|
+
* @return {Signer} The signer connected to signer.
|
|
46
|
+
*/
|
|
47
|
+
connect(provider: null | ethers.Provider): Signer {
|
|
48
|
+
return new Signer(this.#address, this.#signerSession, provider);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Signs a transaction. This populates the transaction type to `0x02` (EIP-1559) unless set.
|
|
53
|
+
* @param {ethers.TransactionRequest} tx The transaction to sign.
|
|
54
|
+
* @return {Promise<string>} Hex-encoded RLP encoding of the transaction and its signature.
|
|
55
|
+
*/
|
|
56
|
+
async signTransaction(tx: ethers.TransactionRequest): Promise<string> {
|
|
57
|
+
// get the chain id from the network or tx
|
|
58
|
+
let chainId = tx.chainId;
|
|
59
|
+
if (chainId === undefined) {
|
|
60
|
+
const network = await this.provider?.getNetwork();
|
|
61
|
+
chainId = network?.chainId?.toString() ?? "1";
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Convert the transaction into a JSON-RPC transaction
|
|
65
|
+
const rpcTx =
|
|
66
|
+
this.provider instanceof JsonRpcApiProvider
|
|
67
|
+
? this.provider.getRpcTransaction(tx)
|
|
68
|
+
: // We can just call the getRpcTransaction with a
|
|
69
|
+
// null receiver since it doesn't actually use it
|
|
70
|
+
// (and really should be declared static).
|
|
71
|
+
JsonRpcApiProvider.prototype.getRpcTransaction.call(null, tx);
|
|
72
|
+
rpcTx.type = toBeHex(tx.type ?? 0x02, 1); // we expect 0x0[0-2]
|
|
73
|
+
|
|
74
|
+
const req = <EvmSignRequest>{
|
|
75
|
+
chain_id: Number(chainId),
|
|
76
|
+
tx: rpcTx,
|
|
77
|
+
};
|
|
78
|
+
const sig = await this.#signerSession.signEvm(this.#address, req);
|
|
79
|
+
return sig.data().rlp_signed_tx;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Signs arbitrary messages. This uses ethers.js's [hashMessage](https://docs.ethers.org/v6/api/hashing/#hashMessage)
|
|
83
|
+
* to compute the EIP-191 digest and signs this digest using {@link Key#signBlob}.
|
|
84
|
+
* The key (for this session) must have the `"AllowRawBlobSigning"` policy attached.
|
|
85
|
+
* @param {string | Uint8Array} message The message to sign.
|
|
86
|
+
* @return {Promise<string>} The signature.
|
|
87
|
+
*/
|
|
88
|
+
async signMessage(message: string | Uint8Array): Promise<string> {
|
|
89
|
+
const digest = ethers.hashMessage(message);
|
|
90
|
+
return this.signBlob(digest);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Signs EIP-712 typed data. This uses ethers.js's
|
|
94
|
+
* [TypedDataEncoder.hash](https://docs.ethers.org/v6/api/hashing/#TypedDataEncoder_hash)
|
|
95
|
+
* to compute the EIP-712 digest and signs this digest using {@link Key#signBlob}.
|
|
96
|
+
* The key (for this session) must have the `"AllowRawBlobSigning"` policy attached.
|
|
97
|
+
* @param {TypedDataDomain} domain The domain of the typed data.
|
|
98
|
+
* @param {Record<string, Array<TypedDataField>>} types The types of the typed data.
|
|
99
|
+
* @param {Record<string, any>} value The value of the typed data.
|
|
100
|
+
* @return {Promise<string>} The signature.
|
|
101
|
+
*/
|
|
102
|
+
async signTypedData(
|
|
103
|
+
domain: TypedDataDomain,
|
|
104
|
+
types: Record<string, Array<TypedDataField>>,
|
|
105
|
+
value: Record<string, any>, // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
106
|
+
): Promise<string> {
|
|
107
|
+
const digest = TypedDataEncoder.hash(domain, types, value);
|
|
108
|
+
return this.signBlob(digest);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** Sign arbitrary digest. This uses {@link Key#signBlob}.
|
|
112
|
+
* @param {string} digest The digest to sign.
|
|
113
|
+
* @return {Promise<string>} The signature.
|
|
114
|
+
*/
|
|
115
|
+
private async signBlob(digest: string): Promise<string> {
|
|
116
|
+
const blobReq = <BlobSignRequest>{
|
|
117
|
+
message_base64: Buffer.from(getBytes(digest)).toString("base64"),
|
|
118
|
+
};
|
|
119
|
+
// Get the key corresponding to this address
|
|
120
|
+
if (this.#key === undefined) {
|
|
121
|
+
const key = (await this.#signerSession.keys()).find((k) => k.materialId === this.#address);
|
|
122
|
+
if (key === undefined) {
|
|
123
|
+
throw new Error(`Cannot access key '${this.#address}'`);
|
|
124
|
+
}
|
|
125
|
+
this.#key = key;
|
|
126
|
+
}
|
|
127
|
+
// sign
|
|
128
|
+
const result = await this.#signerSession.signBlob(this.#key, blobReq);
|
|
129
|
+
return result.data().signature;
|
|
130
|
+
}
|
|
131
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { envs, EnvInterface } from "./env";
|
|
2
|
+
import { components, Client } from "./client";
|
|
3
|
+
import { Org } from "./org";
|
|
4
|
+
import { JsonFileSessionStorage, MemorySessionStorage } from "./session/session_storage";
|
|
5
|
+
import { SignerSessionStorage } from "./session/signer_session_manager";
|
|
6
|
+
import { SignerSession } from "./signer_session";
|
|
7
|
+
import {
|
|
8
|
+
ManagementSessionManager,
|
|
9
|
+
ManagementSessionStorage,
|
|
10
|
+
} from "./session/management_session_manager";
|
|
11
|
+
import { OidcSessionManager, OidcSessionStorage } from "./session/oidc_session_manager";
|
|
12
|
+
import { assertOk, configDir } from "./util";
|
|
13
|
+
import * as path from "path";
|
|
14
|
+
|
|
15
|
+
/** CubeSigner constructor options */
|
|
16
|
+
export interface CubeSignerOptions {
|
|
17
|
+
/** The environment to use */
|
|
18
|
+
env?: EnvInterface;
|
|
19
|
+
/** The management authorization token */
|
|
20
|
+
sessionMgr?: ManagementSessionManager | OidcSessionManager;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export type UserInfo = components["schemas"]["UserInfo"];
|
|
24
|
+
export type TotpInfo = components["responses"]["TotpInfo"]["content"]["application/json"];
|
|
25
|
+
export type ConfiguredMfa = components["schemas"]["ConfiguredMfa"];
|
|
26
|
+
|
|
27
|
+
/** CubeSigner client */
|
|
28
|
+
export class CubeSigner {
|
|
29
|
+
readonly #env: EnvInterface;
|
|
30
|
+
readonly sessionMgr?: ManagementSessionManager | OidcSessionManager;
|
|
31
|
+
|
|
32
|
+
/** @return {EnvInterface} The CubeSigner environment of this client */
|
|
33
|
+
get env(): EnvInterface {
|
|
34
|
+
return this.#env;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Loads an existing management session and creates a CubeSigner instance.
|
|
39
|
+
* @param {ManagementSessionStorage} storage Optional session storage to load
|
|
40
|
+
* the session from. If not specified, the management session from the config
|
|
41
|
+
* directory will be loaded.
|
|
42
|
+
* @return {Promise<CubeSigner>} New CubeSigner instance
|
|
43
|
+
*/
|
|
44
|
+
static async loadManagementSession(storage?: ManagementSessionStorage): Promise<CubeSigner> {
|
|
45
|
+
const defaultFilePath = path.join(configDir(), "management-session.json");
|
|
46
|
+
const sessionMgr = await ManagementSessionManager.loadFromStorage(
|
|
47
|
+
storage ?? new JsonFileSessionStorage(defaultFilePath),
|
|
48
|
+
);
|
|
49
|
+
return new CubeSigner(<CubeSignerOptions>{
|
|
50
|
+
sessionMgr,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Loads a signer session from a session storage (e.g., session file).
|
|
56
|
+
* @param {SignerSessionStorage} storage Optional session storage to load
|
|
57
|
+
* the session from. If not specified, the signer session from the config
|
|
58
|
+
* directory will be loaded.
|
|
59
|
+
* @return {Promise<SignerSession>} New signer session
|
|
60
|
+
*/
|
|
61
|
+
static async loadSignerSession(storage?: SignerSessionStorage): Promise<SignerSession> {
|
|
62
|
+
const defaultFilePath = path.join(configDir(), "signer-session.json");
|
|
63
|
+
const sss = storage ?? new JsonFileSessionStorage(defaultFilePath);
|
|
64
|
+
const env = (await sss.retrieve()).env["Dev-CubeSignerStack"];
|
|
65
|
+
return await SignerSession.loadSignerSession(new CubeSigner({ env }), sss);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Loads a signer session from OIDC storage
|
|
70
|
+
* @param {OidcSessionStorage} storage The storage to load from
|
|
71
|
+
* @return {Promise<SignerSession>} New signer session
|
|
72
|
+
*/
|
|
73
|
+
static async loadOidcSession(storage: OidcSessionStorage): Promise<SignerSession> {
|
|
74
|
+
const env = (await storage.retrieve()).env;
|
|
75
|
+
return await SignerSession.loadOidcSession(new CubeSigner({ env }), storage);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Create a new CubeSigner instance.
|
|
80
|
+
* @param {CubeSignerOptions} options The options for the CubeSigner instance.
|
|
81
|
+
*/
|
|
82
|
+
constructor(options: CubeSignerOptions) {
|
|
83
|
+
let env = options.env;
|
|
84
|
+
if (options.sessionMgr) {
|
|
85
|
+
this.sessionMgr = options.sessionMgr;
|
|
86
|
+
env = env ?? this.sessionMgr.env;
|
|
87
|
+
}
|
|
88
|
+
this.#env = env ?? envs["gamma"];
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Authenticate an OIDC user and create a new OIDC session manager for them.
|
|
93
|
+
* @param {string} oidcToken The OIDC token
|
|
94
|
+
* @param {string} orgId The id of the organization that the user is in
|
|
95
|
+
* @param {List<string>} scopes The scopes of the resulting session
|
|
96
|
+
* @param {OidcSessionStorage} storage The signer session storage
|
|
97
|
+
* @return {Promise<OidcSessionManager>} The OIDC session manager
|
|
98
|
+
*/
|
|
99
|
+
async createOidcManager(
|
|
100
|
+
oidcToken: string,
|
|
101
|
+
orgId: string,
|
|
102
|
+
scopes: Array<string>,
|
|
103
|
+
storage?: OidcSessionStorage,
|
|
104
|
+
): Promise<OidcSessionManager> {
|
|
105
|
+
return await OidcSessionManager.create(
|
|
106
|
+
this.env,
|
|
107
|
+
storage || new MemorySessionStorage(),
|
|
108
|
+
oidcToken,
|
|
109
|
+
orgId,
|
|
110
|
+
scopes,
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Authenticate an OIDC user and create a new session for them.
|
|
116
|
+
* @param {string} oidcToken The OIDC token
|
|
117
|
+
* @param {string} orgId The id of the organization that the user is in
|
|
118
|
+
* @param {List<string>} scopes The scopes of the resulting session
|
|
119
|
+
* @param {OidcSessionStorage} storage The signer session storage
|
|
120
|
+
* @return {Promise<SignerSession>} The signer session
|
|
121
|
+
*/
|
|
122
|
+
async createOidcSession(
|
|
123
|
+
oidcToken: string,
|
|
124
|
+
orgId: string,
|
|
125
|
+
scopes: Array<string>,
|
|
126
|
+
storage?: OidcSessionStorage,
|
|
127
|
+
): Promise<SignerSession> {
|
|
128
|
+
const mgr = await this.createOidcManager(oidcToken, orgId, scopes, storage);
|
|
129
|
+
return await CubeSigner.loadOidcSession(mgr.storage);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/** Retrieves information about the current user. */
|
|
133
|
+
async aboutMe(): Promise<UserInfo> {
|
|
134
|
+
const resp = await (
|
|
135
|
+
await this.management()
|
|
136
|
+
).get("/v0/about_me", {
|
|
137
|
+
parseAs: "json",
|
|
138
|
+
});
|
|
139
|
+
const data = assertOk(resp);
|
|
140
|
+
return data;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Creates and sets a new TOTP configuration for the logged-in user,
|
|
145
|
+
* overriding the existing one (if any).
|
|
146
|
+
*/
|
|
147
|
+
async resetTotp(): Promise<TotpInfo> {
|
|
148
|
+
const resp = await (
|
|
149
|
+
await this.management()
|
|
150
|
+
).patch("/v0/totp", {
|
|
151
|
+
parseAs: "json",
|
|
152
|
+
});
|
|
153
|
+
return assertOk(resp);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Verifies a given TOTP code against the current user's TOTP configuration.
|
|
158
|
+
* Throws an error if the verification fails.
|
|
159
|
+
* @param {string} code Current TOTP code
|
|
160
|
+
*/
|
|
161
|
+
async verifyTotp(code: string) {
|
|
162
|
+
const resp = await (
|
|
163
|
+
await this.management()
|
|
164
|
+
).get("/v0/totp/verify/{code}", {
|
|
165
|
+
params: { path: { code } },
|
|
166
|
+
parseAs: "json",
|
|
167
|
+
});
|
|
168
|
+
assertOk(resp);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/** Retrieves information about an organization.
|
|
172
|
+
* @param {string} orgId The ID or name of the organization.
|
|
173
|
+
* @return {Org} The organization.
|
|
174
|
+
* */
|
|
175
|
+
async getOrg(orgId: string): Promise<Org> {
|
|
176
|
+
const resp = await (
|
|
177
|
+
await this.management()
|
|
178
|
+
).get("/v0/org/{org_id}", {
|
|
179
|
+
params: { path: { org_id: orgId } },
|
|
180
|
+
parseAs: "json",
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
const data = assertOk(resp);
|
|
184
|
+
return new Org(this, data);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/** Get the management client.
|
|
188
|
+
* @return {Client} The client.
|
|
189
|
+
* @internal
|
|
190
|
+
* */
|
|
191
|
+
async management(): Promise<Client> {
|
|
192
|
+
if (!this.sessionMgr) {
|
|
193
|
+
throw new Error("No management session loaded");
|
|
194
|
+
}
|
|
195
|
+
return await this.sessionMgr.client();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/** Organizations */
|
|
200
|
+
export * from "./org";
|
|
201
|
+
/** Keys */
|
|
202
|
+
export * from "./key";
|
|
203
|
+
/** Roles */
|
|
204
|
+
export * from "./role";
|
|
205
|
+
/** Env */
|
|
206
|
+
export * from "./env";
|
|
207
|
+
/** Sessions */
|
|
208
|
+
export * from "./signer_session";
|
|
209
|
+
/** Session storage */
|
|
210
|
+
export * from "./session/session_storage";
|
|
211
|
+
/** Session manager */
|
|
212
|
+
export * from "./session/session_manager";
|
|
213
|
+
/** Management session manager */
|
|
214
|
+
export * from "./session/management_session_manager";
|
|
215
|
+
/** OIDC session manager */
|
|
216
|
+
export * from "./session/oidc_session_manager";
|
|
217
|
+
/** Signer session manager */
|
|
218
|
+
export * from "./session/signer_session_manager";
|
|
219
|
+
/** Export ethers.js Signer */
|
|
220
|
+
export * as ethers from "./ethers";
|