@90soft/parse-server-kit 1.0.0 → 2.0.1

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 (86) hide show
  1. package/README.md +424 -0
  2. package/dist/decorators/cloudDecorator.d.ts +7 -0
  3. package/dist/decorators/cloudDecorator.d.ts.map +1 -0
  4. package/dist/decorators/cloudDecorator.js +77 -0
  5. package/dist/decorators/cloudDecorator.js.map +1 -0
  6. package/dist/decorators/cloudRegistry.d.ts +9 -0
  7. package/dist/decorators/cloudRegistry.d.ts.map +1 -0
  8. package/dist/decorators/cloudRegistry.js +26 -0
  9. package/dist/decorators/cloudRegistry.js.map +1 -0
  10. package/dist/decorators/cronDecorator.d.ts +6 -0
  11. package/dist/decorators/cronDecorator.d.ts.map +1 -0
  12. package/dist/decorators/cronDecorator.js +28 -0
  13. package/dist/decorators/cronDecorator.js.map +1 -0
  14. package/dist/decorators/cronRegistry.d.ts +13 -0
  15. package/dist/decorators/cronRegistry.d.ts.map +1 -0
  16. package/dist/decorators/cronRegistry.js +96 -0
  17. package/dist/decorators/cronRegistry.js.map +1 -0
  18. package/dist/decorators/routeDecorator.d.ts +35 -0
  19. package/dist/decorators/routeDecorator.d.ts.map +1 -0
  20. package/dist/decorators/routeDecorator.js +160 -0
  21. package/dist/decorators/routeDecorator.js.map +1 -0
  22. package/dist/decorators/triggerDecorator.d.ts +19 -0
  23. package/dist/decorators/triggerDecorator.d.ts.map +1 -0
  24. package/dist/decorators/triggerDecorator.js +45 -0
  25. package/dist/decorators/triggerDecorator.js.map +1 -0
  26. package/dist/decorators/triggerRegistry.d.ts +10 -0
  27. package/dist/decorators/triggerRegistry.d.ts.map +1 -0
  28. package/dist/decorators/triggerRegistry.js +87 -0
  29. package/dist/decorators/triggerRegistry.js.map +1 -0
  30. package/dist/decorators/types/cloudTypes.d.ts +32 -0
  31. package/dist/decorators/types/cloudTypes.d.ts.map +1 -0
  32. package/dist/decorators/types/cloudTypes.js +3 -0
  33. package/dist/decorators/types/cloudTypes.js.map +1 -0
  34. package/dist/decorators/types/common.d.ts +14 -0
  35. package/dist/decorators/types/common.d.ts.map +1 -0
  36. package/dist/decorators/types/common.js +3 -0
  37. package/dist/decorators/types/common.js.map +1 -0
  38. package/dist/decorators/types/cronTypes.d.ts +32 -0
  39. package/dist/decorators/types/cronTypes.d.ts.map +1 -0
  40. package/dist/decorators/types/cronTypes.js +21 -0
  41. package/dist/decorators/types/cronTypes.js.map +1 -0
  42. package/dist/decorators/types/fieldValidation.d.ts +36 -0
  43. package/dist/decorators/types/fieldValidation.d.ts.map +1 -0
  44. package/dist/decorators/types/fieldValidation.js +135 -0
  45. package/dist/decorators/types/fieldValidation.js.map +1 -0
  46. package/dist/decorators/types/triggerTypes.d.ts +14 -0
  47. package/dist/decorators/types/triggerTypes.d.ts.map +1 -0
  48. package/dist/decorators/types/triggerTypes.js +3 -0
  49. package/dist/decorators/types/triggerTypes.js.map +1 -0
  50. package/dist/index.d.ts +25 -4
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +78 -6
  53. package/dist/index.js.map +1 -1
  54. package/dist/middleware/middleware.d.ts +41 -0
  55. package/dist/middleware/middleware.d.ts.map +1 -0
  56. package/dist/middleware/middleware.js +154 -0
  57. package/dist/middleware/middleware.js.map +1 -0
  58. package/dist/swagger/index.d.ts +9 -0
  59. package/dist/swagger/index.d.ts.map +1 -0
  60. package/dist/swagger/index.js +37 -0
  61. package/dist/swagger/index.js.map +1 -0
  62. package/dist/swagger/swaggerRegistry.d.ts +79 -0
  63. package/dist/swagger/swaggerRegistry.d.ts.map +1 -0
  64. package/dist/swagger/swaggerRegistry.js +115 -0
  65. package/dist/swagger/swaggerRegistry.js.map +1 -0
  66. package/dist/swagger/swaggerSpec.d.ts +69 -0
  67. package/dist/swagger/swaggerSpec.d.ts.map +1 -0
  68. package/dist/swagger/swaggerSpec.js +174 -0
  69. package/dist/swagger/swaggerSpec.js.map +1 -0
  70. package/dist/utils/ACL.d.ts +19 -0
  71. package/dist/utils/ACL.d.ts.map +1 -0
  72. package/dist/utils/ACL.js +35 -0
  73. package/dist/utils/ACL.js.map +1 -0
  74. package/dist/utils/constants.d.ts +13 -0
  75. package/dist/utils/constants.d.ts.map +1 -0
  76. package/dist/utils/constants.js +19 -0
  77. package/dist/utils/constants.js.map +1 -0
  78. package/dist/utils/dynamicImport.d.ts +2 -0
  79. package/dist/utils/dynamicImport.d.ts.map +1 -0
  80. package/dist/utils/dynamicImport.js +21 -0
  81. package/dist/utils/dynamicImport.js.map +1 -0
  82. package/dist/utils/helper.d.ts +15 -0
  83. package/dist/utils/helper.d.ts.map +1 -0
  84. package/dist/utils/helper.js +93 -0
  85. package/dist/utils/helper.js.map +1 -0
  86. package/package.json +21 -5
