opalserve 0.1.2 → 3.0.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 (310) hide show
  1. package/README.md +108 -115
  2. package/assets/logo.svg +51 -0
  3. package/dist/auth/api-keys.d.ts +7 -0
  4. package/dist/auth/api-keys.d.ts.map +1 -0
  5. package/dist/auth/api-keys.js +12 -0
  6. package/dist/auth/api-keys.js.map +1 -0
  7. package/dist/auth/index.d.ts +4 -0
  8. package/dist/auth/index.d.ts.map +1 -0
  9. package/dist/auth/index.js +4 -0
  10. package/dist/auth/index.js.map +1 -0
  11. package/dist/auth/middleware.d.ts +11 -0
  12. package/dist/auth/middleware.d.ts.map +1 -0
  13. package/dist/auth/middleware.js +46 -0
  14. package/dist/auth/middleware.js.map +1 -0
  15. package/dist/auth/passwords.d.ts +3 -0
  16. package/dist/auth/passwords.d.ts.map +1 -0
  17. package/dist/auth/passwords.js +33 -0
  18. package/dist/auth/passwords.js.map +1 -0
  19. package/dist/cli/commands/admin.d.ts +13 -0
  20. package/dist/cli/commands/admin.d.ts.map +1 -0
  21. package/dist/cli/commands/admin.js +261 -0
  22. package/dist/cli/commands/admin.js.map +1 -0
  23. package/dist/cli/commands/auth.d.ts +4 -0
  24. package/dist/cli/commands/auth.d.ts.map +1 -0
  25. package/dist/cli/commands/auth.js +77 -0
  26. package/dist/cli/commands/auth.js.map +1 -0
  27. package/dist/cli/commands/context.d.ts +5 -0
  28. package/dist/cli/commands/context.d.ts.map +1 -0
  29. package/dist/cli/commands/context.js +190 -0
  30. package/dist/cli/commands/context.js.map +1 -0
  31. package/dist/cli/commands/health.d.ts +4 -0
  32. package/dist/cli/commands/health.d.ts.map +1 -0
  33. package/dist/cli/commands/health.js +36 -0
  34. package/dist/cli/commands/health.js.map +1 -0
  35. package/dist/cli/commands/init.d.ts +2 -0
  36. package/dist/cli/commands/init.d.ts.map +1 -0
  37. package/dist/cli/commands/init.js +81 -0
  38. package/dist/cli/commands/init.js.map +1 -0
  39. package/dist/cli/commands/server.d.ts +10 -0
  40. package/dist/cli/commands/server.d.ts.map +1 -0
  41. package/dist/cli/commands/server.js +108 -0
  42. package/dist/cli/commands/server.js.map +1 -0
  43. package/dist/cli/commands/start.d.ts +6 -0
  44. package/dist/cli/commands/start.d.ts.map +1 -0
  45. package/dist/cli/commands/start.js +63 -0
  46. package/dist/cli/commands/start.js.map +1 -0
  47. package/dist/cli/commands/status.d.ts +2 -0
  48. package/dist/cli/commands/status.d.ts.map +1 -0
  49. package/dist/cli/commands/status.js +21 -0
  50. package/dist/cli/commands/status.js.map +1 -0
  51. package/dist/cli/commands/sync.d.ts +2 -0
  52. package/dist/cli/commands/sync.d.ts.map +1 -0
  53. package/dist/cli/commands/sync.js +58 -0
  54. package/dist/cli/commands/sync.js.map +1 -0
  55. package/dist/cli/commands/tools.d.ts +8 -0
  56. package/dist/cli/commands/tools.d.ts.map +1 -0
  57. package/dist/cli/commands/tools.js +28 -0
  58. package/dist/cli/commands/tools.js.map +1 -0
  59. package/dist/cli/index.d.ts +1 -1
  60. package/dist/cli/index.d.ts.map +1 -1
  61. package/dist/cli/index.js +156 -30
  62. package/dist/cli/index.js.map +1 -1
  63. package/dist/cli/ui/banner.d.ts +8 -0
  64. package/dist/cli/ui/banner.d.ts.map +1 -0
  65. package/dist/cli/ui/banner.js +54 -0
  66. package/dist/cli/ui/banner.js.map +1 -0
  67. package/dist/cli/ui/prompts.d.ts +11 -0
  68. package/dist/cli/ui/prompts.d.ts.map +1 -0
  69. package/dist/cli/ui/prompts.js +74 -0
  70. package/dist/cli/ui/prompts.js.map +1 -0
  71. package/dist/cli/ui/table.d.ts +5 -0
  72. package/dist/cli/ui/table.d.ts.map +1 -0
  73. package/dist/cli/ui/table.js +103 -0
  74. package/dist/cli/ui/table.js.map +1 -0
  75. package/dist/config/credentials.d.ts +10 -0
  76. package/dist/config/credentials.d.ts.map +1 -0
  77. package/dist/config/credentials.js +33 -0
  78. package/dist/config/credentials.js.map +1 -0
  79. package/dist/config/defaults.d.ts +5 -0
  80. package/dist/config/defaults.d.ts.map +1 -0
  81. package/dist/config/defaults.js +20 -0
  82. package/dist/config/defaults.js.map +1 -0
  83. package/dist/config/loader.d.ts +4 -0
  84. package/dist/config/loader.d.ts.map +1 -0
  85. package/dist/config/loader.js +57 -0
  86. package/dist/config/loader.js.map +1 -0
  87. package/dist/config/schema.d.ts +2 -0
  88. package/dist/config/schema.d.ts.map +1 -0
  89. package/dist/config/schema.js +2 -0
  90. package/dist/config/schema.js.map +1 -0
  91. package/dist/constants.d.ts +5 -0
  92. package/dist/constants.d.ts.map +1 -0
  93. package/dist/constants.js +5 -0
  94. package/dist/constants.js.map +1 -0
  95. package/dist/context/chunker.d.ts +2 -0
  96. package/dist/context/chunker.d.ts.map +1 -0
  97. package/dist/context/chunker.js +81 -0
  98. package/dist/context/chunker.js.map +1 -0
  99. package/dist/context/index.d.ts +26 -0
  100. package/dist/context/index.d.ts.map +1 -0
  101. package/dist/context/index.js +97 -0
  102. package/dist/context/index.js.map +1 -0
  103. package/dist/core/discovery.d.ts +17 -0
  104. package/dist/core/discovery.d.ts.map +1 -0
  105. package/dist/core/discovery.js +31 -0
  106. package/dist/core/discovery.js.map +1 -0
  107. package/dist/core/proxy.d.ts +14 -0
  108. package/dist/core/proxy.d.ts.map +1 -0
  109. package/dist/core/proxy.js +36 -0
  110. package/dist/core/proxy.js.map +1 -0
  111. package/dist/core/registry.d.ts +30 -31
  112. package/dist/core/registry.d.ts.map +1 -1
  113. package/dist/core/registry.js +92 -234
  114. package/dist/core/registry.js.map +1 -1
  115. package/dist/core/secrets.d.ts +4 -0
  116. package/dist/core/secrets.d.ts.map +1 -0
  117. package/dist/core/secrets.js +40 -0
  118. package/dist/core/secrets.js.map +1 -0
  119. package/dist/core/server-manager.d.ts +18 -0
  120. package/dist/core/server-manager.d.ts.map +1 -0
  121. package/dist/core/server-manager.js +120 -0
  122. package/dist/core/server-manager.js.map +1 -0
  123. package/dist/dashboard/assets/index-BNOtcUPs.js +257 -0
  124. package/dist/dashboard/assets/index-Duwp34GW.css +1 -0
  125. package/dist/dashboard/index.html +14 -0
  126. package/dist/index.d.ts +22 -12
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +31 -9
  129. package/dist/index.js.map +1 -1
  130. package/dist/integrations/github.d.ts +5 -0
  131. package/dist/integrations/github.d.ts.map +1 -0
  132. package/dist/integrations/github.js +63 -0
  133. package/dist/integrations/github.js.map +1 -0
  134. package/dist/integrations/slack.d.ts +21 -0
  135. package/dist/integrations/slack.d.ts.map +1 -0
  136. package/dist/integrations/slack.js +61 -0
  137. package/dist/integrations/slack.js.map +1 -0
  138. package/dist/monitoring/tracker.d.ts +31 -0
  139. package/dist/monitoring/tracker.d.ts.map +1 -0
  140. package/dist/monitoring/tracker.js +86 -0
  141. package/dist/monitoring/tracker.js.map +1 -0
  142. package/dist/server/app.d.ts +8 -0
  143. package/dist/server/app.d.ts.map +1 -0
  144. package/dist/server/app.js +81 -0
  145. package/dist/server/app.js.map +1 -0
  146. package/dist/server/mcp-gateway.d.ts +12 -0
  147. package/dist/server/mcp-gateway.d.ts.map +1 -0
  148. package/dist/server/mcp-gateway.js +91 -0
  149. package/dist/server/mcp-gateway.js.map +1 -0
  150. package/dist/server/routes/auth.d.ts +4 -0
  151. package/dist/server/routes/auth.d.ts.map +1 -0
  152. package/dist/server/routes/auth.js +117 -0
  153. package/dist/server/routes/auth.js.map +1 -0
  154. package/dist/server/routes/context.d.ts +4 -0
  155. package/dist/server/routes/context.d.ts.map +1 -0
  156. package/dist/server/routes/context.js +107 -0
  157. package/dist/server/routes/context.js.map +1 -0
  158. package/dist/server/routes/health.d.ts +4 -0
  159. package/dist/server/routes/health.d.ts.map +1 -0
  160. package/dist/server/routes/health.js +22 -0
  161. package/dist/server/routes/health.js.map +1 -0
  162. package/dist/server/routes/servers.d.ts +4 -0
  163. package/dist/server/routes/servers.d.ts.map +1 -0
  164. package/dist/server/routes/servers.js +47 -0
  165. package/dist/server/routes/servers.js.map +1 -0
  166. package/dist/server/routes/stats.d.ts +4 -0
  167. package/dist/server/routes/stats.d.ts.map +1 -0
  168. package/dist/server/routes/stats.js +97 -0
  169. package/dist/server/routes/stats.js.map +1 -0
  170. package/dist/server/routes/team-servers.d.ts +4 -0
  171. package/dist/server/routes/team-servers.d.ts.map +1 -0
  172. package/dist/server/routes/team-servers.js +108 -0
  173. package/dist/server/routes/team-servers.js.map +1 -0
  174. package/dist/server/routes/tools.d.ts +4 -0
  175. package/dist/server/routes/tools.d.ts.map +1 -0
  176. package/dist/server/routes/tools.js +44 -0
  177. package/dist/server/routes/tools.js.map +1 -0
  178. package/dist/server/routes/webhooks.d.ts +4 -0
  179. package/dist/server/routes/webhooks.d.ts.map +1 -0
  180. package/dist/server/routes/webhooks.js +77 -0
  181. package/dist/server/routes/webhooks.js.map +1 -0
  182. package/dist/storage/database.d.ts +48 -0
  183. package/dist/storage/database.d.ts.map +1 -0
  184. package/dist/storage/database.js +336 -0
  185. package/dist/storage/database.js.map +1 -0
  186. package/dist/storage/repositories/server-repo.d.ts +2 -0
  187. package/dist/storage/repositories/server-repo.d.ts.map +1 -0
  188. package/dist/storage/repositories/server-repo.js +3 -0
  189. package/dist/storage/repositories/server-repo.js.map +1 -0
  190. package/dist/storage/repositories/tool-repo.d.ts +2 -0
  191. package/dist/storage/repositories/tool-repo.d.ts.map +1 -0
  192. package/dist/storage/repositories/tool-repo.js +3 -0
  193. package/dist/storage/repositories/tool-repo.js.map +1 -0
  194. package/dist/types/index.d.ts +482 -587
  195. package/dist/types/index.d.ts.map +1 -1
  196. package/dist/types/index.js +52 -69
  197. package/dist/types/index.js.map +1 -1
  198. package/dist/utils/logger.d.ts +7 -0
  199. package/dist/utils/logger.d.ts.map +1 -0
  200. package/dist/utils/logger.js +23 -0
  201. package/dist/utils/logger.js.map +1 -0
  202. package/package.json +67 -56
  203. package/.env.example +0 -19
  204. package/config/servers.example.yaml +0 -67
  205. package/config/servers.yaml +0 -2
  206. package/dist/cli/discover.d.ts +0 -3
  207. package/dist/cli/discover.d.ts.map +0 -1
  208. package/dist/cli/discover.js +0 -160
  209. package/dist/cli/discover.js.map +0 -1
  210. package/dist/connectors/base.d.ts +0 -49
  211. package/dist/connectors/base.d.ts.map +0 -1
  212. package/dist/connectors/base.js +0 -45
  213. package/dist/connectors/base.js.map +0 -1
  214. package/dist/connectors/custom.d.ts +0 -19
  215. package/dist/connectors/custom.d.ts.map +0 -1
  216. package/dist/connectors/custom.js +0 -129
  217. package/dist/connectors/custom.js.map +0 -1
  218. package/dist/connectors/github.d.ts +0 -18
  219. package/dist/connectors/github.d.ts.map +0 -1
  220. package/dist/connectors/github.js +0 -188
  221. package/dist/connectors/github.js.map +0 -1
  222. package/dist/connectors/google-drive.d.ts +0 -18
  223. package/dist/connectors/google-drive.d.ts.map +0 -1
  224. package/dist/connectors/google-drive.js +0 -209
  225. package/dist/connectors/google-drive.js.map +0 -1
  226. package/dist/connectors/index.d.ts +0 -11
  227. package/dist/connectors/index.d.ts.map +0 -1
  228. package/dist/connectors/index.js +0 -76
  229. package/dist/connectors/index.js.map +0 -1
  230. package/dist/connectors/postgres.d.ts +0 -18
  231. package/dist/connectors/postgres.d.ts.map +0 -1
  232. package/dist/connectors/postgres.js +0 -140
  233. package/dist/connectors/postgres.js.map +0 -1
  234. package/dist/connectors/slack.d.ts +0 -18
  235. package/dist/connectors/slack.d.ts.map +0 -1
  236. package/dist/connectors/slack.js +0 -181
  237. package/dist/connectors/slack.js.map +0 -1
  238. package/dist/core/auth.d.ts +0 -26
  239. package/dist/core/auth.d.ts.map +0 -1
  240. package/dist/core/auth.js +0 -81
  241. package/dist/core/auth.js.map +0 -1
  242. package/dist/core/tokenizer.d.ts +0 -16
  243. package/dist/core/tokenizer.d.ts.map +0 -1
  244. package/dist/core/tokenizer.js +0 -29
  245. package/dist/core/tokenizer.js.map +0 -1
  246. package/dist/governance/audit.d.ts +0 -27
  247. package/dist/governance/audit.d.ts.map +0 -1
  248. package/dist/governance/audit.js +0 -149
  249. package/dist/governance/audit.js.map +0 -1
  250. package/dist/governance/index.d.ts +0 -5
  251. package/dist/governance/index.d.ts.map +0 -1
  252. package/dist/governance/index.js +0 -5
  253. package/dist/governance/index.js.map +0 -1
  254. package/dist/governance/policy.d.ts +0 -20
  255. package/dist/governance/policy.d.ts.map +0 -1
  256. package/dist/governance/policy.js +0 -162
  257. package/dist/governance/policy.js.map +0 -1
  258. package/dist/governance/rate-limiter.d.ts +0 -20
  259. package/dist/governance/rate-limiter.d.ts.map +0 -1
  260. package/dist/governance/rate-limiter.js +0 -73
  261. package/dist/governance/rate-limiter.js.map +0 -1
  262. package/dist/governance/types.d.ts +0 -246
  263. package/dist/governance/types.d.ts.map +0 -1
  264. package/dist/governance/types.js +0 -72
  265. package/dist/governance/types.js.map +0 -1
  266. package/dist/identity/access-control.d.ts +0 -15
  267. package/dist/identity/access-control.d.ts.map +0 -1
  268. package/dist/identity/access-control.js +0 -81
  269. package/dist/identity/access-control.js.map +0 -1
  270. package/dist/identity/index.d.ts +0 -4
  271. package/dist/identity/index.d.ts.map +0 -1
  272. package/dist/identity/index.js +0 -4
  273. package/dist/identity/index.js.map +0 -1
  274. package/dist/identity/manager.d.ts +0 -29
  275. package/dist/identity/manager.d.ts.map +0 -1
  276. package/dist/identity/manager.js +0 -167
  277. package/dist/identity/manager.js.map +0 -1
  278. package/dist/identity/types.d.ts +0 -237
  279. package/dist/identity/types.d.ts.map +0 -1
  280. package/dist/identity/types.js +0 -80
  281. package/dist/identity/types.js.map +0 -1
  282. package/dist/registry/server.d.ts +0 -14
  283. package/dist/registry/server.d.ts.map +0 -1
  284. package/dist/registry/server.js +0 -177
  285. package/dist/registry/server.js.map +0 -1
  286. package/dist/utils/config.d.ts +0 -29
  287. package/dist/utils/config.d.ts.map +0 -1
  288. package/dist/utils/config.js +0 -47
  289. package/dist/utils/config.js.map +0 -1
  290. package/dist/utils/index.d.ts +0 -7
  291. package/dist/utils/index.d.ts.map +0 -1
  292. package/dist/utils/index.js +0 -44
  293. package/dist/utils/index.js.map +0 -1
  294. package/dist/workflow/engine.d.ts +0 -18
  295. package/dist/workflow/engine.d.ts.map +0 -1
  296. package/dist/workflow/engine.js +0 -155
  297. package/dist/workflow/engine.js.map +0 -1
  298. package/dist/workflow/index.d.ts +0 -4
  299. package/dist/workflow/index.d.ts.map +0 -1
  300. package/dist/workflow/index.js +0 -4
  301. package/dist/workflow/index.js.map +0 -1
  302. package/dist/workflow/templates.d.ts +0 -4
  303. package/dist/workflow/templates.d.ts.map +0 -1
  304. package/dist/workflow/templates.js +0 -218
  305. package/dist/workflow/templates.js.map +0 -1
  306. package/dist/workflow/types.d.ts +0 -255
  307. package/dist/workflow/types.d.ts.map +0 -1
  308. package/dist/workflow/types.js +0 -48
  309. package/dist/workflow/types.js.map +0 -1
  310. package/eslint.config.js +0 -25
