@cubist-labs/cubesigner-sdk-fs-storage 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,8 @@
1
+ # Filesystem storage implementation for CubeSigner SDK
2
+
3
+ This package provides a filesystem-backed implementation
4
+ of the `SessionStorage` interface from the CubeSigner SDK.
5
+
6
+ For more information, check out the
7
+ [@cubist-labs/cubesigner-sdk](https://www.npmjs.com/package/@cubist-labs/cubesigner-sdk)
8
+ NPM package.
@@ -0,0 +1,21 @@
1
+ import { SessionStorage } from "@cubist-labs/cubesigner-sdk";
2
+ /** Stores session information in a JSON file */
3
+ export declare class JsonFileSessionStorage<U> implements SessionStorage<U> {
4
+ #private;
5
+ /**
6
+ * Store session information.
7
+ * @param {U} data The session information to store
8
+ * @return {Promise<void>}
9
+ */
10
+ save(data: U): Promise<void>;
11
+ /**
12
+ * Retrieve session information.
13
+ * @return {Promise<U>} The session information
14
+ */
15
+ retrieve(): Promise<U>;
16
+ /**
17
+ * Constructor.
18
+ * @param {string} filePath The file path to use for storage
19
+ */
20
+ constructor(filePath: string);
21
+ }
@@ -0,0 +1,45 @@
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 _JsonFileSessionStorage_filePath;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.JsonFileSessionStorage = void 0;
16
+ const fs_1 = require("fs");
17
+ /** Stores session information in a JSON file */
18
+ class JsonFileSessionStorage {
19
+ /**
20
+ * Store session information.
21
+ * @param {U} data The session information to store
22
+ * @return {Promise<void>}
23
+ */
24
+ async save(data) {
25
+ await fs_1.promises.writeFile(__classPrivateFieldGet(this, _JsonFileSessionStorage_filePath, "f"), JSON.stringify(data), "utf-8");
26
+ }
27
+ /**
28
+ * Retrieve session information.
29
+ * @return {Promise<U>} The session information
30
+ */
31
+ async retrieve() {
32
+ return JSON.parse(await fs_1.promises.readFile(__classPrivateFieldGet(this, _JsonFileSessionStorage_filePath, "f"), "utf-8"));
33
+ }
34
+ /**
35
+ * Constructor.
36
+ * @param {string} filePath The file path to use for storage
37
+ */
38
+ constructor(filePath) {
39
+ _JsonFileSessionStorage_filePath.set(this, void 0);
40
+ __classPrivateFieldSet(this, _JsonFileSessionStorage_filePath, filePath, "f");
41
+ }
42
+ }
43
+ exports.JsonFileSessionStorage = JsonFileSessionStorage;
44
+ _JsonFileSessionStorage_filePath = new WeakMap();
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZV9zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZpbGVfc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFDQSwyQkFBb0M7QUFFcEMsZ0RBQWdEO0FBQ2hELE1BQWEsc0JBQXNCO0lBR2pDOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQU87UUFDaEIsTUFBTSxhQUFFLENBQUMsU0FBUyxDQUFDLHVCQUFBLElBQUksd0NBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsUUFBUTtRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLGFBQUUsQ0FBQyxRQUFRLENBQUMsdUJBQUEsSUFBSSx3Q0FBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksUUFBZ0I7UUF2Qm5CLG1EQUFrQjtRQXdCekIsdUJBQUEsSUFBSSxvQ0FBYSxRQUFRLE1BQUEsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUEzQkQsd0RBMkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiQGN1YmlzdC1sYWJzL2N1YmVzaWduZXItc2RrXCI7XG5pbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gXCJmc1wiO1xuXG4vKiogU3RvcmVzIHNlc3Npb24gaW5mb3JtYXRpb24gaW4gYSBKU09OIGZpbGUgKi9cbmV4cG9ydCBjbGFzcyBKc29uRmlsZVNlc3Npb25TdG9yYWdlPFU+IGltcGxlbWVudHMgU2Vzc2lvblN0b3JhZ2U8VT4ge1xuICByZWFkb25seSAjZmlsZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogU3RvcmUgc2Vzc2lvbiBpbmZvcm1hdGlvbi5cbiAgICogQHBhcmFtIHtVfSBkYXRhIFRoZSBzZXNzaW9uIGluZm9ybWF0aW9uIHRvIHN0b3JlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBzYXZlKGRhdGE6IFUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUodGhpcy4jZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KGRhdGEpLCBcInV0Zi04XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHNlc3Npb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VT59IFRoZSBzZXNzaW9uIGluZm9ybWF0aW9uXG4gICAqL1xuICBhc3luYyByZXRyaWV2ZSgpOiBQcm9taXNlPFU+IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLiNmaWxlUGF0aCwgXCJ1dGYtOFwiKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCBUaGUgZmlsZSBwYXRoIHRvIHVzZSBmb3Igc3RvcmFnZVxuICAgKi9cbiAgY29uc3RydWN0b3IoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuI2ZpbGVQYXRoID0gZmlsZVBhdGg7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,25 @@
1
+ import { CubeSignerClient, SignerSession, SignerSessionStorage } from "@cubist-labs/cubesigner-sdk";
2
+ /** Session storage */
3
+ export { JsonFileSessionStorage } from "./file_storage";
4
+ /** Directory where CubeSigner stores config files. */
5
+ export declare const CONFIG_DIR: string;
6
+ /** Default file path where the management session token is stored. */
7
+ export declare const MANAGEMENT_SESSION_PATH: string;
8
+ /** Default file path where the signer session token is stored. */
9
+ export declare const SIGNER_SESSION_PATH: string;
10
+ /**
11
+ * @return {SignerSessionStorage} Storage pointing to the default management session file on disk.
12
+ */
13
+ export declare function defaultManagementSessionStorage(): SignerSessionStorage;
14
+ /**
15
+ * @return {Promise<CubeSignerClient>} Existing management session from the default file on disk.
16
+ */
17
+ export declare function loadManagementSession(): Promise<CubeSignerClient>;
18
+ /**
19
+ * @return {SignerSessionStorage} Storage pointing to the default signer session file on disk.
20
+ */
21
+ export declare function defaultSignerSessionStorage(): SignerSessionStorage;
22
+ /**
23
+ * @return {Promise<SignerSession>} Existing signer session from a default file on disk.
24
+ */
25
+ export declare function loadSignerSession(): Promise<SignerSession>;
package/dist/index.js ADDED
@@ -0,0 +1,57 @@
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.loadSignerSession = exports.defaultSignerSessionStorage = exports.loadManagementSession = exports.defaultManagementSessionStorage = exports.SIGNER_SESSION_PATH = exports.MANAGEMENT_SESSION_PATH = exports.CONFIG_DIR = exports.JsonFileSessionStorage = void 0;
7
+ const cubesigner_sdk_1 = require("@cubist-labs/cubesigner-sdk");
8
+ const file_storage_1 = require("./file_storage");
9
+ const path_1 = __importDefault(require("path"));
10
+ /** Session storage */
11
+ var file_storage_2 = require("./file_storage");
12
+ Object.defineProperty(exports, "JsonFileSessionStorage", { enumerable: true, get: function () { return file_storage_2.JsonFileSessionStorage; } });
13
+ /**
14
+ * Directory where CubeSigner stores config files.
15
+ * @return {string} Config dir
16
+ */
17
+ function configDir() {
18
+ const configDir = process.platform === "darwin"
19
+ ? `${process.env.HOME}/Library/Application Support`
20
+ : `${process.env.HOME}/.config`;
21
+ return path_1.default.join(configDir, "cubesigner");
22
+ }
23
+ /** Directory where CubeSigner stores config files. */
24
+ exports.CONFIG_DIR = configDir();
25
+ /** Default file path where the management session token is stored. */
26
+ exports.MANAGEMENT_SESSION_PATH = path_1.default.join(exports.CONFIG_DIR, "management-session.json");
27
+ /** Default file path where the signer session token is stored. */
28
+ exports.SIGNER_SESSION_PATH = path_1.default.join(exports.CONFIG_DIR, "signer-session.json");
29
+ /**
30
+ * @return {SignerSessionStorage} Storage pointing to the default management session file on disk.
31
+ */
32
+ function defaultManagementSessionStorage() {
33
+ return new file_storage_1.JsonFileSessionStorage(exports.MANAGEMENT_SESSION_PATH);
34
+ }
35
+ exports.defaultManagementSessionStorage = defaultManagementSessionStorage;
36
+ /**
37
+ * @return {Promise<CubeSignerClient>} Existing management session from the default file on disk.
38
+ */
39
+ async function loadManagementSession() {
40
+ return await cubesigner_sdk_1.CubeSignerClient.loadManagementSession(defaultManagementSessionStorage());
41
+ }
42
+ exports.loadManagementSession = loadManagementSession;
43
+ /**
44
+ * @return {SignerSessionStorage} Storage pointing to the default signer session file on disk.
45
+ */
46
+ function defaultSignerSessionStorage() {
47
+ return new file_storage_1.JsonFileSessionStorage(exports.SIGNER_SESSION_PATH);
48
+ }
49
+ exports.defaultSignerSessionStorage = defaultSignerSessionStorage;
50
+ /**
51
+ * @return {Promise<SignerSession>} Existing signer session from a default file on disk.
52
+ */
53
+ async function loadSignerSession() {
54
+ return await cubesigner_sdk_1.SignerSession.loadSignerSession(defaultSignerSessionStorage());
55
+ }
56
+ exports.loadSignerSession = loadSignerSession;
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0VBQW9HO0FBQ3BHLGlEQUF3RDtBQUN4RCxnREFBd0I7QUFFeEIsc0JBQXNCO0FBQ3RCLCtDQUF3RDtBQUEvQyxzSEFBQSxzQkFBc0IsT0FBQTtBQUUvQjs7O0dBR0c7QUFDSCxTQUFTLFNBQVM7SUFDaEIsTUFBTSxTQUFTLEdBQ2IsT0FBTyxDQUFDLFFBQVEsS0FBSyxRQUFRO1FBQzNCLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSw4QkFBOEI7UUFDbkQsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQztJQUNwQyxPQUFPLGNBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRCxzREFBc0Q7QUFDekMsUUFBQSxVQUFVLEdBQUcsU0FBUyxFQUFFLENBQUM7QUFFdEMsc0VBQXNFO0FBQ3pELFFBQUEsdUJBQXVCLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxrQkFBVSxFQUFFLHlCQUF5QixDQUFDLENBQUM7QUFFeEYsa0VBQWtFO0FBQ3JELFFBQUEsbUJBQW1CLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxrQkFBVSxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFFaEY7O0dBRUc7QUFDSCxTQUFnQiwrQkFBK0I7SUFDN0MsT0FBTyxJQUFJLHFDQUFzQixDQUFDLCtCQUF1QixDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUZELDBFQUVDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUscUJBQXFCO0lBQ3pDLE9BQU8sTUFBTSxpQ0FBZ0IsQ0FBQyxxQkFBcUIsQ0FBQywrQkFBK0IsRUFBRSxDQUFDLENBQUM7QUFDekYsQ0FBQztBQUZELHNEQUVDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQiwyQkFBMkI7SUFDekMsT0FBTyxJQUFJLHFDQUFzQixDQUFDLDJCQUFtQixDQUFDLENBQUM7QUFDekQsQ0FBQztBQUZELGtFQUVDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsaUJBQWlCO0lBQ3JDLE9BQU8sTUFBTSw4QkFBYSxDQUFDLGlCQUFpQixDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRkQsOENBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdWJlU2lnbmVyQ2xpZW50LCBTaWduZXJTZXNzaW9uLCBTaWduZXJTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCJAY3ViaXN0LWxhYnMvY3ViZXNpZ25lci1zZGtcIjtcbmltcG9ydCB7IEpzb25GaWxlU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi9maWxlX3N0b3JhZ2VcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbi8qKiBTZXNzaW9uIHN0b3JhZ2UgKi9cbmV4cG9ydCB7IEpzb25GaWxlU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi9maWxlX3N0b3JhZ2VcIjtcblxuLyoqXG4gKiBEaXJlY3Rvcnkgd2hlcmUgQ3ViZVNpZ25lciBzdG9yZXMgY29uZmlnIGZpbGVzLlxuICogQHJldHVybiB7c3RyaW5nfSBDb25maWcgZGlyXG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ0RpcigpOiBzdHJpbmcge1xuICBjb25zdCBjb25maWdEaXIgPVxuICAgIHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCJcbiAgICAgID8gYCR7cHJvY2Vzcy5lbnYuSE9NRX0vTGlicmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0YFxuICAgICAgOiBgJHtwcm9jZXNzLmVudi5IT01FfS8uY29uZmlnYDtcbiAgcmV0dXJuIHBhdGguam9pbihjb25maWdEaXIsIFwiY3ViZXNpZ25lclwiKTtcbn1cblxuLyoqIERpcmVjdG9yeSB3aGVyZSBDdWJlU2lnbmVyIHN0b3JlcyBjb25maWcgZmlsZXMuICovXG5leHBvcnQgY29uc3QgQ09ORklHX0RJUiA9IGNvbmZpZ0RpcigpO1xuXG4vKiogRGVmYXVsdCBmaWxlIHBhdGggd2hlcmUgdGhlIG1hbmFnZW1lbnQgc2Vzc2lvbiB0b2tlbiBpcyBzdG9yZWQuICovXG5leHBvcnQgY29uc3QgTUFOQUdFTUVOVF9TRVNTSU9OX1BBVEggPSBwYXRoLmpvaW4oQ09ORklHX0RJUiwgXCJtYW5hZ2VtZW50LXNlc3Npb24uanNvblwiKTtcblxuLyoqIERlZmF1bHQgZmlsZSBwYXRoIHdoZXJlIHRoZSBzaWduZXIgc2Vzc2lvbiB0b2tlbiBpcyBzdG9yZWQuICovXG5leHBvcnQgY29uc3QgU0lHTkVSX1NFU1NJT05fUEFUSCA9IHBhdGguam9pbihDT05GSUdfRElSLCBcInNpZ25lci1zZXNzaW9uLmpzb25cIik7XG5cbi8qKlxuICogQHJldHVybiB7U2lnbmVyU2Vzc2lvblN0b3JhZ2V9IFN0b3JhZ2UgcG9pbnRpbmcgdG8gdGhlIGRlZmF1bHQgbWFuYWdlbWVudCBzZXNzaW9uIGZpbGUgb24gZGlzay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRNYW5hZ2VtZW50U2Vzc2lvblN0b3JhZ2UoKTogU2lnbmVyU2Vzc2lvblN0b3JhZ2Uge1xuICByZXR1cm4gbmV3IEpzb25GaWxlU2Vzc2lvblN0b3JhZ2UoTUFOQUdFTUVOVF9TRVNTSU9OX1BBVEgpO1xufVxuXG4vKipcbiAqIEByZXR1cm4ge1Byb21pc2U8Q3ViZVNpZ25lckNsaWVudD59IEV4aXN0aW5nIG1hbmFnZW1lbnQgc2Vzc2lvbiBmcm9tIHRoZSBkZWZhdWx0IGZpbGUgb24gZGlzay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRNYW5hZ2VtZW50U2Vzc2lvbigpOiBQcm9taXNlPEN1YmVTaWduZXJDbGllbnQ+IHtcbiAgcmV0dXJuIGF3YWl0IEN1YmVTaWduZXJDbGllbnQubG9hZE1hbmFnZW1lbnRTZXNzaW9uKGRlZmF1bHRNYW5hZ2VtZW50U2Vzc2lvblN0b3JhZ2UoKSk7XG59XG5cbi8qKlxuICogQHJldHVybiB7U2lnbmVyU2Vzc2lvblN0b3JhZ2V9IFN0b3JhZ2UgcG9pbnRpbmcgdG8gdGhlIGRlZmF1bHQgc2lnbmVyIHNlc3Npb24gZmlsZSBvbiBkaXNrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdFNpZ25lclNlc3Npb25TdG9yYWdlKCk6IFNpZ25lclNlc3Npb25TdG9yYWdlIHtcbiAgcmV0dXJuIG5ldyBKc29uRmlsZVNlc3Npb25TdG9yYWdlKFNJR05FUl9TRVNTSU9OX1BBVEgpO1xufVxuXG4vKipcbiAqIEByZXR1cm4ge1Byb21pc2U8U2lnbmVyU2Vzc2lvbj59IEV4aXN0aW5nIHNpZ25lciBzZXNzaW9uIGZyb20gYSBkZWZhdWx0IGZpbGUgb24gZGlzay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRTaWduZXJTZXNzaW9uKCk6IFByb21pc2U8U2lnbmVyU2Vzc2lvbj4ge1xuICByZXR1cm4gYXdhaXQgU2lnbmVyU2Vzc2lvbi5sb2FkU2lnbmVyU2Vzc2lvbihkZWZhdWx0U2lnbmVyU2Vzc2lvblN0b3JhZ2UoKSk7XG59XG4iXX0=
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@cubist-labs/cubesigner-sdk-fs-storage",
3
+ "version": "0.3.1",
4
+ "description": "Filesystem storage implementation for CubeSigner SDK",
5
+ "license": "MIT OR Apache-2.0",
6
+ "author": "Cubist, Inc.",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "files": [
10
+ "tsconfig.json",
11
+ "src/**",
12
+ "dist/**",
13
+ "../../NOTICE",
14
+ "../../LICENSE-APACHE",
15
+ "../../LICENSE-MIT"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "prepack": "tsc",
20
+ "test": "jest --maxWorkers=1"
21
+ },
22
+ "peerDependencies": {
23
+ "@cubist-labs/cubesigner-sdk": "^0.3.1"
24
+ },
25
+ "directories": {
26
+ "test": "test"
27
+ }
28
+ }
@@ -0,0 +1,32 @@
1
+ import { SessionStorage } from "@cubist-labs/cubesigner-sdk";
2
+ import { promises as fs } from "fs";
3
+
4
+ /** Stores session information in a JSON file */
5
+ export class JsonFileSessionStorage<U> implements SessionStorage<U> {
6
+ readonly #filePath: string;
7
+
8
+ /**
9
+ * Store session information.
10
+ * @param {U} data The session information to store
11
+ * @return {Promise<void>}
12
+ */
13
+ async save(data: U): Promise<void> {
14
+ await fs.writeFile(this.#filePath, JSON.stringify(data), "utf-8");
15
+ }
16
+
17
+ /**
18
+ * Retrieve session information.
19
+ * @return {Promise<U>} The session information
20
+ */
21
+ async retrieve(): Promise<U> {
22
+ return JSON.parse(await fs.readFile(this.#filePath, "utf-8"));
23
+ }
24
+
25
+ /**
26
+ * Constructor.
27
+ * @param {string} filePath The file path to use for storage
28
+ */
29
+ constructor(filePath: string) {
30
+ this.#filePath = filePath;
31
+ }
32
+ }
package/src/index.ts ADDED
@@ -0,0 +1,55 @@
1
+ import { CubeSignerClient, SignerSession, SignerSessionStorage } from "@cubist-labs/cubesigner-sdk";
2
+ import { JsonFileSessionStorage } from "./file_storage";
3
+ import path from "path";
4
+
5
+ /** Session storage */
6
+ export { JsonFileSessionStorage } from "./file_storage";
7
+
8
+ /**
9
+ * Directory where CubeSigner stores config files.
10
+ * @return {string} Config dir
11
+ */
12
+ function configDir(): string {
13
+ const configDir =
14
+ process.platform === "darwin"
15
+ ? `${process.env.HOME}/Library/Application Support`
16
+ : `${process.env.HOME}/.config`;
17
+ return path.join(configDir, "cubesigner");
18
+ }
19
+
20
+ /** Directory where CubeSigner stores config files. */
21
+ export const CONFIG_DIR = configDir();
22
+
23
+ /** Default file path where the management session token is stored. */
24
+ export const MANAGEMENT_SESSION_PATH = path.join(CONFIG_DIR, "management-session.json");
25
+
26
+ /** Default file path where the signer session token is stored. */
27
+ export const SIGNER_SESSION_PATH = path.join(CONFIG_DIR, "signer-session.json");
28
+
29
+ /**
30
+ * @return {SignerSessionStorage} Storage pointing to the default management session file on disk.
31
+ */
32
+ export function defaultManagementSessionStorage(): SignerSessionStorage {
33
+ return new JsonFileSessionStorage(MANAGEMENT_SESSION_PATH);
34
+ }
35
+
36
+ /**
37
+ * @return {Promise<CubeSignerClient>} Existing management session from the default file on disk.
38
+ */
39
+ export async function loadManagementSession(): Promise<CubeSignerClient> {
40
+ return await CubeSignerClient.loadManagementSession(defaultManagementSessionStorage());
41
+ }
42
+
43
+ /**
44
+ * @return {SignerSessionStorage} Storage pointing to the default signer session file on disk.
45
+ */
46
+ export function defaultSignerSessionStorage(): SignerSessionStorage {
47
+ return new JsonFileSessionStorage(SIGNER_SESSION_PATH);
48
+ }
49
+
50
+ /**
51
+ * @return {Promise<SignerSession>} Existing signer session from a default file on disk.
52
+ */
53
+ export async function loadSignerSession(): Promise<SignerSession> {
54
+ return await SignerSession.loadSignerSession(defaultSignerSessionStorage());
55
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "module": "Node16",
5
+ "moduleResolution": "node16",
6
+ "outDir": "./dist"
7
+ },
8
+ "typedocOptions": {
9
+ "out": "./docs",
10
+ "entryPoints": ["src/index.ts"]
11
+ },
12
+ "exclude": ["node_modules", "dist"],
13
+ "include": ["src/**/*.ts"]
14
+ }