draken 0.1.5 → 0.2.0

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.
Files changed (301) hide show
  1. package/ACCEPTANCE.md +31 -0
  2. package/CHANGELOG.md +33 -0
  3. package/CONTRIBUTING.md +129 -0
  4. package/MEMORY.md +98 -0
  5. package/PERSONA.md +67 -0
  6. package/README.md +156 -78
  7. package/SETUP.md +111 -0
  8. package/SOURCES.md +75 -0
  9. package/TRAY.md +54 -0
  10. package/VOICE.md +118 -0
  11. package/dist/auth/middleware.d.ts +3 -1
  12. package/dist/auth/middleware.d.ts.map +1 -1
  13. package/dist/auth/middleware.js +20 -15
  14. package/dist/auth/middleware.js.map +1 -1
  15. package/dist/cli.js +77 -58
  16. package/dist/cli.js.map +1 -1
  17. package/dist/db/agent-migration.d.ts +7 -0
  18. package/dist/db/agent-migration.d.ts.map +1 -0
  19. package/dist/db/agent-migration.js +36 -0
  20. package/dist/db/agent-migration.js.map +1 -0
  21. package/dist/db/evidence.d.ts +37 -0
  22. package/dist/db/evidence.d.ts.map +1 -0
  23. package/dist/db/evidence.js +110 -0
  24. package/dist/db/evidence.js.map +1 -0
  25. package/dist/db/pointer-migration.d.ts +7 -0
  26. package/dist/db/pointer-migration.d.ts.map +1 -0
  27. package/dist/db/pointer-migration.js +117 -0
  28. package/dist/db/pointer-migration.js.map +1 -0
  29. package/dist/db/retained-text.d.ts +8 -0
  30. package/dist/db/retained-text.d.ts.map +1 -0
  31. package/dist/db/retained-text.js +36 -0
  32. package/dist/db/retained-text.js.map +1 -0
  33. package/dist/db/schema.d.ts +1 -5
  34. package/dist/db/schema.d.ts.map +1 -1
  35. package/dist/db/schema.js +200 -55
  36. package/dist/db/schema.js.map +1 -1
  37. package/dist/db/snapshot-pointers.d.ts +5 -0
  38. package/dist/db/snapshot-pointers.d.ts.map +1 -0
  39. package/dist/db/snapshot-pointers.js +174 -0
  40. package/dist/db/snapshot-pointers.js.map +1 -0
  41. package/dist/memory/automatic.d.ts +38 -0
  42. package/dist/memory/automatic.d.ts.map +1 -0
  43. package/dist/memory/automatic.js +155 -0
  44. package/dist/memory/automatic.js.map +1 -0
  45. package/dist/memory/context.d.ts +12 -0
  46. package/dist/memory/context.d.ts.map +1 -0
  47. package/dist/memory/context.js +59 -0
  48. package/dist/memory/context.js.map +1 -0
  49. package/dist/memory/embedding-pool.d.ts +28 -0
  50. package/dist/memory/embedding-pool.d.ts.map +1 -0
  51. package/dist/memory/embedding-pool.js +135 -0
  52. package/dist/memory/embedding-pool.js.map +1 -0
  53. package/dist/memory/embedding-worker.d.ts +2 -0
  54. package/dist/memory/embedding-worker.d.ts.map +1 -0
  55. package/dist/memory/embedding-worker.js +32 -0
  56. package/dist/memory/embedding-worker.js.map +1 -0
  57. package/dist/memory/index.d.ts +26 -0
  58. package/dist/memory/index.d.ts.map +1 -0
  59. package/dist/memory/index.js +283 -0
  60. package/dist/memory/index.js.map +1 -0
  61. package/dist/memory/model.d.ts +15 -0
  62. package/dist/memory/model.d.ts.map +1 -0
  63. package/dist/memory/model.js +152 -0
  64. package/dist/memory/model.js.map +1 -0
  65. package/dist/memory/service.d.ts +8 -0
  66. package/dist/memory/service.d.ts.map +1 -0
  67. package/dist/memory/service.js +217 -0
  68. package/dist/memory/service.js.map +1 -0
  69. package/dist/memory/sources.d.ts +15 -0
  70. package/dist/memory/sources.d.ts.map +1 -0
  71. package/dist/memory/sources.js +87 -0
  72. package/dist/memory/sources.js.map +1 -0
  73. package/dist/memory/stamps.d.ts +13 -0
  74. package/dist/memory/stamps.d.ts.map +1 -0
  75. package/dist/memory/stamps.js +101 -0
  76. package/dist/memory/stamps.js.map +1 -0
  77. package/dist/memory/storage.d.ts +5 -0
  78. package/dist/memory/storage.d.ts.map +1 -0
  79. package/dist/memory/storage.js +107 -0
  80. package/dist/memory/storage.js.map +1 -0
  81. package/dist/memory/types.d.ts +68 -0
  82. package/dist/memory/types.d.ts.map +1 -0
  83. package/dist/memory/types.js +8 -0
  84. package/dist/memory/types.js.map +1 -0
  85. package/dist/memory/worker.d.ts +2 -0
  86. package/dist/memory/worker.d.ts.map +1 -0
  87. package/dist/memory/worker.js +82 -0
  88. package/dist/memory/worker.js.map +1 -0
  89. package/dist/npm-cli.d.ts +4 -0
  90. package/dist/npm-cli.d.ts.map +1 -0
  91. package/dist/npm-cli.js +36 -0
  92. package/dist/npm-cli.js.map +1 -0
  93. package/dist/pi/runtime.d.ts +34 -0
  94. package/dist/pi/runtime.d.ts.map +1 -0
  95. package/dist/pi/runtime.js +210 -0
  96. package/dist/pi/runtime.js.map +1 -0
  97. package/dist/pi/setup.d.ts +5 -0
  98. package/dist/pi/setup.d.ts.map +1 -0
  99. package/dist/pi/setup.js +147 -0
  100. package/dist/pi/setup.js.map +1 -0
  101. package/dist/routes/auth.d.ts.map +1 -1
  102. package/dist/routes/auth.js +3 -1
  103. package/dist/routes/auth.js.map +1 -1
  104. package/dist/routes/live-voice.d.ts +3 -0
  105. package/dist/routes/live-voice.d.ts.map +1 -0
  106. package/dist/routes/live-voice.js +49 -0
  107. package/dist/routes/live-voice.js.map +1 -0
  108. package/dist/routes/{browse.d.ts → memory.d.ts} +1 -1
  109. package/dist/routes/memory.d.ts.map +1 -0
  110. package/dist/routes/memory.js +18 -0
  111. package/dist/routes/memory.js.map +1 -0
  112. package/dist/routes/{tasks.d.ts → sync.d.ts} +1 -1
  113. package/dist/routes/sync.d.ts.map +1 -0
  114. package/dist/routes/sync.js +127 -0
  115. package/dist/routes/sync.js.map +1 -0
  116. package/dist/routes/{projects.d.ts → voice.d.ts} +1 -1
  117. package/dist/routes/voice.d.ts.map +1 -0
  118. package/dist/routes/voice.js +35 -0
  119. package/dist/routes/voice.js.map +1 -0
  120. package/dist/server-state.d.ts +30 -0
  121. package/dist/server-state.d.ts.map +1 -0
  122. package/dist/server-state.js +113 -0
  123. package/dist/server-state.js.map +1 -0
  124. package/dist/server-status.d.ts +7 -0
  125. package/dist/server-status.d.ts.map +1 -0
  126. package/dist/server-status.js +34 -0
  127. package/dist/server-status.js.map +1 -0
  128. package/dist/server.d.ts +5 -1
  129. package/dist/server.d.ts.map +1 -1
  130. package/dist/server.js +148 -46
  131. package/dist/server.js.map +1 -1
  132. package/dist/sources/adapters.d.ts +15 -0
  133. package/dist/sources/adapters.d.ts.map +1 -0
  134. package/dist/sources/adapters.js +159 -0
  135. package/dist/sources/adapters.js.map +1 -0
  136. package/dist/sources/registry.d.ts +17 -0
  137. package/dist/sources/registry.d.ts.map +1 -0
  138. package/dist/sources/registry.js +56 -0
  139. package/dist/sources/registry.js.map +1 -0
  140. package/dist/sync/collector.d.ts +3 -0
  141. package/dist/sync/collector.d.ts.map +1 -0
  142. package/dist/sync/collector.js +284 -0
  143. package/dist/sync/collector.js.map +1 -0
  144. package/dist/sync/cost.d.ts +7 -0
  145. package/dist/sync/cost.d.ts.map +1 -0
  146. package/dist/sync/cost.js +31 -0
  147. package/dist/sync/cost.js.map +1 -0
  148. package/dist/sync/jsonl.d.ts +34 -0
  149. package/dist/sync/jsonl.d.ts.map +1 -0
  150. package/dist/sync/jsonl.js +161 -0
  151. package/dist/sync/jsonl.js.map +1 -0
  152. package/dist/sync/manager.d.ts +12 -0
  153. package/dist/sync/manager.d.ts.map +1 -0
  154. package/dist/sync/manager.js +211 -0
  155. package/dist/sync/manager.js.map +1 -0
  156. package/dist/sync/normalize.d.ts +22 -0
  157. package/dist/sync/normalize.d.ts.map +1 -0
  158. package/dist/sync/normalize.js +107 -0
  159. package/dist/sync/normalize.js.map +1 -0
  160. package/dist/sync/pi-output.d.ts +33 -0
  161. package/dist/sync/pi-output.d.ts.map +1 -0
  162. package/dist/sync/pi-output.js +186 -0
  163. package/dist/sync/pi-output.js.map +1 -0
  164. package/dist/sync/pi.d.ts +15 -0
  165. package/dist/sync/pi.d.ts.map +1 -0
  166. package/dist/sync/pi.js +149 -0
  167. package/dist/sync/pi.js.map +1 -0
  168. package/dist/sync/recap.d.ts +25 -0
  169. package/dist/sync/recap.d.ts.map +1 -0
  170. package/dist/sync/recap.js +118 -0
  171. package/dist/sync/recap.js.map +1 -0
  172. package/dist/sync/references.d.ts +10 -0
  173. package/dist/sync/references.d.ts.map +1 -0
  174. package/dist/sync/references.js +50 -0
  175. package/dist/sync/references.js.map +1 -0
  176. package/dist/sync/source-files.d.ts +16 -0
  177. package/dist/sync/source-files.d.ts.map +1 -0
  178. package/dist/sync/source-files.js +56 -0
  179. package/dist/sync/source-files.js.map +1 -0
  180. package/dist/sync/store.d.ts +36 -0
  181. package/dist/sync/store.d.ts.map +1 -0
  182. package/dist/sync/store.js +359 -0
  183. package/dist/sync/store.js.map +1 -0
  184. package/dist/sync/summary-budget.d.ts +19 -0
  185. package/dist/sync/summary-budget.d.ts.map +1 -0
  186. package/dist/sync/summary-budget.js +39 -0
  187. package/dist/sync/summary-budget.js.map +1 -0
  188. package/dist/sync/tree.d.ts +69 -0
  189. package/dist/sync/tree.d.ts.map +1 -0
  190. package/dist/sync/tree.js +599 -0
  191. package/dist/sync/tree.js.map +1 -0
  192. package/dist/tray/controller.d.ts +51 -0
  193. package/dist/tray/controller.d.ts.map +1 -0
  194. package/dist/tray/controller.js +178 -0
  195. package/dist/tray/controller.js.map +1 -0
  196. package/dist/tray/launcher.d.ts +3 -0
  197. package/dist/tray/launcher.d.ts.map +1 -0
  198. package/dist/tray/launcher.js +47 -0
  199. package/dist/tray/launcher.js.map +1 -0
  200. package/dist/tray/native.d.ts +12 -0
  201. package/dist/tray/native.d.ts.map +1 -0
  202. package/dist/tray/native.js +93 -0
  203. package/dist/tray/native.js.map +1 -0
  204. package/dist/tray/processes.d.ts +5 -0
  205. package/dist/tray/processes.d.ts.map +1 -0
  206. package/dist/tray/processes.js +99 -0
  207. package/dist/tray/processes.js.map +1 -0
  208. package/dist/tray/worker.d.ts +4 -0
  209. package/dist/tray/worker.d.ts.map +1 -0
  210. package/dist/tray/worker.js +150 -0
  211. package/dist/tray/worker.js.map +1 -0
  212. package/dist/types.d.ts +212 -20
  213. package/dist/types.d.ts.map +1 -1
  214. package/dist/voice/continuation.d.ts +25 -0
  215. package/dist/voice/continuation.d.ts.map +1 -0
  216. package/dist/voice/continuation.js +94 -0
  217. package/dist/voice/continuation.js.map +1 -0
  218. package/dist/voice/legacy-history.d.ts +5 -0
  219. package/dist/voice/legacy-history.d.ts.map +1 -0
  220. package/dist/voice/legacy-history.js +34 -0
  221. package/dist/voice/legacy-history.js.map +1 -0
  222. package/dist/voice/live-context.d.ts +14 -0
  223. package/dist/voice/live-context.d.ts.map +1 -0
  224. package/dist/voice/live-context.js +137 -0
  225. package/dist/voice/live-context.js.map +1 -0
  226. package/dist/voice/live.d.ts +37 -0
  227. package/dist/voice/live.d.ts.map +1 -0
  228. package/dist/voice/live.js +448 -0
  229. package/dist/voice/live.js.map +1 -0
  230. package/package.json +49 -16
  231. package/public/assets/index-CYz_kpAp.js +126 -0
  232. package/public/assets/index-DmRid5xE.css +1 -0
  233. package/public/assets/index-Ymd62i3g.js +40 -0
  234. package/public/assets/persona-C_m1CVKe.css +1 -0
  235. package/public/assets/persona-XbLvCqRT.js +1 -0
  236. package/public/assets/scene-CBV2oPhA.js +3854 -0
  237. package/public/index.html +6 -8
  238. package/public/persona/THREE-LICENSE.txt +21 -0
  239. package/public/persona/call-poster.webp +0 -0
  240. package/public/persona/reference.jpg +0 -0
  241. package/public/persona/sample.wav +0 -0
  242. package/public/persona.html +7 -0
  243. package/runtime/pi/package-lock.json +1549 -0
  244. package/runtime/pi/package.json +12 -0
  245. package/tests/fixtures/voice-question.wav +0 -0
  246. package/tray/assets/error.ico +0 -0
  247. package/tray/assets/error.png +0 -0
  248. package/tray/assets/running.ico +0 -0
  249. package/tray/assets/running.png +0 -0
  250. package/tray/assets/starting.ico +0 -0
  251. package/tray/assets/starting.png +0 -0
  252. package/tray/assets/stopped.ico +0 -0
  253. package/tray/assets/stopped.png +0 -0
  254. package/tray/assets/stopping.ico +0 -0
  255. package/tray/assets/stopping.png +0 -0
  256. package/tray/macos.js +72 -0
  257. package/tray/windows.ps1 +104 -0
  258. package/voice/realtime/README.md +84 -0
  259. package/voice/realtime/backend.mjs +81 -0
  260. package/voice/realtime/native.mjs +210 -0
  261. package/voice/realtime/peer.d.mts +15 -0
  262. package/voice/realtime/peer.mjs +116 -0
  263. package/voice/realtime/probe-browser.mjs +81 -0
  264. package/voice/realtime/probe-server.mjs +86 -0
  265. package/voice/realtime/probe.html +11 -0
  266. package/voice/realtime/probe.mjs +42 -0
  267. package/voice/realtime/rpc.mjs +118 -0
  268. package/voice/realtime/setup.mjs +32 -0
  269. package/voice/tls.mjs +49 -0
  270. package/dist/db/queries.d.ts +0 -16
  271. package/dist/db/queries.d.ts.map +0 -1
  272. package/dist/db/queries.js +0 -91
  273. package/dist/db/queries.js.map +0 -1
  274. package/dist/docker/dockerfile.d.ts +0 -50
  275. package/dist/docker/dockerfile.d.ts.map +0 -1
  276. package/dist/docker/dockerfile.js +0 -160
  277. package/dist/docker/dockerfile.js.map +0 -1
  278. package/dist/docker/manager.d.ts +0 -42
  279. package/dist/docker/manager.d.ts.map +0 -1
  280. package/dist/docker/manager.js +0 -421
  281. package/dist/docker/manager.js.map +0 -1
  282. package/dist/git/status.d.ts +0 -76
  283. package/dist/git/status.d.ts.map +0 -1
  284. package/dist/git/status.js +0 -332
  285. package/dist/git/status.js.map +0 -1
  286. package/dist/routes/browse.d.ts.map +0 -1
  287. package/dist/routes/browse.js +0 -49
  288. package/dist/routes/browse.js.map +0 -1
  289. package/dist/routes/git.d.ts +0 -9
  290. package/dist/routes/git.d.ts.map +0 -1
  291. package/dist/routes/git.js +0 -338
  292. package/dist/routes/git.js.map +0 -1
  293. package/dist/routes/projects.d.ts.map +0 -1
  294. package/dist/routes/projects.js +0 -220
  295. package/dist/routes/projects.js.map +0 -1
  296. package/dist/routes/tasks.d.ts.map +0 -1
  297. package/dist/routes/tasks.js +0 -313
  298. package/dist/routes/tasks.js.map +0 -1
  299. package/draken.dockerfile.template +0 -18
  300. package/public/assets/index-3ngsG5kF.css +0 -1
  301. package/public/assets/index-B3YSD0ee.js +0 -252
