@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
|
@@ -0,0 +1,142 @@
|
|
|
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 _a, _OidcSessionManager_client, _OidcSessionManager_exchangeToken;
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.OidcSessionManager = void 0;
|
|
19
|
+
const util_1 = require("../util");
|
|
20
|
+
const session_manager_1 = require("./session_manager");
|
|
21
|
+
const openapi_fetch_1 = __importDefault(require("openapi-fetch"));
|
|
22
|
+
// An token obtained from an OIDC token is valid for 5 minutes
|
|
23
|
+
const OIDC_TOKEN_EXP_SECS = 300;
|
|
24
|
+
/** Manager for OIDC sessions. */
|
|
25
|
+
class OidcSessionManager extends session_manager_1.OrgSessionManager {
|
|
26
|
+
/**
|
|
27
|
+
* @return {string} The current auth token.
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
30
|
+
async token() {
|
|
31
|
+
const session = await this.storage.retrieve();
|
|
32
|
+
return session.token;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Returns a client with the current session and refreshes the current
|
|
36
|
+
* session. May **UPDATE/MUTATE** self.
|
|
37
|
+
*/
|
|
38
|
+
async client() {
|
|
39
|
+
await this.refreshIfNeeded();
|
|
40
|
+
return __classPrivateFieldGet(this, _OidcSessionManager_client, "f");
|
|
41
|
+
}
|
|
42
|
+
/** Revokes the session. */
|
|
43
|
+
async revoke() {
|
|
44
|
+
this.unsupported("revoke");
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Refreshes the session and **UPDATES/MUTATES** self.
|
|
48
|
+
*/
|
|
49
|
+
async refresh() {
|
|
50
|
+
const session = await this.storage.retrieve();
|
|
51
|
+
const [token, tokenExp] = await __classPrivateFieldGet(OidcSessionManager, _a, "m", _OidcSessionManager_exchangeToken).call(OidcSessionManager, session.env, session.oidc_token, session.org_id, session.scopes);
|
|
52
|
+
await this.storage.save({
|
|
53
|
+
...session,
|
|
54
|
+
token: token,
|
|
55
|
+
token_exp: tokenExp,
|
|
56
|
+
});
|
|
57
|
+
__classPrivateFieldSet(this, _OidcSessionManager_client, this.createClient(token), "f");
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Returns whether it's time to refresh this token.
|
|
61
|
+
* @return {boolean} Whether it's time to refresh this token.
|
|
62
|
+
* @internal
|
|
63
|
+
*/
|
|
64
|
+
async isStale() {
|
|
65
|
+
const session = await this.storage.retrieve();
|
|
66
|
+
return this.hasExpired(session.token_exp);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Refreshes the session if it is about to expire.
|
|
70
|
+
* @return {boolean} Whether the session token was refreshed.
|
|
71
|
+
* @internal
|
|
72
|
+
*/
|
|
73
|
+
async refreshIfNeeded() {
|
|
74
|
+
if (await this.isStale()) {
|
|
75
|
+
await this.refresh();
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Authenticate an OIDC user and create a new session for them.
|
|
82
|
+
* @param {EnvInterface} env The environment of the session
|
|
83
|
+
* @param {SessionStorage<SignerSessionObject>} storage The signer session storage
|
|
84
|
+
* @param {string} oidcToken The OIDC token
|
|
85
|
+
* @param {string} orgId The id of the organization that the user is in
|
|
86
|
+
* @param {List<string>} scopes The scopes of the resulting session
|
|
87
|
+
* @return {Promise<OidcSessionManager>} The signer session
|
|
88
|
+
*/
|
|
89
|
+
static async create(env, storage, oidcToken, orgId, scopes) {
|
|
90
|
+
const [token, tokenExp] = await __classPrivateFieldGet(OidcSessionManager, _a, "m", _OidcSessionManager_exchangeToken).call(OidcSessionManager, env, oidcToken, orgId, scopes);
|
|
91
|
+
await storage.save({
|
|
92
|
+
env,
|
|
93
|
+
org_id: orgId,
|
|
94
|
+
oidc_token: oidcToken,
|
|
95
|
+
token,
|
|
96
|
+
token_exp: tokenExp,
|
|
97
|
+
scopes,
|
|
98
|
+
});
|
|
99
|
+
return new OidcSessionManager(env, orgId, token, storage);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Load from storage
|
|
103
|
+
* @param {OidcSessionStorage} storage The storage to load from
|
|
104
|
+
* @return {Promise<OidcSessionManager>} New OIDC session manager
|
|
105
|
+
*/
|
|
106
|
+
static async loadFromStorage(storage) {
|
|
107
|
+
const info = await storage.retrieve();
|
|
108
|
+
return new OidcSessionManager(info.env, info.org_id, info.token, storage);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Constructor.
|
|
112
|
+
* @param {EnvInterface} env The environment of the session
|
|
113
|
+
* @param {string} orgId The id of the org associated with this session
|
|
114
|
+
* @param {string} token The authorization token to use
|
|
115
|
+
* @param {SessionStorage<U>} storage The storage back end to use for storing
|
|
116
|
+
* session information
|
|
117
|
+
*/
|
|
118
|
+
constructor(env, orgId, token, storage) {
|
|
119
|
+
super(env, orgId, storage);
|
|
120
|
+
_OidcSessionManager_client.set(this, void 0);
|
|
121
|
+
__classPrivateFieldSet(this, _OidcSessionManager_client, this.createClient(token), "f");
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
exports.OidcSessionManager = OidcSessionManager;
|
|
125
|
+
_a = OidcSessionManager, _OidcSessionManager_client = new WeakMap(), _OidcSessionManager_exchangeToken = async function _OidcSessionManager_exchangeToken(env, oidcToken, orgId, scopes) {
|
|
126
|
+
const client = (0, openapi_fetch_1.default)({
|
|
127
|
+
baseUrl: env.SignerApiRoot,
|
|
128
|
+
headers: {
|
|
129
|
+
Authorization: oidcToken,
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
const resp = await client.post("/v0/org/{org_id}/oidc", {
|
|
133
|
+
params: { path: { org_id: orgId } },
|
|
134
|
+
body: {
|
|
135
|
+
scopes,
|
|
136
|
+
},
|
|
137
|
+
parseAs: "json",
|
|
138
|
+
});
|
|
139
|
+
const data = (0, util_1.assertOk)(resp);
|
|
140
|
+
return [data.token, new Date().getTime() / 1000 + OIDC_TOKEN_EXP_SECS];
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2lkY19zZXNzaW9uX21hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2Vzc2lvbi9vaWRjX3Nlc3Npb25fbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxrQ0FBbUM7QUFDbkMsdURBQXNEO0FBRXRELGtFQUF5QztBQUV6Qyw4REFBOEQ7QUFDOUQsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUF3QmhDLGlDQUFpQztBQUNqQyxNQUFhLGtCQUFtQixTQUFRLG1DQUFrQztJQUd4RTs7O09BR0c7SUFDSCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDN0IsT0FBTyx1QkFBQSxJQUFJLGtDQUFRLENBQUM7SUFDdEIsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixLQUFLLENBQUMsTUFBTTtRQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxNQUFNLHVCQUFBLGtCQUFrQiw2Q0FBZSxNQUFqQyxrQkFBa0IsRUFDaEQsT0FBTyxDQUFDLEdBQUcsRUFDWCxPQUFPLENBQUMsVUFBVSxFQUNsQixPQUFPLENBQUMsTUFBTSxFQUNkLE9BQU8sQ0FBQyxNQUFNLENBQ2YsQ0FBQztRQUNGLE1BQU0sSUFBSSxDQUFD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QXFCLENBQUM7SUFDaEQsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztBQUN6RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGF0aHMsIENsaWVudCB9IGZyb20gXCIuLi9jbGllbnRcIjtcbmltcG9ydCB7IEVudkludGVyZmFjZSB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgYXNzZXJ0T2sgfSBmcm9tIFwiLi4vdXRpbFwiO1xuaW1wb3J0IHsgT3JnU2Vzc2lvbk1hbmFnZXIgfSBmcm9tIFwiLi9zZXNzaW9uX21hbmFnZXJcIjtcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4vc2Vzc2lvbl9zdG9yYWdlXCI7XG5pbXBvcnQgY3JlYXRlQ2xpZW50IGZyb20gXCJvcGVuYXBpLWZldGNoXCI7XG5cbi8vIEFuIHRva2VuIG9idGFpbmVkIGZyb20gYW4gT0lEQyB0b2tlbiBpcyB2YWxpZCBmb3IgNSBtaW51dGVzXG5jb25zdCBPSURDX1RPS0VOX0VYUF9TRUNTID0gMzAwO1xuXG50eXBlIE9pZGNBdXRoUmVzcG9uc2UgPVxuICBwYXRoc1tcIi92MC9vcmcve29yZ19pZH0vb2lkY1wiXVtcInBvc3RcIl1bXCJyZXNwb25zZXNcIl1bXCIyMDBcIl1bXCJjb250ZW50XCJdW1wiYXBwbGljYXRpb24vanNvblwiXTtcblxuLyoqIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIE9JREMgdG9rZW4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2lkY1Nlc3Npb25EYXRhIHtcbiAgLyoqIFRoZSBlbnZpcm9ubWVudCB0aGF0IHRoaXMgdG9rZW4gaXMgZm9yICovXG4gIGVudjogRW52SW50ZXJmYWNlO1xuICAvKiogVGhlIG9yZ2FuaXphdGlvbiBJRCAqL1xuICBvcmdfaWQ6IHN0cmluZztcbiAgLyoqIFRoZSBPSURDIHRva2VuIHRoYXQgdGhpcyBzZXNzaW9uIHdhcyBjcmVhdGVkIGZyb20gKi9cbiAgb2lkY190b2tlbjogc3RyaW5nO1xuICAvKiogVGhlIHRva2VuIHRvIGluY2x1ZGUgaW4gQXV0aG9yaXphdGlvbiBoZWFkZXIgKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIFRva2VuIGV4cGlyYXRpb24gdGltZXN0YW1wICovXG4gIHRva2VuX2V4cDogbnVtYmVyO1xuICAvKiogVGhlIHNjb3BlcyBvZiB0aGUgdG9rZW4gKi9cbiAgc2NvcGVzOiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKiogVHlwZSBvZiBzdG9yYWdlIHJlcXVpcmVkIGZvciBPSURDIHNlc3Npb25zICovXG5leHBvcnQgdHlwZSBPaWRjU2Vzc2lvblN0b3JhZ2UgPSBTZXNzaW9uU3RvcmFnZTxPaWRjU2Vzc2lvbkRhdGE+O1xuXG4vKiogTWFuYWdlciBmb3IgT0lEQyBzZXNzaW9ucy4gKi9cbmV4cG9ydCBjbGFzcyBPaWRjU2Vzc2lvbk1hbmFnZXIgZXh0ZW5kcyBPcmdTZXNzaW9uTWFuYWdlcjxPaWRjU2Vzc2lvbkRhdGE+IHtcbiAgI2NsaWVudDogQ2xpZW50O1xuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjdXJyZW50IGF1dGggdG9rZW4uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgYXN5bmMgdG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgdGhpcy5zdG9yYWdlLnJldHJpZXZlKCk7XG4gICAgcmV0dXJuIHNlc3Npb24udG9rZW47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNsaWVudCB3aXRoIHRoZSBjdXJyZW50IHNlc3Npb24gYW5kIHJlZnJlc2hlcyB0aGUgY3VycmVudFxuICAgKiBzZXNzaW9uLiBNYXkgKipVUERBVEUvTVVUQVRFKiogc2VsZi5cbiAgICovXG4gIGFzeW5jIGNsaWVudCgpOiBQcm9taXNlPENsaWVudD4ge1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaElmTmVlZGVkKCk7XG4gICAgcmV0dXJuIHRoaXMuI2NsaWVudDtcbiAgfVxuXG4gIC8qKiBSZXZva2VzIHRoZSBzZXNzaW9uLiAqL1xuICBhc3luYyByZXZva2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy51bnN1cHBvcnRlZChcInJldm9rZVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgdGhlIHNlc3Npb24gYW5kICoqVVBEQVRFUy9NVVRBVEVTKiogc2VsZi5cbiAgICovXG4gIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHRoaXMuc3RvcmFnZS5yZXRyaWV2ZSgpO1xuICAgIGNvbnN0IFt0b2tlbiwgdG9rZW5FeHBdID0gYXdhaXQgT2lkY1Nlc3Npb25NYW5hZ2VyLiNleGNoYW5nZVRva2VuKFxuICAgICAgc2Vzc2lvbi5lbnYsXG4gICAgICBzZXNzaW9uLm9pZGNfdG9rZW4sXG4gICAgICBzZXNzaW9uLm9yZ19pZCxcbiAgICAgIHNlc3Npb24uc2NvcGVzLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNhdmUoPE9pZGNTZXNzaW9uRGF0YT57XG4gICAgICAuLi5zZXNzaW9uLFxuICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgdG9rZW5fZXhwOiB0b2tlbkV4cCxcbiAgICB9KTtcbiAgICB0aGlzLiNjbGllbnQgPSB0aGlzLmNyZWF0ZUNsaWVudCh0b2tlbik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIGl0J3MgdGltZSB0byByZWZyZXNoIHRoaXMgdG9rZW4uXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgaXQncyB0aW1lIHRvIHJlZnJlc2ggdGhpcyB0b2tlbi5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBhc3luYyBpc1N0YWxlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCB0aGlzLnN0b3JhZ2UucmV0cmlldmUoKTtcbiAgICByZXR1cm4gdGhpcy5oYXNFeHBpcmVkKHNlc3Npb24udG9rZW5fZXhwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgdGhlIHNlc3Npb24gaWYgaXQgaXMgYWJvdXQgdG8gZXhwaXJlLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBzZXNzaW9uIHRva2VuIHdhcyByZWZyZXNoZWQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgYXN5bmMgcmVmcmVzaElmTmVlZGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChhd2FpdCB0aGlzLmlzU3RhbGUoKSkge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZSBhbiBPSURDIHVzZXIgYW5kIGNyZWF0ZSBhIG5ldyBzZXNzaW9uIGZvciB0aGVtLlxuICAgKiBAcGFyYW0ge0VudkludGVyZmFjZX0gZW52IFRoZSBlbnZpcm9ubWVudCBvZiB0aGUgc2Vzc2lvblxuICAgKiBAcGFyYW0ge1Nlc3Npb25TdG9yYWdlPFNpZ25lclNlc3Npb25PYmplY3Q+fSBzdG9yYWdlIFRoZSBzaWduZXIgc2Vzc2lvbiBzdG9yYWdlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvaWRjVG9rZW4gVGhlIE9JREMgdG9rZW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9yZ0lkIFRoZSBpZCBvZiB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdGhlIHVzZXIgaXMgaW5cbiAgICogQHBhcmFtIHtMaXN0PHN0cmluZz59IHNjb3BlcyBUaGUgc2NvcGVzIG9mIHRoZSByZXN1bHRpbmcgc2Vzc2lvblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPE9pZGNTZXNzaW9uTWFuYWdlcj59IFRoZSBzaWduZXIgc2Vzc2lvblxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShcbiAgICBlbnY6IEVudkludGVyZmFjZSxcbiAgICBzdG9yYWdlOiBTZXNzaW9uU3RvcmFnZTxPaWRjU2Vzc2lvbkRhdGE+LFxuICAgIG9pZGNUb2tlbjogc3RyaW5nLFxuICAgIG9yZ0lkOiBzdHJpbmcsXG4gICAgc2NvcGVzOiBBcnJheTxzdHJpbmc+LFxuICApOiBQcm9taXNlPE9pZGNTZXNzaW9uTWFuYWdlcj4ge1xuICAgIGNvbnN0IFt0b2tlbiwgdG9rZW5FeHBdID0gYXdhaXQgT2lkY1Nlc3Npb25NYW5hZ2VyLiNleGNoYW5nZVRva2VuKFxuICAgICAgZW52LFxuICAgICAgb2lkY1Rva2VuLFxuICAgICAgb3JnSWQsXG4gICAgICBzY29wZXMsXG4gICAgKTtcbiAgICBhd2FpdCBzdG9yYWdlLnNhdmUoPE9pZGNTZXNzaW9uRGF0YT57XG4gICAgICBlbnYsXG4gICAgICBvcmdfaWQ6IG9yZ0lkLFxuICAgICAgb2lkY190b2tlbjogb2lkY1Rva2VuLFxuICAgICAgdG9rZW4sXG4gICAgICB0b2tlbl9leHA6IHRva2VuRXhwLFxuICAgICAgc2NvcGVzLFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgT2lkY1Nlc3Npb25NYW5hZ2VyKGVudiwgb3JnSWQsIHRva2VuLCBzdG9yYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGZyb20gc3RvcmFnZVxuICAgKiBAcGFyYW0ge09pZGNTZXNzaW9uU3RvcmFnZX0gc3RvcmFnZSBUaGUgc3RvcmFnZSB0byBsb2FkIGZyb21cbiAgICogQHJldHVybiB7UHJvbWlzZTxPaWRjU2Vzc2lvbk1hbmFnZXI+fSBOZXcgT0lEQyBzZXNzaW9uIG1hbmFnZXJcbiAgICovXG4gIHN0YXRpYyBhc3luYyBsb2FkRnJvbVN0b3JhZ2Uoc3RvcmFnZTogT2lkY1Nlc3Npb25TdG9yYWdlKTogUHJvbWlzZTxPaWRjU2Vzc2lvbk1hbmFnZXI+IHtcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgc3RvcmFnZS5yZXRyaWV2ZSgpO1xuICAgIHJldHVybiBuZXcgT2lkY1Nlc3Npb25NYW5hZ2VyKGluZm8uZW52LCBpbmZvLm9yZ19pZCwgaW5mby50b2tlbiwgc3RvcmFnZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7RW52SW50ZXJmYWNlfSBlbnYgVGhlIGVudmlyb25tZW50IG9mIHRoZSBzZXNzaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcmdJZCBUaGUgaWQgb2YgdGhlIG9yZyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiBUaGUgYXV0aG9yaXphdGlvbiB0b2tlbiB0byB1c2VcbiAgICogQHBhcmFtIHtTZXNzaW9uU3RvcmFnZTxVPn0gc3RvcmFnZSBUaGUgc3RvcmFnZSBiYWNrIGVuZCB0byB1c2UgZm9yIHN0b3JpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uIGluZm9ybWF0aW9uXG4gICAqL1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIGVudjogRW52SW50ZXJmYWNlLFxuICAgIG9yZ0lkOiBzdHJpbmcsXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBzdG9yYWdlOiBTZXNzaW9uU3RvcmFnZTxPaWRjU2Vzc2lvbkRhdGE+LFxuICApIHtcbiAgICBzdXBlcihlbnYsIG9yZ0lkLCBzdG9yYWdlKTtcbiAgICB0aGlzLiNjbGllbnQgPSB0aGlzLmNyZWF0ZUNsaWVudCh0b2tlbik7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2UgYW4gT0lEQyB0b2tlbiBmb3IgYSBDdWJlU2lnbmVyIHNlc3Npb24gdG9rZW4uXG4gICAqIEBwYXJhbSB7RW52SW50ZXJmYWNlfSBlbnYgVGhlIEN1YmVTaWduZXIgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9pZGNUb2tlbiBUaGUgT0lEQyB0b2tlblxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3JnSWQgVGhlIGlkIG9mIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0aGUgdXNlciBpcyBpblxuICAgKiBAcGFyYW0ge0xpc3Q8c3RyaW5nPn0gc2NvcGVzIFRoZSBzY29wZXMgb2YgdGhlIHJlc3VsdGluZyBzZXNzaW9uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8W3N0cmluZywgbnVtYmVyXT59IFRoZSBzZXNzaW9uIHRva2VuIGFuZCBpdHMgZXhwaXJhdGlvbiB0aW1lXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgI2V4Y2hhbmdlVG9rZW4oXG4gICAgZW52OiBFbnZJbnRlcmZhY2UsXG4gICAgb2lkY1Rva2VuOiBzdHJpbmcsXG4gICAgb3JnSWQ6IHN0cmluZyxcbiAgICBzY29wZXM6IEFycmF5PHN0cmluZz4sXG4gICk6IFByb21pc2U8W3N0cmluZywgbnVtYmVyXT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IGNyZWF0ZUNsaWVudDxwYXRocz4oe1xuICAgICAgYmFzZVVybDogZW52LlNpZ25lckFwaVJvb3QsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEF1dGhvcml6YXRpb246IG9pZGNUb2tlbixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5wb3N0KFwiL3YwL29yZy97b3JnX2lkfS9vaWRjXCIsIHtcbiAgICAgIHBhcmFtczogeyBwYXRoOiB7IG9yZ19pZDogb3JnSWQgfSB9LFxuICAgICAgYm9keToge1xuICAgICAgICBzY29wZXMsXG4gICAgICB9LFxuICAgICAgcGFyc2VBczogXCJqc29uXCIsXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGFzc2VydE9rKHJlc3ApIGFzIE9pZGNBdXRoUmVzcG9uc2U7XG4gICAgcmV0dXJuIFtkYXRhLnRva2VuLCBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDAgKyBPSURDX1RPS0VOX0VYUF9TRUNTXTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { SessionStorage } from "..";
|
|
2
|
+
import { EnvInterface } from "../env";
|
|
3
|
+
import { Client } from "../client";
|
|
4
|
+
/** Generic session manager interface. */
|
|
5
|
+
export declare abstract class SessionManager<U> {
|
|
6
|
+
readonly env: EnvInterface;
|
|
7
|
+
readonly storage: SessionStorage<U>;
|
|
8
|
+
/**
|
|
9
|
+
* @return {string} The current auth token.
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
abstract token(): Promise<string>;
|
|
13
|
+
/** Returns a client instance that uses the token. */
|
|
14
|
+
abstract client(): Promise<Client>;
|
|
15
|
+
/** Revokes the session. */
|
|
16
|
+
abstract revoke(): Promise<void>;
|
|
17
|
+
/** Refreshes the session. */
|
|
18
|
+
abstract refresh(): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Returns whether it's time to refresh this token.
|
|
21
|
+
* @return {boolean} Whether it's time to refresh this token.
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
abstract isStale(): Promise<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* Refreshes the session if it is about to expire.
|
|
27
|
+
* @return {boolean} Whether the session token was refreshed.
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
30
|
+
refreshIfNeeded(): Promise<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* Constructor.
|
|
33
|
+
* @param {EnvInterface} env The environment of the session
|
|
34
|
+
* @param {SessionStorage<U>} storage The storage back end to use for storing
|
|
35
|
+
* session information
|
|
36
|
+
*/
|
|
37
|
+
constructor(env: EnvInterface, storage: SessionStorage<U>);
|
|
38
|
+
/**
|
|
39
|
+
* Creates a new REST client with a given token
|
|
40
|
+
* @param {string} token The authorization token to use for the client
|
|
41
|
+
* @return {Client} The new REST client
|
|
42
|
+
*/
|
|
43
|
+
protected createClient(token: string): Client;
|
|
44
|
+
/**
|
|
45
|
+
* Check if a timestamp has expired.
|
|
46
|
+
* @param {number} exp The timestamp to check
|
|
47
|
+
* @param {number} buffer Optional time buffer when checking the expiration
|
|
48
|
+
* @return {boolean} True if the timestamp has expired
|
|
49
|
+
*/
|
|
50
|
+
protected hasExpired(exp: number, buffer?: number): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Throws an error that says that some feature is unsupported.
|
|
53
|
+
* @param {string} name The name of the feature that is not supported
|
|
54
|
+
*/
|
|
55
|
+
protected unsupported(name: string): never;
|
|
56
|
+
}
|
|
57
|
+
/** Interface for a session manager that knows about the org that the session is in. */
|
|
58
|
+
export declare abstract class OrgSessionManager<U> extends SessionManager<U> {
|
|
59
|
+
readonly orgId: string;
|
|
60
|
+
/**
|
|
61
|
+
* Constructor.
|
|
62
|
+
* @param {EnvInterface} env The environment of the session
|
|
63
|
+
* @param {string} orgId The id of the org associated with this session
|
|
64
|
+
* @param {SessionStorage<U>} storage The storage back end to use for storing
|
|
65
|
+
* session information
|
|
66
|
+
*/
|
|
67
|
+
constructor(env: EnvInterface, orgId: string, storage: SessionStorage<U>);
|
|
68
|
+
}
|
|
69
|
+
export interface HasEnv {
|
|
70
|
+
/** The environment */
|
|
71
|
+
env: {
|
|
72
|
+
["Dev-CubeSignerStack"]: EnvInterface;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OrgSessionManager = exports.SessionManager = void 0;
|
|
7
|
+
const openapi_fetch_1 = __importDefault(require("openapi-fetch"));
|
|
8
|
+
const DEFAULT_EXPIRATION_BUFFER_SECS = 30;
|
|
9
|
+
/** Generic session manager interface. */
|
|
10
|
+
class SessionManager {
|
|
11
|
+
/**
|
|
12
|
+
* Refreshes the session if it is about to expire.
|
|
13
|
+
* @return {boolean} Whether the session token was refreshed.
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
async refreshIfNeeded() {
|
|
17
|
+
if (await this.isStale()) {
|
|
18
|
+
await this.refresh();
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Constructor.
|
|
25
|
+
* @param {EnvInterface} env The environment of the session
|
|
26
|
+
* @param {SessionStorage<U>} storage The storage back end to use for storing
|
|
27
|
+
* session information
|
|
28
|
+
*/
|
|
29
|
+
constructor(env, storage) {
|
|
30
|
+
this.env = env;
|
|
31
|
+
this.storage = storage;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Creates a new REST client with a given token
|
|
35
|
+
* @param {string} token The authorization token to use for the client
|
|
36
|
+
* @return {Client} The new REST client
|
|
37
|
+
*/
|
|
38
|
+
createClient(token) {
|
|
39
|
+
return (0, openapi_fetch_1.default)({
|
|
40
|
+
baseUrl: this.env.SignerApiRoot,
|
|
41
|
+
headers: {
|
|
42
|
+
Authorization: token,
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if a timestamp has expired.
|
|
48
|
+
* @param {number} exp The timestamp to check
|
|
49
|
+
* @param {number} buffer Optional time buffer when checking the expiration
|
|
50
|
+
* @return {boolean} True if the timestamp has expired
|
|
51
|
+
*/
|
|
52
|
+
hasExpired(exp, buffer) {
|
|
53
|
+
return exp < new Date().getTime() / 1000 + (buffer || DEFAULT_EXPIRATION_BUFFER_SECS);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Throws an error that says that some feature is unsupported.
|
|
57
|
+
* @param {string} name The name of the feature that is not supported
|
|
58
|
+
*/
|
|
59
|
+
unsupported(name) {
|
|
60
|
+
throw new Error(`'${name}' not supported`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.SessionManager = SessionManager;
|
|
64
|
+
/** Interface for a session manager that knows about the org that the session is in. */
|
|
65
|
+
class OrgSessionManager extends SessionManager {
|
|
66
|
+
/**
|
|
67
|
+
* Constructor.
|
|
68
|
+
* @param {EnvInterface} env The environment of the session
|
|
69
|
+
* @param {string} orgId The id of the org associated with this session
|
|
70
|
+
* @param {SessionStorage<U>} storage The storage back end to use for storing
|
|
71
|
+
* session information
|
|
72
|
+
*/
|
|
73
|
+
constructor(env, orgId, storage) {
|
|
74
|
+
super(env, storage);
|
|
75
|
+
this.orgId = orgId;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.OrgSessionManager = OrgSessionManager;
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbl9tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Nlc3Npb24vc2Vzc2lvbl9tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUdBLGtFQUF5QztBQUV6QyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsQ0FBQztBQUUxQyx5Q0FBeUM7QUFDekMsTUFBc0IsY0FBYztJQTBCbEM7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxlQUFlO1FBQ25CLElBQUksTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDeEIsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxHQUFpQixFQUFFLE9BQTBCO1FBQ3ZELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxZQUFZLENBQUMsS0FBYTtRQUNsQyxPQUFPLElBQUEsdUJBQVksRUFBUTtZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhO1lBQy9CLE9BQU8sRUFBRTtnQkFDUCxhQUFhLEVBQUUsS0FBSzthQUNyQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLFVBQVUsQ0FBQyxHQUFXLEVBQUUsTUFBZTtRQUMvQyxPQUFPLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRDs7O09BR0c7SUFDTyxXQUFXLENBQUMsSUFBWTtRQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FDRjtBQWpGRCx3Q0FpRkM7QUFFRCx1RkFBdUY7QUFDdkYsTUFBc0IsaUJBQXFCLFNBQVEsY0FBaUI7SUFHbEU7Ozs7OztPQU1HO0lBQ0gsWUFBWSxHQUFpQixFQUFFLEtBQWEsRUFBRSxPQUEwQjtRQUN0RSxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7Q0FDRjtBQWRELDhDQWNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IEVudkludGVyZmFjZSB9IGZyb20gXCIuLi9lbnZcIjtcbmltcG9ydCB7IHBhdGhzLCBDbGllbnQgfSBmcm9tIFwiLi4vY2xpZW50XCI7XG5pbXBvcnQgY3JlYXRlQ2xpZW50IGZyb20gXCJvcGVuYXBpLWZldGNoXCI7XG5cbmNvbnN0IERFRkFVTFRfRVhQSVJBVElPTl9CVUZGRVJfU0VDUyA9IDMwO1xuXG4vKiogR2VuZXJpYyBzZXNzaW9uIG1hbmFnZXIgaW50ZXJmYWNlLiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNlc3Npb25NYW5hZ2VyPFU+IHtcbiAgcmVhZG9ubHkgZW52OiBFbnZJbnRlcmZhY2U7XG4gIHJlYWRvbmx5IHN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlPFU+O1xuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjdXJyZW50IGF1dGggdG9rZW4uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgYWJzdHJhY3QgdG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+O1xuXG4gIC8qKiBSZXR1cm5zIGEgY2xpZW50IGluc3RhbmNlIHRoYXQgdXNlcyB0aGUgdG9rZW4uICovXG4gIGFic3RyYWN0IGNsaWVudCgpOiBQcm9taXNlPENsaWVudD47XG5cbiAgLyoqIFJldm9rZXMgdGhlIHNlc3Npb24uICovXG4gIGFic3RyYWN0IHJldm9rZSgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKiBSZWZyZXNoZXMgdGhlIHNlc3Npb24uICovXG4gIGFic3RyYWN0IHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIGl0J3MgdGltZSB0byByZWZyZXNoIHRoaXMgdG9rZW4uXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgaXQncyB0aW1lIHRvIHJlZnJlc2ggdGhpcyB0b2tlbi5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBhYnN0cmFjdCBpc1N0YWxlKCk6IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyB0aGUgc2Vzc2lvbiBpZiBpdCBpcyBhYm91dCB0byBleHBpcmUuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHNlc3Npb24gdG9rZW4gd2FzIHJlZnJlc2hlZC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBhc3luYyByZWZyZXNoSWZOZWVkZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGF3YWl0IHRoaXMuaXNTdGFsZSgpKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7RW52SW50ZXJmYWNlfSBlbnYgVGhlIGVudmlyb25tZW50IG9mIHRoZSBzZXNzaW9uXG4gICAqIEBwYXJhbSB7U2Vzc2lvblN0b3JhZ2U8VT59IHN0b3JhZ2UgVGhlIHN0b3JhZ2UgYmFjayBlbmQgdG8gdXNlIGZvciBzdG9yaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbiBpbmZvcm1hdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3IoZW52OiBFbnZJbnRlcmZhY2UsIHN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlPFU+KSB7XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5zdG9yYWdlID0gc3RvcmFnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IFJFU1QgY2xpZW50IHdpdGggYSBnaXZlbiB0b2tlblxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gVGhlIGF1dGhvcml6YXRpb24gdG9rZW4gdG8gdXNlIGZvciB0aGUgY2xpZW50XG4gICAqIEByZXR1cm4ge0NsaWVudH0gVGhlIG5ldyBSRVNUIGNsaWVudFxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUNsaWVudCh0b2tlbjogc3RyaW5nKTogQ2xpZW50IHtcbiAgICByZXR1cm4gY3JlYXRlQ2xpZW50PHBhdGhzPih7XG4gICAgICBiYXNlVXJsOiB0aGlzLmVudi5TaWduZXJBcGlSb290LFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiB0b2tlbixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0aW1lc3RhbXAgaGFzIGV4cGlyZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBleHAgVGhlIHRpbWVzdGFtcCB0byBjaGVja1xuICAgKiBAcGFyYW0ge251bWJlcn0gYnVmZmVyIE9wdGlvbmFsIHRpbWUgYnVmZmVyIHdoZW4gY2hlY2tpbmcgdGhlIGV4cGlyYXRpb25cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdGltZXN0YW1wIGhhcyBleHBpcmVkXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFzRXhwaXJlZChleHA6IG51bWJlciwgYnVmZmVyPzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV4cCA8IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCArIChidWZmZXIgfHwgREVGQVVMVF9FWFBJUkFUSU9OX0JVRkZFUl9TRUNTKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYW4gZXJyb3IgdGhhdCBzYXlzIHRoYXQgc29tZSBmZWF0dXJlIGlzIHVuc3VwcG9ydGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0aGF0IGlzIG5vdCBzdXBwb3J0ZWRcbiAgICovXG4gIHByb3RlY3RlZCB1bnN1cHBvcnRlZChuYW1lOiBzdHJpbmcpOiBuZXZlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHtuYW1lfScgbm90IHN1cHBvcnRlZGApO1xuICB9XG59XG5cbi8qKiBJbnRlcmZhY2UgZm9yIGEgc2Vzc2lvbiBtYW5hZ2VyIHRoYXQga25vd3MgYWJvdXQgdGhlIG9yZyB0aGF0IHRoZSBzZXNzaW9uIGlzIGluLiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9yZ1Nlc3Npb25NYW5hZ2VyPFU+IGV4dGVuZHMgU2Vzc2lvbk1hbmFnZXI8VT4ge1xuICByZWFkb25seSBvcmdJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtFbnZJbnRlcmZhY2V9IGVudiBUaGUgZW52aXJvbm1lbnQgb2YgdGhlIHNlc3Npb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9yZ0lkIFRoZSBpZCBvZiB0aGUgb3JnIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlc3Npb25cbiAgICogQHBhcmFtIHtTZXNzaW9uU3RvcmFnZTxVPn0gc3RvcmFnZSBUaGUgc3RvcmFnZSBiYWNrIGVuZCB0byB1c2UgZm9yIHN0b3JpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uIGluZm9ybWF0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbnY6IEVudkludGVyZmFjZSwgb3JnSWQ6IHN0cmluZywgc3RvcmFnZTogU2Vzc2lvblN0b3JhZ2U8VT4pIHtcbiAgICBzdXBlcihlbnYsIHN0b3JhZ2UpO1xuICAgIHRoaXMub3JnSWQgPSBvcmdJZDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhhc0VudiB7XG4gIC8qKiBUaGUgZW52aXJvbm1lbnQgKi9cbiAgZW52OiB7XG4gICAgW1wiRGV2LUN1YmVTaWduZXJTdGFja1wiXTogRW52SW50ZXJmYWNlO1xuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** Interface for storing sessions. */
|
|
2
|
+
export interface SessionStorage<U> {
|
|
3
|
+
/** Store session information */
|
|
4
|
+
save(data: U): Promise<void>;
|
|
5
|
+
/** Retrieve session information */
|
|
6
|
+
retrieve(): Promise<U>;
|
|
7
|
+
}
|
|
8
|
+
/** Stores session information in memory */
|
|
9
|
+
export declare class MemorySessionStorage<U> implements SessionStorage<U> {
|
|
10
|
+
#private;
|
|
11
|
+
/**
|
|
12
|
+
* Store session information.
|
|
13
|
+
* @param {U} data The session information to store
|
|
14
|
+
* @return {Promise<void>}
|
|
15
|
+
*/
|
|
16
|
+
save(data: U): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Retrieve session information.
|
|
19
|
+
* @return {Promise<U>} The session information
|
|
20
|
+
*/
|
|
21
|
+
retrieve(): Promise<U>;
|
|
22
|
+
/**
|
|
23
|
+
* Constructor.
|
|
24
|
+
* @param {U?} data The initial data
|
|
25
|
+
*/
|
|
26
|
+
constructor(data?: U);
|
|
27
|
+
}
|
|
28
|
+
/** Stores session information in a JSON file */
|
|
29
|
+
export declare class JsonFileSessionStorage<U> implements SessionStorage<U> {
|
|
30
|
+
#private;
|
|
31
|
+
/**
|
|
32
|
+
* Store session information.
|
|
33
|
+
* @param {U} data The session information to store
|
|
34
|
+
* @return {Promise<void>}
|
|
35
|
+
*/
|
|
36
|
+
save(data: U): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Retrieve session information.
|
|
39
|
+
* @return {Promise<U>} The session information
|
|
40
|
+
*/
|
|
41
|
+
retrieve(): Promise<U>;
|
|
42
|
+
/**
|
|
43
|
+
* Constructor.
|
|
44
|
+
* @param {string} filePath The file path to use for storage
|
|
45
|
+
*/
|
|
46
|
+
constructor(filePath: string);
|
|
47
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
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");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
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");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var _MemorySessionStorage_data, _JsonFileSessionStorage_filePath;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.JsonFileSessionStorage = exports.MemorySessionStorage = void 0;
|
|
16
|
+
const fs_1 = require("fs");
|
|
17
|
+
/** Stores session information in memory */
|
|
18
|
+
class MemorySessionStorage {
|
|
19
|
+
/**
|
|
20
|
+
* Store session information.
|
|
21
|
+
* @param {U} data The session information to store
|
|
22
|
+
* @return {Promise<void>}
|
|
23
|
+
*/
|
|
24
|
+
async save(data) {
|
|
25
|
+
__classPrivateFieldSet(this, _MemorySessionStorage_data, data, "f");
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Retrieve session information.
|
|
29
|
+
* @return {Promise<U>} The session information
|
|
30
|
+
*/
|
|
31
|
+
async retrieve() {
|
|
32
|
+
if (!__classPrivateFieldGet(this, _MemorySessionStorage_data, "f")) {
|
|
33
|
+
throw new Error("Missing session information");
|
|
34
|
+
}
|
|
35
|
+
return __classPrivateFieldGet(this, _MemorySessionStorage_data, "f");
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Constructor.
|
|
39
|
+
* @param {U?} data The initial data
|
|
40
|
+
*/
|
|
41
|
+
constructor(data) {
|
|
42
|
+
_MemorySessionStorage_data.set(this, void 0);
|
|
43
|
+
__classPrivateFieldSet(this, _MemorySessionStorage_data, data, "f");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.MemorySessionStorage = MemorySessionStorage;
|
|
47
|
+
_MemorySessionStorage_data = new WeakMap();
|
|
48
|
+
/** Stores session information in a JSON file */
|
|
49
|
+
class JsonFileSessionStorage {
|
|
50
|
+
/**
|
|
51
|
+
* Store session information.
|
|
52
|
+
* @param {U} data The session information to store
|
|
53
|
+
* @return {Promise<void>}
|
|
54
|
+
*/
|
|
55
|
+
async save(data) {
|
|
56
|
+
await fs_1.promises.writeFile(__classPrivateFieldGet(this, _JsonFileSessionStorage_filePath, "f"), JSON.stringify(data), "utf-8");
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Retrieve session information.
|
|
60
|
+
* @return {Promise<U>} The session information
|
|
61
|
+
*/
|
|
62
|
+
async retrieve() {
|
|
63
|
+
return JSON.parse(await fs_1.promises.readFile(__classPrivateFieldGet(this, _JsonFileSessionStorage_filePath, "f"), "utf-8"));
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Constructor.
|
|
67
|
+
* @param {string} filePath The file path to use for storage
|
|
68
|
+
*/
|
|
69
|
+
constructor(filePath) {
|
|
70
|
+
_JsonFileSessionStorage_filePath.set(this, void 0);
|
|
71
|
+
__classPrivateFieldSet(this, _JsonFileSessionStorage_filePath, filePath, "f");
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.JsonFileSessionStorage = JsonFileSessionStorage;
|
|
75
|
+
_JsonFileSessionStorage_filePath = new WeakMap();
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbl9zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Nlc3Npb24vc2Vzc2lvbl9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJCQUFvQztBQVdwQywyQ0FBMkM7QUFDM0MsTUFBYSxvQkFBb0I7SUFHL0I7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBTztRQUNoQix1QkFBQSxJQUFJLDhCQUFTLElBQUksTUFBQSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsUUFBUTtRQUNaLElBQUksQ0FBQyx1QkFBQSxJQUFJLGtDQUFNLEVBQUU7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7U0FDaEQ7UUFDRCxPQUFPLHVCQUFBLElBQUksa0NBQU0sQ0FBQztJQUNwQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxJQUFRO1FBMUJwQiw2Q0FBVTtRQTJCUix1QkFBQSxJQUFJLDhCQUFTLElBQUksTUFBQSxDQUFDO0lBQ3BCLENBQUM7Q0FDRjtBQTlCRCxvREE4QkM7O0FBRUQsZ0RBQWdEO0FBQ2hELE1BQWEsc0JBQXNCO0lBR2pDOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQU87UUFDaEIsTUFBTSxhQUFFLENBQUMsU0FBUyxDQUFDLHVCQUFBLElBQUksd0NBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsUUFBUTtRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLGFBQUUsQ0FBQyxRQUFRLENBQUMsdUJBQUEsSUFBSSx3Q0FBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksUUFBZ0I7UUF2QjVCLG1EQUFrQjtRQXdCaEIsdUJBQUEsSUFBSSxvQ0FBYSxRQUFRLE1BQUEsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUEzQkQsd0RBMkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tIFwiZnNcIjtcblxuLyoqIEludGVyZmFjZSBmb3Igc3RvcmluZyBzZXNzaW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblN0b3JhZ2U8VT4ge1xuICAvKiogU3RvcmUgc2Vzc2lvbiBpbmZvcm1hdGlvbiAqL1xuICBzYXZlKGRhdGE6IFUpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKiBSZXRyaWV2ZSBzZXNzaW9uIGluZm9ybWF0aW9uICovXG4gIHJldHJpZXZlKCk6IFByb21pc2U8VT47XG59XG5cbi8qKiBTdG9yZXMgc2Vzc2lvbiBpbmZvcm1hdGlvbiBpbiBtZW1vcnkgKi9cbmV4cG9ydCBjbGFzcyBNZW1vcnlTZXNzaW9uU3RvcmFnZTxVPiBpbXBsZW1lbnRzIFNlc3Npb25TdG9yYWdlPFU+IHtcbiAgI2RhdGE/OiBVO1xuXG4gIC8qKlxuICAgKiBTdG9yZSBzZXNzaW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcGFyYW0ge1V9IGRhdGEgVGhlIHNlc3Npb24gaW5mb3JtYXRpb24gdG8gc3RvcmVcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHNhdmUoZGF0YTogVSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuI2RhdGEgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHNlc3Npb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VT59IFRoZSBzZXNzaW9uIGluZm9ybWF0aW9uXG4gICAqL1xuICBhc3luYyByZXRyaWV2ZSgpOiBQcm9taXNlPFU+IHtcbiAgICBpZiAoIXRoaXMuI2RhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcgc2Vzc2lvbiBpbmZvcm1hdGlvblwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI2RhdGE7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7VT99IGRhdGEgVGhlIGluaXRpYWwgZGF0YVxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YT86IFUpIHtcbiAgICB0aGlzLiNkYXRhID0gZGF0YTtcbiAgfVxufVxuXG4vKiogU3RvcmVzIHNlc3Npb24gaW5mb3JtYXRpb24gaW4gYSBKU09OIGZpbGUgKi9cbmV4cG9ydCBjbGFzcyBKc29uRmlsZVNlc3Npb25TdG9yYWdlPFU+IGltcGxlbWVudHMgU2Vzc2lvblN0b3JhZ2U8VT4ge1xuICAjZmlsZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogU3RvcmUgc2Vzc2lvbiBpbmZvcm1hdGlvbi5cbiAgICogQHBhcmFtIHtVfSBkYXRhIFRoZSBzZXNzaW9uIGluZm9ybWF0aW9uIHRvIHN0b3JlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBzYXZlKGRhdGE6IFUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUodGhpcy4jZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KGRhdGEpLCBcInV0Zi04XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHNlc3Npb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VT59IFRoZSBzZXNzaW9uIGluZm9ybWF0aW9uXG4gICAqL1xuICBhc3luYyByZXRyaWV2ZSgpOiBQcm9taXNlPFU+IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLiNmaWxlUGF0aCwgXCJ1dGYtOFwiKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCBUaGUgZmlsZSBwYXRoIHRvIHVzZSBmb3Igc3RvcmFnZVxuICAgKi9cbiAgY29uc3RydWN0b3IoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuI2ZpbGVQYXRoID0gZmlsZVBhdGg7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { CubeSigner } from "..";
|
|
2
|
+
import { components, paths, Client } from "../client";
|
|
3
|
+
import { HasEnv, OrgSessionManager } from "./session_manager";
|
|
4
|
+
import { SessionStorage } from "./session_storage";
|
|
5
|
+
export type ClientSessionInfo = components["schemas"]["ClientSessionInfo"];
|
|
6
|
+
export type CreateSignerSessionRequest = paths["/v0/org/{org_id}/roles/{role_id}/tokens"]["post"]["requestBody"]["content"]["application/json"];
|
|
7
|
+
export type RefreshSignerSessionRequest = paths["/v1/org/{org_id}/token/refresh"]["patch"]["requestBody"]["content"]["application/json"];
|
|
8
|
+
/** JSON representation of our "signer session" file format */
|
|
9
|
+
export interface SignerSessionObject {
|
|
10
|
+
/** The organization ID */
|
|
11
|
+
org_id: string;
|
|
12
|
+
/** The role ID */
|
|
13
|
+
role_id: string;
|
|
14
|
+
/** The purpose of the session token */
|
|
15
|
+
purpose: string;
|
|
16
|
+
/** The token to include in Authorization header */
|
|
17
|
+
token: string;
|
|
18
|
+
/** Session info */
|
|
19
|
+
session_info: ClientSessionInfo;
|
|
20
|
+
}
|
|
21
|
+
export interface SignerSessionData extends SignerSessionObject, HasEnv {
|
|
22
|
+
}
|
|
23
|
+
/** Type of storage required for signer sessions */
|
|
24
|
+
export type SignerSessionStorage = SessionStorage<SignerSessionData>;
|
|
25
|
+
export interface SignerSessionLifetime {
|
|
26
|
+
/** Session lifetime (in seconds). Defaults to one week (604800). */
|
|
27
|
+
session?: number;
|
|
28
|
+
/** Auth token lifetime (in seconds). Defaults to five minutes (300). */
|
|
29
|
+
auth: number;
|
|
30
|
+
/** Refresh token lifetime (in seconds). Defaults to one day (86400). */
|
|
31
|
+
refresh?: number;
|
|
32
|
+
}
|
|
33
|
+
/** Manager for signer sessions. */
|
|
34
|
+
export declare class SignerSessionManager extends OrgSessionManager<SignerSessionData> {
|
|
35
|
+
#private;
|
|
36
|
+
readonly cs?: CubeSigner;
|
|
37
|
+
readonly roleId: string;
|
|
38
|
+
/**
|
|
39
|
+
* @return {string} The current auth token.
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
token(): Promise<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Returns a client with the current session and refreshes the current
|
|
45
|
+
* session. May **UPDATE/MUTATE** self.
|
|
46
|
+
*/
|
|
47
|
+
client(): Promise<Client>;
|
|
48
|
+
/** Revokes the session. */
|
|
49
|
+
revoke(): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Returns whether it's time to refresh this token.
|
|
52
|
+
* @return {boolean} Whether it's time to refresh this token.
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
55
|
+
isStale(): Promise<boolean>;
|
|
56
|
+
/**
|
|
57
|
+
* Refreshes the session and **UPDATES/MUTATES** self.
|
|
58
|
+
*/
|
|
59
|
+
refresh(): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Create a new signer session.
|
|
62
|
+
* @param {CubeSigner} cs The CubeSigner instance
|
|
63
|
+
* @param {SessionStorage<SignerSessionObject>} storage The session storage to use
|
|
64
|
+
* @param {string} orgId Org ID
|
|
65
|
+
* @param {string} roleId Role ID
|
|
66
|
+
* @param {string} purpose The purpose of the session
|
|
67
|
+
* @param {SignerSessionLifetime} ttl Lifetime settings
|
|
68
|
+
* @return {Promise<SignerSessionManager>} New signer session
|
|
69
|
+
*/
|
|
70
|
+
static create(cs: CubeSigner, storage: SignerSessionStorage, orgId: string, roleId: string, purpose: string, ttl?: SignerSessionLifetime): Promise<SignerSessionManager>;
|
|
71
|
+
/**
|
|
72
|
+
* Uses an existing session to create a new signer session manager.
|
|
73
|
+
* @param {CubeSigner} cs The CubeSigner instance
|
|
74
|
+
* @param {SessionStorage<SignerSessionObject>} storage The session storage to use
|
|
75
|
+
* @return {Promise<SingerSession>} New signer session manager
|
|
76
|
+
*/
|
|
77
|
+
static loadFromStorage(cs: CubeSigner, storage: SignerSessionStorage): Promise<SignerSessionManager>;
|
|
78
|
+
/**
|
|
79
|
+
* Constructor.
|
|
80
|
+
* @param {CubeSigner} cs CubeSigner
|
|
81
|
+
* @param {string} orgId The id of the org associated with this session
|
|
82
|
+
* @param {string} roleId The id of the role that this session assumes
|
|
83
|
+
* @param {string} token The authorization token to use
|
|
84
|
+
* @param {SignerSessionStorage} storage The session storage to use
|
|
85
|
+
* @internal
|
|
86
|
+
*/
|
|
87
|
+
private constructor();
|
|
88
|
+
}
|