package/dist/cli/index.js CHANGED
@@ -1,33 +1,159 @@
1
1
  #!/usr/bin/env node
2
- import { RegistryServer } from '../registry/server.js';
3
- import 'dotenv/config';
4
- const config = {
5
- port: parseInt(process.env.PORT || '3000', 10),
6
- host: process.env.HOST || 'localhost',
7
- jwtSecret: process.env.JWT_SECRET || 'dev-secret-change-in-production',
8
- apiKey: process.env.API_KEY,
9
- maxToolsPerResponse: parseInt(process.env.MAX_TOOLS_PER_RESPONSE || '50', 10),
10
- contextTokenBudget: parseInt(process.env.CONTEXT_TOKEN_BUDGET || '128000', 10),
11
- enableAuth: process.env.ENABLE_AUTH === 'true',
12
- };
13
- const server = new RegistryServer(config);
14
- process.on('SIGINT', async () => {
15
- await server.stop();
16
- process.exit(0);
17
- });
18
- process.on('SIGTERM', async () => {
19
- await server.stop();
20
- process.exit(0);
21
- });
22
- console.log(`
23
- ╔══════════════════════════════════════════════════════════════╗
24
- ║ O P A L S E R V E ║
25
- ║ MCP Tool Registry & Discovery Hub ║
26
- ║ Enterprise Edition ║
27
- ╚══════════════════════════════════════════════════════════════╝
28
- `);
29
- server.start().catch((error) => {
30
- console.error('Failed to start server:', error);
31
- process.exit(1);
2
+ import { Command } from 'commander';
3
+ import { showBanner } from './ui/banner.js';
4
+ import { initCommand } from './commands/init.js';
5
+ import { startCommand } from './commands/start.js';
6
+ import { serverListCommand, serverAddCommand, serverRemoveCommand } from './commands/server.js';
7
+ import { toolsListCommand, toolsSearchCommand } from './commands/tools.js';
8
+ import { statusCommand } from './commands/status.js';
9
+ import { healthCommand } from './commands/health.js';
10
+ import { loginCommand, logoutCommand, whoamiCommand } from './commands/auth.js';
11
+ import { syncCommand } from './commands/sync.js';
12
+ import { contextAddCommand, contextListCommand, contextSearchCommand, contextRemoveCommand } from './commands/context.js';
13
+ import { adminInitCommand, adminStatsCommand, adminUsersCommand, adminInviteCommand, adminLimitsCommand, adminPermissionsCommand } from './commands/admin.js';
14
+ const program = new Command()
15
+ .name('opalserve')
16
+ .description('Local MCP tool registry and discovery hub')
17
+ .version('3.0.0')
18
+ .hook('preAction', (thisCommand) => {
19
+ // Show banner only for root-level commands, not subcommands help
20
+ if (thisCommand.args.length === 0 || !['--help', '-h'].includes(thisCommand.args[0])) {
21
+ // Banner is shown inside each command
22
+ }
32
23
  });
24
+ // --- Init ---
25
+ program
26
+ .command('init')
27
+ .description('Interactive setup wizard')
28
+ .action(initCommand);
29
+ // --- Start ---
30
+ program
31
+ .command('start')
32
+ .description('Start the registry server')
33
+ .option('-p, --port <port>', 'HTTP API port')
34
+ .option('-h, --host <host>', 'HTTP API host')
35
+ .option('-c, --config <path>', 'Config file path')
36
+ .action(startCommand);
37
+ // --- Status ---
38
+ program
39
+ .command('status')
40
+ .description('Show server status and tool counts')
41
+ .action(statusCommand);
42
+ // --- Auth ---
43
+ program
44
+ .command('login')
45
+ .description('Login to a team server')
46
+ .action(loginCommand);
47
+ program
48
+ .command('logout')
49
+ .description('Logout and clear credentials')
50
+ .action(logoutCommand);
51
+ program
52
+ .command('whoami')
53
+ .description('Show current user info')
54
+ .action(whoamiCommand);
55
+ // --- Sync ---
56
+ program
57
+ .command('sync')
58
+ .description('Sync team servers to local config')
59
+ .action(syncCommand);
60
+ // --- Server management ---
61
+ const serverCmd = program
62
+ .command('server')
63
+ .description('Manage MCP servers');
64
+ serverCmd
65
+ .command('list')
66
+ .description('List all registered servers')
67
+ .action(serverListCommand);
68
+ serverCmd
69
+ .command('add')
70
+ .description('Register a new MCP server')
71
+ .option('-n, --name <name>', 'Server name')
72
+ .option('-s, --stdio <command>', 'Stdio transport command (e.g., "npx -y @mcp/server")')
73
+ .option('-u, --url <url>', 'Remote server URL (for SSE/HTTP transport)')
74
+ .option('-t, --transport <type>', 'Transport type (sse or streamable-http)', 'sse')
75
+ .option('-e, --env <vars...>', 'Environment variables (KEY=VALUE)')
76
+ .action(serverAddCommand);
77
+ serverCmd
78
+ .command('remove <name>')
79
+ .description('Remove a registered server')
80
+ .action(serverRemoveCommand);
81
+ // --- Tools ---
82
+ const toolsCmd = program
83
+ .command('tools')
84
+ .description('Discover and search tools');
85
+ toolsCmd
86
+ .command('list')
87
+ .description('List all discovered tools')
88
+ .option('-s, --server <names>', 'Filter by server name(s), comma-separated')
89
+ .action(toolsListCommand);
90
+ toolsCmd
91
+ .command('search <query>')
92
+ .description('Search for tools')
93
+ .option('-l, --limit <n>', 'Max results', '10')
94
+ .option('-s, --server <names>', 'Filter by server name(s), comma-separated')
95
+ .action(toolsSearchCommand);
96
+ // --- Context ---
97
+ const contextCmd = program
98
+ .command('context')
99
+ .description('Manage context documents');
100
+ contextCmd
101
+ .command('add <files>')
102
+ .description('Upload files as context documents')
103
+ .action(contextAddCommand);
104
+ contextCmd
105
+ .command('list')
106
+ .description('List all context documents')
107
+ .action(contextListCommand);
108
+ contextCmd
109
+ .command('search <query>')
110
+ .description('Search context documents')
111
+ .action(contextSearchCommand);
112
+ contextCmd
113
+ .command('remove <id>')
114
+ .description('Remove a context document')
115
+ .action(contextRemoveCommand);
116
+ // --- Admin ---
117
+ const adminCmd = program
118
+ .command('admin')
119
+ .description('Team administration commands');
120
+ adminCmd
121
+ .command('init')
122
+ .description('Initialize team with admin user')
123
+ .action(adminInitCommand);
124
+ adminCmd
125
+ .command('stats')
126
+ .description('Show usage statistics')
127
+ .action(adminStatsCommand);
128
+ adminCmd
129
+ .command('users')
130
+ .description('List team members')
131
+ .action(adminUsersCommand);
132
+ adminCmd
133
+ .command('invite <email>')
134
+ .description('Invite a user to the team')
135
+ .action(adminInviteCommand);
136
+ adminCmd
137
+ .command('limits')
138
+ .description('Manage rate limits')
139
+ .option('--set <value>', 'Set a rate limit (format: role:limit_type:max_value)')
140
+ .option('--list', 'List all rate limits')
141
+ .action(adminLimitsCommand);
142
+ adminCmd
143
+ .command('permissions')
144
+ .description('Manage tool permissions')
145
+ .option('--set <value>', 'Set a permission (format: role:server:tool:permission)')
146
+ .option('--list', 'List all permissions')
147
+ .action(adminPermissionsCommand);
148
+ // --- Health ---
149
+ program
150
+ .command('health')
151
+ .description('Health check all servers')
152
+ .option('-s, --server <name>', 'Check specific server')
153
+ .action(healthCommand);
154
+ // Show banner on bare `opalserve` with no args
155
+ if (process.argv.length <= 2) {
156
+ showBanner();
157
+ }
158
+ program.parse();
33
159
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,eAAe,CAAC;AAEvB,MAAM,MAAM,GAAmB;IAC7B,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC;IAC9C,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,WAAW;IACrC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,iCAAiC;IACtE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;IAC3B,mBAAmB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,IAAI,EAAE,EAAE,CAAC;IAC7E,kBAAkB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,QAAQ,EAAE,EAAE,CAAC;IAC9E,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM;CAC/C,CAAC;AAEF,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AAE1C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;IAC9B,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;IAC/B,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,GAAG,CAAC;;;;;;CAMX,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC7B,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function showBanner(): void;
2
+ export declare function showMiniBanner(): void;
3
+ export declare function showBox(content: string, title?: string): void;
4
+ export declare function showSuccess(message: string): void;
5
+ export declare function showError(message: string): void;
6
+ export declare function showWarning(message: string): void;
7
+ export declare function showInfo(message: string): void;
8
+ //# sourceMappingURL=banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/banner.ts"],"names":[],"mappings":"AAoBA,wBAAgB,UAAU,IAAI,IAAI,CASjC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAIrC;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAS7D;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C"}
@@ -0,0 +1,54 @@
1
+ import chalk from 'chalk';
2
+ import gradient from 'gradient-string';
3
+ import boxen from 'boxen';
4
+ const ASCII_LOGO = `
5
+ ██████╗ ██████╗ █████╗ ██╗
6
+ ██╔═══██╗██╔══██╗██╔══██╗██║
7
+ ██║ ██║██████╔╝███████║██║
8
+ ██║ ██║██╔═══╝ ██╔══██║██║
9
+ ╚██████╔╝██║ ██║ ██║███████╗
10
+ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝
11
+ ███████╗███████╗██████╗ ██╗ ██╗███████╗
12
+ ██╔════╝██╔════╝██╔══██╗██║ ██║██╔════╝
13
+ ███████╗█████╗ ██████╔╝██║ ██║█████╗
14
+ ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██╔══╝
15
+ ███████║███████╗██║ ██║ ╚████╔╝ ███████╗
16
+ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚══════╝`;
17
+ const opalGradient = gradient(['#F59E0B', '#F97316', '#EF4444', '#8B5CF6']);
18
+ export function showBanner() {
19
+ const banner = opalGradient.multiline(ASCII_LOGO);
20
+ const version = chalk.dim('v3.0.0');
21
+ const tagline = chalk.gray('Local MCP Tool Registry & Discovery Hub');
22
+ console.log('');
23
+ console.log(banner);
24
+ console.log(` ${tagline} ${version}`);
25
+ console.log('');
26
+ }
27
+ export function showMiniBanner() {
28
+ const title = opalGradient('OpalServe');
29
+ const version = chalk.dim('v3.0.0');
30
+ console.log(`\n ${title} ${version}\n`);
31
+ }
32
+ export function showBox(content, title) {
33
+ console.log(boxen(content, {
34
+ padding: 1,
35
+ margin: { top: 0, bottom: 1, left: 2, right: 2 },
36
+ borderStyle: 'round',
37
+ borderColor: '#F97316',
38
+ title,
39
+ titleAlignment: 'left',
40
+ }));
41
+ }
42
+ export function showSuccess(message) {
43
+ console.log(` ${chalk.green('✓')} ${message}`);
44
+ }
45
+ export function showError(message) {
46
+ console.log(` ${chalk.red('✗')} ${message}`);
47
+ }
48
+ export function showWarning(message) {
49
+ console.log(` ${chalk.yellow('!')} ${message}`);
50
+ }
51
+ export function showInfo(message) {
52
+ console.log(` ${chalk.blue('i')} ${message}`);
53
+ }
54
+ //# sourceMappingURL=banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../../src/cli/ui/banner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,GAAG;;;;;;;;;;;;6CAY0B,CAAC;AAE9C,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAE5E,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAEtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,KAAK,OAAO,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,OAAO,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,KAAc;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE;QACzB,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QAChD,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,SAAS;QACtB,KAAK;QACL,cAAc,EAAE,MAAM;KACvB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare function promptServerName(): Promise<string>;
2
+ export declare function promptTransportType(): Promise<'stdio' | 'sse' | 'streamable-http'>;
3
+ export declare function promptStdioCommand(): Promise<{
4
+ command: string;
5
+ args: string[];
6
+ }>;
7
+ export declare function promptUrl(): Promise<string>;
8
+ export declare function promptEnvVars(): Promise<Record<string, string>>;
9
+ export declare function promptConfirm(message: string, defaultValue?: boolean): Promise<boolean>;
10
+ export declare function promptPort(): Promise<number>;
11
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/prompts.ts"],"names":[],"mappings":"AAEA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAKxD;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,GAAG,KAAK,GAAG,iBAAiB,CAAC,CASxF;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAYvF;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAYjD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAoBrE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1F;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAUlD"}
@@ -0,0 +1,74 @@
1
+ import { input, select, confirm } from '@inquirer/prompts';
2
+ export async function promptServerName() {
3
+ return input({
4
+ message: 'Server name (lowercase, hyphens ok):',
5
+ validate: (val) => /^[a-z0-9-]+$/.test(val) || 'Must be lowercase alphanumeric with hyphens',
6
+ });
7
+ }
8
+ export async function promptTransportType() {
9
+ return select({
10
+ message: 'Transport type:',
11
+ choices: [
12
+ { value: 'stdio', name: 'stdio — Local process (most common)' },
13
+ { value: 'sse', name: 'SSE — Remote HTTP+SSE endpoint' },
14
+ { value: 'streamable-http', name: 'Streamable HTTP — Remote HTTP endpoint' },
15
+ ],
16
+ });
17
+ }
18
+ export async function promptStdioCommand() {
19
+ const command = await input({
20
+ message: 'Command to run:',
21
+ default: 'npx',
22
+ });
23
+ const argsStr = await input({
24
+ message: 'Arguments (space-separated):',
25
+ default: '-y @modelcontextprotocol/server-filesystem .',
26
+ });
27
+ return { command, args: argsStr.split(/\s+/).filter(Boolean) };
28
+ }
29
+ export async function promptUrl() {
30
+ return input({
31
+ message: 'Server URL:',
32
+ validate: (val) => {
33
+ try {
34
+ new URL(val);
35
+ return true;
36
+ }
37
+ catch {
38
+ return 'Must be a valid URL';
39
+ }
40
+ },
41
+ });
42
+ }
43
+ export async function promptEnvVars() {
44
+ const env = {};
45
+ let addMore = await confirm({
46
+ message: 'Add environment variables?',
47
+ default: false,
48
+ });
49
+ while (addMore) {
50
+ const name = await input({ message: 'Variable name:' });
51
+ const value = await input({ message: `Value for ${name}:` });
52
+ env[name] = value;
53
+ addMore = await confirm({
54
+ message: 'Add another variable?',
55
+ default: false,
56
+ });
57
+ }
58
+ return env;
59
+ }
60
+ export async function promptConfirm(message, defaultValue = true) {
61
+ return confirm({ message, default: defaultValue });
62
+ }
63
+ export async function promptPort() {
64
+ const portStr = await input({
65
+ message: 'HTTP API port:',
66
+ default: '3456',
67
+ validate: (val) => {
68
+ const n = parseInt(val, 10);
69
+ return (n >= 1 && n <= 65535) || 'Must be 1-65535';
70
+ },
71
+ });
72
+ return parseInt(portStr, 10);
73
+ }
74
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/cli/ui/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ConnectedServer, IndexedTool, SearchResult } from '../../types/index.js';
2
+ export declare function renderServerTable(servers: ConnectedServer[]): string;
3
+ export declare function renderToolList(tools: IndexedTool[]): string;
4
+ export declare function renderSearchResults(results: SearchResult[]): string;
5
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/table.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAyBvF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAiCpE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAwB3D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CA2BnE"}
@@ -0,0 +1,103 @@
1
+ import chalk from 'chalk';
2
+ import Table from 'cli-table3';
3
+ const STATUS_COLORS = {
4
+ connected: chalk.green,
5
+ connecting: chalk.yellow,
6
+ disconnected: chalk.gray,
7
+ error: chalk.red,
8
+ };
9
+ function colorStatus(status) {
10
+ const colorFn = STATUS_COLORS[status] || chalk.white;
11
+ return colorFn(status);
12
+ }
13
+ function timeAgo(dateStr) {
14
+ const now = Date.now();
15
+ const then = new Date(dateStr).getTime();
16
+ const diffSec = Math.floor((now - then) / 1000);
17
+ if (diffSec < 60)
18
+ return `${diffSec}s ago`;
19
+ if (diffSec < 3600)
20
+ return `${Math.floor(diffSec / 60)}m ago`;
21
+ if (diffSec < 86400)
22
+ return `${Math.floor(diffSec / 3600)}h ago`;
23
+ return `${Math.floor(diffSec / 86400)}d ago`;
24
+ }
25
+ export function renderServerTable(servers) {
26
+ if (servers.length === 0) {
27
+ return chalk.gray(' No servers registered. Run `opalserve server add` to add one.');
28
+ }
29
+ const table = new Table({
30
+ head: [
31
+ chalk.bold('Name'),
32
+ chalk.bold('Transport'),
33
+ chalk.bold('Tools'),
34
+ chalk.bold('Status'),
35
+ chalk.bold('Last Seen'),
36
+ ],
37
+ style: { head: [], border: ['gray'] },
38
+ chars: {
39
+ 'top': '─', 'top-mid': '┬', 'top-left': '┌', 'top-right': '┐',
40
+ 'bottom': '─', 'bottom-mid': '┴', 'bottom-left': '└', 'bottom-right': '┘',
41
+ 'left': '│', 'left-mid': '├', 'mid': '─', 'mid-mid': '┼',
42
+ 'right': '│', 'right-mid': '┤', 'middle': '│',
43
+ },
44
+ });
45
+ for (const server of servers) {
46
+ table.push([
47
+ chalk.white(server.name),
48
+ chalk.dim(server.transport),
49
+ chalk.cyan(String(server.toolCount)),
50
+ colorStatus(server.status),
51
+ server.lastSeen ? chalk.dim(timeAgo(server.lastSeen)) : chalk.dim('never'),
52
+ ]);
53
+ }
54
+ return table.toString();
55
+ }
56
+ export function renderToolList(tools) {
57
+ if (tools.length === 0) {
58
+ return chalk.gray(' No tools discovered. Connect a server first.');
59
+ }
60
+ // Group by server
61
+ const grouped = new Map();
62
+ for (const tool of tools) {
63
+ const existing = grouped.get(tool.serverName) || [];
64
+ existing.push(tool);
65
+ grouped.set(tool.serverName, existing);
66
+ }
67
+ const lines = [];
68
+ for (const [serverName, serverTools] of grouped) {
69
+ lines.push(`\n ${chalk.bold.white(serverName)} ${chalk.dim(`(${serverTools.length} tools)`)}`);
70
+ for (const tool of serverTools) {
71
+ const name = chalk.cyan(tool.name.padEnd(26));
72
+ const desc = chalk.gray(tool.description || '');
73
+ lines.push(` ${name}${desc}`);
74
+ }
75
+ }
76
+ return lines.join('\n');
77
+ }
78
+ export function renderSearchResults(results) {
79
+ if (results.length === 0) {
80
+ return chalk.gray(' No results found.');
81
+ }
82
+ const table = new Table({
83
+ head: [
84
+ chalk.bold('Rank'),
85
+ chalk.bold('Tool'),
86
+ chalk.bold('Server'),
87
+ chalk.bold('Description'),
88
+ ],
89
+ style: { head: [], border: ['gray'] },
90
+ colWidths: [8, 28, 18, 44],
91
+ wordWrap: true,
92
+ });
93
+ results.forEach((result, index) => {
94
+ table.push([
95
+ chalk.yellow(`#${index + 1}`),
96
+ chalk.cyan(result.tool.name),
97
+ chalk.dim(result.tool.serverName),
98
+ chalk.gray(result.tool.description || ''),
99
+ ]);
100
+ });
101
+ return table.toString();
102
+ }
103
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/cli/ui/table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ interface StoredCredentials {
2
+ serverUrl: string;
3
+ apiKey: string;
4
+ teamId?: string;
5
+ }
6
+ export declare function saveCredentials(creds: StoredCredentials): void;
7
+ export declare function loadCredentials(): StoredCredentials | null;
8
+ export declare function clearCredentials(): void;
9
+ export {};
10
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/config/credentials.ts"],"names":[],"mappings":"AAIA,UAAU,iBAAiB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAI9D;AAED,wBAAgB,eAAe,IAAI,iBAAiB,GAAG,IAAI,CAY1D;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAKvC"}
@@ -0,0 +1,33 @@
1
+ import { readFileSync, writeFileSync, mkdirSync, unlinkSync, existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ function getCredentialsPath() {
5
+ return join(homedir(), '.opalserve', 'credentials.json');
6
+ }
7
+ export function saveCredentials(creds) {
8
+ const filePath = getCredentialsPath();
9
+ mkdirSync(join(homedir(), '.opalserve'), { recursive: true });
10
+ writeFileSync(filePath, JSON.stringify(creds, null, 2), { mode: 0o600 });
11
+ }
12
+ export function loadCredentials() {
13
+ const filePath = getCredentialsPath();
14
+ if (!existsSync(filePath))
15
+ return null;
16
+ try {
17
+ const raw = readFileSync(filePath, 'utf-8');
18
+ const parsed = JSON.parse(raw);
19
+ if (!parsed.serverUrl || !parsed.apiKey)
20
+ return null;
21
+ return parsed;
22
+ }
23
+ catch {
24
+ return null;
25
+ }
26
+ }
27
+ export function clearCredentials() {
28
+ const filePath = getCredentialsPath();
29
+ if (existsSync(filePath)) {
30
+ unlinkSync(filePath);
31
+ }
32
+ }
33
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/config/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAQlC,SAAS,kBAAkB;IACzB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAwB;IACtD,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsB,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACrD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { OpalServeConfig } from '../types/index.js';
2
+ export declare function getConfigDir(): string;
3
+ export declare function getDefaultDbPath(): string;
4
+ export declare function getDefaultConfig(): OpalServeConfig;
5
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIzD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,gBAAgB,IAAI,eAAe,CASlD"}
@@ -0,0 +1,20 @@
1
+ import { homedir } from 'node:os';
2
+ import { join } from 'node:path';
3
+ const OPALSERVE_DIR = join(homedir(), '.opalserve');
4
+ export function getConfigDir() {
5
+ return OPALSERVE_DIR;
6
+ }
7
+ export function getDefaultDbPath() {
8
+ return join(OPALSERVE_DIR, 'data.db');
9
+ }
10
+ export function getDefaultConfig() {
11
+ return {
12
+ mode: 'local',
13
+ servers: [],
14
+ gateway: { port: 3456, host: '127.0.0.1' },
15
+ storage: { path: '' },
16
+ logging: { level: 'info' },
17
+ team: {},
18
+ };
19
+ }
20
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AAEpD,MAAM,UAAU,YAAY;IAC1B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;QAC1C,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACrB,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;QAC1B,IAAI,EAAE,EAAE;KACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { OpalServeConfig } from '../types/index.js';
2
+ export declare function loadConfig(searchFrom?: string): Promise<OpalServeConfig>;
3
+ export declare function loadConfigFromPath(configPath: string): Promise<OpalServeConfig>;
4
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIzD,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA8C9E;AAED,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CASrF"}