@@ -0,0 +1,36 @@
1
+ import 'reflect-metadata';
2
+ interface MongoDBValidatorProperty {
3
+ bsonType?: string | string[];
4
+ minimum?: number;
5
+ maximum?: number;
6
+ minLength?: number;
7
+ maxLength?: number;
8
+ enum?: (string | null)[];
9
+ pattern?: string;
10
+ description?: string;
11
+ }
12
+ interface MongoDBValidator {
13
+ $jsonSchema: {
14
+ bsonType: 'object';
15
+ properties: Record<string, MongoDBValidatorProperty>;
16
+ };
17
+ }
18
+ interface ValidationInfo {
19
+ className: string;
20
+ validator: MongoDBValidator;
21
+ }
22
+ interface ValidationError {
23
+ field: string;
24
+ message: string;
25
+ value?: any;
26
+ }
27
+ interface ValidationResult {
28
+ valid: boolean;
29
+ errors: ValidationError[];
30
+ }
31
+ export declare function validateObject(object: Parse.Object): ValidationResult;
32
+ export declare function validateOrThrow(object: Parse.Object): void;
33
+ export declare function getValidators(): ValidationInfo[];
34
+ export declare function applyMongoValidators(parseServerInstance?: any): Promise<void>;
35
+ export {};
36
+ //# sourceMappingURL=fieldValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldValidation.d.ts","sourceRoot":"","sources":["../../../src/decorators/types/fieldValidation.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAe1B,UAAU,wBAAwB;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,gBAAgB;IACxB,WAAW,EAAE;QACX,QAAQ,EAAE,QAAQ,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;KACtD,CAAC;CACH;AAED,UAAU,cAAc;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,GAAG,CAAC;CACb;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,gBAAgB,CA+CrE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAM1D;AAoCD,wBAAgB,aAAa,IAAI,cAAc,EAAE,CAOhD;AAED,wBAAsB,oBAAoB,CAAC,mBAAmB,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCnF"}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateObject = validateObject;
4
+ exports.validateOrThrow = validateOrThrow;
5
+ exports.getValidators = getValidators;
6
+ exports.applyMongoValidators = applyMongoValidators;
7
+ require("reflect-metadata");
8
+ const schemaTypes_1 = require("./schemaTypes");
9
+ const helper_1 = require("../../utils/helper");
10
+ function validateObject(object) {
11
+ const className = object.className;
12
+ const classConstructor = Parse.Object.extend(className);
13
+ const fields = Reflect.getMetadata('parse:fields', classConstructor) || {};
14
+ const errors = [];
15
+ for (const [fieldName, meta] of Object.entries(fields)) {
16
+ const value = object.get(fieldName);
17
+ if (value === null || value === undefined) {
18
+ if (meta.required) {
19
+ errors.push({ field: fieldName, message: `Field '${fieldName}' is required` });
20
+ }
21
+ continue;
22
+ }
23
+ if (meta.type === 'Number' && typeof value === 'number') {
24
+ if (meta.min !== undefined && value < meta.min) {
25
+ errors.push({ field: fieldName, message: `Field '${fieldName}' must be at least ${meta.min}, got ${value}`, value });
26
+ }
27
+ if (meta.max !== undefined && value > meta.max) {
28
+ errors.push({ field: fieldName, message: `Field '${fieldName}' must be at most ${meta.max}, got ${value}`, value });
29
+ }
30
+ }
31
+ if (meta.type === 'String' && typeof value === 'string') {
32
+ if (meta.minLength !== undefined && value.length < meta.minLength) {
33
+ errors.push({ field: fieldName, message: `Field '${fieldName}' must have at least ${meta.minLength} characters, got ${value.length}`, value });
34
+ }
35
+ if (meta.maxLength !== undefined && value.length > meta.maxLength) {
36
+ errors.push({ field: fieldName, message: `Field '${fieldName}' must have at most ${meta.maxLength} characters, got ${value.length}`, value });
37
+ }
38
+ if (meta.enum !== undefined && !meta.enum.includes(value)) {
39
+ errors.push({ field: fieldName, message: `Field '${fieldName}' must be one of: ${meta.enum.join(', ')}. Got '${value}'`, value });
40
+ }
41
+ if (meta.pattern !== undefined) {
42
+ const regex = new RegExp(meta.pattern);
43
+ if (!regex.test(value)) {
44
+ errors.push({ field: fieldName, message: `Field '${fieldName}' must match pattern: ${meta.pattern}. Got '${value}'`, value });
45
+ }
46
+ }
47
+ }
48
+ }
49
+ return { valid: errors.length === 0, errors };
50
+ }
51
+ function validateOrThrow(object) {
52
+ const result = validateObject(object);
53
+ if (!result.valid) {
54
+ const messages = result.errors.map(e => e.message).join('; ');
55
+ throw new Parse.Error(Parse.Error.VALIDATION_ERROR, messages);
56
+ }
57
+ }
58
+ function buildValidator(className) {
59
+ const classConstructor = Parse.Object.extend(className);
60
+ const fields = Reflect.getMetadata('parse:fields', classConstructor) || {};
61
+ const properties = {};
62
+ let hasValidation = false;
63
+ for (const [fieldName, meta] of Object.entries(fields)) {
64
+ if (meta.type === 'Number' && (meta.min !== undefined || meta.max !== undefined)) {
65
+ hasValidation = true;
66
+ properties[fieldName] = {
67
+ bsonType: ['int', 'long', 'double', 'decimal', 'null'],
68
+ ...(meta.min !== undefined && { minimum: meta.min }),
69
+ ...(meta.max !== undefined && { maximum: meta.max }),
70
+ };
71
+ }
72
+ if (meta.type === 'String' && (meta.minLength !== undefined || meta.maxLength !== undefined || meta.enum !== undefined || meta.pattern !== undefined)) {
73
+ hasValidation = true;
74
+ properties[fieldName] = {
75
+ bsonType: ['string', 'null'],
76
+ ...(meta.minLength !== undefined && { minLength: meta.minLength }),
77
+ ...(meta.maxLength !== undefined && { maxLength: meta.maxLength }),
78
+ ...(meta.enum !== undefined && { enum: [...meta.enum, null] }),
79
+ ...(meta.pattern !== undefined && { pattern: meta.pattern }),
80
+ };
81
+ }
82
+ }
83
+ if (!hasValidation)
84
+ return null;
85
+ return { $jsonSchema: { bsonType: 'object', properties } };
86
+ }
87
+ function getValidators() {
88
+ const validators = [];
89
+ for (const className of schemaTypes_1.classNames) {
90
+ const validator = buildValidator(className);
91
+ if (validator)
92
+ validators.push({ className, validator });
93
+ }
94
+ return validators;
95
+ }
96
+ async function applyMongoValidators(parseServerInstance) {
97
+ const validators = getValidators();
98
+ if (validators.length === 0) {
99
+ console.log('[Validators] No MongoDB validators to apply');
100
+ return;
101
+ }
102
+ console.log(`[Validators] Applying ${validators.length} MongoDB validator(s)...`);
103
+ try {
104
+ const config = parseServerInstance?.config;
105
+ const adapter = config?.databaseController?.adapter || config?.database?.adapter;
106
+ const db = adapter?.database || adapter?.client?.db() || adapter?.mongoClient?.db();
107
+ if (!db) {
108
+ console.warn('[Validators] Could not access database adapter.');
109
+ return;
110
+ }
111
+ for (const { className, validator } of validators) {
112
+ const [validatorErr] = await (0, helper_1.catchError)(db.command({
113
+ collMod: className,
114
+ validator: validator,
115
+ validationLevel: 'moderate',
116
+ validationAction: 'error',
117
+ }));
118
+ if (validatorErr) {
119
+ if (validatorErr.codeName === 'NamespaceNotFound') {
120
+ console.log(`[Validators] Collection ${className} doesn't exist yet`);
121
+ }
122
+ else {
123
+ console.error(`[Validators] Failed for ${className}:`, validatorErr.message);
124
+ }
125
+ }
126
+ else {
127
+ console.log(`[Validators] Applied validator for: ${className}`);
128
+ }
129
+ }
130
+ }
131
+ catch (error) {
132
+ console.error('[Validators] Error:', error.message);
133
+ }
134
+ }
135
+ //# sourceMappingURL=fieldValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldValidation.js","sourceRoot":"","sources":["../../../src/decorators/types/fieldValidation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { ClassNameType } from './schemaTypes';
2
+ export type TriggerType = 'beforeSave' | 'afterSave' | 'beforeDelete' | 'afterDelete' | 'beforeFind' | 'afterFind' | 'beforeLogin' | 'afterLogin' | 'afterLogout' | 'beforeSaveFile' | 'afterSaveFile' | 'beforeDeleteFile' | 'afterDeleteFile' | 'beforeConnect' | 'beforeSubscribe' | 'afterEvent';
3
+ export interface TriggerMetadata {
4
+ type: TriggerType;
5
+ className: ClassNameType;
6
+ handler: Function;
7
+ description?: string;
8
+ validation?: Parse.Cloud.Validator;
9
+ }
10
+ export interface TriggerConfig {
11
+ description?: string;
12
+ validation?: Parse.Cloud.Validator;
13
+ }
14
+ //# sourceMappingURL=triggerTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggerTypes.d.ts","sourceRoot":"","sources":["../../../src/decorators/types/triggerTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAE5C,MAAM,MAAM,WAAW,GACnB,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,GAC3D,YAAY,GAAG,WAAW,GAC1B,aAAa,GAAG,YAAY,GAAG,aAAa,GAC5C,gBAAgB,GAAG,eAAe,GAAG,kBAAkB,GAAG,iBAAiB,GAC3E,eAAe,GAAG,iBAAiB,GAAG,YAAY,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,QAAQ,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;CACpC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=triggerTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggerTypes.js","sourceRoot":"","sources":["../../../src/decorators/types/triggerTypes.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,27 @@
1
- export { ParseClass, ParseField, getSchemaDefinition, onClassRegistered, onFieldRegistered, } from './decorators/parseDecorators';
2
- export type { ParseClassOptions, ParseFieldOptions, AllowedFieldType, } from './decorators/parseDecorators';
3
- export { classNames, } from './decorators/types/schemaTypes';
4
- export type { ClassNameType, CLPParamsOption, classLevelPermissions, ClassAclTemplate, AclTemplatePermissions, ProtectedFields, CompoundIndex, Fields, Indexes, SchemaDefinition, } from './decorators/types/schemaTypes';
1
+ export { ParseClass, ParseField, getSchemaDefinition, onClassRegistered, onFieldRegistered } from './decorators/parseDecorators';
2
+ export type { ParseClassOptions, ParseFieldOptions, AllowedFieldType } from './decorators/parseDecorators';
3
+ export { CloudFunction, ProtectedCloudFunction, onFunctionRegistered } from './decorators/cloudDecorator';
4
+ export { CloudFunctionRegistry } from './decorators/cloudRegistry';
5
+ export { BeforeSave, AfterSave, BeforeDelete, AfterDelete, BeforeFind, AfterFind, BeforeLogin, AfterLogin, AfterLogout, BeforeSaveFile, AfterSaveFile, BeforeDeleteFile, AfterDeleteFile, BeforeConnect, BeforeSubscribe, AfterEvent } from './decorators/triggerDecorator';
6
+ export { TriggerRegistry } from './decorators/triggerRegistry';
7
+ export { Cron, CronSchedule, CronRegistry } from './decorators/cronDecorator';
8
+ export { Route, RouteRegistry } from './decorators/routeDecorator';
9
+ export { classNames } from './decorators/types/schemaTypes';
10
+ export type { ClassNameType, CLPParamsOption, classLevelPermissions, ClassAclTemplate, AclTemplatePermissions, ProtectedFields, CompoundIndex, Fields, Indexes, SchemaDefinition } from './decorators/types/schemaTypes';
11
+ export type { HttpMethod, RouteConfig, CloudFunctionMetadata, SwaggerDocConfig } from './decorators/types/cloudTypes';
12
+ export type { TriggerType, TriggerMetadata, TriggerConfig } from './decorators/types/triggerTypes';
13
+ export type { CronJobMetadata, CronConfig } from './decorators/types/cronTypes';
14
+ export type { AuthRole, MultiLangs, Filter } from './decorators/types/common';
15
+ export { validateObject, validateOrThrow, getValidators, applyMongoValidators } from './decorators/types/fieldValidation';
5
16
  export { BaseModel } from './models/BaseModel';
