@90soft/parse-server-kit 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/decorators/cloudDecorator.d.ts +7 -0
- package/dist/decorators/cloudDecorator.d.ts.map +1 -0
- package/dist/decorators/cloudDecorator.js +77 -0
- package/dist/decorators/cloudDecorator.js.map +1 -0
- package/dist/decorators/cloudRegistry.d.ts +9 -0
- package/dist/decorators/cloudRegistry.d.ts.map +1 -0
- package/dist/decorators/cloudRegistry.js +26 -0
- package/dist/decorators/cloudRegistry.js.map +1 -0
- package/dist/decorators/cronDecorator.d.ts +6 -0
- package/dist/decorators/cronDecorator.d.ts.map +1 -0
- package/dist/decorators/cronDecorator.js +28 -0
- package/dist/decorators/cronDecorator.js.map +1 -0
- package/dist/decorators/cronRegistry.d.ts +13 -0
- package/dist/decorators/cronRegistry.d.ts.map +1 -0
- package/dist/decorators/cronRegistry.js +96 -0
- package/dist/decorators/cronRegistry.js.map +1 -0
- package/dist/decorators/routeDecorator.d.ts +35 -0
- package/dist/decorators/routeDecorator.d.ts.map +1 -0
- package/dist/decorators/routeDecorator.js +160 -0
- package/dist/decorators/routeDecorator.js.map +1 -0
- package/dist/decorators/triggerDecorator.d.ts +19 -0
- package/dist/decorators/triggerDecorator.d.ts.map +1 -0
- package/dist/decorators/triggerDecorator.js +45 -0
- package/dist/decorators/triggerDecorator.js.map +1 -0
- package/dist/decorators/triggerRegistry.d.ts +10 -0
- package/dist/decorators/triggerRegistry.d.ts.map +1 -0
- package/dist/decorators/triggerRegistry.js +87 -0
- package/dist/decorators/triggerRegistry.js.map +1 -0
- package/dist/decorators/types/cloudTypes.d.ts +32 -0
- package/dist/decorators/types/cloudTypes.d.ts.map +1 -0
- package/dist/decorators/types/cloudTypes.js +3 -0
- package/dist/decorators/types/cloudTypes.js.map +1 -0
- package/dist/decorators/types/common.d.ts +14 -0
- package/dist/decorators/types/common.d.ts.map +1 -0
- package/dist/decorators/types/common.js +3 -0
- package/dist/decorators/types/common.js.map +1 -0
- package/dist/decorators/types/cronTypes.d.ts +32 -0
- package/dist/decorators/types/cronTypes.d.ts.map +1 -0
- package/dist/decorators/types/cronTypes.js +21 -0
- package/dist/decorators/types/cronTypes.js.map +1 -0
- package/dist/decorators/types/fieldValidation.d.ts +36 -0
- package/dist/decorators/types/fieldValidation.d.ts.map +1 -0
- package/dist/decorators/types/fieldValidation.js +135 -0
- package/dist/decorators/types/fieldValidation.js.map +1 -0
- package/dist/decorators/types/triggerTypes.d.ts +14 -0
- package/dist/decorators/types/triggerTypes.d.ts.map +1 -0
- package/dist/decorators/types/triggerTypes.js +3 -0
- package/dist/decorators/types/triggerTypes.js.map +1 -0
- package/dist/index.d.ts +25 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +78 -6
- package/dist/index.js.map +1 -1
- package/dist/middleware/middleware.d.ts +36 -0
- package/dist/middleware/middleware.d.ts.map +1 -0
- package/dist/middleware/middleware.js +133 -0
- package/dist/middleware/middleware.js.map +1 -0
- package/dist/swagger/index.d.ts +9 -0
- package/dist/swagger/index.d.ts.map +1 -0
- package/dist/swagger/index.js +37 -0
- package/dist/swagger/index.js.map +1 -0
- package/dist/swagger/swaggerRegistry.d.ts +79 -0
- package/dist/swagger/swaggerRegistry.d.ts.map +1 -0
- package/dist/swagger/swaggerRegistry.js +115 -0
- package/dist/swagger/swaggerRegistry.js.map +1 -0
- package/dist/swagger/swaggerSpec.d.ts +69 -0
- package/dist/swagger/swaggerSpec.d.ts.map +1 -0
- package/dist/swagger/swaggerSpec.js +174 -0
- package/dist/swagger/swaggerSpec.js.map +1 -0
- package/dist/utils/ACL.d.ts +19 -0
- package/dist/utils/ACL.d.ts.map +1 -0
- package/dist/utils/ACL.js +35 -0
- package/dist/utils/ACL.js.map +1 -0
- package/dist/utils/constants.d.ts +13 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +19 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/dynamicImport.d.ts +2 -0
- package/dist/utils/dynamicImport.d.ts.map +1 -0
- package/dist/utils/dynamicImport.js +21 -0
- package/dist/utils/dynamicImport.js.map +1 -0
- package/dist/utils/helper.d.ts +15 -0
- package/dist/utils/helper.d.ts.map +1 -0
- package/dist/utils/helper.js +93 -0
- package/dist/utils/helper.js.map +1 -0
- package/package.json +21 -5
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateSwaggerSpec = generateSwaggerSpec;
|
|
4
|
+
exports.getSwaggerJson = getSwaggerJson;
|
|
5
|
+
const swaggerRegistry_1 = require("./swaggerRegistry");
|
|
6
|
+
/**
|
|
7
|
+
* Generate OpenAPI 3.0 specification from registered metadata
|
|
8
|
+
*/
|
|
9
|
+
function generateSwaggerSpec(config) {
|
|
10
|
+
const models = swaggerRegistry_1.SwaggerRegistry.getModels();
|
|
11
|
+
const functions = swaggerRegistry_1.SwaggerRegistry.getFunctions();
|
|
12
|
+
// Build schemas from models
|
|
13
|
+
const schemas = {};
|
|
14
|
+
for (const model of models) {
|
|
15
|
+
schemas[model.className] = {
|
|
16
|
+
type: 'object',
|
|
17
|
+
description: model.description,
|
|
18
|
+
properties: model.properties,
|
|
19
|
+
required: model.required.length > 0 ? model.required : undefined,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
// Add common schemas
|
|
23
|
+
schemas['ParseError'] = {
|
|
24
|
+
type: 'object',
|
|
25
|
+
properties: {
|
|
26
|
+
code: { type: 'number', description: 'Error code' },
|
|
27
|
+
error: { type: 'string', description: 'Error message' },
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
schemas['CloudFunctionRequest'] = {
|
|
31
|
+
type: 'object',
|
|
32
|
+
properties: {
|
|
33
|
+
_ApplicationId: { type: 'string', description: 'Application ID' },
|
|
34
|
+
_SessionToken: {
|
|
35
|
+
type: 'string',
|
|
36
|
+
description: 'Session token for authentication',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
// Build paths from functions
|
|
41
|
+
const paths = {};
|
|
42
|
+
const tagSet = new Set();
|
|
43
|
+
for (const func of functions) {
|
|
44
|
+
const path = `/functions/${func.name}`;
|
|
45
|
+
const method = func.method.toLowerCase();
|
|
46
|
+
// Collect tags
|
|
47
|
+
if (func.tags) {
|
|
48
|
+
func.tags.forEach(tag => tagSet.add(tag));
|
|
49
|
+
}
|
|
50
|
+
// Build request body schema
|
|
51
|
+
let requestBody = undefined;
|
|
52
|
+
if (func.requestBody &&
|
|
53
|
+
Object.keys(func.requestBody.properties).length > 0) {
|
|
54
|
+
requestBody = {
|
|
55
|
+
required: true,
|
|
56
|
+
content: {
|
|
57
|
+
'application/json': {
|
|
58
|
+
schema: {
|
|
59
|
+
type: 'object',
|
|
60
|
+
properties: func.requestBody.properties,
|
|
61
|
+
required: Object.entries(func.requestBody.properties)
|
|
62
|
+
.filter(([_, v]) => v.required)
|
|
63
|
+
.map(([k]) => k),
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// Build responses
|
|
70
|
+
const responses = {};
|
|
71
|
+
if (func.responses) {
|
|
72
|
+
for (const [code, response] of Object.entries(func.responses)) {
|
|
73
|
+
responses[code] = {
|
|
74
|
+
description: response.description,
|
|
75
|
+
content: response.schema
|
|
76
|
+
? {
|
|
77
|
+
'application/json': {
|
|
78
|
+
schema: response.schema,
|
|
79
|
+
},
|
|
80
|
+
}
|
|
81
|
+
: {
|
|
82
|
+
'application/json': {
|
|
83
|
+
schema: {
|
|
84
|
+
type: 'object',
|
|
85
|
+
properties: {
|
|
86
|
+
result: { type: 'object', description: 'Function result' },
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Build security requirements (applicationId and restApiKey are always required)
|
|
95
|
+
const security = func.requiresAuth
|
|
96
|
+
? [
|
|
97
|
+
{ applicationId: [], restApiKey: [], sessionToken: [] },
|
|
98
|
+
{ applicationId: [], restApiKey: [], masterKey: [] },
|
|
99
|
+
]
|
|
100
|
+
: [{ applicationId: [], restApiKey: [] }];
|
|
101
|
+
paths[path] = {
|
|
102
|
+
...paths[path],
|
|
103
|
+
[method]: {
|
|
104
|
+
tags: func.tags || ['Default'],
|
|
105
|
+
summary: func.summary,
|
|
106
|
+
description: func.description,
|
|
107
|
+
operationId: func.name,
|
|
108
|
+
security,
|
|
109
|
+
requestBody,
|
|
110
|
+
responses,
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// Build tags array
|
|
115
|
+
const tags = Array.from(tagSet).map(tag => ({
|
|
116
|
+
name: tag,
|
|
117
|
+
description: `${tag} related operations`,
|
|
118
|
+
}));
|
|
119
|
+
// Build final spec
|
|
120
|
+
const spec = {
|
|
121
|
+
openapi: '3.0.3',
|
|
122
|
+
info: {
|
|
123
|
+
title: config.title,
|
|
124
|
+
version: config.version,
|
|
125
|
+
description: config.description || 'Auto-generated API documentation',
|
|
126
|
+
},
|
|
127
|
+
servers: [
|
|
128
|
+
{
|
|
129
|
+
url: config.basePath || process.env.mountPath || '/parse',
|
|
130
|
+
description: 'Parse Server API',
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
tags,
|
|
134
|
+
paths,
|
|
135
|
+
components: {
|
|
136
|
+
schemas,
|
|
137
|
+
securitySchemes: {
|
|
138
|
+
applicationId: {
|
|
139
|
+
type: 'apiKey',
|
|
140
|
+
in: 'header',
|
|
141
|
+
name: 'X-Parse-Application-Id',
|
|
142
|
+
description: 'Parse Application ID',
|
|
143
|
+
},
|
|
144
|
+
sessionToken: {
|
|
145
|
+
type: 'apiKey',
|
|
146
|
+
in: 'header',
|
|
147
|
+
name: 'X-Parse-Session-Token',
|
|
148
|
+
description: 'User session token for authentication',
|
|
149
|
+
},
|
|
150
|
+
masterKey: {
|
|
151
|
+
type: 'apiKey',
|
|
152
|
+
in: 'header',
|
|
153
|
+
name: 'X-Parse-Master-Key',
|
|
154
|
+
description: 'Master key for admin operations',
|
|
155
|
+
},
|
|
156
|
+
restApiKey: {
|
|
157
|
+
type: 'apiKey',
|
|
158
|
+
in: 'header',
|
|
159
|
+
name: 'X-Parse-REST-API-Key',
|
|
160
|
+
description: 'REST API key for client requests',
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
security: [{ applicationId: [] }, { restApiKey: [] }],
|
|
165
|
+
};
|
|
166
|
+
return spec;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Get the Swagger specification as JSON
|
|
170
|
+
*/
|
|
171
|
+
function getSwaggerJson(config) {
|
|
172
|
+
return JSON.stringify(generateSwaggerSpec(config), null, 2);
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=swaggerSpec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swaggerSpec.js","sourceRoot":"","sources":["../../src/swagger/swaggerSpec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type RoleRule = {
|
|
2
|
+
role: string;
|
|
3
|
+
read?: boolean;
|
|
4
|
+
write?: boolean;
|
|
5
|
+
};
|
|
6
|
+
type OwnerRule = {
|
|
7
|
+
user?: string | any;
|
|
8
|
+
read?: boolean;
|
|
9
|
+
write?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare function implementACL(params: {
|
|
12
|
+
publicRead?: boolean;
|
|
13
|
+
publicWrite?: boolean;
|
|
14
|
+
roleRules?: RoleRule[] | undefined;
|
|
15
|
+
excludedRoles?: string[];
|
|
16
|
+
owner?: OwnerRule[];
|
|
17
|
+
}, existingACL?: Parse.ACL): Parse.ACL;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=ACL.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ACL.d.ts","sourceRoot":"","sources":["../../src/utils/ACL.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,GAAG;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAC,CAAC;AAChE,KAAK,SAAS,GAAG;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAC,CAAC;AAExE,wBAAgB,YAAY,CAC1B,MAAM,EAAE;IACN,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;CACrB,EACD,WAAW,CAAC,EAAE,KAAK,CAAC,GAAG,GACtB,KAAK,CAAC,GAAG,CAgCX"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.implementACL = implementACL;
|
|
4
|
+
function implementACL(params, existingACL) {
|
|
5
|
+
const { publicRead = false, publicWrite = false, roleRules, excludedRoles = [], owner = [], } = params;
|
|
6
|
+
const acl = existingACL ?? new Parse.ACL();
|
|
7
|
+
acl.setPublicReadAccess(!!publicRead);
|
|
8
|
+
acl.setPublicWriteAccess(!!publicWrite);
|
|
9
|
+
for (const { role, read = false, write = false } of roleRules ?? []) {
|
|
10
|
+
if (excludedRoles.includes(role))
|
|
11
|
+
continue;
|
|
12
|
+
if (read)
|
|
13
|
+
acl.setRoleReadAccess(role, true);
|
|
14
|
+
else
|
|
15
|
+
acl.setRoleReadAccess(role, false);
|
|
16
|
+
if (write)
|
|
17
|
+
acl.setRoleWriteAccess(role, true);
|
|
18
|
+
else
|
|
19
|
+
acl.setRoleWriteAccess(role, false);
|
|
20
|
+
}
|
|
21
|
+
for (const { user, read = false, write = false } of owner) {
|
|
22
|
+
if (user !== undefined) {
|
|
23
|
+
if (read)
|
|
24
|
+
acl.setReadAccess(user, true);
|
|
25
|
+
else
|
|
26
|
+
acl.setReadAccess(user, false);
|
|
27
|
+
if (write)
|
|
28
|
+
acl.setWriteAccess(user, true);
|
|
29
|
+
else
|
|
30
|
+
acl.setWriteAccess(user, false);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return acl;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=ACL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ACL.js","sourceRoot":"","sources":["../../src/utils/ACL.ts"],"names":[],"mappings":";;AAGA,oCAyCC;AAzCD,SAAgB,YAAY,CAC1B,MAMC,EACD,WAAuB;IAEvB,MAAM,EACJ,UAAU,GAAG,KAAK,EAClB,WAAW,GAAG,KAAK,EACnB,SAAS,EACT,aAAa,GAAG,EAAE,EAClB,KAAK,GAAG,EAAE,GACX,GAAG,MAAM,CAAC;IAEX,MAAM,GAAG,GAAG,WAAW,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;IAE3C,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACtC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAExC,KAAK,MAAM,EAAC,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAC,IAAI,SAAS,IAAI,EAAE,EAAE,CAAC;QAClE,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QAC3C,IAAI,IAAI;YAAE,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;YACvC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxC,IAAI,KAAK;YAAE,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;YACzC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,MAAM,EAAC,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAC,IAAI,KAAK,EAAE,CAAC;QACxD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,IAAI;gBAAE,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;gBACnC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACpC,IAAI,KAAK;gBAAE,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;gBACrC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User Roles — override these in your project by re-exporting with your own values.
|
|
3
|
+
* These are the defaults for the template.
|
|
4
|
+
*/
|
|
5
|
+
export declare enum UserRoles {
|
|
6
|
+
ADMIN = "SuperAdmin",
|
|
7
|
+
EMPLOYEE = "Employee"
|
|
8
|
+
}
|
|
9
|
+
export type RoleString = `role:${UserRoles}`;
|
|
10
|
+
export declare function roleKey(role: UserRoles): RoleString;
|
|
11
|
+
/** Maximum limit for unbounded Parse queries */
|
|
12
|
+
export declare const MAX_QUERY_LIMIT = 10000;
|
|
13
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,SAAS;IACnB,KAAK,eAAe;IACpB,QAAQ,aAAa;CACtB;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,SAAS,EAAE,CAAC;AAE7C,wBAAgB,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAEnD;AAED,gDAAgD;AAChD,eAAO,MAAM,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_QUERY_LIMIT = exports.UserRoles = void 0;
|
|
4
|
+
exports.roleKey = roleKey;
|
|
5
|
+
/**
|
|
6
|
+
* User Roles — override these in your project by re-exporting with your own values.
|
|
7
|
+
* These are the defaults for the template.
|
|
8
|
+
*/
|
|
9
|
+
var UserRoles;
|
|
10
|
+
(function (UserRoles) {
|
|
11
|
+
UserRoles["ADMIN"] = "SuperAdmin";
|
|
12
|
+
UserRoles["EMPLOYEE"] = "Employee";
|
|
13
|
+
})(UserRoles || (exports.UserRoles = UserRoles = {}));
|
|
14
|
+
function roleKey(role) {
|
|
15
|
+
return `role:${role}`;
|
|
16
|
+
}
|
|
17
|
+
/** Maximum limit for unbounded Parse queries */
|
|
18
|
+
exports.MAX_QUERY_LIMIT = 10000;
|
|
19
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":";;;AAWA,0BAEC;AAbD;;;GAGG;AACH,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,iCAAoB,CAAA;IACpB,kCAAqB,CAAA;AACvB,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAID,SAAgB,OAAO,CAAC,IAAe;IACrC,OAAO,QAAQ,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,gDAAgD;AACnC,QAAA,eAAe,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamicImport.d.ts","sourceRoot":"","sources":["../../src/utils/dynamicImport.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW,GAAI,eAAe,MAAM,SAWhD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.importFiles = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const isDirectory = (path) => (0, fs_1.statSync)(path).isDirectory();
|
|
7
|
+
const importFiles = (directoryPath) => {
|
|
8
|
+
const files = (0, fs_1.readdirSync)(directoryPath);
|
|
9
|
+
files.forEach(file => {
|
|
10
|
+
const filePath = (0, path_1.join)(directoryPath, file);
|
|
11
|
+
if (isDirectory(filePath)) {
|
|
12
|
+
(0, exports.importFiles)(filePath);
|
|
13
|
+
}
|
|
14
|
+
else if ((0, path_1.extname)(filePath) === '.js') {
|
|
15
|
+
console.log(filePath);
|
|
16
|
+
require(filePath);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
exports.importFiles = importFiles;
|
|
21
|
+
//# sourceMappingURL=dynamicImport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamicImport.js","sourceRoot":"","sources":["../../src/utils/dynamicImport.ts"],"names":[],"mappings":";;;AAAA,2BAAyC;AACzC,+BAAmC;AAEnC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAA,aAAQ,EAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAE5D,MAAM,WAAW,GAAG,CAAC,aAAqB,EAAE,EAAE;IACnD,MAAM,KAAK,GAAG,IAAA,gBAAW,EAAC,aAAa,CAAC,CAAC;IACzC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,IAAA,mBAAW,EAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,IAAA,cAAO,EAAC,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtB,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAXW,QAAA,WAAW,eAWtB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare function formatCount(num: any, locale?: string): string;
|
|
2
|
+
export declare function generateRandomPassword(length?: number, includeNumbers?: boolean, includeSymbols?: boolean): string;
|
|
3
|
+
export declare function generateRandomInteger(length: number): string;
|
|
4
|
+
export declare function generateRandomString(length?: number): string;
|
|
5
|
+
export declare function sleep(ms: number): Promise<unknown>;
|
|
6
|
+
export declare function catchError<T>(promise: Promise<T>): Promise<[undefined, T] | [Error]>;
|
|
7
|
+
/**
|
|
8
|
+
* Get role names for a single user
|
|
9
|
+
*/
|
|
10
|
+
export declare function getUserRoles(user: Parse.User): Promise<string[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Get role names for multiple users (batch — avoids N+1)
|
|
13
|
+
*/
|
|
14
|
+
export declare function getUsersRoles(users: Parse.User[]): Promise<Map<string, string[]>>;
|
|
15
|
+
//# sourceMappingURL=helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../src/utils/helper.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,SAAO,UAMlD;AAED,wBAAgB,sBAAsB,CACpC,MAAM,SAAI,EACV,cAAc,UAAO,EACrB,cAAc,UAAO,UAiBtB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,UAInD;AAED,wBAAgB,oBAAoB,CAAC,MAAM,SAAI,GAAG,MAAM,CAOvD;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,oBAE/B;AAED,wBAAsB,UAAU,CAAC,CAAC,EAChC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAClB,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAQnC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAKtE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAmBvF"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatCount = formatCount;
|
|
4
|
+
exports.generateRandomPassword = generateRandomPassword;
|
|
5
|
+
exports.generateRandomInteger = generateRandomInteger;
|
|
6
|
+
exports.generateRandomString = generateRandomString;
|
|
7
|
+
exports.sleep = sleep;
|
|
8
|
+
exports.catchError = catchError;
|
|
9
|
+
exports.getUserRoles = getUserRoles;
|
|
10
|
+
exports.getUsersRoles = getUsersRoles;
|
|
11
|
+
function formatCount(num, locale = 'en') {
|
|
12
|
+
return new Intl.NumberFormat(locale, {
|
|
13
|
+
notation: 'compact',
|
|
14
|
+
compactDisplay: 'short',
|
|
15
|
+
maximumFractionDigits: 1,
|
|
16
|
+
}).format(num ?? 0);
|
|
17
|
+
}
|
|
18
|
+
function generateRandomPassword(length = 8, includeNumbers = true, includeSymbols = true) {
|
|
19
|
+
const lowerCaseChars = 'abcdefghijklmnopqrstuvwxyz';
|
|
20
|
+
const upperCaseChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
21
|
+
const numberChars = '0123456789';
|
|
22
|
+
const symbolChars = '!@#$%^&*()-_=+[]{}|;:,.<>?';
|
|
23
|
+
let charSet = lowerCaseChars + upperCaseChars;
|
|
24
|
+
if (includeNumbers)
|
|
25
|
+
charSet += numberChars;
|
|
26
|
+
if (includeSymbols)
|
|
27
|
+
charSet += symbolChars;
|
|
28
|
+
let password = '';
|
|
29
|
+
for (let i = 0; i < length; i++) {
|
|
30
|
+
const randomIndex = Math.floor(Math.random() * charSet.length);
|
|
31
|
+
password += charSet[randomIndex];
|
|
32
|
+
}
|
|
33
|
+
return password;
|
|
34
|
+
}
|
|
35
|
+
function generateRandomInteger(length) {
|
|
36
|
+
const min = Math.pow(10, length - 1);
|
|
37
|
+
const max = Math.pow(10, length) - 1;
|
|
38
|
+
return (Math.floor(Math.random() * (max - min + 1)) + min).toString();
|
|
39
|
+
}
|
|
40
|
+
function generateRandomString(length = 8) {
|
|
41
|
+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
42
|
+
let result = '';
|
|
43
|
+
for (let i = 0; i < length; i++) {
|
|
44
|
+
result += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
45
|
+
}
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
function sleep(ms) {
|
|
49
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
50
|
+
}
|
|
51
|
+
async function catchError(promise) {
|
|
52
|
+
return promise
|
|
53
|
+
.then(data => {
|
|
54
|
+
return [undefined, data];
|
|
55
|
+
})
|
|
56
|
+
.catch(err => {
|
|
57
|
+
return [err];
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get role names for a single user
|
|
62
|
+
*/
|
|
63
|
+
async function getUserRoles(user) {
|
|
64
|
+
const roleQuery = new Parse.Query('_Role');
|
|
65
|
+
roleQuery.equalTo('users', user);
|
|
66
|
+
const roles = await roleQuery.find({ useMasterKey: true });
|
|
67
|
+
return roles.map(r => r.get('name'));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get role names for multiple users (batch — avoids N+1)
|
|
71
|
+
*/
|
|
72
|
+
async function getUsersRoles(users) {
|
|
73
|
+
if (users.length === 0)
|
|
74
|
+
return new Map();
|
|
75
|
+
const allRoles = await new Parse.Query('_Role').limit(100).find({ useMasterKey: true });
|
|
76
|
+
const userRolesMap = new Map();
|
|
77
|
+
for (const user of users) {
|
|
78
|
+
userRolesMap.set(user.id, []);
|
|
79
|
+
}
|
|
80
|
+
for (const role of allRoles) {
|
|
81
|
+
const usersRelation = role.getUsers().query();
|
|
82
|
+
usersRelation.containedIn('objectId', users.map(u => u.id));
|
|
83
|
+
usersRelation.limit(users.length);
|
|
84
|
+
const roleUsers = await usersRelation.find({ useMasterKey: true });
|
|
85
|
+
for (const u of roleUsers) {
|
|
86
|
+
const existing = userRolesMap.get(u.id) || [];
|
|
87
|
+
existing.push(role.get('name'));
|
|
88
|
+
userRolesMap.set(u.id, existing);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return userRolesMap;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../src/utils/helper.ts"],"names":[],"mappings":";;AAAA,kCAMC;AAED,wDAoBC;AAED,sDAIC;AAED,oDAOC;AAED,sBAEC;AAED,gCAUC;AAKD,oCAKC;AAKD,sCAmBC;AA7FD,SAAgB,WAAW,CAAC,GAAQ,EAAE,MAAM,GAAG,IAAI;IACjD,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACnC,QAAQ,EAAE,SAAS;QACnB,cAAc,EAAE,OAAO;QACvB,qBAAqB,EAAE,CAAC;KACzB,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACtB,CAAC;AAED,SAAgB,sBAAsB,CACpC,MAAM,GAAG,CAAC,EACV,cAAc,GAAG,IAAI,EACrB,cAAc,GAAG,IAAI;IAErB,MAAM,cAAc,GAAG,4BAA4B,CAAC;IACpD,MAAM,cAAc,GAAG,4BAA4B,CAAC;IACpD,MAAM,WAAW,GAAG,YAAY,CAAC;IACjC,MAAM,WAAW,GAAG,4BAA4B,CAAC;IAEjD,IAAI,OAAO,GAAG,cAAc,GAAG,cAAc,CAAC;IAC9C,IAAI,cAAc;QAAE,OAAO,IAAI,WAAW,CAAC;IAC3C,IAAI,cAAc;QAAE,OAAO,IAAI,WAAW,CAAC;IAE3C,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/D,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAgB,qBAAqB,CAAC,MAAc;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxE,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAM,GAAG,CAAC;IAC7C,MAAM,KAAK,GAAG,gEAAgE,CAAC;IAC/E,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAEM,KAAK,UAAU,UAAU,CAC9B,OAAmB;IAEnB,OAAO,OAAO;SACX,IAAI,CAAC,IAAI,CAAC,EAAE;QACX,OAAO,CAAC,SAAS,EAAE,IAAI,CAAmB,CAAC;IAC7C,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,CAAC,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,IAAgB;IACjD,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,EAAC,YAAY,EAAE,IAAI,EAAC,CAAC,CAAC;IACzD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CAAC,KAAmB;IACrD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAE,IAAI,EAAC,CAAC,CAAC;IACtF,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAG,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,aAAa,GAAI,IAAmB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC;QAC9D,aAAa,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,EAAC,YAAY,EAAE,IAAI,EAAC,CAAC,CAAC;QACjE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAG,CAAC,IAAI,EAAE,CAAC;YAC/C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YAChC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAG,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@90soft/parse-server-kit",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Complete decorator-driven development kit for Parse Server — models, cloud functions, triggers, cron, routing, ACL, Swagger, and more.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
@@ -17,7 +17,10 @@
|
|
|
17
17
|
"typescript",
|
|
18
18
|
"backend",
|
|
19
19
|
"cloud-functions",
|
|
20
|
-
"mongodb"
|
|
20
|
+
"mongodb",
|
|
21
|
+
"acl",
|
|
22
|
+
"swagger",
|
|
23
|
+
"cron"
|
|
21
24
|
],
|
|
22
25
|
"author": "90Soft",
|
|
23
26
|
"license": "MIT",
|
|
@@ -27,12 +30,25 @@
|
|
|
27
30
|
},
|
|
28
31
|
"peerDependencies": {
|
|
29
32
|
"parse": ">=5.0.0",
|
|
30
|
-
"reflect-metadata": ">=0.1.13"
|
|
33
|
+
"reflect-metadata": ">=0.1.13",
|
|
34
|
+
"express": ">=4.0.0"
|
|
35
|
+
},
|
|
36
|
+
"peerDependenciesMeta": {
|
|
37
|
+
"node-cron": {
|
|
38
|
+
"optional": true
|
|
39
|
+
},
|
|
40
|
+
"swagger-ui-express": {
|
|
41
|
+
"optional": true
|
|
42
|
+
}
|
|
31
43
|
},
|
|
32
44
|
"devDependencies": {
|
|
33
45
|
"typescript": "^5.5.0",
|
|
34
46
|
"@types/node": "^20.0.0",
|
|
47
|
+
"@types/express": "^5.0.0",
|
|
35
48
|
"parse": "^5.3.0",
|
|
36
|
-
"reflect-metadata": "^0.2.2"
|
|
49
|
+
"reflect-metadata": "^0.2.2",
|
|
50
|
+
"express": "^5.0.0",
|
|
51
|
+
"swagger-ui-express": "^5.0.1",
|
|
52
|
+
"node-cron": "^4.0.0"
|
|
37
53
|
}
|
|
38
54
|
}
|