@starklabs/forge 1.3.13 → 1.3.15
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/js/account/bunch.account.d.ts +2 -0
- package/dist/js/account/bunch.account.d.ts.map +1 -1
- package/dist/js/account/bunch.account.js +2 -0
- package/dist/js/account/bunch.account.js.map +1 -1
- package/dist/js/account/me.delete.d.ts +8 -0
- package/dist/js/account/me.delete.d.ts.map +1 -0
- package/dist/js/account/me.delete.js +30 -0
- package/dist/js/account/me.delete.js.map +1 -0
- package/dist/js/account/me.get.d.ts.map +1 -1
- package/dist/js/account/me.update.d.ts +9 -0
- package/dist/js/account/me.update.d.ts.map +1 -0
- package/dist/js/account/me.update.js +39 -0
- package/dist/js/account/me.update.js.map +1 -0
- package/dist/js/auth/builtin/auth.collection.d.ts.map +1 -1
- package/dist/js/auth/builtin/auth.collection.js +14 -6
- package/dist/js/auth/builtin/auth.collection.js.map +1 -1
- package/dist/js/auth/logout.d.ts.map +1 -1
- package/dist/js/auth/logout.js +26 -1
- package/dist/js/auth/logout.js.map +1 -1
- package/dist/js/auth/refresh.d.ts.map +1 -1
- package/dist/js/auth/refresh.js +1 -2
- package/dist/js/auth/refresh.js.map +1 -1
- package/dist/js/auth/utils/handleGetToken.d.ts.map +1 -1
- package/dist/js/auth/utils/handleGetToken.js +2 -12
- package/dist/js/auth/utils/handleGetToken.js.map +1 -1
- package/dist/js/auth/utils/handleRefreshTokenValidation.d.ts +1 -1
- package/dist/js/auth/utils/handleRefreshTokenValidation.d.ts.map +1 -1
- package/dist/js/auth/utils/handleRefreshTokenValidation.js +21 -2
- package/dist/js/auth/utils/handleRefreshTokenValidation.js.map +1 -1
- package/dist/js/config/envs.d.ts.map +1 -1
- package/dist/js/config/envs.js +7 -10
- package/dist/js/config/envs.js.map +1 -1
- package/dist/js/config/handlerMap.d.ts.map +1 -1
- package/dist/js/config/handlerMap.js +4 -2
- package/dist/js/config/handlerMap.js.map +1 -1
- package/dist/js/crud/create.d.ts.map +1 -1
- package/dist/js/crud/create.js +3 -0
- package/dist/js/crud/create.js.map +1 -1
- package/dist/js/crud/handleUploads/file.add.js +1 -1
- package/dist/js/crud/handleUploads/file.delete.js +1 -1
- package/dist/js/crud/handleUploads/file.update.js +1 -1
- package/dist/js/crud/read.d.ts.map +1 -1
- package/dist/js/crud/read.js +4 -1
- package/dist/js/crud/read.js.map +1 -1
- package/dist/js/crud/readAll.d.ts.map +1 -1
- package/dist/js/crud/readAll.js +4 -1
- package/dist/js/crud/readAll.js.map +1 -1
- package/dist/js/crud/remove.d.ts +2 -3
- package/dist/js/crud/remove.d.ts.map +1 -1
- package/dist/js/crud/remove.js +10 -6
- package/dist/js/crud/remove.js.map +1 -1
- package/dist/js/crud/removeAll.d.ts +2 -3
- package/dist/js/crud/removeAll.d.ts.map +1 -1
- package/dist/js/crud/removeAll.js +2 -4
- package/dist/js/crud/removeAll.js.map +1 -1
- package/dist/js/crud/removeMultiple.js +1 -1
- package/dist/js/crud/security/handleDecryption.d.ts +4 -0
- package/dist/js/crud/security/handleDecryption.d.ts.map +1 -0
- package/dist/js/crud/security/handleDecryption.js +59 -0
- package/dist/js/crud/security/handleDecryption.js.map +1 -0
- package/dist/js/crud/security/handleEncryption.d.ts +5 -0
- package/dist/js/crud/security/handleEncryption.d.ts.map +1 -0
- package/dist/js/crud/security/handleEncryption.js +45 -0
- package/dist/js/crud/security/handleEncryption.js.map +1 -0
- package/dist/js/crud/security/handleHashing.d.ts +4 -0
- package/dist/js/crud/security/handleHashing.d.ts.map +1 -0
- package/dist/js/crud/security/handleHashing.js +52 -0
- package/dist/js/crud/security/handleHashing.js.map +1 -0
- package/dist/js/crud/security/handleHasing.d.ts +4 -0
- package/dist/js/crud/security/handleHasing.d.ts.map +1 -0
- package/dist/js/crud/security/handleHasing.js +52 -0
- package/dist/js/crud/security/handleHasing.js.map +1 -0
- package/dist/js/crud/update.d.ts.map +1 -1
- package/dist/js/crud/update.js +12 -4
- package/dist/js/crud/update.js.map +1 -1
- package/dist/js/crud/utils/authorizeAccess.d.ts +10 -0
- package/dist/js/crud/utils/authorizeAccess.d.ts.map +1 -0
- package/dist/js/crud/utils/authorizeAccess.js +46 -0
- package/dist/js/crud/utils/authorizeAccess.js.map +1 -0
- package/dist/js/crud/utils/authroizeAccess.d.ts.map +1 -1
- package/dist/js/crud/utils/authroizeAccess.js +4 -2
- package/dist/js/crud/utils/authroizeAccess.js.map +1 -1
- package/dist/js/crud/utils/getItem.js +1 -1
- package/dist/js/crud/utils/getItem.js.map +1 -1
- package/dist/js/index.d.ts +2 -0
- package/dist/js/index.d.ts.map +1 -1
- package/dist/js/index.js +3 -0
- package/dist/js/index.js.map +1 -1
- package/dist/js/lib/mongoose.fields.d.ts +1 -0
- package/dist/js/lib/mongoose.fields.d.ts.map +1 -1
- package/dist/js/lib/mongoose.fields.js +5 -0
- package/dist/js/lib/mongoose.fields.js.map +1 -1
- package/dist/js/lib/unified.fields.d.ts +1 -0
- package/dist/js/lib/unified.fields.d.ts.map +1 -1
- package/dist/js/lib/unified.fields.js +9 -1
- package/dist/js/lib/unified.fields.js.map +1 -1
- package/dist/js/lib/zod.fields.d.ts +4 -2
- package/dist/js/lib/zod.fields.d.ts.map +1 -1
- package/dist/js/lib/zod.fields.js +3 -1
- package/dist/js/lib/zod.fields.js.map +1 -1
- package/dist/js/middleware/auth.middleware.d.ts.map +1 -1
- package/dist/js/middleware/auth.middleware.js +2 -1
- package/dist/js/middleware/auth.middleware.js.map +1 -1
- package/dist/js/types/Collection.d.ts +1 -0
- package/dist/js/types/Collection.d.ts.map +1 -1
- package/dist/js/types/accountHandlers.d.ts +1 -1
- package/dist/js/types/accountHandlers.d.ts.map +1 -1
- package/dist/js/utils/getErrorDetail.d.ts +2 -1
- package/dist/js/utils/getErrorDetail.d.ts.map +1 -1
- package/dist/js/utils/getErrorDetail.js +2 -1
- package/dist/js/utils/getErrorDetail.js.map +1 -1
- package/dist/js/utils/handleJWT.d.ts.map +1 -1
- package/dist/js/utils/handleJWT.js +0 -1
- package/dist/js/utils/handleJWT.js.map +1 -1
- package/dist/js/utils/libsodium.d.ts.map +1 -1
- package/dist/js/utils/libsodium.js +36 -28
- package/dist/js/utils/libsodium.js.map +1 -1
- package/dist/js/utils/sanitize.js +2 -2
- package/dist/js/utils/sanitize.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readAll.js","sourceRoot":"","sources":["../../../src/js/crud/readAll.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAE/C,OAAO,eAAe,MAAM,4BAA4B,CAAC;AACzD,OAAO,gBAAgB,MAAM,kCAAkC,CAAC;AAEhE,MAAM,IAAI,GAAG,CAAC,EACZ,SAAS,EACT,SAAS,EACT,QAAQ,EACR,cAAc,GAMf,EAAE,EAAE;IACH,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;QAE1D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC;YAC1B,SAAS;YACT,SAAS;YACT,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,QAAQ;SACT,CAAC,CAAC;QAGH,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACnC,eAAe,CAAC;gBACd,QAAQ;gBACR,SAAS;gBACT,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBACd,GAAG;aACJ,CAAC,CAAC;QACL,CAAC;
|
|
1
|
+
{"version":3,"file":"readAll.js","sourceRoot":"","sources":["../../../src/js/crud/readAll.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAE/C,OAAO,eAAe,MAAM,4BAA4B,CAAC;AACzD,OAAO,gBAAgB,MAAM,kCAAkC,CAAC;AAEhE,MAAM,IAAI,GAAG,CAAC,EACZ,SAAS,EACT,SAAS,EACT,QAAQ,EACR,cAAc,GAMf,EAAE,EAAE;IACH,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;QAE1D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC;YAC1B,SAAS;YACT,SAAS;YACT,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,QAAQ;SACT,CAAC,CAAC;QAGH,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACnC,eAAe,CAAC;gBACd,QAAQ;gBACR,SAAS;gBACT,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBACd,GAAG;aACJ,CAAC,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GACd,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAGjE,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAS,EAAE,EAAE;YAC5B,IAAI,UAAU;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAE1D,OAAO;gBACL,GAAG,IAAI;gBACP,GAAG,UAAU;aACd,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAGF,WAAW,CAAC;YACV,GAAG;YACH,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,2BAA2B;SACrC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
package/dist/js/crud/remove.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { Request, Response } from "express";
|
|
2
|
-
import type { Route
|
|
3
|
-
declare const remove: ({ modelName, routeName, routeObj,
|
|
2
|
+
import type { Route } from "../types/Collection.ts";
|
|
3
|
+
declare const remove: ({ modelName, routeName, routeObj, }: {
|
|
4
4
|
modelName: string;
|
|
5
5
|
routeObj: Route;
|
|
6
6
|
routeName: string;
|
|
7
|
-
validationsObj: ValidationsObj;
|
|
8
7
|
}) => (req: Request, res: Response) => Promise<void>;
|
|
9
8
|
export default remove;
|
|
10
9
|
//# sourceMappingURL=remove.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/js/crud/remove.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMjD,OAAO,KAAK,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/js/crud/remove.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAGpD,QAAA,MAAM,MAAM,GAAI,qCAIb;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,MACe,KAAK,OAAO,EAAE,KAAK,QAAQ,KAAG,OAAO,CAAC,IAAI,CAqCzD,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/js/crud/remove.js
CHANGED
|
@@ -2,25 +2,29 @@ import getParam from "./utils/getParam.js";
|
|
|
2
2
|
import getItem from "./utils/getItem.js";
|
|
3
3
|
import getModel from "../utils/getModel.js";
|
|
4
4
|
import appResponse from "../utils/response.js";
|
|
5
|
-
import authorizeAccess from "./utils/
|
|
6
|
-
import
|
|
7
|
-
const remove = ({ modelName, routeName, routeObj,
|
|
5
|
+
import authorizeAccess from "./utils/authorizeAccess.js";
|
|
6
|
+
import { sanitizeOne } from "../utils/sanitize.js";
|
|
7
|
+
const remove = ({ modelName, routeName, routeObj, }) => {
|
|
8
8
|
return async (req, res) => {
|
|
9
|
-
getValidationKey(routeObj, validationsObj);
|
|
10
9
|
const id = getParam({ req, routeObj });
|
|
11
10
|
const item = await getItem({
|
|
12
11
|
modelName,
|
|
13
12
|
routeName,
|
|
14
13
|
_id: id,
|
|
15
|
-
routeObj
|
|
14
|
+
routeObj,
|
|
16
15
|
});
|
|
17
16
|
authorizeAccess({ routeObj, routeName, item, req });
|
|
18
17
|
const Model = getModel({ modelName, routeName, routeObj });
|
|
19
|
-
await Model.findByIdAndDelete(id);
|
|
18
|
+
const deletedItem = await Model.findByIdAndDelete(id);
|
|
19
|
+
const cleaned = sanitizeOne(deletedItem.toObject(), routeObj);
|
|
20
|
+
const idExcluded = routeObj.mongooseConfigObj?.hiddenFieldsArray?.includes("_id");
|
|
21
|
+
if (idExcluded)
|
|
22
|
+
delete cleaned["_id"];
|
|
20
23
|
appResponse({
|
|
21
24
|
res,
|
|
22
25
|
message: "Item deleted successfully!",
|
|
23
26
|
statusCode: 202,
|
|
27
|
+
data: cleaned
|
|
24
28
|
});
|
|
25
29
|
};
|
|
26
30
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/js/crud/remove.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,eAAe,MAAM,4BAA4B,CAAC;AAEzD,OAAO,
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/js/crud/remove.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,eAAe,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,MAAM,GAAG,CAAC,EACd,SAAS,EACT,SAAS,EACT,QAAQ,GAKT,EAAE,EAAE;IACH,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;QAE1D,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAGvC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC;YACzB,SAAS;YACT,SAAS;YACT,GAAG,EAAE,EAAY;YACjB,QAAQ;SACT,CAAC,CAAC;QAGH,eAAe,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAGpD,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAG3D,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAGtD,MAAM,OAAO,GAAG,WAAW,CAAC,WAAY,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;QAG/D,MAAM,UAAU,GACd,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,UAAU;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;QAGtC,WAAW,CAAC;YACV,GAAG;YACH,OAAO,EAAE,4BAA4B;YACrC,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { Request, Response } from "express";
|
|
2
|
-
import type { Route
|
|
3
|
-
declare const removeAll: ({ modelName, routeName, routeObj,
|
|
2
|
+
import type { Route } from "../types/Collection.ts";
|
|
3
|
+
declare const removeAll: ({ modelName, routeName, routeObj, }: {
|
|
4
4
|
modelName: string;
|
|
5
5
|
routeName: string;
|
|
6
6
|
routeObj: Route;
|
|
7
|
-
validationsObj: ValidationsObj;
|
|
8
7
|
}) => (req: Request, res: Response) => Promise<void>;
|
|
9
8
|
export default removeAll;
|
|
10
9
|
//# sourceMappingURL=removeAll.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"removeAll.d.ts","sourceRoot":"","sources":["../../../src/js/crud/removeAll.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAU,MAAM,SAAS,CAAC;AAIzD,OAAO,KAAK,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"removeAll.d.ts","sourceRoot":"","sources":["../../../src/js/crud/removeAll.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAU,MAAM,SAAS,CAAC;AAIzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAKpD,QAAA,MAAM,SAAS,GAAI,qCAIhB;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;CACjB,MACe,KAAK,OAAO,EAAE,KAAK,QAAQ,KAAG,OAAO,CAAC,IAAI,CAgCzD,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import getModel from "../utils/getModel.js";
|
|
2
2
|
import appResponse from "../utils/response.js";
|
|
3
|
-
import authorizeAccess from "./utils/
|
|
3
|
+
import authorizeAccess from "./utils/authorizeAccess.js";
|
|
4
4
|
import AppError from "../utils/AppError.js";
|
|
5
|
-
import getValidationKey from "../utils/validationKeyError.js";
|
|
6
5
|
import getErrorDetail from "../utils/getErrorDetail.js";
|
|
7
|
-
const removeAll = ({ modelName, routeName, routeObj,
|
|
6
|
+
const removeAll = ({ modelName, routeName, routeObj, }) => {
|
|
8
7
|
return async (req, res) => {
|
|
9
|
-
getValidationKey(routeObj, validationsObj);
|
|
10
8
|
authorizeAccess({ routeObj, routeName, req });
|
|
11
9
|
const Model = getModel({ modelName, routeName, routeObj });
|
|
12
10
|
const result = await Model.deleteMany({});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"removeAll.js","sourceRoot":"","sources":["../../../src/js/crud/removeAll.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,eAAe,MAAM,4BAA4B,CAAC;AAEzD,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"removeAll.js","sourceRoot":"","sources":["../../../src/js/crud/removeAll.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,eAAe,MAAM,4BAA4B,CAAC;AAEzD,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,cAAc,MAAM,4BAA4B,CAAC;AAGxD,MAAM,SAAS,GAAG,CAAC,EACjB,SAAS,EACT,SAAS,EACT,QAAQ,GAKT,EAAE,EAAE;IACH,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;QAE1D,eAAe,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAG9C,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAG3D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAG1C,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,CAAC;QAEtD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,0BAA0B;gBACnC,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,sCAAsC;gBAC5C,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;QACL,CAAC;QAGD,WAAW,CAAC;YACV,GAAG;YACH,IAAI,EAAE;gBACJ,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC;YACD,OAAO,EAAE,6BAA6B;YACtC,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import getModel from "../utils/getModel.js";
|
|
2
2
|
import appResponse from "../utils/response.js";
|
|
3
|
-
import authorizeAccess from "./utils/
|
|
3
|
+
import authorizeAccess from "./utils/authorizeAccess.js";
|
|
4
4
|
import AppError from "../utils/AppError.js";
|
|
5
5
|
import getValidationKey from "../utils/validationKeyError.js";
|
|
6
6
|
import getErrorDetail from "../utils/getErrorDetail.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleDecryption.d.ts","sourceRoot":"","sources":["../../../../src/js/crud/security/handleDecryption.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAKvD,QAAA,MAAM,gBAAgB,GAAU,MAAM,GAAG,EAAE,UAAU,KAAK,gDAiEzD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { unSeal } from "../../utils/libsodium.js";
|
|
2
|
+
import AppError from "../../utils/AppError.js";
|
|
3
|
+
import getErrorDetail from "../../utils/getErrorDetail.js";
|
|
4
|
+
const handleDecryption = async (item, routeObj) => {
|
|
5
|
+
const decArr = routeObj.decryptedFieldsArray;
|
|
6
|
+
if (!decArr)
|
|
7
|
+
return;
|
|
8
|
+
if (!Array.isArray(decArr)) {
|
|
9
|
+
throw new AppError({
|
|
10
|
+
details: getErrorDetail(routeObj),
|
|
11
|
+
hint: "decryptedFieldsArray must be an array of field names.",
|
|
12
|
+
message: "Decryption configuration is invalid.",
|
|
13
|
+
statusCode: 409,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
if (!decArr.length) {
|
|
17
|
+
throw new AppError({
|
|
18
|
+
details: getErrorDetail(routeObj),
|
|
19
|
+
hint: "Add at least one field name to decryptedFieldsArray.",
|
|
20
|
+
message: "Decryption configuration is empty.",
|
|
21
|
+
statusCode: 409,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const decrypted = {};
|
|
25
|
+
for (let field of decArr) {
|
|
26
|
+
const optional = field.endsWith("?");
|
|
27
|
+
field = optional ? field.slice(0, -1) : field;
|
|
28
|
+
if (!Object.hasOwn(item, field))
|
|
29
|
+
if (optional) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
throw new AppError({
|
|
34
|
+
details: getErrorDetail(routeObj),
|
|
35
|
+
hint: `Make sure '${field}' is found in the item: ${item._id}. If '${field}' is not found in some items, make it ${field}?`,
|
|
36
|
+
message: `The required field '${field}' is missing is to decrypt.`,
|
|
37
|
+
statusCode: 400,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const { str, nonce, publicKey, securedPrivateKey } = item[field];
|
|
41
|
+
if (!str || !nonce || !publicKey || !securedPrivateKey)
|
|
42
|
+
throw new AppError({
|
|
43
|
+
details: getErrorDetail(routeObj),
|
|
44
|
+
hint: "str, nonce, publicKey and securedPrivateKey all are required to decrypt the string",
|
|
45
|
+
message: "Essentials missing for decryption",
|
|
46
|
+
statusCode: 404,
|
|
47
|
+
});
|
|
48
|
+
decrypted[field] = await unSeal({
|
|
49
|
+
str,
|
|
50
|
+
nonce,
|
|
51
|
+
publicKey,
|
|
52
|
+
securedPrivateKey,
|
|
53
|
+
routeObj,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return decrypted;
|
|
57
|
+
};
|
|
58
|
+
export default handleDecryption;
|
|
59
|
+
//# sourceMappingURL=handleDecryption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleDecryption.js","sourceRoot":"","sources":["../../../../src/js/crud/security/handleDecryption.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAE3D,MAAM,gBAAgB,GAAG,KAAK,EAAE,IAAS,EAAE,QAAe,EAAE,EAAE;IAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC;IAG7C,IAAI,CAAC,MAAM;QAAE,OAAO;IAGpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;YACjC,IAAI,EAAE,uDAAuD;YAC7D,OAAO,EAAE,sCAAsC;YAC/C,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;IAGD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;YACjC,IAAI,EAAE,sDAAsD;YAC5D,OAAO,EAAE,oCAAoC;YAC7C,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAA2B,EAAE,CAAC;IAE7C,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QAEzB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAG9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;YAC7B,IAAI,QAAQ,EAAE,CAAC;gBACb,SAAS;YACX,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,QAAQ,CAAC;oBACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;oBACjC,IAAI,EAAE,cAAc,KAAK,2BAA2B,IAAI,CAAC,GAAG,SAAS,KAAK,yCAAyC,KAAK,GAAG;oBAC3H,OAAO,EAAE,uBAAuB,KAAK,6BAA6B;oBAClE,UAAU,EAAE,GAAG;iBAChB,CAAC,CAAC;YACL,CAAC;QAEH,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,iBAAiB;YACpD,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;gBACjC,IAAI,EAAE,oFAAoF;gBAC1F,OAAO,EAAE,mCAAmC;gBAC5C,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QAEL,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,MAAM,CAAC;YAC9B,GAAG;YACH,KAAK;YACL,SAAS;YACT,iBAAiB;YACjB,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Route } from "../../types/Collection.js";
|
|
2
|
+
import type { SealResult } from "../../utils/libsodium.js";
|
|
3
|
+
declare const handleEncryption: (body: any, routeObj: Route) => Promise<Record<string, SealResult> | undefined>;
|
|
4
|
+
export default handleEncryption;
|
|
5
|
+
//# sourceMappingURL=handleEncryption.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleEncryption.d.ts","sourceRoot":"","sources":["../../../../src/js/crud/security/handleEncryption.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAIvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,QAAA,MAAM,gBAAgB,GAAU,MAAM,GAAG,EAAE,UAAU,KAAK,oDAiDzD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import AppError from "../../utils/AppError.js";
|
|
2
|
+
import getErrorDetail from "../../utils/getErrorDetail.js";
|
|
3
|
+
import { seal } from "../../utils/libsodium.js";
|
|
4
|
+
const handleEncryption = async (body, routeObj) => {
|
|
5
|
+
const encArr = routeObj.encryptedFieldsArray;
|
|
6
|
+
if (!encArr)
|
|
7
|
+
return;
|
|
8
|
+
if (!Array.isArray(encArr)) {
|
|
9
|
+
throw new AppError({
|
|
10
|
+
details: getErrorDetail(routeObj),
|
|
11
|
+
hint: "encryptedFieldsArray must be an array of field names.",
|
|
12
|
+
message: "Encryption configuration is invalid.",
|
|
13
|
+
statusCode: 409,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
if (!encArr.length) {
|
|
17
|
+
throw new AppError({
|
|
18
|
+
details: getErrorDetail(routeObj),
|
|
19
|
+
hint: "Add at least one field name to encryptedFieldsArray.",
|
|
20
|
+
message: "Encryption configuration is empty.",
|
|
21
|
+
statusCode: 409,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const encrypted = {};
|
|
25
|
+
for (let field of encArr) {
|
|
26
|
+
const optional = field.endsWith("?");
|
|
27
|
+
field = optional ? field.slice(0, -1) : field;
|
|
28
|
+
if (!Object.hasOwn(body, field))
|
|
29
|
+
if (optional) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
throw new AppError({
|
|
34
|
+
details: getErrorDetail(routeObj),
|
|
35
|
+
hint: `Make sure '${field}' is included in the request body.`,
|
|
36
|
+
message: `The required field '${field}' is missing to encrypt.`,
|
|
37
|
+
statusCode: 400,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
encrypted[field] = await seal(body[field], routeObj);
|
|
41
|
+
}
|
|
42
|
+
return encrypted;
|
|
43
|
+
};
|
|
44
|
+
export default handleEncryption;
|
|
45
|
+
//# sourceMappingURL=handleEncryption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleEncryption.js","sourceRoot":"","sources":["../../../../src/js/crud/security/handleEncryption.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAGhD,MAAM,gBAAgB,GAAG,KAAK,EAAE,IAAS,EAAE,QAAe,EAAE,EAAE;IAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC;IAG7C,IAAI,CAAC,MAAM;QAAE,OAAO;IAGpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;YACjC,IAAI,EAAE,uDAAuD;YAC7D,OAAO,EAAE,sCAAsC;YAC/C,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;IAGD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;YACjC,IAAI,EAAE,sDAAsD;YAC5D,OAAO,EAAE,oCAAoC;YAC7C,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAA+B,EAAE,CAAC;IAEjD,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAG9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;YAC7B,IAAI,QAAQ,EAAE,CAAC;gBACb,SAAS;YACX,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,QAAQ,CAAC;oBACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;oBACjC,IAAI,EAAE,cAAc,KAAK,oCAAoC;oBAC7D,OAAO,EAAE,uBAAuB,KAAK,0BAA0B;oBAC/D,UAAU,EAAE,GAAG;iBAChB,CAAC,CAAC;YACL,CAAC;QAEH,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleHashing.d.ts","sourceRoot":"","sources":["../../../../src/js/crud/security/handleHashing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAKvD,QAAA,MAAM,aAAa,GAAU,MAAM,GAAG,EAAE,UAAU,KAAK,gDA4DtD,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import AppError from "../../utils/AppError.js";
|
|
2
|
+
import getErrorDetail from "../../utils/getErrorDetail.js";
|
|
3
|
+
import { hash } from "../../utils/libsodium.js";
|
|
4
|
+
const handleHashing = async (body, routeObj) => {
|
|
5
|
+
const hashArr = routeObj.hashedFieldsArray;
|
|
6
|
+
if (!hashArr)
|
|
7
|
+
return;
|
|
8
|
+
if (!Array.isArray(hashArr)) {
|
|
9
|
+
throw new AppError({
|
|
10
|
+
details: getErrorDetail(routeObj),
|
|
11
|
+
hint: "hashedFieldsArray must be an array of field names.",
|
|
12
|
+
message: "Hashing configuration is invalid.",
|
|
13
|
+
statusCode: 409,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
if (!hashArr.length) {
|
|
17
|
+
throw new AppError({
|
|
18
|
+
details: getErrorDetail(routeObj),
|
|
19
|
+
hint: "Add at least one field name to hashedFieldsArray.",
|
|
20
|
+
message: "Hashing configuration is empty.",
|
|
21
|
+
statusCode: 409,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const hashed = {};
|
|
25
|
+
for (let field of hashArr) {
|
|
26
|
+
const optional = field.endsWith("?");
|
|
27
|
+
field = optional ? field.slice(0, -1) : field;
|
|
28
|
+
if (!Object.hasOwn(body, field)) {
|
|
29
|
+
if (optional) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
throw new AppError({
|
|
33
|
+
details: getErrorDetail(routeObj),
|
|
34
|
+
hint: `Make sure '${field}' is included in the request body.`,
|
|
35
|
+
message: `The required field '${field}' is missing to hash.`,
|
|
36
|
+
statusCode: 400,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
if (typeof body[field] !== "string") {
|
|
40
|
+
throw new AppError({
|
|
41
|
+
details: getErrorDetail(routeObj),
|
|
42
|
+
hint: `The field '${field}' must contain a string value.`,
|
|
43
|
+
message: `The field '${field}' is not allowed for hashing. Only strings can be hashed.`,
|
|
44
|
+
statusCode: 400,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
hashed[field] = await hash(body[field], routeObj);
|
|
48
|
+
}
|
|
49
|
+
return hashed;
|
|
50
|
+
};
|
|
51
|
+
export default handleHashing;
|
|
52
|
+
//# sourceMappingURL=handleHashing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleHashing.js","sourceRoot":"","sources":["../../../../src/js/crud/security/handleHashing.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAEhD,MAAM,aAAa,GAAG,KAAK,EAAE,IAAS,EAAE,QAAe,EAAE,EAAE;IACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,iBAAiB,CAAC;IAG3C,IAAI,CAAC,OAAO;QAAE,OAAO;IAGrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;YACjC,IAAI,EAAE,oDAAoD;YAC1D,OAAO,EAAE,mCAAmC;YAC5C,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;IAGD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;YACjC,IAAI,EAAE,mDAAmD;YACzD,OAAO,EAAE,iCAAiC;YAC1C,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAG9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,QAAQ,EAAE,CAAC;gBACb,SAAS;YACX,CAAC;YAED,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;gBACjC,IAAI,EAAE,cAAc,KAAK,oCAAoC;gBAC7D,OAAO,EAAE,uBAAuB,KAAK,uBAAuB;gBAC5D,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QACL,CAAC;QAGD,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;gBACjC,IAAI,EAAE,cAAc,KAAK,gCAAgC;gBACzD,OAAO,EAAE,cAAc,KAAK,2DAA2D;gBACvF,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleHasing.d.ts","sourceRoot":"","sources":["../../../../src/js/crud/security/handleHasing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAKvD,QAAA,MAAM,aAAa,GAAU,MAAM,GAAG,EAAE,UAAU,KAAK,gDA4DtD,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import AppError from "../../utils/AppError.js";
|
|
2
|
+
import getErrorDetail from "../../utils/getErrorDetail.js";
|
|
3
|
+
import { hash } from "../../utils/libsodium.js";
|
|
4
|
+
const handleHashing = async (body, routeObj) => {
|
|
5
|
+
const hashArr = routeObj.hashedFieldsArray;
|
|
6
|
+
if (!hashArr)
|
|
7
|
+
return;
|
|
8
|
+
if (!Array.isArray(hashArr)) {
|
|
9
|
+
throw new AppError({
|
|
10
|
+
details: getErrorDetail(routeObj),
|
|
11
|
+
hint: "hashedFieldsArray must be an array of field names.",
|
|
12
|
+
message: "Hashing configuration is invalid.",
|
|
13
|
+
statusCode: 409,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
if (!hashArr.length) {
|
|
17
|
+
throw new AppError({
|
|
18
|
+
details: getErrorDetail(routeObj),
|
|
19
|
+
hint: "Add at least one field name to hashedFieldsArray.",
|
|
20
|
+
message: "Hashing configuration is empty.",
|
|
21
|
+
statusCode: 409,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const hashed = {};
|
|
25
|
+
for (let field of hashArr) {
|
|
26
|
+
const optional = field.endsWith("?");
|
|
27
|
+
field = optional ? field.slice(0, -1) : field;
|
|
28
|
+
if (!Object.hasOwn(body, field)) {
|
|
29
|
+
if (optional) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
throw new AppError({
|
|
33
|
+
details: getErrorDetail(routeObj),
|
|
34
|
+
hint: `Make sure '${field}' is included in the request body.`,
|
|
35
|
+
message: `The required field '${field}' is missing to hash.`,
|
|
36
|
+
statusCode: 400,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
if (typeof body[field] !== "string") {
|
|
40
|
+
throw new AppError({
|
|
41
|
+
details: getErrorDetail(routeObj),
|
|
42
|
+
hint: `The field '${field}' must contain a string value.`,
|
|
43
|
+
message: `The field '${field}' is not allowed for hashing. Only strings can be hashed.`,
|
|
44
|
+
statusCode: 400,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
hashed[field] = await hash(body[field], routeObj);
|
|
48
|
+
}
|
|
49
|
+
return hashed;
|
|
50
|
+
};
|
|
51
|
+
export default handleHashing;
|
|
52
|
+
//# sourceMappingURL=handleHasing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleHasing.js","sourceRoot":"","sources":["../../../../src/js/crud/security/handleHasing.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAEhD,MAAM,aAAa,GAAG,KAAK,EAAE,IAAS,EAAE,QAAe,EAAE,EAAE;IACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,iBAAiB,CAAC;IAG3C,IAAI,CAAC,OAAO;QAAE,OAAO;IAGrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;YACjC,IAAI,EAAE,oDAAoD;YAC1D,OAAO,EAAE,mCAAmC;YAC5C,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;IAGD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;YACjC,IAAI,EAAE,mDAAmD;YACzD,OAAO,EAAE,iCAAiC;YAC1C,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAG9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,QAAQ,EAAE,CAAC;gBACb,SAAS;YACX,CAAC;YAED,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;gBACjC,IAAI,EAAE,cAAc,KAAK,oCAAoC;gBAC7D,OAAO,EAAE,uBAAuB,KAAK,uBAAuB;gBAC5D,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QACL,CAAC;QAGD,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;gBACjC,IAAI,EAAE,cAAc,KAAK,gCAAgC;gBACzD,OAAO,EAAE,cAAc,KAAK,2DAA2D;gBACvF,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/js/crud/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/js/crud/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAYpE,QAAA,MAAM,MAAM,GAAI,qDAKb;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;IAChB,cAAc,EAAE,cAAc,CAAC;CAChC,MACe,KAAK,OAAO,EAAE,KAAK,QAAQ,KAAG,OAAO,CAAC,IAAI,CAsDzD,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/js/crud/update.js
CHANGED
|
@@ -4,8 +4,10 @@ import validate from "../utils/validate.js";
|
|
|
4
4
|
import getModel from "../utils/getModel.js";
|
|
5
5
|
import { sanitizeOne } from "../utils/sanitize.js";
|
|
6
6
|
import appResponse from "../utils/response.js";
|
|
7
|
-
import authorizeAccess from "./utils/
|
|
7
|
+
import authorizeAccess from "./utils/authorizeAccess.js";
|
|
8
8
|
import getValidationKey from "../utils/validationKeyError.js";
|
|
9
|
+
import handleEncryption from "./encryption/handleEncryption.js";
|
|
10
|
+
import handleHashing from "./security/handleHashing.js";
|
|
9
11
|
const update = ({ modelName, routeName, routeObj, validationsObj, }) => {
|
|
10
12
|
return async (req, res) => {
|
|
11
13
|
const validationObj = getValidationKey(routeObj, validationsObj);
|
|
@@ -15,16 +17,22 @@ const update = ({ modelName, routeName, routeObj, validationsObj, }) => {
|
|
|
15
17
|
modelName,
|
|
16
18
|
routeName,
|
|
17
19
|
_id: id,
|
|
18
|
-
routeObj
|
|
20
|
+
routeObj,
|
|
19
21
|
});
|
|
20
22
|
authorizeAccess({ item, req, routeObj, routeName });
|
|
23
|
+
const encryptedFields = await handleEncryption(req.body, routeObj);
|
|
24
|
+
const hashedFields = await handleHashing(req.body, routeObj);
|
|
21
25
|
const Model = getModel({ modelName, routeName, routeObj });
|
|
22
|
-
const updatedItem = await Model.findByIdAndUpdate(id, body, {
|
|
26
|
+
const updatedItem = await Model.findByIdAndUpdate(id, { ...body, ...encryptedFields, ...hashedFields }, {
|
|
23
27
|
returnDocument: "after",
|
|
24
28
|
});
|
|
29
|
+
const cleaned = sanitizeOne(updatedItem.toObject(), routeObj);
|
|
30
|
+
const idExcluded = routeObj.mongooseConfigObj?.hiddenFieldsArray?.includes("_id");
|
|
31
|
+
if (idExcluded)
|
|
32
|
+
delete cleaned["_id"];
|
|
25
33
|
appResponse({
|
|
26
34
|
res,
|
|
27
|
-
data:
|
|
35
|
+
data: cleaned,
|
|
28
36
|
message: "Item updated successfully!",
|
|
29
37
|
});
|
|
30
38
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/js/crud/update.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,eAAe,MAAM,4BAA4B,CAAC;AACzD,OAAO,gBAAgB,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/js/crud/update.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,eAAe,MAAM,4BAA4B,CAAC;AACzD,OAAO,gBAAgB,MAAM,gCAAgC,CAAC;AAC9D,OAAO,gBAAgB,MAAM,kCAAkC,CAAC;AAChE,OAAO,aAAa,MAAM,6BAA6B,CAAC;AAExD,MAAM,MAAM,GAAG,CAAC,EACd,SAAS,EACT,SAAS,EACT,QAAQ,EACR,cAAc,GAMf,EAAE,EAAE;IACH,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;QAE1D,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAGjE,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAGvC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAGzD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC;YACzB,SAAS;YACT,SAAS;YACT,GAAG,EAAE,EAAY;YACjB,QAAQ;SACT,CAAC,CAAC;QAGH,eAAe,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAGpD,MAAM,eAAe,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAGnE,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAG7D,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAG3D,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAC/C,EAAE,EACF,EAAE,GAAG,IAAI,EAAE,GAAG,eAAe,EAAE,GAAG,YAAY,EAAE,EAChD;YACE,cAAc,EAAE,OAAO;SACxB,CACF,CAAA;QAGD,MAAM,OAAO,GAAG,WAAW,CAAC,WAAY,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;QAG/D,MAAM,UAAU,GACd,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,UAAU;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;QAGtC,WAAW,CAAC;YACV,GAAG;YACH,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,4BAA4B;SACtC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Request } from "express";
|
|
2
|
+
import type { Route } from "../../types/Collection.js";
|
|
3
|
+
declare const authorizeAccess: ({ routeObj, routeName, item, req, }: {
|
|
4
|
+
routeObj: Route;
|
|
5
|
+
routeName: string;
|
|
6
|
+
item?: any;
|
|
7
|
+
req: Request;
|
|
8
|
+
}) => void;
|
|
9
|
+
export default authorizeAccess;
|
|
10
|
+
//# sourceMappingURL=authorizeAccess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorizeAccess.d.ts","sourceRoot":"","sources":["../../../../src/js/crud/utils/authorizeAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAIvD,QAAA,MAAM,eAAe,GAAI,qCAKtB;IACD,QAAQ,EAAE,KAAK,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,GAAG,EAAE,OAAO,CAAC;CACd,SAuDA,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import AppError from "../../utils/AppError.js";
|
|
2
|
+
import AppLog from "../../utils/AppLog.js";
|
|
3
|
+
import getErrorDetail from "../../utils/getErrorDetail.js";
|
|
4
|
+
const authorizeAccess = ({ routeObj, routeName, item, req, }) => {
|
|
5
|
+
if (routeObj.authRole !== "admin" && routeObj.authRole !== "adminOrOwner")
|
|
6
|
+
throw new AppError({
|
|
7
|
+
message: "authRole should only be 'admin' or 'adminOrOwner'",
|
|
8
|
+
statusCode: 409,
|
|
9
|
+
hint: "Make the authRole admin or adminOrOwner based on your routeObj requirement. Checkout collection -> routes -> authRole",
|
|
10
|
+
details: getErrorDetail(routeObj),
|
|
11
|
+
});
|
|
12
|
+
if (routeObj.authRole !== "admin" && routeObj.handler === "removeAll")
|
|
13
|
+
throw new AppError({
|
|
14
|
+
message: "authRole should only be 'admin'",
|
|
15
|
+
statusCode: 409,
|
|
16
|
+
hint: "Make the authRole admin. Checkout collection -> routes -> authRole",
|
|
17
|
+
details: getErrorDetail(routeObj),
|
|
18
|
+
});
|
|
19
|
+
const ownerId = routeObj.ownerShip === "self" ? item._id : item?.owner?._id;
|
|
20
|
+
const isOwner = !!ownerId && !!req.user && ownerId.equals(req.user._id);
|
|
21
|
+
const isAdmin = req.user.role === "admin";
|
|
22
|
+
if (!ownerId) {
|
|
23
|
+
AppLog("x", "authorization", `owner not found in item.`);
|
|
24
|
+
AppLog("warn", "authorization", `If this route doesn't have owner, use ownerShip: "self" in routesArray -> route. routeObj: '/${routeName}', method: '${routeObj.method}' and path: '${routeObj.path}'`);
|
|
25
|
+
}
|
|
26
|
+
if (routeObj.authRole === "admin") {
|
|
27
|
+
if (!isAdmin)
|
|
28
|
+
throw new AppError({
|
|
29
|
+
message: "Unauthorized",
|
|
30
|
+
statusCode: 403,
|
|
31
|
+
hint: "You are not the admin. If this route doesn\'t have owner, use ownerShip: 'self' in routesArray -> route.",
|
|
32
|
+
details: getErrorDetail(routeObj),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
if (routeObj.authRole === "adminOrOwner") {
|
|
36
|
+
if (!isAdmin && !isOwner)
|
|
37
|
+
throw new AppError({
|
|
38
|
+
message: "Unauthorized",
|
|
39
|
+
statusCode: 403,
|
|
40
|
+
hint: "You are not the owner. If this route doesn\'t have owner, use ownerShip: 'self' in routesArray -> route.",
|
|
41
|
+
details: getErrorDetail(routeObj),
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
export default authorizeAccess;
|
|
46
|
+
//# sourceMappingURL=authorizeAccess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorizeAccess.js","sourceRoot":"","sources":["../../../../src/js/crud/utils/authorizeAccess.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAE/C,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAC3C,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAE3D,MAAM,eAAe,GAAG,CAAC,EACvB,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,GAAG,GAMJ,EAAE,EAAE;IAEH,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,QAAQ,KAAK,cAAc;QACvE,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,mDAAmD;YAC5D,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,uHAAuH;YAC7H,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;SAClC,CAAC,CAAC;IAGL,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,OAAO,KAAK,WAAW;QACnE,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,iCAAiC;YAC1C,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,oEAAoE;YAC1E,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;SAClC,CAAC,CAAC;IAGL,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;IAC5E,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;IAG1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,EAAE,eAAe,EAAE,0BAA0B,CAAC,CAAC;QACzD,MAAM,CACJ,MAAM,EACN,eAAe,EACf,gGAAgG,SAAS,eAAe,QAAQ,CAAC,MAAM,gBAAgB,QAAQ,CAAC,IAAI,GAAG,CACxK,CAAC;IACJ,CAAC;IAGD,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO;YACV,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,cAAc;gBACvB,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,0GAA0G;gBAChH,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;IACP,CAAC;IAGD,IAAI,QAAQ,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;YACtB,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,cAAc;gBACvB,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,0GAA0G;gBAChH,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;IACP,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authroizeAccess.d.ts","sourceRoot":"","sources":["../../../../src/js/crud/utils/authroizeAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAIvD,QAAA,MAAM,eAAe,GAAI,qCAKtB;IACD,QAAQ,EAAE,KAAK,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,GAAG,EAAE,OAAO,CAAC;CACd,
|
|
1
|
+
{"version":3,"file":"authroizeAccess.d.ts","sourceRoot":"","sources":["../../../../src/js/crud/utils/authroizeAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAIvD,QAAA,MAAM,eAAe,GAAI,qCAKtB;IACD,QAAQ,EAAE,KAAK,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,GAAG,EAAE,OAAO,CAAC;CACd,SA2DA,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -19,8 +19,10 @@ const authorizeAccess = ({ routeObj, routeName, item, req, }) => {
|
|
|
19
19
|
const ownerId = routeObj.ownerShip === "self" ? item._id : item?.owner?._id;
|
|
20
20
|
const isOwner = !!ownerId && !!req.user && ownerId.equals(req.user._id);
|
|
21
21
|
const isAdmin = req.user.role === "admin";
|
|
22
|
-
if (!ownerId)
|
|
23
|
-
AppLog("
|
|
22
|
+
if (!ownerId) {
|
|
23
|
+
AppLog("x", "authorization", `owner not found in item.`);
|
|
24
|
+
AppLog("warn", "authorization", `If it doesn't have owner, use ownerShip: "self" in routesArray -> route. routeObj: '/${routeName}', method: '${routeObj.method}' and path: '${routeObj.path}'`);
|
|
25
|
+
}
|
|
24
26
|
if (routeObj.authRole === "admin") {
|
|
25
27
|
if (!isAdmin)
|
|
26
28
|
throw new AppError({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authroizeAccess.js","sourceRoot":"","sources":["../../../../src/js/crud/utils/authroizeAccess.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAE/C,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAC3C,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAE3D,MAAM,eAAe,GAAG,CAAC,EACvB,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,GAAG,GAMJ,EAAE,EAAE;IAEH,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,QAAQ,KAAK,cAAc;QACvE,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,mDAAmD;YAC5D,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,uHAAuH;YAC7H,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;SAClC,CAAC,CAAC;IAGL,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,OAAO,KAAK,WAAW;QACnE,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,iCAAiC;YAC1C,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,oEAAoE;YAC1E,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;SAClC,CAAC,CAAC;IAGL,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;IAC5E,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;IAG1C,IAAI,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"authroizeAccess.js","sourceRoot":"","sources":["../../../../src/js/crud/utils/authroizeAccess.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAE/C,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAC3C,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAE3D,MAAM,eAAe,GAAG,CAAC,EACvB,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,GAAG,GAMJ,EAAE,EAAE;IAEH,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,QAAQ,KAAK,cAAc;QACvE,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,mDAAmD;YAC5D,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,uHAAuH;YAC7H,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;SAClC,CAAC,CAAC;IAGL,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,OAAO,KAAK,WAAW;QACnE,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,iCAAiC;YAC1C,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,oEAAoE;YAC1E,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;SAClC,CAAC,CAAC;IAGL,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;IAC5E,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;IAG1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,CACJ,GAAG,EACH,eAAe,EACf,0BAA0B,CAC3B,CAAC;QACF,MAAM,CACJ,MAAM,EACN,eAAe,EACf,wFAAwF,SAAS,eAAe,QAAQ,CAAC,MAAM,gBAAgB,QAAQ,CAAC,IAAI,GAAG,CAChK,CAAC;IACJ,CAAC;IAGD,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO;YACV,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,cAAc;gBACvB,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;IACP,CAAC;IAGD,IAAI,QAAQ,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;YACtB,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,cAAc;gBACvB,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;IACP,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -56,7 +56,7 @@ const getItem = async ({ modelName, routeName, path, _id, clean = true, routeObj
|
|
|
56
56
|
hint: _id
|
|
57
57
|
? `Check the '${path ?? "path"}' you provided in url: /${_id}`
|
|
58
58
|
: "Hit a POST request and create an item",
|
|
59
|
-
details: getErrorDetail(routeObj),
|
|
59
|
+
details: getErrorDetail(routeObj, modelName),
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
if (clean) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getItem.js","sourceRoot":"","sources":["../../../../src/js/crud/utils/getItem.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAC3D,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEpE,MAAM,OAAO,GAAG,KAAK,EAAE,EACrB,SAAS,EACT,SAAS,EACT,IAAI,EACJ,GAAG,EACH,KAAK,GAAG,IAAI,EACZ,QAAQ,GAQT,EAAE,EAAE;IAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IAG3D,IAAI,IAAI,GAAQ,IAAI,CAAC;IAErB,IAAI,CAAC;QACH,IAAI,KAAK,CAAC;QAGV,IAAI,GAAG,EAAE,CAAC;YACR,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QAGD,MAAM,WAAW,GAAG,QAAQ,EAAE,iBAAiB,EAAE,WAAW,CAAC;QAC7D,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,OAAO,WAAW,KAAK,SAAS;gBAClC,MAAM,IAAI,QAAQ,CAAC;oBACjB,IAAI,EAAE,wHAAwH;oBAC9H,OAAO,EAAE,qBAAqB;oBAC9B,UAAU,EAAE,GAAG;oBACf,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;iBAClC,CAAC,CAAC;YACL,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAqB,EAAE,WAAW,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,GAAG,MAAM,KAAK,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAEf,MAAM,GAAG,GAAI,KAAe,CAAC,OAAO,CAAC;QAErC,IAAI,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,sBAAsB;gBAC/B,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,sFAAsF;gBAC5F,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YAEN,MAAM,GAAG,GAAG,KAAiB,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,6BAA6B;gBACrD,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG;gBACjC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,iBAAiB;gBACnC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,iCAAiC;gBACnD,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,cAAc,CAAC,QAAQ,CAAC;aACjD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAGD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;IAExE,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,YAAY;YAC7C,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,GAAG;gBACP,CAAC,CAAC,cAAc,IAAI,IAAI,MAAM,2BAA2B,GAAG,EAAE;gBAC9D,CAAC,CAAC,uCAAuC;YAC3C,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"getItem.js","sourceRoot":"","sources":["../../../../src/js/crud/utils/getItem.ts"],"names":[],"mappings":"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"}
|
package/dist/js/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Constructor } from "./types/Constructor.ts";
|
|
2
2
|
import type { Collection } from "./types/Collection.ts";
|
|
3
|
+
import type { Route } from "./types/Collection.ts";
|
|
3
4
|
declare class StarkForge {
|
|
4
5
|
config: Constructor;
|
|
5
6
|
constructor(object: Partial<Constructor>);
|
|
@@ -12,5 +13,6 @@ export { generateJWTSecret, generateMasterKey } from "./utils/libsodium.js";
|
|
|
12
13
|
export { default as getModel } from "./utils/getModel.js";
|
|
13
14
|
export { default as getItem } from "./crud/utils/getItem.js";
|
|
14
15
|
export declare const collection: (object: Collection) => Collection;
|
|
16
|
+
export declare const defineRoutes: (array: Route[]) => Route[];
|
|
15
17
|
export default StarkForge;
|
|
16
18
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/js/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/js/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/js/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAInD,cAAM,UAAU;IACd,MAAM,EAAE,WAAW,CAAC;gBACR,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC;CAQzC;AAED,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE7D,eAAO,MAAM,UAAU,GAAI,QAAQ,UAAU,KAAG,UAE/C,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,EAAE,YAE1C,CAAA;AAED,eAAe,UAAU,CAAC"}
|