@polpo-ai/server 0.10.11 → 0.10.12

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.
@@ -0,0 +1,11 @@
1
+ import { OpenAPIHono } from "@hono/zod-openapi";
2
+ import type { FileSystem } from "@polpo-ai/core";
3
+ import type { AttachmentStore } from "@polpo-ai/core/attachment-store";
4
+ interface AttachmentDeps {
5
+ attachmentStore: AttachmentStore;
6
+ fs: FileSystem;
7
+ workDir: string;
8
+ }
9
+ export declare function attachmentRoutes(getDeps: () => AttachmentDeps): OpenAPIHono<import("hono").Env, {}, "/">;
10
+ export {};
11
+ //# sourceMappingURL=attachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../src/routes/attachments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAGhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,iCAAiC,CAAC;AAgHnF,UAAU,cAAc;IACtB,eAAe,EAAE,eAAe,CAAC;IACjC,EAAE,EAAE,UAAU,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,cAAc,4CAqI7D"}
@@ -0,0 +1,224 @@
1
+ import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
2
+ import { join, extname } from "node:path";
3
+ import { nanoid } from "nanoid";
4
+ const EXT_MIME = {
5
+ ".pdf": "application/pdf", ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
6
+ ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ".csv": "text/csv",
7
+ ".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".gif": "image/gif",
8
+ ".webp": "image/webp", ".svg": "image/svg+xml", ".txt": "text/plain", ".md": "text/markdown",
9
+ ".json": "application/json", ".yaml": "text/yaml", ".yml": "text/yaml", ".xml": "application/xml",
10
+ ".html": "text/html", ".ts": "text/typescript", ".js": "text/javascript", ".py": "text/x-python",
11
+ ".zip": "application/zip", ".mp3": "audio/mpeg", ".wav": "audio/wav", ".mp4": "video/mp4",
12
+ };
13
+ function guessMime(filename) {
14
+ return EXT_MIME[extname(filename).toLowerCase()] ?? "application/octet-stream";
15
+ }
16
+ // ── Route definitions ──
17
+ const uploadRoute = createRoute({
18
+ method: "post",
19
+ path: "/",
20
+ tags: ["Attachments"],
21
+ summary: "Upload a file attachment for a chat session",
22
+ responses: {
23
+ 201: {
24
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } },
25
+ description: "Attachment uploaded",
26
+ },
27
+ 400: {
28
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), error: z.string() }) } },
29
+ description: "Missing file or sessionId",
30
+ },
31
+ },
32
+ });
33
+ const listRoute = createRoute({
34
+ method: "get",
35
+ path: "/",
36
+ tags: ["Attachments"],
37
+ summary: "List attachments for a session",
38
+ request: {
39
+ query: z.object({
40
+ sessionId: z.string().openapi({ param: { name: "sessionId", in: "query" } }),
41
+ }),
42
+ },
43
+ responses: {
44
+ 200: {
45
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.array(z.any()) }) } },
46
+ description: "Attachment list",
47
+ },
48
+ },
49
+ });
50
+ const getRoute = createRoute({
51
+ method: "get",
52
+ path: "/{id}",
53
+ tags: ["Attachments"],
54
+ summary: "Get attachment metadata",
55
+ request: {
56
+ params: z.object({ id: z.string().openapi({ param: { name: "id", in: "path" } }) }),
57
+ },
58
+ responses: {
59
+ 200: {
60
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } },
61
+ description: "Attachment metadata",
62
+ },
63
+ 404: {
64
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), error: z.string() }) } },
65
+ description: "Not found",
66
+ },
67
+ },
68
+ });
69
+ const downloadRoute = createRoute({
70
+ method: "get",
71
+ path: "/{id}/download",
72
+ tags: ["Attachments"],
73
+ summary: "Download attachment file content",
74
+ request: {
75
+ params: z.object({ id: z.string().openapi({ param: { name: "id", in: "path" } }) }),
76
+ },
77
+ responses: {
78
+ 200: { description: "File content" },
79
+ 404: {
80
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), error: z.string() }) } },
81
+ description: "Not found",
82
+ },
83
+ },
84
+ });
85
+ const deleteRoute = createRoute({
86
+ method: "delete",
87
+ path: "/{id}",
88
+ tags: ["Attachments"],
89
+ summary: "Delete an attachment",
90
+ request: {
91
+ params: z.object({ id: z.string().openapi({ param: { name: "id", in: "path" } }) }),
92
+ },
93
+ responses: {
94
+ 200: {
95
+ content: { "application/json": { schema: z.object({ ok: z.boolean() }) } },
96
+ description: "Deleted",
97
+ },
98
+ 404: {
99
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), error: z.string() }) } },
100
+ description: "Not found",
101
+ },
102
+ },
103
+ });
104
+ export function attachmentRoutes(getDeps) {
105
+ const app = new OpenAPIHono();
106
+ // POST / — upload attachment
107
+ app.openapi(uploadRoute, async (c) => {
108
+ const { attachmentStore, fs, workDir } = getDeps();
109
+ const body = await c.req.parseBody({ all: true });
110
+ const sessionId = body.sessionId || undefined;
111
+ const messageId = body.messageId || undefined;
112
+ const files = Array.isArray(body.file) ? body.file : body.file ? [body.file] : [];
113
+ if (files.length === 0) {
114
+ return c.json({ ok: false, error: "No file provided" }, 400);
115
+ }
116
+ const results = [];
117
+ for (const file of files) {
118
+ if (!(file instanceof File))
119
+ continue;
120
+ const id = nanoid(12);
121
+ const filename = file.name || `upload-${id}`;
122
+ // If no session, store under a shared "uploads" dir; otherwise under session dir
123
+ const subDir = sessionId ?? "uploads";
124
+ const relPath = `workspace/attachments/${subDir}/${filename}`;
125
+ const absPath = join(workDir, relPath);
126
+ // Ensure directory exists
127
+ const dir = join(workDir, "workspace", "attachments", subDir);
128
+ if (!(await fs.exists(dir))) {
129
+ await fs.mkdir(dir);
130
+ }
131
+ // Write file via FileSystem abstraction
132
+ const buffer = new Uint8Array(await file.arrayBuffer());
133
+ if (fs.writeFileBuffer) {
134
+ await fs.writeFileBuffer(absPath, buffer);
135
+ }
136
+ else {
137
+ await fs.writeFile(absPath, new TextDecoder().decode(buffer));
138
+ }
139
+ const attachment = {
140
+ id,
141
+ sessionId,
142
+ ...(messageId ? { messageId } : {}),
143
+ filename,
144
+ mimeType: file.type || guessMime(filename),
145
+ size: file.size,
146
+ path: relPath,
147
+ createdAt: new Date().toISOString(),
148
+ };
149
+ await attachmentStore.save(attachment);
150
+ results.push(attachment);
151
+ }
152
+ return c.json({ ok: true, data: results.length === 1 ? results[0] : results }, 201);
153
+ });
154
+ // GET /?sessionId=xxx — list attachments
155
+ app.openapi(listRoute, async (c) => {
156
+ const { attachmentStore } = getDeps();
157
+ const { sessionId } = c.req.valid("query");
158
+ const attachments = await attachmentStore.getBySession(sessionId);
159
+ return c.json({ ok: true, data: attachments }, 200);
160
+ });
161
+ // GET /:id — get metadata
162
+ app.openapi(getRoute, async (c) => {
163
+ const { attachmentStore } = getDeps();
164
+ const { id } = c.req.valid("param");
165
+ const attachment = await attachmentStore.get(id);
166
+ if (!attachment)
167
+ return c.json({ ok: false, error: "Not found" }, 404);
168
+ return c.json({ ok: true, data: attachment }, 200);
169
+ });
170
+ // GET /:id/download — download file
171
+ app.openapi(downloadRoute, async (c) => {
172
+ const { attachmentStore, fs, workDir } = getDeps();
173
+ const { id } = c.req.valid("param");
174
+ const attachment = await attachmentStore.get(id);
175
+ if (!attachment)
176
+ return c.json({ ok: false, error: "Not found" }, 404);
177
+ const absPath = join(workDir, attachment.path);
178
+ if (!(await fs.exists(absPath))) {
179
+ return c.json({ ok: false, error: "File not found on disk" }, 404);
180
+ }
181
+ let data;
182
+ if (fs.readFileBuffer) {
183
+ data = await fs.readFileBuffer(absPath);
184
+ }
185
+ else {
186
+ data = new TextEncoder().encode(await fs.readFile(absPath));
187
+ }
188
+ // ETag based on attachment ID + size (immutable once uploaded)
189
+ const etag = `"${attachment.id}-${attachment.size}"`;
190
+ const ifNoneMatch = c.req.header("If-None-Match");
191
+ if (ifNoneMatch === etag) {
192
+ return new Response(null, { status: 304, headers: { ETag: etag } });
193
+ }
194
+ return new Response(Buffer.from(data), {
195
+ headers: {
196
+ "Content-Type": attachment.mimeType,
197
+ "Content-Disposition": `inline; filename="${attachment.filename}"`,
198
+ "Content-Length": String(data.byteLength),
199
+ "Cache-Control": "private, max-age=3600, immutable",
200
+ "ETag": etag,
201
+ },
202
+ });
203
+ });
204
+ // DELETE /:id — delete attachment
205
+ app.openapi(deleteRoute, async (c) => {
206
+ const { attachmentStore, fs, workDir } = getDeps();
207
+ const { id } = c.req.valid("param");
208
+ const attachment = await attachmentStore.get(id);
209
+ if (!attachment)
210
+ return c.json({ ok: false, error: "Not found" }, 404);
211
+ // Delete file
212
+ const absPath = join(workDir, attachment.path);
213
+ try {
214
+ if (fs.unlink)
215
+ await fs.unlink(absPath);
216
+ }
217
+ catch { /* best effort */ }
218
+ // Delete metadata
219
+ await attachmentStore.delete(id);
220
+ return c.json({ ok: true }, 200);
221
+ });
222
+ return app;
223
+ }
224
+ //# sourceMappingURL=attachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/routes/attachments.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polpo-ai/server",
3
- "version": "0.10.11",
3
+ "version": "0.10.12",
4
4
  "description": "Polpo API route factories — edge-compatible Hono routes for tasks, agents, missions, vault, and more",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -20,8 +20,8 @@
20
20
  "hono": ">=4.0.0",
21
21
  "nanoid": ">=5.0.0",
22
22
  "typescript": "^5.7.3",
23
- "@polpo-ai/tools": "0.10.11",
24
- "@polpo-ai/core": "0.10.11"
23
+ "@polpo-ai/core": "0.10.12",
24
+ "@polpo-ai/tools": "0.10.12"
25
25
  },
26
26
  "peerDependencies": {
27
27
  "ai": ">=6.0.0",