@rpcbase/server 0.476.0 → 0.478.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 (33) hide show
  1. package/dist/{handler-DEEir2xV.js → handler-BOTZftAB.js} +29 -29
  2. package/dist/{handler-BITFtEr_.js → handler-B_mMDLBO.js} +80 -39
  3. package/dist/{handler-BYVnU9H-.js → handler-Cl-0-832.js} +1 -1
  4. package/dist/{handler-CHuOXAtH.js → handler-Dd20DHyz.js} +15 -11
  5. package/dist/index.d.ts +0 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +102 -87
  8. package/dist/notifications/api/notifications/handler.d.ts.map +1 -1
  9. package/dist/notifications.js +1 -1
  10. package/dist/rts/api/changes/handler.d.ts.map +1 -1
  11. package/dist/rts/index.d.ts +3 -1
  12. package/dist/rts/index.d.ts.map +1 -1
  13. package/dist/{index-Ckx0UHs6.js → rts/index.js} +107 -39
  14. package/dist/{schemas-DI7ewltq.js → schemas-D5T9tDtI.js} +609 -12
  15. package/dist/{shared-Chfrv8o6.js → shared-UGuDRAKK.js} +16 -30
  16. package/dist/uploads/api/file-uploads/handlers/completeUpload.d.ts.map +1 -1
  17. package/dist/uploads/api/file-uploads/handlers/getStatus.d.ts.map +1 -1
  18. package/dist/uploads/api/file-uploads/handlers/uploadChunk.d.ts.map +1 -1
  19. package/dist/uploads/api/file-uploads/shared.d.ts +3 -0
  20. package/dist/uploads/api/file-uploads/shared.d.ts.map +1 -1
  21. package/dist/uploads.js +1 -1
  22. package/package.json +4 -4
  23. package/dist/passwordHashStorage.test.d.ts +0 -2
  24. package/dist/passwordHashStorage.test.d.ts.map +0 -1
  25. package/dist/rts/api/changes/handler.test.d.ts +0 -2
  26. package/dist/rts/api/changes/handler.test.d.ts.map +0 -1
  27. package/dist/rts/index.ws.test.d.ts +0 -2
  28. package/dist/rts/index.ws.test.d.ts.map +0 -1
  29. package/dist/rts.d.ts +0 -3
  30. package/dist/rts.d.ts.map +0 -1
  31. package/dist/rts.js +0 -13
  32. package/dist/uploads/api/files/handlers/getFile.test.d.ts +0 -2
  33. package/dist/uploads/api/files/handlers/getFile.test.d.ts.map +0 -1
@@ -1,4 +1,5 @@
1
- import { createHash, timingSafeEqual } from "node:crypto";
1
+ import { createHash } from "node:crypto";
2
+ import { getAccessibleByQuery, buildAbilityFromSession } from "@rpcbase/db/acl";
2
3
  const DEFAULT_CHUNK_SIZE_BYTES = 5 * 1024 * 1024;
3
4
  const MAX_CHUNK_SIZE_BYTES = 15 * 1024 * 1024;
4
5
  const DEFAULT_MAX_CLIENT_BYTES_PER_SECOND = 10 * 1024 * 1024;
@@ -80,40 +81,25 @@ const getUploadKeyHash = (ctx) => {
80
81
  if (!uploadKey) return null;
81
82
  return computeSha256Hex(Buffer.from(uploadKey));
82
83
  };