@@ -0,0 +1,210 @@
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.isolatedFlags = exports.PI_PACKAGE = exports.PI_VERSION = void 0;
7
+ exports.piPaths = piPaths;
8
+ exports.managedEnvironment = managedEnvironment;
9
+ exports.privateDirectory = privateDirectory;
10
+ exports.executable = executable;
11
+ exports.selectedPi = selectedPi;
12
+ exports.stopPiChecks = stopPiChecks;
13
+ exports.piSetupStatus = piSetupStatus;
14
+ const fs_1 = __importDefault(require("fs"));
15
+ const os_1 = __importDefault(require("os"));
16
+ const path_1 = __importDefault(require("path"));
17
+ const child_process_1 = require("child_process");
18
+ const schema_1 = require("../db/schema");
19
+ const store_1 = require("../sync/store");
20
+ exports.PI_VERSION = '1.5.0';
21
+ exports.PI_PACKAGE = '@earendil-works/pi-coding-agent';
22
+ exports.isolatedFlags = ['--no-session', '--no-tools', '--no-extensions', '--no-mcp', '--no-skills', '--no-prompt-templates', '--no-themes', '--no-context-files', '--no-approve', '--offline'];
23
+ function piPaths() {
24
+ const root = path_1.default.join((0, schema_1.getDataDir)(), 'pi');
25
+ return { root, agent: path_1.default.join(root, 'agent'), home: path_1.default.join(root, 'home'), work: path_1.default.join(root, 'workspace'), selected: path_1.default.join(root, 'selected.json') };
26
+ }
27
+ // Managed children must not inherit unrelated provider keys, pi ownership, custom
28
+ // model URLs, preload hooks or the user's global pi configuration. A private HOME
29
+ // also prevents ambient cloud-credential lookup. This is not an OS sandbox.
30
+ function managedEnvironment() {
31
+ const paths = piPaths(), env = {};
32
+ for (const key of ['PATH', 'PATHEXT', 'SYSTEMROOT', 'WINDIR', 'COMSPEC', 'LANG', 'LC_ALL', 'TERM', 'COLORTERM', 'TMPDIR', 'TMP', 'TEMP'])
33
+ if (process.env[key])
34
+ env[key] = process.env[key];
35
+ return { ...env, HOME: paths.home, USERPROFILE: paths.home, APPDATA: path_1.default.join(paths.home, 'AppData', 'Roaming'), LOCALAPPDATA: path_1.default.join(paths.home, 'AppData', 'Local'),
36
+ PI_CODING_AGENT_DIR: paths.agent, PI_OFFLINE: '1', PI_SKIP_VERSION_CHECK: '1', PI_TELEMETRY: '0' };
37
+ }
38
+ /** Refuse symlinked private subdirectories, without creating anything during GET/status. */
39
+ function privateDirectory(directory, create = false) {
40
+ const base = (0, schema_1.getDataDir)(), relative = path_1.default.relative(base, directory);
41
+ if (!relative || relative.startsWith('..') || path_1.default.isAbsolute(relative))
42
+ throw new Error('Invalid private pi directory');
43
+ if (create)
44
+ fs_1.default.mkdirSync(base, { recursive: true, mode: 0o700 });
45
+ let current = base;
46
+ for (const part of relative.split(path_1.default.sep)) {
47
+ current = path_1.default.join(current, part);
48
+ try {
49
+ const stat = fs_1.default.lstatSync(current);
50
+ if (stat.isSymbolicLink() || !stat.isDirectory())
51
+ throw new Error('Private pi directories must not be symlinks or files');
52
+ if (create)
53
+ fs_1.default.chmodSync(current, 0o700);
54
+ }
55
+ catch (error) {
56
+ if (error.code !== 'ENOENT')
57
+ throw error;
58
+ if (create)
59
+ fs_1.default.mkdirSync(current, { mode: 0o700 });
60
+ else
61
+ return;
62
+ }
63
+ }
64
+ }
65
+ function executable(name) {
66
+ const candidates = name.includes('/') || name.includes('\\') ? [path_1.default.resolve(name)]
67
+ : (process.env.PATH || '').split(path_1.default.delimiter).filter(Boolean).flatMap(dir => process.platform === 'win32'
68
+ ? ['', '.exe', '.cmd', '.bat'].map(ext => path_1.default.join(dir, name + ext)) : [path_1.default.join(dir, name)]);
69
+ return candidates.find(file => { try {
70
+ fs_1.default.accessSync(file, process.platform === 'win32' ? fs_1.default.constants.F_OK : fs_1.default.constants.X_OK);
71
+ return fs_1.default.statSync(file).isFile();
72
+ }
73
+ catch {
74
+ return false;
75
+ } });
76
+ }
77
+ function selectedPi() {
78
+ const paths = piPaths();
79
+ if (!process.env.DRAKEN_PI_BIN && fs_1.default.existsSync(paths.selected)) {
80
+ privateDirectory(paths.root);
81
+ privateDirectory(paths.agent);
82
+ privateDirectory(paths.home);
83
+ privateDirectory(paths.work);
84
+ for (const name of ['auth.json', 'settings.json', 'models.json', 'models-store.json', 'trust.json']) {
85
+ try {
86
+ if (fs_1.default.lstatSync(path_1.default.join(paths.agent, name)).isSymbolicLink())
87
+ throw new Error('Private pi configuration files must not be symlinks');
88
+ }
89
+ catch (error) {
90
+ if (error.code !== 'ENOENT')
91
+ throw error;
92
+ }
93
+ }
94
+ if (fs_1.default.lstatSync(paths.selected).isSymbolicLink() || fs_1.default.statSync(paths.selected).size > 1024)
95
+ throw new Error('Invalid private pi selection; run draken setup to repair it.');
96
+ const selected = JSON.parse(fs_1.default.readFileSync(paths.selected, 'utf8'));
97
+ if (selected.version !== 1 || typeof selected.runtime !== 'string' || !/^\d+\.\d+\.\d+-[a-f0-9]{16}$/.test(selected.runtime))
98
+ throw new Error('Invalid private pi selection; run draken setup to repair it.');
99
+ const runtime = path_1.default.join(paths.root, 'runtime', selected.runtime);
100
+ privateDirectory(runtime);
101
+ const cli = path_1.default.join(runtime, 'node_modules', exports.PI_PACKAGE, 'dist', 'cli.js');
102
+ if (!fs_1.default.existsSync(cli))
103
+ throw new Error('Private pi is incomplete. Run draken setup; credentials will be kept.');
104
+ const relative = path_1.default.relative(fs_1.default.realpathSync(runtime), fs_1.default.realpathSync(cli));
105
+ if (relative.startsWith('..') || path_1.default.isAbsolute(relative))
106
+ throw new Error('Private pi executable is outside its runtime');
107
+ return { source: 'managed', binary: process.execPath, prefix: [cli], env: managedEnvironment(), agent: paths.agent };
108
+ }
109
+ const name = process.env.DRAKEN_PI_BIN || 'pi', binary = executable(name) || name;
110
+ const env = { ...process.env };
111
+ delete env.PI_SESSION_ID;
112
+ delete env.PI_SESSION_FILE;
113
+ // npm's Windows command shims cannot be spawned without a shell. Resolve only
114
+ // the known pi package next to the shim; never evaluate .cmd text.
115
+ const candidate = /\.cmd$/i.test(binary) ? path_1.default.join(path_1.default.dirname(binary), 'node_modules', exports.PI_PACKAGE, 'dist', 'cli.js') : '';
116
+ return { source: 'external', binary: candidate && fs_1.default.existsSync(candidate) ? process.execPath : binary,
117
+ prefix: candidate && fs_1.default.existsSync(candidate) ? [candidate] : [], env,
118
+ agent: process.env.PI_CODING_AGENT_DIR || path_1.default.join(os_1.default.homedir(), '.pi', 'agent') };
119
+ }
120
+ const checks = new Set();
121
+ let checksStopping = false;
122
+ async function stopPiChecks() {
123
+ checksStopping = true;
124
+ await Promise.all([...checks].map(child => new Promise(resolve => {
125
+ const timer = setTimeout(() => child.kill('SIGKILL'), 1000);
126
+ timer.unref();
127
+ child.once('close', () => { clearTimeout(timer); resolve(); });
128
+ child.kill('SIGTERM');
129
+ })));
130
+ }
131
+ /** Bounded protocol-only subprocess. Never return raw stderr or credential output. */
132
+ async function inspect(args) {
133
+ if (checksStopping)
134
+ throw new Error('Pi status checks are stopping');
135
+ const pi = selectedPi();
136
+ return new Promise((resolve, reject) => {
137
+ const child = (0, child_process_1.spawn)(pi.binary, [...pi.prefix, ...args], { env: { ...pi.env, PI_OFFLINE: '1', PI_SKIP_VERSION_CHECK: '1' },
138
+ cwd: fs_1.default.existsSync((0, schema_1.getDataDir)()) ? (0, schema_1.getDataDir)() : os_1.default.tmpdir(), shell: false, stdio: ['ignore', 'pipe', 'ignore'] });
139
+ checks.add(child);
140
+ let text = '', failed = false, kill;
141
+ const terminate = () => { failed = true; child.kill('SIGTERM'); kill = setTimeout(() => child.kill('SIGKILL'), 1000); kill.unref(); };
142
+ const timer = setTimeout(terminate, 8000);
143
+ timer.unref();
144
+ child.stdout.setEncoding('utf8');
145
+ child.stdout.on('data', chunk => { if (failed)
146
+ return; if (Buffer.byteLength(text) + Buffer.byteLength(chunk) > 8192)
147
+ terminate();
148
+ else
149
+ text += chunk; });
150
+ child.once('error', error => { clearTimeout(timer); if (kill)
151
+ clearTimeout(kill); reject(error); });
152
+ child.once('close', code => { checks.delete(child); clearTimeout(timer); if (kill)
153
+ clearTimeout(kill); if (failed)
154
+ reject(new Error('Pi status check did not finish safely'));
155
+ else
156
+ resolve({ code, text }); });
157
+ });
158
+ }
159
+ async function diagnose() {
160
+ let selected;
161
+ try {
162
+ selected = selectedPi();
163
+ }
164
+ catch {
165
+ return { source: 'managed', state: 'error', version: null, agent_dir: piPaths().agent, models: [], message: 'Private pi is incomplete or its selection is invalid. Run draken setup to repair it; credentials are retained.' };
166
+ }
167
+ const result = { source: selected.source, state: 'missing', version: null, agent_dir: selected.agent, models: [], message: '' };
168
+ try {
169
+ const version = await inspect(['--version']), match = /^(\d+)\.(\d+)\.(\d+)\s*$/.exec(version.text.trim());
170
+ if (version.code !== 0 || !match || Number(match[1]) < 1 || (Number(match[1]) === 1 && Number(match[2]) < 4)) {
171
+ return { ...result, state: 'incompatible', message: 'Pi 1.4+ is required. Run draken setup for the pinned private runtime, or update your explicit DRAKEN_PI_BIN.' };
172
+ }
173
+ result.version = match[0].trim();
174
+ const models = (0, store_1.defaultModels)();
175
+ for (const model of [...new Set([models.summary, models.final])]) {
176
+ const check = await inspect(['auth', 'check', '--model', model, '--json', '--no-refresh']);
177
+ let state = 'unavailable';
178
+ try {
179
+ const value = JSON.parse(check.text);
180
+ if (check.code === 0 && value.status === 'ready')
181
+ state = 'configured';
182
+ else if (check.code === 1 && value.status === 'not_ready' && value.reason === 'credentials_not_configured')
183
+ state = 'needs_login';
184
+ }
185
+ catch { /* Unsupported model/status protocol, not known-ready. */ }
186
+ result.models.push({ model, state });
187
+ }
188
+ result.state = result.models.every(model => model.state === 'configured') ? 'configured' : result.models.some(model => model.state === 'unavailable') ? 'error' : 'needs_login';
189
+ result.message = result.state === 'configured' ? 'Pi credentials are configured. Model access and billing are not verified by this local check.'
190
+ : result.state === 'needs_login' ? 'Run draken login in a terminal on this server, then use /login in pi. Sign in to the provider used by the configured summary models.'
191
+ : 'Pi could not resolve the configured models or credentials. Run draken doctor and check model configuration; no provider or model was substituted.';
192
+ }
193
+ catch (error) {
194
+ result.state = error.code === 'ENOENT' ? 'missing' : 'error';
195
+ result.message = result.state === 'missing' ? 'Summarization needs pi. Run draken setup to install a private copy, then draken login.' : 'Pi status could not be checked. Run draken doctor in a terminal on this server.';
196
+ }
197
+ return result;
198
+ }
199
+ let cached;
200
+ function piSetupStatus(fresh = false) {
201
+ const key = JSON.stringify([(0, schema_1.getDataDir)(), process.env.DRAKEN_PI_BIN, process.env.PATH, process.env.PI_CODING_AGENT_DIR, (0, store_1.defaultModels)()]);
202
+ if (cached?.key === key && (cached.pending || !fresh && cached.until > Date.now()))
203
+ return cached.value;
204
+ const value = diagnose();
205
+ const entry = { key, until: Date.now() + 30_000, pending: true, value };
206
+ cached = entry;
207
+ void value.then(() => { entry.pending = false; }, () => { entry.pending = false; });
208
+ return value;
209
+ }
210
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/pi/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function installPi(yes: boolean): Promise<void>;
2
+ export declare function loginPi(): Promise<void>;
3
+ export declare function doctor(): Promise<void>;
4
+ export declare function voiceSetup(action: string): Promise<void>;
5
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/pi/setup.ts"],"names":[],"mappings":"AAuBA,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA8C3D;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAS7C;AAED,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAM5C;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9D"}
@@ -0,0 +1,147 @@
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.installPi = installPi;
7
+ exports.loginPi = loginPi;
8
+ exports.doctor = doctor;
9
+ exports.voiceSetup = voiceSetup;
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const crypto_1 = require("crypto");
13
+ const child_process_1 = require("child_process");
14
+ const promises_1 = require("readline/promises");
15
+ const schema_1 = require("../db/schema");
16
+ const npm_cli_1 = require("../npm-cli");
17
+ const runtime_1 = require("./runtime");
18
+ /** Explicit terminal operations only. This module has no HTTP installation/login route. */
19
+ function run(binary, args, env, cwd, timeout = 0) {
20
+ return new Promise((resolve, reject) => {
21
+ const child = (0, child_process_1.spawn)(binary, args, { env, cwd, shell: false, stdio: 'inherit' });
22
+ let cancelled = false, kill;
23
+ const stop = () => { if (cancelled)
24
+ return; cancelled = true; child.kill('SIGTERM'); kill = setTimeout(() => child.kill('SIGKILL'), 1500); kill.unref(); };
25
+ process.once('SIGINT', stop);
26
+ process.once('SIGTERM', stop);
27
+ const timer = timeout ? setTimeout(stop, timeout) : undefined;
28
+ const cleanup = () => { process.removeListener('SIGINT', stop); process.removeListener('SIGTERM', stop); if (timer)
29
+ clearTimeout(timer); if (kill)
30
+ clearTimeout(kill); };
31
+ child.once('error', () => { cleanup(); reject(new Error('Could not start the requested program. Check Node.js/npm and executable permissions.')); });
32
+ child.once('close', code => { cleanup(); if (cancelled)
33
+ reject(new Error('Operation cancelled or timed out. Existing credentials were retained.'));
34
+ else if (code !== 0)
35
+ reject(new Error(`The requested program exited with status ${code ?? 'signal'}.`));
36
+ else
37
+ resolve(); });
38
+ });
39
+ }
40
+ async function installPi(yes) {
41
+ if (process.env.DRAKEN_PI_BIN)
42
+ throw new Error('DRAKEN_PI_BIN is explicitly configured. Keep using it, or unset it before selecting Draken’s private pi. No installation was changed.');
43
+ const paths = (0, runtime_1.piPaths)(), bundle = path_1.default.resolve(__dirname, '../../runtime/pi');
44
+ const lock = fs_1.default.readFileSync(path_1.default.join(bundle, 'package-lock.json')), manifest = JSON.parse(fs_1.default.readFileSync(path_1.default.join(bundle, 'package.json'), 'utf8'));
45
+ if (manifest.dependencies?.[runtime_1.PI_PACKAGE] !== runtime_1.PI_VERSION)
46
+ throw new Error('The packaged pi manifest does not match this Draken version. Reinstall Draken.');
47
+ const tag = `${runtime_1.PI_VERSION}-${(0, crypto_1.createHash)('sha256').update(lock).digest('hex').slice(0, 16)}`;
48
+ const runtime = path_1.default.join(paths.root, 'runtime', tag);
49
+ console.log(`Private pi ${runtime_1.PI_VERSION}: ${runtime}\nPi configuration/credentials: ${paths.agent}\nThis downloads pi and its locked dependencies from npm. It does not copy credentials or change global pi.`);
50
+ if (!yes) {
51
+ if (!process.stdin.isTTY || !process.stdout.isTTY)
52
+ throw new Error('Installation needs confirmation. Run draken setup in a terminal, or explicitly use draken setup --yes.');
53
+ const terminal = (0, promises_1.createInterface)({ input: process.stdin, output: process.stdout });
54
+ try {
55
+ if (!/^(y|yes)$/i.test((await terminal.question('Install and select this private runtime? [y/N] ')).trim())) {
56
+ console.log('No changes made.');
57
+ return;
58
+ }
59
+ }
60
+ finally {
61
+ terminal.close();
62
+ }
63
+ }
64
+ const npm = (0, npm_cli_1.npmCli)();
65
+ for (const dir of [paths.root, paths.home, paths.agent, paths.work, path_1.default.dirname(runtime)])
66
+ (0, runtime_1.privateDirectory)(dir, true);
67
+ const lockPath = path_1.default.join(paths.root, 'setup.lock');
68
+ let descriptor;
69
+ try {
70
+ descriptor = fs_1.default.openSync(lockPath, 'wx', 0o600);
71
+ }
72
+ catch {
73
+ throw new Error(`Setup is already running or was interrupted. Check ${lockPath}; remove that lock only after confirming no setup process is running.`);
74
+ }
75
+ fs_1.default.writeFileSync(descriptor, JSON.stringify({ pid: process.pid, at: new Date().toISOString() }));
76
+ fs_1.default.closeSync(descriptor);
77
+ const stage = path_1.default.join(paths.root, `.install-${(0, crypto_1.randomUUID)()}`), selection = path_1.default.join(paths.root, `.selected-${(0, crypto_1.randomUUID)()}.json`);
78
+ try {
79
+ (0, runtime_1.privateDirectory)(runtime);
80
+ const packageFile = path_1.default.join(runtime, 'node_modules', runtime_1.PI_PACKAGE, 'package.json');
81
+ const complete = fs_1.default.existsSync(packageFile) && JSON.parse(fs_1.default.readFileSync(packageFile, 'utf8')).version === runtime_1.PI_VERSION
82
+ && fs_1.default.existsSync(path_1.default.join(runtime, 'node_modules', runtime_1.PI_PACKAGE, 'dist/cli.js'))
83
+ && fs_1.default.existsSync(path_1.default.join(runtime, '.qualified-lock')) && fs_1.default.readFileSync(path_1.default.join(runtime, '.qualified-lock'), 'utf8') === (0, crypto_1.createHash)('sha256').update(lock).digest('hex');
84
+ if (!complete) {
85
+ if (fs_1.default.existsSync(runtime))
86
+ throw new Error(`An incomplete runtime exists at ${runtime}. Move that directory aside and retry; do not remove the agent/ credential directory.`);
87
+ (0, runtime_1.privateDirectory)(stage, true);
88
+ fs_1.default.copyFileSync(path_1.default.join(bundle, 'package.json'), path_1.default.join(stage, 'package.json'));
89
+ fs_1.default.writeFileSync(path_1.default.join(stage, 'package-lock.json'), lock);
90
+ for (const name of ['user.npmrc', 'global.npmrc'])
91
+ fs_1.default.writeFileSync(path_1.default.join(stage, name), '', { mode: 0o600 });
92
+ // npm's dependency tree and integrity hashes come from our shipped lockfile,
93
+ // not mutable latest tags. No lifecycle scripts or user npm configuration.
94
+ await run(process.execPath, [npm, 'ci', '--ignore-scripts', '--omit=dev', '--no-audit', '--no-fund', '--registry=https://registry.npmjs.org',
95
+ `--userconfig=${path_1.default.join(stage, 'user.npmrc')}`, `--globalconfig=${path_1.default.join(stage, 'global.npmrc')}`, `--cache=${path_1.default.join(paths.home, '.npm')}`], (0, runtime_1.managedEnvironment)(), stage, 10 * 60_000);
96
+ const installed = JSON.parse(fs_1.default.readFileSync(path_1.default.join(stage, 'node_modules', runtime_1.PI_PACKAGE, 'package.json'), 'utf8'));
97
+ if (installed.name !== runtime_1.PI_PACKAGE || installed.version !== runtime_1.PI_VERSION)
98
+ throw new Error('Installed pi did not match the pinned package. No runtime was selected.');
99
+ await run(process.execPath, [path_1.default.join(stage, 'node_modules', runtime_1.PI_PACKAGE, 'dist/cli.js'), '--version'], (0, runtime_1.managedEnvironment)(), paths.work, 15_000);
100
+ fs_1.default.writeFileSync(path_1.default.join(stage, '.qualified-lock'), (0, crypto_1.createHash)('sha256').update(lock).digest('hex'), { mode: 0o600 });
101
+ fs_1.default.renameSync(stage, runtime);
102
+ }
103
+ if (complete)
104
+ await run(process.execPath, [path_1.default.join(runtime, 'node_modules', runtime_1.PI_PACKAGE, 'dist/cli.js'), '--version'], (0, runtime_1.managedEnvironment)(), paths.work, 15_000);
105
+ fs_1.default.writeFileSync(selection, JSON.stringify({ version: 1, runtime: tag }) + '\n', { mode: 0o600 });
106
+ fs_1.default.renameSync(selection, paths.selected);
107
+ console.log('\nPrivate pi selected. Next: draken login\nInside pi, type /login and sign in, then /quit. Draken never copies your global pi credentials.\nUse draken doctor to check configuration. The running server picks up this selection for subsequent requests.');
108
+ }
109
+ finally {
110
+ fs_1.default.rmSync(stage, { recursive: true, force: true });
111
+ fs_1.default.rmSync(selection, { force: true });
112
+ fs_1.default.rmSync(lockPath, { force: true });
113
+ }
114
+ }
115
+ async function loginPi() {
116
+ if (!process.stdin.isTTY || !process.stdout.isTTY)
117
+ throw new Error('Login needs an interactive terminal on the Draken server. Run draken login there as the server’s user, with the same DRAKEN_DATA_DIR and DRAKEN_PI_BIN environment.');
118
+ const pi = (0, runtime_1.selectedPi)();
119
+ if (pi.source === 'managed')
120
+ for (const dir of [(0, runtime_1.piPaths)().agent, (0, runtime_1.piPaths)().home, (0, runtime_1.piPaths)().work])
121
+ (0, runtime_1.privateDirectory)(dir, true);
122
+ else if (!(0, runtime_1.executable)(pi.binary))
123
+ throw new Error('Pi is missing. Run draken setup first.');
124
+ const cwd = path_1.default.join((0, schema_1.getDataDir)(), 'pi', 'workspace');
125
+ (0, runtime_1.privateDirectory)(cwd, true);
126
+ console.log(`Opening ${pi.source === 'managed' ? 'Draken’s private' : 'your existing'} pi login interface.\nCredential directory: ${pi.agent}\nType /login (or /login openai for the default models), follow pi’s prompts, then /quit.\nDo not pass /login as a model prompt. Tools, project resources and session persistence are disabled.\nThis is summarization authentication, not the separate ChatGPT voice login.`);
127
+ await run(pi.binary, [...pi.prefix, ...runtime_1.isolatedFlags], pi.env, cwd);
128
+ await doctor();
129
+ }
130
+ async function doctor() {
131
+ const status = await (0, runtime_1.piSetupStatus)(true);
132
+ console.log(`Summary runtime: ${status.source} · ${status.state}${status.version ? ` · pi ${status.version}` : ''}\nPi credential directory: ${status.agent_dir}\n${status.message}`);
133
+ for (const model of status.models)
134
+ console.log(` ${model.model}: ${model.state}`);
135
+ console.log('Credential checks do not generate text, verify provider access or measure billing.\nVoice is separate: draken voice setup → draken voice login\nHistory sources: Settings → Agents & sessions. Then Sync with Draken.');
136
+ if (status.state !== 'configured')
137
+ process.exitCode = 1;
138
+ }
139
+ async function voiceSetup(action) {
140
+ const flag = { setup: '--install', login: '--login', status: '--check' }[action];
141
+ if (!flag)
142
+ throw new Error('Usage: draken voice setup | login | status');
143
+ if (action === 'login' && !process.stdin.isTTY)
144
+ throw new Error('Run draken voice login in an interactive terminal on the server.');
145
+ await run(process.execPath, [path_1.default.resolve(__dirname, '../../voice/realtime/setup.mjs'), flag], process.env, process.cwd());
146
+ }
147
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/pi/setup.ts"],"names":[],"mappings":";;;;;AAuBA,8BA8CC;AAED,0BASC;AAED,wBAMC;AAED,gCAKC;AA/FD,4CAAoB;AACpB,gDAAwB;AACxB,mCAAgD;AAChD,iDAAsC;AACtC,gDAAoD;AACpD,yCAA0C;AAC1C,wCAAoC;AACpC,uCAAwJ;AAExJ,2FAA2F;AAC3F,SAAS,GAAG,CAAC,MAAc,EAAE,IAAc,EAAE,GAAsB,EAAE,GAAW,EAAE,OAAO,GAAG,CAAC;IAC3F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAChF,IAAI,SAAS,GAAG,KAAK,EAAE,IAAgC,CAAC;QACxD,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,SAAS;YAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3J,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,MAAM,OAAO,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;YAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACzK,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrJ,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,IAAI,SAAS;YAAE,MAAM,CAAC,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC,CAAC;aAAM,IAAI,IAAI,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,KAAK,CAAC,4CAA4C,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;;YAAM,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAClR,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,GAAY;IAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa;QAAE,MAAM,IAAI,KAAK,CAAC,uIAAuI,CAAC,CAAC;IACxL,MAAM,KAAK,GAAG,IAAA,iBAAO,GAAE,EAAE,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACxJ,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC,oBAAU,CAAC,KAAK,oBAAU;QAAE,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;IAC1J,MAAM,GAAG,GAAG,GAAG,oBAAU,IAAI,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5F,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,cAAc,oBAAU,KAAK,OAAO,mCAAmC,KAAK,CAAC,KAAK,6GAA6G,CAAC,CAAC;IAC7M,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,wGAAwG,CAAC,CAAC;QAC7K,MAAM,QAAQ,GAAG,IAAA,0BAAe,EAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC;YAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,iDAAiD,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;QAAC,CAAC;gBACzJ,CAAC;YAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;IAC/B,CAAC;IACD,MAAM,GAAG,GAAG,IAAA,gBAAM,GAAE,CAAC;IACrB,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAAE,IAAA,0BAAgB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxH,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACrD,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QAAC,UAAU,GAAG,YAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,sDAAsD,QAAQ,uEAAuE,CAAC,CAAC;IAAC,CAAC;IAC1N,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;IAAC,YAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC3H,MAAM,KAAK,GAAG,cAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,IAAA,mBAAU,GAAE,EAAE,CAAC,EAAE,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,IAAA,mBAAU,GAAE,OAAO,CAAC,CAAC;IACrI,IAAI,CAAC;QACH,IAAA,0BAAgB,EAAC,OAAO,CAAC,CAAC;QAC1B,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,oBAAU,EAAE,cAAc,CAAC,CAAC;QACnF,MAAM,QAAQ,GAAG,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,oBAAU;eACjH,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,oBAAU,EAAE,aAAa,CAAC,CAAC;eAC5E,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,IAAI,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,KAAK,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChL,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,uFAAuF,CAAC,CAAC;YAC/K,IAAA,0BAAgB,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC9B,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,cAAI,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;YAAC,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,KAAK,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,CAAC;YACpJ,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC;gBAAE,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACjH,6EAA6E;YAC7E,2EAA2E;YAC3E,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,uCAAuC;gBAC1I,gBAAgB,cAAI,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,EAAE,kBAAkB,cAAI,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,EAAE,WAAW,cAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAA,4BAAkB,GAAE,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;YACjM,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,oBAAU,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YACpH,IAAI,SAAS,CAAC,IAAI,KAAK,oBAAU,IAAI,SAAS,CAAC,OAAO,KAAK,oBAAU;gBAAE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAClK,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,oBAAU,EAAE,aAAa,CAAC,EAAE,WAAW,CAAC,EAAE,IAAA,4BAAkB,GAAE,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAClJ,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC,EAAE,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACxH,YAAE,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,QAAQ;YAAE,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,oBAAU,EAAE,aAAa,CAAC,EAAE,WAAW,CAAC,EAAE,IAAA,4BAAkB,GAAE,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClK,YAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAAC,YAAE,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5I,OAAO,CAAC,GAAG,CAAC,2PAA2P,CAAC,CAAC;IAC3Q,CAAC;YAAS,CAAC;QAAC,YAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,YAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,YAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;AAChJ,CAAC;AAEM,KAAK,UAAU,OAAO;IAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,qKAAqK,CAAC,CAAC;IAC1O,MAAM,EAAE,GAAG,IAAA,oBAAU,GAAE,CAAC;IACxB,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS;QAAE,KAAK,MAAM,GAAG,IAAI,CAAC,IAAA,iBAAO,GAAE,CAAC,KAAK,EAAE,IAAA,iBAAO,GAAE,CAAC,IAAI,EAAE,IAAA,iBAAO,GAAE,CAAC,IAAI,CAAC;YAAE,IAAA,0BAAgB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;SACzH,IAAI,CAAC,IAAA,oBAAU,EAAC,EAAE,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC3F,MAAM,GAAG,GAAG,cAAI,CAAC,IAAI,CAAC,IAAA,mBAAU,GAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAAC,IAAA,0BAAgB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,eAAe,+CAA+C,EAAE,CAAC,KAAK,8QAA8Q,CAAC,CAAC;IAC5Z,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,uBAAa,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpE,MAAM,MAAM,EAAE,CAAC;AACjB,CAAC;AAEM,KAAK,UAAU,MAAM;IAC1B,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAa,EAAC,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,8BAA8B,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACtL,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,uNAAuN,CAAC,CAAC;IACrO,IAAI,MAAM,CAAC,KAAK,KAAK,YAAY;QAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC1D,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,MAAc;IAC7C,MAAM,IAAI,GAAI,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAA6B,CAAC,MAAM,CAAC,CAAC;IAC7G,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACzE,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACpI,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,gCAAgC,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7H,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA2DxB,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA6DxB,eAAe,MAAM,CAAC"}
@@ -4,8 +4,10 @@ const express_1 = require("express");
4
4
  const middleware_1 = require("../auth/middleware");
