@morojs/moro 1.6.6 → 1.6.8
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/README.md +20 -4
- package/dist/core/auth/morojs-adapter.js +17 -14
- package/dist/core/auth/morojs-adapter.js.map +1 -1
- package/dist/core/config/config-sources.js +44 -0
- package/dist/core/config/config-sources.js.map +1 -1
- package/dist/core/database/adapters/drizzle.js +5 -5
- package/dist/core/database/adapters/drizzle.js.map +1 -1
- package/dist/core/database/adapters/mongodb.js +5 -1
- package/dist/core/database/adapters/mongodb.js.map +1 -1
- package/dist/core/database/adapters/mysql.js +5 -1
- package/dist/core/database/adapters/mysql.js.map +1 -1
- package/dist/core/database/adapters/postgresql.js +1 -1
- package/dist/core/database/adapters/postgresql.js.map +1 -1
- package/dist/core/database/adapters/redis.js +2 -2
- package/dist/core/database/adapters/redis.js.map +1 -1
- package/dist/core/database/adapters/sqlite.js +5 -1
- package/dist/core/database/adapters/sqlite.js.map +1 -1
- package/dist/core/docs/index.js.map +1 -1
- package/dist/core/docs/simple-docs.js +2 -1
- package/dist/core/docs/simple-docs.js.map +1 -1
- package/dist/core/docs/swagger-ui.js +1 -0
- package/dist/core/docs/swagger-ui.js.map +1 -1
- package/dist/core/docs/zod-to-openapi.js +4 -0
- package/dist/core/docs/zod-to-openapi.js.map +1 -1
- package/dist/core/events/event-bus.d.ts +1 -1
- package/dist/core/events/event-bus.js +1 -0
- package/dist/core/events/event-bus.js.map +1 -1
- package/dist/core/framework.d.ts +1 -1
- package/dist/core/framework.js +3 -1
- package/dist/core/framework.js.map +1 -1
- package/dist/core/graphql/adapter.d.ts +73 -0
- package/dist/core/graphql/adapter.js +2 -0
- package/dist/core/graphql/adapter.js.map +1 -0
- package/dist/core/graphql/adapters/graphql-js-adapter.d.ts +26 -0
- package/dist/core/graphql/adapters/graphql-js-adapter.js +229 -0
- package/dist/core/graphql/adapters/graphql-js-adapter.js.map +1 -0
- package/dist/core/graphql/core.d.ts +60 -0
- package/dist/core/graphql/core.js +165 -0
- package/dist/core/graphql/core.js.map +1 -0
- package/dist/core/graphql/index.d.ts +4 -0
- package/dist/core/graphql/index.js +4 -0
- package/dist/core/graphql/index.js.map +1 -0
- package/dist/core/graphql/loader.d.ts +9 -0
- package/dist/core/graphql/loader.js +32 -0
- package/dist/core/graphql/loader.js.map +1 -0
- package/dist/core/graphql/types.d.ts +211 -0
- package/dist/core/graphql/types.js +2 -0
- package/dist/core/graphql/types.js.map +1 -0
- package/dist/core/http/http-server.js +31 -9
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/utils/uws-worker-clustering.d.ts +28 -0
- package/dist/core/http/utils/uws-worker-clustering.js +313 -0
- package/dist/core/http/utils/uws-worker-clustering.js.map +1 -0
- package/dist/core/http/uws-http-server.d.ts +3 -1
- package/dist/core/http/uws-http-server.js +37 -8
- package/dist/core/http/uws-http-server.js.map +1 -1
- package/dist/core/jobs/cron-parser.d.ts +62 -0
- package/dist/core/jobs/cron-parser.js +239 -0
- package/dist/core/jobs/cron-parser.js.map +1 -0
- package/dist/core/jobs/index.d.ts +12 -0
- package/dist/core/jobs/index.js +9 -0
- package/dist/core/jobs/index.js.map +1 -0
- package/dist/core/jobs/job-executor.d.ts +134 -0
- package/dist/core/jobs/job-executor.js +413 -0
- package/dist/core/jobs/job-executor.js.map +1 -0
- package/dist/core/jobs/job-scheduler.d.ts +214 -0
- package/dist/core/jobs/job-scheduler.js +551 -0
- package/dist/core/jobs/job-scheduler.js.map +1 -0
- package/dist/core/jobs/job-state-manager.d.ts +158 -0
- package/dist/core/jobs/job-state-manager.js +444 -0
- package/dist/core/jobs/job-state-manager.js.map +1 -0
- package/dist/core/jobs/leader-election.d.ts +124 -0
- package/dist/core/jobs/leader-election.js +481 -0
- package/dist/core/jobs/leader-election.js.map +1 -0
- package/dist/core/jobs/types.d.ts +151 -0
- package/dist/core/jobs/types.js +4 -0
- package/dist/core/jobs/types.js.map +1 -0
- package/dist/core/jobs/utils.d.ts +95 -0
- package/dist/core/jobs/utils.js +258 -0
- package/dist/core/jobs/utils.js.map +1 -0
- package/dist/core/logger/filters.js +2 -0
- package/dist/core/logger/filters.js.map +1 -1
- package/dist/core/logger/logger.js +7 -3
- package/dist/core/logger/logger.js.map +1 -1
- package/dist/core/logger/outputs.js +2 -0
- package/dist/core/logger/outputs.js.map +1 -1
- package/dist/core/middleware/built-in/auth/helpers.js +1 -1
- package/dist/core/middleware/built-in/auth/helpers.js.map +1 -1
- package/dist/core/middleware/built-in/auth/jwt-helpers.js +1 -1
- package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -1
- package/dist/core/middleware/built-in/auth/providers.js +1 -1
- package/dist/core/middleware/built-in/auth/providers.js.map +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/file.js +3 -3
- package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/memory.js +1 -0
- package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/redis.js +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.d.ts +8 -0
- package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js +100 -7
- package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.d.ts +6 -0
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js +97 -13
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -1
- package/dist/core/middleware/built-in/cookie/hook.d.ts +1 -1
- package/dist/core/middleware/built-in/cookie/hook.js +2 -2
- package/dist/core/middleware/built-in/cookie/hook.js.map +1 -1
- package/dist/core/middleware/built-in/csrf/core.js +1 -0
- package/dist/core/middleware/built-in/csrf/core.js.map +1 -1
- package/dist/core/middleware/built-in/graphql/core.d.ts +11 -0
- package/dist/core/middleware/built-in/graphql/core.js +24 -0
- package/dist/core/middleware/built-in/graphql/core.js.map +1 -0
- package/dist/core/middleware/built-in/graphql/helpers.d.ts +69 -0
- package/dist/core/middleware/built-in/graphql/helpers.js +187 -0
- package/dist/core/middleware/built-in/graphql/helpers.js.map +1 -0
- package/dist/core/middleware/built-in/graphql/hook.d.ts +7 -0
- package/dist/core/middleware/built-in/graphql/hook.js +78 -0
- package/dist/core/middleware/built-in/graphql/hook.js.map +1 -0
- package/dist/core/middleware/built-in/graphql/index.d.ts +5 -0
- package/dist/core/middleware/built-in/graphql/index.js +5 -0
- package/dist/core/middleware/built-in/graphql/index.js.map +1 -0
- package/dist/core/middleware/built-in/graphql/middleware.d.ts +7 -0
- package/dist/core/middleware/built-in/graphql/middleware.js +54 -0
- package/dist/core/middleware/built-in/graphql/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/graphql/subscriptions.d.ts +20 -0
- package/dist/core/middleware/built-in/graphql/subscriptions.js +37 -0
- package/dist/core/middleware/built-in/graphql/subscriptions.js.map +1 -0
- package/dist/core/middleware/built-in/index.d.ts +2 -1
- package/dist/core/middleware/built-in/index.js +3 -0
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/validation/core.js +4 -2
- package/dist/core/middleware/built-in/validation/core.js.map +1 -1
- package/dist/core/middleware/index.js +1 -0
- package/dist/core/middleware/index.js.map +1 -1
- package/dist/core/modules/auto-discovery.js +5 -4
- package/dist/core/modules/auto-discovery.js.map +1 -1
- package/dist/core/modules/modules.js.map +1 -1
- package/dist/core/networking/adapters/socketio-adapter.js +1 -1
- package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
- package/dist/core/networking/adapters/uws-adapter.js +7 -2
- package/dist/core/networking/adapters/uws-adapter.js.map +1 -1
- package/dist/core/networking/adapters/ws-adapter.js +5 -2
- package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
- package/dist/core/networking/websocket-manager.js +2 -0
- package/dist/core/networking/websocket-manager.js.map +1 -1
- package/dist/core/pooling/object-pool-manager.js +3 -0
- package/dist/core/pooling/object-pool-manager.js.map +1 -1
- package/dist/core/routing/app-integration.d.ts +3 -3
- package/dist/core/routing/app-integration.js +1 -1
- package/dist/core/routing/app-integration.js.map +1 -1
- package/dist/core/routing/index.d.ts +1 -1
- package/dist/core/routing/index.js +1 -1
- package/dist/core/routing/index.js.map +1 -1
- package/dist/core/runtime/base-adapter.js +3 -3
- package/dist/core/runtime/base-adapter.js.map +1 -1
- package/dist/core/runtime/cloudflare-workers-adapter.js +1 -1
- package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
- package/dist/core/runtime/node-adapter.d.ts +1 -1
- package/dist/core/runtime/node-adapter.js +7 -4
- package/dist/core/runtime/node-adapter.js.map +1 -1
- package/dist/core/runtime/vercel-edge-adapter.js +1 -0
- package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
- package/dist/core/utilities/circuit-breaker.d.ts +9 -2
- package/dist/core/utilities/circuit-breaker.js +32 -3
- package/dist/core/utilities/circuit-breaker.js.map +1 -1
- package/dist/core/utilities/container.js +6 -0
- package/dist/core/utilities/container.js.map +1 -1
- package/dist/core/utilities/hooks.js +4 -0
- package/dist/core/utilities/hooks.js.map +1 -1
- package/dist/core/validation/index.js +6 -1
- package/dist/core/validation/index.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/moro.d.ts +154 -1
- package/dist/moro.js +588 -11
- package/dist/moro.js.map +1 -1
- package/dist/types/config.d.ts +28 -0
- package/dist/types/core.d.ts +1 -0
- package/dist/types/events.d.ts +1 -1
- package/dist/types/events.js +1 -0
- package/dist/types/events.js.map +1 -1
- package/dist/types/module.d.ts +2 -2
- package/package.json +21 -1
|
@@ -2,11 +2,17 @@ import { CDNAdapter } from '../../../../../../types/cdn.js';
|
|
|
2
2
|
export declare class CloudflareCDNAdapter implements CDNAdapter {
|
|
3
3
|
private apiToken;
|
|
4
4
|
private zoneId;
|
|
5
|
+
private cacheControlMaxAge;
|
|
6
|
+
private email?;
|
|
5
7
|
constructor(options: {
|
|
6
8
|
apiToken: string;
|
|
7
9
|
zoneId: string;
|
|
10
|
+
email?: string;
|
|
11
|
+
cacheControlMaxAge?: number;
|
|
8
12
|
});
|
|
9
13
|
purge(urls: string[]): Promise<void>;
|
|
14
|
+
purgeEverything(): Promise<void>;
|
|
15
|
+
purgeByTags(tags: string[]): Promise<void>;
|
|
10
16
|
prefetch(urls: string[]): Promise<void>;
|
|
11
17
|
getStats(): Promise<any>;
|
|
12
18
|
setHeaders(response: any): void;
|
|
@@ -3,12 +3,20 @@ const logger = createFrameworkLogger('CloudflareCDNAdapter');
|
|
|
3
3
|
export class CloudflareCDNAdapter {
|
|
4
4
|
apiToken;
|
|
5
5
|
zoneId;
|
|
6
|
+
cacheControlMaxAge;
|
|
7
|
+
email;
|
|
6
8
|
constructor(options) {
|
|
7
9
|
this.apiToken = options.apiToken;
|
|
8
10
|
this.zoneId = options.zoneId;
|
|
11
|
+
this.email = options.email;
|
|
12
|
+
this.cacheControlMaxAge = options.cacheControlMaxAge ?? 3600;
|
|
9
13
|
logger.info('Cloudflare CDN adapter initialized', 'Cloudflare');
|
|
10
14
|
}
|
|
11
15
|
async purge(urls) {
|
|
16
|
+
if (!urls || urls.length === 0) {
|
|
17
|
+
logger.warn('No URLs provided for purge', 'Cloudflare');
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
12
20
|
try {
|
|
13
21
|
const response = await this.cfRequest('POST', `/zones/${this.zoneId}/purge_cache`, {
|
|
14
22
|
files: urls,
|
|
@@ -17,7 +25,8 @@ export class CloudflareCDNAdapter {
|
|
|
17
25
|
logger.info(`Cloudflare cache purged: ${urls.length} URLs`, 'Cloudflare');
|
|
18
26
|
}
|
|
19
27
|
else {
|
|
20
|
-
|
|
28
|
+
const errorMessages = response.errors?.map(e => e.message).join(', ') || 'Unknown error';
|
|
29
|
+
throw new Error(`Cloudflare purge failed: ${errorMessages}`);
|
|
21
30
|
}
|
|
22
31
|
}
|
|
23
32
|
catch (error) {
|
|
@@ -25,22 +34,79 @@ export class CloudflareCDNAdapter {
|
|
|
25
34
|
throw error;
|
|
26
35
|
}
|
|
27
36
|
}
|
|
37
|
+
async purgeEverything() {
|
|
38
|
+
try {
|
|
39
|
+
const response = await this.cfRequest('POST', `/zones/${this.zoneId}/purge_cache`, {
|
|
40
|
+
purge_everything: true,
|
|
41
|
+
});
|
|
42
|
+
if (response.success) {
|
|
43
|
+
logger.info('Cloudflare entire cache purged', 'Cloudflare');
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
const errorMessages = response.errors?.map(e => e.message).join(', ') || 'Unknown error';
|
|
47
|
+
throw new Error(`Cloudflare purge everything failed: ${errorMessages}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
logger.error('Cloudflare purge everything failed', 'Cloudflare', { error });
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async purgeByTags(tags) {
|
|
56
|
+
if (!tags || tags.length === 0) {
|
|
57
|
+
logger.warn('No tags provided for purge', 'Cloudflare');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
const response = await this.cfRequest('POST', `/zones/${this.zoneId}/purge_cache`, {
|
|
62
|
+
tags: tags,
|
|
63
|
+
});
|
|
64
|
+
if (response.success) {
|
|
65
|
+
logger.info(`Cloudflare cache purged by tags: ${tags.join(', ')}`, 'Cloudflare');
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
const errorMessages = response.errors?.map(e => e.message).join(', ') || 'Unknown error';
|
|
69
|
+
throw new Error(`Cloudflare purge by tags failed: ${errorMessages}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
logger.error('Cloudflare purge by tags failed', 'Cloudflare', { error, tags });
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
28
77
|
async prefetch(urls) {
|
|
78
|
+
if (!urls || urls.length === 0) {
|
|
79
|
+
logger.warn('No URLs provided for prefetch', 'Cloudflare');
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
logger.info(`Cloudflare prefetch requested for ${urls.length} URLs. Note: Cloudflare does not have a direct prefetch API. Consider using Cache Reserve or Workers for cache warming.`, 'Cloudflare');
|
|
29
83
|
try {
|
|
30
|
-
logger.debug(`Cloudflare prefetch requested for ${urls.length} URLs`, 'Cloudflare');
|
|
31
|
-
// Cloudflare doesn't have direct prefetch, but we can use preload links
|
|
32
84
|
for (const url of urls) {
|
|
33
|
-
|
|
85
|
+
if (!url) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
await fetch(url, {
|
|
89
|
+
method: 'GET',
|
|
90
|
+
headers: {
|
|
91
|
+
'User-Agent': 'MoroJS-Cloudflare-Prefetch/1.0',
|
|
92
|
+
},
|
|
93
|
+
});
|
|
34
94
|
}
|
|
95
|
+
logger.info(`Cloudflare prefetch completed for ${urls.length} URLs`, 'Cloudflare');
|
|
35
96
|
}
|
|
36
97
|
catch (error) {
|
|
37
98
|
logger.error('Cloudflare prefetch failed', 'Cloudflare', { error, urls });
|
|
99
|
+
throw error;
|
|
38
100
|
}
|
|
39
101
|
}
|
|
40
102
|
async getStats() {
|
|
41
103
|
try {
|
|
42
104
|
const response = await this.cfRequest('GET', `/zones/${this.zoneId}/analytics/dashboard`);
|
|
43
|
-
|
|
105
|
+
if (response.success) {
|
|
106
|
+
return response.result;
|
|
107
|
+
}
|
|
108
|
+
logger.warn('Failed to get Cloudflare stats', 'Cloudflare', { errors: response.errors });
|
|
109
|
+
return null;
|
|
44
110
|
}
|
|
45
111
|
catch (error) {
|
|
46
112
|
logger.error('Cloudflare stats failed', 'Cloudflare', { error });
|
|
@@ -48,19 +114,37 @@ export class CloudflareCDNAdapter {
|
|
|
48
114
|
}
|
|
49
115
|
}
|
|
50
116
|
setHeaders(response) {
|
|
51
|
-
response.setHeader
|
|
52
|
-
|
|
53
|
-
|
|
117
|
+
if (!response || typeof response.setHeader !== 'function') {
|
|
118
|
+
logger.warn('Invalid response object provided to setHeaders', 'Cloudflare');
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
response.setHeader('Cache-Control', `public, max-age=${this.cacheControlMaxAge}`);
|
|
122
|
+
response.setHeader('X-CDN-Provider', 'Cloudflare');
|
|
54
123
|
}
|
|
55
124
|
async cfRequest(method, endpoint, data) {
|
|
56
125
|
const url = `https://api.cloudflare.com/client/v4${endpoint}`;
|
|
57
126
|
try {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
result: data || {},
|
|
127
|
+
const headers = {
|
|
128
|
+
Authorization: `Bearer ${this.apiToken}`,
|
|
129
|
+
'Content-Type': 'application/json',
|
|
62
130
|
};
|
|
63
|
-
|
|
131
|
+
if (this.email) {
|
|
132
|
+
headers['X-Auth-Email'] = this.email;
|
|
133
|
+
}
|
|
134
|
+
const options = {
|
|
135
|
+
method,
|
|
136
|
+
headers,
|
|
137
|
+
};
|
|
138
|
+
if (data && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {
|
|
139
|
+
options.body = JSON.stringify(data);
|
|
140
|
+
}
|
|
141
|
+
const response = await fetch(url, options);
|
|
142
|
+
if (!response.ok) {
|
|
143
|
+
const errorText = await response.text();
|
|
144
|
+
throw new Error(`Cloudflare API request failed: ${response.status} ${errorText}`);
|
|
145
|
+
}
|
|
146
|
+
const result = (await response.json());
|
|
147
|
+
return result;
|
|
64
148
|
}
|
|
65
149
|
catch (error) {
|
|
66
150
|
logger.error('Cloudflare API request failed', 'Cloudflare', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../../../../../../src/core/middleware/built-in/cdn/adapters/cdn/cloudflare.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,MAAM,MAAM,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../../../../../../src/core/middleware/built-in/cdn/adapters/cdn/cloudflare.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ export class CloudFrontCDNAdapter {
|
|
|
21
21
|
this.cloudfront = new AWS.default.CloudFront();
|
|
22
22
|
logger.info('CloudFront CDN adapter initialized', 'CloudFront');
|
|
23
23
|
}
|
|
24
|
-
catch
|
|
24
|
+
catch {
|
|
25
25
|
logger.error('AWS SDK not available', 'CloudFront');
|
|
26
26
|
throw new Error('AWS SDK not installed. Run: npm install aws-sdk');
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudfront.js","sourceRoot":"","sources":["../../../../../../../src/core/middleware/built-in/cdn/adapters/cdn/cloudfront.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E,MAAM,MAAM,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,CAAC;AAE7D,MAAM,OAAO,oBAAoB;IACvB,UAAU,CAAM;IAChB,cAAc,CAAS;IAE/B,YAAY,OAKX;QACC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAEO,WAAW,CAAgB;IAE3B,KAAK,CAAC,UAAU,CAAC,OAIxB;QACC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAC9C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YAClC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;gBACxB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,YAAY,CAAC,CAAC;QAClE,CAAC;QAAC,
|
|
1
|
+
{"version":3,"file":"cloudfront.js","sourceRoot":"","sources":["../../../../../../../src/core/middleware/built-in/cdn/adapters/cdn/cloudfront.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ const logger = createFrameworkLogger('CookieMiddleware');
|
|
|
15
15
|
* }));
|
|
16
16
|
* ```
|
|
17
17
|
*/
|
|
18
|
-
export const cookie = (
|
|
18
|
+
export const cookie = (_config = {}) => ({
|
|
19
19
|
name: 'cookie',
|
|
20
20
|
version: '1.0.0',
|
|
21
21
|
metadata: {
|
|
@@ -24,7 +24,7 @@ export const cookie = (config = {}) => ({
|
|
|
24
24
|
description: 'Cookie parsing and setting middleware with security features',
|
|
25
25
|
author: 'MoroJS Team',
|
|
26
26
|
},
|
|
27
|
-
install: async (hooks,
|
|
27
|
+
install: async (hooks, _middlewareOptions = {}) => {
|
|
28
28
|
logger.debug('Installing cookie middleware', 'Installation');
|
|
29
29
|
const cookieCore = new CookieCore();
|
|
30
30
|
hooks.before('request', async (context) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/cookie/hook.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAsB,MAAM,WAAW,CAAC;AAE3D,MAAM,MAAM,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;AAOzD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/cookie/hook.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAsB,MAAM,WAAW,CAAC;AAE3D,MAAM,MAAM,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;AAOzD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAAwB,EAAE,EAAuB,EAAE,CAAC,CAAC;IAC1E,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,8DAA8D;QAC3E,MAAM,EAAE,aAAa;KACtB;IAED,OAAO,EAAE,KAAK,EAAE,KAAU,EAAE,qBAA0B,EAAE,EAAE,EAAE;QAC1D,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;QAE7D,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAEpC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAoB,EAAE,EAAE;YACrD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAc,CAAC;YACnC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAe,CAAC;YAEpC,6BAA6B;YAC7B,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAE1D,iCAAiC;YACjC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,UAAyB,EAAE,EAAE,EAAE;gBACxE,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;gBAChD,OAAO,GAAG,CAAC;YACb,CAAC,CAAC;YAEF,GAAG,CAAC,WAAW,GAAG,CAAC,IAAY,EAAE,UAAyB,EAAE,EAAE,EAAE;gBAC9D,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC3C,OAAO,GAAG,CAAC;YACb,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// CSRF Core - Reusable CSRF protection logic
|
|
2
2
|
import crypto from 'crypto';
|
|
3
3
|
import { createFrameworkLogger } from '../../../logger/index.js';
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
4
5
|
const logger = createFrameworkLogger('CSRFCore');
|
|
5
6
|
// ===== Core Logic =====
|
|
6
7
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/csrf/core.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/csrf/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { GraphQLCore } from '../../../graphql/core.js';
|
|
2
|
+
import type { GraphQLOptions } from '../../../graphql/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Get or create shared GraphQL core
|
|
5
|
+
*/
|
|
6
|
+
export declare function getSharedGraphQLCore(options?: GraphQLOptions): GraphQLCore | null;
|
|
7
|
+
/**
|
|
8
|
+
* Reset shared GraphQL core (for testing)
|
|
9
|
+
*/
|
|
10
|
+
export declare function resetSharedGraphQLCore(): void;
|
|
11
|
+
export { GraphQLCore };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// GraphQL Core - Shared instance and utilities
|
|
2
|
+
import { GraphQLCore } from '../../../graphql/core.js';
|
|
3
|
+
/**
|
|
4
|
+
* Shared GraphQL core instance
|
|
5
|
+
*/
|
|
6
|
+
let sharedGraphQLCore = null;
|
|
7
|
+
/**
|
|
8
|
+
* Get or create shared GraphQL core
|
|
9
|
+
*/
|
|
10
|
+
export function getSharedGraphQLCore(options) {
|
|
11
|
+
if (options && !sharedGraphQLCore) {
|
|
12
|
+
sharedGraphQLCore = new GraphQLCore(options);
|
|
13
|
+
}
|
|
14
|
+
return sharedGraphQLCore;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Reset shared GraphQL core (for testing)
|
|
18
|
+
*/
|
|
19
|
+
export function resetSharedGraphQLCore() {
|
|
20
|
+
sharedGraphQLCore = null;
|
|
21
|
+
}
|
|
22
|
+
// Re-export core
|
|
23
|
+
export { GraphQLCore };
|
|
24
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/graphql/core.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD;;GAEG;AACH,IAAI,iBAAiB,GAAuB,IAAI,CAAC;AAEjD;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAwB;IAC3D,IAAI,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAClC,iBAAiB,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,iBAAiB,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { GraphQLSchema } from 'graphql';
|
|
2
|
+
/**
|
|
3
|
+
* Check if Pothos is available
|
|
4
|
+
*/
|
|
5
|
+
export declare function isPothosAvailable(): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Create Pothos schema builder instance
|
|
8
|
+
* Users should use this to create their schema builder
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { createPothosBuilder } from '@morojs/moro';
|
|
13
|
+
*
|
|
14
|
+
* const builder = createPothosBuilder({
|
|
15
|
+
* plugins: ['relay', 'errors'],
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* builder.queryType({
|
|
19
|
+
* fields: (t) => ({
|
|
20
|
+
* hello: t.string({
|
|
21
|
+
* resolve: () => 'Hello World!'
|
|
22
|
+
* })
|
|
23
|
+
* })
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* const schema = builder.toSchema();
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function createPothosBuilder(options?: any): Promise<any>;
|
|
30
|
+
/**
|
|
31
|
+
* Helper to check if value is a Pothos schema
|
|
32
|
+
*/
|
|
33
|
+
export declare function isPothosSchema(value: any): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Extract GraphQL schema from Pothos builder
|
|
36
|
+
*/
|
|
37
|
+
export declare function pothosToSchema(pothosBuilder: any): GraphQLSchema;
|
|
38
|
+
/**
|
|
39
|
+
* GraphQL query complexity calculator
|
|
40
|
+
* Helps prevent expensive queries from overloading the server
|
|
41
|
+
*
|
|
42
|
+
* Note: This is a basic implementation. For production use, consider
|
|
43
|
+
* installing graphql-query-complexity package for full features.
|
|
44
|
+
*/
|
|
45
|
+
export declare function createComplexityPlugin(options?: {
|
|
46
|
+
maximumComplexity: number;
|
|
47
|
+
onComplete?: (complexity: number) => void;
|
|
48
|
+
estimators?: any[];
|
|
49
|
+
}): any;
|
|
50
|
+
/**
|
|
51
|
+
* GraphQL depth limit validator
|
|
52
|
+
* Prevents deeply nested queries
|
|
53
|
+
*
|
|
54
|
+
* Note: This is a basic implementation. For production use, consider
|
|
55
|
+
* installing graphql-depth-limit package for full features.
|
|
56
|
+
*/
|
|
57
|
+
export declare function createDepthLimitPlugin(options?: {
|
|
58
|
+
maxDepth: number;
|
|
59
|
+
callback?: (depth: number) => void;
|
|
60
|
+
}): any;
|
|
61
|
+
/**
|
|
62
|
+
* DataLoader helper for batching
|
|
63
|
+
* Prevents N+1 query problems
|
|
64
|
+
*/
|
|
65
|
+
export declare function createDataLoader<K, V>(batchFn: (keys: readonly K[]) => Promise<(V | Error)[]>, options?: {
|
|
66
|
+
batch?: boolean;
|
|
67
|
+
maxBatchSize?: number;
|
|
68
|
+
cache?: boolean;
|
|
69
|
+
}): Promise<any>;
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
// GraphQL Helpers - Pothos integration and utilities
|
|
2
|
+
import { createFrameworkLogger } from '../../../logger/index.js';
|
|
3
|
+
import { isPackageAvailable } from '../../../utilities/package-utils.js';
|
|
4
|
+
const logger = createFrameworkLogger('GraphQLHelpers');
|
|
5
|
+
/**
|
|
6
|
+
* Check if Pothos is available
|
|
7
|
+
*/
|
|
8
|
+
export function isPothosAvailable() {
|
|
9
|
+
return isPackageAvailable('@pothos/core');
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Create Pothos schema builder instance
|
|
13
|
+
* Users should use this to create their schema builder
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { createPothosBuilder } from '@morojs/moro';
|
|
18
|
+
*
|
|
19
|
+
* const builder = createPothosBuilder({
|
|
20
|
+
* plugins: ['relay', 'errors'],
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* builder.queryType({
|
|
24
|
+
* fields: (t) => ({
|
|
25
|
+
* hello: t.string({
|
|
26
|
+
* resolve: () => 'Hello World!'
|
|
27
|
+
* })
|
|
28
|
+
* })
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* const schema = builder.toSchema();
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export async function createPothosBuilder(options = {}) {
|
|
35
|
+
if (!isPothosAvailable()) {
|
|
36
|
+
throw new Error('Pothos support requires @pothos/core to be installed.\n' +
|
|
37
|
+
'Install it with: npm install @pothos/core\n' +
|
|
38
|
+
'For TypeScript-first GraphQL, also consider: @pothos/plugin-relay @pothos/plugin-errors');
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
// Use dynamic import for ESM compatibility
|
|
42
|
+
const pothosModule = await import('@pothos/core');
|
|
43
|
+
const SchemaBuilder = pothosModule.default;
|
|
44
|
+
logger.info('Creating Pothos schema builder', 'Pothos', { plugins: options.plugins || [] });
|
|
45
|
+
return new SchemaBuilder(options);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
logger.error('Failed to create Pothos schema builder', 'Pothos', { error });
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Helper to check if value is a Pothos schema
|
|
54
|
+
*/
|
|
55
|
+
export function isPothosSchema(value) {
|
|
56
|
+
return value && typeof value === 'object' && typeof value.toSchema === 'function';
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Extract GraphQL schema from Pothos builder
|
|
60
|
+
*/
|
|
61
|
+
export function pothosToSchema(pothosBuilder) {
|
|
62
|
+
if (!pothosBuilder) {
|
|
63
|
+
throw new Error('Pothos builder is required');
|
|
64
|
+
}
|
|
65
|
+
if (typeof pothosBuilder.toSchema !== 'function') {
|
|
66
|
+
throw new Error('Invalid Pothos builder - missing toSchema() method');
|
|
67
|
+
}
|
|
68
|
+
return pothosBuilder.toSchema();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* GraphQL query complexity calculator
|
|
72
|
+
* Helps prevent expensive queries from overloading the server
|
|
73
|
+
*
|
|
74
|
+
* Note: This is a basic implementation. For production use, consider
|
|
75
|
+
* installing graphql-query-complexity package for full features.
|
|
76
|
+
*/
|
|
77
|
+
export function createComplexityPlugin(options = { maximumComplexity: 1000 }) {
|
|
78
|
+
logger.info('Creating query complexity plugin', 'Complexity', {
|
|
79
|
+
maxComplexity: options.maximumComplexity,
|
|
80
|
+
});
|
|
81
|
+
return {
|
|
82
|
+
name: 'complexity',
|
|
83
|
+
requestDidStart: () => ({
|
|
84
|
+
didResolveOperation({ document, operationName }) {
|
|
85
|
+
// Basic complexity check - counts fields in query
|
|
86
|
+
let complexity = 0;
|
|
87
|
+
const visit = (node) => {
|
|
88
|
+
if (node.kind === 'Field') {
|
|
89
|
+
complexity++;
|
|
90
|
+
}
|
|
91
|
+
if (node.selectionSet) {
|
|
92
|
+
node.selectionSet.selections.forEach(visit);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
if (document.definitions) {
|
|
96
|
+
document.definitions.forEach((def) => {
|
|
97
|
+
if (def.selectionSet) {
|
|
98
|
+
def.selectionSet.selections.forEach(visit);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
logger.debug('Query complexity calculated', 'Complexity', {
|
|
103
|
+
operationName,
|
|
104
|
+
complexity,
|
|
105
|
+
maxComplexity: options.maximumComplexity,
|
|
106
|
+
});
|
|
107
|
+
if (options.onComplete) {
|
|
108
|
+
options.onComplete(complexity);
|
|
109
|
+
}
|
|
110
|
+
if (complexity > options.maximumComplexity) {
|
|
111
|
+
throw new Error(`Query complexity of ${complexity} exceeds maximum allowed complexity of ${options.maximumComplexity}`);
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
}),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* GraphQL depth limit validator
|
|
119
|
+
* Prevents deeply nested queries
|
|
120
|
+
*
|
|
121
|
+
* Note: This is a basic implementation. For production use, consider
|
|
122
|
+
* installing graphql-depth-limit package for full features.
|
|
123
|
+
*/
|
|
124
|
+
export function createDepthLimitPlugin(options = { maxDepth: 10 }) {
|
|
125
|
+
logger.info('Creating depth limit plugin', 'DepthLimit', {
|
|
126
|
+
maxDepth: options.maxDepth,
|
|
127
|
+
});
|
|
128
|
+
return {
|
|
129
|
+
name: 'depthLimit',
|
|
130
|
+
requestDidStart: () => ({
|
|
131
|
+
didResolveOperation({ document, operationName }) {
|
|
132
|
+
// Basic depth check - traverses query tree
|
|
133
|
+
let maxDepthFound = 0;
|
|
134
|
+
const calculateDepth = (node, currentDepth = 0) => {
|
|
135
|
+
if (!node)
|
|
136
|
+
return currentDepth;
|
|
137
|
+
let depth = currentDepth;
|
|
138
|
+
if (node.kind === 'Field') {
|
|
139
|
+
depth = currentDepth + 1;
|
|
140
|
+
maxDepthFound = Math.max(maxDepthFound, depth);
|
|
141
|
+
}
|
|
142
|
+
if (node.selectionSet?.selections) {
|
|
143
|
+
for (const selection of node.selectionSet.selections) {
|
|
144
|
+
calculateDepth(selection, depth);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return depth;
|
|
148
|
+
};
|
|
149
|
+
if (document.definitions) {
|
|
150
|
+
document.definitions.forEach((def) => {
|
|
151
|
+
if (def.selectionSet) {
|
|
152
|
+
def.selectionSet.selections.forEach((selection) => {
|
|
153
|
+
calculateDepth(selection, 0);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
logger.debug('Query depth calculated', 'DepthLimit', {
|
|
159
|
+
operationName,
|
|
160
|
+
depth: maxDepthFound,
|
|
161
|
+
maxDepth: options.maxDepth,
|
|
162
|
+
});
|
|
163
|
+
if (options.callback) {
|
|
164
|
+
options.callback(maxDepthFound);
|
|
165
|
+
}
|
|
166
|
+
if (maxDepthFound > options.maxDepth) {
|
|
167
|
+
throw new Error(`Query depth of ${maxDepthFound} exceeds maximum allowed depth of ${options.maxDepth}`);
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
}),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* DataLoader helper for batching
|
|
175
|
+
* Prevents N+1 query problems
|
|
176
|
+
*/
|
|
177
|
+
export async function createDataLoader(batchFn, options = {}) {
|
|
178
|
+
if (!isPackageAvailable('dataloader')) {
|
|
179
|
+
throw new Error('DataLoader support requires dataloader package.\n' +
|
|
180
|
+
'Install it with: npm install dataloader');
|
|
181
|
+
}
|
|
182
|
+
// Use dynamic import for ESM compatibility
|
|
183
|
+
const DataLoaderModule = await import('dataloader');
|
|
184
|
+
const DataLoader = DataLoaderModule.default;
|
|
185
|
+
return new DataLoader(batchFn, options);
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/graphql/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MiddlewareInterface } from '../../index.js';
|
|
2
|
+
import type { GraphQLOptions } from '../../../graphql/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* GraphQL Hook Middleware
|
|
5
|
+
* Provides hook-based GraphQL integration with MoroJS middleware system
|
|
6
|
+
*/
|
|
7
|
+
export declare const graphql: (options: GraphQLOptions) => MiddlewareInterface;
|