heyio 3.4.0 → 4.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.
- package/CODE_OF_CONDUCT.md +83 -0
- package/LICENSE +21 -0
- package/README.md +203 -151
- package/dist/daemon/cli.js +7153 -0
- package/dist/daemon/index.js +6421 -0
- package/dist/web/assets/index-CbptHIYU.js +520 -0
- package/{public → dist/web}/index.html +1 -1
- package/package.json +45 -48
- package/dist/api/middleware/auth.d.ts +0 -14
- package/dist/api/middleware/auth.d.ts.map +0 -1
- package/dist/api/middleware/auth.js +0 -130
- package/dist/api/middleware/auth.js.map +0 -1
- package/dist/api/notifications.d.ts +0 -14
- package/dist/api/notifications.d.ts.map +0 -1
- package/dist/api/notifications.js +0 -114
- package/dist/api/notifications.js.map +0 -1
- package/dist/api/routes/activity.d.ts +0 -3
- package/dist/api/routes/activity.d.ts.map +0 -1
- package/dist/api/routes/activity.js +0 -28
- package/dist/api/routes/activity.js.map +0 -1
- package/dist/api/routes/attachments.d.ts +0 -3
- package/dist/api/routes/attachments.d.ts.map +0 -1
- package/dist/api/routes/attachments.js +0 -83
- package/dist/api/routes/attachments.js.map +0 -1
- package/dist/api/routes/config.d.ts +0 -3
- package/dist/api/routes/config.d.ts.map +0 -1
- package/dist/api/routes/config.js +0 -107
- package/dist/api/routes/config.js.map +0 -1
- package/dist/api/routes/conversations.d.ts +0 -3
- package/dist/api/routes/conversations.d.ts.map +0 -1
- package/dist/api/routes/conversations.js +0 -25
- package/dist/api/routes/conversations.js.map +0 -1
- package/dist/api/routes/health.d.ts +0 -3
- package/dist/api/routes/health.d.ts.map +0 -1
- package/dist/api/routes/health.js +0 -39
- package/dist/api/routes/health.js.map +0 -1
- package/dist/api/routes/inbox.d.ts +0 -3
- package/dist/api/routes/inbox.d.ts.map +0 -1
- package/dist/api/routes/inbox.js +0 -139
- package/dist/api/routes/inbox.js.map +0 -1
- package/dist/api/routes/schedules.d.ts +0 -3
- package/dist/api/routes/schedules.d.ts.map +0 -1
- package/dist/api/routes/schedules.js +0 -116
- package/dist/api/routes/schedules.js.map +0 -1
- package/dist/api/routes/skills.d.ts +0 -2
- package/dist/api/routes/skills.d.ts.map +0 -1
- package/dist/api/routes/skills.js +0 -127
- package/dist/api/routes/skills.js.map +0 -1
- package/dist/api/routes/squads.d.ts +0 -3
- package/dist/api/routes/squads.d.ts.map +0 -1
- package/dist/api/routes/squads.js +0 -578
- package/dist/api/routes/squads.js.map +0 -1
- package/dist/api/routes/usage.d.ts +0 -3
- package/dist/api/routes/usage.d.ts.map +0 -1
- package/dist/api/routes/usage.js +0 -55
- package/dist/api/routes/usage.js.map +0 -1
- package/dist/api/routes/wiki.d.ts +0 -2
- package/dist/api/routes/wiki.d.ts.map +0 -1
- package/dist/api/routes/wiki.js +0 -75
- package/dist/api/routes/wiki.js.map +0 -1
- package/dist/api/server.d.ts +0 -7
- package/dist/api/server.d.ts.map +0 -1
- package/dist/api/server.js +0 -183
- package/dist/api/server.js.map +0 -1
- package/dist/config.d.ts +0 -3
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -3
- package/dist/config.js.map +0 -1
- package/dist/copilot/client.d.ts +0 -5
- package/dist/copilot/client.d.ts.map +0 -1
- package/dist/copilot/client.js +0 -38
- package/dist/copilot/client.js.map +0 -1
- package/dist/copilot/health-monitor.d.ts +0 -14
- package/dist/copilot/health-monitor.d.ts.map +0 -1
- package/dist/copilot/health-monitor.js +0 -70
- package/dist/copilot/health-monitor.js.map +0 -1
- package/dist/copilot/orchestrator.d.ts +0 -5
- package/dist/copilot/orchestrator.d.ts.map +0 -1
- package/dist/copilot/orchestrator.js +0 -227
- package/dist/copilot/orchestrator.js.map +0 -1
- package/dist/copilot/tools.d.ts +0 -80
- package/dist/copilot/tools.d.ts.map +0 -1
- package/dist/copilot/tools.js +0 -1067
- package/dist/copilot/tools.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -94
- package/dist/index.js.map +0 -1
- package/dist/logging/logger.d.ts +0 -6
- package/dist/logging/logger.d.ts.map +0 -1
- package/dist/logging/logger.js +0 -33
- package/dist/logging/logger.js.map +0 -1
- package/dist/models/index.d.ts +0 -6
- package/dist/models/index.d.ts.map +0 -1
- package/dist/models/index.js +0 -4
- package/dist/models/index.js.map +0 -1
- package/dist/models/pricing.d.ts +0 -25
- package/dist/models/pricing.d.ts.map +0 -1
- package/dist/models/pricing.js +0 -96
- package/dist/models/pricing.js.map +0 -1
- package/dist/models/registry.d.ts +0 -34
- package/dist/models/registry.d.ts.map +0 -1
- package/dist/models/registry.js +0 -109
- package/dist/models/registry.js.map +0 -1
- package/dist/models/token-tracker.d.ts +0 -41
- package/dist/models/token-tracker.d.ts.map +0 -1
- package/dist/models/token-tracker.js +0 -103
- package/dist/models/token-tracker.js.map +0 -1
- package/dist/scheduler/engine.d.ts +0 -12
- package/dist/scheduler/engine.d.ts.map +0 -1
- package/dist/scheduler/engine.js +0 -128
- package/dist/scheduler/engine.js.map +0 -1
- package/dist/skills/discover.d.ts +0 -22
- package/dist/skills/discover.d.ts.map +0 -1
- package/dist/skills/discover.js +0 -228
- package/dist/skills/discover.js.map +0 -1
- package/dist/skills/index.d.ts +0 -5
- package/dist/skills/index.d.ts.map +0 -1
- package/dist/skills/index.js +0 -3
- package/dist/skills/index.js.map +0 -1
- package/dist/skills/store.d.ts +0 -56
- package/dist/skills/store.d.ts.map +0 -1
- package/dist/skills/store.js +0 -154
- package/dist/skills/store.js.map +0 -1
- package/dist/squad/agent.d.ts +0 -65
- package/dist/squad/agent.d.ts.map +0 -1
- package/dist/squad/agent.js +0 -544
- package/dist/squad/agent.js.map +0 -1
- package/dist/squad/autonomy.d.ts +0 -16
- package/dist/squad/autonomy.d.ts.map +0 -1
- package/dist/squad/autonomy.js +0 -63
- package/dist/squad/autonomy.js.map +0 -1
- package/dist/squad/event-bus.d.ts +0 -22
- package/dist/squad/event-bus.d.ts.map +0 -1
- package/dist/squad/event-bus.js +0 -56
- package/dist/squad/event-bus.js.map +0 -1
- package/dist/squad/execution/index.d.ts +0 -14
- package/dist/squad/execution/index.d.ts.map +0 -1
- package/dist/squad/execution/index.js +0 -8
- package/dist/squad/execution/index.js.map +0 -1
- package/dist/squad/execution/instance.d.ts +0 -45
- package/dist/squad/execution/instance.d.ts.map +0 -1
- package/dist/squad/execution/instance.js +0 -165
- package/dist/squad/execution/instance.js.map +0 -1
- package/dist/squad/execution/planning.d.ts +0 -20
- package/dist/squad/execution/planning.d.ts.map +0 -1
- package/dist/squad/execution/planning.js +0 -62
- package/dist/squad/execution/planning.js.map +0 -1
- package/dist/squad/execution/pr.d.ts +0 -15
- package/dist/squad/execution/pr.d.ts.map +0 -1
- package/dist/squad/execution/pr.js +0 -109
- package/dist/squad/execution/pr.js.map +0 -1
- package/dist/squad/execution/review.d.ts +0 -21
- package/dist/squad/execution/review.d.ts.map +0 -1
- package/dist/squad/execution/review.js +0 -157
- package/dist/squad/execution/review.js.map +0 -1
- package/dist/squad/execution/runner.d.ts +0 -52
- package/dist/squad/execution/runner.d.ts.map +0 -1
- package/dist/squad/execution/runner.js +0 -93
- package/dist/squad/execution/runner.js.map +0 -1
- package/dist/squad/execution/tasks.d.ts +0 -22
- package/dist/squad/execution/tasks.d.ts.map +0 -1
- package/dist/squad/execution/tasks.js +0 -111
- package/dist/squad/execution/tasks.js.map +0 -1
- package/dist/squad/execution/worktree.d.ts +0 -27
- package/dist/squad/execution/worktree.d.ts.map +0 -1
- package/dist/squad/execution/worktree.js +0 -141
- package/dist/squad/execution/worktree.js.map +0 -1
- package/dist/squad/hiring.d.ts +0 -57
- package/dist/squad/hiring.d.ts.map +0 -1
- package/dist/squad/hiring.js +0 -588
- package/dist/squad/hiring.js.map +0 -1
- package/dist/squad/index.d.ts +0 -8
- package/dist/squad/index.d.ts.map +0 -1
- package/dist/squad/index.js +0 -6
- package/dist/squad/index.js.map +0 -1
- package/dist/squad/manager.d.ts +0 -58
- package/dist/squad/manager.d.ts.map +0 -1
- package/dist/squad/manager.js +0 -351
- package/dist/squad/manager.js.map +0 -1
- package/dist/squad/model-selector.d.ts +0 -29
- package/dist/squad/model-selector.d.ts.map +0 -1
- package/dist/squad/model-selector.js +0 -64
- package/dist/squad/model-selector.js.map +0 -1
- package/dist/squad/name-generator.d.ts +0 -16
- package/dist/squad/name-generator.d.ts.map +0 -1
- package/dist/squad/name-generator.js +0 -111
- package/dist/squad/name-generator.js.map +0 -1
- package/dist/squad/roles/templates.d.ts +0 -7
- package/dist/squad/roles/templates.d.ts.map +0 -1
- package/dist/squad/roles/templates.js +0 -104
- package/dist/squad/roles/templates.js.map +0 -1
- package/dist/squad/skill-parser.d.ts +0 -36
- package/dist/squad/skill-parser.d.ts.map +0 -1
- package/dist/squad/skill-parser.js +0 -90
- package/dist/squad/skill-parser.js.map +0 -1
- package/dist/squad/source-resolver.d.ts +0 -20
- package/dist/squad/source-resolver.d.ts.map +0 -1
- package/dist/squad/source-resolver.js +0 -51
- package/dist/squad/source-resolver.js.map +0 -1
- package/dist/store/activity.d.ts +0 -51
- package/dist/store/activity.d.ts.map +0 -1
- package/dist/store/activity.js +0 -197
- package/dist/store/activity.js.map +0 -1
- package/dist/store/conversations.d.ts +0 -25
- package/dist/store/conversations.d.ts.map +0 -1
- package/dist/store/conversations.js +0 -76
- package/dist/store/conversations.js.map +0 -1
- package/dist/store/db.d.ts +0 -5
- package/dist/store/db.d.ts.map +0 -1
- package/dist/store/db.js +0 -290
- package/dist/store/db.js.map +0 -1
- package/dist/store/inbox.d.ts +0 -67
- package/dist/store/inbox.d.ts.map +0 -1
- package/dist/store/inbox.js +0 -192
- package/dist/store/inbox.js.map +0 -1
- package/dist/store/schedules.d.ts +0 -53
- package/dist/store/schedules.d.ts.map +0 -1
- package/dist/store/schedules.js +0 -160
- package/dist/store/schedules.js.map +0 -1
- package/dist/wiki/index.d.ts +0 -3
- package/dist/wiki/index.d.ts.map +0 -1
- package/dist/wiki/index.js +0 -2
- package/dist/wiki/index.js.map +0 -1
- package/dist/wiki/store.d.ts +0 -81
- package/dist/wiki/store.d.ts.map +0 -1
- package/dist/wiki/store.js +0 -270
- package/dist/wiki/store.js.map +0 -1
- package/node_modules/@io/shared/dist/config.d.ts +0 -26
- package/node_modules/@io/shared/dist/config.d.ts.map +0 -1
- package/node_modules/@io/shared/dist/config.js +0 -53
- package/node_modules/@io/shared/dist/config.js.map +0 -1
- package/node_modules/@io/shared/dist/constants.d.ts +0 -19
- package/node_modules/@io/shared/dist/constants.d.ts.map +0 -1
- package/node_modules/@io/shared/dist/constants.js +0 -51
- package/node_modules/@io/shared/dist/constants.js.map +0 -1
- package/node_modules/@io/shared/dist/index.d.ts +0 -12
- package/node_modules/@io/shared/dist/index.d.ts.map +0 -1
- package/node_modules/@io/shared/dist/index.js +0 -3
- package/node_modules/@io/shared/dist/index.js.map +0 -1
- package/node_modules/@io/shared/dist/types/agents.d.ts +0 -3
- package/node_modules/@io/shared/dist/types/agents.d.ts.map +0 -1
- package/node_modules/@io/shared/dist/types/agents.js +0 -2
- package/node_modules/@io/shared/dist/types/agents.js.map +0 -1
- package/node_modules/@io/shared/dist/types/api.d.ts +0 -33
- package/node_modules/@io/shared/dist/types/api.d.ts.map +0 -1
- package/node_modules/@io/shared/dist/types/api.js +0 -2
- package/node_modules/@io/shared/dist/types/api.js.map +0 -1
- package/node_modules/@io/shared/dist/types/attachments.d.ts +0 -10
- package/node_modules/@io/shared/dist/types/attachments.d.ts.map +0 -1
- package/node_modules/@io/shared/dist/types/attachments.js +0 -2
- package/node_modules/@io/shared/dist/types/attachments.js.map +0 -1
- package/node_modules/@io/shared/dist/types/events.d.ts +0 -44
- package/node_modules/@io/shared/dist/types/events.d.ts.map +0 -1
- package/node_modules/@io/shared/dist/types/events.js +0 -2
- package/node_modules/@io/shared/dist/types/events.js.map +0 -1
- package/node_modules/@io/shared/dist/types/history.d.ts +0 -33
- package/node_modules/@io/shared/dist/types/history.d.ts.map +0 -1
- package/node_modules/@io/shared/dist/types/history.js +0 -2
- package/node_modules/@io/shared/dist/types/history.js.map +0 -1
- package/node_modules/@io/shared/dist/types/messages.d.ts +0 -15
- package/node_modules/@io/shared/dist/types/messages.d.ts.map +0 -1
- package/node_modules/@io/shared/dist/types/messages.js +0 -2
- package/node_modules/@io/shared/dist/types/messages.js.map +0 -1
- package/node_modules/@io/shared/dist/types/squads.d.ts +0 -46
- package/node_modules/@io/shared/dist/types/squads.d.ts.map +0 -1
- package/node_modules/@io/shared/dist/types/squads.js +0 -2
- package/node_modules/@io/shared/dist/types/squads.js.map +0 -1
- package/node_modules/@io/shared/dist/types/tokens.d.ts +0 -19
- package/node_modules/@io/shared/dist/types/tokens.d.ts.map +0 -1
- package/node_modules/@io/shared/dist/types/tokens.js +0 -2
- package/node_modules/@io/shared/dist/types/tokens.js.map +0 -1
- package/node_modules/@io/shared/package.json +0 -18
- package/node_modules/@io/shared/src/config.ts +0 -85
- package/node_modules/@io/shared/src/constants.ts +0 -54
- package/node_modules/@io/shared/src/index.ts +0 -46
- package/node_modules/@io/shared/src/types/agents.ts +0 -3
- package/node_modules/@io/shared/src/types/api.ts +0 -35
- package/node_modules/@io/shared/src/types/attachments.ts +0 -9
- package/node_modules/@io/shared/src/types/events.ts +0 -86
- package/node_modules/@io/shared/src/types/history.ts +0 -37
- package/node_modules/@io/shared/src/types/messages.ts +0 -15
- package/node_modules/@io/shared/src/types/squads.ts +0 -56
- package/node_modules/@io/shared/src/types/tokens.ts +0 -19
- package/node_modules/@io/shared/tsconfig.json +0 -9
- package/node_modules/@io/shared/tsconfig.tsbuildinfo +0 -1
- package/public/assets/index-CoSJG-14.js +0 -510
- package/public/assets/index-CoSJG-14.js.map +0 -1
- /package/{public → dist/web}/assets/index-B6F0UZkW.css +0 -0
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Inter:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500;600&display=swap"
|
|
12
12
|
/>
|
|
13
13
|
<title>IO</title>
|
|
14
|
-
<script type="module" crossorigin src="/assets/index-
|
|
14
|
+
<script type="module" crossorigin src="/assets/index-CbptHIYU.js"></script>
|
|
15
15
|
<link rel="stylesheet" crossorigin href="/assets/index-B6F0UZkW.css">
|
|
16
16
|
</head>
|
|
17
17
|
<body>
|
package/package.json
CHANGED
|
@@ -1,62 +1,59 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "heyio",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
|
+
"description": "AI orchestrator daemon with squad-based team delegation",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
],
|
|
12
|
-
"bin": {
|
|
13
|
-
"io": "./dist/index.js"
|
|
14
|
-
},
|
|
15
|
-
"scripts": {
|
|
16
|
-
"build": "tsc",
|
|
17
|
-
"dev": "tsx --watch src/index.ts",
|
|
18
|
-
"start": "node dist/index.js",
|
|
19
|
-
"prepack": "node -e \"const fs=require('fs');const p=require('path');const src=p.resolve(__dirname,'../shared');const dst=p.resolve(__dirname,'node_modules/@io/shared');fs.mkdirSync(p.dirname(dst),{recursive:true});fs.cpSync(src,dst,{recursive:true});fs.copyFileSync(p.resolve(__dirname,'../../README.md'),p.resolve(__dirname,'README.md'));const webSrc=p.resolve(__dirname,'../web/dist');const webDst=p.resolve(__dirname,'public');if(fs.existsSync(webSrc)){fs.cpSync(webSrc,webDst,{recursive:true})}\""
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Michael Jolley",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/michaeljolley/io.git"
|
|
20
11
|
},
|
|
21
12
|
"engines": {
|
|
22
|
-
"node": ">=22"
|
|
13
|
+
"node": ">=22.0.0"
|
|
23
14
|
},
|
|
15
|
+
"bin": {
|
|
16
|
+
"io": "./dist/daemon/cli.js"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist/",
|
|
20
|
+
"README.md",
|
|
21
|
+
"CODE_OF_CONDUCT.md",
|
|
22
|
+
"LICENSE",
|
|
23
|
+
"!dist/**/*.map"
|
|
24
|
+
],
|
|
24
25
|
"keywords": [
|
|
26
|
+
"ai",
|
|
25
27
|
"copilot",
|
|
26
|
-
"telegram",
|
|
27
28
|
"orchestrator",
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
29
|
+
"agent",
|
|
30
|
+
"squad",
|
|
31
|
+
"daemon"
|
|
31
32
|
],
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"
|
|
36
|
-
"url": "git+https://github.com/michaeljolley/io.git"
|
|
37
|
-
},
|
|
38
|
-
"homepage": "https://github.com/michaeljolley/io#readme",
|
|
39
|
-
"dependencies": {
|
|
40
|
-
"@github/copilot-sdk": "^1.0.0-beta.9",
|
|
41
|
-
"@io/shared": "*",
|
|
42
|
-
"@libsql/client": "^0.14.0",
|
|
43
|
-
"cron-parser": "^5.5.0",
|
|
44
|
-
"express": "^5.1.0",
|
|
45
|
-
"gray-matter": "^4.0.3",
|
|
46
|
-
"jose": "^6.2.3",
|
|
47
|
-
"multer": "^2.1.1",
|
|
48
|
-
"pino": "^9.6.0",
|
|
49
|
-
"ws": "^8.18.0",
|
|
50
|
-
"zod": "^4.4.3"
|
|
51
|
-
},
|
|
52
|
-
"bundleDependencies": [
|
|
53
|
-
"@io/shared"
|
|
33
|
+
"workspaces": [
|
|
34
|
+
"packages/shared",
|
|
35
|
+
"packages/daemon",
|
|
36
|
+
"packages/web"
|
|
54
37
|
],
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "npm run build:shared && npm run build:daemon && npm run build:web",
|
|
40
|
+
"build:shared": "tsc --project packages/shared/tsconfig.json",
|
|
41
|
+
"build:daemon": "node scripts/build-daemon.js",
|
|
42
|
+
"build:web": "npm run build --workspace=packages/web",
|
|
43
|
+
"dev": "npx tsx --watch packages/daemon/src/index.ts",
|
|
44
|
+
"test": "vitest run",
|
|
45
|
+
"test:watch": "vitest",
|
|
46
|
+
"test:coverage": "vitest run --coverage",
|
|
47
|
+
"lint": "biome check .",
|
|
48
|
+
"lint:fix": "biome check --write .",
|
|
49
|
+
"format": "biome format --write .",
|
|
50
|
+
"clean": "rm -rf dist packages/*/dist coverage"
|
|
51
|
+
},
|
|
55
52
|
"devDependencies": {
|
|
56
|
-
"@
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
53
|
+
"@biomejs/biome": "^1.9.0",
|
|
54
|
+
"esbuild": "^0.24.0",
|
|
55
|
+
"tsx": "^4.19.0",
|
|
56
|
+
"typescript": "^5.6.0",
|
|
57
|
+
"vitest": "^2.1.0"
|
|
61
58
|
}
|
|
62
59
|
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { NextFunction, Request, Response } from 'express';
|
|
2
|
-
import type { IOConfig } from '../../config.js';
|
|
3
|
-
/**
|
|
4
|
-
* Express middleware that verifies Supabase JWT tokens.
|
|
5
|
-
* If Supabase is not configured, all requests pass through.
|
|
6
|
-
* Exempt routes always pass through regardless of config.
|
|
7
|
-
*/
|
|
8
|
-
export declare function authMiddleware(config: IOConfig): (req: Request, res: Response, next: NextFunction) => void;
|
|
9
|
-
/**
|
|
10
|
-
* Verify a JWT token for WebSocket connections.
|
|
11
|
-
* Returns true if valid or if auth is not configured.
|
|
12
|
-
*/
|
|
13
|
-
export declare function verifyWsToken(config: IOConfig, token: string | null): Promise<boolean>;
|
|
14
|
-
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/api/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAgFhD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,IACtC,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAmC9D;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAc5F"}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { createRemoteJWKSet, jwtVerify } from 'jose';
|
|
2
|
-
import { createChildLogger } from '../../logging/logger.js';
|
|
3
|
-
const logger = () => createChildLogger('auth');
|
|
4
|
-
// Routes that don't require authentication (paths relative to /api mount)
|
|
5
|
-
const EXEMPT_ROUTES = [
|
|
6
|
-
{ method: 'GET', path: '/health' },
|
|
7
|
-
{ method: 'GET', path: '/config' },
|
|
8
|
-
{ method: 'GET', path: '/version' },
|
|
9
|
-
];
|
|
10
|
-
function isExempt(method, path) {
|
|
11
|
-
return EXEMPT_ROUTES.some((r) => r.method === method.toUpperCase() && path.startsWith(r.path));
|
|
12
|
-
}
|
|
13
|
-
// Cached JWKS fetcher
|
|
14
|
-
let jwks = null;
|
|
15
|
-
function getJwks(projectUrl) {
|
|
16
|
-
if (!jwks) {
|
|
17
|
-
const jwksUrl = new URL('/auth/v1/.well-known/jwks.json', projectUrl);
|
|
18
|
-
jwks = createRemoteJWKSet(jwksUrl);
|
|
19
|
-
}
|
|
20
|
-
return jwks;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Verify a Supabase JWT token using multiple strategies:
|
|
24
|
-
* 1. JWKS (asymmetric RS256/ES256) if projectUrl is available
|
|
25
|
-
* 2. Shared secret (HS256) if jwtSecret is available
|
|
26
|
-
* 3. Supabase Auth server introspection as final fallback
|
|
27
|
-
*/
|
|
28
|
-
async function verifyToken(config, token) {
|
|
29
|
-
const errors = [];
|
|
30
|
-
// Strategy 1: Try JWKS verification (asymmetric signing)
|
|
31
|
-
if (config.supabase.projectUrl) {
|
|
32
|
-
try {
|
|
33
|
-
const keySet = getJwks(config.supabase.projectUrl);
|
|
34
|
-
await jwtVerify(token, keySet, { clockTolerance: 30 });
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
catch (err) {
|
|
38
|
-
errors.push(`JWKS: ${err instanceof Error ? err.message : 'unknown'}`);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
// Strategy 2: Try shared secret (HS256)
|
|
42
|
-
if (config.supabase.jwtSecret) {
|
|
43
|
-
try {
|
|
44
|
-
const secret = new TextEncoder().encode(config.supabase.jwtSecret);
|
|
45
|
-
await jwtVerify(token, secret, { clockTolerance: 30 });
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
catch (err) {
|
|
49
|
-
errors.push(`HS256: ${err instanceof Error ? err.message : 'unknown'}`);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
// Strategy 3: Verify via Supabase Auth server (introspection)
|
|
53
|
-
if (config.supabase.projectUrl && config.supabase.anonKey) {
|
|
54
|
-
try {
|
|
55
|
-
const res = await fetch(`${config.supabase.projectUrl}/auth/v1/user`, {
|
|
56
|
-
headers: {
|
|
57
|
-
apikey: config.supabase.anonKey,
|
|
58
|
-
Authorization: `Bearer ${token}`,
|
|
59
|
-
},
|
|
60
|
-
});
|
|
61
|
-
if (res.ok) {
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
errors.push(`Auth server: HTTP ${res.status}`);
|
|
65
|
-
}
|
|
66
|
-
catch (err) {
|
|
67
|
-
errors.push(`Auth server: ${err instanceof Error ? err.message : 'unknown'}`);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
logger().debug({ strategies: errors.join('; ') }, 'All JWT verification strategies failed');
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Express middleware that verifies Supabase JWT tokens.
|
|
75
|
-
* If Supabase is not configured, all requests pass through.
|
|
76
|
-
* Exempt routes always pass through regardless of config.
|
|
77
|
-
*/
|
|
78
|
-
export function authMiddleware(config) {
|
|
79
|
-
return (req, res, next) => {
|
|
80
|
-
// If no Supabase configured, skip auth entirely (local-only mode)
|
|
81
|
-
if (!config.supabase.projectUrl && !config.supabase.jwtSecret) {
|
|
82
|
-
next();
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
// Exempt routes don't require auth
|
|
86
|
-
if (isExempt(req.method, req.path)) {
|
|
87
|
-
next();
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
const authHeader = req.headers.authorization;
|
|
91
|
-
if (!authHeader?.startsWith('Bearer ')) {
|
|
92
|
-
res.status(401).json({ error: 'Missing or invalid Authorization header' });
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
const token = authHeader.slice(7);
|
|
96
|
-
verifyToken(config, token)
|
|
97
|
-
.then((valid) => {
|
|
98
|
-
if (valid) {
|
|
99
|
-
next();
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
res.status(401).json({ error: 'Invalid or expired token' });
|
|
103
|
-
}
|
|
104
|
-
})
|
|
105
|
-
.catch((err) => {
|
|
106
|
-
const errMessage = err instanceof Error ? err.message : 'Unknown error';
|
|
107
|
-
logger().warn({ err: errMessage }, 'JWT verification failed');
|
|
108
|
-
res.status(401).json({ error: 'Invalid or expired token' });
|
|
109
|
-
});
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Verify a JWT token for WebSocket connections.
|
|
114
|
-
* Returns true if valid or if auth is not configured.
|
|
115
|
-
*/
|
|
116
|
-
export async function verifyWsToken(config, token) {
|
|
117
|
-
if (!config.supabase.projectUrl && !config.supabase.jwtSecret) {
|
|
118
|
-
return true; // No auth configured — allow
|
|
119
|
-
}
|
|
120
|
-
if (!token) {
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
try {
|
|
124
|
-
return await verifyToken(config, token);
|
|
125
|
-
}
|
|
126
|
-
catch {
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/api/middleware/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { WebSocket } from 'ws';
|
|
2
|
-
/**
|
|
3
|
-
* Register a WebSocket client for event notifications.
|
|
4
|
-
*/
|
|
5
|
-
export declare function subscribeClient(connectionId: string, ws: WebSocket): void;
|
|
6
|
-
/**
|
|
7
|
-
* Unregister a WebSocket client.
|
|
8
|
-
*/
|
|
9
|
-
export declare function unsubscribeClient(connectionId: string): void;
|
|
10
|
-
/**
|
|
11
|
-
* Initialize the notification system — subscribes to event bus and broadcasts to clients.
|
|
12
|
-
*/
|
|
13
|
-
export declare function initNotifications(): void;
|
|
14
|
-
//# sourceMappingURL=notifications.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/api/notifications.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AASpC;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CAEzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAE5D;AA8DD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAoCxC"}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { createChildLogger } from '../logging/logger.js';
|
|
2
|
-
import { getEventBus } from '../squad/event-bus.js';
|
|
3
|
-
const logger = () => createChildLogger('notifications');
|
|
4
|
-
// Connected clients that want event notifications
|
|
5
|
-
const subscribers = new Map();
|
|
6
|
-
/**
|
|
7
|
-
* Register a WebSocket client for event notifications.
|
|
8
|
-
*/
|
|
9
|
-
export function subscribeClient(connectionId, ws) {
|
|
10
|
-
subscribers.set(connectionId, ws);
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Unregister a WebSocket client.
|
|
14
|
-
*/
|
|
15
|
-
export function unsubscribeClient(connectionId) {
|
|
16
|
-
subscribers.delete(connectionId);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Render an event to a human-readable notification string.
|
|
20
|
-
*/
|
|
21
|
-
function renderNotification(event) {
|
|
22
|
-
switch (event.type) {
|
|
23
|
-
case 'squad:created':
|
|
24
|
-
return `🆕 Squad "${event.squadName}" has been hired`;
|
|
25
|
-
case 'squad:disbanded':
|
|
26
|
-
return `🗑️ Squad "${event.squadName}" has been disbanded`;
|
|
27
|
-
case 'squad:member_added':
|
|
28
|
-
return `👋 New member added to "${event.squadName}"`;
|
|
29
|
-
case 'squad:member_retired':
|
|
30
|
-
return `👤 Member retired from "${event.squadName}"`;
|
|
31
|
-
case 'instance:created':
|
|
32
|
-
return '🚀 New work instance started';
|
|
33
|
-
case 'instance:meeting_started':
|
|
34
|
-
return '🤝 Round-table meeting in progress';
|
|
35
|
-
case 'instance:meeting_complete':
|
|
36
|
-
return '✅ Meeting complete — consensus reached';
|
|
37
|
-
case 'instance:work_started':
|
|
38
|
-
return '⚡ Squad is working on tasks';
|
|
39
|
-
case 'instance:pr_created':
|
|
40
|
-
return `📬 PR created: ${event.data?.prUrl ?? ''}`;
|
|
41
|
-
case 'instance:complete':
|
|
42
|
-
return '🎉 Work instance completed successfully';
|
|
43
|
-
case 'instance:failed':
|
|
44
|
-
return '❌ Work instance failed';
|
|
45
|
-
case 'agent:task_started':
|
|
46
|
-
return `🔧 ${event.agentRole} started a task`;
|
|
47
|
-
case 'agent:task_completed':
|
|
48
|
-
return `✔️ ${event.agentRole} completed a task`;
|
|
49
|
-
case 'agent:error':
|
|
50
|
-
return `⚠️ ${event.agentRole} encountered an error`;
|
|
51
|
-
case 'agent:permission_denied':
|
|
52
|
-
return `🚫 ${event.agentRole} was denied permission`;
|
|
53
|
-
case 'agent:tool_call':
|
|
54
|
-
return `🛠️ ${event.agentRole} used a tool`;
|
|
55
|
-
case 'meeting:contribution':
|
|
56
|
-
return `💬 ${event.agentRole}: "${event.content.slice(0, 80)}"`;
|
|
57
|
-
case 'meeting:consensus_reached':
|
|
58
|
-
return '🤝 Consensus reached in meeting';
|
|
59
|
-
case 'meeting:veto':
|
|
60
|
-
return `🛑 ${event.agentRole} vetoed the proposal`;
|
|
61
|
-
case 'inbox:new':
|
|
62
|
-
return event.kind === 'question'
|
|
63
|
-
? `❓ Squad has a question: "${event.title}"`
|
|
64
|
-
: `📋 Squad delivered: "${event.title}"`;
|
|
65
|
-
case 'inbox:resolved':
|
|
66
|
-
return `✅ Inbox item resolved: "${event.title}"`;
|
|
67
|
-
case 'schedule:fired':
|
|
68
|
-
return `⏰ Schedule fired: "${event.data?.name ?? 'unknown'}"`;
|
|
69
|
-
case 'schedule:completed':
|
|
70
|
-
return `✅ Schedule completed: "${event.data?.name ?? 'unknown'}"`;
|
|
71
|
-
case 'schedule:failed':
|
|
72
|
-
return `❌ Schedule failed: "${event.data?.name ?? 'unknown'}"`;
|
|
73
|
-
default:
|
|
74
|
-
return `📣 Event: ${event.type}`;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Initialize the notification system — subscribes to event bus and broadcasts to clients.
|
|
79
|
-
*/
|
|
80
|
-
export function initNotifications() {
|
|
81
|
-
const log = logger();
|
|
82
|
-
getEventBus().onAny((event) => {
|
|
83
|
-
const notification = renderNotification(event);
|
|
84
|
-
const payload = JSON.stringify({
|
|
85
|
-
type: 'event',
|
|
86
|
-
notification,
|
|
87
|
-
event: {
|
|
88
|
-
id: event.id,
|
|
89
|
-
type: event.type,
|
|
90
|
-
timestamp: event.timestamp.toISOString(),
|
|
91
|
-
squadId: event.squadId,
|
|
92
|
-
instanceId: event.instanceId,
|
|
93
|
-
agentRole: 'agentRole' in event ? event.agentRole : undefined,
|
|
94
|
-
model: 'model' in event ? event.model : undefined,
|
|
95
|
-
data: 'data' in event ? event.data : undefined,
|
|
96
|
-
},
|
|
97
|
-
});
|
|
98
|
-
let delivered = 0;
|
|
99
|
-
for (const [connId, ws] of subscribers) {
|
|
100
|
-
if (ws.readyState === ws.OPEN) {
|
|
101
|
-
ws.send(payload);
|
|
102
|
-
delivered++;
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
subscribers.delete(connId);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
if (delivered > 0) {
|
|
109
|
-
log.debug({ eventType: event.type, delivered }, 'Event broadcast');
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
log.info('Notification system initialized');
|
|
113
|
-
}
|
|
114
|
-
//# sourceMappingURL=notifications.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/api/notifications.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../../src/api/routes/activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,wBAAgB,cAAc,IAAI,MAAM,CAyBvC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { Router } from 'express';
|
|
2
|
-
import { queryActivity } from '../../store/activity.js';
|
|
3
|
-
export function activityRouter() {
|
|
4
|
-
const router = Router();
|
|
5
|
-
/**
|
|
6
|
-
* GET /api/activity
|
|
7
|
-
* Query agent activity log with optional filters.
|
|
8
|
-
* Query params: squad, instance, agent, type, limit, offset
|
|
9
|
-
*/
|
|
10
|
-
router.get('/activity', async (req, res) => {
|
|
11
|
-
try {
|
|
12
|
-
const entries = await queryActivity({
|
|
13
|
-
squadId: req.query.squad,
|
|
14
|
-
instanceId: req.query.instance,
|
|
15
|
-
agentRole: req.query.agent,
|
|
16
|
-
activityType: req.query.type,
|
|
17
|
-
limit: req.query.limit ? Number.parseInt(req.query.limit, 10) : undefined,
|
|
18
|
-
offset: req.query.offset ? Number.parseInt(req.query.offset, 10) : undefined,
|
|
19
|
-
});
|
|
20
|
-
res.json({ entries });
|
|
21
|
-
}
|
|
22
|
-
catch (err) {
|
|
23
|
-
res.status(500).json({ error: 'Failed to query activity' });
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
return router;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=activity.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../../src/api/routes/activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAqB,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE3E,MAAM,UAAU,cAAc;IAC7B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC1C,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC;gBACnC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,KAA2B;gBAC9C,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,QAA8B;gBACpD,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,KAA2B;gBAChD,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,IAAgC;gBACxD,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;gBACnF,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;aACtF,CAAC,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAC;QAC7D,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../../src/api/routes/attachments.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAIjC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAqFzD"}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { createReadStream, existsSync, mkdirSync } from 'node:fs';
|
|
2
|
-
import { writeFile } from 'node:fs/promises';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import { Router } from 'express';
|
|
5
|
-
import multer from 'multer';
|
|
6
|
-
import { getDatabase } from '../../store/db.js';
|
|
7
|
-
export function attachmentsRouter(dataDir) {
|
|
8
|
-
const router = Router();
|
|
9
|
-
const attachmentsDir = join(dataDir, 'attachments');
|
|
10
|
-
mkdirSync(attachmentsDir, { recursive: true });
|
|
11
|
-
// Use memory storage — we'll write to disk ourselves with proper naming
|
|
12
|
-
const upload = multer({
|
|
13
|
-
storage: multer.memoryStorage(),
|
|
14
|
-
limits: { fileSize: 50 * 1024 * 1024 },
|
|
15
|
-
});
|
|
16
|
-
/**
|
|
17
|
-
* POST /api/attachments
|
|
18
|
-
* Upload a file attachment. Returns the attachment metadata.
|
|
19
|
-
*/
|
|
20
|
-
router.post('/attachments', upload.single('file'), async (req, res) => {
|
|
21
|
-
try {
|
|
22
|
-
const file = req.file;
|
|
23
|
-
if (!file) {
|
|
24
|
-
res.status(400).json({ error: 'No file uploaded' });
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
const id = crypto.randomUUID();
|
|
28
|
-
const messageId = req.body?.messageId ?? null;
|
|
29
|
-
const fileDir = join(attachmentsDir, id);
|
|
30
|
-
mkdirSync(fileDir, { recursive: true });
|
|
31
|
-
const diskPath = join(fileDir, file.originalname);
|
|
32
|
-
await writeFile(diskPath, file.buffer);
|
|
33
|
-
const db = getDatabase();
|
|
34
|
-
await db.execute({
|
|
35
|
-
sql: `INSERT INTO attachments (id, message_id, filename, mime_type, size_bytes, disk_path)
|
|
36
|
-
VALUES (?, ?, ?, ?, ?, ?)`,
|
|
37
|
-
args: [id, messageId, file.originalname, file.mimetype, file.size, diskPath],
|
|
38
|
-
});
|
|
39
|
-
res.status(201).json({
|
|
40
|
-
id,
|
|
41
|
-
filename: file.originalname,
|
|
42
|
-
mimeType: file.mimetype,
|
|
43
|
-
sizeBytes: file.size,
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
catch (err) {
|
|
47
|
-
res.status(500).json({ error: 'Failed to upload attachment' });
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
/**
|
|
51
|
-
* GET /api/attachments/:id
|
|
52
|
-
* Download an attachment by ID.
|
|
53
|
-
*/
|
|
54
|
-
router.get('/attachments/:id', async (req, res) => {
|
|
55
|
-
try {
|
|
56
|
-
const db = getDatabase();
|
|
57
|
-
const result = await db.execute({
|
|
58
|
-
sql: 'SELECT filename, mime_type, disk_path FROM attachments WHERE id = ?',
|
|
59
|
-
args: [req.params.id],
|
|
60
|
-
});
|
|
61
|
-
if (result.rows.length === 0) {
|
|
62
|
-
res.status(404).json({ error: 'Attachment not found' });
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
const row = result.rows[0];
|
|
66
|
-
const diskPath = row.disk_path;
|
|
67
|
-
const filename = row.filename;
|
|
68
|
-
const mimeType = row.mime_type ?? 'application/octet-stream';
|
|
69
|
-
if (!existsSync(diskPath)) {
|
|
70
|
-
res.status(404).json({ error: 'Attachment file missing from disk' });
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
res.setHeader('Content-Type', mimeType);
|
|
74
|
-
res.setHeader('Content-Disposition', `attachment; filename="${filename}"`);
|
|
75
|
-
createReadStream(diskPath).pipe(res);
|
|
76
|
-
}
|
|
77
|
-
catch (err) {
|
|
78
|
-
res.status(500).json({ error: 'Failed to retrieve attachment' });
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
return router;
|
|
82
|
-
}
|
|
83
|
-
//# sourceMappingURL=attachments.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../../src/api/routes/attachments.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/api/routes/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,wBAAgB,YAAY,IAAI,MAAM,CA6GrC"}
|