83
- const timingSafeEqualHex = (left, right) => {
84
- if (left.length !== right.length) return false;
85
- try {
86
- return timingSafeEqual(Buffer.from(left, "hex"), Buffer.from(right, "hex"));
87
- } catch {
88
- return false;
89
- }
90
- };
91
- const getOwnershipSelector = (ctx, session) => {
92
- if (session.userId) {
93
- const userId = getUserId(ctx);
94
- if (!userId || userId !== session.userId) return null;
95
- return { userId: session.userId };
96
- }
97
- if (session.ownerKeyHash) {
98
- const uploadKeyHash = getUploadKeyHash(ctx);
99
- if (!uploadKeyHash) return null;
100
- if (!timingSafeEqualHex(session.ownerKeyHash, uploadKeyHash)) return null;
101
- return { ownerKeyHash: session.ownerKeyHash };
102
- }
103
- return null;
84
+ const buildUploadsAbility = (ctx, tenantId) => {
85
+ const uploadKeyHash = getUploadKeyHash(ctx);
86
+ const claims = uploadKeyHash ? { uploadKeyHash } : void 0;
87
+ return buildAbilityFromSession({ tenantId, session: ctx.req.session, claims });
104
88
  };
89
+ const getUploadSessionAccessQuery = (ability, action) => getAccessibleByQuery(ability, action, "RBUploadSession");
105
90
  export {
106
91
  getModelCtx as a,
107
- getOwnershipSelector as b,
108
- getBucketName as c,
109
- getUserId as d,
92
+ buildUploadsAbility as b,
93
+ getUploadSessionAccessQuery as c,
94
+ getBucketName as d,
110
95
  ensureUploadIndexes as e,
111
- getChunkSizeBytes as f,
96
+ getUserId as f,
112
97
  getTenantId as g,
113
- getSessionTtlMs as h,
114
- computeSha256Hex as i,
115
- getMaxClientUploadBytesPerSecond as j,
116
- getRawBodyLimitBytes as k,
98
+ getChunkSizeBytes as h,
99
+ getSessionTtlMs as i,
100
+ computeSha256Hex as j,
101
+ getMaxClientUploadBytesPerSecond as k,
102
+ getRawBodyLimitBytes as l,
117
103
  normalizeSha256Hex as n,
118
104
  toBufferPayload as t
119
105
  };
@@ -1 +1 @@
1
- {"version":3,"file":"completeUpload.d.ts","sourceRoot":"","sources":["../../../../../src/uploads/api/file-uploads/handlers/completeUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAKzC,OAAO,KAAK,OAAO,MAAM,UAAU,CAAA;AACnC,OAAO,EACL,KAAK,WAAW,EAQjB,MAAM,WAAW,CAAA;AAiDlB,eAAO,MAAM,cAAc,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,uBAAuB,EAAE,WAAW,CAmJ1G,CAAA"}
1
+ {"version":3,"file":"completeUpload.d.ts","sourceRoot":"","sources":["../../../../../src/uploads/api/file-uploads/handlers/completeUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAKzC,OAAO,KAAK,OAAO,MAAM,UAAU,CAAA;AACnC,OAAO,EACL,KAAK,WAAW,EASjB,MAAM,WAAW,CAAA;AAiDlB,eAAO,MAAM,cAAc,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,uBAAuB,EAAE,WAAW,CAoJ1G,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"getStatus.d.ts","sourceRoot":"","sources":["../../../../../src/uploads/api/file-uploads/handlers/getStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAIzC,OAAO,KAAK,OAAO,MAAM,UAAU,CAAA;AACnC,OAAO,EACL,KAAK,WAAW,EAMjB,MAAM,WAAW,CAAA;AAGlB,eAAO,MAAM,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,qBAAqB,EAAE,WAAW,CAkDnG,CAAA"}
1
+ {"version":3,"file":"getStatus.d.ts","sourceRoot":"","sources":["../../../../../src/uploads/api/file-uploads/handlers/getStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAIzC,OAAO,KAAK,OAAO,MAAM,UAAU,CAAA;AACnC,OAAO,EACL,KAAK,WAAW,EAOjB,MAAM,WAAW,CAAA;AAGlB,eAAO,MAAM,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,qBAAqB,EAAE,WAAW,CAoDnG,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"uploadChunk.d.ts","sourceRoot":"","sources":["../../../../../src/uploads/api/file-uploads/handlers/uploadChunk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAIzC,OAAO,EACL,KAAK,WAAW,EAUjB,MAAM,WAAW,CAAA;AAGlB,KAAK,oBAAoB,GAAG;IAC1B,EAAE,EAAE,OAAO,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,CAqG7E,CAAA"}
1
+ {"version":3,"file":"uploadChunk.d.ts","sourceRoot":"","sources":["../../../../../src/uploads/api/file-uploads/handlers/uploadChunk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAIzC,OAAO,EACL,KAAK,WAAW,EAWjB,MAAM,WAAW,CAAA;AAGlB,KAAK,oBAAoB,GAAG;IAC1B,EAAE,EAAE,OAAO,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,CAqG7E,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { Ctx } from '../../../../../api/src';
2
2
  import { IRBUploadChunk, IRBUploadSession, LoadModelCtx } from '../../../../../db/src';
3
+ import { AppAbility } from '../../../../../db/acl/src';
3
4
  import { Model } from '../../../../../vite/node_modules/mongoose';
4
5
  export type SessionUser = {
5
6
  id?: string;
@@ -22,6 +23,8 @@ export declare const getModelCtx: (_ctx: Ctx<SessionUser>, tenantId: string) =>
22
23
  export declare const toBufferPayload: (payload: unknown) => Buffer | null;
23
24
  export declare const ensureUploadIndexes: (UploadSession: Model<UploadSessionDoc>, UploadChunk: Model<UploadChunkDoc>) => Promise<void>;
24
25
  export declare const getUploadKeyHash: (ctx: Ctx<SessionUser>) => string | null;
26
+ export declare const buildUploadsAbility: (ctx: Ctx<SessionUser>, tenantId: string) => AppAbility;
27
+ export declare const getUploadSessionAccessQuery: (ability: AppAbility, action: "read" | "update" | "delete") => Record<string, unknown>;
25
28
  export declare const getOwnershipSelector: (ctx: Ctx<SessionUser>, session: Pick<UploadSessionDoc, "userId" | "ownerKeyHash">) => {
26
29
  userId?: string;
27
30
  ownerKeyHash?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/uploads/api/file-uploads/shared.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAClC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAGrC,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,CAAA;AAC/C,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAoB5E,eAAO,MAAM,iBAAiB,QAAO,MAIpC,CAAA;AAED,eAAO,MAAM,gCAAgC,QAAO,MAAM,GAAG,IAG5D,CAAA;AAED,eAAO,MAAM,eAAe,QAAO,MAGlC,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,gBAAgB,MAAM,KAAG,MAAsC,CAAA;AAEpG,eAAO,MAAM,aAAa,QAAO,MAAsE,CAAA;AAEvG,eAAO,MAAM,SAAS,GAAI,KAAK,GAAG,CAAC,WAAW,CAAC,KAAG,MAAM,GAAG,IAK1D,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,KAAK,GAAG,CAAC,WAAW,CAAC,KAAG,MAAM,GAAG,IAgB5D,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,MAAyD,CAAA;AAEzG,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,KAAG,MAAoC,CAAA;AAEvF,eAAO,MAAM,WAAW,GAAI,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,UAAU,MAAM,KAAG,YAQrE,CAAA;AAEF,eAAO,MAAM,eAAe,GAAI,SAAS,OAAO,KAAG,MAAM,GAAG,IAI3D,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,eAAe,KAAK,CAAC,gBAAgB,CAAC,EACtC,aAAa,KAAK,CAAC,cAAc,CAAC,KACjC,OAAO,CAAC,IAAI,CAUd,CAAA;AAQD,eAAO,MAAM,gBAAgB,GAAI,KAAK,GAAG,CAAC,WAAW,CAAC,KAAG,MAAM,GAAG,IAIjE,CAAA;AAWD,eAAO,MAAM,oBAAoB,GAC/B,KAAK,GAAG,CAAC,WAAW,CAAC,EACrB,SAAS,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,cAAc,CAAC,KACzD;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAe/C,CAAA"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/uploads/api/file-uploads/shared.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAClC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAiD,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAChG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAGrC,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,CAAA;AAC/C,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAoB5E,eAAO,MAAM,iBAAiB,QAAO,MAIpC,CAAA;AAED,eAAO,MAAM,gCAAgC,QAAO,MAAM,GAAG,IAG5D,CAAA;AAED,eAAO,MAAM,eAAe,QAAO,MAGlC,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,gBAAgB,MAAM,KAAG,MAAsC,CAAA;AAEpG,eAAO,MAAM,aAAa,QAAO,MAAsE,CAAA;AAEvG,eAAO,MAAM,SAAS,GAAI,KAAK,GAAG,CAAC,WAAW,CAAC,KAAG,MAAM,GAAG,IAK1D,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,KAAK,GAAG,CAAC,WAAW,CAAC,KAAG,MAAM,GAAG,IAgB5D,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,MAAyD,CAAA;AAEzG,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,KAAG,MAAoC,CAAA;AAEvF,eAAO,MAAM,WAAW,GAAI,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,UAAU,MAAM,KAAG,YAQrE,CAAA;AAEF,eAAO,MAAM,eAAe,GAAI,SAAS,OAAO,KAAG,MAAM,GAAG,IAI3D,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,eAAe,KAAK,CAAC,gBAAgB,CAAC,EACtC,aAAa,KAAK,CAAC,cAAc,CAAC,KACjC,OAAO,CAAC,IAAI,CAUd,CAAA;AAQD,eAAO,MAAM,gBAAgB,GAAI,KAAK,GAAG,CAAC,WAAW,CAAC,KAAG,MAAM,GAAG,IAIjE,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,KAAK,GAAG,CAAC,WAAW,CAAC,EAAE,UAAU,MAAM,KAAG,UAI7E,CAAA;AAED,eAAO,MAAM,2BAA2B,GACtC,SAAS,UAAU,EACnB,QAAQ,MAAM,GAAG,QAAQ,GAAG,QAAQ,KACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAA6D,CAAA;AAWtF,eAAO,MAAM,oBAAoB,GAC/B,KAAK,GAAG,CAAC,WAAW,CAAC,EACrB,SAAS,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,cAAc,CAAC,KACzD;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAe/C,CAAA"}
package/dist/uploads.js CHANGED
@@ -1,5 +1,5 @@
1
1
  const routes = Object.entries({
2
- .../* @__PURE__ */ Object.assign({ "./api/file-uploads/handler.ts": () => import("./handler-DEEir2xV.js"), "./api/files/handler.ts": () => import("./handler-BYVnU9H-.js") })
2
+ .../* @__PURE__ */ Object.assign({ "./api/file-uploads/handler.ts": () => import("./handler-BOTZftAB.js"), "./api/files/handler.ts": () => import("./handler-Cl-0-832.js") })
3
3
  }).reduce((acc, [path, mod]) => {
4
4
  acc[path.replace("./api/", "@rpcbase/server/uploads/api/")] = mod;
5
5
  return acc;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/server",
3
- "version": "0.476.0",
3
+ "version": "0.478.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -14,9 +14,9 @@
14
14
  "default": "./dist/index.js"
15
15
  },
16
16
  "./rts": {
17
- "types": "./dist/rts.d.ts",
18
- "import": "./dist/rts.js",
19
- "default": "./dist/rts.js"
17
+ "types": "./dist/rts/index.d.ts",
18
+ "import": "./dist/rts/index.js",
19
+ "default": "./dist/rts/index.js"
20
20
  },
21
21
  "./uploads": {
22
22
  "types": "./dist/uploads.d.ts",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=passwordHashStorage.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"passwordHashStorage.test.d.ts","sourceRoot":"","sources":["../src/passwordHashStorage.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=handler.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handler.test.d.ts","sourceRoot":"","sources":["../../../../src/rts/api/changes/handler.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.ws.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.ws.test.d.ts","sourceRoot":"","sources":["../../src/rts/index.ws.test.ts"],"names":[],"mappings":""}
package/dist/rts.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export * from './rts/index';
2
- export * from './rts/routes';
3
- //# sourceMappingURL=rts.d.ts.map
package/dist/rts.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"rts.d.ts","sourceRoot":"","sources":["../src/rts.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA"}
package/dist/rts.js DELETED
@@ -1,13 +0,0 @@
1
- import { i, n, r } from "./index-Ckx0UHs6.js";
2
- const routes = Object.entries({
3
- .../* @__PURE__ */ Object.assign({ "./api/changes/handler.ts": () => import("./handler-CHuOXAtH.js") })
4
- }).reduce((acc, [path, mod]) => {
5
- acc[path.replace("./api/", "@rpcbase/server/rts/api/")] = mod;
6
- return acc;
7
- }, {});
8
- export {
9
- i as initRts,
10
- n as notifyRtsModelChanged,
11
- r as registerRtsHandler,
12
- routes
13
- };
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=getFile.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getFile.test.d.ts","sourceRoot":"","sources":["../../../../../src/uploads/api/files/handlers/getFile.test.ts"],"names":[],"mappings":""}