@rpcbase/server 0.537.0 → 0.539.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/dist/email-DK8uUU4X.js +8045 -0
- package/dist/email-DK8uUU4X.js.map +1 -0
- package/dist/handler--FFBJMl6.js +153 -0
- package/dist/handler--FFBJMl6.js.map +1 -0
- package/dist/handler-0rPClEv4.js +663 -0
- package/dist/handler-0rPClEv4.js.map +1 -0
- package/dist/handler-COnCnprN.js +203 -0
- package/dist/handler-COnCnprN.js.map +1 -0
- package/dist/handler-ClQF4MOn.js +931 -0
- package/dist/handler-ClQF4MOn.js.map +1 -0
- package/dist/index.js +4988 -4830
- package/dist/index.js.map +1 -1
- package/dist/notifications.js +199 -134
- package/dist/notifications.js.map +1 -1
- package/dist/queryExecutor-Bol_iR8f.js +453 -0
- package/dist/queryExecutor-Bol_iR8f.js.map +1 -0
- package/dist/render_resend_false-MiC__Smr.js +6 -0
- package/dist/render_resend_false-MiC__Smr.js.map +1 -0
- package/dist/rts/index.d.ts +0 -1
- package/dist/rts/index.d.ts.map +1 -1
- package/dist/rts/index.js +1003 -842
- package/dist/rts/index.js.map +1 -1
- package/dist/schemas-Cjdjgehl.js +4225 -0
- package/dist/schemas-Cjdjgehl.js.map +1 -0
- package/dist/shared-nE84Or5W.js +111 -0
- package/dist/shared-nE84Or5W.js.map +1 -0
- package/dist/ssrMiddleware.d.ts +1 -1
- package/dist/uploads/api/file-uploads/handlers/completeUpload.d.ts.map +1 -1
- package/dist/uploads/api/file-uploads/postProcessors.d.ts +2 -0
- package/dist/uploads/api/file-uploads/postProcessors.d.ts.map +1 -1
- package/dist/uploads.js +103 -71
- package/dist/uploads.js.map +1 -1
- package/package.json +11 -10
- package/dist/email-H8nTAGxe.js +0 -12449
- package/dist/email-H8nTAGxe.js.map +0 -1
- package/dist/handler-BBzEodA0.js +0 -182
- package/dist/handler-BBzEodA0.js.map +0 -1
- package/dist/handler-BLwgdQv-.js +0 -544
- package/dist/handler-BLwgdQv-.js.map +0 -1
- package/dist/handler-BU_tEK6x.js +0 -749
- package/dist/handler-BU_tEK6x.js.map +0 -1
- package/dist/handler-CZD5p1Jv.js +0 -28
- package/dist/handler-CZD5p1Jv.js.map +0 -1
- package/dist/handler-Cq6MsoD4.js +0 -124
- package/dist/handler-Cq6MsoD4.js.map +0 -1
- package/dist/queryExecutor-JadZcQSQ.js +0 -318
- package/dist/queryExecutor-JadZcQSQ.js.map +0 -1
- package/dist/render_resend-DQANggpW.js +0 -7
- package/dist/render_resend-DQANggpW.js.map +0 -1
- package/dist/rts/api/cleanup/handler.d.ts +0 -9
- package/dist/rts/api/cleanup/handler.d.ts.map +0 -1
- package/dist/rts/api/cleanup/index.d.ts +0 -11
- package/dist/rts/api/cleanup/index.d.ts.map +0 -1
- package/dist/schemas-BR3K5Luo.js +0 -3824
- package/dist/schemas-BR3K5Luo.js.map +0 -1
- package/dist/shared-DhZ_rDdo.js +0 -87
- package/dist/shared-DhZ_rDdo.js.map +0 -1
package/dist/handler-BBzEodA0.js
DELETED
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import { d as getUploadKeyHash, i as getBucketName, p as getUserId, u as getTenantId } from "./shared-DhZ_rDdo.js";
|
|
2
|
-
import { GridFSBucket, ObjectId } from "mongodb";
|
|
3
|
-
import { getTenantFilesystemDb } from "@rpcbase/db";
|
|
4
|
-
//#region src/uploads/api/files/handlers/deleteFile.ts
|
|
5
|
-
var resolveHeaderString$1 = (value) => {
|
|
6
|
-
if (typeof value !== "string") return null;
|
|
7
|
-
const normalized = value.trim();
|
|
8
|
-
return normalized ? normalized : null;
|
|
9
|
-
};
|
|
10
|
-
var deleteFile = async (_payload, ctx) => {
|
|
11
|
-
const tenantId = getTenantId(ctx);
|
|
12
|
-
if (!tenantId) {
|
|
13
|
-
ctx.res.status(400);
|
|
14
|
-
return {
|
|
15
|
-
ok: false,
|
|
16
|
-
error: "tenant_missing"
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
const fileIdRaw = String(ctx.req.params?.fileId ?? "").trim();
|
|
20
|
-
let fileObjectId;
|
|
21
|
-
try {
|
|
22
|
-
fileObjectId = new ObjectId(fileIdRaw);
|
|
23
|
-
} catch {
|
|
24
|
-
ctx.res.status(400);
|
|
25
|
-
return {
|
|
26
|
-
ok: false,
|
|
27
|
-
error: "invalid_file_id"
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
const nativeDb = (await getTenantFilesystemDb(tenantId)).db;
|
|
31
|
-
if (!nativeDb) {
|
|
32
|
-
ctx.res.status(500);
|
|
33
|
-
return {
|
|
34
|
-
ok: false,
|
|
35
|
-
error: "filesystem_db_unavailable"
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
const bucket = new GridFSBucket(nativeDb, { bucketName: getBucketName() });
|
|
39
|
-
const userId = getUserId(ctx);
|
|
40
|
-
const uploadKeyHash = getUploadKeyHash(ctx);
|
|
41
|
-
if (!userId && !uploadKeyHash) {
|
|
42
|
-
ctx.res.status(401);
|
|
43
|
-
return {
|
|
44
|
-
ok: false,
|
|
45
|
-
error: "unauthorized"
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
const [file] = await bucket.find({ _id: fileObjectId }).limit(1).toArray();
|
|
49
|
-
if (!file) {
|
|
50
|
-
ctx.res.status(204);
|
|
51
|
-
return { ok: true };
|
|
52
|
-
}
|
|
53
|
-
const metadataUserId = resolveHeaderString$1(file?.metadata?.userId);
|
|
54
|
-
const ownerKeyHash = resolveHeaderString$1(file?.metadata?.ownerKeyHash);
|
|
55
|
-
if (!Boolean(userId && metadataUserId && userId === metadataUserId) && !Boolean(uploadKeyHash && ownerKeyHash && uploadKeyHash === ownerKeyHash)) {
|
|
56
|
-
ctx.res.status(401);
|
|
57
|
-
return {
|
|
58
|
-
ok: false,
|
|
59
|
-
error: "unauthorized"
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
try {
|
|
63
|
-
await bucket.delete(fileObjectId);
|
|
64
|
-
} catch (error) {
|
|
65
|
-
if (!(error instanceof Error ? error.message : String(error)).includes("FileNotFound")) {
|
|
66
|
-
ctx.res.status(500);
|
|
67
|
-
return {
|
|
68
|
-
ok: false,
|
|
69
|
-
error: "delete_failed"
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
ctx.res.status(204);
|
|
74
|
-
return { ok: true };
|
|
75
|
-
};
|
|
76
|
-
//#endregion
|
|
77
|
-
//#region src/uploads/api/files/handlers/getFile.ts
|
|
78
|
-
var resolveHeaderString = (value) => {
|
|
79
|
-
if (typeof value !== "string") return null;
|
|
80
|
-
const normalized = value.trim();
|
|
81
|
-
return normalized ? normalized : null;
|
|
82
|
-
};
|
|
83
|
-
var resolveHeaderBoolean = (value) => {
|
|
84
|
-
if (typeof value === "boolean") return value;
|
|
85
|
-
if (typeof value !== "string") return null;
|
|
86
|
-
const normalized = value.trim().toLowerCase();
|
|
87
|
-
if (!normalized) return null;
|
|
88
|
-
if (normalized === "true") return true;
|
|
89
|
-
if (normalized === "false") return false;
|
|
90
|
-
return null;
|
|
91
|
-
};
|
|
92
|
-
var escapeHeaderFilename = (filename) => filename.replace(/[\\"]/g, "_");
|
|
93
|
-
var getFile = async (_payload, ctx) => {
|
|
94
|
-
const tenantId = getTenantId(ctx);
|
|
95
|
-
if (!tenantId) {
|
|
96
|
-
ctx.res.status(400).end();
|
|
97
|
-
return {};
|
|
98
|
-
}
|
|
99
|
-
const fileIdRaw = String(ctx.req.params?.fileId ?? "").trim();
|
|
100
|
-
let fileObjectId;
|
|
101
|
-
try {
|
|
102
|
-
fileObjectId = new ObjectId(fileIdRaw);
|
|
103
|
-
} catch {
|
|
104
|
-
ctx.res.status(400).end();
|
|
105
|
-
return {};
|
|
106
|
-
}
|
|
107
|
-
const nativeDb = (await getTenantFilesystemDb(tenantId)).db;
|
|
108
|
-
if (!nativeDb) {
|
|
109
|
-
ctx.res.status(500).end();
|
|
110
|
-
return {};
|
|
111
|
-
}
|
|
112
|
-
const bucket = new GridFSBucket(nativeDb, { bucketName: getBucketName() });
|
|
113
|
-
const [file] = await bucket.find({ _id: fileObjectId }).limit(1).toArray();
|
|
114
|
-
if (!file) {
|
|
115
|
-
ctx.res.status(404).end();
|
|
116
|
-
return {};
|
|
117
|
-
}
|
|
118
|
-
if (!(resolveHeaderBoolean(file?.metadata?.isPublic) ?? false)) {
|
|
119
|
-
const userId = getUserId(ctx);
|
|
120
|
-
const uploadKeyHash = getUploadKeyHash(ctx);
|
|
121
|
-
const metadataUserId = resolveHeaderString(file?.metadata?.userId);
|
|
122
|
-
const ownerKeyHash = resolveHeaderString(file?.metadata?.ownerKeyHash);
|
|
123
|
-
if (!Boolean(userId && metadataUserId && userId === metadataUserId) && !Boolean(uploadKeyHash && ownerKeyHash && uploadKeyHash === ownerKeyHash)) {
|
|
124
|
-
ctx.res.status(401).end();
|
|
125
|
-
return {};
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
const mimeType = resolveHeaderString(file?.metadata?.mimeType) ?? "application/octet-stream";
|
|
129
|
-
const filenameSafe = escapeHeaderFilename(resolveHeaderString(file?.filename) ?? fileIdRaw);
|
|
130
|
-
const cacheControl = "private, max-age=0, must-revalidate";
|
|
131
|
-
const md5 = resolveHeaderString(file?.md5);
|
|
132
|
-
const uploadDate = file?.uploadDate instanceof Date ? file.uploadDate : null;
|
|
133
|
-
const etagValue = md5 ?? `${fileObjectId.toHexString()}-${String(file?.length ?? 0)}-${String(uploadDate?.getTime() ?? 0)}`;
|
|
134
|
-
const etag = md5 ? `"${etagValue}"` : `W/"${etagValue}"`;
|
|
135
|
-
const ifNoneMatch = resolveHeaderString(ctx.req.headers?.["if-none-match"]);
|
|
136
|
-
if (ifNoneMatch) {
|
|
137
|
-
const candidates = ifNoneMatch.split(",").map((value) => value.trim()).filter(Boolean);
|
|
138
|
-
if (candidates.includes("*") || candidates.includes(etag)) {
|
|
139
|
-
ctx.res.status(304);
|
|
140
|
-
ctx.res.setHeader("Cache-Control", cacheControl);
|
|
141
|
-
ctx.res.setHeader("ETag", etag);
|
|
142
|
-
ctx.res.end();
|
|
143
|
-
return {};
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
ctx.res.status(200);
|
|
147
|
-
ctx.res.setHeader("Content-Type", mimeType);
|
|
148
|
-
ctx.res.setHeader("Content-Length", String(file?.length ?? 0));
|
|
149
|
-
ctx.res.setHeader("Content-Disposition", `inline; filename="${filenameSafe}"`);
|
|
150
|
-
ctx.res.setHeader("Cache-Control", cacheControl);
|
|
151
|
-
ctx.res.setHeader("ETag", etag);
|
|
152
|
-
ctx.res.setHeader("X-Content-Type-Options", "nosniff");
|
|
153
|
-
if (mimeType === "image/svg+xml") ctx.res.setHeader("Content-Security-Policy", "default-src 'none'; style-src 'unsafe-inline'; sandbox; base-uri 'none'; form-action 'none'");
|
|
154
|
-
ctx.res.flushHeaders();
|
|
155
|
-
if (ctx.req.method === "HEAD") {
|
|
156
|
-
ctx.res.end();
|
|
157
|
-
return {};
|
|
158
|
-
}
|
|
159
|
-
const stream = bucket.openDownloadStream(fileObjectId);
|
|
160
|
-
stream.on("error", () => {
|
|
161
|
-
try {
|
|
162
|
-
ctx.res.destroy();
|
|
163
|
-
} catch {}
|
|
164
|
-
});
|
|
165
|
-
stream.pipe(ctx.res);
|
|
166
|
-
return {};
|
|
167
|
-
};
|
|
168
|
-
//#endregion
|
|
169
|
-
//#region src/uploads/api/files/index.ts
|
|
170
|
-
var Route = "/api/rb/files/:fileId";
|
|
171
|
-
var GetRoute = Route;
|
|
172
|
-
var DeleteRoute = Route;
|
|
173
|
-
//#endregion
|
|
174
|
-
//#region src/uploads/api/files/handler.ts
|
|
175
|
-
var handler_default = (api) => {
|
|
176
|
-
api.get(GetRoute, getFile);
|
|
177
|
-
api.delete(DeleteRoute, deleteFile);
|
|
178
|
-
};
|
|
179
|
-
//#endregion
|
|
180
|
-
export { handler_default as default };
|
|
181
|
-
|
|
182
|
-
//# sourceMappingURL=handler-BBzEodA0.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handler-BBzEodA0.js","names":["ApiHandler","getTenantFilesystemDb","GridFSBucket","ObjectId","getBucketName","getTenantId","getUploadKeyHash","getUserId","SessionUser","DeleteResponsePayload","ok","error","resolveHeaderString","value","normalized","trim","deleteFile","Record","_payload","ctx","Promise","tenantId","res","status","fileIdRaw","String","req","params","fileId","fileObjectId","fsDb","nativeDb","db","bucketName","bucket","userId","uploadKeyHash","file","find","_id","limit","toArray","metadataUserId","metadata","ownerKeyHash","authorizedByUser","Boolean","authorizedByKey","delete","message","Error","includes","ApiHandler","getTenantFilesystemDb","GridFSBucket","ObjectId","getBucketName","getTenantId","getUploadKeyHash","getUserId","SessionUser","resolveHeaderString","value","normalized","trim","resolveHeaderBoolean","toLowerCase","escapeHeaderFilename","filename","replace","getFile","Record","_payload","ctx","Promise","tenantId","res","status","end","fileIdRaw","String","req","params","fileId","fileObjectId","fsDb","nativeDb","db","bucketName","bucket","file","find","_id","limit","toArray","isPublic","metadata","userId","uploadKeyHash","metadataUserId","ownerKeyHash","authorizedByUser","Boolean","authorizedByKey","mimeTypeFromMetadata","mimeType","filenameFromDb","filenameSafe","cacheControl","md5","uploadDate","Date","etagValue","toHexString","length","getTime","etag","ifNoneMatch","headers","candidates","split","map","filter","includes","setHeader","flushHeaders","method","stream","openDownloadStream","on","destroy","pipe","Route","GetRoute","DeleteRoute","Api","deleteFile","getFile","Files","api","get","GetRoute","delete","DeleteRoute"],"sources":["../src/uploads/api/files/handlers/deleteFile.ts","../src/uploads/api/files/handlers/getFile.ts","../src/uploads/api/files/index.ts","../src/uploads/api/files/handler.ts"],"sourcesContent":["import { ApiHandler } from \"@rpcbase/api\"\nimport { getTenantFilesystemDb } from \"@rpcbase/db\"\nimport { GridFSBucket, ObjectId } from \"mongodb\"\n\nimport { getBucketName, getTenantId, getUploadKeyHash, getUserId, type SessionUser } from \"../../file-uploads/shared\"\n\n\ntype DeleteResponsePayload = {\n ok: boolean\n error?: string\n}\n\nconst resolveHeaderString = (value: unknown): string | null => {\n if (typeof value !== \"string\") return null\n const normalized = value.trim()\n return normalized ? normalized : null\n}\n\nexport const deleteFile: ApiHandler<Record<string, never>, DeleteResponsePayload, SessionUser> = async (\n _payload,\n ctx,\n): Promise<DeleteResponsePayload> => {\n const tenantId = getTenantId(ctx)\n if (!tenantId) {\n ctx.res.status(400)\n return { ok: false, error: \"tenant_missing\" }\n }\n\n const fileIdRaw = String(ctx.req.params?.fileId ?? \"\").trim()\n let fileObjectId: ObjectId\n try {\n fileObjectId = new ObjectId(fileIdRaw)\n } catch {\n ctx.res.status(400)\n return { ok: false, error: \"invalid_file_id\" }\n }\n\n const fsDb = await getTenantFilesystemDb(tenantId)\n const nativeDb = fsDb.db\n if (!nativeDb) {\n ctx.res.status(500)\n return { ok: false, error: \"filesystem_db_unavailable\" }\n }\n\n const bucketName = getBucketName()\n const bucket = new GridFSBucket(nativeDb, { bucketName })\n\n const userId = getUserId(ctx)\n const uploadKeyHash = getUploadKeyHash(ctx)\n if (!userId && !uploadKeyHash) {\n ctx.res.status(401)\n return { ok: false, error: \"unauthorized\" }\n }\n\n const [file] = await bucket.find({ _id: fileObjectId }).limit(1).toArray()\n if (!file) {\n ctx.res.status(204)\n return { ok: true }\n }\n\n const metadataUserId = resolveHeaderString((file as any)?.metadata?.userId)\n const ownerKeyHash = resolveHeaderString((file as any)?.metadata?.ownerKeyHash)\n\n const authorizedByUser = Boolean(userId && metadataUserId && userId === metadataUserId)\n const authorizedByKey = Boolean(uploadKeyHash && ownerKeyHash && uploadKeyHash === ownerKeyHash)\n\n if (!authorizedByUser && !authorizedByKey) {\n ctx.res.status(401)\n return { ok: false, error: \"unauthorized\" }\n }\n\n try {\n await bucket.delete(fileObjectId)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n if (!message.includes(\"FileNotFound\")) {\n ctx.res.status(500)\n return { ok: false, error: \"delete_failed\" }\n }\n }\n\n ctx.res.status(204)\n return { ok: true }\n}\n","import { ApiHandler } from \"@rpcbase/api\"\nimport { getTenantFilesystemDb } from \"@rpcbase/db\"\nimport { GridFSBucket, ObjectId } from \"mongodb\"\n\nimport { getBucketName, getTenantId, getUploadKeyHash, getUserId, type SessionUser } from \"../../file-uploads/shared\"\n\n\nconst resolveHeaderString = (value: unknown): string | null => {\n if (typeof value !== \"string\") return null\n const normalized = value.trim()\n return normalized ? normalized : null\n}\n\nconst resolveHeaderBoolean = (value: unknown): boolean | null => {\n if (typeof value === \"boolean\") return value\n if (typeof value !== \"string\") return null\n const normalized = value.trim().toLowerCase()\n if (!normalized) return null\n if (normalized === \"true\") return true\n if (normalized === \"false\") return false\n return null\n}\n\nconst escapeHeaderFilename = (filename: string): string => filename.replace(/[\\\\\"]/g, \"_\")\n\nexport const getFile: ApiHandler<Record<string, never>, Record<string, never>, SessionUser> = async (\n _payload,\n ctx,\n): Promise<Record<string, never>> => {\n const tenantId = getTenantId(ctx)\n if (!tenantId) {\n ctx.res.status(400).end()\n return {}\n }\n\n const fileIdRaw = String(ctx.req.params?.fileId ?? \"\").trim()\n let fileObjectId: ObjectId\n try {\n fileObjectId = new ObjectId(fileIdRaw)\n } catch {\n ctx.res.status(400).end()\n return {}\n }\n\n const fsDb = await getTenantFilesystemDb(tenantId)\n const nativeDb = fsDb.db\n if (!nativeDb) {\n ctx.res.status(500).end()\n return {}\n }\n\n const bucketName = getBucketName()\n const bucket = new GridFSBucket(nativeDb, { bucketName })\n\n const [file] = await bucket.find({ _id: fileObjectId }).limit(1).toArray()\n if (!file) {\n ctx.res.status(404).end()\n return {}\n }\n\n const isPublic = resolveHeaderBoolean((file as any)?.metadata?.isPublic) ?? false\n if (!isPublic) {\n const userId = getUserId(ctx)\n const uploadKeyHash = getUploadKeyHash(ctx)\n const metadataUserId = resolveHeaderString((file as any)?.metadata?.userId)\n const ownerKeyHash = resolveHeaderString((file as any)?.metadata?.ownerKeyHash)\n\n const authorizedByUser = Boolean(userId && metadataUserId && userId === metadataUserId)\n const authorizedByKey = Boolean(uploadKeyHash && ownerKeyHash && uploadKeyHash === ownerKeyHash)\n\n if (!authorizedByUser && !authorizedByKey) {\n ctx.res.status(401).end()\n return {}\n }\n }\n\n const mimeTypeFromMetadata = resolveHeaderString((file as any)?.metadata?.mimeType)\n const mimeType = mimeTypeFromMetadata ?? \"application/octet-stream\"\n const filenameFromDb = resolveHeaderString((file as any)?.filename)\n const filename = filenameFromDb ?? fileIdRaw\n const filenameSafe = escapeHeaderFilename(filename)\n\n const cacheControl = \"private, max-age=0, must-revalidate\"\n const md5 = resolveHeaderString((file as any)?.md5)\n const uploadDate = (file as any)?.uploadDate instanceof Date ? (file as any).uploadDate : null\n const etagValue = md5 ?? `${fileObjectId.toHexString()}-${String((file as any)?.length ?? 0)}-${String(uploadDate?.getTime() ?? 0)}`\n const etag = md5 ? `\"${etagValue}\"` : `W/\"${etagValue}\"`\n const ifNoneMatch = resolveHeaderString((ctx.req.headers as any)?.[\"if-none-match\"])\n if (ifNoneMatch) {\n const candidates = ifNoneMatch.split(\",\").map((value) => value.trim()).filter(Boolean)\n if (candidates.includes(\"*\") || candidates.includes(etag)) {\n ctx.res.status(304)\n ctx.res.setHeader(\"Cache-Control\", cacheControl)\n ctx.res.setHeader(\"ETag\", etag)\n ctx.res.end()\n return {}\n }\n }\n\n ctx.res.status(200)\n ctx.res.setHeader(\"Content-Type\", mimeType)\n ctx.res.setHeader(\"Content-Length\", String((file as any)?.length ?? 0))\n ctx.res.setHeader(\"Content-Disposition\", `inline; filename=\"${filenameSafe}\"`)\n ctx.res.setHeader(\"Cache-Control\", cacheControl)\n ctx.res.setHeader(\"ETag\", etag)\n ctx.res.setHeader(\"X-Content-Type-Options\", \"nosniff\")\n if (mimeType === \"image/svg+xml\") {\n ctx.res.setHeader(\n \"Content-Security-Policy\",\n \"default-src 'none'; style-src 'unsafe-inline'; sandbox; base-uri 'none'; form-action 'none'\",\n )\n }\n ctx.res.flushHeaders()\n\n if (ctx.req.method === \"HEAD\") {\n ctx.res.end()\n return {}\n }\n\n const stream = bucket.openDownloadStream(fileObjectId)\n\n stream.on(\"error\", () => {\n try {\n ctx.res.destroy()\n } catch {\n //\n }\n })\n\n stream.pipe(ctx.res)\n return {}\n}\n","export const Route = \"/api/rb/files/:fileId\"\n\nexport const GetRoute = Route\nexport const DeleteRoute = Route\n","import { Api } from \"@rpcbase/api\"\n\nimport { deleteFile } from \"./handlers/deleteFile\"\nimport { getFile } from \"./handlers/getFile\"\n\nimport * as Files from \"./index\"\n\n\nexport default (api: Api) => {\n api.get(Files.GetRoute, getFile)\n api.delete(Files.DeleteRoute, deleteFile)\n}\n"],"mappings":"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"}
|