@rpcbase/server 0.538.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.
Files changed (54) hide show
  1. package/dist/email-DK8uUU4X.js +8045 -0
  2. package/dist/email-DK8uUU4X.js.map +1 -0
  3. package/dist/handler--FFBJMl6.js +153 -0
  4. package/dist/handler--FFBJMl6.js.map +1 -0
  5. package/dist/handler-0rPClEv4.js +663 -0
  6. package/dist/handler-0rPClEv4.js.map +1 -0
  7. package/dist/handler-COnCnprN.js +203 -0
  8. package/dist/handler-COnCnprN.js.map +1 -0
  9. package/dist/handler-ClQF4MOn.js +931 -0
  10. package/dist/handler-ClQF4MOn.js.map +1 -0
  11. package/dist/index.js +4988 -4830
  12. package/dist/index.js.map +1 -1
  13. package/dist/notifications.js +199 -134
  14. package/dist/notifications.js.map +1 -1
  15. package/dist/queryExecutor-Bol_iR8f.js +453 -0
  16. package/dist/queryExecutor-Bol_iR8f.js.map +1 -0
  17. package/dist/render_resend_false-MiC__Smr.js +6 -0
  18. package/dist/render_resend_false-MiC__Smr.js.map +1 -0
  19. package/dist/rts/index.d.ts +0 -1
  20. package/dist/rts/index.d.ts.map +1 -1
  21. package/dist/rts/index.js +1003 -842
  22. package/dist/rts/index.js.map +1 -1
  23. package/dist/schemas-Cjdjgehl.js +4225 -0
  24. package/dist/schemas-Cjdjgehl.js.map +1 -0
  25. package/dist/shared-nE84Or5W.js +111 -0
  26. package/dist/shared-nE84Or5W.js.map +1 -0
  27. package/dist/ssrMiddleware.d.ts +1 -1
  28. package/dist/uploads.js +99 -84
  29. package/dist/uploads.js.map +1 -1
  30. package/package.json +9 -9
  31. package/dist/email-H8nTAGxe.js +0 -12449
  32. package/dist/email-H8nTAGxe.js.map +0 -1
  33. package/dist/handler-BBzEodA0.js +0 -182
  34. package/dist/handler-BBzEodA0.js.map +0 -1
  35. package/dist/handler-BLwgdQv-.js +0 -544
  36. package/dist/handler-BLwgdQv-.js.map +0 -1
  37. package/dist/handler-CZD5p1Jv.js +0 -28
  38. package/dist/handler-CZD5p1Jv.js.map +0 -1
  39. package/dist/handler-Cq6MsoD4.js +0 -124
  40. package/dist/handler-Cq6MsoD4.js.map +0 -1
  41. package/dist/handler-DBtnVvP2.js +0 -756
  42. package/dist/handler-DBtnVvP2.js.map +0 -1
  43. package/dist/queryExecutor-JadZcQSQ.js +0 -318
  44. package/dist/queryExecutor-JadZcQSQ.js.map +0 -1
  45. package/dist/render_resend-DQANggpW.js +0 -7
  46. package/dist/render_resend-DQANggpW.js.map +0 -1
  47. package/dist/rts/api/cleanup/handler.d.ts +0 -9
  48. package/dist/rts/api/cleanup/handler.d.ts.map +0 -1
  49. package/dist/rts/api/cleanup/index.d.ts +0 -11
  50. package/dist/rts/api/cleanup/index.d.ts.map +0 -1
  51. package/dist/schemas-BR3K5Luo.js +0 -3824
  52. package/dist/schemas-BR3K5Luo.js.map +0 -1
  53. package/dist/shared-DhZ_rDdo.js +0 -87
  54. package/dist/shared-DhZ_rDdo.js.map +0 -1