17
+ export { implementACL } from './utils/ACL';
18
+ export { UserRoles, roleKey, MAX_QUERY_LIMIT } from './utils/constants';
19
+ export type { RoleString } from './utils/constants';
20
+ export { catchError, getUserRoles, getUsersRoles, formatCount, generateRandomPassword, generateRandomInteger, generateRandomString, sleep } from './utils/helper';
21
+ export { importFiles } from './utils/dynamicImport';
22
+ export { validateFunctionRoutes, validateEntityRoutes, restrictRoutes, removeResultMiddleware, conditionalJsonMiddleware } from './middleware/middleware';
23
+ export { SwaggerRegistry } from './swagger/swaggerRegistry';
24
+ export type { SwaggerModelSchema, SwaggerPropertySchema, SwaggerFunctionSchema } from './swagger/swaggerRegistry';
25
+ export { generateSwaggerSpec, getSwaggerJson } from './swagger/swaggerSpec';
26
+ export { setupSwagger } from './swagger/index';
6
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,UAAU,GACX,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,aAAa,EACb,MAAM,EACN,OAAO,EACP,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjI,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE3G,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC1G,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAC9E,WAAW,EAAE,UAAU,EAAE,WAAW,EACpC,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAChE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EACnF,sBAAsB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAEpI,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtH,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACnG,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAChF,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAG9E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAG1H,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACxE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAC3D,sBAAsB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,cAAc,EACnE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGrF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -1,19 +1,91 @@
1
1
  "use strict";
