1import * as NodeServices from "@effect/platform-node/NodeServices";
2import { assert, it } from "@effect/vitest";
3import * as Effect from "effect/Effect";
4import * as FileSystem from "effect/FileSystem";
5import * as Layer from "effect/Layer";
6import * as Path from "effect/Path";
7
8import * as DesktopConfig from "../../app/DesktopConfig.ts";
9import * as DesktopEnvironment from "../../app/DesktopEnvironment.ts";
10import * as LinuxBrowserSecret from "./LinuxBrowserSecret.ts";
11
12it.layer(NodeServices.layer)("Linux browser secret path", (it) => {
13 it.effect("finds development and packaged helpers without falling back outside the install", () =>
14 Effect.gen(function* () {
15 const fileSystem = yield* FileSystem.FileSystem;
16 const path = yield* Path.Path;
17 const root = yield* fileSystem.makeTempDirectoryScoped({ prefix: "t3-browser-secret-path-" });
18 const resourcesPath = path.join(root, "install", "resources");
19 const native = path.join(
20 root,
21 "native",
22 "browser-secret",
23 "build",
24 "x64",
25 "t3-browser-secret",
26 );
27 const staged = path.join(
28 root,
29 "apps",
30 "desktop",
31 "prod-resources",
32 "browser-secret",
33 "t3-browser-secret",
34 );
35 const packaged = path.join(resourcesPath, "browser-secret", "t3-browser-secret");
36 for (const filename of [native, staged, packaged]) {
37 yield* fileSystem.makeDirectory(path.dirname(filename), { recursive: true });
38 yield* fileSystem.writeFileString(filename, "helper");
39 }
40 const resolve = (isPackaged: boolean, platform: NodeJS.Platform = "linux") => {
41 const layerEnvironment = DesktopEnvironment.layer({
42 dirname: path.join(root, "apps", "desktop", "dist-electron"),
43 homeDirectory: root,
44 platform,
45 processArch: "x64",
46 appVersion: "0.0.1",
47 appPath: path.join(resourcesPath, "app.asar"),
48 isPackaged,
49 resourcesPath,
50 runningUnderArm64Translation: false,
51 }).pipe(Layer.provide(DesktopConfig.layerTest({})));
52 return LinuxBrowserSecret.LinuxBrowserSecretPath.pipe(
53 Effect.provide(LinuxBrowserSecret.layer.pipe(Layer.provide(layerEnvironment))),
54 );
55 };
56
57 assert.equal(yield* resolve(false), native);
58 assert.equal(yield* resolve(true), packaged);
59 yield* fileSystem.remove(native);
60 assert.equal(yield* resolve(false), staged);
61 yield* fileSystem.remove(packaged);
62 assert.isUndefined(yield* resolve(true));
63 assert.isUndefined(yield* resolve(false, "darwin"));
64 assert.isUndefined(yield* resolve(false, "win32"));
65 yield* fileSystem.remove(staged);
66 assert.isUndefined(yield* resolve(false));
67 }).pipe(Effect.scoped),
68 );
69});