@@ -0,0 +1,111 @@
1
+ import { createHash } from "node:crypto";
2
+ import { buildAbilityFromSession, getAccessibleByQuery } from "@rpcbase/db/acl";
3
+ const DEFAULT_CHUNK_SIZE_BYTES = 5 * 1024 * 1024;
4
+ const MAX_CHUNK_SIZE_BYTES = 15 * 1024 * 1024;
5
+ const DEFAULT_MAX_CLIENT_BYTES_PER_SECOND = 10 * 1024 * 1024;
6
+ const DEFAULT_SESSION_TTL_S = 60 * 60 * 24;
7
+ const ensuredIndexDbNames = /* @__PURE__ */ new Set();
8
+ const parseOptionalPositiveInt = (rawValue) => {
9
+ if (typeof rawValue !== "string") return null;
10
+ const normalized = rawValue.trim();
11
+ if (!normalized) return null;
12
+ const parsed = Number(normalized);
13
+ if (!Number.isFinite(parsed) || parsed <= 0) return null;
14
+ return Math.floor(parsed);
15
+ };
16
+ const getChunkSizeBytes = () => {
17
+ const configured = parseOptionalPositiveInt(process.env.RB_UPLOAD_CHUNK_SIZE_BYTES);
18
+ const resolved = configured ?? DEFAULT_CHUNK_SIZE_BYTES;
19
+ return Math.min(MAX_CHUNK_SIZE_BYTES, resolved);
20
+ };
21
+ const getMaxClientUploadBytesPerSecond = () => {
22
+ const configured = parseOptionalPositiveInt(process.env.RB_UPLOAD_MAX_CLIENT_BYTES_PER_SECOND);
23
+ return configured ?? DEFAULT_MAX_CLIENT_BYTES_PER_SECOND;
24
+ };
25
+ const getSessionTtlMs = () => {
26
+ const ttlSeconds = parseOptionalPositiveInt(process.env.RB_UPLOAD_SESSION_TTL_S) ?? DEFAULT_SESSION_TTL_S;
27
+ return ttlSeconds * 1e3;
28
+ };
29
+ const getRawBodyLimitBytes = (chunkSizeBytes) => chunkSizeBytes + 1024 * 1024;
30
+ const getBucketName = () => (process.env.RB_FILESYSTEM_BUCKET_NAME ?? "").trim() || "fs";
31
+ const getUserId = (ctx) => {
32
+ const raw = ctx.req.session?.user?.id;
33
+ if (typeof raw !== "string") return null;
34
+ const normalized = raw.trim();
35
+ return normalized ? normalized : null;
36
+ };
37
+ const getTenantId = (ctx) => {
38
+ const rawSession = ctx.req.session?.user?.currentTenantId;
39
+ const sessionTenantId = typeof rawSession === "string" ? rawSession.trim() : "";
40
+ const userId = getUserId(ctx);
41
+ const rawQuery = ctx.req.query?.["rb-tenant-id"];
42
+ const queryTenantId = Array.isArray(rawQuery) ? rawQuery[0] : rawQuery;
43
+ const queryValue = typeof queryTenantId === "string" && queryTenantId.trim() ? queryTenantId.trim() : null;
44
+ if (!userId && queryValue) return queryValue;
45
+ if (userId) return sessionTenantId || null;
46
+ if (sessionTenantId) return sessionTenantId;
47
+ return queryValue;
48
+ };
49
+ const computeSha256Hex = (data) => createHash("sha256").update(data).digest("hex");
50
+ const normalizeSha256Hex = (value) => value.trim().toLowerCase();
51
+ const getModelCtx = (_ctx, tenantId, ability) => ({
52
+ req: {
53
+ session: {
54
+ user: {
55
+ currentTenantId: tenantId
56
+ }
57
+ }
58
+ },
59
+ ability
60
+ });
61
+ const toBufferPayload = (payload) => {
62
+ if (Buffer.isBuffer(payload)) return payload;
63
+ if (payload instanceof Uint8Array) return Buffer.from(payload);
64
+ return null;
65
+ };
66
+ const ensureUploadIndexes = async (UploadSession, UploadChunk) => {
67
+ const dbName = String(UploadSession?.db?.name ?? "");
68
+ if (dbName && ensuredIndexDbNames.has(dbName)) return;
69
+ await Promise.all([UploadSession.createIndexes(), UploadChunk.createIndexes()]);
70
+ if (dbName) ensuredIndexDbNames.add(dbName);
71
+ };
72
+ const normalizeUploadKey = (raw) => {
73
+ if (typeof raw !== "string") return null;
74
+ const normalized = raw.trim();
75
+ return normalized ? normalized : null;
76
+ };
77
+ const getUploadKeyHash = (ctx) => {
78
+ const uploadKey = normalizeUploadKey(ctx.req.get("X-Upload-Key"));
79
+ if (!uploadKey) return null;
80
+ return computeSha256Hex(Buffer.from(uploadKey));
81
+ };
82
+ const buildUploadsAbility = (ctx, tenantId) => {
83
+ const uploadKeyHash = getUploadKeyHash(ctx);
84
+ const claims = uploadKeyHash ? {
85
+ uploadKeyHash
86
+ } : void 0;
87
+ return buildAbilityFromSession({
88
+ tenantId,
89
+ session: ctx.req.session,
90
+ claims
91
+ });
92
+ };
93
+ const getUploadSessionAccessQuery = (ability, action) => getAccessibleByQuery(ability, action, "RBUploadSession");
94
+ export {
95
+ getUploadSessionAccessQuery as a,
96
+ buildUploadsAbility as b,
97
+ getBucketName as c,
98
+ getModelCtx as d,
99
+ ensureUploadIndexes as e,
100
+ getUserId as f,
101
+ getTenantId as g,
102
+ getChunkSizeBytes as h,
103
+ getSessionTtlMs as i,
104
+ computeSha256Hex as j,
105
+ getMaxClientUploadBytesPerSecond as k,
106
+ getRawBodyLimitBytes as l,
107
+ getUploadKeyHash as m,
108
+ normalizeSha256Hex as n,
109
+ toBufferPayload as t
110
+ };
111
+ //# sourceMappingURL=shared-nE84Or5W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-nE84Or5W.js","sources":["../src/uploads/api/file-uploads/shared.ts"],"sourcesContent":["import { createHash, timingSafeEqual } from \"node:crypto\"\n\nimport { Ctx } from \"@rpcbase/api\"\nimport {\n type IRBUploadChunk,\n type IRBUploadSession,\n type LoadModelCtx,\n} from \"@rpcbase/db\"\nimport { buildAbilityFromSession, getAccessibleByQuery, type AppAbility } from \"@rpcbase/db/acl\"\nimport type { Model } from \"mongoose\"\n\n\nexport type SessionUser = {\n id?: string\n currentTenantId?: string\n}\n\nexport type UploadSessionDoc = IRBUploadSession\nexport type UploadChunkDoc = Omit<IRBUploadChunk, \"data\"> & { data: Buffer }\n\nconst DEFAULT_CHUNK_SIZE_BYTES = 5 * 1024 * 1024\nconst MAX_CHUNK_SIZE_BYTES = 15 * 1024 * 1024\n\nconst DEFAULT_MAX_CLIENT_BYTES_PER_SECOND = 10 * 1024 * 1024\n\nconst DEFAULT_SESSION_TTL_S = 60 * 60 * 24\n\nconst ensuredIndexDbNames = new Set<string>()\n\nconst parseOptionalPositiveInt = (rawValue: unknown): number | null => {\n if (typeof rawValue !== \"string\") return null\n const normalized = rawValue.trim()\n if (!normalized) return null\n const parsed = Number(normalized)\n if (!Number.isFinite(parsed) || parsed <= 0) return null\n return Math.floor(parsed)\n}\n\nexport const getChunkSizeBytes = (): number => {\n const configured = parseOptionalPositiveInt(process.env.RB_UPLOAD_CHUNK_SIZE_BYTES)\n const resolved = configured ?? DEFAULT_CHUNK_SIZE_BYTES\n return Math.min(MAX_CHUNK_SIZE_BYTES, resolved)\n}\n\nexport const getMaxClientUploadBytesPerSecond = (): number | null => {\n const configured = parseOptionalPositiveInt(process.env.RB_UPLOAD_MAX_CLIENT_BYTES_PER_SECOND)\n return configured ?? DEFAULT_MAX_CLIENT_BYTES_PER_SECOND\n}\n\nexport const getSessionTtlMs = (): number => {\n const ttlSeconds = parseOptionalPositiveInt(process.env.RB_UPLOAD_SESSION_TTL_S) ?? DEFAULT_SESSION_TTL_S\n return ttlSeconds * 1000\n}\n\nexport const getRawBodyLimitBytes = (chunkSizeBytes: number): number => chunkSizeBytes + 1024 * 1024\n\nexport const getBucketName = (): string => (process.env.RB_FILESYSTEM_BUCKET_NAME ?? \"\").trim() || \"fs\"\n\nexport const getUserId = (ctx: Ctx<SessionUser>): string | null => {\n const raw = ctx.req.session?.user?.id\n if (typeof raw !== \"string\") return null\n const normalized = raw.trim()\n return normalized ? normalized : null\n}\n\nexport const getTenantId = (ctx: Ctx<SessionUser>): string | null => {\n const rawSession = ctx.req.session?.user?.currentTenantId\n const sessionTenantId = typeof rawSession === \"string\" ? rawSession.trim() : \"\"\n\n const userId = getUserId(ctx)\n const rawQuery = ctx.req.query?.[\"rb-tenant-id\"]\n const queryTenantId = Array.isArray(rawQuery) ? rawQuery[0] : rawQuery\n const queryValue = typeof queryTenantId === \"string\" && queryTenantId.trim() ? queryTenantId.trim() : null\n\n if (!userId && queryValue) return queryValue\n\n if (userId) return sessionTenantId || null\n\n if (sessionTenantId) return sessionTenantId\n\n return queryValue\n}\n\nexport const computeSha256Hex = (data: Buffer): string => createHash(\"sha256\").update(data).digest(\"hex\")\n\nexport const normalizeSha256Hex = (value: string): string => value.trim().toLowerCase()\n\nexport const getModelCtx = (_ctx: Ctx<SessionUser>, tenantId: string, ability?: AppAbility): LoadModelCtx => ({\n req: {\n session: {\n user: {\n currentTenantId: tenantId,\n },\n },\n },\n ability,\n})\n\nexport const toBufferPayload = (payload: unknown): Buffer | null => {\n if (Buffer.isBuffer(payload)) return payload\n if (payload instanceof Uint8Array) return Buffer.from(payload)\n return null\n}\n\nexport const ensureUploadIndexes = async (\n UploadSession: Model<UploadSessionDoc>,\n UploadChunk: Model<UploadChunkDoc>,\n): Promise<void> => {\n const dbName = String((UploadSession as unknown as { db?: { name?: unknown } })?.db?.name ?? \"\")\n if (dbName && ensuredIndexDbNames.has(dbName)) return\n\n await Promise.all([\n UploadSession.createIndexes(),\n UploadChunk.createIndexes(),\n ])\n\n if (dbName) ensuredIndexDbNames.add(dbName)\n}\n\nconst normalizeUploadKey = (raw: unknown): string | null => {\n if (typeof raw !== \"string\") return null\n const normalized = raw.trim()\n return normalized ? normalized : null\n}\n\nexport const getUploadKeyHash = (ctx: Ctx<SessionUser>): string | null => {\n const uploadKey = normalizeUploadKey(ctx.req.get(\"X-Upload-Key\"))\n if (!uploadKey) return null\n return computeSha256Hex(Buffer.from(uploadKey))\n}\n\nexport const buildUploadsAbility = (ctx: Ctx<SessionUser>, tenantId: string): AppAbility => {\n const uploadKeyHash = getUploadKeyHash(ctx)\n const claims = uploadKeyHash ? { uploadKeyHash } : undefined\n return buildAbilityFromSession({ tenantId, session: ctx.req.session, claims })\n}\n\nexport const getUploadSessionAccessQuery = (\n ability: AppAbility,\n action: \"read\" | \"update\" | \"delete\",\n): Record<string, unknown> => getAccessibleByQuery(ability, action, \"RBUploadSession\")\n\nconst timingSafeEqualHex = (left: string, right: string): boolean => {\n if (left.length !== right.length) return false\n try {\n return timingSafeEqual(Buffer.from(left, \"hex\"), Buffer.from(right, \"hex\"))\n } catch {\n return false\n }\n}\n\nexport const getOwnershipSelector = (\n ctx: Ctx<SessionUser>,\n session: Pick<UploadSessionDoc, \"userId\" | \"ownerKeyHash\">,\n): { userId?: string; ownerKeyHash?: string } | null => {\n if (session.userId) {\n const userId = getUserId(ctx)\n if (!userId || userId !== session.userId) return null\n return { userId: session.userId }\n }\n\n if (session.ownerKeyHash) {\n const uploadKeyHash = getUploadKeyHash(ctx)\n if (!uploadKeyHash) return null\n if (!timingSafeEqualHex(session.ownerKeyHash, uploadKeyHash)) return null\n return { ownerKeyHash: session.ownerKeyHash }\n }\n\n return null\n}\n"],"names":["DEFAULT_CHUNK_SIZE_BYTES","MAX_CHUNK_SIZE_BYTES","DEFAULT_MAX_CLIENT_BYTES_PER_SECOND","DEFAULT_SESSION_TTL_S","ensuredIndexDbNames","Set","parseOptionalPositiveInt","rawValue","normalized","trim","parsed","Number","isFinite","Math","floor","getChunkSizeBytes","configured","process","env","RB_UPLOAD_CHUNK_SIZE_BYTES","resolved","min","getMaxClientUploadBytesPerSecond","RB_UPLOAD_MAX_CLIENT_BYTES_PER_SECOND","getSessionTtlMs","ttlSeconds","RB_UPLOAD_SESSION_TTL_S","getRawBodyLimitBytes","chunkSizeBytes","getBucketName","RB_FILESYSTEM_BUCKET_NAME","getUserId","ctx","raw","req","session","user","id","getTenantId","rawSession","currentTenantId","sessionTenantId","userId","rawQuery","query","queryTenantId","Array","isArray","queryValue","computeSha256Hex","data","createHash","update","digest","normalizeSha256Hex","value","toLowerCase","getModelCtx","_ctx","tenantId","ability","toBufferPayload","payload","Buffer","isBuffer","Uint8Array","from","ensureUploadIndexes","UploadSession","UploadChunk","dbName","String","db","name","has","Promise","all","createIndexes","add","normalizeUploadKey","getUploadKeyHash","uploadKey","get","buildUploadsAbility","uploadKeyHash","claims","undefined","buildAbilityFromSession","getUploadSessionAccessQuery","action","getAccessibleByQuery"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { SsrErrorStatePayload } from '@rpcbase/client';
2
2
  import { StaticHandler } from '@rpcbase/router';