2
- // @90soft/parse-server-kit v1.0.0
3
- // Decorators + BaseModel + Schema Types
2
+ // @90soft/parse-server-kit — complete toolkit for Parse Server
4
3
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.BaseModel = exports.classNames = exports.onFieldRegistered = exports.onClassRegistered = exports.getSchemaDefinition = exports.ParseField = exports.ParseClass = void 0;
6
- // Decorators
4
+ exports.importFiles = exports.sleep = exports.generateRandomString = exports.generateRandomInteger = exports.generateRandomPassword = exports.formatCount = exports.getUsersRoles = exports.getUserRoles = exports.catchError = exports.MAX_QUERY_LIMIT = exports.roleKey = exports.UserRoles = exports.implementACL = exports.BaseModel = exports.applyMongoValidators = exports.getValidators = exports.validateOrThrow = exports.validateObject = exports.classNames = exports.RouteRegistry = exports.Route = exports.CronRegistry = exports.CronSchedule = exports.Cron = exports.TriggerRegistry = exports.AfterEvent = exports.BeforeSubscribe = exports.BeforeConnect = exports.AfterDeleteFile = exports.BeforeDeleteFile = exports.AfterSaveFile = exports.BeforeSaveFile = exports.AfterLogout = exports.AfterLogin = exports.BeforeLogin = exports.AfterFind = exports.BeforeFind = exports.AfterDelete = exports.BeforeDelete = exports.AfterSave = exports.BeforeSave = exports.CloudFunctionRegistry = exports.onFunctionRegistered = exports.ProtectedCloudFunction = exports.CloudFunction = exports.onFieldRegistered = exports.onClassRegistered = exports.getSchemaDefinition = exports.ParseField = exports.ParseClass = void 0;
5
+ exports.setupSwagger = exports.getSwaggerJson = exports.generateSwaggerSpec = exports.SwaggerRegistry = exports.conditionalJsonMiddleware = exports.removeResultMiddleware = exports.restrictRoutes = exports.validateEntityRoutes = exports.validateFunctionRoutes = void 0;
6
+ // ── Decorators ──
7
7
  var parseDecorators_1 = require("./decorators/parseDecorators");
8
8
  Object.defineProperty(exports, "ParseClass", { enumerable: true, get: function () { return parseDecorators_1.ParseClass; } });
9
9
  Object.defineProperty(exports, "ParseField", { enumerable: true, get: function () { return parseDecorators_1.ParseField; } });
10
10
  Object.defineProperty(exports, "getSchemaDefinition", { enumerable: true, get: function () { return parseDecorators_1.getSchemaDefinition; } });
11
11
  Object.defineProperty(exports, "onClassRegistered", { enumerable: true, get: function () { return parseDecorators_1.onClassRegistered; } });
12
12
  Object.defineProperty(exports, "onFieldRegistered", { enumerable: true, get: function () { return parseDecorators_1.onFieldRegistered; } });
