← Files RivetARCHIVED FILE
node_modules/rivet-design/dist/cli/editorSession.js
2.36 KB · Nov 7, 2026 · 13:16 UTC
"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.mapSHA-256: 2a21b54eafed05fb1d3f6f6104212172d4bbbd0d69bc18b9d20287fe13615166