3
- import { createServer } from '../../node_modules/vite/dist/node/index.d.ts';
3
+ import { createServer } from 'vite';
4
4
  import { ComponentType } from 'react';
5
5
  import { NextFunction, Request, Response } from 'express';
6
6
  import { PostHog } from 'posthog-node';
package/dist/uploads.js CHANGED
@@ -1,94 +1,109 @@
1
1
  import { queue } from "@rpcbase/worker";
2
- //#region src/uploads/routes.ts
3
- var routes = Object.entries({ .../* @__PURE__ */ Object.assign({
4
- "./api/file-uploads/handler.ts": () => import("./handler-DBtnVvP2.js"),
5
- "./api/files/handler.ts": () => import("./handler-BBzEodA0.js")
6
- }) }).reduce((acc, [path, mod]) => {
7
- acc[path.replace("./api/", "@rpcbase/server/uploads/api/")] = mod;
8
- return acc;
2
+ const routes = Object.entries({
3
+ .../* @__PURE__ */ Object.assign({ "./api/file-uploads/handler.ts": () => import("./handler-ClQF4MOn.js"), "./api/files/handler.ts": () => import("./handler-COnCnprN.js") })
4
+ }).reduce((acc, [path, mod]) => {
5
+ acc[path.replace("./api/", "@rpcbase/server/uploads/api/")] = mod;
6
+ return acc;
9
7
  }, {});
10
- //#endregion
11
- //#region src/uploads/api/file-uploads/postProcessors.ts
12
- var processorsById = Object.create(null);
13
- var uploadPostProcessorTaskName = "rb-upload-post-processors";
14
- var normalizeProcessorId = (value) => typeof value === "string" ? value.trim() : "";
15
- var normalizeProcessorVersion = (value) => {
16
- if (typeof value !== "number") return void 0;
17
- if (!Number.isInteger(value) || value < 1) return void 0;
18
- return value;
8
+ const processorsById = /* @__PURE__ */ Object.create(null);
9
+ const uploadPostProcessorTaskName = "rb-upload-post-processors";
10
+ const normalizeProcessorId = (value) => typeof value === "string" ? value.trim() : "";
11
+ const normalizeProcessorVersion = (value) => {
12
+ if (typeof value !== "number") return void 0;
13
+ if (!Number.isInteger(value) || value < 1) return void 0;
14
+ return value;
19
15
  };
20
- var registerUploadPostProcessor = (processor) => {
21
- const normalizedId = normalizeProcessorId(processor.id);
22
- if (!normalizedId) throw new Error("Upload post processor id is required.");
23
- const normalizedVersion = normalizeProcessorVersion(processor.version);
24
- processorsById[normalizedId] = {
25
- ...processor,
26
- id: normalizedId,
27
- ...normalizedVersion ? { version: normalizedVersion } : {}
28
- };
16
+ const registerUploadPostProcessor = (processor) => {
17
+ const normalizedId = normalizeProcessorId(processor.id);
18
+ if (!normalizedId) {
19
+ throw new Error("Upload post processor id is required.");
20
+ }
21
+ const normalizedVersion = normalizeProcessorVersion(processor.version);
22
+ processorsById[normalizedId] = {
23
+ ...processor,
24
+ id: normalizedId,
25
+ ...normalizedVersion ? {
26
+ version: normalizedVersion
27
+ } : {}
28
+ };
29
29
  };
30
- var registerUploadProcessor = registerUploadPostProcessor;
31
- var unregisterUploadPostProcessor = (id) => {
32
- const normalizedId = normalizeProcessorId(id);
33
- if (!normalizedId) return;
34
- delete processorsById[normalizedId];
30
+ const registerUploadProcessor = registerUploadPostProcessor;
31
+ const unregisterUploadPostProcessor = (id) => {
32
+ const normalizedId = normalizeProcessorId(id);
33
+ if (!normalizedId) return;
34
+ delete processorsById[normalizedId];
35
35
  };
36
- var unregisterUploadProcessor = unregisterUploadPostProcessor;
37
- var clearUploadPostProcessors = () => {
38
- for (const id of Object.keys(processorsById)) delete processorsById[id];
36
+ const unregisterUploadProcessor = unregisterUploadPostProcessor;
37
+ const clearUploadPostProcessors = () => {
38
+ for (const id of Object.keys(processorsById)) {
39
+ delete processorsById[id];
40
+ }
39
41
  };
40
- var clearUploadProcessors = clearUploadPostProcessors;
41
- var getUploadPostProcessors = () => Object.values(processorsById);
42
- var getUploadProcessors = getUploadPostProcessors;
43
- var runUploadPostProcessors = async (ctx) => {
44
- const processors = getUploadPostProcessors();
45
- if (!processors.length) return;
46
- for (const processor of processors) {
47
- if (processor.match) try {
48
- if (!processor.match(ctx)) continue;
49
- } catch (error) {
50
- console.error("Upload post processor failed", {
51
- processorId: processor.id,
52
- processorVersion: processor.version,
53
- tenantId: ctx.tenantId,
54
- uploadId: ctx.uploadId,
55
- fileId: ctx.fileId,
56
- stage: "match",
57
- error
58
- });
59
- continue;
60
- }
61
- try {
62
- await processor.process(ctx);
63
- } catch (error) {
64
- console.error("Upload post processor failed", {
65
- processorId: processor.id,
66
- processorVersion: processor.version,
67
- tenantId: ctx.tenantId,
68
- uploadId: ctx.uploadId,
69
- fileId: ctx.fileId,
70
- stage: "process",
71
- error
72
- });
73
- }
74
- }
42
+ const clearUploadProcessors = clearUploadPostProcessors;
43
+ const getUploadPostProcessors = () => Object.values(processorsById);
44
+ const getUploadProcessors = getUploadPostProcessors;
45
+ const runUploadPostProcessors = async (ctx) => {
46
+ const processors = getUploadPostProcessors();
47
+ if (!processors.length) return;
48
+ for (const processor of processors) {
49
+ if (processor.match) {
50
+ try {
51
+ if (!processor.match(ctx)) continue;
52
+ } catch (error) {
53
+ console.error("Upload post processor failed", {
54
+ processorId: processor.id,
55
+ processorVersion: processor.version,
56
+ tenantId: ctx.tenantId,
57
+ uploadId: ctx.uploadId,
58
+ fileId: ctx.fileId,
59
+ stage: "match",
60
+ error
61
+ });
62
+ continue;
63
+ }
64
+ }
65
+ try {
66
+ await processor.process(ctx);
67
+ } catch (error) {
68
+ console.error("Upload post processor failed", {
69
+ processorId: processor.id,
70
+ processorVersion: processor.version,
71
+ tenantId: ctx.tenantId,
72
+ uploadId: ctx.uploadId,
73
+ fileId: ctx.fileId,
74
+ stage: "process",
75
+ error
76
+ });
77
+ }
78
+ }
75
79
  };
76
80
  queue.registerTask(uploadPostProcessorTaskName, async (payload) => {
77
- await runUploadPostProcessors(payload);
81
+ await runUploadPostProcessors(payload);
78
82
  });
79
- var enqueueUploadPostProcessors = async (ctx) => {
80
- if (getUploadPostProcessors().length === 0) return;
81
- await queue.add(uploadPostProcessorTaskName, ctx, {
82
- attempts: 3,
83
- backoff: {
84
- type: "exponential",
85
- delay: 5e3
86
- },
87
- removeOnComplete: true,
88
- removeOnFail: false
89
- });
83
+ const enqueueUploadPostProcessors = async (ctx) => {
84
+ if (getUploadPostProcessors().length === 0) return;
85
+ await queue.add(uploadPostProcessorTaskName, ctx, {
86
+ attempts: 3,
87
+ backoff: {
88
+ type: "exponential",
89
+ delay: 5e3
90
+ },
91
+ removeOnComplete: true,
92
+ removeOnFail: false
93
+ });
90
94
  };
91
- //#endregion
92
- export { clearUploadPostProcessors, clearUploadProcessors, enqueueUploadPostProcessors, getUploadPostProcessors, getUploadProcessors, registerUploadPostProcessor, registerUploadProcessor, routes, runUploadPostProcessors, unregisterUploadPostProcessor, unregisterUploadProcessor, uploadPostProcessorTaskName };
93
-
94
- //# sourceMappingURL=uploads.js.map
95
+ export {
96
+ clearUploadPostProcessors,
97
+ clearUploadProcessors,
98
+ enqueueUploadPostProcessors,
99
+ getUploadPostProcessors,
100
+ getUploadProcessors,
101
+ registerUploadPostProcessor,
102
+ registerUploadProcessor,
103
+ routes,
104
+ runUploadPostProcessors,
105
+ unregisterUploadPostProcessor,
106
+ unregisterUploadProcessor,
107
+ uploadPostProcessorTaskName
108
+ };
109
+ //# sourceMappingURL=uploads.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"uploads.js","names":["routes","Object","entries","import","meta","glob","reduce","Record","acc","path","mod","replace","queue","UploadPostProcessorContext","tenantId","uploadId","fileId","filename","mimeType","clientMimeType","totalSize","isPublic","userId","ownerKeyHash","inlineProcessors","metadata","Record","UploadPostProcessor","id","version","match","ctx","process","Promise","processorsById","Object","create","uploadPostProcessorTaskName","normalizeProcessorId","value","trim","normalizeProcessorVersion","undefined","Number","isInteger","registerUploadPostProcessor","processor","normalizedId","Error","normalizedVersion","registerUploadProcessor","unregisterUploadPostProcessor","unregisterUploadProcessor","clearUploadPostProcessors","keys","clearUploadProcessors","getUploadPostProcessors","values","getUploadProcessors","runUploadPostProcessors","processors","length","error","console","processorId","processorVersion","stage","registerTask","payload","enqueueUploadPostProcessors","add","attempts","backoff","type","delay","removeOnComplete","removeOnFail"],"sources":["../src/uploads/routes.ts","../src/uploads/api/file-uploads/postProcessors.ts"],"sourcesContent":["export const routes = Object.entries({\n ...import.meta.glob(\"./api/**/handler.ts\"),\n}).reduce<Record<string, unknown>>((acc, [path, mod]) => {\n acc[path.replace(\"./api/\", \"@rpcbase/server/uploads/api/\")] = mod\n return acc\n}, {})\n\n","import { queue } from \"@rpcbase/worker\"\n\n\nexport type UploadPostProcessorContext = {\n tenantId: string\n uploadId: string\n fileId: string\n filename: string\n mimeType: string\n clientMimeType: string\n totalSize: number\n isPublic?: boolean\n userId?: string\n ownerKeyHash?: string\n inlineProcessors: string[]\n metadata: Record<string, unknown>\n}\n\nexport type UploadPostProcessor = {\n id: string\n version?: number\n match?: (ctx: UploadPostProcessorContext) => boolean\n process: (ctx: UploadPostProcessorContext) => Promise<unknown> | unknown\n}\n\nconst processorsById: Record<string, UploadPostProcessor> = Object.create(null)\nexport const uploadPostProcessorTaskName = \"rb-upload-post-processors\"\n\nconst normalizeProcessorId = (value: unknown): string => (typeof value === \"string\" ? value.trim() : \"\")\n\nconst normalizeProcessorVersion = (value: unknown): number | undefined => {\n if (typeof value !== \"number\") return undefined\n if (!Number.isInteger(value) || value < 1) return undefined\n return value\n}\n\nexport const registerUploadPostProcessor = (processor: UploadPostProcessor): void => {\n const normalizedId = normalizeProcessorId(processor.id)\n if (!normalizedId) {\n throw new Error(\"Upload post processor id is required.\")\n }\n\n const normalizedVersion = normalizeProcessorVersion(processor.version)\n\n processorsById[normalizedId] = {\n ...processor,\n id: normalizedId,\n ...(normalizedVersion ? { version: normalizedVersion } : {}),\n }\n}\n\nexport const registerUploadProcessor = registerUploadPostProcessor\n\nexport const unregisterUploadPostProcessor = (id: string): void => {\n const normalizedId = normalizeProcessorId(id)\n if (!normalizedId) return\n delete processorsById[normalizedId]\n}\n\nexport const unregisterUploadProcessor = unregisterUploadPostProcessor\n\nexport const clearUploadPostProcessors = (): void => {\n for (const id of Object.keys(processorsById)) {\n delete processorsById[id]\n }\n}\n\nexport const clearUploadProcessors = clearUploadPostProcessors\n\nexport const getUploadPostProcessors = (): UploadPostProcessor[] => Object.values(processorsById)\n\nexport const getUploadProcessors = getUploadPostProcessors\n\nexport const runUploadPostProcessors = async (ctx: UploadPostProcessorContext): Promise<void> => {\n const processors = getUploadPostProcessors()\n if (!processors.length) return\n\n for (const processor of processors) {\n if (processor.match) {\n try {\n if (!processor.match(ctx)) continue\n } catch (error) {\n console.error(\"Upload post processor failed\", {\n processorId: processor.id,\n processorVersion: processor.version,\n tenantId: ctx.tenantId,\n uploadId: ctx.uploadId,\n fileId: ctx.fileId,\n stage: \"match\",\n error,\n })\n continue\n }\n }\n\n try {\n await processor.process(ctx)\n } catch (error) {\n console.error(\"Upload post processor failed\", {\n processorId: processor.id,\n processorVersion: processor.version,\n tenantId: ctx.tenantId,\n uploadId: ctx.uploadId,\n fileId: ctx.fileId,\n stage: \"process\",\n error,\n })\n }\n }\n}\n\nqueue.registerTask(uploadPostProcessorTaskName, async (payload) => {\n await runUploadPostProcessors(payload as UploadPostProcessorContext)\n})\n\nexport const enqueueUploadPostProcessors = async (ctx: UploadPostProcessorContext): Promise<void> => {\n if (getUploadPostProcessors().length === 0) return\n\n await queue.add(uploadPostProcessorTaskName, ctx, {\n attempts: 3,\n backoff: { type: \"exponential\", delay: 5_000 },\n removeOnComplete: true,\n removeOnFail: false,\n })\n}\n"],"mappings":";;AAAA,IAAaA,SAASC,OAAOC,QAAQ,EACnC,GAAGC,uBAAAA,OAAAA;CAAAA,uCAAAA,OAAAA;CAAAA,gCAAAA,OAAAA;CAAAA,CAAsC,EAC1C,CAAC,CAACG,QAAiCE,KAAK,CAACC,MAAMC,SAAS;AACvDF,KAAIC,KAAKE,QAAQ,UAAU,+BAA+B,IAAID;AAC9D,QAAOF;GACN,EAAE,CAAC;;;ACoBN,IAAM0B,iBAAsDC,OAAOC,OAAO,KAAK;AAC/E,IAAaC,8BAA8B;AAE3C,IAAMC,wBAAwBC,UAA4B,OAAOA,UAAU,WAAWA,MAAMC,MAAM,GAAG;AAErG,IAAMC,6BAA6BF,UAAuC;AACxE,KAAI,OAAOA,UAAU,SAAU,QAAOG,KAAAA;AACtC,KAAI,CAACC,OAAOC,UAAUL,MAAM,IAAIA,QAAQ,EAAG,QAAOG,KAAAA;AAClD,QAAOH;;AAGT,IAAaM,+BAA+BC,cAAyC;CACnF,MAAMC,eAAeT,qBAAqBQ,UAAUlB,GAAG;AACvD,KAAI,CAACmB,aACH,OAAM,IAAIC,MAAM,wCAAwC;CAG1D,MAAMC,oBAAoBR,0BAA0BK,UAAUjB,QAAQ;AAEtEK,gBAAea,gBAAgB;EAC7B,GAAGD;EACHlB,IAAImB;EACJ,GAAIE,oBAAoB,EAAEpB,SAASoB,mBAAmB,GAAG,EAAE;EAC5D;;AAGH,IAAaC,0BAA0BL;AAEvC,IAAaM,iCAAiCvB,OAAqB;CACjE,MAAMmB,eAAeT,qBAAqBV,GAAG;AAC7C,KAAI,CAACmB,aAAc;AACnB,QAAOb,eAAea;;AAGxB,IAAaK,4BAA4BD;AAEzC,IAAaE,kCAAwC;AACnD,MAAK,MAAMzB,MAAMO,OAAOmB,KAAKpB,eAAe,CAC1C,QAAOA,eAAeN;;AAI1B,IAAa2B,wBAAwBF;AAErC,IAAaG,gCAAuDrB,OAAOsB,OAAOvB,eAAe;AAEjG,IAAawB,sBAAsBF;AAEnC,IAAaG,0BAA0B,OAAO5B,QAAmD;CAC/F,MAAM6B,aAAaJ,yBAAyB;AAC5C,KAAI,CAACI,WAAWC,OAAQ;AAExB,MAAK,MAAMf,aAAac,YAAY;AAClC,MAAId,UAAUhB,MACZ,KAAI;AACF,OAAI,CAACgB,UAAUhB,MAAMC,IAAI,CAAE;WACpB+B,OAAO;AACdC,WAAQD,MAAM,gCAAgC;IAC5CE,aAAalB,UAAUlB;IACvBqC,kBAAkBnB,UAAUjB;IAC5Bf,UAAUiB,IAAIjB;IACdC,UAAUgB,IAAIhB;IACdC,QAAQe,IAAIf;IACZkD,OAAO;IACPJ;IACD,CAAC;AACF;;AAIJ,MAAI;AACF,SAAMhB,UAAUd,QAAQD,IAAI;WACrB+B,OAAO;AACdC,WAAQD,MAAM,gCAAgC;IAC5CE,aAAalB,UAAUlB;IACvBqC,kBAAkBnB,UAAUjB;IAC5Bf,UAAUiB,IAAIjB;IACdC,UAAUgB,IAAIhB;IACdC,QAAQe,IAAIf;IACZkD,OAAO;IACPJ;IACD,CAAC;;;;AAKRlD,MAAMuD,aAAa9B,6BAA6B,OAAO+B,YAAY;AACjE,OAAMT,wBAAwBS,QAAsC;EACpE;AAEF,IAAaC,8BAA8B,OAAOtC,QAAmD;AACnG,KAAIyB,yBAAyB,CAACK,WAAW,EAAG;AAE5C,OAAMjD,MAAM0D,IAAIjC,6BAA6BN,KAAK;EAChDwC,UAAU;EACVC,SAAS;GAAEC,MAAM;GAAeC,OAAO;GAAO;EAC9CC,kBAAkB;EAClBC,cAAc;EACf,CAAC"}
1
+ {"version":3,"file":"uploads.js","sources":["../src/uploads/routes.ts","../src/uploads/api/file-uploads/postProcessors.ts"],"sourcesContent":["export const routes = Object.entries({\n ...import.meta.glob(\"./api/**/handler.ts\"),\n}).reduce<Record<string, unknown>>((acc, [path, mod]) => {\n acc[path.replace(\"./api/\", \"@rpcbase/server/uploads/api/\")] = mod\n return acc\n}, {})\n\n","import { queue } from \"@rpcbase/worker\"\n\n\nexport type UploadPostProcessorContext = {\n tenantId: string\n uploadId: string\n fileId: string\n filename: string\n mimeType: string\n clientMimeType: string\n totalSize: number\n isPublic?: boolean\n userId?: string\n ownerKeyHash?: string\n inlineProcessors: string[]\n metadata: Record<string, unknown>\n}\n\nexport type UploadPostProcessor = {\n id: string\n version?: number\n match?: (ctx: UploadPostProcessorContext) => boolean\n process: (ctx: UploadPostProcessorContext) => Promise<unknown> | unknown\n}\n\nconst processorsById: Record<string, UploadPostProcessor> = Object.create(null)\nexport const uploadPostProcessorTaskName = \"rb-upload-post-processors\"\n\nconst normalizeProcessorId = (value: unknown): string => (typeof value === \"string\" ? value.trim() : \"\")\n\nconst normalizeProcessorVersion = (value: unknown): number | undefined => {\n if (typeof value !== \"number\") return undefined\n if (!Number.isInteger(value) || value < 1) return undefined\n return value\n}\n\nexport const registerUploadPostProcessor = (processor: UploadPostProcessor): void => {\n const normalizedId = normalizeProcessorId(processor.id)\n if (!normalizedId) {\n throw new Error(\"Upload post processor id is required.\")\n }\n\n const normalizedVersion = normalizeProcessorVersion(processor.version)\n\n processorsById[normalizedId] = {\n ...processor,\n id: normalizedId,\n ...(normalizedVersion ? { version: normalizedVersion } : {}),\n }\n}\n\nexport const registerUploadProcessor = registerUploadPostProcessor\n\nexport const unregisterUploadPostProcessor = (id: string): void => {\n const normalizedId = normalizeProcessorId(id)\n if (!normalizedId) return\n delete processorsById[normalizedId]\n}\n\nexport const unregisterUploadProcessor = unregisterUploadPostProcessor\n\nexport const clearUploadPostProcessors = (): void => {\n for (const id of Object.keys(processorsById)) {\n delete processorsById[id]\n }\n}\n\nexport const clearUploadProcessors = clearUploadPostProcessors\n\nexport const getUploadPostProcessors = (): UploadPostProcessor[] => Object.values(processorsById)\n\nexport const getUploadProcessors = getUploadPostProcessors\n\nexport const runUploadPostProcessors = async (ctx: UploadPostProcessorContext): Promise<void> => {\n const processors = getUploadPostProcessors()\n if (!processors.length) return\n\n for (const processor of processors) {\n if (processor.match) {\n try {\n if (!processor.match(ctx)) continue\n } catch (error) {\n console.error(\"Upload post processor failed\", {\n processorId: processor.id,\n processorVersion: processor.version,\n tenantId: ctx.tenantId,\n uploadId: ctx.uploadId,\n fileId: ctx.fileId,\n stage: \"match\",\n error,\n })\n continue\n }\n }\n\n try {\n await processor.process(ctx)\n } catch (error) {\n console.error(\"Upload post processor failed\", {\n processorId: processor.id,\n processorVersion: processor.version,\n tenantId: ctx.tenantId,\n uploadId: ctx.uploadId,\n fileId: ctx.fileId,\n stage: \"process\",\n error,\n })\n }\n }\n}\n\nqueue.registerTask(uploadPostProcessorTaskName, async (payload) => {\n await runUploadPostProcessors(payload as UploadPostProcessorContext)\n})\n\nexport const enqueueUploadPostProcessors = async (ctx: UploadPostProcessorContext): Promise<void> => {\n if (getUploadPostProcessors().length === 0) return\n\n await queue.add(uploadPostProcessorTaskName, ctx, {\n attempts: 3,\n backoff: { type: \"exponential\", delay: 5_000 },\n removeOnComplete: true,\n removeOnFail: false,\n })\n}\n"],"names":["routes","Object","entries","import","reduce","acc","path","mod","replace","processorsById","create","uploadPostProcessorTaskName","normalizeProcessorId","value","trim","normalizeProcessorVersion","undefined","Number","isInteger","registerUploadPostProcessor","processor","normalizedId","id","Error","normalizedVersion","version","registerUploadProcessor","unregisterUploadPostProcessor","unregisterUploadProcessor","clearUploadPostProcessors","keys","clearUploadProcessors","getUploadPostProcessors","values","getUploadProcessors","runUploadPostProcessors","ctx","processors","length","match","error","console","processorId","processorVersion","tenantId","uploadId","fileId","stage","process","queue","registerTask","payload","enqueueUploadPostProcessors","add","attempts","backoff","type","delay","removeOnComplete","removeOnFail"],"mappings":";AAAO,MAAMA,SAASC,OAAOC,QAAQ;AAAA,EACnC,GAAGC,uBAAAA,OAAAA,EAAAA,iCAAAA,MAAAA,OAAAA,uBAAAA,GAAAA,0BAAAA,MAAAA,OAAAA,uBAAAA,EAAAA,CAAAA;AACL,CAAC,EAAEC,OAAgC,CAACC,KAAK,CAACC,MAAMC,GAAG,MAAM;AACvDF,MAAIC,KAAKE,QAAQ,UAAU,8BAA8B,CAAC,IAAID;AAC9D,SAAOF;AACT,GAAG,CAAA,CAAE;ACoBL,MAAMI,iBAAsDR,uBAAOS,OAAO,IAAI;AACvE,MAAMC,8BAA8B;AAE3C,MAAMC,uBAAuBA,CAACC,UAA4B,OAAOA,UAAU,WAAWA,MAAMC,SAAS;AAErG,MAAMC,4BAA4BA,CAACF,UAAuC;AACxE,MAAI,OAAOA,UAAU,SAAU,QAAOG;AACtC,MAAI,CAACC,OAAOC,UAAUL,KAAK,KAAKA,QAAQ,EAAG,QAAOG;AAClD,SAAOH;AACT;AAEO,MAAMM,8BAA8BA,CAACC,cAAyC;AACnF,QAAMC,eAAeT,qBAAqBQ,UAAUE,EAAE;AACtD,MAAI,CAACD,cAAc;AACjB,UAAM,IAAIE,MAAM,uCAAuC;AAAA,EACzD;AAEA,QAAMC,oBAAoBT,0BAA0BK,UAAUK,OAAO;AAErEhB,iBAAeY,YAAY,IAAI;AAAA,IAC7B,GAAGD;AAAAA,IACHE,IAAID;AAAAA,IACJ,GAAIG,oBAAoB;AAAA,MAAEC,SAASD;AAAAA,IAAAA,IAAsB,CAAA;AAAA,EAAC;AAE9D;AAEO,MAAME,0BAA0BP;AAEhC,MAAMQ,gCAAgCA,CAACL,OAAqB;AACjE,QAAMD,eAAeT,qBAAqBU,EAAE;AAC5C,MAAI,CAACD,aAAc;AACnB,SAAOZ,eAAeY,YAAY;AACpC;AAEO,MAAMO,4BAA4BD;AAElC,MAAME,4BAA4BA,MAAY;AACnD,aAAWP,MAAMrB,OAAO6B,KAAKrB,cAAc,GAAG;AAC5C,WAAOA,eAAea,EAAE;AAAA,EAC1B;AACF;AAEO,MAAMS,wBAAwBF;AAE9B,MAAMG,0BAA0BA,MAA6B/B,OAAOgC,OAAOxB,cAAc;AAEzF,MAAMyB,sBAAsBF;AAE5B,MAAMG,0BAA0B,OAAOC,QAAmD;AAC/F,QAAMC,aAAaL,wBAAAA;AACnB,MAAI,CAACK,WAAWC,OAAQ;AAExB,aAAWlB,aAAaiB,YAAY;AAClC,QAAIjB,UAAUmB,OAAO;AACnB,UAAI;AACF,YAAI,CAACnB,UAAUmB,MAAMH,GAAG,EAAG;AAAA,MAC7B,SAASI,OAAO;AACdC,gBAAQD,MAAM,gCAAgC;AAAA,UAC5CE,aAAatB,UAAUE;AAAAA,UACvBqB,kBAAkBvB,UAAUK;AAAAA,UAC5BmB,UAAUR,IAAIQ;AAAAA,UACdC,UAAUT,IAAIS;AAAAA,UACdC,QAAQV,IAAIU;AAAAA,UACZC,OAAO;AAAA,UACPP;AAAAA,QAAAA,CACD;AACD;AAAA,MACF;AAAA,IACF;AAEA,QAAI;AACF,YAAMpB,UAAU4B,QAAQZ,GAAG;AAAA,IAC7B,SAASI,OAAO;AACdC,cAAQD,MAAM,gCAAgC;AAAA,QAC5CE,aAAatB,UAAUE;AAAAA,QACvBqB,kBAAkBvB,UAAUK;AAAAA,QAC5BmB,UAAUR,IAAIQ;AAAAA,QACdC,UAAUT,IAAIS;AAAAA,QACdC,QAAQV,IAAIU;AAAAA,QACZC,OAAO;AAAA,QACPP;AAAAA,MAAAA,CACD;AAAA,IACH;AAAA,EACF;AACF;AAEAS,MAAMC,aAAavC,6BAA6B,OAAOwC,YAAY;AACjE,QAAMhB,wBAAwBgB,OAAqC;AACrE,CAAC;AAEM,MAAMC,8BAA8B,OAAOhB,QAAmD;AACnG,MAAIJ,wBAAAA,EAA0BM,WAAW,EAAG;AAE5C,QAAMW,MAAMI,IAAI1C,6BAA6ByB,KAAK;AAAA,IAChDkB,UAAU;AAAA,IACVC,SAAS;AAAA,MAAEC,MAAM;AAAA,MAAeC,OAAO;AAAA,IAAA;AAAA,IACvCC,kBAAkB;AAAA,IAClBC,cAAc;AAAA,EAAA,CACf;AACH;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/server",
3
- "version": "0.538.0",
3
+ "version": "0.539.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -89,18 +89,18 @@
89
89
  "dependencies": {
90
90
  "connect-mongo": "6.0.0",
91
91
  "connect-redis": "9.0.0",
92
- "dompurify": "3.3.3",
93
- "express-session": "1.19.0",
92
+ "dompurify": "3.3.1",
93
+ "express-session": "1.18.2",
94
94
  "http-proxy-3": "1.23.2",
95
- "jsdom": "29.0.1",
96
- "mongodb": "7.1.1",
97
- "redis": "5.11.0",
98
- "ws": "8.20.0"
95
+ "jsdom": "27.4.0",
96
+ "mongodb": "7.0.0",
97
+ "redis": "5.10.0",
98
+ "ws": "8.19.0"
99
99
  },
100
100
  "devDependencies": {
101
- "@types/jsdom": "28.0.1",
101
+ "@types/jsdom": "27.0.0",
102
102
  "@types/ws": "8.18.1",
103
103
  "request-ip": "3.3.0",
104
- "resend": "6.9.4"
104
+ "resend": "6.6.0"
105
105
  }
106
106
  }