13
- // Schema Types
13
+ var cloudDecorator_1 = require("./decorators/cloudDecorator");
14
+ Object.defineProperty(exports, "CloudFunction", { enumerable: true, get: function () { return cloudDecorator_1.CloudFunction; } });
15
+ Object.defineProperty(exports, "ProtectedCloudFunction", { enumerable: true, get: function () { return cloudDecorator_1.ProtectedCloudFunction; } });
16
+ Object.defineProperty(exports, "onFunctionRegistered", { enumerable: true, get: function () { return cloudDecorator_1.onFunctionRegistered; } });
17
+ var cloudRegistry_1 = require("./decorators/cloudRegistry");
18
+ Object.defineProperty(exports, "CloudFunctionRegistry", { enumerable: true, get: function () { return cloudRegistry_1.CloudFunctionRegistry; } });
19
+ var triggerDecorator_1 = require("./decorators/triggerDecorator");
20
+ Object.defineProperty(exports, "BeforeSave", { enumerable: true, get: function () { return triggerDecorator_1.BeforeSave; } });
21
+ Object.defineProperty(exports, "AfterSave", { enumerable: true, get: function () { return triggerDecorator_1.AfterSave; } });
22
+ Object.defineProperty(exports, "BeforeDelete", { enumerable: true, get: function () { return triggerDecorator_1.BeforeDelete; } });
23
+ Object.defineProperty(exports, "AfterDelete", { enumerable: true, get: function () { return triggerDecorator_1.AfterDelete; } });
24
+ Object.defineProperty(exports, "BeforeFind", { enumerable: true, get: function () { return triggerDecorator_1.BeforeFind; } });
25
+ Object.defineProperty(exports, "AfterFind", { enumerable: true, get: function () { return triggerDecorator_1.AfterFind; } });
26
+ Object.defineProperty(exports, "BeforeLogin", { enumerable: true, get: function () { return triggerDecorator_1.BeforeLogin; } });
27
+ Object.defineProperty(exports, "AfterLogin", { enumerable: true, get: function () { return triggerDecorator_1.AfterLogin; } });
28
+ Object.defineProperty(exports, "AfterLogout", { enumerable: true, get: function () { return triggerDecorator_1.AfterLogout; } });
29
+ Object.defineProperty(exports, "BeforeSaveFile", { enumerable: true, get: function () { return triggerDecorator_1.BeforeSaveFile; } });
30
+ Object.defineProperty(exports, "AfterSaveFile", { enumerable: true, get: function () { return triggerDecorator_1.AfterSaveFile; } });
31
+ Object.defineProperty(exports, "BeforeDeleteFile", { enumerable: true, get: function () { return triggerDecorator_1.BeforeDeleteFile; } });
32
+ Object.defineProperty(exports, "AfterDeleteFile", { enumerable: true, get: function () { return triggerDecorator_1.AfterDeleteFile; } });
33
+ Object.defineProperty(exports, "BeforeConnect", { enumerable: true, get: function () { return triggerDecorator_1.BeforeConnect; } });
34
+ Object.defineProperty(exports, "BeforeSubscribe", { enumerable: true, get: function () { return triggerDecorator_1.BeforeSubscribe; } });
35
+ Object.defineProperty(exports, "AfterEvent", { enumerable: true, get: function () { return triggerDecorator_1.AfterEvent; } });
36
+ var triggerRegistry_1 = require("./decorators/triggerRegistry");
37
+ Object.defineProperty(exports, "TriggerRegistry", { enumerable: true, get: function () { return triggerRegistry_1.TriggerRegistry; } });
38
+ var cronDecorator_1 = require("./decorators/cronDecorator");
39
+ Object.defineProperty(exports, "Cron", { enumerable: true, get: function () { return cronDecorator_1.Cron; } });
40
+ Object.defineProperty(exports, "CronSchedule", { enumerable: true, get: function () { return cronDecorator_1.CronSchedule; } });
41
+ Object.defineProperty(exports, "CronRegistry", { enumerable: true, get: function () { return cronDecorator_1.CronRegistry; } });
42
+ var routeDecorator_1 = require("./decorators/routeDecorator");
43
+ Object.defineProperty(exports, "Route", { enumerable: true, get: function () { return routeDecorator_1.Route; } });
44
+ Object.defineProperty(exports, "RouteRegistry", { enumerable: true, get: function () { return routeDecorator_1.RouteRegistry; } });
45
+ // ── Types ──
14
46
  var schemaTypes_1 = require("./decorators/types/schemaTypes");
15
47
  Object.defineProperty(exports, "classNames", { enumerable: true, get: function () { return schemaTypes_1.classNames; } });
16
- // Base Model
48
+ // ── Validation ──
49
+ var fieldValidation_1 = require("./decorators/types/fieldValidation");
50
+ Object.defineProperty(exports, "validateObject", { enumerable: true, get: function () { return fieldValidation_1.validateObject; } });
51
+ Object.defineProperty(exports, "validateOrThrow", { enumerable: true, get: function () { return fieldValidation_1.validateOrThrow; } });
52
+ Object.defineProperty(exports, "getValidators", { enumerable: true, get: function () { return fieldValidation_1.getValidators; } });
53
+ Object.defineProperty(exports, "applyMongoValidators", { enumerable: true, get: function () { return fieldValidation_1.applyMongoValidators; } });
54
+ // ── Models ──
17
55
  var BaseModel_1 = require("./models/BaseModel");
18
56
  Object.defineProperty(exports, "BaseModel", { enumerable: true, get: function () { return BaseModel_1.BaseModel; } });
