@cubist-labs/cubesigner-sdk 0.2.28 → 0.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -28
- package/dist/cjs/package.json +41 -0
- package/dist/cjs/spec/env/beta.json +9 -0
- package/dist/cjs/spec/env/gamma.json +9 -0
- package/dist/cjs/spec/env/prod.json +9 -0
- package/dist/cjs/src/api.d.ts +652 -0
- package/dist/cjs/src/api.js +1345 -0
- package/dist/cjs/src/client.d.ts +642 -0
- package/dist/cjs/src/client.js +455 -0
- package/dist/cjs/src/env.d.ts +15 -0
- package/dist/cjs/src/env.js +35 -0
- package/dist/cjs/src/error.d.ts +32 -0
- package/dist/cjs/src/error.js +37 -0
- package/dist/cjs/src/events.d.ts +84 -0
- package/dist/cjs/src/events.js +195 -0
- package/dist/cjs/src/index.d.ts +203 -0
- package/dist/cjs/src/index.js +298 -0
- package/dist/cjs/src/key.d.ts +169 -0
- package/dist/cjs/src/key.js +262 -0
- package/dist/{src/fido.d.ts → cjs/src/mfa.d.ts} +38 -17
- package/dist/cjs/src/mfa.js +172 -0
- package/dist/cjs/src/org.d.ts +99 -0
- package/dist/cjs/src/org.js +95 -0
- package/dist/cjs/src/paginator.d.ts +76 -0
- package/dist/cjs/src/paginator.js +99 -0
- package/dist/cjs/src/response.d.ts +114 -0
- package/dist/cjs/src/response.js +203 -0
- package/dist/cjs/src/role.d.ts +289 -0
- package/dist/cjs/src/role.js +261 -0
- package/dist/cjs/src/schema.d.ts +6404 -0
- package/dist/cjs/src/schema.js +7 -0
- package/dist/cjs/src/schema_types.d.ts +116 -0
- package/dist/cjs/src/schema_types.js +3 -0
- package/dist/cjs/src/session/session_storage.d.ts +27 -0
- package/dist/cjs/src/session/session_storage.js +47 -0
- package/dist/cjs/src/session/signer_session_manager.d.ts +125 -0
- package/dist/cjs/src/session/signer_session_manager.js +239 -0
- package/dist/cjs/src/signer_session.d.ts +41 -0
- package/dist/cjs/src/signer_session.js +77 -0
- package/dist/cjs/src/user_export.d.ts +52 -0
- package/dist/cjs/src/user_export.js +129 -0
- package/dist/cjs/src/util.d.ts +56 -0
- package/dist/cjs/src/util.js +87 -0
- package/dist/esm/package.json +41 -0
- package/dist/esm/spec/env/beta.json +9 -0
- package/dist/esm/spec/env/gamma.json +9 -0
- package/dist/esm/spec/env/prod.json +9 -0
- package/dist/esm/src/api.d.ts +652 -0
- package/dist/esm/src/api.js +1335 -0
- package/dist/esm/src/client.d.ts +642 -0
- package/dist/esm/src/client.js +451 -0
- package/dist/esm/src/env.d.ts +15 -0
- package/dist/esm/src/env.js +9 -0
- package/dist/esm/src/error.d.ts +32 -0
- package/dist/esm/src/error.js +32 -0
- package/dist/esm/src/events.d.ts +84 -0
- package/dist/esm/src/events.js +189 -0
- package/dist/esm/src/index.d.ts +203 -0
- package/dist/esm/src/index.js +276 -0
- package/dist/esm/src/key.d.ts +169 -0
- package/dist/esm/src/key.js +256 -0
- package/dist/esm/src/mfa.d.ts +97 -0
- package/dist/esm/src/mfa.js +166 -0
- package/dist/esm/src/org.d.ts +99 -0
- package/dist/esm/src/org.js +91 -0
- package/dist/esm/src/paginator.d.ts +76 -0
- package/dist/esm/src/paginator.js +94 -0
- package/dist/esm/src/response.d.ts +114 -0
- package/dist/esm/src/response.js +198 -0
- package/dist/esm/src/role.d.ts +289 -0
- package/dist/esm/src/role.js +256 -0
- package/dist/esm/src/schema.d.ts +6404 -0
- package/dist/esm/src/schema.js +6 -0
- package/dist/esm/src/schema_types.d.ts +116 -0
- package/dist/esm/src/schema_types.js +2 -0
- package/dist/esm/src/session/session_storage.d.ts +27 -0
- package/dist/esm/src/session/session_storage.js +43 -0
- package/dist/esm/src/session/signer_session_manager.d.ts +125 -0
- package/dist/esm/src/session/signer_session_manager.js +235 -0
- package/dist/esm/src/signer_session.d.ts +41 -0
- package/dist/esm/src/signer_session.js +72 -0
- package/dist/esm/src/user_export.d.ts +52 -0
- package/dist/esm/src/user_export.js +99 -0
- package/dist/esm/src/util.d.ts +56 -0
- package/dist/esm/src/util.js +77 -0
- package/dist/package.json +13 -45
- package/dist/src/api.d.ts +29 -1
- package/dist/src/api.js +66 -1
- package/dist/src/client.d.ts +35 -14
- package/dist/src/client.js +12 -8
- package/dist/src/events.js +1 -1
- package/dist/src/index.d.ts +6 -11
- package/dist/src/index.js +9 -25
- package/dist/src/key.d.ts +18 -7
- package/dist/src/key.js +52 -19
- package/dist/src/role.d.ts +46 -3
- package/dist/src/role.js +60 -8
- package/dist/src/schema.d.ts +206 -72
- package/dist/src/schema.js +1 -1
- package/dist/src/schema_types.d.ts +3 -0
- package/dist/src/schema_types.js +1 -1
- package/dist/src/session/signer_session_manager.d.ts +38 -14
- package/dist/src/session/signer_session_manager.js +93 -33
- package/dist/src/util.d.ts +14 -0
- package/dist/src/util.js +24 -27
- package/package.json +19 -46
- package/src/api.ts +145 -19
- package/src/client.ts +106 -10
- package/src/error.ts +4 -0
- package/src/events.ts +2 -0
- package/src/index.ts +10 -24
- package/src/key.ts +67 -20
- package/src/mfa.ts +8 -4
- package/src/response.ts +50 -4
- package/src/role.ts +87 -7
- package/src/schema.ts +764 -152
- package/src/schema_types.ts +6 -0
- package/src/session/session_storage.ts +0 -32
- package/src/session/signer_session_manager.ts +126 -38
- package/src/util.ts +18 -10
- package/tsconfig.json +1 -21
- package/LICENSE-APACHE +0 -177
- package/LICENSE-MIT +0 -25
- package/NOTICE +0 -13
- package/dist/examples/ethers.d.ts +0 -1
- package/dist/examples/ethers.js +0 -142
- package/dist/src/ethers/index.d.ts +0 -95
- package/dist/src/ethers/index.js +0 -215
- package/dist/src/fido.js +0 -148
- package/dist/src/session/cognito_manager.d.ts +0 -71
- package/dist/src/session/cognito_manager.js +0 -129
- package/dist/src/session/generic.d.ts +0 -47
- package/dist/src/session/generic.js +0 -3
- package/dist/src/session/management_session_manager.d.ts +0 -59
- package/dist/src/session/management_session_manager.js +0 -111
- package/dist/src/session/oidc_session_manager.d.ts +0 -78
- package/dist/src/session/oidc_session_manager.js +0 -142
- package/dist/src/session/session_manager.d.ts +0 -99
- package/dist/src/session/session_manager.js +0 -136
- package/dist/src/sign.d.ts +0 -114
- package/dist/src/sign.js +0 -248
- package/dist/test/sessions.d.ts +0 -35
- package/dist/test/sessions.js +0 -56
- package/src/ethers/index.ts +0 -253
- package/src/session/cognito_manager.ts +0 -161
- package/src/session/session_manager.ts +0 -165
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { CubeSignerClient } from "./client";
|
|
2
|
+
import { OrgInfo, SignerSessionManager, SignerSessionStorage } from ".";
|
|
3
|
+
/** Organization id */
|
|
4
|
+
export type OrgId = string;
|
|
5
|
+
/** Org-wide policy */
|
|
6
|
+
export type OrgPolicy = SourceIpAllowlistPolicy | OidcAuthSourcesPolicy | OriginAllowlistPolicy | MaxDailyUnstakePolicy;
|
|
7
|
+
/**
|
|
8
|
+
* Provides an allowlist of OIDC Issuers and audiences that are allowed to authenticate into this org.
|
|
9
|
+
* @example {"OidcAuthSources": { "https://accounts.google.com": [ "1234.apps.googleusercontent.com" ]}}
|
|
10
|
+
*/
|
|
11
|
+
export interface OidcAuthSourcesPolicy {
|
|
12
|
+
OidcAuthSources: Record<string, string[]>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Only allow requests from the specified origins.
|
|
16
|
+
* @example {"OriginAllowlist": "*"}
|
|
17
|
+
*/
|
|
18
|
+
export interface OriginAllowlistPolicy {
|
|
19
|
+
OriginAllowlist: string[] | "*";
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Restrict signing to specific source IP addresses.
|
|
23
|
+
* @example {"SourceIpAllowlist": ["10.1.2.3/8", "169.254.17.1/16"]}
|
|
24
|
+
*/
|
|
25
|
+
export interface SourceIpAllowlistPolicy {
|
|
26
|
+
SourceIpAllowlist: string[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Restrict the number of unstakes per day.
|
|
30
|
+
* @example {"MaxDailyUnstake": 5 }
|
|
31
|
+
*/
|
|
32
|
+
export interface MaxDailyUnstakePolicy {
|
|
33
|
+
MaxDailyUnstake: number;
|
|
34
|
+
}
|
|
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 {
|
|
41
|
+
/**
|
|
42
|
+
* @description The org id
|
|
43
|
+
* @example Org#c3b9379c-4e8c-4216-bd0a-65ace53cf98f
|
|
44
|
+
*/
|
|
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
|
+
totp_failure_limit: number;
|
|
61
|
+
user_export_delay: number;
|
|
62
|
+
user_export_window: number;
|
|
63
|
+
}>;
|
|
64
|
+
/** Human-readable name for the org */
|
|
65
|
+
name(): Promise<string | undefined>;
|
|
66
|
+
/** Get all keys in the org. */
|
|
67
|
+
get keys(): (type?: import("./key").KeyType | undefined, page?: import("./paginator").PageOpts | undefined) => Promise<import("./key").Key[]>;
|
|
68
|
+
/**
|
|
69
|
+
* Set the human-readable name for the org.
|
|
70
|
+
* @param {string} name The new human-readable name for the org (must be alphanumeric).
|
|
71
|
+
* @example my_org_name
|
|
72
|
+
*/
|
|
73
|
+
setName(name: string): Promise<void>;
|
|
74
|
+
/** Is the org enabled? */
|
|
75
|
+
enabled(): Promise<boolean>;
|
|
76
|
+
/** Enable the org. */
|
|
77
|
+
enable(): Promise<void>;
|
|
78
|
+
/** Disable the org. */
|
|
79
|
+
disable(): Promise<void>;
|
|
80
|
+
/** Get the policy for the org. */
|
|
81
|
+
policy(): Promise<OrgPolicy[]>;
|
|
82
|
+
/**
|
|
83
|
+
* Set the policy for the org.
|
|
84
|
+
* @param {OrgPolicy[]} policy The new policy for the org.
|
|
85
|
+
*/
|
|
86
|
+
setPolicy(policy: OrgPolicy[]): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Retrieve the org associated with a session.
|
|
89
|
+
* @param {SessionStorage} storage The session
|
|
90
|
+
* @return {Org} An {@link Org} instance for the org associated with this session.
|
|
91
|
+
*/
|
|
92
|
+
static retrieveFromStorage(storage: SignerSessionStorage): Promise<Org>;
|
|
93
|
+
/**
|
|
94
|
+
* Constructor.
|
|
95
|
+
* @param {CubeSignerClient | SignerSessionManager} csc The CubeSigner instance.
|
|
96
|
+
* @param {OrgInfo| string} data Either org id or name or {@link OrgInfo}.
|
|
97
|
+
*/
|
|
98
|
+
constructor(csc: CubeSignerClient | SignerSessionManager, data?: OrgInfo | string);
|
|
99
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Org = void 0;
|
|
4
|
+
const client_1 = require("./client");
|
|
5
|
+
const _1 = require(".");
|
|
6
|
+
/**
|
|
7
|
+
* An organization.
|
|
8
|
+
*
|
|
9
|
+
* Extends {@link CubeSignerClient} and provides a few org-specific methods on top.
|
|
10
|
+
*/
|
|
11
|
+
class Org extends client_1.CubeSignerClient {
|
|
12
|
+
/**
|
|
13
|
+
* @description The org id
|
|
14
|
+
* @example Org#c3b9379c-4e8c-4216-bd0a-65ace53cf98f
|
|
15
|
+
*/
|
|
16
|
+
get id() {
|
|
17
|
+
return this.orgId;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Obtain information about the current organization.
|
|
21
|
+
*
|
|
22
|
+
* Same as {@link orgGet}.
|
|
23
|
+
*/
|
|
24
|
+
get info() {
|
|
25
|
+
return this.orgGet.bind(this);
|
|
26
|
+
}
|
|
27
|
+
/** Human-readable name for the org */
|
|
28
|
+
async name() {
|
|
29
|
+
const org = await this.orgGet();
|
|
30
|
+
return org.name ?? undefined;
|
|
31
|
+
}
|
|
32
|
+
/** Get all keys in the org. */
|
|
33
|
+
get keys() {
|
|
34
|
+
return this.orgKeys.bind(this);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Set the human-readable name for the org.
|
|
38
|
+
* @param {string} name The new human-readable name for the org (must be alphanumeric).
|
|
39
|
+
* @example my_org_name
|
|
40
|
+
*/
|
|
41
|
+
async setName(name) {
|
|
42
|
+
if (!/^[a-zA-Z0-9_]{3,30}$/.test(name)) {
|
|
43
|
+
throw new Error("Org name must be alphanumeric and between 3 and 30 characters");
|
|
44
|
+
}
|
|
45
|
+
await this.orgUpdate({ name });
|
|
46
|
+
}
|
|
47
|
+
/** Is the org enabled? */
|
|
48
|
+
async enabled() {
|
|
49
|
+
const org = await this.orgGet();
|
|
50
|
+
return org.enabled;
|
|
51
|
+
}
|
|
52
|
+
/** Enable the org. */
|
|
53
|
+
async enable() {
|
|
54
|
+
await this.orgUpdate({ enabled: true });
|
|
55
|
+
}
|
|
56
|
+
/** Disable the org. */
|
|
57
|
+
async disable() {
|
|
58
|
+
await this.orgUpdate({ enabled: false });
|
|
59
|
+
}
|
|
60
|
+
/** Get the policy for the org. */
|
|
61
|
+
async policy() {
|
|
62
|
+
const org = await this.orgGet();
|
|
63
|
+
return (org.policy ?? []);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Set the policy for the org.
|
|
67
|
+
* @param {OrgPolicy[]} policy The new policy for the org.
|
|
68
|
+
*/
|
|
69
|
+
async setPolicy(policy) {
|
|
70
|
+
const p = policy;
|
|
71
|
+
await this.orgUpdate({ policy: p });
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Retrieve the org associated with a session.
|
|
75
|
+
* @param {SessionStorage} storage The session
|
|
76
|
+
* @return {Org} An {@link Org} instance for the org associated with this session.
|
|
77
|
+
*/
|
|
78
|
+
static async retrieveFromStorage(storage) {
|
|
79
|
+
const sessionMgr = await _1.SignerSessionManager.loadFromStorage(storage);
|
|
80
|
+
return new Org(new client_1.CubeSignerClient(sessionMgr), sessionMgr.orgId);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Constructor.
|
|
84
|
+
* @param {CubeSignerClient | SignerSessionManager} csc The CubeSigner instance.
|
|
85
|
+
* @param {OrgInfo| string} data Either org id or name or {@link OrgInfo}.
|
|
86
|
+
*/
|
|
87
|
+
constructor(csc, data) {
|
|
88
|
+
const mgr = csc instanceof client_1.CubeSignerClient ? csc.sessionMgr : csc;
|
|
89
|
+
// NOTE: data can be OrgInfo for backward compatibility reasons
|
|
90
|
+
const orgId = typeof data === "string" ? data : data?.org_id;
|
|
91
|
+
super(mgr, orgId);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.Org = Org;
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29yZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBNEM7QUFDNUMsd0JBQXdFO0FBNEN4RTs7OztHQUlHO0FBQ0gsTUFBYSxHQUFJLFNBQVEseUJBQWdCO0lBQ3ZDOzs7T0FHRztJQUNILElBQUksRUFBRTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELHNDQUFzQztJQUN0QyxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hDLE9BQU8sR0FBRyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELCtCQUErQjtJQUMvQixJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFZO1FBQ3hCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUNyQixDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsS0FBSyxDQUFDLE1BQU07UUFDVixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQTJCLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBbUI7UUFDakMsTUFBTSxDQUFDLEdBQUcsTUFBNEMsQ0FBQztRQUN2RCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBNkI7UUFDNUQsTUFBTSxVQUFVLEdBQUcsTUFBTSx1QkFBb0IsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLHlCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQVksR0FBNEMsRUFBRSxJQUF1QjtRQUMvRSxNQUFNLEdBQUcsR0FBRyxHQUFHLFlBQVkseUJBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLEdBQTRCLENBQUM7UUFFN0YsK0RBQStEO1FBQy9ELE1BQU0sS0FBSyxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO1FBQzdELEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQztDQUNGO0FBOUZELGtCQThGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1YmVTaWduZXJDbGllbnQgfSBmcm9tIFwiLi9jbGllbnRcIjtcbmltcG9ydCB7IE9yZ0luZm8sIFNpZ25lclNlc3Npb25NYW5hZ2VyLCBTaWduZXJTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuXCI7XG5cbi8qKiBPcmdhbml6YXRpb24gaWQgKi9cbmV4cG9ydCB0eXBlIE9yZ0lkID0gc3RyaW5nO1xuXG4vKiogT3JnLXdpZGUgcG9saWN5ICovXG5leHBvcnQgdHlwZSBPcmdQb2xpY3kgPVxuICB8IFNvdXJjZUlwQWxsb3dsaXN0UG9saWN5XG4gIHwgT2lkY0F1dGhTb3VyY2VzUG9saWN5XG4gIHwgT3JpZ2luQWxsb3dsaXN0UG9saWN5XG4gIHwgTWF4RGFpbHlVbnN0YWtlUG9saWN5O1xuXG4vKipcbiAqIFByb3ZpZGVzIGFuIGFsbG93bGlzdCBvZiBPSURDIElzc3VlcnMgYW5kIGF1ZGllbmNlcyB0aGF0IGFyZSBhbGxvd2VkIHRvIGF1dGhlbnRpY2F0ZSBpbnRvIHRoaXMgb3JnLlxuICogQGV4YW1wbGUge1wiT2lkY0F1dGhTb3VyY2VzXCI6IHsgXCJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb21cIjogWyBcIjEyMzQuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb21cIiBdfX1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPaWRjQXV0aFNvdXJjZXNQb2xpY3kge1xuICBPaWRjQXV0aFNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcbn1cblxuLyoqXG4gKiBPbmx5IGFsbG93IHJlcXVlc3RzIGZyb20gdGhlIHNwZWNpZmllZCBvcmlnaW5zLlxuICogQGV4YW1wbGUge1wiT3JpZ2luQWxsb3dsaXN0XCI6IFwiKlwifVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbkFsbG93bGlzdFBvbGljeSB7XG4gIE9yaWdpbkFsbG93bGlzdDogc3RyaW5nW10gfCBcIipcIjtcbn1cblxuLyoqXG4gKiBSZXN0cmljdCBzaWduaW5nIHRvIHNwZWNpZmljIHNvdXJjZSBJUCBhZGRyZXNzZXMuXG4gKiBAZXhhbXBsZSB7XCJTb3VyY2VJcEFsbG93bGlzdFwiOiBbXCIxMC4xLjIuMy84XCIsIFwiMTY5LjI1NC4xNy4xLzE2XCJdfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZUlwQWxsb3dsaXN0UG9saWN5IHtcbiAgU291cmNlSXBBbGxvd2xpc3Q6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFJlc3RyaWN0IHRoZSBudW1iZXIgb2YgdW5zdGFrZXMgcGVyIGRheS5cbiAqIEBleGFtcGxlIHtcIk1heERhaWx5VW5zdGFrZVwiOiA1IH1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXhEYWlseVVuc3Rha2VQb2xpY3kge1xuICBNYXhEYWlseVVuc3Rha2U6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBbiBvcmdhbml6YXRpb24uXG4gKlxuICogRXh0ZW5kcyB7QGxpbmsgQ3ViZVNpZ25lckNsaWVudH0gYW5kIHByb3ZpZGVzIGEgZmV3IG9yZy1zcGVjaWZpYyBtZXRob2RzIG9uIHRvcC5cbiAqL1xuZXhwb3J0IGNsYXNzIE9yZyBleHRlbmRzIEN1YmVTaWduZXJDbGllbnQge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBvcmcgaWRcbiAgICogQGV4YW1wbGUgT3JnI2MzYjkzNzljLTRlOGMtNDIxNi1iZDBhLTY1YWNlNTNjZjk4ZlxuICAgKi9cbiAgZ2V0IGlkKCk6IE9yZ0lkIHtcbiAgICByZXR1cm4gdGhpcy5vcmdJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgb3JnYW5pemF0aW9uLlxuICAgKlxuICAgKiBTYW1lIGFzIHtAbGluayBvcmdHZXR9LlxuICAgKi9cbiAgZ2V0IGluZm8oKSB7XG4gICAgcmV0dXJuIHRoaXMub3JnR2V0LmJpbmQodGhpcyk7XG4gIH1cblxuICAvKiogSHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhlIG9yZyAqL1xuICBhc3luYyBuYW1lKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3Qgb3JnID0gYXdhaXQgdGhpcy5vcmdHZXQoKTtcbiAgICByZXR1cm4gb3JnLm5hbWUgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIEdldCBhbGwga2V5cyBpbiB0aGUgb3JnLiAqL1xuICBnZXQga2V5cygpIHtcbiAgICByZXR1cm4gdGhpcy5vcmdLZXlzLmJpbmQodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIGZvciB0aGUgb3JnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmV3IGh1bWFuLXJlYWRhYmxlIG5hbWUgZm9yIHRoZSBvcmcgKG11c3QgYmUgYWxwaGFudW1lcmljKS5cbiAgICogQGV4YW1wbGUgbXlfb3JnX25hbWVcbiAgICovXG4gIGFzeW5jIHNldE5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCEvXlthLXpBLVowLTlfXXszLDMwfSQvLnRlc3QobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk9yZyBuYW1lIG11c3QgYmUgYWxwaGFudW1lcmljIGFuZCBiZXR3ZWVuIDMgYW5kIDMwIGNoYXJhY3RlcnNcIik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMub3JnVXBkYXRlKHsgbmFtZSB9KTtcbiAgfVxuXG4gIC8qKiBJcyB0aGUgb3JnIGVuYWJsZWQ/ICovXG4gIGFzeW5jIGVuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgb3JnID0gYXdhaXQgdGhpcy5vcmdHZXQoKTtcbiAgICByZXR1cm4gb3JnLmVuYWJsZWQ7XG4gIH1cblxuICAvKiogRW5hYmxlIHRoZSBvcmcuICovXG4gIGFzeW5jIGVuYWJsZSgpIHtcbiAgICBhd2FpdCB0aGlzLm9yZ1VwZGF0ZSh7IGVuYWJsZWQ6IHRydWUgfSk7XG4gIH1cblxuICAvKiogRGlzYWJsZSB0aGUgb3JnLiAqL1xuICBhc3luYyBkaXNhYmxlKCkge1xuICAgIGF3YWl0IHRoaXMub3JnVXBkYXRlKHsgZW5hYmxlZDogZmFsc2UgfSk7XG4gIH1cblxuICAvKiogR2V0IHRoZSBwb2xpY3kgZm9yIHRoZSBvcmcuICovXG4gIGFzeW5jIHBvbGljeSgpOiBQcm9taXNlPE9yZ1BvbGljeVtdPiB7XG4gICAgY29uc3Qgb3JnID0gYXdhaXQgdGhpcy5vcmdHZXQoKTtcbiAgICByZXR1cm4gKG9yZy5wb2xpY3kgPz8gW10pIGFzIHVua25vd24gYXMgT3JnUG9saWN5W107XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBwb2xpY3kgZm9yIHRoZSBvcmcuXG4gICAqIEBwYXJhbSB7T3JnUG9saWN5W119IHBvbGljeSBUaGUgbmV3IHBvbGljeSBmb3IgdGhlIG9yZy5cbiAgICovXG4gIGFzeW5jIHNldFBvbGljeShwb2xpY3k6IE9yZ1BvbGljeVtdKSB7XG4gICAgY29uc3QgcCA9IHBvbGljeSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIG5ldmVyPltdO1xuICAgIGF3YWl0IHRoaXMub3JnVXBkYXRlKHsgcG9saWN5OiBwIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBvcmcgYXNzb2NpYXRlZCB3aXRoIGEgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHtTZXNzaW9uU3RvcmFnZX0gc3RvcmFnZSBUaGUgc2Vzc2lvblxuICAgKiBAcmV0dXJuIHtPcmd9IEFuIHtAbGluayBPcmd9IGluc3RhbmNlIGZvciB0aGUgb3JnIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24uXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgcmV0cmlldmVGcm9tU3RvcmFnZShzdG9yYWdlOiBTaWduZXJTZXNzaW9uU3RvcmFnZSk6IFByb21pc2U8T3JnPiB7XG4gICAgY29uc3Qgc2Vzc2lvbk1nciA9IGF3YWl0IFNpZ25lclNlc3Npb25NYW5hZ2VyLmxvYWRGcm9tU3RvcmFnZShzdG9yYWdlKTtcbiAgICByZXR1cm4gbmV3IE9yZyhuZXcgQ3ViZVNpZ25lckNsaWVudChzZXNzaW9uTWdyKSwgc2Vzc2lvbk1nci5vcmdJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7Q3ViZVNpZ25lckNsaWVudCB8IFNpZ25lclNlc3Npb25NYW5hZ2VyfSBjc2MgVGhlIEN1YmVTaWduZXIgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7T3JnSW5mb3wgc3RyaW5nfSBkYXRhIEVpdGhlciBvcmcgaWQgb3IgbmFtZSBvciB7QGxpbmsgT3JnSW5mb30uXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjc2M6IEN1YmVTaWduZXJDbGllbnQgfCBTaWduZXJTZXNzaW9uTWFuYWdlciwgZGF0YT86IE9yZ0luZm8gfCBzdHJpbmcpIHtcbiAgICBjb25zdCBtZ3IgPSBjc2MgaW5zdGFuY2VvZiBDdWJlU2lnbmVyQ2xpZW50ID8gY3NjLnNlc3Npb25NZ3IgOiAoY3NjIGFzIFNpZ25lclNlc3Npb25NYW5hZ2VyKTtcblxuICAgIC8vIE5PVEU6IGRhdGEgY2FuIGJlIE9yZ0luZm8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29uc1xuICAgIGNvbnN0IG9yZ0lkID0gdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgPyBkYXRhIDogZGF0YT8ub3JnX2lkO1xuICAgIHN1cGVyKG1nciwgb3JnSWQpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/** Pagination options. */
|
|
2
|
+
export interface PageOpts {
|
|
3
|
+
/** Max number of items per page. */
|
|
4
|
+
size?: number;
|
|
5
|
+
/**
|
|
6
|
+
* Starting point (i.e., 'last_evaluated_key' from the previous page).
|
|
7
|
+
* Omit to start from the beginning.
|
|
8
|
+
*/
|
|
9
|
+
start?: string;
|
|
10
|
+
/** Iterate until retrieving the entire result set. */
|
|
11
|
+
all: boolean;
|
|
12
|
+
}
|
|
13
|
+
/** Static constructors for `IPage` */
|
|
14
|
+
export declare class Page {
|
|
15
|
+
/**
|
|
16
|
+
* The default is to fetch the entire result set
|
|
17
|
+
* (by repeatedly calling the remote endpoint until all pages are retrieved).
|
|
18
|
+
*
|
|
19
|
+
* @return {PageOpts} Pagination options.
|
|
20
|
+
*/
|
|
21
|
+
static default(): PageOpts;
|
|
22
|
+
}
|
|
23
|
+
export interface PageQueryArgs {
|
|
24
|
+
/**
|
|
25
|
+
* Max number of items to return per page.
|
|
26
|
+
*
|
|
27
|
+
* The actual number of returned items may be less that this, even if there exist more
|
|
28
|
+
* data in the result set. To reliably determine if more data is left in the result set,
|
|
29
|
+
* inspect the [UnencryptedLastEvalKey] value in the response object.
|
|
30
|
+
*/
|
|
31
|
+
"page.size"?: number;
|
|
32
|
+
/**
|
|
33
|
+
* The start of the page.
|
|
34
|
+
*
|
|
35
|
+
* Omit to start from the beginning; otherwise, only specify the exact
|
|
36
|
+
* value previously returned as 'last_evaluated_key' from the same endpoint.
|
|
37
|
+
*/
|
|
38
|
+
"page.start"?: string | null;
|
|
39
|
+
}
|
|
40
|
+
export type ListFn<U> = (pageQueryArgs: PageQueryArgs) => Promise<U>;
|
|
41
|
+
export type ItemsFn<U, T> = (resp: U) => T[];
|
|
42
|
+
export type LastFn<U> = (resp: U) => string | null | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Helper class for fetching paginated results.
|
|
45
|
+
*/
|
|
46
|
+
export declare class Paginator<U, T> {
|
|
47
|
+
#private;
|
|
48
|
+
/**
|
|
49
|
+
* @param {PageOpts} pageOpts Pagination options
|
|
50
|
+
* @param {ListFn<U>} listFn Calls a remote endpoint that returns a paginated response
|
|
51
|
+
* @param {ItemsFn<U, T>} itemsFn Extracts items from the paginated response
|
|
52
|
+
* @param {LastFn<U>} lastFn Extracts the last evaluated key from the paginated response
|
|
53
|
+
*/
|
|
54
|
+
constructor(pageOpts: PageOpts, listFn: ListFn<U>, itemsFn: ItemsFn<U, T>, lastFn: LastFn<U>);
|
|
55
|
+
/**
|
|
56
|
+
* Fetches either a single page or the entire result set, depending on
|
|
57
|
+
* the `all` property of the pagination options.
|
|
58
|
+
*
|
|
59
|
+
* @return {Promise<T[]>} A single page or the entire result set.
|
|
60
|
+
*/
|
|
61
|
+
fetch(): Promise<T[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Fetches a single page of the result set from where it previously left off.
|
|
64
|
+
* Mutates self to remember where it left off.
|
|
65
|
+
*
|
|
66
|
+
* @return {Promise<T[]>} The next page of the result set.
|
|
67
|
+
*/
|
|
68
|
+
fetchPage(): Promise<T[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Fetches the entire result set starting from where it previously left off
|
|
71
|
+
* by iterating through the pages returned by the remote end.
|
|
72
|
+
*
|
|
73
|
+
* @return {Promise<T[]>} The entire result set.
|
|
74
|
+
*/
|
|
75
|
+
fetchAll(): Promise<T[]>;
|
|
76
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
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 _Paginator_listFn, _Paginator_itemsFn, _Paginator_lastFn, _Paginator_opts, _Paginator_last, _Paginator_done;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.Paginator = exports.Page = void 0;
|
|
16
|
+
/** Static constructors for `IPage` */
|
|
17
|
+
class Page {
|
|
18
|
+
/**
|
|
19
|
+
* The default is to fetch the entire result set
|
|
20
|
+
* (by repeatedly calling the remote endpoint until all pages are retrieved).
|
|
21
|
+
*
|
|
22
|
+
* @return {PageOpts} Pagination options.
|
|
23
|
+
*/
|
|
24
|
+
static default() {
|
|
25
|
+
return {
|
|
26
|
+
all: true,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.Page = Page;
|
|
31
|
+
/**
|
|
32
|
+
* Helper class for fetching paginated results.
|
|
33
|
+
*/
|
|
34
|
+
class Paginator {
|
|
35
|
+
/**
|
|
36
|
+
* @param {PageOpts} pageOpts Pagination options
|
|
37
|
+
* @param {ListFn<U>} listFn Calls a remote endpoint that returns a paginated response
|
|
38
|
+
* @param {ItemsFn<U, T>} itemsFn Extracts items from the paginated response
|
|
39
|
+
* @param {LastFn<U>} lastFn Extracts the last evaluated key from the paginated response
|
|
40
|
+
*/
|
|
41
|
+
constructor(pageOpts, listFn, itemsFn, lastFn) {
|
|
42
|
+
_Paginator_listFn.set(this, void 0);
|
|
43
|
+
_Paginator_itemsFn.set(this, void 0);
|
|
44
|
+
_Paginator_lastFn.set(this, void 0);
|
|
45
|
+
_Paginator_opts.set(this, void 0);
|
|
46
|
+
_Paginator_last.set(this, void 0);
|
|
47
|
+
_Paginator_done.set(this, void 0);
|
|
48
|
+
__classPrivateFieldSet(this, _Paginator_listFn, listFn, "f");
|
|
49
|
+
__classPrivateFieldSet(this, _Paginator_itemsFn, itemsFn, "f");
|
|
50
|
+
__classPrivateFieldSet(this, _Paginator_lastFn, lastFn, "f");
|
|
51
|
+
__classPrivateFieldSet(this, _Paginator_opts, pageOpts, "f");
|
|
52
|
+
__classPrivateFieldSet(this, _Paginator_last, pageOpts.start, "f");
|
|
53
|
+
__classPrivateFieldSet(this, _Paginator_done, false, "f");
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Fetches either a single page or the entire result set, depending on
|
|
57
|
+
* the `all` property of the pagination options.
|
|
58
|
+
*
|
|
59
|
+
* @return {Promise<T[]>} A single page or the entire result set.
|
|
60
|
+
*/
|
|
61
|
+
async fetch() {
|
|
62
|
+
return __classPrivateFieldGet(this, _Paginator_opts, "f").all ? await this.fetchAll() : await this.fetchPage();
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Fetches a single page of the result set from where it previously left off.
|
|
66
|
+
* Mutates self to remember where it left off.
|
|
67
|
+
*
|
|
68
|
+
* @return {Promise<T[]>} The next page of the result set.
|
|
69
|
+
*/
|
|
70
|
+
async fetchPage() {
|
|
71
|
+
if (__classPrivateFieldGet(this, _Paginator_done, "f")) {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
const resp = await __classPrivateFieldGet(this, _Paginator_listFn, "f").call(this, {
|
|
75
|
+
"page.size": __classPrivateFieldGet(this, _Paginator_opts, "f").size,
|
|
76
|
+
"page.start": __classPrivateFieldGet(this, _Paginator_last, "f"),
|
|
77
|
+
});
|
|
78
|
+
__classPrivateFieldSet(this, _Paginator_last, __classPrivateFieldGet(this, _Paginator_lastFn, "f").call(this, resp), "f");
|
|
79
|
+
__classPrivateFieldSet(this, _Paginator_done, !__classPrivateFieldGet(this, _Paginator_last, "f"), "f");
|
|
80
|
+
return __classPrivateFieldGet(this, _Paginator_itemsFn, "f").call(this, resp);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Fetches the entire result set starting from where it previously left off
|
|
84
|
+
* by iterating through the pages returned by the remote end.
|
|
85
|
+
*
|
|
86
|
+
* @return {Promise<T[]>} The entire result set.
|
|
87
|
+
*/
|
|
88
|
+
async fetchAll() {
|
|
89
|
+
const result = [];
|
|
90
|
+
while (!__classPrivateFieldGet(this, _Paginator_done, "f")) {
|
|
91
|
+
const items = await this.fetchPage();
|
|
92
|
+
result.push(...items);
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.Paginator = Paginator;
|
|
98
|
+
_Paginator_listFn = new WeakMap(), _Paginator_itemsFn = new WeakMap(), _Paginator_lastFn = new WeakMap(), _Paginator_opts = new WeakMap(), _Paginator_last = new WeakMap(), _Paginator_done = new WeakMap();
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhZ2luYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFhQSxzQ0FBc0M7QUFDdEMsTUFBYSxJQUFJO0lBQ2Y7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsT0FBTztRQUNaLE9BQWlCO1lBQ2YsR0FBRyxFQUFFLElBQUk7U0FDVixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBWkQsb0JBWUM7QUF5QkQ7O0dBRUc7QUFDSCxNQUFhLFNBQVM7SUFRcEI7Ozs7O09BS0c7SUFDSCxZQUFZLFFBQWtCLEVBQUUsTUFBaUIsRUFBRSxPQUFzQixFQUFFLE1BQWlCO1FBYm5GLG9DQUFtQjtRQUNuQixxQ0FBd0I7UUFDeEIsb0NBQW1CO1FBQzVCLGtDQUFnQjtRQUNoQixrQ0FBaUM7UUFDakMsa0NBQWU7UUFTYix1QkFBQSxJQUFJLHFCQUFXLE1BQU0sTUFBQSxDQUFDO1FBQ3RCLHVCQUFBLElBQUksc0JBQVksT0FBTyxNQUFBLENBQUM7UUFDeEIsdUJBQUEsSUFBSSxxQkFBVyxNQUFNLE1BQUEsQ0FBQztRQUN0Qix1QkFBQSxJQUFJLG1CQUFTLFFBQVEsTUFBQSxDQUFDO1FBQ3RCLHVCQUFBLElBQUksbUJBQVMsUUFBUSxDQUFDLEtBQUssTUFBQSxDQUFDO1FBQzVCLHVCQUFBLElBQUksbUJBQVMsS0FBSyxNQUFBLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLEtBQUs7UUFDVCxPQUFPLHVCQUFBLElBQUksdUJBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsU0FBUztRQUNiLElBQUksdUJBQUEsSUFBSSx1QkFBTSxFQUFFLENBQUM7WUFDZixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLHVCQUFBLElBQUkseUJBQVEsTUFBWixJQUFJLEVBQVM7WUFDOUIsV0FBVyxFQUFFLHVCQUFBLElBQUksdUJBQU0sQ0FBQyxJQUFJO1lBQzVCLFlBQVksRUFBRSx1QkFBQSxJQUFJLHVCQUFNO1NBQ3pCLENBQUMsQ0FBQztRQUNILHVCQUFBLElBQUksbUJBQVMsdUJBQUEsSUFBSSx5QkFBUSxNQUFaLElBQUksRUFBUyxJQUFJLENBQUMsTUFBQSxDQUFDO1FBQ2hDLHVCQUFBLElBQUksbUJBQVMsQ0FBQyx1QkFBQSxJQUFJLHVCQUFNLE1BQUEsQ0FBQztRQUN6QixPQUFPLHVCQUFBLElBQUksMEJBQVMsTUFBYixJQUFJLEVBQVUsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFFBQVE7UUFDWixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsT0FBTyxDQUFDLHVCQUFBLElBQUksdUJBQU0sRUFBRSxDQUFDO1lBQ25CLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBbkVELDhCQW1FQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBQYWdpbmF0aW9uIG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VPcHRzIHtcbiAgLyoqIE1heCBudW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UuICovXG4gIHNpemU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBTdGFydGluZyBwb2ludCAoaS5lLiwgJ2xhc3RfZXZhbHVhdGVkX2tleScgZnJvbSB0aGUgcHJldmlvdXMgcGFnZSkuXG4gICAqIE9taXQgdG8gc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgKi9cbiAgc3RhcnQ/OiBzdHJpbmc7XG4gIC8qKiBJdGVyYXRlIHVudGlsIHJldHJpZXZpbmcgdGhlIGVudGlyZSByZXN1bHQgc2V0LiAqL1xuICBhbGw6IGJvb2xlYW47XG59XG5cbi8qKiBTdGF0aWMgY29uc3RydWN0b3JzIGZvciBgSVBhZ2VgICovXG5leHBvcnQgY2xhc3MgUGFnZSB7XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBpcyB0byBmZXRjaCB0aGUgZW50aXJlIHJlc3VsdCBzZXRcbiAgICogKGJ5IHJlcGVhdGVkbHkgY2FsbGluZyB0aGUgcmVtb3RlIGVuZHBvaW50IHVudGlsIGFsbCBwYWdlcyBhcmUgcmV0cmlldmVkKS5cbiAgICpcbiAgICogQHJldHVybiB7UGFnZU9wdHN9IFBhZ2luYXRpb24gb3B0aW9ucy5cbiAgICovXG4gIHN0YXRpYyBkZWZhdWx0KCk6IFBhZ2VPcHRzIHtcbiAgICByZXR1cm4gPFBhZ2VPcHRzPntcbiAgICAgIGFsbDogdHJ1ZSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVF1ZXJ5QXJncyB7XG4gIC8qKlxuICAgKiBNYXggbnVtYmVyIG9mIGl0ZW1zIHRvIHJldHVybiBwZXIgcGFnZS5cbiAgICpcbiAgICogVGhlIGFjdHVhbCBudW1iZXIgb2YgcmV0dXJuZWQgaXRlbXMgbWF5IGJlIGxlc3MgdGhhdCB0aGlzLCBldmVuIGlmIHRoZXJlIGV4aXN0IG1vcmVcbiAgICogZGF0YSBpbiB0aGUgcmVzdWx0IHNldC4gVG8gcmVsaWFibHkgZGV0ZXJtaW5lIGlmIG1vcmUgZGF0YSBpcyBsZWZ0IGluIHRoZSByZXN1bHQgc2V0LFxuICAgKiBpbnNwZWN0IHRoZSBbVW5lbmNyeXB0ZWRMYXN0RXZhbEtleV0gdmFsdWUgaW4gdGhlIHJlc3BvbnNlIG9iamVjdC5cbiAgICovXG4gIFwicGFnZS5zaXplXCI/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFydCBvZiB0aGUgcGFnZS5cbiAgICpcbiAgICogT21pdCB0byBzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmc7IG90aGVyd2lzZSwgb25seSBzcGVjaWZ5IHRoZSBleGFjdFxuICAgKiB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGFzICdsYXN0X2V2YWx1YXRlZF9rZXknIGZyb20gdGhlIHNhbWUgZW5kcG9pbnQuXG4gICAqL1xuICBcInBhZ2Uuc3RhcnRcIj86IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIExpc3RGbjxVPiA9IChwYWdlUXVlcnlBcmdzOiBQYWdlUXVlcnlBcmdzKSA9PiBQcm9taXNlPFU+O1xuZXhwb3J0IHR5cGUgSXRlbXNGbjxVLCBUPiA9IChyZXNwOiBVKSA9PiBUW107XG5leHBvcnQgdHlwZSBMYXN0Rm48VT4gPSAocmVzcDogVSkgPT4gc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIGZldGNoaW5nIHBhZ2luYXRlZCByZXN1bHRzLlxuICovXG5leHBvcnQgY2xhc3MgUGFnaW5hdG9yPFUsIFQ+IHtcbiAgcmVhZG9ubHkgI2xpc3RGbjogTGlzdEZuPFU+O1xuICByZWFkb25seSAjaXRlbXNGbjogSXRlbXNGbjxVLCBUPjtcbiAgcmVhZG9ubHkgI2xhc3RGbjogTGFzdEZuPFU+O1xuICAjb3B0czogUGFnZU9wdHM7XG4gICNsYXN0OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAjZG9uZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHBhcmFtIHtQYWdlT3B0c30gcGFnZU9wdHMgUGFnaW5hdGlvbiBvcHRpb25zXG4gICAqIEBwYXJhbSB7TGlzdEZuPFU+fSBsaXN0Rm4gQ2FsbHMgYSByZW1vdGUgZW5kcG9pbnQgdGhhdCByZXR1cm5zIGEgcGFnaW5hdGVkIHJlc3BvbnNlXG4gICAqIEBwYXJhbSB7SXRlbXNGbjxVLCBUPn0gaXRlbXNGbiBFeHRyYWN0cyBpdGVtcyBmcm9tIHRoZSBwYWdpbmF0ZWQgcmVzcG9uc2VcbiAgICogQHBhcmFtIHtMYXN0Rm48VT59IGxhc3RGbiBFeHRyYWN0cyB0aGUgbGFzdCBldmFsdWF0ZWQga2V5IGZyb20gdGhlIHBhZ2luYXRlZCByZXNwb25zZVxuICAgKi9cbiAgY29uc3RydWN0b3IocGFnZU9wdHM6IFBhZ2VPcHRzLCBsaXN0Rm46IExpc3RGbjxVPiwgaXRlbXNGbjogSXRlbXNGbjxVLCBUPiwgbGFzdEZuOiBMYXN0Rm48VT4pIHtcbiAgICB0aGlzLiNsaXN0Rm4gPSBsaXN0Rm47XG4gICAgdGhpcy4jaXRlbXNGbiA9IGl0ZW1zRm47XG4gICAgdGhpcy4jbGFzdEZuID0gbGFzdEZuO1xuICAgIHRoaXMuI29wdHMgPSBwYWdlT3B0cztcbiAgICB0aGlzLiNsYXN0ID0gcGFnZU9wdHMuc3RhcnQ7XG4gICAgdGhpcy4jZG9uZSA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgZWl0aGVyIGEgc2luZ2xlIHBhZ2Ugb3IgdGhlIGVudGlyZSByZXN1bHQgc2V0LCBkZXBlbmRpbmcgb25cbiAgICogdGhlIGBhbGxgIHByb3BlcnR5IG9mIHRoZSBwYWdpbmF0aW9uIG9wdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VFtdPn0gQSBzaW5nbGUgcGFnZSBvciB0aGUgZW50aXJlIHJlc3VsdCBzZXQuXG4gICAqL1xuICBhc3luYyBmZXRjaCgpOiBQcm9taXNlPFRbXT4ge1xuICAgIHJldHVybiB0aGlzLiNvcHRzLmFsbCA/IGF3YWl0IHRoaXMuZmV0Y2hBbGwoKSA6IGF3YWl0IHRoaXMuZmV0Y2hQYWdlKCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhIHNpbmdsZSBwYWdlIG9mIHRoZSByZXN1bHQgc2V0IGZyb20gd2hlcmUgaXQgcHJldmlvdXNseSBsZWZ0IG9mZi5cbiAgICogTXV0YXRlcyBzZWxmIHRvIHJlbWVtYmVyIHdoZXJlIGl0IGxlZnQgb2ZmLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFRbXT59IFRoZSBuZXh0IHBhZ2Ugb2YgdGhlIHJlc3VsdCBzZXQuXG4gICAqL1xuICBhc3luYyBmZXRjaFBhZ2UoKTogUHJvbWlzZTxUW10+IHtcbiAgICBpZiAodGhpcy4jZG9uZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLiNsaXN0Rm4oe1xuICAgICAgXCJwYWdlLnNpemVcIjogdGhpcy4jb3B0cy5zaXplLFxuICAgICAgXCJwYWdlLnN0YXJ0XCI6IHRoaXMuI2xhc3QsXG4gICAgfSk7XG4gICAgdGhpcy4jbGFzdCA9IHRoaXMuI2xhc3RGbihyZXNwKTtcbiAgICB0aGlzLiNkb25lID0gIXRoaXMuI2xhc3Q7XG4gICAgcmV0dXJuIHRoaXMuI2l0ZW1zRm4ocmVzcCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgZW50aXJlIHJlc3VsdCBzZXQgc3RhcnRpbmcgZnJvbSB3aGVyZSBpdCBwcmV2aW91c2x5IGxlZnQgb2ZmXG4gICAqIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBwYWdlcyByZXR1cm5lZCBieSB0aGUgcmVtb3RlIGVuZC5cbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZTxUW10+fSBUaGUgZW50aXJlIHJlc3VsdCBzZXQuXG4gICAqL1xuICBhc3luYyBmZXRjaEFsbCgpOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIHdoaWxlICghdGhpcy4jZG9uZSkge1xuICAgICAgY29uc3QgaXRlbXMgPSBhd2FpdCB0aGlzLmZldGNoUGFnZSgpO1xuICAgICAgcmVzdWx0LnB1c2goLi4uaXRlbXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { CubeSignerClient, SignerSession } from ".";
|
|
2
|
+
import { MfaReceipt } from "./mfa";
|
|
3
|
+
import { AcceptedResponse, NewSessionResponse } from "./schema_types";
|
|
4
|
+
/**
|
|
5
|
+
* Response type, which can be either a value of type {@link U}
|
|
6
|
+
* or {@link AcceptedResponse} (status code 202) which requires MFA.
|
|
7
|
+
*/
|
|
8
|
+
export type Response<U> = U | AcceptedResponse;
|
|
9
|
+
/**
|
|
10
|
+
* Request function which optionally takes additional headers
|
|
11
|
+
* (which, for example, can be used to attach an MFA receipt).
|
|
12
|
+
*/
|
|
13
|
+
export type RequestFn<U> = (headers?: HeadersInit) => Promise<Response<U>>;
|
|
14
|
+
/**
|
|
15
|
+
* Map function occasionally used to map a response from the API into a higher-level type.
|
|
16
|
+
*/
|
|
17
|
+
export type MapFn<U, V> = (u: U) => V;
|
|
18
|
+
/**
|
|
19
|
+
* Take a {@link Response<U>} and a {@link MapFn<U, V>} function and return
|
|
20
|
+
* a {@link Response<V>} that maps the value of the original response when its status code is 200.
|
|
21
|
+
*
|
|
22
|
+
* @param {Response<U>} resp Original response
|
|
23
|
+
* @param {Map<U, V>} mapFn Map to apply to the response value when its status code is 200.
|
|
24
|
+
* @return {Response<V>} Response whose value for status code 200 is mapped from U to V
|
|
25
|
+
*/
|
|
26
|
+
export declare function mapResponse<U, V>(resp: Response<U>, mapFn: MapFn<U, V>): Response<V>;
|
|
27
|
+
export interface MfaRequired {
|
|
28
|
+
/** Org id */
|
|
29
|
+
org_id: string;
|
|
30
|
+
/** MFA request id */
|
|
31
|
+
id: string;
|
|
32
|
+
/** Optional MFA session */
|
|
33
|
+
session?: NewSessionResponse | null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A response of a CubeSigner request.
|
|
37
|
+
*/
|
|
38
|
+
export declare class CubeSignerResponse<U> {
|
|
39
|
+
#private;
|
|
40
|
+
/** @return {string} The MFA id associated with this request (if any) */
|
|
41
|
+
mfaId(): string;
|
|
42
|
+
/** @return {boolean} True if this request requires an MFA approval */
|
|
43
|
+
requiresMfa(): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Return session information to use for any MFA approval requests (if any was included in the response).
|
|
46
|
+
* @return {ClientSessionInfo | undefined}
|
|
47
|
+
*/
|
|
48
|
+
mfaSessionInfo(): NewSessionResponse | undefined;
|
|
49
|
+
/** @return {U} The response data, if no MFA is required */
|
|
50
|
+
data(): U;
|
|
51
|
+
/**
|
|
52
|
+
* Approve the MFA request using a given session and a TOTP code.
|
|
53
|
+
*
|
|
54
|
+
* @param {SignerSession} session Signer session to use
|
|
55
|
+
* @param {string} code 6-digit TOTP code
|
|
56
|
+
* @return {CubeSignerResponse<U>} The result of signing with the approval
|
|
57
|
+
*/
|
|
58
|
+
approveTotp(session: SignerSession, code: string): Promise<CubeSignerResponse<U>>;
|
|
59
|
+
/**
|
|
60
|
+
* Reject the MFA request using a given session and a TOTP code.
|
|
61
|
+
*
|
|
62
|
+
* @param {SignerSession} session Signer session to use
|
|
63
|
+
* @param {string} code 6-digit TOTP code
|
|
64
|
+
*/
|
|
65
|
+
rejectTotp(session: SignerSession, code: string): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Approve the MFA request using a given {@link CubeSignerClient} instance (i.e., its session).
|
|
68
|
+
*
|
|
69
|
+
* @param {CubeSignerClient} cs CubeSigner whose session to use
|
|
70
|
+
* @return {CubeSignerResponse<U>} The result of signing with the approval
|
|
71
|
+
*/
|
|
72
|
+
approve(cs: CubeSignerClient): Promise<CubeSignerResponse<U>>;
|
|
73
|
+
/**
|
|
74
|
+
* Reject the MFA request using a given {@link CubeSignerClient} instance (i.e., its session).
|
|
75
|
+
*
|
|
76
|
+
* @param {CubeSignerClient} cs CubeSigner client whose session to use
|
|
77
|
+
*/
|
|
78
|
+
reject(cs: CubeSignerClient): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Resubmits the request with a given MFA receipt attached.
|
|
81
|
+
*
|
|
82
|
+
* @param {MfaReceipt} mfaReceipt The MFA receipt
|
|
83
|
+
* @return {Promise<CubeSignerResponse<U>>} The result of signing after MFA approval
|
|
84
|
+
*/
|
|
85
|
+
signWithMfaApproval(mfaReceipt: MfaReceipt): Promise<CubeSignerResponse<U>>;
|
|
86
|
+
/**
|
|
87
|
+
* Constructor.
|
|
88
|
+
*
|
|
89
|
+
* @param {RequestFn} requestFn
|
|
90
|
+
* The signing function that this response is from.
|
|
91
|
+
* This argument is used to resend requests with different headers if needed.
|
|
92
|
+
* @param {U | AcceptedResponse} resp The response as returned by the OpenAPI client.
|
|
93
|
+
* @internal
|
|
94
|
+
*/
|
|
95
|
+
constructor(requestFn: RequestFn<U>, resp: U | AcceptedResponse);
|
|
96
|
+
/**
|
|
97
|
+
* Static constructor.
|
|
98
|
+
* @param {RequestFn} requestFn
|
|
99
|
+
* The request function that this response is from.
|
|
100
|
+
* This argument is used to resend requests with different headers if needed.
|
|
101
|
+
* @param {MfaReceipt} mfaReceipt Optional MFA receipt
|
|
102
|
+
* @return {Promise<CubeSignerResponse<U>>} New instance of this class.
|
|
103
|
+
* @internal
|
|
104
|
+
*/
|
|
105
|
+
static create<U>(requestFn: RequestFn<U>, mfaReceipt?: MfaReceipt): Promise<CubeSignerResponse<U>>;
|
|
106
|
+
/**
|
|
107
|
+
* Return HTTP headers containing a given MFA receipt.
|
|
108
|
+
*
|
|
109
|
+
* @param {MfaReceipt} mfaReceipt MFA receipt
|
|
110
|
+
* @return {HeadersInit} Headers including that receipt
|
|
111
|
+
* @internal
|
|
112
|
+
*/
|
|
113
|
+
static getMfaHeaders(mfaReceipt?: MfaReceipt): HeadersInit | undefined;
|
|
114
|
+
}
|