5
5
  const router = (0, express_1.Router)();
6
6
  // Check if auth is enabled
7
- router.get('/status', (_req, res) => {
7
+ router.get('/status', (req, res) => {
8
8
  res.json({
9
+ application: 'draken',
10
+ instance: req.app.locals.drakenInstance,
9
11
  enabled: (0, middleware_1.isAuthEnabled)(),
10
12
  });
11
13
  });
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":";;AAAA,qCAAoD;AACpD,mDAO4B;AAE5B,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AAOxB,2BAA2B;AAC3B,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;IACrD,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAA,0BAAa,GAAE;KACzB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iBAAiB;AACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACpD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,IAAoB,CAAC;IAExD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,CAAC,IAAA,0BAAa,GAAE,EAAE,CAAC;QACrB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC,IAAA,gCAAmB,EAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,KAAK,GAAG,IAAA,0BAAa,EAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAA,0BAAa,GAAE,CAAC;IAE/B,GAAG,CAAC,IAAI,CAAC;QACP,KAAK;QACL,SAAS,EAAE,MAAM,EAAE,WAAW,IAAI,IAAI;QACtC,QAAQ;KACT,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,0DAA0D;AAC1D,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,2BAAc,EAAE,CAAC,GAAyB,EAAE,GAAa,EAAE,EAAE;IACjF,IAAI,CAAC,IAAA,0BAAa,GAAE,EAAE,CAAC;QACrB,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,GAAG,CAAC,IAAI,CAAC;QACP,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ;KAC7B,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,wDAAwD;AACxD,8CAA8C;AAC9C,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;IACtD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":";;AAAA,qCAAoD;AACpD,mDAO4B;AAE5B,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AAOxB,2BAA2B;AAC3B,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACpD,GAAG,CAAC,IAAI,CAAC;QACP,WAAW,EAAE,QAAQ;QACrB,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc;QACvC,OAAO,EAAE,IAAA,0BAAa,GAAE;KACzB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iBAAiB;AACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACpD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,IAAoB,CAAC;IAExD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,CAAC,IAAA,0BAAa,GAAE,EAAE,CAAC;QACrB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC,IAAA,gCAAmB,EAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,KAAK,GAAG,IAAA,0BAAa,EAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAA,0BAAa,GAAE,CAAC;IAE/B,GAAG,CAAC,IAAI,CAAC;QACP,KAAK;QACL,SAAS,EAAE,MAAM,EAAE,WAAW,IAAI,IAAI;QACtC,QAAQ;KACT,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,0DAA0D;AAC1D,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,2BAAc,EAAE,CAAC,GAAyB,EAAE,GAAa,EAAE,EAAE;IACjF,IAAI,CAAC,IAAA,0BAAa,GAAE,EAAE,CAAC;QACrB,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,GAAG,CAAC,IAAI,CAAC;QACP,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ;KAC7B,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,wDAAwD;AACxD,8CAA8C;AAC9C,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;IACtD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const router: import("express-serve-static-core").Router;
2
+ export default router;
3
+ //# sourceMappingURL=live-voice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-voice.d.ts","sourceRoot":"","sources":["../../src/routes/live-voice.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA0BxB,eAAe,MAAM,CAAC"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const express_1 = require("express");
4
+ const store_1 = require("../sync/store");
5
+ const live_1 = require("../voice/live");
6
+ const router = (0, express_1.Router)();
7
+ const route = (fn) => (req, res, next) => { Promise.resolve().then(() => fn(req, res)).catch(next); };
8
+ const id = (value) => { if (typeof value !== 'string' || !/^[a-f0-9-]{36}$/.test(value))
9
+ throw new store_1.HttpError(400, 'Invalid call identifier'); return value; };
10
+ const number = (value, min = 0, max = Number.MAX_SAFE_INTEGER) => { const n = Number(value); if (!Number.isSafeInteger(n) || n < min || n > max)
11
+ throw new store_1.HttpError(400, 'Invalid live call resource'); return n; };
12
+ async function connected(res, fn) {
13
+ const controller = new AbortController();
14
+ const close = () => { if (!res.writableEnded)
15
+ controller.abort(); };
16
+ res.on('close', close);
17
+ if (res.destroyed)
18
+ controller.abort();
19
+ try {
20
+ return await fn(controller.signal);
21
+ }
22
+ finally {
23
+ res.off('close', close);
24
+ }
25
+ }
26
+ router.post('/calls', route(async (req, res) => {
27
+ if (Object.keys(req.body || {}).some(key => !['syncId', 'requestId'].includes(key)))
28
+ throw new store_1.HttpError(400, 'Unknown call option. Refresh the page.');
29
+ const requestId = req.body?.requestId === undefined ? undefined : id(req.body.requestId);
30
+ const result = await connected(res, signal => (0, live_1.createLiveCall)(number(req.body?.syncId, 1), signal, requestId));
31
+ res.status(201).json(result);
32
+ }));
33
+ router.post('/calls/:id/connect', route(async (req, res) => {
34
+ if (typeof req.body?.sdp !== 'string' || req.body.sdp.length > 28000)
35
+ throw new store_1.HttpError(400, 'Invalid audio offer');
36
+ res.json(await connected(res, signal => (0, live_1.connectLiveCall)(id(req.params.id), req.body.sdp, signal)));
37
+ }));
38
+ router.get('/calls/:id/events', route((req, res) => res.json((0, live_1.liveEvents)(id(req.params.id), number(req.query.after || 0)))));
39
+ router.post('/calls/:id/text', route(async (req, res) => {
40
+ if (typeof req.body?.question !== 'string' || !req.body.question.trim() || req.body.question.length > 2000)
41
+ throw new store_1.HttpError(400, 'Question must be 1 to 2000 characters');
42
+ await (0, live_1.sendLiveText)(id(req.params.id), req.body.question, id(req.body.requestId));
43
+ res.sendStatus(204);
44
+ }));
45
+ router.post('/calls/:id/interrupt', route(async (req, res) => { await (0, live_1.interruptLiveCall)(id(req.params.id)); res.sendStatus(204); }));
46
+ router.post('/calls/:id/observed', route((req, res) => { (0, live_1.observeLiveAudio)(id(req.params.id), number(req.body?.messageId, 1), number(req.body?.milliseconds, 0, 1800000)); res.sendStatus(204); }));
47
+ router.post('/calls/:id/end', route(async (req, res) => { await (0, live_1.endLiveCall)(id(req.params.id)); res.sendStatus(204); }));
48
+ exports.default = router;
49
+ //# sourceMappingURL=live-voice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-voice.js","sourceRoot":"","sources":["../../src/routes/live-voice.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  declare const router: import("express-serve-static-core").Router;
2
2
  export default router;
3
- //# sourceMappingURL=browse.d.ts.map
3
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/routes/memory.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,MAAM,4CAAW,CAAC;AASxB,eAAe,MAAM,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const express_1 = require("express");
4
+ const service_1 = require("../memory/service");
5
+ const router = (0, express_1.Router)();
6
+ const route = (handler) => (req, res, next) => {
7
+ const abort = new AbortController();
8
+ const closed = () => { if (!res.writableEnded)
9
+ abort.abort(); };
10
+ res.on('close', closed);
11
+ void Promise.resolve().then(() => handler(req, res, abort.signal)).catch(next).finally(() => res.off('close', closed));
12
+ };
13
+ // Metadata only: never starts a worker, downloads a model or queues behind it.
14
+ router.get('/progress', (_req, res) => res.json((0, service_1.historyProgress)()));
15
+ router.post('/search', route(async (req, res, signal) => res.json(await (0, service_1.searchHistory)((0, service_1.validateHistoryQuery)(req.body), signal))));
16
+ router.get('/records/:ref', route(async (req, res, signal) => res.json(await (0, service_1.readHistory)(String(req.params.ref), req.query.offset === undefined ? 0 : Number(req.query.offset), signal))));
17
+ exports.default = router;
18
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/routes/memory.ts"],"names":[],"mappings":";;AAAA,qCAAiF;AACjF,+CAAsG;AACtG,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AACxB,MAAM,KAAK,GAAG,CAAC,OAAyF,EAAE,EAAE,CAAC,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IAC/J,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IAAC,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa;QAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9H,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AACzH,CAAC,CAAC;AACF,+EAA+E;AAC/E,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAA,yBAAe,GAAE,CAAC,CAAC,CAAC;AACpE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAA,uBAAa,EAAC,IAAA,8BAAoB,EAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACjI,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAA,qBAAW,EAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3L,kBAAe,MAAM,CAAC"}
@@ -1,3 +1,3 @@
1
1
  declare const router: import("express-serve-static-core").Router;
2
2
  export default router;
3
- //# sourceMappingURL=tasks.d.ts.map
3
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/routes/sync.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAmGxB,eAAe,MAAM,CAAC"}