57
+ // ── ACL & Permissions ──
58
+ var ACL_1 = require("./utils/ACL");
59
+ Object.defineProperty(exports, "implementACL", { enumerable: true, get: function () { return ACL_1.implementACL; } });
60
+ var constants_1 = require("./utils/constants");
61
+ Object.defineProperty(exports, "UserRoles", { enumerable: true, get: function () { return constants_1.UserRoles; } });
62
+ Object.defineProperty(exports, "roleKey", { enumerable: true, get: function () { return constants_1.roleKey; } });
63
+ Object.defineProperty(exports, "MAX_QUERY_LIMIT", { enumerable: true, get: function () { return constants_1.MAX_QUERY_LIMIT; } });
64
+ // ── Utilities ──
65
+ var helper_1 = require("./utils/helper");
66
+ Object.defineProperty(exports, "catchError", { enumerable: true, get: function () { return helper_1.catchError; } });
67
+ Object.defineProperty(exports, "getUserRoles", { enumerable: true, get: function () { return helper_1.getUserRoles; } });
68
+ Object.defineProperty(exports, "getUsersRoles", { enumerable: true, get: function () { return helper_1.getUsersRoles; } });
69
+ Object.defineProperty(exports, "formatCount", { enumerable: true, get: function () { return helper_1.formatCount; } });
70
+ Object.defineProperty(exports, "generateRandomPassword", { enumerable: true, get: function () { return helper_1.generateRandomPassword; } });
71
+ Object.defineProperty(exports, "generateRandomInteger", { enumerable: true, get: function () { return helper_1.generateRandomInteger; } });
72
+ Object.defineProperty(exports, "generateRandomString", { enumerable: true, get: function () { return helper_1.generateRandomString; } });
73
+ Object.defineProperty(exports, "sleep", { enumerable: true, get: function () { return helper_1.sleep; } });
74
+ var dynamicImport_1 = require("./utils/dynamicImport");
75
+ Object.defineProperty(exports, "importFiles", { enumerable: true, get: function () { return dynamicImport_1.importFiles; } });
76
+ // ── Middleware ──
77
+ var middleware_1 = require("./middleware/middleware");
78
+ Object.defineProperty(exports, "validateFunctionRoutes", { enumerable: true, get: function () { return middleware_1.validateFunctionRoutes; } });
79
+ Object.defineProperty(exports, "validateEntityRoutes", { enumerable: true, get: function () { return middleware_1.validateEntityRoutes; } });
80
+ Object.defineProperty(exports, "restrictRoutes", { enumerable: true, get: function () { return middleware_1.restrictRoutes; } });
81
+ Object.defineProperty(exports, "removeResultMiddleware", { enumerable: true, get: function () { return middleware_1.removeResultMiddleware; } });
82
+ Object.defineProperty(exports, "conditionalJsonMiddleware", { enumerable: true, get: function () { return middleware_1.conditionalJsonMiddleware; } });
83
+ // ── Swagger ──
84
+ var swaggerRegistry_1 = require("./swagger/swaggerRegistry");
85
+ Object.defineProperty(exports, "SwaggerRegistry", { enumerable: true, get: function () { return swaggerRegistry_1.SwaggerRegistry; } });
86
+ var swaggerSpec_1 = require("./swagger/swaggerSpec");
87
+ Object.defineProperty(exports, "generateSwaggerSpec", { enumerable: true, get: function () { return swaggerSpec_1.generateSwaggerSpec; } });
88
+ Object.defineProperty(exports, "getSwaggerJson", { enumerable: true, get: function () { return swaggerSpec_1.getSwaggerJson; } });
89
+ var index_1 = require("./swagger/index");
90
+ Object.defineProperty(exports, "setupSwagger", { enumerable: true, get: function () { return index_1.setupSwagger; } });
19
91
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,kCAAkC;AAClC,wCAAwC;;;AAExC,aAAa;AACb,gEAMsC;AALpC,6GAAA,UAAU,OAAA;AACV,6GAAA,UAAU,OAAA;AACV,sHAAA,mBAAmB,OAAA;AACnB,oHAAA,iBAAiB,OAAA;AACjB,oHAAA,iBAAiB,OAAA;AAQnB,eAAe;AACf,8DAEwC;AADtC,yGAAA,UAAU,OAAA;AAeZ,aAAa;AACb,gDAA+C;AAAtC,sGAAA,SAAS,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;;;;AAE/D,mBAAmB;AACnB,gEAAiI;AAAxH,6GAAA,UAAU,OAAA;AAAE,6GAAA,UAAU,OAAA;AAAE,sHAAA,mBAAmB,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAG1F,8DAA0G;AAAjG,+GAAA,aAAa,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAAE,sHAAA,oBAAoB,OAAA;AACpE,4DAAmE;AAA1D,sHAAA,qBAAqB,OAAA;AAE9B,kEAGoF;AAH3E,8GAAA,UAAU,OAAA;AAAE,6GAAA,SAAS,OAAA;AAAE,gHAAA,YAAY,OAAA;AAAE,+GAAA,WAAW,OAAA;AAAE,8GAAA,UAAU,OAAA;AAAE,6GAAA,SAAS,OAAA;AAC9E,+GAAA,WAAW,OAAA;AAAE,8GAAA,UAAU,OAAA;AAAE,+GAAA,WAAW,OAAA;AACpC,kHAAA,cAAc,OAAA;AAAE,iHAAA,aAAa,OAAA;AAAE,oHAAA,gBAAgB,OAAA;AAAE,mHAAA,eAAe,OAAA;AAChE,iHAAA,aAAa,OAAA;AAAE,mHAAA,eAAe,OAAA;AAAE,8GAAA,UAAU,OAAA;AAC5C,gEAA+D;AAAtD,kHAAA,eAAe,OAAA;AAExB,4DAA8E;AAArE,qGAAA,IAAI,OAAA;AAAE,6GAAA,YAAY,OAAA;AAAE,6GAAA,YAAY,OAAA;AAEzC,8DAAmE;AAA1D,uGAAA,KAAK,OAAA;AAAE,+GAAA,aAAa,OAAA;AAE7B,cAAc;AACd,8DAA4D;AAAnD,yGAAA,UAAU,OAAA;AASnB,mBAAmB;AACnB,sEAA0H;AAAjH,iHAAA,cAAc,OAAA;AAAE,kHAAA,eAAe,OAAA;AAAE,gHAAA,aAAa,OAAA;AAAE,uHAAA,oBAAoB,OAAA;AAE7E,eAAe;AACf,gDAA+C;AAAtC,sGAAA,SAAS,OAAA;AAElB,0BAA0B;AAC1B,mCAA2C;AAAlC,mGAAA,YAAY,OAAA;AACrB,+CAAwE;AAA/D,sGAAA,SAAS,OAAA;AAAE,oGAAA,OAAO,OAAA;AAAE,4GAAA,eAAe,OAAA;AAG5C,kBAAkB;AAClB,yCACqG;AAD5F,oGAAA,UAAU,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,qGAAA,WAAW,OAAA;AAC3D,gHAAA,sBAAsB,OAAA;AAAE,+GAAA,qBAAqB,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAAE,+FAAA,KAAK,OAAA;AAC5E,uDAAoD;AAA3C,4GAAA,WAAW,OAAA;AAEpB,mBAAmB;AACnB,sDACqF;AAD5E,oHAAA,sBAAsB,OAAA;AAAE,kHAAA,oBAAoB,OAAA;AAAE,4GAAA,cAAc,OAAA;AACnE,oHAAA,sBAAsB,OAAA;AAAE,uHAAA,yBAAyB,OAAA;AAEnD,gBAAgB;AAChB,6DAA4D;AAAnD,kHAAA,eAAe,OAAA;AAExB,qDAA4E;AAAnE,kHAAA,mBAAmB,OAAA;AAAE,6GAAA,cAAc,OAAA;AAC5C,yCAA+C;AAAtC,qGAAA,YAAY,OAAA"}
@@ -0,0 +1,41 @@
1
+ import express, { NextFunction, Request, Response } from 'express';
2
+ /**
3
+ * Validates legacy /functions/* routes.
4
+ * Skips if already handled by validateEntityRoutes.
5
+ */
6
+ export declare function validateFunctionRoutes(req: Request, res: Response, next: NextFunction): void | express.Response<any, Record<string, any>>;
7
+ /**
8
+ * Validates entity-based routes: /api/{entity}/{action}
9
+ * Resolves to a cloud function name and rewrites the URL for Parse Server.
10
+ *
11
+ * Flow:
12
+ * 1. Skip CORS preflight (OPTIONS)
13
+ * 2. Skip non-entity routes (pass to next middleware)
14
+ * 3. Resolve route → cloud function name
15
+ * 4. Validate HTTP method
16
+ * 5. Rewrite URL to /functions/{name} with query string preserved
17
+ * 6. Merge GET query params into body (Parse reads from body)
18
+ * 7. Convert to POST for Parse Server
19
+ */
20
+ export declare function validateEntityRoutes(req: Request, res: Response, next: NextFunction): void | express.Response<any, Record<string, any>>;
21
+ /**
22
+ * Extracts master key from the request body during JSON parsing.
23
+ * Used as the `verify` callback in express.json().
24
+ */
25
+ export declare function extractMasterKey(req: any, res: Response, buf: Buffer, encoding: BufferEncoding): void;
26
+ /**
27
+ * Restricts access to internal Parse Server endpoints.
28
+ * Only entity routes, system routes, and rewritten /functions routes pass through.
29
+ * Direct /classes, /schemas, /batch access is blocked.
30
+ */
31
+ export declare function restrictRoutes(req: any, res: Response, next: NextFunction): void | express.Response<any, Record<string, any>>;
32
+ /**
33
+ * Conditionally applies JSON parsing middleware, skipping file upload routes.
34
+ */
35
+ export declare function conditionalJsonMiddleware(req: Request, res: Response, next: NextFunction): void;
36
+ /**
37
+ * Removes the {result: ...} wrapper from Parse Server cloud function responses.
38
+ * Applies to entity routes and rewritten /functions routes.
39
+ */
40
+ export declare function removeResultMiddleware(req: any, res: any, next: any): any;
41
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAKjE;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,qDAoBnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,qDA0CnB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,QAUzB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,qDAwBzE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,QAWnB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,OAmBnE"}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.validateFunctionRoutes = validateFunctionRoutes;
7
+ exports.validateEntityRoutes = validateEntityRoutes;
8
+ exports.extractMasterKey = extractMasterKey;
9
+ exports.restrictRoutes = restrictRoutes;
10
+ exports.conditionalJsonMiddleware = conditionalJsonMiddleware;
11
+ exports.removeResultMiddleware = removeResultMiddleware;
12
+ const express_1 = __importDefault(require("express"));
13
+ const cloudRegistry_1 = require("../decorators/cloudRegistry");
14
+ const routeDecorator_1 = require("../decorators/routeDecorator");
15
+ /**
16
+ * Validates legacy /functions/* routes.
17
+ * Skips if already handled by validateEntityRoutes.
18
+ */
19
+ function validateFunctionRoutes(req, res, next) {
20
+ // Skip if already handled by entity route middleware
21
+ if (req._entityRouteHandled) {
22
+ return next();
23
+ }
24
+ const functionName = req.path.split('/')[1];
25
+ const metadata = cloudRegistry_1.CloudFunctionRegistry.getFunction(functionName);
26
+ if (!metadata) {
27
+ return res.status(404).json({ message: 'Function not found' });
28
+ }
29
+ if (!metadata.config.methods.includes(req.method)) {
30
+ return res.status(405).json({ message: 'Method not allowed' });
31
+ }
32
+ req.method = 'POST';
33
+ return next();
34
+ }
35
+ /**
36
+ * Validates entity-based routes: /api/{entity}/{action}
37
+ * Resolves to a cloud function name and rewrites the URL for Parse Server.
38
+ *
39
+ * Flow:
40
+ * 1. Skip CORS preflight (OPTIONS)
41
+ * 2. Skip non-entity routes (pass to next middleware)
42
+ * 3. Resolve route → cloud function name
43
+ * 4. Validate HTTP method
44
+ * 5. Rewrite URL to /functions/{name} with query string preserved
45
+ * 6. Merge GET query params into body (Parse reads from body)
46
+ * 7. Convert to POST for Parse Server
47
+ */
48
+ function validateEntityRoutes(req, res, next) {
49
+ const routePath = req.path;
50
+ // Skip CORS preflight — let cors() middleware handle them
51
+ if (req.method === 'OPTIONS') {
52
+ return next();
53
+ }
54
+ // Only handle requests that match a registered entity prefix
55
+ if (!routeDecorator_1.RouteRegistry.isRegisteredPrefix(routePath)) {
56
+ return next();
57
+ }
58
+ const functionName = routeDecorator_1.RouteRegistry.resolve(routePath);
59
+ if (!functionName) {
60
+ return res.status(404).json({ message: 'Route not found' });
61
+ }
62
+ const metadata = cloudRegistry_1.CloudFunctionRegistry.getFunction(functionName);
63
+ if (!metadata) {
64
+ return res.status(404).json({ message: 'Function not found' });
65
+ }
66
+ if (!metadata.config.methods.includes(req.method)) {
67
+ return res.status(405).json({ message: 'Method not allowed' });
68
+ }
69
+ // Rewrite URL to /functions/{functionName} so Parse Server handles it
70
+ // Preserve query string for GET requests
71
+ const queryString = req.originalUrl.split('?')[1];
72
+ req.url = `/functions/${functionName}${queryString ? '?' + queryString : ''}`;
73
+ // Merge GET query params into body — Parse Server reads params from body
74
+ if (req.method === 'GET' && req.query && Object.keys(req.query).length > 0) {
75
+ req.body = { ...req.body, ...req.query };
76
+ }
77
+ req.method = 'POST';
78
+ req._entityRouteHandled = true;
79
+ return next();
80
+ }
81
+ /**
82
+ * Extracts master key from the request body during JSON parsing.
83
+ * Used as the `verify` callback in express.json().
84
+ */
85
+ function extractMasterKey(req, res, buf, encoding) {
86
+ try {
87
+ const body = JSON.parse(buf.toString(encoding));
88
+ if (body && (body.masterKey || body._MasterKey)) {
89
+ req['x-master-key'] = body.masterKey || body._MasterKey;
90
+ }
91
+ }
92
+ catch (err) {
93
+ throw res.status(400).json({ message: 'Error parsing JSON body' });
94
+ }
95
+ }
96
+ /**
97
+ * Restricts access to internal Parse Server endpoints.
98
+ * Only entity routes, system routes, and rewritten /functions routes pass through.
99
+ * Direct /classes, /schemas, /batch access is blocked.
100
+ */
101
+ function restrictRoutes(req, res, next) {
102
+ const systemRoutes = ['/health', '/serverInfo', '/files'];
103
+ // Master key bypasses all restrictions
104
+ if (req['x-master-key'] === process.env.masterKey) {
105
+ return next();
106
+ }
107
+ // Allow system routes
108
+ if (systemRoutes.some(route => req.path.startsWith(route))) {
109
+ return next();
110
+ }
111
+ // Allow registered entity route prefixes
112
+ if (routeDecorator_1.RouteRegistry.isRegisteredPrefix(req.path)) {
113
+ return next();
114
+ }
115
+ // Allow /functions for internal use (rewritten by validateEntityRoutes)
116
+ if (req.path.startsWith('/functions')) {
117
+ return next();
118
+ }
119
+ return res.status(403).json({ message: 'Route not allowed' });
120
+ }
121
+ /**
122
+ * Conditionally applies JSON parsing middleware, skipping file upload routes.
123
+ */
124
+ function conditionalJsonMiddleware(req, res, next) {
125
+ if (req.path.startsWith(`${process.env.mountPath}/files`)) {
126
+ return next();
127
+ }
128
+ express_1.default.json({
129
+ limit: '10mb',
130
+ type: ['text/plain'],
131
+ verify: extractMasterKey,
132
+ })(req, res, next);
133
+ }
134
+ /**
135
+ * Removes the {result: ...} wrapper from Parse Server cloud function responses.
136
+ * Applies to entity routes and rewritten /functions routes.
137
+ */
138
+ function removeResultMiddleware(req, res, next) {
139
+ const mountPath = process.env.mountPath || '/api';
140
+ const pathAfterMount = req.path.replace(mountPath, '');
141
+ const isEntityRoute = routeDecorator_1.RouteRegistry.isRegisteredPrefix(pathAfterMount);
142
+ const isFunctionRoute = req.path.includes('/functions');
143
+ if (!isEntityRoute && !isFunctionRoute)
144
+ return next();
145
+ const originalJson = res.json.bind(res);
146
+ res.json = (body) => {
147
+ if (body && typeof body === 'object' && 'result' in body) {
148
+ return originalJson(body.result);
149
+ }
150
+ return originalJson(body);
151
+ };
152
+ next();
153
+ }
154
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Express } from 'express';
2
+ import { SwaggerConfig } from './swaggerSpec';
3
+ export { SwaggerRegistry } from './swaggerRegistry';
4
+ export { generateSwaggerSpec, getSwaggerJson } from './swaggerSpec';
5
+ /**
6
+ * Setup Swagger UI for the Express app
7
+ */
8
+ export declare function setupSwagger(app: Express, config: SwaggerConfig, path?: string): void;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/swagger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAsB,aAAa,EAAC,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,mBAAmB,EAAE,cAAc,EAAC,MAAM,eAAe,CAAC;AAElE;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,EACrB,IAAI,GAAE,MAAoB,QA0B3B"}