← Files RivetARCHIVED FILE

node_modules/rivet-design/dist/cli/editorSession.js

2.36 KB · Nov 7, 2026 · 13:16 UTC

↓ Download file

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.removeEditorSession = exports.readEditorAccessToken = exports.writeEditorSession = exports.createEditorAccessToken = void 0;
const crypto_1 = require("crypto");
const fs_1 = require("fs");
const os_1 = __importDefault(require("os"));
const path_1 = __importDefault(require("path"));
const zod_1 = require("zod");
const writeFileAtomic_1 = require("../utils/writeFileAtomic");
const EDITOR_ACCESS_TOKEN_BYTES = 32;
const EditorSessionSchema = zod_1.z.object({
    pid: zod_1.z.number().int().positive(),
    port: zod_1.z.number().int().positive(),
    projectPath: zod_1.z.string(),
    startedAt: zod_1.z.string(),
    token: zod_1.z.string().regex(/^[A-Za-z0-9_-]{43}$/),
});
const editorSessionDirectory = () => path_1.default.join(os_1.default.homedir(), '.rivet', 'editor-sessions');
const editorSessionPath = (owner) => path_1.default.join(editorSessionDirectory(), `${owner.pid}-${owner.port}.json`);
const createEditorAccessToken = () => (0, crypto_1.randomBytes)(EDITOR_ACCESS_TOKEN_BYTES).toString('base64url');
exports.createEditorAccessToken = createEditorAccessToken;
const writeEditorSession = (session) => {
    (0, fs_1.mkdirSync)(editorSessionDirectory(), { recursive: true, mode: 0o700 });
    (0, writeFileAtomic_1.writeFileAtomicSync)(editorSessionPath(session), JSON.stringify(EditorSessionSchema.parse(session)), { mode: 0o600 });
};
exports.writeEditorSession = writeEditorSession;
const readEditorAccessToken = (owner) => {
    try {
        const session = EditorSessionSchema.parse(JSON.parse((0, fs_1.readFileSync)(editorSessionPath(owner), 'utf8')));
        return session.pid === owner.pid &&
            session.port === owner.port &&
            session.projectPath === owner.projectPath &&
            session.startedAt === owner.startedAt
            ? session.token
            : null;
    }
    catch {
        return null;
    }
};
exports.readEditorAccessToken = readEditorAccessToken;
const removeEditorSession = (owner, token) => {
    if ((0, exports.readEditorAccessToken)(owner) === token)
        (0, fs_1.rmSync)(editorSessionPath(owner), { force: true });
};
exports.removeEditorSession = removeEditorSession;
//# sourceMappingURL=editorSession.js.map

SHA-256: 2a21b54eafed05fb1d3f6f6104212172d4bbbd0d69bc18b9d20287fe13615166