@agent-native/core 0.4.2 → 0.4.3
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.
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +9 -3
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/types.d.ts +2 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/application-state/emitter.d.ts +10 -0
- package/dist/application-state/emitter.d.ts.map +1 -0
- package/dist/application-state/emitter.js +18 -0
- package/dist/application-state/emitter.js.map +1 -0
- package/dist/application-state/handlers.d.ts +20 -0
- package/dist/application-state/handlers.d.ts.map +1 -0
- package/dist/application-state/handlers.js +94 -0
- package/dist/application-state/handlers.js.map +1 -0
- package/dist/application-state/index.d.ts +5 -0
- package/dist/application-state/index.d.ts.map +1 -0
- package/dist/application-state/index.js +9 -0
- package/dist/application-state/index.js.map +1 -0
- package/dist/application-state/script-helpers.d.ts +17 -0
- package/dist/application-state/script-helpers.d.ts.map +1 -0
- package/dist/application-state/script-helpers.js +28 -0
- package/dist/application-state/script-helpers.js.map +1 -0
- package/dist/application-state/store.d.ts +9 -0
- package/dist/application-state/store.d.ts.map +1 -0
- package/dist/application-state/store.js +93 -0
- package/dist/application-state/store.js.map +1 -0
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +38 -24
- package/dist/cli/create.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +53 -0
- package/dist/client/AgentPanel.d.ts.map +1 -0
- package/dist/client/AgentPanel.js +70 -0
- package/dist/client/AgentPanel.js.map +1 -0
- package/dist/client/AssistantChat.d.ts +27 -0
- package/dist/client/AssistantChat.d.ts.map +1 -0
- package/dist/client/AssistantChat.js +165 -0
- package/dist/client/AssistantChat.js.map +1 -0
- package/dist/client/ErrorBoundary.d.ts +4 -0
- package/dist/client/ErrorBoundary.d.ts.map +1 -0
- package/dist/client/ErrorBoundary.js +22 -0
- package/dist/client/ErrorBoundary.js.map +1 -0
- package/dist/client/MultiTabAssistantChat.d.ts +4 -0
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -0
- package/dist/client/MultiTabAssistantChat.js +125 -0
- package/dist/client/MultiTabAssistantChat.js.map +1 -0
- package/dist/client/ProductionAgentPanel.d.ts +3 -7
- package/dist/client/ProductionAgentPanel.d.ts.map +1 -1
- package/dist/client/ProductionAgentPanel.js +3 -118
- package/dist/client/ProductionAgentPanel.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts +10 -0
- package/dist/client/agent-chat-adapter.d.ts.map +1 -0
- package/dist/client/agent-chat-adapter.js +235 -0
- package/dist/client/agent-chat-adapter.js.map +1 -0
- package/dist/client/agent-chat.d.ts +9 -1
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +11 -1
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/index.d.ts +8 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +9 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/terminal/AgentTerminal.d.ts +35 -0
- package/dist/client/terminal/AgentTerminal.d.ts.map +1 -0
- package/dist/client/terminal/AgentTerminal.js +346 -0
- package/dist/client/terminal/AgentTerminal.js.map +1 -0
- package/dist/client/terminal/index.d.ts +7 -0
- package/dist/client/terminal/index.d.ts.map +1 -0
- package/dist/client/terminal/index.js +7 -0
- package/dist/client/terminal/index.js.map +1 -0
- package/dist/client/use-agent-chat.d.ts +1 -1
- package/dist/client/use-agent-chat.d.ts.map +1 -1
- package/dist/client/use-agent-chat.js +1 -1
- package/dist/client/use-agent-chat.js.map +1 -1
- package/dist/client/useProductionAgent.d.ts +6 -1
- package/dist/client/useProductionAgent.d.ts.map +1 -1
- package/dist/client/useProductionAgent.js +4 -2
- package/dist/client/useProductionAgent.js.map +1 -1
- package/dist/db/create-get-db.d.ts +3 -0
- package/dist/db/create-get-db.d.ts.map +1 -0
- package/dist/db/create-get-db.js +18 -0
- package/dist/db/create-get-db.js.map +1 -0
- package/dist/db/index.d.ts +2 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +2 -0
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrations.d.ts +7 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +35 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/oauth-tokens/index.d.ts +2 -0
- package/dist/oauth-tokens/index.d.ts.map +1 -0
- package/dist/oauth-tokens/index.js +2 -0
- package/dist/oauth-tokens/index.js.map +1 -0
- package/dist/oauth-tokens/store.d.ts +9 -0
- package/dist/oauth-tokens/store.d.ts.map +1 -0
- package/dist/oauth-tokens/store.js +90 -0
- package/dist/oauth-tokens/store.js.map +1 -0
- package/dist/scripts/db/exec.d.ts.map +1 -1
- package/dist/scripts/db/exec.js +31 -16
- package/dist/scripts/db/exec.js.map +1 -1
- package/dist/scripts/db/query.d.ts.map +1 -1
- package/dist/scripts/db/query.js +24 -8
- package/dist/scripts/db/query.js.map +1 -1
- package/dist/scripts/db/schema.d.ts.map +1 -1
- package/dist/scripts/db/schema.js +56 -28
- package/dist/scripts/db/schema.js.map +1 -1
- package/dist/scripts/dev/index.d.ts +15 -0
- package/dist/scripts/dev/index.d.ts.map +1 -0
- package/dist/scripts/dev/index.js +118 -0
- package/dist/scripts/dev/index.js.map +1 -0
- package/dist/scripts/dev/list-files.d.ts +5 -0
- package/dist/scripts/dev/list-files.d.ts.map +1 -0
- package/dist/scripts/dev/list-files.js +102 -0
- package/dist/scripts/dev/list-files.js.map +1 -0
- package/dist/scripts/dev/read-file.d.ts +5 -0
- package/dist/scripts/dev/read-file.d.ts.map +1 -0
- package/dist/scripts/dev/read-file.js +68 -0
- package/dist/scripts/dev/read-file.js.map +1 -0
- package/dist/scripts/dev/search-files.d.ts +5 -0
- package/dist/scripts/dev/search-files.d.ts.map +1 -0
- package/dist/scripts/dev/search-files.js +133 -0
- package/dist/scripts/dev/search-files.js.map +1 -0
- package/dist/scripts/dev/shell.d.ts +5 -0
- package/dist/scripts/dev/shell.d.ts.map +1 -0
- package/dist/scripts/dev/shell.js +65 -0
- package/dist/scripts/dev/shell.js.map +1 -0
- package/dist/scripts/dev/write-file.d.ts +5 -0
- package/dist/scripts/dev/write-file.d.ts.map +1 -0
- package/dist/scripts/dev/write-file.js +50 -0
- package/dist/scripts/dev/write-file.js.map +1 -0
- package/dist/scripts/index.d.ts +1 -0
- package/dist/scripts/index.d.ts.map +1 -1
- package/dist/scripts/index.js +1 -0
- package/dist/scripts/index.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +43 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -0
- package/dist/server/agent-chat-plugin.js +92 -0
- package/dist/server/agent-chat-plugin.js.map +1 -0
- package/dist/server/auth-plugin.d.ts +6 -0
- package/dist/server/auth-plugin.d.ts.map +1 -0
- package/dist/server/auth-plugin.js +8 -0
- package/dist/server/auth-plugin.js.map +1 -0
- package/dist/server/auth.d.ts +18 -2
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +103 -46
- package/dist/server/auth.js.map +1 -1
- package/dist/server/create-server.d.ts +7 -0
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +7 -1
- package/dist/server/create-server.js.map +1 -1
- package/dist/server/default-watcher.d.ts +17 -0
- package/dist/server/default-watcher.d.ts.map +1 -0
- package/dist/server/default-watcher.js +37 -0
- package/dist/server/default-watcher.js.map +1 -0
- package/dist/server/file-sync-plugin.d.ts +7 -0
- package/dist/server/file-sync-plugin.d.ts.map +1 -0
- package/dist/server/file-sync-plugin.js +38 -0
- package/dist/server/file-sync-plugin.js.map +1 -0
- package/dist/server/google-auth-plugin.d.ts +22 -0
- package/dist/server/google-auth-plugin.d.ts.map +1 -0
- package/dist/server/google-auth-plugin.js +122 -0
- package/dist/server/google-auth-plugin.js.map +1 -0
- package/dist/server/index.d.ts +9 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +9 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/sse.d.ts +9 -4
- package/dist/server/sse.d.ts.map +1 -1
- package/dist/server/sse.js +19 -12
- package/dist/server/sse.js.map +1 -1
- package/dist/settings/handlers.d.ts +9 -0
- package/dist/settings/handlers.d.ts.map +1 -0
- package/dist/settings/handlers.js +29 -0
- package/dist/settings/handlers.js.map +1 -0
- package/dist/settings/index.d.ts +5 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +9 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/script-helpers.d.ts +9 -0
- package/dist/settings/script-helpers.d.ts.map +1 -0
- package/dist/settings/script-helpers.js +16 -0
- package/dist/settings/script-helpers.js.map +1 -0
- package/dist/settings/store.d.ts +7 -0
- package/dist/settings/store.d.ts.map +1 -0
- package/dist/settings/store.js +88 -0
- package/dist/settings/store.js.map +1 -0
- package/dist/settings/user-settings.d.ts +21 -0
- package/dist/settings/user-settings.d.ts.map +1 -0
- package/dist/settings/user-settings.js +35 -0
- package/dist/settings/user-settings.js.map +1 -0
- package/dist/tailwind.preset.js +1 -1
- package/dist/tailwind.preset.js.map +1 -1
- package/dist/terminal/cli-registry.d.ts +16 -0
- package/dist/terminal/cli-registry.d.ts.map +1 -0
- package/dist/terminal/cli-registry.js +42 -0
- package/dist/terminal/cli-registry.js.map +1 -0
- package/dist/terminal/index.d.ts +9 -0
- package/dist/terminal/index.d.ts.map +1 -0
- package/dist/terminal/index.js +9 -0
- package/dist/terminal/index.js.map +1 -0
- package/dist/terminal/pty-server.d.ts +31 -0
- package/dist/terminal/pty-server.d.ts.map +1 -0
- package/dist/terminal/pty-server.js +252 -0
- package/dist/terminal/pty-server.js.map +1 -0
- package/dist/terminal/terminal-plugin.d.ts +23 -0
- package/dist/terminal/terminal-plugin.d.ts.map +1 -0
- package/dist/terminal/terminal-plugin.js +90 -0
- package/dist/terminal/terminal-plugin.js.map +1 -0
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +19 -1
- package/dist/vite/client.js.map +1 -1
- package/dist/vite/dev-api-server.d.ts.map +1 -1
- package/dist/vite/dev-api-server.js +12 -0
- package/dist/vite/dev-api-server.js.map +1 -1
- package/package.json +50 -4
- package/src/templates/default/.agents/skills/create-skill/SKILL.md +1 -1
- package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +3 -3
- package/src/templates/default/.agents/skills/files-as-database/SKILL.md +82 -63
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +2 -2
- package/src/templates/default/.agents/skills/scripts/SKILL.md +20 -17
- package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +2 -2
- package/src/templates/default/.agents/skills/sse-file-watcher/SKILL.md +49 -64
- package/src/templates/default/.ignore +0 -0
- package/src/templates/default/AGENTS.md +30 -55
- package/src/templates/default/app/global.css +95 -0
- package/src/templates/default/{client → app}/root.tsx +22 -9
- package/src/templates/default/app/routes/_index.tsx +62 -0
- package/src/templates/default/application-state/.gitkeep +0 -0
- package/src/templates/default/components.json +1 -1
- package/src/templates/default/data/sync-config.json +1 -0
- package/src/templates/default/package.json +2 -1
- package/src/templates/default/react-router.config.ts +1 -1
- package/src/templates/default/scripts/run.ts +1 -8
- package/src/templates/default/server/plugins/agent-chat.ts +1 -0
- package/src/templates/default/server/plugins/auth.ts +1 -5
- package/src/templates/default/server/plugins/file-sync.ts +1 -39
- package/src/templates/default/server/plugins/terminal.ts +1 -0
- package/src/templates/default/server/routes/api/events.get.ts +2 -6
- package/src/templates/default/server/routes/api/file-sync/status.get.ts +2 -11
- package/src/templates/default/tailwind.config.ts +1 -1
- package/src/templates/default/tsconfig.json +1 -1
- package/tsconfig.base.json +2 -2
- package/src/templates/default/client/App.tsx +0 -56
- package/src/templates/default/client/global.css +0 -75
- package/src/templates/default/client/routes/_index.tsx +0 -19
- package/src/templates/default/server/lib/watcher.ts +0 -21
- /package/src/templates/default/{client → app}/entry.client.tsx +0 -0
- /package/src/templates/default/{client → app}/entry.server.tsx +0 -0
- /package/src/templates/default/{client → app}/lib/utils.ts +0 -0
- /package/src/templates/default/{client → app}/routes.ts +0 -0
- /package/src/templates/default/{client → app}/vite-env.d.ts +0 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
type NitroPluginDef = (nitroApp: any) => void | Promise<void>;
|
|
2
|
+
export interface GoogleAuthPluginOptions {
|
|
3
|
+
/** Additional paths accessible without authentication */
|
|
4
|
+
publicPaths?: string[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Create an auth plugin that uses Google OAuth for authentication.
|
|
8
|
+
*
|
|
9
|
+
* When a user visits the app unauthenticated, they see a "Sign in with Google"
|
|
10
|
+
* page. The Google OAuth callback (handled by the template) creates a session
|
|
11
|
+
* tied to the user's Google email. `getSession()` then returns `{ email }` for
|
|
12
|
+
* all subsequent requests.
|
|
13
|
+
*
|
|
14
|
+
* Usage in a template's `server/plugins/auth.ts`:
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { createGoogleAuthPlugin } from "@agent-native/core/server";
|
|
17
|
+
* export default createGoogleAuthPlugin();
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function createGoogleAuthPlugin(options?: GoogleAuthPluginOptions): NitroPluginDef;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=google-auth-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-auth-plugin.d.ts","sourceRoot":"","sources":["../../src/server/google-auth-plugin.ts"],"names":[],"mappings":"AAIA,KAAK,cAAc,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IACtC,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAwFD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,CAAC,EAAE,uBAAuB,GAChC,cAAc,CAgBhB"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { getCookie } from "h3";
|
|
2
|
+
import { createAuthPlugin } from "./auth-plugin.js";
|
|
3
|
+
import { getSessionEmail } from "./auth.js";
|
|
4
|
+
const GOOGLE_LOGIN_HTML = `<!DOCTYPE html>
|
|
5
|
+
<html lang="en">
|
|
6
|
+
<head>
|
|
7
|
+
<meta charset="UTF-8">
|
|
8
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
9
|
+
<title>Sign in</title>
|
|
10
|
+
<style>
|
|
11
|
+
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
|
12
|
+
body {
|
|
13
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
14
|
+
background: #0a0a0a;
|
|
15
|
+
color: #e5e5e5;
|
|
16
|
+
display: flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
justify-content: center;
|
|
19
|
+
min-height: 100vh;
|
|
20
|
+
}
|
|
21
|
+
.card {
|
|
22
|
+
width: 100%;
|
|
23
|
+
max-width: 360px;
|
|
24
|
+
padding: 2rem;
|
|
25
|
+
background: #141414;
|
|
26
|
+
border: 1px solid rgba(255,255,255,0.08);
|
|
27
|
+
border-radius: 12px;
|
|
28
|
+
text-align: center;
|
|
29
|
+
}
|
|
30
|
+
h1 { font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem; color: #fff; }
|
|
31
|
+
.subtitle { font-size: 0.8125rem; color: #888; margin-bottom: 1.5rem; }
|
|
32
|
+
button {
|
|
33
|
+
width: 100%;
|
|
34
|
+
display: flex;
|
|
35
|
+
align-items: center;
|
|
36
|
+
justify-content: center;
|
|
37
|
+
gap: 0.625rem;
|
|
38
|
+
padding: 0.625rem;
|
|
39
|
+
background: #fff;
|
|
40
|
+
color: #000;
|
|
41
|
+
border: none;
|
|
42
|
+
border-radius: 8px;
|
|
43
|
+
font-size: 0.9375rem;
|
|
44
|
+
font-weight: 500;
|
|
45
|
+
cursor: pointer;
|
|
46
|
+
}
|
|
47
|
+
button:hover { opacity: 0.85; }
|
|
48
|
+
button:disabled { opacity: 0.5; cursor: wait; }
|
|
49
|
+
.error { margin-top: 0.75rem; font-size: 0.8125rem; color: #f87171; display: none; }
|
|
50
|
+
.error.show { display: block; }
|
|
51
|
+
svg { width: 18px; height: 18px; }
|
|
52
|
+
</style>
|
|
53
|
+
</head>
|
|
54
|
+
<body>
|
|
55
|
+
<div class="card">
|
|
56
|
+
<h1>Sign in</h1>
|
|
57
|
+
<p class="subtitle">Continue with your Google account</p>
|
|
58
|
+
<button id="btn" onclick="signIn()">
|
|
59
|
+
<svg viewBox="0 0 24 24"><path fill="#4285F4" d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z"/><path fill="#34A853" d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"/><path fill="#FBBC05" d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"/><path fill="#EA4335" d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"/></svg>
|
|
60
|
+
Sign in with Google
|
|
61
|
+
</button>
|
|
62
|
+
<p class="error" id="err"></p>
|
|
63
|
+
</div>
|
|
64
|
+
<script>
|
|
65
|
+
async function signIn() {
|
|
66
|
+
var btn = document.getElementById('btn');
|
|
67
|
+
var err = document.getElementById('err');
|
|
68
|
+
btn.disabled = true;
|
|
69
|
+
err.classList.remove('show');
|
|
70
|
+
try {
|
|
71
|
+
var res = await fetch('/api/google/auth-url');
|
|
72
|
+
var data = await res.json();
|
|
73
|
+
if (data.url) {
|
|
74
|
+
window.location.href = data.url;
|
|
75
|
+
} else {
|
|
76
|
+
err.textContent = data.message || 'Google OAuth is not configured. Set GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET.';
|
|
77
|
+
err.classList.add('show');
|
|
78
|
+
btn.disabled = false;
|
|
79
|
+
}
|
|
80
|
+
} catch (e) {
|
|
81
|
+
err.textContent = 'Failed to connect. Please try again.';
|
|
82
|
+
err.classList.add('show');
|
|
83
|
+
btn.disabled = false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
</script>
|
|
87
|
+
</body>
|
|
88
|
+
</html>`;
|
|
89
|
+
/**
|
|
90
|
+
* Create an auth plugin that uses Google OAuth for authentication.
|
|
91
|
+
*
|
|
92
|
+
* When a user visits the app unauthenticated, they see a "Sign in with Google"
|
|
93
|
+
* page. The Google OAuth callback (handled by the template) creates a session
|
|
94
|
+
* tied to the user's Google email. `getSession()` then returns `{ email }` for
|
|
95
|
+
* all subsequent requests.
|
|
96
|
+
*
|
|
97
|
+
* Usage in a template's `server/plugins/auth.ts`:
|
|
98
|
+
* ```ts
|
|
99
|
+
* import { createGoogleAuthPlugin } from "@agent-native/core/server";
|
|
100
|
+
* export default createGoogleAuthPlugin();
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
export function createGoogleAuthPlugin(options) {
|
|
104
|
+
return createAuthPlugin({
|
|
105
|
+
getSession: async (event) => {
|
|
106
|
+
const cookie = getCookie(event, "an_session");
|
|
107
|
+
if (!cookie)
|
|
108
|
+
return null;
|
|
109
|
+
const email = await getSessionEmail(cookie);
|
|
110
|
+
if (!email)
|
|
111
|
+
return null;
|
|
112
|
+
return { email, token: cookie };
|
|
113
|
+
},
|
|
114
|
+
publicPaths: [
|
|
115
|
+
"/api/google/callback",
|
|
116
|
+
"/api/google/auth-url",
|
|
117
|
+
...(options?.publicPaths ?? []),
|
|
118
|
+
],
|
|
119
|
+
loginHtml: GOOGLE_LOGIN_HTML,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=google-auth-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-auth-plugin.js","sourceRoot":"","sources":["../../src/server/google-auth-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAS5C,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAoFlB,CAAC;AAET;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAiC;IAEjC,OAAO,gBAAgB,CAAC;QACtB,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC1B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YACzB,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAClC,CAAC;QACD,WAAW,EAAE;YACX,sBAAsB;YACtB,sBAAsB;YACtB,GAAG,CAAC,OAAO,EAAE,WAAW,IAAI,EAAE,CAAC;SAChC;QACD,SAAS,EAAE,iBAAiB;KAC7B,CAAC,CAAC;AACL,CAAC"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
export { createServer, type CreateServerOptions, type EnvKeyConfig, } from "./create-server.js";
|
|
1
|
+
export { createServer, upsertEnvFile, type CreateServerOptions, type EnvKeyConfig, } from "./create-server.js";
|
|
2
2
|
export { createFileWatcher, createSSEHandler, type FileWatcherOptions, type SSEHandlerOptions, } from "./sse.js";
|
|
3
|
-
export { mountAuthMiddleware, autoMountAuth, getSession, type AuthSession, type AuthOptions, } from "./auth.js";
|
|
3
|
+
export { mountAuthMiddleware, autoMountAuth, getSession, addSession, removeSession, getSessionEmail, type AuthSession, type AuthOptions, } from "./auth.js";
|
|
4
4
|
export { requireEnvKey, type MissingKeyResponse } from "./missing-key.js";
|
|
5
5
|
export { verifyCaptcha, type CaptchaVerifyResult } from "./captcha.js";
|
|
6
6
|
export { createProductionAgentHandler, type ScriptEntry, type ProductionAgentOptions, type ScriptTool, type AgentMessage, type AgentChatRequest, type AgentChatEvent, } from "../agent/index.js";
|
|
7
|
+
export { createDevScriptRegistry } from "../scripts/dev/index.js";
|
|
8
|
+
export { getDefaultSSEEmitters, setDefaultSyncResult, createDefaultSSEHandler, defaultSyncStatusHandler, } from "./default-watcher.js";
|
|
9
|
+
export { createAuthPlugin, defaultAuthPlugin } from "./auth-plugin.js";
|
|
10
|
+
export { createGoogleAuthPlugin, type GoogleAuthPluginOptions, } from "./google-auth-plugin.js";
|
|
11
|
+
export { createAgentChatPlugin, defaultAgentChatPlugin, type AgentChatPluginOptions, } from "./agent-chat-plugin.js";
|
|
12
|
+
export { createFileSyncPlugin, defaultFileSyncPlugin, } from "./file-sync-plugin.js";
|
|
13
|
+
export { createTerminalPlugin, defaultTerminalPlugin, type TerminalPluginOptions, } from "../terminal/terminal-plugin.js";
|
|
7
14
|
type NitroPluginDef = (nitroApp: any) => void | Promise<void>;
|
|
8
15
|
export declare function defineNitroPlugin(def: NitroPluginDef): NitroPluginDef;
|
|
9
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EACL,4BAA4B,EAC5B,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,UAAU,EACV,aAAa,EACb,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EACL,4BAA4B,EAC5B,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EACL,sBAAsB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,gCAAgC,CAAC;AAKxC,KAAK,cAAc,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CAErE"}
|
package/dist/server/index.js
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
export { createServer, } from "./create-server.js";
|
|
1
|
+
export { createServer, upsertEnvFile, } from "./create-server.js";
|
|
2
2
|
export { createFileWatcher, createSSEHandler, } from "./sse.js";
|
|
3
|
-
export { mountAuthMiddleware, autoMountAuth, getSession, } from "./auth.js";
|
|
3
|
+
export { mountAuthMiddleware, autoMountAuth, getSession, addSession, removeSession, getSessionEmail, } from "./auth.js";
|
|
4
4
|
export { requireEnvKey } from "./missing-key.js";
|
|
5
5
|
export { verifyCaptcha } from "./captcha.js";
|
|
6
6
|
export { createProductionAgentHandler, } from "../agent/index.js";
|
|
7
|
+
export { createDevScriptRegistry } from "../scripts/dev/index.js";
|
|
8
|
+
export { getDefaultSSEEmitters, setDefaultSyncResult, createDefaultSSEHandler, defaultSyncStatusHandler, } from "./default-watcher.js";
|
|
9
|
+
export { createAuthPlugin, defaultAuthPlugin } from "./auth-plugin.js";
|
|
10
|
+
export { createGoogleAuthPlugin, } from "./google-auth-plugin.js";
|
|
11
|
+
export { createAgentChatPlugin, defaultAgentChatPlugin, } from "./agent-chat-plugin.js";
|
|
12
|
+
export { createFileSyncPlugin, defaultFileSyncPlugin, } from "./file-sync-plugin.js";
|
|
13
|
+
export { createTerminalPlugin, defaultTerminalPlugin, } from "../terminal/terminal-plugin.js";
|
|
7
14
|
export function defineNitroPlugin(def) {
|
|
8
15
|
return def;
|
|
9
16
|
}
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,GAGd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAGjB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,UAAU,EACV,aAAa,EACb,eAAe,GAGhB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAA2B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAA4B,MAAM,cAAc,CAAC;AACvE,OAAO,EACL,4BAA4B,GAO7B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EACL,sBAAsB,GAEvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GAEtB,MAAM,gCAAgC,CAAC;AAMxC,MAAM,UAAU,iBAAiB,CAAC,GAAmB;IACnD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/server/sse.d.ts
CHANGED
|
@@ -17,19 +17,24 @@ interface EventLike {
|
|
|
17
17
|
off(event: string, listener: (...args: any[]) => void): any;
|
|
18
18
|
}
|
|
19
19
|
export interface SSEHandlerOptions {
|
|
20
|
-
/** Additional EventEmitters to stream events from (e.g.
|
|
20
|
+
/** Additional EventEmitters to stream events from (e.g. DB change events). */
|
|
21
21
|
extraEmitters?: Array<{
|
|
22
22
|
emitter: EventLike;
|
|
23
23
|
event: string;
|
|
24
24
|
}>;
|
|
25
|
+
/** Optional file watcher for streaming file change events (e.g. code modifications). */
|
|
26
|
+
watcher?: FSWatcher;
|
|
25
27
|
/** Content root for computing relative paths. If provided, absolute paths are stripped. */
|
|
26
28
|
contentRoot?: string;
|
|
27
29
|
}
|
|
28
30
|
/**
|
|
29
|
-
* Create an H3 event handler that streams Server-Sent Events
|
|
31
|
+
* Create an H3 event handler that streams Server-Sent Events.
|
|
32
|
+
*
|
|
33
|
+
* Streams events from DB change emitters (application state, settings)
|
|
34
|
+
* and optionally from a file watcher.
|
|
30
35
|
*
|
|
31
36
|
* Usage:
|
|
32
|
-
* router.get("/api/events", createSSEHandler(
|
|
37
|
+
* router.get("/api/events", createSSEHandler({ extraEmitters }));
|
|
33
38
|
*/
|
|
34
|
-
export declare function createSSEHandler(
|
|
39
|
+
export declare function createSSEHandler(options?: SSEHandlerOptions): import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<void>>;
|
|
35
40
|
//# sourceMappingURL=sse.d.ts.map
|
package/dist/server/sse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/server/sse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAKjD,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;IACrC,6FAA6F;IAC7F,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EACtB,OAAO,GAAE,kBAAuB,GAC/B,SAAS,CAKX;AAED,8FAA8F;AAC9F,UAAU,SAAS;IAEjB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,CAAC;IAE3D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,CAAC;CAC7D;AAED,MAAM,WAAW,iBAAiB;IAChC,
|
|
1
|
+
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/server/sse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAKjD,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;IACrC,6FAA6F;IAC7F,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EACtB,OAAO,GAAE,kBAAuB,GAC/B,SAAS,CAKX;AAED,8FAA8F;AAC9F,UAAU,SAAS;IAEjB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,CAAC;IAE3D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,CAAC;CAC7D;AAED,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,wFAAwF;IACxF,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,2FAA2F;IAC3F,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,8EA+F/D"}
|
package/dist/server/sse.js
CHANGED
|
@@ -12,12 +12,15 @@ export function createFileWatcher(dir, options = {}) {
|
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
|
-
* Create an H3 event handler that streams Server-Sent Events
|
|
15
|
+
* Create an H3 event handler that streams Server-Sent Events.
|
|
16
|
+
*
|
|
17
|
+
* Streams events from DB change emitters (application state, settings)
|
|
18
|
+
* and optionally from a file watcher.
|
|
16
19
|
*
|
|
17
20
|
* Usage:
|
|
18
|
-
* router.get("/api/events", createSSEHandler(
|
|
21
|
+
* router.get("/api/events", createSSEHandler({ extraEmitters }));
|
|
19
22
|
*/
|
|
20
|
-
export function createSSEHandler(
|
|
23
|
+
export function createSSEHandler(options = {}) {
|
|
21
24
|
const projectRoot = options.contentRoot
|
|
22
25
|
? path.resolve(options.contentRoot, "..")
|
|
23
26
|
: null;
|
|
@@ -57,15 +60,20 @@ export function createSSEHandler(watcher, options = {}) {
|
|
|
57
60
|
safePush(JSON.stringify(evt));
|
|
58
61
|
}
|
|
59
62
|
};
|
|
60
|
-
|
|
61
|
-
const relPath = projectRoot
|
|
62
|
-
? path.relative(projectRoot, filePath)
|
|
63
|
-
: filePath;
|
|
64
|
-
send({ source: "file", type: eventName, path: relPath });
|
|
65
|
-
};
|
|
66
|
-
watcher.on("all", onChange);
|
|
67
|
-
// Subscribe to extra emitters (sync events already have source field)
|
|
63
|
+
// Subscribe to file watcher if provided
|
|
68
64
|
const cleanups = [];
|
|
65
|
+
if (options.watcher) {
|
|
66
|
+
const watcher = options.watcher;
|
|
67
|
+
const onChange = (eventName, filePath) => {
|
|
68
|
+
const relPath = projectRoot
|
|
69
|
+
? path.relative(projectRoot, filePath)
|
|
70
|
+
: filePath;
|
|
71
|
+
send({ source: "file", type: eventName, path: relPath });
|
|
72
|
+
};
|
|
73
|
+
watcher.on("all", onChange);
|
|
74
|
+
cleanups.push(() => watcher.off("all", onChange));
|
|
75
|
+
}
|
|
76
|
+
// Subscribe to extra emitters (DB change events)
|
|
69
77
|
for (const { emitter, event: evtName } of options.extraEmitters ?? []) {
|
|
70
78
|
const handler = (data) => {
|
|
71
79
|
send(data);
|
|
@@ -98,7 +106,6 @@ export function createSSEHandler(watcher, options = {}) {
|
|
|
98
106
|
if (flushTimer)
|
|
99
107
|
clearTimeout(flushTimer);
|
|
100
108
|
pending.length = 0;
|
|
101
|
-
watcher.off("all", onChange);
|
|
102
109
|
for (const cleanup of cleanups)
|
|
103
110
|
cleanup();
|
|
104
111
|
});
|
package/dist/server/sse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/server/sse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,UAAU,CAAC;AAEjD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AAW3D;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAsB,EACtB,UAA8B,EAAE;IAEhC,OAAO,KAAK,CAAC,GAAG,EAAE;QAChB,aAAa,EAAE,CAAC,OAAO,CAAC,WAAW;QACnC,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;AACL,CAAC;
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/server/sse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,UAAU,CAAC;AAEjD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AAW3D;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAsB,EACtB,UAA8B,EAAE;IAEhC,OAAO,KAAK,CAAC,GAAG,EAAE;QAChB,aAAa,EAAE,CAAC,OAAO,CAAC,WAAW;QACnC,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;AACL,CAAC;AAmBD;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA6B,EAAE;IAC9D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW;QACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;QACzC,CAAC,CAAC,IAAI,CAAC;IAET,OAAO,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAExC,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,6CAA6C;QAC7C,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,OAAO,GAAc,EAAE,CAAC;QAC9B,IAAI,UAAU,GAAyC,IAAI,CAAC;QAE5D,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE;YAChC,IAAI,MAAM;gBAAE,OAAO;YACnB,IAAI,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;YAAC,MAAM,CAAC;gBACP,4EAA4E;YAC9E,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,UAAU,GAAG,IAAI,CAAC;YAClB,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC;QAEF,MAAM,IAAI,GAAG,CAAC,GAAY,EAAE,EAAE;YAC5B,IAAI,MAAM;gBAAE,OAAO;YACnB,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,IAAI,CAAC,UAAU;oBAAE,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC;QAEF,wCAAwC;QACxC,MAAM,QAAQ,GAAsB,EAAE,CAAC;QAEvC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAChC,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAE,QAAgB,EAAE,EAAE;gBACvD,MAAM,OAAO,GAAG,WAAW;oBACzB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC;oBACtC,CAAC,CAAC,QAAQ,CAAC;gBACb,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAC3D,CAAC,CAAC;YACF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,iDAAiD;QACjD,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,OAAO,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;YACtE,MAAM,OAAO,GAAG,CAAC,IAAa,EAAE,EAAE;gBAChC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,CAAC,CAAC;YACF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,iDAAiD;QACjD,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,OAAO,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;YACtD,MAAM,UAAU,GAAG,GAAG,EAAE;gBACtB,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC,CAAC;YACF,MAAM,QAAQ,GAAG,GAAG,EAAE;gBACpB,SAAS,GAAG,KAAK,CAAC;gBAClB,IAAI,UAAU,EAAE,CAAC;oBACf,YAAY,CAAC,UAAU,CAAC,CAAC;oBACzB,UAAU,GAAG,IAAI,CAAC;gBACpB,CAAC;gBACD,KAAK,EAAE,CAAC;YACV,CAAC,CAAC;YACF,OAAO,CAAC,EAAE,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;YAC3C,OAAO,CAAC,EAAE,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;gBACjB,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE;YACnB,MAAM,GAAG,IAAI,CAAC;YACd,IAAI,UAAU;gBAAE,YAAY,CAAC,UAAU,CAAC,CAAC;YACzC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACnB,KAAK,MAAM,OAAO,IAAI,QAAQ;gBAAE,OAAO,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** GET /api/settings/:key */
|
|
2
|
+
export declare const getSettingHandler: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<Record<string, unknown>>>;
|
|
3
|
+
/** PUT /api/settings/:key */
|
|
4
|
+
export declare const putSettingHandler: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<any>>;
|
|
5
|
+
/** DELETE /api/settings/:key */
|
|
6
|
+
export declare const deleteSettingHandler: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<{
|
|
7
|
+
ok: boolean;
|
|
8
|
+
}>>;
|
|
9
|
+
//# sourceMappingURL=handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/settings/handlers.ts"],"names":[],"mappings":"AAaA,6BAA6B;AAC7B,eAAO,MAAM,iBAAiB,+FAQ5B,CAAC;AAEH,6BAA6B;AAC7B,eAAO,MAAM,iBAAiB,2EAK5B,CAAC;AAEH,gCAAgC;AAChC,eAAO,MAAM,oBAAoB;;GAMhC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { defineEventHandler, readBody, getRouterParam, setResponseStatus, } from "h3";
|
|
2
|
+
import { getSetting, putSetting, deleteSetting } from "./store.js";
|
|
3
|
+
function safeKey(key) {
|
|
4
|
+
return key.replace(/[^a-zA-Z0-9_-]/g, "");
|
|
5
|
+
}
|
|
6
|
+
/** GET /api/settings/:key */
|
|
7
|
+
export const getSettingHandler = defineEventHandler(async (event) => {
|
|
8
|
+
const key = safeKey(String(getRouterParam(event, "key")));
|
|
9
|
+
const value = await getSetting(key);
|
|
10
|
+
if (!value) {
|
|
11
|
+
setResponseStatus(event, 404);
|
|
12
|
+
return { error: `No setting for ${key}` };
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
});
|
|
16
|
+
/** PUT /api/settings/:key */
|
|
17
|
+
export const putSettingHandler = defineEventHandler(async (event) => {
|
|
18
|
+
const key = safeKey(String(getRouterParam(event, "key")));
|
|
19
|
+
const body = await readBody(event);
|
|
20
|
+
await putSetting(key, body);
|
|
21
|
+
return body;
|
|
22
|
+
});
|
|
23
|
+
/** DELETE /api/settings/:key */
|
|
24
|
+
export const deleteSettingHandler = defineEventHandler(async (event) => {
|
|
25
|
+
const key = safeKey(String(getRouterParam(event, "key")));
|
|
26
|
+
await deleteSetting(key);
|
|
27
|
+
return { ok: true };
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/settings/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,iBAAiB,GAElB,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEnE,SAAS,OAAO,CAAC,GAAW;IAC1B,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,6BAA6B;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;IAC3E,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,kBAAkB,GAAG,EAAE,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC,CAAC;AAEH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;IAC3E,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC,CAAC,CAAC;AAEH,gCAAgC;AAChC,MAAM,CAAC,MAAM,oBAAoB,GAAG,kBAAkB,CACpD,KAAK,EAAE,KAAc,EAAE,EAAE;IACvB,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC,CACF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { getSetting, putSetting, deleteSetting, getAllSettings, getSettingsEmitter, } from "./store.js";
|
|
2
|
+
export { getSettingHandler, putSettingHandler, deleteSettingHandler, } from "./handlers.js";
|
|
3
|
+
export { readSetting, writeSetting, removeSetting } from "./script-helpers.js";
|
|
4
|
+
export { getUserSetting, putUserSetting, deleteUserSetting, } from "./user-settings.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/settings/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,cAAc,EACd,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAG/E,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Store
|
|
2
|
+
export { getSetting, putSetting, deleteSetting, getAllSettings, getSettingsEmitter, } from "./store.js";
|
|
3
|
+
// H3 route handlers
|
|
4
|
+
export { getSettingHandler, putSettingHandler, deleteSettingHandler, } from "./handlers.js";
|
|
5
|
+
// Script helpers
|
|
6
|
+
export { readSetting, writeSetting, removeSetting } from "./script-helpers.js";
|
|
7
|
+
// User-scoped helpers
|
|
8
|
+
export { getUserSetting, putUserSetting, deleteUserSetting, } from "./user-settings.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/settings/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,OAAO,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,cAAc,EACd,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,oBAAoB;AACpB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAEvB,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE/E,sBAAsB;AACtB,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Settings helpers for use in scripts.
|
|
3
|
+
*
|
|
4
|
+
* Persistent key-value settings stored in the settings SQL table.
|
|
5
|
+
*/
|
|
6
|
+
export declare function readSetting(key: string): Promise<Record<string, unknown> | null>;
|
|
7
|
+
export declare function writeSetting(key: string, value: Record<string, unknown>): Promise<void>;
|
|
8
|
+
export declare function removeSetting(key: string): Promise<boolean>;
|
|
9
|
+
//# sourceMappingURL=script-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-helpers.d.ts","sourceRoot":"","sources":["../../src/settings/script-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAEzC;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEjE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Settings helpers for use in scripts.
|
|
3
|
+
*
|
|
4
|
+
* Persistent key-value settings stored in the settings SQL table.
|
|
5
|
+
*/
|
|
6
|
+
import { getSetting, putSetting, deleteSetting } from "./store.js";
|
|
7
|
+
export async function readSetting(key) {
|
|
8
|
+
return getSetting(key);
|
|
9
|
+
}
|
|
10
|
+
export async function writeSetting(key, value) {
|
|
11
|
+
return putSetting(key, value);
|
|
12
|
+
}
|
|
13
|
+
export async function removeSetting(key) {
|
|
14
|
+
return deleteSetting(key);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=script-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-helpers.js","sourceRoot":"","sources":["../../src/settings/script-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEnE,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAW;IAEX,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAW,EACX,KAA8B;IAE9B,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EventEmitter } from "events";
|
|
2
|
+
export declare function getSettingsEmitter(): EventEmitter;
|
|
3
|
+
export declare function getSetting(key: string): Promise<Record<string, unknown> | null>;
|
|
4
|
+
export declare function putSetting(key: string, value: Record<string, unknown>): Promise<void>;
|
|
5
|
+
export declare function deleteSetting(key: string): Promise<boolean>;
|
|
6
|
+
export declare function getAllSettings(): Promise<Record<string, Record<string, unknown>>>;
|
|
7
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/settings/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAOtC,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD;AA6BD,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CASzC;AAED,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBjE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CACxC,CASA"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { createClient } from "@libsql/client";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { EventEmitter } from "events";
|
|
5
|
+
let _client;
|
|
6
|
+
let _initialized = false;
|
|
7
|
+
const _emitter = new EventEmitter();
|
|
8
|
+
export function getSettingsEmitter() {
|
|
9
|
+
return _emitter;
|
|
10
|
+
}
|
|
11
|
+
function getClient() {
|
|
12
|
+
if (!_client) {
|
|
13
|
+
const url = process.env.DATABASE_URL || "file:./data/app.db";
|
|
14
|
+
if (url.startsWith("file:")) {
|
|
15
|
+
fs.mkdirSync(path.join(process.cwd(), "data"), { recursive: true });
|
|
16
|
+
}
|
|
17
|
+
_client = createClient({
|
|
18
|
+
url,
|
|
19
|
+
authToken: process.env.DATABASE_AUTH_TOKEN,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return _client;
|
|
23
|
+
}
|
|
24
|
+
async function ensureTable() {
|
|
25
|
+
if (_initialized)
|
|
26
|
+
return;
|
|
27
|
+
const client = getClient();
|
|
28
|
+
await client.execute(`
|
|
29
|
+
CREATE TABLE IF NOT EXISTS settings (
|
|
30
|
+
key TEXT PRIMARY KEY,
|
|
31
|
+
value TEXT NOT NULL,
|
|
32
|
+
updated_at INTEGER NOT NULL
|
|
33
|
+
)
|
|
34
|
+
`);
|
|
35
|
+
_initialized = true;
|
|
36
|
+
}
|
|
37
|
+
export async function getSetting(key) {
|
|
38
|
+
await ensureTable();
|
|
39
|
+
const client = getClient();
|
|
40
|
+
const { rows } = await client.execute({
|
|
41
|
+
sql: `SELECT value FROM settings WHERE key = ?`,
|
|
42
|
+
args: [key],
|
|
43
|
+
});
|
|
44
|
+
if (rows.length === 0)
|
|
45
|
+
return null;
|
|
46
|
+
return JSON.parse(rows[0].value);
|
|
47
|
+
}
|
|
48
|
+
export async function putSetting(key, value) {
|
|
49
|
+
await ensureTable();
|
|
50
|
+
const client = getClient();
|
|
51
|
+
await client.execute({
|
|
52
|
+
sql: `INSERT OR REPLACE INTO settings (key, value, updated_at) VALUES (?, ?, ?)`,
|
|
53
|
+
args: [key, JSON.stringify(value), Date.now()],
|
|
54
|
+
});
|
|
55
|
+
_emitter.emit("settings", {
|
|
56
|
+
source: "settings",
|
|
57
|
+
type: "change",
|
|
58
|
+
key,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
export async function deleteSetting(key) {
|
|
62
|
+
await ensureTable();
|
|
63
|
+
const client = getClient();
|
|
64
|
+
const result = await client.execute({
|
|
65
|
+
sql: `DELETE FROM settings WHERE key = ?`,
|
|
66
|
+
args: [key],
|
|
67
|
+
});
|
|
68
|
+
if (result.rowsAffected > 0) {
|
|
69
|
+
_emitter.emit("settings", {
|
|
70
|
+
source: "settings",
|
|
71
|
+
type: "delete",
|
|
72
|
+
key,
|
|
73
|
+
});
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
export async function getAllSettings() {
|
|
79
|
+
await ensureTable();
|
|
80
|
+
const client = getClient();
|
|
81
|
+
const { rows } = await client.execute(`SELECT key, value FROM settings`);
|
|
82
|
+
const result = {};
|
|
83
|
+
for (const row of rows) {
|
|
84
|
+
result[row.key] = JSON.parse(row.value);
|
|
85
|
+
}
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/settings/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User-scoped settings helpers.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the global settings store with per-user key prefixing.
|
|
5
|
+
* Keys are stored as `u:<email>:<key>` in the settings table.
|
|
6
|
+
*
|
|
7
|
+
* Includes a migration fallback: if a user-scoped key is not found,
|
|
8
|
+
* falls back to the global (unprefixed) key. This allows existing
|
|
9
|
+
* single-user data to be read by the first user who accesses it.
|
|
10
|
+
* Writes always go to the user-scoped key.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Read a user-scoped setting. Falls back to the global key if the
|
|
14
|
+
* user-scoped key doesn't exist (migration path from single-user).
|
|
15
|
+
*/
|
|
16
|
+
export declare function getUserSetting(email: string, key: string): Promise<Record<string, unknown> | null>;
|
|
17
|
+
/** Write a user-scoped setting. Always writes to the prefixed key. */
|
|
18
|
+
export declare function putUserSetting(email: string, key: string, value: Record<string, unknown>): Promise<void>;
|
|
19
|
+
/** Delete a user-scoped setting. */
|
|
20
|
+
export declare function deleteUserSetting(email: string, key: string): Promise<boolean>;
|
|
21
|
+
//# sourceMappingURL=user-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-settings.d.ts","sourceRoot":"","sources":["../../src/settings/user-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH;;;GAGG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAKzC;AAED,sEAAsE;AACtE,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,oCAAoC;AACpC,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,OAAO,CAAC,CAElB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User-scoped settings helpers.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the global settings store with per-user key prefixing.
|
|
5
|
+
* Keys are stored as `u:<email>:<key>` in the settings table.
|
|
6
|
+
*
|
|
7
|
+
* Includes a migration fallback: if a user-scoped key is not found,
|
|
8
|
+
* falls back to the global (unprefixed) key. This allows existing
|
|
9
|
+
* single-user data to be read by the first user who accesses it.
|
|
10
|
+
* Writes always go to the user-scoped key.
|
|
11
|
+
*/
|
|
12
|
+
import { getSetting, putSetting, deleteSetting } from "./store.js";
|
|
13
|
+
function userKey(email, key) {
|
|
14
|
+
return `u:${email}:${key}`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Read a user-scoped setting. Falls back to the global key if the
|
|
18
|
+
* user-scoped key doesn't exist (migration path from single-user).
|
|
19
|
+
*/
|
|
20
|
+
export async function getUserSetting(email, key) {
|
|
21
|
+
const scoped = await getSetting(userKey(email, key));
|
|
22
|
+
if (scoped !== null)
|
|
23
|
+
return scoped;
|
|
24
|
+
// Fallback to unscoped key for migration from single-user
|
|
25
|
+
return getSetting(key);
|
|
26
|
+
}
|
|
27
|
+
/** Write a user-scoped setting. Always writes to the prefixed key. */
|
|
28
|
+
export async function putUserSetting(email, key, value) {
|
|
29
|
+
return putSetting(userKey(email, key), value);
|
|
30
|
+
}
|
|
31
|
+
/** Delete a user-scoped setting. */
|
|
32
|
+
export async function deleteUserSetting(email, key) {
|
|
33
|
+
return deleteSetting(userKey(email, key));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=user-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-settings.js","sourceRoot":"","sources":["../../src/settings/user-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEnE,SAAS,OAAO,CAAC,KAAa,EAAE,GAAW;IACzC,OAAO,KAAK,KAAK,IAAI,GAAG,EAAE,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAa,EACb,GAAW;IAEX,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACrD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IACnC,0DAA0D;IAC1D,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAa,EACb,GAAW,EACX,KAA8B;IAE9B,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,oCAAoC;AACpC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAa,EACb,GAAW;IAEX,OAAO,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C,CAAC"}
|
package/dist/tailwind.preset.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tailwind.preset.js","sourceRoot":"","sources":["../src/tailwind.preset.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,MAAM,GAAW;IACrB,QAAQ,EAAE,CAAC,OAAO,CAAC;IACnB,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,EAAE;IACV,KAAK,EAAE;QACL,SAAS,EAAE;YACT,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,MAAM;YACf,OAAO,EAAE;gBACP,KAAK,EAAE,QAAQ;aAChB;SACF;QACD,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,MAAM,EAAE,oBAAoB;gBAC5B,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EAAE,kBAAkB;gBACxB,UAAU,EAAE,wBAAwB;gBACpC,UAAU,EAAE,wBAAwB;gBACpC,OAAO,EAAE;oBACP,OAAO,EAAE,qBAAqB;oBAC9B,UAAU,EAAE,gCAAgC;iBAC7C;gBACD,SAAS,EAAE;oBACT,OAAO,EAAE,uBAAuB;oBAChC,UAAU,EAAE,kCAAkC;iBAC/C;gBACD,WAAW,EAAE;oBACX,OAAO,EAAE,yBAAyB;oBAClC,UAAU,EAAE,oCAAoC;iBACjD;gBACD,KAAK,EAAE;oBACL,OAAO,EAAE,mBAAmB;oBAC5B,UAAU,EAAE,8BAA8B;iBAC3C;gBACD,MAAM,EAAE;oBACN,OAAO,EAAE,oBAAoB;oBAC7B,UAAU,EAAE,+BAA+B;iBAC5C;gBACD,OAAO,EAAE;oBACP,OAAO,EAAE,qBAAqB;oBAC9B,UAAU,EAAE,gCAAgC;iBAC7C;gBACD,IAAI,EAAE;oBACJ,OAAO,EAAE,kBAAkB;oBAC3B,UAAU,EAAE,6BAA6B;iBAC1C;gBACD,OAAO,EAAE;oBACP,OAAO,EAAE,gCAAgC;oBACzC,UAAU,EAAE,gCAAgC;oBAC5C,OAAO,EAAE,6BAA6B;oBACtC,oBAAoB,EAAE,wCAAwC;oBAC9D,MAAM,EAAE,4BAA4B;oBACpC,mBAAmB,EAAE,uCAAuC;oBAC5D,MAAM,EAAE,4BAA4B;oBACpC,IAAI,EAAE,0BAA0B;iBACjC;aACF;YACD,YAAY,EAAE;gBACZ,EAAE,EAAE,eAAe;gBACnB,EAAE,EAAE,2BAA2B;gBAC/B,EAAE,EAAE,2BAA2B;aAChC;YACD,SAAS,EAAE;gBACT,gBAAgB,EAAE;oBAChB,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;oBACrB,EAAE,EAAE,EAAE,MAAM,EAAE,uCAAuC,EAAE;iBACxD;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,EAAE,MAAM,EAAE,uCAAuC,EAAE;oBACzD,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;iBACpB;aACF;YACD,SAAS,EAAE;gBACT,gBAAgB,EAAE,8BAA8B;gBAChD,cAAc,EAAE,4BAA4B;aAC7C;SACF;KACF;IACD,OAAO,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"tailwind.preset.js","sourceRoot":"","sources":["../src/tailwind.preset.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,MAAM,GAAW;IACrB,QAAQ,EAAE,CAAC,OAAO,CAAC;IACnB,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,EAAE;IACV,KAAK,EAAE;QACL,SAAS,EAAE;YACT,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,MAAM;YACf,OAAO,EAAE;gBACP,KAAK,EAAE,QAAQ;aAChB;SACF;QACD,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,MAAM,EAAE,oBAAoB;gBAC5B,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EAAE,kBAAkB;gBACxB,UAAU,EAAE,wBAAwB;gBACpC,UAAU,EAAE,wBAAwB;gBACpC,OAAO,EAAE;oBACP,OAAO,EAAE,qBAAqB;oBAC9B,UAAU,EAAE,gCAAgC;iBAC7C;gBACD,SAAS,EAAE;oBACT,OAAO,EAAE,uBAAuB;oBAChC,UAAU,EAAE,kCAAkC;iBAC/C;gBACD,WAAW,EAAE;oBACX,OAAO,EAAE,yBAAyB;oBAClC,UAAU,EAAE,oCAAoC;iBACjD;gBACD,KAAK,EAAE;oBACL,OAAO,EAAE,mBAAmB;oBAC5B,UAAU,EAAE,8BAA8B;iBAC3C;gBACD,MAAM,EAAE;oBACN,OAAO,EAAE,oBAAoB;oBAC7B,UAAU,EAAE,+BAA+B;iBAC5C;gBACD,OAAO,EAAE;oBACP,OAAO,EAAE,qBAAqB;oBAC9B,UAAU,EAAE,gCAAgC;iBAC7C;gBACD,IAAI,EAAE;oBACJ,OAAO,EAAE,kBAAkB;oBAC3B,UAAU,EAAE,6BAA6B;iBAC1C;gBACD,OAAO,EAAE;oBACP,OAAO,EAAE,gCAAgC;oBACzC,UAAU,EAAE,gCAAgC;oBAC5C,OAAO,EAAE,6BAA6B;oBACtC,oBAAoB,EAAE,wCAAwC;oBAC9D,MAAM,EAAE,4BAA4B;oBACpC,mBAAmB,EAAE,uCAAuC;oBAC5D,MAAM,EAAE,4BAA4B;oBACpC,IAAI,EAAE,0BAA0B;iBACjC;aACF;YACD,YAAY,EAAE;gBACZ,EAAE,EAAE,eAAe;gBACnB,EAAE,EAAE,2BAA2B;gBAC/B,EAAE,EAAE,2BAA2B;aAChC;YACD,SAAS,EAAE;gBACT,gBAAgB,EAAE;oBAChB,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;oBACrB,EAAE,EAAE,EAAE,MAAM,EAAE,uCAAuC,EAAE;iBACxD;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,EAAE,MAAM,EAAE,uCAAuC,EAAE;oBACzD,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;iBACpB;aACF;YACD,SAAS,EAAE;gBACT,gBAAgB,EAAE,8BAA8B;gBAChD,cAAc,EAAE,4BAA4B;aAC7C;SACF;KACF;IACD,OAAO,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAC9E,CAAC;AAEF,eAAe,MAAM,CAAC"}
|